mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 834707 - Disable SOWs for remote XUL domains. r=bz
We have to do this if we want to proceed with eliminating SOWs entirely. Given the other restrictions around remote XUL, I don't think this is a problem. Note that we shouldn't need any special handling in the wrapper reparenting paths, because those all depend on whether a SOW was there already. So that would only be an issue if it were possible to adoptNode from a non-remote-XUL domain into a remote-XUL domain, which thankfully can't happen.
This commit is contained in:
parent
9de959b56d
commit
9a1a16ea75
@ -2396,7 +2396,8 @@ nsINode::WrapObject(JSContext *aCx, JS::Handle<JSObject*> aScope)
|
|||||||
|
|
||||||
JSObject* obj = WrapNode(aCx, aScope);
|
JSObject* obj = WrapNode(aCx, aScope);
|
||||||
if (obj && ChromeOnlyAccess() &&
|
if (obj && ChromeOnlyAccess() &&
|
||||||
!nsContentUtils::IsSystemPrincipal(NodePrincipal()))
|
!nsContentUtils::IsSystemPrincipal(NodePrincipal()) &&
|
||||||
|
xpc::AllowXBLScope(js::GetContextCompartment(aCx)))
|
||||||
{
|
{
|
||||||
// Create a new wrapper and cache it.
|
// Create a new wrapper and cache it.
|
||||||
JSAutoCompartment ac(aCx, obj);
|
JSAutoCompartment ac(aCx, obj);
|
||||||
|
@ -2075,7 +2075,10 @@ XPCWrappedNative::GetSameCompartmentSecurityWrapper(JSContext *cx)
|
|||||||
// Check the possibilities. Note that we need to check for null in each
|
// Check the possibilities. Note that we need to check for null in each
|
||||||
// case in order to distinguish between the 'no need for wrapper' and
|
// case in order to distinguish between the 'no need for wrapper' and
|
||||||
// 'wrapping failed' cases.
|
// 'wrapping failed' cases.
|
||||||
if (NeedsSOW()) {
|
//
|
||||||
|
// NB: We don't make SOWs for remote XUL domains where XBL scopes are
|
||||||
|
// disallowed.
|
||||||
|
if (NeedsSOW() && xpc::AllowXBLScope(js::GetContextCompartment(cx))) {
|
||||||
wrapper = xpc::WrapperFactory::WrapSOWObject(cx, flat);
|
wrapper = xpc::WrapperFactory::WrapSOWObject(cx, flat);
|
||||||
if (!wrapper)
|
if (!wrapper)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -392,11 +392,13 @@ WrapperFactory::Rewrap(JSContext *cx, HandleObject existing, HandleObject obj,
|
|||||||
wrapper = &ChromeObjectWrapper::singleton;
|
wrapper = &ChromeObjectWrapper::singleton;
|
||||||
|
|
||||||
// If content is accessing a Components object or NAC, we need a special filter,
|
// If content is accessing a Components object or NAC, we need a special filter,
|
||||||
// even if the object is same origin.
|
// even if the object is same origin. Note that we allow access to NAC for
|
||||||
|
// remote-XUL whitelisted domains, since they don't have XBL scopes.
|
||||||
} else if (IsComponentsObject(obj) && !AccessCheck::isChrome(target)) {
|
} else if (IsComponentsObject(obj) && !AccessCheck::isChrome(target)) {
|
||||||
wrapper = &FilteringWrapper<CrossCompartmentSecurityWrapper,
|
wrapper = &FilteringWrapper<CrossCompartmentSecurityWrapper,
|
||||||
ComponentsObjectPolicy>::singleton;
|
ComponentsObjectPolicy>::singleton;
|
||||||
} else if (AccessCheck::needsSystemOnlyWrapper(obj) &&
|
} else if (AccessCheck::needsSystemOnlyWrapper(obj) &&
|
||||||
|
xpc::AllowXBLScope(target) &&
|
||||||
!(targetIsChrome || (targetSubsumesOrigin && nsContentUtils::IsCallerXBL())))
|
!(targetIsChrome || (targetSubsumesOrigin && nsContentUtils::IsCallerXBL())))
|
||||||
{
|
{
|
||||||
wrapper = &FilteringWrapper<CrossCompartmentSecurityWrapper,
|
wrapper = &FilteringWrapper<CrossCompartmentSecurityWrapper,
|
||||||
@ -563,6 +565,11 @@ WrapperFactory::WrapSOWObject(JSContext *cx, JSObject *objArg)
|
|||||||
{
|
{
|
||||||
RootedObject obj(cx, objArg);
|
RootedObject obj(cx, objArg);
|
||||||
RootedObject proto(cx);
|
RootedObject proto(cx);
|
||||||
|
|
||||||
|
// If we're not allowing XBL scopes, that means we're running as a remote
|
||||||
|
// XUL domain, in which we can't have SOWs. We should never be called in
|
||||||
|
// that case.
|
||||||
|
MOZ_ASSERT(xpc::AllowXBLScope(js::GetContextCompartment(cx)));
|
||||||
if (!JS_GetPrototype(cx, obj, proto.address()))
|
if (!JS_GetPrototype(cx, obj, proto.address()))
|
||||||
return NULL;
|
return NULL;
|
||||||
JSObject *wrapperObj =
|
JSObject *wrapperObj =
|
||||||
|
Loading…
Reference in New Issue
Block a user