forked from mirrors/gecko-dev
# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D36042 --HG-- extra : source : d3afcafdce650a6f36cebbc126ee93b17f13cf52
130 lines
3.2 KiB
JavaScript
130 lines
3.2 KiB
JavaScript
/* -*- 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);
|
|
});
|