webExtensionTargetPrototype._shouldAddNewGlobalAsDebuggee = function(newGlobal) { const global = unwrapDebuggerObjectGlobal(newGlobal); if (global instanceof Ci.nsIDOMWindow) { try { global.document; } catch (e) { // The global might be a sandbox with a window object in its proto chain. If the // window navigated away since the sandbox was created, it can throw a security // exception during this property check as the sandbox no longer has access to // its own proto. return false; } // Change top level document as a simulated frame switching. if (global.document.ownerGlobal && this.isExtensionWindow(global)) { this._onNewExtensionWindow(global.document.ownerGlobal); } return global.document.ownerGlobal && this.isExtensionWindowDescendent(global.document.ownerGlobal); } try { // This will fail for non-Sandbox objects, hence the try-catch block. const metadata = Cu.getSandboxMetadata(global); if (metadata) { return metadata.addonID === this.addonId; } } catch (e) { // Unable to retrieve the sandbox metadata. } return false; };
dbg.onNewGlobalObject = function(global) { dbg.onNewGlobalObject = undefined; let metadata = Cu.getSandboxMetadata(global.unsafeDereference()); assert.ok(metadata, 'this global has attached metadata'); assert.equal(metadata.URI, uri + 'main.js', 'URI is set properly'); assert.equal(metadata.addonID, addonID, 'addon ID is set'); }
assert.ok(globalDebuggees.some(function(global) { try { let metadata = Cu.getSandboxMetadata(global.unsafeDereference()); return metadata && metadata.addonID && metadata.SDKContentScript && metadata['inner-window-id'] == getInnerId(win); } catch(e) { // Some of the globals might not be Sandbox instances and thus // will cause getSandboxMetadata to fail. return false; } }), "one of the globals is a content script");
_shouldAddNewGlobalAsDebuggee: function(givenGlobal) { const global = unwrapDebuggerObjectGlobal(givenGlobal); try { // This will fail for non-Sandbox objects, hence the try-catch block. const metadata = Cu.getSandboxMetadata(global); if (metadata) { return metadata.addonID === this.id; } } catch (e) { // ignore } if (global instanceof Ci.nsIDOMWindow) { return global.document.nodePrincipal.addonId == this.id; } return false; },
_shouldAddNewGlobalAsDebuggee: function (aGlobal) { const global = unwrapDebuggerObjectGlobal(aGlobal); try { // This will fail for non-Sandbox objects, hence the try-catch block. let metadata = Cu.getSandboxMetadata(global); if (metadata) { return metadata.addonID === this.id; } } catch (e) {} if (global instanceof Ci.nsIDOMWindow) { let id = {}; if (mapURIToAddonID(global.document.documentURIObject, id)) { return id.value === this.id; } return false; } // Check the global for a __URI__ property and then try to map that to an // add-on let uridescriptor = aGlobal.getOwnPropertyDescriptor("__URI__"); if (uridescriptor && "value" in uridescriptor && uridescriptor.value) { let uri; try { uri = Services.io.newURI(uridescriptor.value, null, null); } catch (e) { DevToolsUtils.reportException( "BrowserAddonActor.prototype._shouldAddNewGlobalAsDebuggee", new Error("Invalid URI: " + uridescriptor.value) ); return false; } let id = {}; if (mapURIToAddonID(uri, id)) { return id.value === this.id; } } return false; },