summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_tabs_move_window.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_move_window.js178
1 files changed, 178 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_move_window.js b/browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
new file mode 100644
index 0000000000..bb0b174876
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
@@ -0,0 +1,178 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+add_task(async function () {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["tabs"],
+ },
+ incognitoOverride: "spanning",
+ async background() {
+ const URL = "http://example.com/";
+ let mainWindow = await browser.windows.getCurrent();
+ let newWindow = await browser.windows.create({
+ url: [URL, URL],
+ });
+ let privateWindow = await browser.windows.create({
+ incognito: true,
+ url: [URL, URL],
+ });
+
+ browser.tabs.onUpdated.addListener(() => {
+ // Bug 1398272: Adding onUpdated listener broke tab IDs across windows.
+ });
+
+ let tab = newWindow.tabs[0].id;
+ let privateTab = privateWindow.tabs[0].id;
+
+ // Assuming that this windowId does not exist.
+ await browser.test.assertRejects(
+ browser.tabs.move(tab, { windowId: 123144576, index: 0 }),
+ /Invalid window/,
+ "Should receive invalid window error"
+ );
+
+ // Test that a tab cannot be moved to a private window.
+ let moved = await browser.tabs.move(tab, {
+ windowId: privateWindow.id,
+ index: 0,
+ });
+ browser.test.assertEq(
+ moved.length,
+ 0,
+ "tab was not moved to private window"
+ );
+ // Test that a private tab cannot be moved to a non-private window.
+ moved = await browser.tabs.move(privateTab, {
+ windowId: newWindow.id,
+ index: 0,
+ });
+ browser.test.assertEq(
+ moved.length,
+ 0,
+ "tab was not moved from private window"
+ );
+
+ // Verify tabs did not move between windows via another query.
+ let windows = await browser.windows.getAll({ populate: true });
+ let newWin2 = windows.find(w => w.id === newWindow.id);
+ browser.test.assertTrue(newWin2, "Found window");
+ browser.test.assertEq(
+ newWin2.tabs.length,
+ 2,
+ "Window still has two tabs"
+ );
+ for (let origTab of newWindow.tabs) {
+ browser.test.assertTrue(
+ newWin2.tabs.find(t => t.id === origTab.id),
+ `Window still has tab ${origTab.id}`
+ );
+ }
+
+ let privateWin2 = windows.find(w => w.id === privateWindow.id);
+ browser.test.assertTrue(privateWin2 !== null, "Found private window");
+ browser.test.assertEq(
+ privateWin2.incognito,
+ true,
+ "Private window is still private"
+ );
+ browser.test.assertEq(
+ privateWin2.tabs.length,
+ 2,
+ "Private window still has two tabs"
+ );
+ for (let origTab of privateWindow.tabs) {
+ browser.test.assertTrue(
+ privateWin2.tabs.find(t => t.id === origTab.id),
+ `Private window still has tab ${origTab.id}`
+ );
+ }
+
+ // Move a tab from one non-private window to another
+ await browser.tabs.move(tab, { windowId: mainWindow.id, index: 0 });
+
+ mainWindow = await browser.windows.get(mainWindow.id, { populate: true });
+ browser.test.assertTrue(
+ mainWindow.tabs.find(t => t.id === tab),
+ "Moved tab is in main window"
+ );
+
+ newWindow = await browser.windows.get(newWindow.id, { populate: true });
+ browser.test.assertEq(
+ newWindow.tabs.length,
+ 1,
+ "New window has 1 tab left"
+ );
+ browser.test.assertTrue(
+ newWindow.tabs[0].id != tab,
+ "Moved tab is no longer in original window"
+ );
+
+ await browser.windows.remove(newWindow.id);
+ await browser.windows.remove(privateWindow.id);
+ await browser.tabs.remove(tab);
+
+ browser.test.notifyPass("tabs.move.window");
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitFinish("tabs.move.window");
+ await extension.unload();
+});
+
+add_task(async function test_currentWindowAfterTabMoved() {
+ const files = {
+ "current.html": "<meta charset=utf-8><script src=current.js></script>",
+ "current.js": function () {
+ browser.test.onMessage.addListener(msg => {
+ if (msg === "current") {
+ browser.windows.getCurrent(win => {
+ browser.test.sendMessage("id", win.id);
+ });
+ }
+ });
+ browser.test.sendMessage("ready");
+ },
+ };
+
+ async function background() {
+ let tabId;
+
+ const url = browser.runtime.getURL("current.html");
+
+ browser.test.onMessage.addListener(async msg => {
+ if (msg === "move") {
+ await browser.windows.create({ tabId });
+ browser.test.sendMessage("moved");
+ } else if (msg === "close") {
+ await browser.tabs.remove(tabId);
+ browser.test.sendMessage("done");
+ }
+ });
+
+ let tab = await browser.tabs.create({ url });
+ tabId = tab.id;
+ }
+
+ const extension = ExtensionTestUtils.loadExtension({ files, background });
+
+ await extension.startup();
+ await extension.awaitMessage("ready");
+
+ extension.sendMessage("current");
+ const first = await extension.awaitMessage("id");
+
+ extension.sendMessage("move");
+ await extension.awaitMessage("moved");
+
+ extension.sendMessage("current");
+ const second = await extension.awaitMessage("id");
+
+ isnot(first, second, "current window id is different after moving the tab");
+
+ extension.sendMessage("close");
+ await extension.awaitMessage("done");
+ await extension.unload();
+});