Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- 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 tab1 = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:blank?1"
);
let tab2 = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:blank?2"
);
gBrowser.selectedTab = tab1;
let extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["tabs"],
},
background() {
let activeTab;
let tabId;
let tabIds;
browser.tabs
.query({ lastFocusedWindow: true })
.then(tabs => {
browser.test.assertEq(3, tabs.length, "We have three tabs");
browser.test.assertTrue(tabs[1].active, "Tab 1 is active");
activeTab = tabs[1];
tabIds = tabs.map(tab => tab.id);
return browser.tabs.create({
openerTabId: activeTab.id,
active: false,
});
})
.then(tab => {
browser.test.assertEq(
activeTab.id,
tab.openerTabId,
"Tab opener ID is correct"
);
browser.test.assertEq(
activeTab.index + 1,
tab.index,
"Tab was inserted after the related current tab"
);
tabId = tab.id;
return browser.tabs.get(tabId);
})
.then(tab => {
browser.test.assertEq(
activeTab.id,
tab.openerTabId,
"Tab opener ID is still correct"
);
return browser.tabs.update(tabId, { openerTabId: tabIds[0] });
})
.then(tab => {
browser.test.assertEq(
tabIds[0],
tab.openerTabId,
"Updated tab opener ID is correct"
);
return browser.tabs.get(tabId);
})
.then(tab => {
browser.test.assertEq(
tabIds[0],
tab.openerTabId,
"Updated tab opener ID is still correct"
);
return browser.tabs.create({ openerTabId: tabId, active: false });
})
.then(tab => {
browser.test.assertEq(
tabId,
tab.openerTabId,
"New tab opener ID is correct"
);
browser.test.assertEq(
tabIds.length,
tab.index,
"New tab was not inserted after the unrelated current tab"
);
let promise = browser.tabs.remove(tabId);
tabId = tab.id;
return promise;
})
.then(() => {
return browser.tabs.get(tabId);
})
.then(tab => {
browser.test.assertEq(
undefined,
tab.openerTabId,
"Tab opener ID was cleared after opener tab closed"
);
return browser.tabs.remove(tabId);
})
.then(() => {
browser.test.notifyPass("tab-opener");
})
.catch(e => {
browser.test.fail(`${e} :: ${e.stack}`);
browser.test.notifyFail("tab-opener");
});
},
});
await extension.startup();
await extension.awaitFinish("tab-opener");
await extension.unload();
BrowserTestUtils.removeTab(tab1);
BrowserTestUtils.removeTab(tab2);
});