зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1667455 - Part 1-b: Define Services in Sandbox with wantComponents. r=kmag
Differential Revision: https://phabricator.services.mozilla.com/D150924
This commit is contained in:
Родитель
d3780ba56a
Коммит
ad68a98f88
|
@ -1443,9 +1443,15 @@ nsresult xpc::CreateSandboxObject(JSContext* cx, MutableHandleValue vp,
|
|||
}
|
||||
|
||||
bool allowComponents = principal->IsSystemPrincipal();
|
||||
if (options.wantComponents && allowComponents &&
|
||||
!ObjectScope(sandbox)->AttachComponentsObject(cx))
|
||||
return NS_ERROR_XPC_UNEXPECTED;
|
||||
if (options.wantComponents && allowComponents) {
|
||||
if (!ObjectScope(sandbox)->AttachComponentsObject(cx)) {
|
||||
return NS_ERROR_XPC_UNEXPECTED;
|
||||
}
|
||||
|
||||
if (!ObjectScope(sandbox)->AttachJSServices(cx)) {
|
||||
return NS_ERROR_XPC_UNEXPECTED;
|
||||
}
|
||||
}
|
||||
|
||||
if (!XPCNativeWrapper::AttachNewConstructorObject(cx, sandbox)) {
|
||||
return NS_ERROR_XPC_UNEXPECTED;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "js/Object.h" // JS::GetCompartment
|
||||
#include "js/PropertyAndElement.h" // JS_DefineProperty, JS_DefinePropertyById
|
||||
#include "js/RealmIterators.h"
|
||||
#include "mozJSModuleLoader.h"
|
||||
|
||||
#include "mozilla/dom/BindingUtils.h"
|
||||
|
||||
|
@ -170,6 +171,11 @@ bool XPCWrappedNativeScope::AttachComponentsObject(JSContext* aCx) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool XPCWrappedNativeScope::AttachJSServices(JSContext* aCx) {
|
||||
RootedObject global(aCx, CurrentGlobalOrNull(aCx));
|
||||
return mozJSModuleLoader::Get()->DefineJSServices(aCx, global);
|
||||
}
|
||||
|
||||
bool XPCWrappedNativeScope::XBLScopeStateMatches(nsIPrincipal* aPrincipal) {
|
||||
return mAllowContentXBLScope ==
|
||||
!RemoteXULForbidsXBLScopeForPrincipal(aPrincipal);
|
||||
|
|
|
@ -825,6 +825,8 @@ class XPCWrappedNativeScope final
|
|||
|
||||
bool AttachComponentsObject(JSContext* aCx);
|
||||
|
||||
bool AttachJSServices(JSContext* aCx);
|
||||
|
||||
// Returns the JS object reflection of the Components object.
|
||||
bool GetComponentsJSObject(JSContext* cx, JS::MutableHandleObject obj);
|
||||
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
function run_test() {
|
||||
var sb = Cu.Sandbox(this, {wantComponents: false});
|
||||
var sb;
|
||||
|
||||
var rv = Cu.evalInSandbox("this.Components", sb);
|
||||
Assert.equal(rv, undefined);
|
||||
}
|
||||
sb = Cu.Sandbox(this, {wantComponents: false});
|
||||
Assert.equal(Cu.evalInSandbox("this.Components", sb), undefined);
|
||||
Assert.equal(Cu.evalInSandbox("this.Services", sb), undefined);
|
||||
|
||||
sb = Cu.Sandbox(this, {wantComponents: true});
|
||||
Assert.equal(Cu.evalInSandbox("typeof this.Components", sb), "object");
|
||||
Assert.equal(Cu.evalInSandbox("typeof this.Services", sb), "object");
|
||||
|
||||
// wantComponents defaults to true.
|
||||
sb = Cu.Sandbox(this, {});
|
||||
Assert.equal(Cu.evalInSandbox("typeof this.Components", sb), "object");
|
||||
Assert.equal(Cu.evalInSandbox("typeof this.Services", sb), "object");
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче