bug 1240631 so that both invalid windows and tabs hit runtime.lastError r?kmag draft
authorAndy McKay <amckay@mozilla.com>
Fri, 21 Oct 2016 14:45:18 -0700
changeset 428243 0e56d00504f8bb5163edb699416af7520f3e67d2
parent 413960 29af101880db7ce7f5f87f58e1ff20988c1c5fc3
child 534687 0b25cb455b3772024b81b1119bab7ca284abcd9b
push id33260
push userbmo:amckay@mozilla.com
push dateFri, 21 Oct 2016 21:48:19 +0000
reviewerskmag
bugs1240631
milestone51.0a1
bug 1240631 so that both invalid windows and tabs hit runtime.lastError r?kmag MozReview-Commit-ID: EflXdTBWEEO
browser/components/extensions/ext-tabs.js
browser/components/extensions/test/browser/browser_ext_tabs_move.js
browser/components/extensions/test/browser/browser_ext_tabs_move_window.js
--- 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();