mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 991742 part 1. Enter the compartment of the current wrapper before we try to reparent objects. r=bholley
This lets us preserve some invariants about our current compartment matching the scope we want to wrap into.
This commit is contained in:
parent
683d08734c
commit
3b4c77d08b
@ -1428,6 +1428,7 @@ CheckForOutdatedParent(nsINode* aParent, nsINode* aNode)
|
|||||||
|
|
||||||
if (js::GetGlobalForObjectCrossCompartment(existingObj) !=
|
if (js::GetGlobalForObjectCrossCompartment(existingObj) !=
|
||||||
global->GetGlobalJSObject()) {
|
global->GetGlobalJSObject()) {
|
||||||
|
JSAutoCompartment ac(cx, existingObj);
|
||||||
nsresult rv = ReparentWrapper(cx, existingObj);
|
nsresult rv = ReparentWrapper(cx, existingObj);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
}
|
}
|
||||||
|
@ -533,6 +533,7 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
|
|||||||
JS::Rooted<JSObject*> wrapper(cx);
|
JS::Rooted<JSObject*> wrapper(cx);
|
||||||
if ((wrapper = aNode->GetWrapper())) {
|
if ((wrapper = aNode->GetWrapper())) {
|
||||||
if (IsDOMObject(wrapper)) {
|
if (IsDOMObject(wrapper)) {
|
||||||
|
JSAutoCompartment ac(cx, wrapper);
|
||||||
rv = ReparentWrapper(cx, wrapper);
|
rv = ReparentWrapper(cx, wrapper);
|
||||||
} else {
|
} else {
|
||||||
nsIXPConnect *xpc = nsContentUtils::XPConnect();
|
nsIXPConnect *xpc = nsContentUtils::XPConnect();
|
||||||
|
@ -1593,6 +1593,7 @@ nsHTMLDocument::Open(JSContext* cx,
|
|||||||
nsCOMPtr<nsIScriptGlobalObject> newScope(do_QueryReferent(mScopeObject));
|
nsCOMPtr<nsIScriptGlobalObject> newScope(do_QueryReferent(mScopeObject));
|
||||||
JS::Rooted<JSObject*> wrapper(cx, GetWrapper());
|
JS::Rooted<JSObject*> wrapper(cx, GetWrapper());
|
||||||
if (oldScope && newScope != oldScope && wrapper) {
|
if (oldScope && newScope != oldScope && wrapper) {
|
||||||
|
JSAutoCompartment ac(cx, wrapper);
|
||||||
rv = mozilla::dom::ReparentWrapper(cx, wrapper);
|
rv = mozilla::dom::ReparentWrapper(cx, wrapper);
|
||||||
if (rv.Failed()) {
|
if (rv.Failed()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -1668,6 +1668,8 @@ private:
|
|||||||
nsresult
|
nsresult
|
||||||
ReparentWrapper(JSContext* aCx, JS::Handle<JSObject*> aObjArg)
|
ReparentWrapper(JSContext* aCx, JS::Handle<JSObject*> aObjArg)
|
||||||
{
|
{
|
||||||
|
js::AssertSameCompartment(aCx, aObjArg);
|
||||||
|
|
||||||
// Check if we're near the stack limit before we get anywhere near the
|
// Check if we're near the stack limit before we get anywhere near the
|
||||||
// transplanting code.
|
// transplanting code.
|
||||||
JS_CHECK_RECURSION(aCx, return NS_ERROR_FAILURE);
|
JS_CHECK_RECURSION(aCx, return NS_ERROR_FAILURE);
|
||||||
|
@ -1323,6 +1323,7 @@ RescueOrphans(HandleObject obj)
|
|||||||
realParent, wn->GetIdentityObject());
|
realParent, wn->GetIdentityObject());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSAutoCompartment ac(cx, obj);
|
||||||
return ReparentWrapper(cx, obj);
|
return ReparentWrapper(cx, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user