[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor-browser/esr24] Bug 912322 - Update semantics of IsChromeOrXBL to return true for remote XUL. r=bz
commit c13c8f0e40eaeed7a7f31f1f7fdbe48001ce3671
Author: Bobby Holley <bobbyholley@xxxxxxxxx>
Date: Mon Feb 10 14:07:27 2014 -0800
Bug 912322 - Update semantics of IsChromeOrXBL to return true for remote XUL. r=bz
This brings us into alignment with nsContentUtils::IsCallerXBL(). We also take
the opportunity to clean up some comments and invariants that changed with the
removal of the XBL bit.
---
js/xpconnect/src/XPCWrappedNativeScope.cpp | 9 +++++++++
js/xpconnect/src/nsXPConnect.cpp | 13 ++++++++++---
js/xpconnect/src/xpcprivate.h | 17 +++++++----------
3 files changed, 26 insertions(+), 13 deletions(-)
diff --git a/js/xpconnect/src/XPCWrappedNativeScope.cpp b/js/xpconnect/src/XPCWrappedNativeScope.cpp
index c3a0780..223fcc4 100644
--- a/js/xpconnect/src/XPCWrappedNativeScope.cpp
+++ b/js/xpconnect/src/XPCWrappedNativeScope.cpp
@@ -266,6 +266,15 @@ XPCWrappedNativeScope::EnsureXBLScope(JSContext *cx)
return mXBLScope;
}
+bool
+XPCWrappedNativeScope::AllowXBLScope()
+{
+ // We only disallow XBL scopes in remote XUL situations.
+ MOZ_ASSERT_IF(!mAllowXBLScope,
+ nsContentUtils::AllowXULXBLForPrincipal(GetPrincipal()));
+ return mAllowXBLScope;
+}
+
namespace xpc {
JSObject *GetXBLScope(JSContext *cx, JSObject *contentScopeArg)
{
diff --git a/js/xpconnect/src/nsXPConnect.cpp b/js/xpconnect/src/nsXPConnect.cpp
index 12a8fd0..67d4fb1 100644
--- a/js/xpconnect/src/nsXPConnect.cpp
+++ b/js/xpconnect/src/nsXPConnect.cpp
@@ -1713,9 +1713,16 @@ namespace dom {
bool
IsChromeOrXBL(JSContext* cx, JSObject* /* unused */)
{
- JSCompartment* compartment = js::GetContextCompartment(cx);
- return AccessCheck::isChrome(compartment) ||
- IsXBLScope(compartment);
+ MOZ_ASSERT(NS_IsMainThread());
+ JSCompartment* c = js::GetContextCompartment(cx);
+
+ // For remote XUL, we run XBL in the XUL scope. Given that we care about
+ // compat and not security for remote XUL, we just always claim to be XBL.
+ //
+ // Note that, for performance, we don't check AllowXULXBLForPrincipal here,
+ // and instead rely on the fact that AllowXBLScope() only returns false in
+ // remote XUL situations.
+ return AccessCheck::isChrome(c) || IsXBLScope(c) || !AllowXBLScope(c);
}
} // namespace dom
diff --git a/js/xpconnect/src/xpcprivate.h b/js/xpconnect/src/xpcprivate.h
index b63c634..af1cf89 100644
--- a/js/xpconnect/src/xpcprivate.h
+++ b/js/xpconnect/src/xpcprivate.h
@@ -1435,7 +1435,7 @@ public:
nsAutoPtr<JSObject2JSObjectMap> mWaiverWrapperMap;
bool IsXBLScope() { return mIsXBLScope; }
- bool AllowXBLScope() { return mAllowXBLScope; }
+ bool AllowXBLScope();
bool UseXBLScope() { return mUseXBLScope; }
protected:
@@ -1472,20 +1472,17 @@ private:
bool mIsXBLScope;
- // There are certain cases where we explicitly disallow XBL scopes: they
- // can be prefed off, or we might be running in a remote XUL domain where
- // we want to run all XBL in content to maintain compat. We separately
+ // For remote XUL domains, we run all XBL in the content scope for compat
+ // reasons (though we sometimes pref this off for automation). We separately
// track the result of this decision (mAllowXBLScope), from the decision
// of whether to actually _use_ an XBL scope (mUseXBLScope), which depends
// on the type of global and whether the compartment is system principal
// or not.
//
- // This distinction is useful primarily because it tells us whether we
- // can infer the XBL-ness of a caller by checking that the caller is
- // running in an XBL scope, or whether we need to check the XBL bit on the
- // script. The XBL bit is nasty, so we want to consult it only if we
- // absolutely have to, which should generally happen only in unsupported
- // pref configurations.
+ // This distinction is useful primarily because, if true, we know that we
+ // have no way of distinguishing XBL script from content script for the
+ // given scope. In these (unsupported) situations, we just always claim to
+ // be XBL.
bool mAllowXBLScope;
bool mUseXBLScope;
};
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits