# HG changeset patch # User Kris Maglione # Date 1475695671 -3600 # Wed Oct 05 20:27:51 2016 +0100 # Node ID 3cd9ed6b3215bbe7882e9e35aa002c29d6bf4a97 # Parent cccf23ce3edc1543f15223c677645c42be0ff7a6 Bug 1289273: Add tests for attempted loads of unsafe URLs. r?aswan MozReview-Commit-ID: LuswsfZ7CHH diff --git a/browser/components/extensions/test/browser/browser_ext_windows_create_url.js b/browser/components/extensions/test/browser/browser_ext_windows_create_url.js --- a/browser/components/extensions/test/browser/browser_ext_windows_create_url.js +++ b/browser/components/extensions/test/browser/browser_ext_windows_create_url.js @@ -77,8 +77,47 @@ add_task(function* testWindowCreate() { "test.html": ``, }, }); yield extension.startup(); yield extension.awaitFinish("window-create-url"); yield extension.unload(); }); + + +add_task(function* testWindowCreateSecurity() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background() { + function fail(window) { + browser.test.fail(`Window unexpectedly created with URLs: ${window.tabs.map(tab => tab.url)}`); + } + function pass(error) { + browser.test.succeed(`Illegal window creation failed with error: ${error}`); + } + // Wrap call so that immediate exceptions turn into failed promises. + function promise(callback) { + return new Promise(resolve => resolve(callback())); + } + + Promise.all([ + promise(() => browser.windows.create({url: "about:addons"})).then(fail, pass), + promise(() => browser.windows.create({url: "chrome://browser/content/"})).then(fail, pass), + promise(() => browser.windows.create({url: ["about:addons"]})).then(fail, pass), + promise(() => browser.windows.create({url: ["http://example.com/", "about:addons"]})).then(fail, pass), + promise(() => browser.windows.create({url: ["chrome://browser/content/", "http://example.com/"]})).then(fail, pass), + ]).then(() => { + browser.test.notifyPass("window-create-security"); + }).catch(e => { + browser.test.fail(`${e} :: ${e.stack}`); + browser.test.notifyFail("window-create-security"); + }); + }, + }); + + yield extension.startup(); + yield extension.awaitFinish("window-create-security"); + yield extension.unload(); +});