bug 1240631 so that both invalid windows and tabs hit runtime.lastError r?kmag
MozReview-Commit-ID: EflXdTBWEEO
--- a/browser/components/extensions/ext-tabs.js
+++ b/browser/components/extensions/ext-tabs.js
@@ -829,19 +829,19 @@ extensions.registerSchemaAPI("tabs", "ad
let tabsMoved = [];
if (!Array.isArray(tabIds)) {
tabIds = [tabIds];
}
let destinationWindow = null;
if (moveProperties.windowId !== null) {
destinationWindow = WindowManager.getWindow(moveProperties.windowId, context);
- // Ignore invalid window.
+ // Fail on an invalid window.
if (!destinationWindow) {
- return;
+ return Promise.reject({message: `Invalid window ID: ${moveProperties.windowId}`});
}
}
/*
Indexes are maintained on a per window basis so that a call to
move([tabA, tabB], {index: 0})
-> tabA to 0, tabB to 1 if tabA and tabB are in the same window
move([tabA, tabB], {index: 0})
--- a/browser/components/extensions/test/browser/browser_ext_tabs_move.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_move.js
@@ -64,25 +64,34 @@ add_task(function* () {
manifest: {
"permissions": ["tabs"],
},
background: function() {
browser.tabs.query(
{lastFocusedWindow: true},
tabs => {
- let tab = tabs[0];
+ let tab = tabs[1];
// Assuming that tab.id of 12345 does not exist.
- browser.tabs.move([12345, tab.id], {index: 0});
- browser.tabs.query(
- {lastFocusedWindow: true},
- tabs => {
- browser.test.assertEq(tabs[0].url, tab.url, "should be first tab");
- browser.test.notifyPass("tabs.move.invalid");
- });
+ browser.tabs.move([tab.id, 12345], {index: 0})
+ .then(
+ tabs => { browser.test.fail("Promise should not resolve"); },
+ e => {
+ browser.test.assertTrue(/Invalid tab/.test(e),
+ "Invalid tab should be in error");
+ })
+ .then(
+ browser.tabs.query({lastFocusedWindow: true})
+ .then(
+ (tabs) => {
+ browser.test.assertEq(tabs[1].url, tab.url, "should be second tab");
+ browser.test.notifyPass("tabs.move.invalid");
+ }
+ )
+ );
});
},
});
yield extension.startup();
yield extension.awaitFinish("tabs.move.invalid");
yield extension.unload();
--- a/browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
@@ -22,16 +22,26 @@ add_task(function* () {
browser.tabs.query(
{url: "<all_urls>"},
tabs => {
browser.test.assertEq(tabs[0].url, "http://example.com/");
browser.test.assertEq(tabs[0].windowId, destination.windowId);
browser.test.notifyPass("tabs.move.window");
});
+
+ // Assuming that this windowId does not exist.
+ browser.tabs.move(source.id, {windowId: 123144576, index: 0})
+ .then(
+ tabs => { browser.test.fail("Promise should not resolve"); },
+ e => {
+ browser.test.assertTrue(/Invalid window/.test(e),
+ "Invalid window should be in error");
+ }
+ );
});
},
});
yield extension.startup();
yield extension.awaitFinish("tabs.move.window");
yield extension.unload();