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_query.js | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_tabs_query.js (limited to 'browser/components/extensions/test/browser/browser_ext_tabs_query.js') diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_query.js b/browser/components/extensions/test/browser/browser_ext_tabs_query.js new file mode 100644 index 0000000000..099588c701 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabs_query.js @@ -0,0 +1,468 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +requestLongerTimeout(2); + +add_task(async function () { + let tab1 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "about:robots" + ); + let tab2 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "about:config" + ); + + gBrowser.selectedTab = tab1; + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + async background() { + let tabs = await browser.tabs.query({ lastFocusedWindow: true }); + browser.test.assertEq(tabs.length, 3, "should have three tabs"); + + tabs.sort((tab1, tab2) => tab1.index - tab2.index); + + browser.test.assertEq(tabs[0].url, "about:blank", "first tab blank"); + tabs.shift(); + + browser.test.assertTrue(tabs[0].active, "tab 0 active"); + browser.test.assertFalse(tabs[1].active, "tab 1 inactive"); + + browser.test.assertFalse(tabs[0].pinned, "tab 0 unpinned"); + browser.test.assertFalse(tabs[1].pinned, "tab 1 unpinned"); + + browser.test.assertEq(tabs[0].url, "about:robots", "tab 0 url correct"); + browser.test.assertEq(tabs[1].url, "about:config", "tab 1 url correct"); + + browser.test.assertEq(tabs[0].status, "complete", "tab 0 status correct"); + browser.test.assertEq(tabs[1].status, "complete", "tab 1 status correct"); + + browser.test.assertEq( + tabs[0].title, + "Gort! Klaatu barada nikto!", + "tab 0 title correct" + ); + + tabs = await browser.tabs.query({ url: "about:blank" }); + browser.test.assertEq(tabs.length, 1, "about:blank query finds one tab"); + browser.test.assertEq(tabs[0].url, "about:blank", "with the correct url"); + + browser.test.notifyPass("tabs.query"); + }, + }); + + await extension.startup(); + await extension.awaitFinish("tabs.query"); + await extension.unload(); + + BrowserTestUtils.removeTab(tab1); + BrowserTestUtils.removeTab(tab2); + + tab1 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "http://example.com/" + ); + tab2 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "http://example.net/" + ); + let tab3 = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "http://test1.example.org/MochiKit/" + ); + + // test simple queries + extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background: function () { + browser.tabs.query( + { + url: "", + }, + function (tabs) { + browser.test.assertEq(tabs.length, 3, "should have three tabs"); + + tabs.sort((tab1, tab2) => tab1.index - tab2.index); + + browser.test.assertEq( + tabs[0].url, + "http://example.com/", + "tab 0 url correct" + ); + browser.test.assertEq( + tabs[1].url, + "http://example.net/", + "tab 1 url correct" + ); + browser.test.assertEq( + tabs[2].url, + "http://test1.example.org/MochiKit/", + "tab 2 url correct" + ); + + browser.test.notifyPass("tabs.query"); + } + ); + }, + }); + + await extension.startup(); + await extension.awaitFinish("tabs.query"); + await extension.unload(); + + // match pattern + extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background: function () { + browser.tabs.query( + { + url: "http://*/MochiKit*", + }, + function (tabs) { + browser.test.assertEq(tabs.length, 1, "should have one tab"); + + browser.test.assertEq( + tabs[0].url, + "http://test1.example.org/MochiKit/", + "tab 0 url correct" + ); + + browser.test.notifyPass("tabs.query"); + } + ); + }, + }); + + await extension.startup(); + await extension.awaitFinish("tabs.query"); + await extension.unload(); + + // match array of patterns + extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background: function () { + browser.tabs.query( + { + url: ["http://*/MochiKit*", "http://*.com/*"], + }, + function (tabs) { + browser.test.assertEq(tabs.length, 2, "should have two tabs"); + + tabs.sort((tab1, tab2) => tab1.index - tab2.index); + + browser.test.assertEq( + tabs[0].url, + "http://example.com/", + "tab 0 url correct" + ); + browser.test.assertEq( + tabs[1].url, + "http://test1.example.org/MochiKit/", + "tab 1 url correct" + ); + + browser.test.notifyPass("tabs.query"); + } + ); + }, + }); + + await extension.startup(); + await extension.awaitFinish("tabs.query"); + await extension.unload(); + + // match title pattern + extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + async background() { + let tabs = await browser.tabs.query({ + title: "mochitest index /", + }); + + browser.test.assertEq(tabs.length, 2, "should have two tabs"); + + tabs.sort((tab1, tab2) => tab1.index - tab2.index); + + browser.test.assertEq( + tabs[0].title, + "mochitest index /", + "tab 0 title correct" + ); + browser.test.assertEq( + tabs[1].title, + "mochitest index /", + "tab 1 title correct" + ); + + tabs = await browser.tabs.query({ + title: "?ochitest index /*", + }); + + browser.test.assertEq(tabs.length, 3, "should have three tabs"); + + tabs.sort((tab1, tab2) => tab1.index - tab2.index); + + browser.test.assertEq( + tabs[0].title, + "mochitest index /", + "tab 0 title correct" + ); + browser.test.assertEq( + tabs[1].title, + "mochitest index /", + "tab 1 title correct" + ); + browser.test.assertEq( + tabs[2].title, + "mochitest index /MochiKit/", + "tab 2 title correct" + ); + + browser.test.notifyPass("tabs.query"); + }, + }); + + await extension.startup(); + await extension.awaitFinish("tabs.query"); + await extension.unload(); + + // match highlighted + extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background: async function () { + let tabs1 = await browser.tabs.query({ highlighted: false }); + browser.test.assertEq( + 3, + tabs1.length, + "should have three non-highlighted tabs" + ); + + let tabs2 = await browser.tabs.query({ highlighted: true }); + browser.test.assertEq(1, tabs2.length, "should have one highlighted tab"); + + for (let tab of [...tabs1, ...tabs2]) { + browser.test.assertEq( + tab.active, + tab.highlighted, + "highlighted and active are equal in tab " + tab.index + ); + } + + browser.test.notifyPass("tabs.query"); + }, + }); + + await extension.startup(); + await extension.awaitFinish("tabs.query"); + await extension.unload(); + + // test width and height + extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background: function () { + browser.test.onMessage.addListener(async msg => { + let tabs = await browser.tabs.query({ active: true }); + + browser.test.assertEq(tabs.length, 1, "should have one tab"); + browser.test.sendMessage("dims", { + width: tabs[0].width, + height: tabs[0].height, + }); + }); + browser.test.sendMessage("ready"); + }, + }); + + const RESOLUTION_PREF = "layout.css.devPixelsPerPx"; + registerCleanupFunction(() => { + Services.prefs.clearUserPref(RESOLUTION_PREF); + }); + + await Promise.all([extension.startup(), extension.awaitMessage("ready")]); + + for (let resolution of [2, 1]) { + Services.prefs.setCharPref(RESOLUTION_PREF, String(resolution)); + is( + window.devicePixelRatio, + resolution, + "window has the required resolution" + ); + + let { clientHeight, clientWidth } = gBrowser.selectedBrowser; + + extension.sendMessage("check-size"); + let dims = await extension.awaitMessage("dims"); + is(dims.width, clientWidth, "tab reports expected width"); + is(dims.height, clientHeight, "tab reports expected height"); + } + + await extension.unload(); + + BrowserTestUtils.removeTab(tab1); + BrowserTestUtils.removeTab(tab2); + BrowserTestUtils.removeTab(tab3); + Services.prefs.clearUserPref(RESOLUTION_PREF); +}); + +add_task(async function testQueryPermissions() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: [], + }, + + async background() { + try { + let tabs = await browser.tabs.query({ + currentWindow: true, + active: true, + }); + browser.test.assertEq(tabs.length, 1, "Expect query to return tabs"); + browser.test.notifyPass("queryPermissions"); + } catch (e) { + browser.test.notifyFail("queryPermissions"); + } + }, + }); + + await extension.startup(); + + await extension.awaitFinish("queryPermissions"); + + await extension.unload(); +}); + +add_task(async function testInvalidUrl() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + async background() { + await browser.test.assertRejects( + browser.tabs.query({ url: "http://test1.net" }), + "Invalid url pattern: http://test1.net", + "Expected url to match pattern" + ); + await browser.test.assertRejects( + browser.tabs.query({ url: ["test2"] }), + "Invalid url pattern: test2", + "Expected an array with an invalid match pattern" + ); + await browser.test.assertRejects( + browser.tabs.query({ url: ["http://www.bbc.com/", "test3"] }), + "Invalid url pattern: test3", + "Expected an array with an invalid match pattern" + ); + browser.test.notifyPass("testInvalidUrl"); + }, + }); + await extension.startup(); + await extension.awaitFinish("testInvalidUrl"); + await extension.unload(); +}); + +add_task(async function test_query_index() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background: function () { + browser.tabs.onCreated.addListener(async function ({ + index, + windowId, + id, + }) { + browser.test.assertThrows( + () => browser.tabs.query({ index: -1 }), + /-1 is too small \(must be at least 0\)/, + "tab indices must be non-negative" + ); + + let tabs = await browser.tabs.query({ index, windowId }); + browser.test.assertEq(tabs.length, 1, `Got one tab at index ${index}`); + browser.test.assertEq(tabs[0].id, id, "The tab is the right one"); + + tabs = await browser.tabs.query({ index: 1e5, windowId }); + browser.test.assertEq(tabs.length, 0, "There is no tab at this index"); + + browser.test.notifyPass("tabs.query"); + }); + }, + }); + + await extension.startup(); + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "http://example.com/" + ); + await extension.awaitFinish("tabs.query"); + BrowserTestUtils.removeTab(tab); + await extension.unload(); +}); + +add_task(async function test_query_window() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + }, + + background: async function () { + let badWindowId = 0; + for (let { id } of await browser.windows.getAll()) { + badWindowId = Math.max(badWindowId, id + 1); + } + + let tabs = await browser.tabs.query({ windowId: badWindowId }); + browser.test.assertEq( + tabs.length, + 0, + "No tabs because there is no such window ID" + ); + + let { id: currentWindowId } = await browser.windows.getCurrent(); + tabs = await browser.tabs.query({ currentWindow: true }); + browser.test.assertEq( + tabs[0].windowId, + currentWindowId, + "Got tabs from the current window" + ); + + let { id: lastFocusedWindowId } = await browser.windows.getLastFocused(); + tabs = await browser.tabs.query({ lastFocusedWindow: true }); + browser.test.assertEq( + tabs[0].windowId, + lastFocusedWindowId, + "Got tabs from the last focused window" + ); + + browser.test.notifyPass("tabs.query"); + }, + }); + + await extension.startup(); + await extension.awaitFinish("tabs.query"); + await extension.unload(); +}); -- cgit v1.2.3