# HG changeset patch # User Andrew Swan # Date 1510212203 28800 # Wed Nov 08 23:23:23 2017 -0800 # Node ID 2c99f80acc977d7f1f65815adad059632660cd10 # Parent f98c002b37df85133d165a67b92489f7370f8221 Bug 1396399 Test for content scripts and activeTab permission MozReview-Commit-ID: DyVtSuA9voI diff --git a/testing/specialpowers/content/SpecialPowersObserver.jsm b/testing/specialpowers/content/SpecialPowersObserver.jsm --- a/testing/specialpowers/content/SpecialPowersObserver.jsm +++ b/testing/specialpowers/content/SpecialPowersObserver.jsm @@ -83,16 +83,17 @@ SpecialPowersObserver.prototype._loadFra this._messageManager.addMessageListener("SPImportInMainProcess", this); this._messageManager.addMessageListener("SPChromeScriptMessage", this); this._messageManager.addMessageListener("SPQuotaManager", this); this._messageManager.addMessageListener("SPSetTestPluginEnabledState", this); this._messageManager.addMessageListener("SPLoadExtension", this); this._messageManager.addMessageListener("SPStartupExtension", this); this._messageManager.addMessageListener("SPUnloadExtension", this); this._messageManager.addMessageListener("SPExtensionMessage", this); + this._messageManager.addMessageListener("SPExtensionGrantActiveTab", this); this._messageManager.addMessageListener("SPCleanUpSTSData", this); this._messageManager.addMessageListener("SPRequestDumpCoverageCounters", this); this._messageManager.addMessageListener("SPRequestResetCoverageCounters", this); this._messageManager.loadFrameScript(CHILD_LOGGER_SCRIPT, true); this._messageManager.loadFrameScript(CHILD_SCRIPT_API, true); this._messageManager.loadFrameScript(CHILD_SCRIPT, true); this._isFrameScriptLoaded = true; @@ -154,16 +155,17 @@ SpecialPowersObserver.prototype.uninit = this._messageManager.removeMessageListener("SPImportInMainProcess", this); this._messageManager.removeMessageListener("SPChromeScriptMessage", this); this._messageManager.removeMessageListener("SPQuotaManager", this); this._messageManager.removeMessageListener("SPSetTestPluginEnabledState", this); this._messageManager.removeMessageListener("SPLoadExtension", this); this._messageManager.removeMessageListener("SPStartupExtension", this); this._messageManager.removeMessageListener("SPUnloadExtension", this); this._messageManager.removeMessageListener("SPExtensionMessage", this); + this._messageManager.removeMessageListener("SPExtensionGrantActiveTab", this); this._messageManager.removeMessageListener("SPCleanUpSTSData", this); this._messageManager.removeMessageListener("SPRequestDumpCoverageCounters", this); this._messageManager.removeMessageListener("SPRequestResetCoverageCounters", this); this._messageManager.removeDelayedFrameScript(CHILD_LOGGER_SCRIPT); this._messageManager.removeDelayedFrameScript(CHILD_SCRIPT_API); this._messageManager.removeDelayedFrameScript(CHILD_SCRIPT); this._isFrameScriptLoaded = false; diff --git a/testing/specialpowers/content/SpecialPowersObserverAPI.js b/testing/specialpowers/content/SpecialPowersObserverAPI.js --- a/testing/specialpowers/content/SpecialPowersObserverAPI.js +++ b/testing/specialpowers/content/SpecialPowersObserverAPI.js @@ -639,16 +639,23 @@ SpecialPowersObserverAPI.prototype = { case "SPExtensionMessage": { let id = aMessage.data.id; let extension = this._extensions.get(id); extension.testMessage(...aMessage.data.args); return undefined; } + case "SPExtensionGrantActiveTab": { + let {id, tabId} = aMessage.data; + let {tabManager} = this._extensions.get(id); + tabManager.addActiveTabPermission(tabManager.get(tabId).nativeTab); + return undefined; + } + case "SPUnloadExtension": { let id = aMessage.data.id; let extension = this._extensions.get(id); this._extensions.delete(id); let done = () => this._sendReply(aMessage, "SPExtensionMessage", {id, type: "extensionUnloaded", args: []}); extension.shutdown().then(done, done); return undefined; } diff --git a/testing/specialpowers/content/specialpowers.js b/testing/specialpowers/content/specialpowers.js --- a/testing/specialpowers/content/specialpowers.js +++ b/testing/specialpowers/content/specialpowers.js @@ -47,17 +47,18 @@ function SpecialPowers(window) { "SpecialPowers.Quit", "SpecialPowers.CreateFiles", "SpecialPowers.RemoveFiles", "SPPingService", "SPLoadExtension", "SPProcessCrashManagerWait", "SPStartupExtension", "SPUnloadExtension", - "SPExtensionMessage"]; + "SPExtensionMessage", + "SPExtensionGrantActiveTab"]; addMessageListener("SPPingService", this._messageListener); addMessageListener("SpecialPowers.FilesCreated", this._messageListener); addMessageListener("SpecialPowers.FilesError", this._messageListener); let self = this; Services.obs.addObserver(function onInnerWindowDestroyed(subject, topic, data) { var id = subject.QueryInterface(Components.interfaces.nsISupportsPRUint64).data; if (self._windowID === id) { Services.obs.removeObserver(onInnerWindowDestroyed, "inner-window-destroyed"); diff --git a/testing/specialpowers/content/specialpowersAPI.js b/testing/specialpowers/content/specialpowersAPI.js --- a/testing/specialpowers/content/specialpowersAPI.js +++ b/testing/specialpowers/content/specialpowersAPI.js @@ -2027,16 +2027,20 @@ SpecialPowersAPI.prototype = { state = "unloading"; sp._sendAsyncMessage("SPUnloadExtension", {id}); return unloadPromise; }, sendMessage(...args) { sp._sendAsyncMessage("SPExtensionMessage", {id, args}); }, + + grantActiveTab(tabId) { + sp._sendAsyncMessage("SPExtensionGrantActiveTab", {id, tabId}); + }, }; this._sendAsyncMessage("SPLoadExtension", {ext, id}); let listener = (msg) => { if (msg.data.id == id) { if (msg.data.type == "extensionStarted") { state = "running"; diff --git a/toolkit/components/extensions/test/mochitest/file_contentscript_activeTab.html b/toolkit/components/extensions/test/mochitest/file_contentscript_activeTab.html new file mode 100644 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_contentscript_activeTab.html @@ -0,0 +1,10 @@ + + + + + + + +