зеркало из https://github.com/mozilla/pjs.git
Bug 673331 - Add identifying information to system compartments. r=mrbkap.
This commit is contained in:
Родитель
e108d74316
Коммит
0d93bbb4b5
|
@ -256,7 +256,8 @@ FeedWriter.prototype = {
|
||||||
__contentSandbox: null,
|
__contentSandbox: null,
|
||||||
get _contentSandbox() {
|
get _contentSandbox() {
|
||||||
if (!this.__contentSandbox)
|
if (!this.__contentSandbox)
|
||||||
this.__contentSandbox = new Cu.Sandbox(this._window);
|
this.__contentSandbox = new Cu.Sandbox(this._window,
|
||||||
|
{sandboxName: 'FeedWriter'});
|
||||||
|
|
||||||
return this.__contentSandbox;
|
return this.__contentSandbox;
|
||||||
},
|
},
|
||||||
|
|
|
@ -59,7 +59,7 @@ window.onload = function() {
|
||||||
gStateObject = JSON.parse(sessionData.value);
|
gStateObject = JSON.parse(sessionData.value);
|
||||||
}
|
}
|
||||||
catch (exJSON) {
|
catch (exJSON) {
|
||||||
var s = new Cu.Sandbox("about:blank");
|
var s = new Cu.Sandbox("about:blank", {sandboxName: 'aboutSessionRestore'});
|
||||||
gStateObject = Cu.evalInSandbox("(" + sessionData.value + ")", s);
|
gStateObject = Cu.evalInSandbox("(" + sessionData.value + ")", s);
|
||||||
// If we couldn't parse the string with JSON.parse originally, make sure
|
// If we couldn't parse the string with JSON.parse originally, make sure
|
||||||
// that the value in the textbox will be parsable.
|
// that the value in the textbox will be parsable.
|
||||||
|
|
|
@ -135,7 +135,7 @@ SessionStartup.prototype = {
|
||||||
this._initialState = JSON.parse(iniString);
|
this._initialState = JSON.parse(iniString);
|
||||||
}
|
}
|
||||||
catch (exJSON) {
|
catch (exJSON) {
|
||||||
var s = new Cu.Sandbox("about:blank");
|
var s = new Cu.Sandbox("about:blank", {sandboxName: 'nsSessionStartup'});
|
||||||
this._initialState = Cu.evalInSandbox("(" + iniString + ")", s);
|
this._initialState = Cu.evalInSandbox("(" + iniString + ")", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,8 @@ var Scratchpad = {
|
||||||
this._previousLocation != this.gBrowser.contentWindow.location.href) {
|
this._previousLocation != this.gBrowser.contentWindow.location.href) {
|
||||||
let contentWindow = this.gBrowser.selectedBrowser.contentWindow;
|
let contentWindow = this.gBrowser.selectedBrowser.contentWindow;
|
||||||
this._contentSandbox = new Cu.Sandbox(contentWindow,
|
this._contentSandbox = new Cu.Sandbox(contentWindow,
|
||||||
{ sandboxPrototype: contentWindow, wantXrays: false });
|
{ sandboxPrototype: contentWindow, wantXrays: false,
|
||||||
|
sandboxName: 'scratchpad-content'});
|
||||||
|
|
||||||
this._previousBrowserWindow = this.browserWindow;
|
this._previousBrowserWindow = this.browserWindow;
|
||||||
this._previousBrowser = this.gBrowser.selectedBrowser;
|
this._previousBrowser = this.gBrowser.selectedBrowser;
|
||||||
|
@ -211,7 +212,8 @@ var Scratchpad = {
|
||||||
if (!this._chromeSandbox ||
|
if (!this._chromeSandbox ||
|
||||||
this.browserWindow != this._previousBrowserWindow) {
|
this.browserWindow != this._previousBrowserWindow) {
|
||||||
this._chromeSandbox = new Cu.Sandbox(this.browserWindow,
|
this._chromeSandbox = new Cu.Sandbox(this.browserWindow,
|
||||||
{ sandboxPrototype: this.browserWindow, wantXrays: false });
|
{ sandboxPrototype: this.browserWindow, wantXrays: false,
|
||||||
|
sandboxName: 'scratchpad-chrome'});
|
||||||
|
|
||||||
this._previousBrowserWindow = this.browserWindow;
|
this._previousBrowserWindow = this.browserWindow;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2073,7 +2073,8 @@ nsXPConnect::CreateSandbox(JSContext *cx, nsIPrincipal *principal,
|
||||||
jsval rval = JSVAL_VOID;
|
jsval rval = JSVAL_VOID;
|
||||||
AUTO_MARK_JSVAL(ccx, &rval);
|
AUTO_MARK_JSVAL(ccx, &rval);
|
||||||
|
|
||||||
nsresult rv = xpc_CreateSandboxObject(cx, &rval, principal, NULL, false);
|
nsresult rv = xpc_CreateSandboxObject(cx, &rval, principal, NULL, false,
|
||||||
|
EmptyCString());
|
||||||
NS_ASSERTION(NS_FAILED(rv) || !JSVAL_IS_PRIMITIVE(rval),
|
NS_ASSERTION(NS_FAILED(rv) || !JSVAL_IS_PRIMITIVE(rval),
|
||||||
"Bad return value from xpc_CreateSandboxObject()!");
|
"Bad return value from xpc_CreateSandboxObject()!");
|
||||||
|
|
||||||
|
|
|
@ -3153,7 +3153,7 @@ NS_IMPL_ISUPPORTS0(Identity)
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
xpc_CreateSandboxObject(JSContext * cx, jsval * vp, nsISupports *prinOrSop, JSObject *proto,
|
xpc_CreateSandboxObject(JSContext * cx, jsval * vp, nsISupports *prinOrSop, JSObject *proto,
|
||||||
bool wantXrays)
|
bool wantXrays, const nsACString &sandboxName)
|
||||||
{
|
{
|
||||||
// Create the sandbox global object
|
// Create the sandbox global object
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
|
@ -3240,6 +3240,10 @@ xpc_CreateSandboxObject(JSContext * cx, jsval * vp, nsISupports *prinOrSop, JSOb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xpc::CompartmentPrivate *compartmentPrivate =
|
||||||
|
static_cast<xpc::CompartmentPrivate*>(JS_GetCompartmentPrivate(cx, compartment));
|
||||||
|
compartmentPrivate->location = sandboxName;
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3351,6 +3355,8 @@ nsXPCComponents_utils_Sandbox::CallOrConstruct(nsIXPConnectWrappedNative *wrappe
|
||||||
|
|
||||||
JSObject *proto = nsnull;
|
JSObject *proto = nsnull;
|
||||||
bool wantXrays = true;
|
bool wantXrays = true;
|
||||||
|
nsCString sandboxName;
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
if (!JSVAL_IS_OBJECT(argv[1]))
|
if (!JSVAL_IS_OBJECT(argv[1]))
|
||||||
return ThrowAndFail(NS_ERROR_INVALID_ARG, cx, _retval);
|
return ThrowAndFail(NS_ERROR_INVALID_ARG, cx, _retval);
|
||||||
|
@ -3382,9 +3388,26 @@ nsXPCComponents_utils_Sandbox::CallOrConstruct(nsIXPConnectWrappedNative *wrappe
|
||||||
|
|
||||||
wantXrays = JSVAL_TO_BOOLEAN(option);
|
wantXrays = JSVAL_TO_BOOLEAN(option);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!JS_HasProperty(cx, optionsObject, "sandboxName", &found))
|
||||||
|
return NS_ERROR_INVALID_ARG;
|
||||||
|
|
||||||
|
if (found) {
|
||||||
|
if (!JS_GetProperty(cx, optionsObject, "sandboxName", &option) ||
|
||||||
|
!JSVAL_IS_STRING(option)) {
|
||||||
|
return ThrowAndFail(NS_ERROR_INVALID_ARG, cx, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *tmp = JS_EncodeString(cx, JSVAL_TO_STRING(option));
|
||||||
|
if (!tmp) {
|
||||||
|
return ThrowAndFail(NS_ERROR_INVALID_ARG, cx, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
sandboxName.Adopt(tmp, strlen(tmp));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = xpc_CreateSandboxObject(cx, vp, prinOrSop, proto, wantXrays);
|
rv = xpc_CreateSandboxObject(cx, vp, prinOrSop, proto, wantXrays, sandboxName);
|
||||||
|
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
return ThrowAndFail(rv, cx, _retval);
|
return ThrowAndFail(rv, cx, _retval);
|
||||||
|
|
|
@ -1578,22 +1578,30 @@ CompartmentStats::CompartmentStats(JSContext *cx, JSCompartment *c)
|
||||||
{
|
{
|
||||||
if(c->principals->codebase)
|
if(c->principals->codebase)
|
||||||
{
|
{
|
||||||
// A hack: replace forward slashes with '\\' so they aren't
|
|
||||||
// treated as path separators. Users of the reporters
|
|
||||||
// (such as about:memory) have to undo this change.
|
|
||||||
name.Assign(c->principals->codebase);
|
name.Assign(c->principals->codebase);
|
||||||
name.ReplaceChar('/', '\\');
|
|
||||||
|
|
||||||
// If it's the system compartment, append the address.
|
// If it's the system compartment, append the address.
|
||||||
// This means that multiple system compartments (and there
|
// This means that multiple system compartments (and there
|
||||||
// can be many) can be distinguished.
|
// can be many) can be distinguished.
|
||||||
if(c->isSystemCompartment)
|
if(c->isSystemCompartment)
|
||||||
{
|
{
|
||||||
|
if (c->data &&
|
||||||
|
!((xpc::CompartmentPrivate*)c->data)->location.IsEmpty())
|
||||||
|
{
|
||||||
|
name.AppendLiteral(", ");
|
||||||
|
name.Append(((xpc::CompartmentPrivate*)c->data)->location);
|
||||||
|
}
|
||||||
|
|
||||||
// ample; 64-bit address max is 18 chars
|
// ample; 64-bit address max is 18 chars
|
||||||
static const int maxLength = 31;
|
static const int maxLength = 31;
|
||||||
nsPrintfCString address(maxLength, ", 0x%llx", PRUint64(c));
|
nsPrintfCString address(maxLength, ", 0x%llx", PRUint64(c));
|
||||||
name.Append(address);
|
name.Append(address);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A hack: replace forward slashes with '\\' so they aren't
|
||||||
|
// treated as path separators. Users of the reporters
|
||||||
|
// (such as about:memory) have to undo this change.
|
||||||
|
name.ReplaceChar('/', '\\');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -4315,7 +4315,7 @@ xpc_GetJSPrivate(JSObject *obj)
|
||||||
// and used.
|
// and used.
|
||||||
nsresult
|
nsresult
|
||||||
xpc_CreateSandboxObject(JSContext * cx, jsval * vp, nsISupports *prinOrSop,
|
xpc_CreateSandboxObject(JSContext * cx, jsval * vp, nsISupports *prinOrSop,
|
||||||
JSObject *proto, bool preferXray);
|
JSObject *proto, bool preferXray, const nsACString &sandboxName);
|
||||||
|
|
||||||
// Helper for evaluating scripts in a sandbox object created with
|
// Helper for evaluating scripts in a sandbox object created with
|
||||||
// xpc_CreateSandboxObject(). The caller is responsible of ensuring
|
// xpc_CreateSandboxObject(). The caller is responsible of ensuring
|
||||||
|
@ -4394,6 +4394,7 @@ struct CompartmentPrivate
|
||||||
JSObject2JSObjectMap *waiverWrapperMap;
|
JSObject2JSObjectMap *waiverWrapperMap;
|
||||||
// NB: we don't want this map to hold a strong reference to the wrapper.
|
// NB: we don't want this map to hold a strong reference to the wrapper.
|
||||||
nsDataHashtable<nsPtrHashKey<XPCWrappedNative>, JSObject *> *expandoMap;
|
nsDataHashtable<nsPtrHashKey<XPCWrappedNative>, JSObject *> *expandoMap;
|
||||||
|
nsCString location;
|
||||||
|
|
||||||
bool RegisterExpandoObject(XPCWrappedNative *wn, JSObject *expando) {
|
bool RegisterExpandoObject(XPCWrappedNative *wn, JSObject *expando) {
|
||||||
if (!expandoMap) {
|
if (!expandoMap) {
|
||||||
|
|
|
@ -75,7 +75,8 @@ nsProxyAutoConfig.prototype = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// allocate a fresh Sandbox to clear global scope for new PAC script
|
// allocate a fresh Sandbox to clear global scope for new PAC script
|
||||||
this._sandBox = new Components.utils.Sandbox(pacURI);
|
this._sandBox = new Components.utils.Sandbox(pacURI,
|
||||||
|
{sandboxName: 'nsProxyAutoConfig'});
|
||||||
Components.utils.evalInSandbox(pacUtils, this._sandBox);
|
Components.utils.evalInSandbox(pacUtils, this._sandBox);
|
||||||
|
|
||||||
// add predefined functions to pac
|
// add predefined functions to pac
|
||||||
|
|
|
@ -3461,13 +3461,18 @@ var XPIProvider = {
|
||||||
|
|
||||||
let principal = Cc["@mozilla.org/systemprincipal;1"].
|
let principal = Cc["@mozilla.org/systemprincipal;1"].
|
||||||
createInstance(Ci.nsIPrincipal);
|
createInstance(Ci.nsIPrincipal);
|
||||||
this.bootstrapScopes[aId] = new Components.utils.Sandbox(principal);
|
|
||||||
|
|
||||||
if (!aFile.exists()) {
|
if (!aFile.exists()) {
|
||||||
|
this.bootstrapScopes[aId] = new Components.utils.Sandbox(principal,
|
||||||
|
{sandboxName: aFile.path});
|
||||||
ERROR("Attempted to load bootstrap scope from missing directory " + bootstrap.path);
|
ERROR("Attempted to load bootstrap scope from missing directory " + bootstrap.path);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let uri = getURIForResourceInFile(aFile, "bootstrap.js").spec;
|
||||||
|
this.bootstrapScopes[aId] = new Components.utils.Sandbox(principal,
|
||||||
|
{sandboxName: uri});
|
||||||
|
|
||||||
let loader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
|
let loader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
|
||||||
createInstance(Ci.mozIJSSubScriptLoader);
|
createInstance(Ci.mozIJSSubScriptLoader);
|
||||||
|
|
||||||
|
@ -3475,8 +3480,7 @@ var XPIProvider = {
|
||||||
// As we don't want our caller to control the JS version used for the
|
// As we don't want our caller to control the JS version used for the
|
||||||
// bootstrap file, we run loadSubScript within the context of the
|
// bootstrap file, we run loadSubScript within the context of the
|
||||||
// sandbox with the latest JS version set explicitly.
|
// sandbox with the latest JS version set explicitly.
|
||||||
this.bootstrapScopes[aId].__SCRIPT_URI_SPEC__ =
|
this.bootstrapScopes[aId].__SCRIPT_URI_SPEC__ = uri;
|
||||||
getURIForResourceInFile(aFile, "bootstrap.js").spec;
|
|
||||||
Components.utils.evalInSandbox(
|
Components.utils.evalInSandbox(
|
||||||
"Components.classes['@mozilla.org/moz/jssubscript-loader;1'] \
|
"Components.classes['@mozilla.org/moz/jssubscript-loader;1'] \
|
||||||
.createInstance(Components.interfaces.mozIJSSubScriptLoader) \
|
.createInstance(Components.interfaces.mozIJSSubScriptLoader) \
|
||||||
|
|
Загрузка…
Ссылка в новой задаче