# HG changeset patch # User Tomislav Jovanovic # Date 1479925411 -3600 # Wed Nov 23 19:23:31 2016 +0100 # Node ID a2d0389640da25c3f653b2105a3934572df516dd # Parent be34ecad57af4a7116c5a1c42b855ec5bc83ca0e 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,90 @@ add_task(function* testBadPermissions() await browser.pageAction.show(tab.id); }, }); yield BrowserTestUtils.removeTab(tab2); yield BrowserTestUtils.removeTab(tab1); }); + +add_task(function* testMatchDataURI() { + const manifest = { + permissions: ["", "tabs"], + }; + + const files = { + "page.html": ` + + + + `, + "page.js": function() { + browser.test.onMessage.addListener((cmd, url) => { + if (cmd === "navigate") { + window.location.href = url; + } + }); + }, + }; + + async function background() { + let tab; + + browser.tabs.onUpdated.addListener((id, changed, {url}) => { + if (tab && tab.id === id && changed.status === "complete") { + browser.test.log(`Tab ready at location ${url}`); + browser.test.sendMessage("ready", {url}); + } + }); + + browser.test.onMessage.addListener(cmd => { + if (cmd === "execute") { + browser.tabs.executeScript(tab.id, { + code: "location.href;", + allFrames: true, + }).then(([result]) => { + browser.test.fail(`Should not have matched ${result}`); + browser.test.sendMessage("done"); + }).catch(({message}) => { + browser.test.assertTrue(message.match("No window matching"), "Correct error"); + browser.test.sendMessage("done"); + }); + } + }); + + const url = browser.runtime.getURL("page.html"); + tab = await browser.tabs.create({url, active: true}); + } + + const extension = ExtensionTestUtils.loadExtension({manifest, files, background}); + yield extension.startup(); + + // Test extension page with a data: iframe. + const page = yield extension.awaitMessage("ready"); + ok(page.url.includes("page.html"), "Extension page loaded into a tab"); + + extension.sendMessage("execute"); + yield extension.awaitMessage("done"); + + // Test extension tab navigated to a data: URI. + const url = "data:text/html;charset=utf-8,also-inherits"; + extension.sendMessage("navigate", url); + + const data = yield extension.awaitMessage("ready"); + is(data.url, url, "Extension tab navigated to a data: URI"); + + extension.sendMessage("execute"); + yield extension.awaitMessage("done"); + + yield BrowserTestUtils.removeTab(gBrowser.selectedTab); + yield extension.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,89 @@ + + + + Test content script matching a data: URI + + + + + + + + + + + +