browser/devtools/debugger/test/browser_dbg_multiple-windows.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 /**
     5  * Make sure that the debugger attaches to the right tab when multiple windows
     6  * are open.
     7  */
     9 const TAB1_URL = EXAMPLE_URL + "doc_script-switching-01.html";
    10 const TAB2_URL = EXAMPLE_URL + "doc_script-switching-02.html";
    12 let gNewTab, gNewWindow;
    13 let gClient;
    15 function test() {
    16   if (!DebuggerServer.initialized) {
    17     DebuggerServer.init(() => true);
    18     DebuggerServer.addBrowserActors();
    19   }
    21   let transport = DebuggerServer.connectPipe();
    22   gClient = new DebuggerClient(transport);
    23   gClient.connect((aType, aTraits) => {
    24     is(aType, "browser",
    25       "Root actor should identify itself as a browser.");
    27     promise.resolve(null)
    28       .then(() => addTab(TAB1_URL))
    29       .then(testFirstTab)
    30       .then(() => addWindow(TAB2_URL))
    31       .then(testNewWindow)
    32       .then(testFocusFirst)
    33       .then(testRemoveTab)
    34       .then(closeConnection)
    35       .then(finish)
    36       .then(null, aError => {
    37         ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
    38       });
    39   });
    40 }
    42 function testFirstTab(aTab) {
    43   let deferred = promise.defer();
    45   gNewTab = aTab;
    46   ok(!!gNewTab, "Second tab created.");
    48   gClient.listTabs(aResponse => {
    49     let tabActor = aResponse.tabs.filter(aGrip => aGrip.url == TAB1_URL).pop();
    50     ok(tabActor,
    51       "Should find a tab actor for the first tab.");
    53     is(aResponse.selected, 1,
    54       "The first tab is selected.");
    56     deferred.resolve();
    57   });
    59   return deferred.promise;
    60 }
    62 function testNewWindow(aWindow) {
    63   let deferred = promise.defer();
    65   gNewWindow = aWindow;
    66   ok(!!gNewWindow, "Second window created.");
    68   gNewWindow.focus();
    70   let topWindow = Services.wm.getMostRecentWindow("navigator:browser");
    71   is(topWindow, gNewWindow,
    72     "The second window is on top.");
    74   let isActive = promise.defer();
    75   let isLoaded = promise.defer();
    77   promise.all([isActive.promise, isLoaded.promise]).then(() => {
    78     gNewWindow.BrowserChromeTest.runWhenReady(() => {
    79       gClient.listTabs(aResponse => {
    80         is(aResponse.selected, 2,
    81           "The second tab is selected.");
    83         deferred.resolve();
    84       });
    85     });
    86   });
    88   let focusManager = Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager);
    89   if (focusManager.activeWindow != gNewWindow) {
    90     gNewWindow.addEventListener("activate", function onActivate(aEvent) {
    91       if (aEvent.target != gNewWindow) {
    92         return;
    93       }
    94       gNewWindow.removeEventListener("activate", onActivate, true);
    95       isActive.resolve();
    96     }, true);
    97   } else {
    98     isActive.resolve();
    99   }
   101   let contentLocation = gNewWindow.content.location.href;
   102   if (contentLocation != TAB2_URL) {
   103     gNewWindow.document.addEventListener("load", function onLoad(aEvent) {
   104       if (aEvent.target.documentURI != TAB2_URL) {
   105         return;
   106       }
   107       gNewWindow.document.removeEventListener("load", onLoad, true);
   108       isLoaded.resolve();
   109     }, true);
   110   } else {
   111     isLoaded.resolve();
   112   }
   114   return deferred.promise;
   115 }
   117 function testFocusFirst() {
   118   let deferred = promise.defer();
   120   once(window.content, "focus").then(() => {
   121     let topWindow = Services.wm.getMostRecentWindow("navigator:browser");
   122     is(top, getDOMWindow(window),
   123       "The first window is on top.");
   125     gClient.listTabs(aResponse => {
   126       is(aResponse.selected, 1,
   127         "The first tab is selected after focusing on it.");
   129       deferred.resolve();
   130     });
   131   });
   133   window.content.focus();
   135   return deferred.promise;
   136 }
   138 function testRemoveTab() {
   139   let deferred = promise.defer();
   141   gNewWindow.close();
   143   // give it time to close
   144   executeSoon(function() { continue_remove_tab(deferred) });
   145   return deferred.promise;
   146 }
   148 function continue_remove_tab(deferred)
   149 {
   150   removeTab(gNewTab);
   152   gClient.listTabs(aResponse => {
   153     // Verify that tabs are no longer included in listTabs.
   154     let foundTab1 = aResponse.tabs.some(aGrip => aGrip.url == TAB1_URL);
   155     let foundTab2 = aResponse.tabs.some(aGrip => aGrip.url == TAB2_URL);
   156     ok(!foundTab1, "Tab1 should be gone.");
   157     ok(!foundTab2, "Tab2 should be gone.");
   159     is(aResponse.selected, 0,
   160       "The original tab is selected.");
   162     deferred.resolve();
   163   });
   164 }
   166 function closeConnection() {
   167   let deferred = promise.defer();
   168   gClient.close(deferred.resolve);
   169   return deferred.promise;
   170 }
   172 registerCleanupFunction(function() {
   173   gNewTab = null;
   174   gNewWindow = null;
   175   gClient = null;
   176 });

mercurial