# HG changeset patch # User Tomislav Jovanovic # Date 1480280230 -3600 # Sun Nov 27 21:57:10 2016 +0100 # Node ID e3c394b708ff2b8a37e0a91cee2aa4394daca5c0 # Parent 13ff309b0f41c1e858f16f45e4b96327dd426dfd Bug 1319070 - Test matching against the principal for data: URIs MozReview-Commit-ID: BB6UfZ6qjKr diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js --- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js +++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js @@ -137,16 +137,88 @@ add_task(function* testBadPermissions() await browser.pageAction.show(tab.id); }, }); yield BrowserTestUtils.removeTab(tab2); yield BrowserTestUtils.removeTab(tab1); }); +add_task(function* testMatchDataURI() { + const target = ExtensionTestUtils.loadExtension({ + files: { + "page.html": ` + + + + + `, + "page.js": function() { + browser.test.onMessage.addListener((msg, url) => { + window.location.href = url; + }); + }, + }, + background() { + browser.tabs.create({active: true, url: browser.runtime.getURL("page.html")}); + }, + }); + + const scripts = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["", "webNavigation"], + }, + background() { + browser.webNavigation.onCompleted.addListener(({url, frameId}) => { + browser.test.log(`Document loading complete: ${url}`); + if (frameId === 0) { + browser.test.sendMessage("tab-ready", url); + } + }); + + browser.test.onMessage.addListener(msg => { + browser.tabs.executeScript({ + code: "location.href;", + allFrames: true, + }).then(([result]) => { + browser.test.fail(`Should not have matched ${result}`); + browser.test.sendMessage("done"); + }, ({message}) => { + browser.test.assertTrue(message.match("No window matching"), "Correct error"); + browser.test.sendMessage("done"); + }); + }); + }, + }); + + yield scripts.startup(); + yield target.startup(); + + // Test extension page with a data: iframe. + const page = yield scripts.awaitMessage("tab-ready"); + ok(page.endsWith("page.html"), "Extension page loaded into a tab"); + + scripts.sendMessage("execute"); + yield scripts.awaitMessage("done"); + + // Test extension tab navigated to a data: URI. + const data = "data:text/html;charset=utf-8,also-inherits"; + target.sendMessage("navigate", data); + + const url = yield scripts.awaitMessage("tab-ready"); + is(url, data, "Extension tab navigated to a data: URI"); + + scripts.sendMessage("execute"); + yield scripts.awaitMessage("done"); + + yield BrowserTestUtils.removeTab(gBrowser.selectedTab); + yield scripts.unload(); + yield target.unload(); +}); + add_task(function* testBadURL() { async function background() { let promises = [ new Promise(resolve => { browser.tabs.executeScript({ file: "http://example.com/script.js", }, result => { browser.test.assertEq(undefined, result, "Result value"); diff --git a/toolkit/components/extensions/test/mochitest/chrome.ini b/toolkit/components/extensions/test/mochitest/chrome.ini --- a/toolkit/components/extensions/test/mochitest/chrome.ini +++ b/toolkit/components/extensions/test/mochitest/chrome.ini @@ -10,16 +10,17 @@ support-files = redirect_auto.sjs tags = webextensions [test_chrome_ext_background_debug_global.html] skip-if = (os == 'android') # android doesn't have devtools [test_chrome_ext_background_page.html] skip-if = (toolkit == 'android') # android doesn't have devtools [test_chrome_ext_eventpage_warning.html] +[test_chrome_ext_contentscript_data_uri.html] [test_chrome_ext_contentscript_unrecognizedprop_warning.html] skip-if = (os == 'android') # browser.tabs is undefined. Bug 1258975 on android. [test_chrome_ext_hybrid_addons.html] [test_chrome_ext_trustworthy_origin.html] [test_chrome_ext_webnavigation_resolved_urls.html] skip-if = (os == 'android') # browser.tabs is undefined. Bug 1258975 on android. [test_chrome_ext_shutdown_cleanup.html] [test_chrome_native_messaging_paths.html] diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_contentscript_data_uri.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_contentscript_data_uri.html new file mode 100644 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_contentscript_data_uri.html @@ -0,0 +1,98 @@ + + + + Test content script matching a data: URI + + + + + + + + + + +