summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_tabs_onHighlighted.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_tabs_onHighlighted.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_onHighlighted.js130
1 files changed, 130 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_onHighlighted.js b/browser/components/extensions/test/browser/browser_ext_tabs_onHighlighted.js
new file mode 100644
index 0000000000..a614dc6144
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_onHighlighted.js
@@ -0,0 +1,130 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+/* eslint-disable mozilla/no-arbitrary-setTimeout */
+"use strict";
+
+add_task(async function test_onHighlighted() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ permissions: ["tabs"],
+ },
+
+ background: async function () {
+ async function expectHighlighted(fn, action) {
+ let resolve;
+ let promise = new Promise(r => {
+ resolve = r;
+ });
+ let expected;
+ let events = [];
+ let listener = highlightInfo => {
+ events.push(highlightInfo);
+ if (expected && expected.length >= events.length) {
+ resolve();
+ }
+ };
+ browser.tabs.onHighlighted.addListener(listener);
+ expected = (await fn()) || [];
+ if (events.length < expected.length) {
+ await promise;
+ }
+ let unexpected = events.splice(expected.length);
+ browser.test.assertEq(
+ JSON.stringify(expected),
+ JSON.stringify(events),
+ `Should get ${expected.length} expected onHighlighted events when ${action}`
+ );
+ if (unexpected.length) {
+ browser.test.fail(
+ `${unexpected.length} unexpected onHighlighted events when ${action}: ` +
+ JSON.stringify(unexpected)
+ );
+ }
+ browser.tabs.onHighlighted.removeListener(listener);
+ }
+
+ let [{ id, windowId }] = await browser.tabs.query({
+ active: true,
+ currentWindow: true,
+ });
+ let windows = [windowId];
+ let tabs = [id];
+
+ await expectHighlighted(async () => {
+ let tab = await browser.tabs.create({
+ active: true,
+ url: "about:blank?1",
+ });
+ tabs.push(tab.id);
+ return [{ tabIds: [tabs[1]], windowId: windows[0] }];
+ }, "creating a new active tab");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.update(tabs[0], { active: true });
+ return [{ tabIds: [tabs[0]], windowId: windows[0] }];
+ }, "selecting former tab");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.highlight({ tabs: [0, 1] });
+ return [{ tabIds: [tabs[0], tabs[1]], windowId: windows[0] }];
+ }, "highlighting both tabs");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.highlight({ tabs: [1, 0] });
+ return [{ tabIds: [tabs[0], tabs[1]], windowId: windows[0] }];
+ }, "highlighting same tabs but changing selected one");
+
+ await expectHighlighted(async () => {
+ let tab = await browser.tabs.create({
+ active: false,
+ url: "about:blank?2",
+ });
+ tabs.push(tab.id);
+ }, "create a new inactive tab");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.highlight({ tabs: [2, 0, 1] });
+ return [{ tabIds: [tabs[0], tabs[1], tabs[2]], windowId: windows[0] }];
+ }, "highlighting all tabs");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.move(tabs[1], { index: 0 });
+ }, "reordering tabs");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.highlight({ tabs: [0] });
+ return [{ tabIds: [tabs[1]], windowId: windows[0] }];
+ }, "highlighting moved tab");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.highlight({ tabs: [0] });
+ }, "highlighting again");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.highlight({ tabs: [2, 1, 0] });
+ return [{ tabIds: [tabs[1], tabs[0], tabs[2]], windowId: windows[0] }];
+ }, "highlighting all tabs");
+
+ await expectHighlighted(async () => {
+ await browser.tabs.highlight({ tabs: [2, 0, 1] });
+ }, "highlighting same tabs with different order");
+
+ await expectHighlighted(async () => {
+ let window = await browser.windows.create({ tabId: tabs[2] });
+ windows.push(window.id);
+ // Bug 1481185: on Chrome it's [tabs[1], tabs[0]] instead of [tabs[0]]
+ return [
+ { tabIds: [tabs[0]], windowId: windows[0] },
+ { tabIds: [tabs[2]], windowId: windows[1] },
+ ];
+ }, "moving selected tab into a new window");
+
+ await browser.tabs.remove(tabs.slice(1));
+ browser.test.notifyPass("test-finished");
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitFinish("test-finished");
+ await extension.unload();
+});