From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/browser/browser_ext_tabs_update_url.js | 235 +++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_tabs_update_url.js (limited to 'browser/components/extensions/test/browser/browser_ext_tabs_update_url.js') diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_update_url.js b/browser/components/extensions/test/browser/browser_ext_tabs_update_url.js new file mode 100644 index 0000000000..610415b66e --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabs_update_url.js @@ -0,0 +1,235 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +ChromeUtils.defineESModuleGetters(this, { + SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs", + TabStateFlusher: "resource:///modules/sessionstore/TabStateFlusher.sys.mjs", +}); + +async function testTabsUpdateURL( + existentTabURL, + tabsUpdateURL, + isErrorExpected +) { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + files: { + "tab.html": ` + + + + + + +

tab page

+ + + `.trim(), + }, + background: function () { + browser.test.sendMessage("ready", browser.runtime.getURL("tab.html")); + + browser.test.onMessage.addListener( + async (msg, tabsUpdateURL, isErrorExpected) => { + let tabs = await browser.tabs.query({ lastFocusedWindow: true }); + + try { + let tab = await browser.tabs.update(tabs[1].id, { + url: tabsUpdateURL, + }); + + browser.test.assertFalse( + isErrorExpected, + `tabs.update with URL ${tabsUpdateURL} should be rejected` + ); + browser.test.assertTrue( + tab, + "on success the tab should be defined" + ); + } catch (error) { + browser.test.assertTrue( + isErrorExpected, + `tabs.update with URL ${tabsUpdateURL} should not be rejected` + ); + browser.test.assertTrue( + /^Illegal URL/.test(error.message), + "tabs.update should be rejected with the expected error message" + ); + } + + browser.test.sendMessage("done"); + } + ); + }, + }); + + await extension.startup(); + + let mozExtTabURL = await extension.awaitMessage("ready"); + + if (tabsUpdateURL == "self") { + tabsUpdateURL = mozExtTabURL; + } + + info(`tab.update URL "${tabsUpdateURL}" on tab with URL "${existentTabURL}"`); + + let tab1 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + existentTabURL + ); + + extension.sendMessage("start", tabsUpdateURL, isErrorExpected); + await extension.awaitMessage("done"); + + BrowserTestUtils.removeTab(tab1); + await extension.unload(); +} + +add_task(async function () { + info("Start testing tabs.update on javascript URLs"); + + let dataURLPage = `data:text/html, + + + + + + +

data url page

+ + `; + + let checkList = [ + { + tabsUpdateURL: "http://example.net", + isErrorExpected: false, + }, + { + tabsUpdateURL: "self", + isErrorExpected: false, + }, + { + tabsUpdateURL: "about:addons", + isErrorExpected: true, + }, + { + tabsUpdateURL: "javascript:console.log('tabs.update execute javascript')", + isErrorExpected: true, + }, + { + tabsUpdateURL: dataURLPage, + isErrorExpected: true, + }, + ]; + + let testCases = checkList.map(check => + Object.assign({}, check, { existentTabURL: "about:blank" }) + ); + + for (let { existentTabURL, tabsUpdateURL, isErrorExpected } of testCases) { + await testTabsUpdateURL(existentTabURL, tabsUpdateURL, isErrorExpected); + } + + info("done"); +}); + +add_task(async function test_update_reload() { + const URL = "https://example.com/"; + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background() { + browser.test.onMessage.addListener(async (cmd, ...args) => { + const result = await browser.tabs[cmd](...args); + browser.test.sendMessage("result", result); + }); + + const filter = { + properties: ["status"], + }; + + browser.tabs.onUpdated.addListener((tabId, changeInfo) => { + if (changeInfo.status === "complete") { + browser.test.sendMessage("historyAdded"); + } + }, filter); + }, + }); + + let win = await BrowserTestUtils.openNewBrowserWindow(); + let tabBrowser = win.gBrowser.selectedBrowser; + BrowserTestUtils.loadURIString(tabBrowser, URL); + await BrowserTestUtils.browserLoaded(tabBrowser, false, URL); + let tab = win.gBrowser.selectedTab; + + async function getTabHistory() { + await TabStateFlusher.flush(tabBrowser); + return JSON.parse(SessionStore.getTabState(tab)); + } + + await extension.startup(); + extension.sendMessage("query", { url: URL }); + let tabs = await extension.awaitMessage("result"); + let tabId = tabs[0].id; + + let history = await getTabHistory(); + is( + history.entries.length, + 1, + "Tab history contains the expected number of entries." + ); + is( + history.entries[0].url, + URL, + `Tab history contains the expected entry: URL.` + ); + + extension.sendMessage("update", tabId, { url: `${URL}1/` }); + await Promise.all([ + extension.awaitMessage("result"), + extension.awaitMessage("historyAdded"), + ]); + + history = await getTabHistory(); + is( + history.entries.length, + 2, + "Tab history contains the expected number of entries." + ); + is( + history.entries[1].url, + `${URL}1/`, + `Tab history contains the expected entry: ${URL}1/.` + ); + + extension.sendMessage("update", tabId, { + url: `${URL}2/`, + loadReplace: true, + }); + await Promise.all([ + extension.awaitMessage("result"), + extension.awaitMessage("historyAdded"), + ]); + + history = await getTabHistory(); + is( + history.entries.length, + 2, + "Tab history contains the expected number of entries." + ); + is( + history.entries[1].url, + `${URL}2/`, + `Tab history contains the expected entry: ${URL}2/.` + ); + + await extension.unload(); + await BrowserTestUtils.closeWindow(win); +}); -- cgit v1.2.3