toolkit/mozapps/downloads/tests/chrome/test_taskbarprogress_service.xul

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/mozapps/downloads/tests/chrome/test_taskbarprogress_service.xul	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,193 @@
     1.4 +<?xml version="1.0"?>
     1.5 +<!-- This Source Code Form is subject to the terms of the Mozilla Public
     1.6 +   - License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 +   - file, You can obtain one at http://mozilla.org/MPL/2.0/.  -->
     1.8 +<!--
     1.9 + * This tests that the Windows 7 Taskbar Progress is correctly updated when
    1.10 + * windows are opened and closed.
    1.11 +-->
    1.12 +
    1.13 +<window title="Win7 Taskbar Progress"
    1.14 +        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    1.15 +        onload="test();">
    1.16 +
    1.17 +  <script type="application/javascript"
    1.18 +          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
    1.19 +  <script type="application/javascript"
    1.20 +          src="utils.js"/>
    1.21 +
    1.22 +  <script type="application/javascript">
    1.23 +  <![CDATA[
    1.24 +
    1.25 +const kTaskbarID = "@mozilla.org/windows-taskbar;1";
    1.26 +const DOWNLOAD_MANAGER_URL = "chrome://mozapps/content/downloads/downloads.xul";
    1.27 +const DLMGR_UI_DONE = "download-manager-ui-done";
    1.28 +
    1.29 +Components.utils.import("resource://gre/modules/Services.jsm");
    1.30 +
    1.31 +let DownloadTaskbarProgress, TaskbarService, observerService, wwatch, chromeWindow;
    1.32 +let gGen = null;
    1.33 +
    1.34 +function test() {
    1.35 +  var dmui = getDMUI();
    1.36 +  if (!dmui) {
    1.37 +    todo(false, "skip test for toolkit download manager UI");
    1.38 +    return;
    1.39 +  }
    1.40 +
    1.41 +  let isWin7OrHigher = false;
    1.42 +  try {
    1.43 +    let version = Cc["@mozilla.org/system-info;1"]
    1.44 +                    .getService(Ci.nsIPropertyBag2)
    1.45 +                    .getProperty("version");
    1.46 +    isWin7OrHigher = (parseFloat(version) >= 6.1);
    1.47 +  } catch (ex) { }
    1.48 +
    1.49 +  if (!isWin7OrHigher) {
    1.50 +    ok(true, "This test only runs on Windows 7 or higher");
    1.51 +    return;
    1.52 +  }
    1.53 +
    1.54 +  SimpleTest.waitForExplicitFinish();
    1.55 +  gGen = doTest();
    1.56 +  gGen.next();
    1.57 +}
    1.58 +
    1.59 +function continueTest() {
    1.60 +  gGen.next();
    1.61 +}
    1.62 +
    1.63 +function doTest() {
    1.64 +  // Ensure that the download manager callbacks always use the window UI instead
    1.65 +  // of the panel in the browser's window.
    1.66 +  Services.prefs.setBoolPref("browser.download.useToolkitUI", true);
    1.67 +
    1.68 +  let tempScope = {};
    1.69 +  Components.utils.import("resource://gre/modules/DownloadTaskbarProgress.jsm", tempScope);
    1.70 +
    1.71 +  DownloadTaskbarProgress = tempScope.DownloadTaskbarProgress;
    1.72 +  TaskbarService =  Cc[kTaskbarID].getService(Ci.nsIWinTaskbar);
    1.73 +
    1.74 +  observerService = Cc["@mozilla.org/observer-service;1"].
    1.75 +                      getService(Ci.nsIObserverService);
    1.76 +
    1.77 +  wwatch = Cc["@mozilla.org/embedcomp/window-watcher;1"].
    1.78 +             getService(Ci.nsIWindowWatcher);
    1.79 +
    1.80 +  isnot(DownloadTaskbarProgress, null, "Download taskbar progress service exists");
    1.81 +  is(TaskbarService.available, true, "Taskbar Service is available");
    1.82 +
    1.83 +  let DMWindow = getDMWindow();
    1.84 +  if (DMWindow)
    1.85 +    DMWindow.close();
    1.86 +
    1.87 +  //Manually call onBrowserWindowLoad because this is delayed in 10sec
    1.88 +  chromeWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
    1.89 +                   getInterface(Components.interfaces.nsIWebNavigation).
    1.90 +                   QueryInterface(Components.interfaces.nsIDocShellTreeItem).
    1.91 +                   rootTreeItem.
    1.92 +                   QueryInterface(Components.interfaces.nsIInterfaceRequestor).
    1.93 +                   getInterface(Components.interfaces.nsIDOMWindow);
    1.94 +
    1.95 +  DownloadTaskbarProgress.onBrowserWindowLoad(chromeWindow);
    1.96 +
    1.97 +  is(DownloadTaskbarProgress.activeWindowIsDownloadWindow, false,
    1.98 +     "DownloadTaskbarProgress window is not the Download window");
    1.99 +
   1.100 +  checkActiveTaskbar(false, window);
   1.101 +  openDownloadManager(continueTest);
   1.102 +  yield;
   1.103 +
   1.104 +  let DMWindow = getDMWindow();
   1.105 +
   1.106 +  ok(DMWindow, "Download Manager window was opened");
   1.107 +  checkActiveTaskbar(true, DMWindow);
   1.108 +
   1.109 +  DMWindow.close();
   1.110 +  setTimeout(continueTest, 100);
   1.111 +  yield;
   1.112 +
   1.113 +  checkActiveTaskbar(false, window);
   1.114 +
   1.115 +  let browserWindow = openBrowserWindow(continueTest);
   1.116 +  yield;
   1.117 +
   1.118 +  ok(browserWindow, "Browser window was opened");
   1.119 +  DownloadTaskbarProgress.onBrowserWindowLoad(browserWindow);
   1.120 +
   1.121 +  // The owner window should not have changed, since our
   1.122 +  // original window still exists
   1.123 +  checkActiveTaskbar(false, window);
   1.124 +
   1.125 +  Services.prefs.clearUserPref("browser.download.useToolkitUI");
   1.126 +
   1.127 +  browserWindow.close();
   1.128 +  SimpleTest.finish();
   1.129 +  yield;
   1.130 +}
   1.131 +
   1.132 +function checkActiveTaskbar(isDownloadManager, ownerWindow) {
   1.133 +
   1.134 +  isnot(DownloadTaskbarProgress.activeTaskbarProgress, null, "DownloadTaskbarProgress has an active taskbar");
   1.135 +
   1.136 +  is(DownloadTaskbarProgress.activeWindowIsDownloadWindow, isDownloadManager,
   1.137 +     "The active taskbar progress " + (isDownloadManager ? "is" : "is not") + " the Download Manager");
   1.138 +
   1.139 +  if (ownerWindow) {
   1.140 +    let ownerWindowDocShell = ownerWindow.QueryInterface(Ci.nsIInterfaceRequestor).
   1.141 +                                getInterface(Ci.nsIWebNavigation).
   1.142 +                                QueryInterface(Ci.nsIDocShellTreeItem).treeOwner.
   1.143 +                                QueryInterface(Ci.nsIInterfaceRequestor).
   1.144 +                                getInterface(Ci.nsIXULWindow).docShell;
   1.145 +
   1.146 +    let windowTaskbarProgress = TaskbarService.getTaskbarProgress(ownerWindowDocShell);
   1.147 +
   1.148 +    is(DownloadTaskbarProgress.activeTaskbarProgress, windowTaskbarProgress,
   1.149 +       "DownloadTaskbarProgress has the expected taskbar as active");
   1.150 +  }
   1.151 +
   1.152 +}
   1.153 +
   1.154 +function openBrowserWindow(callback) {
   1.155 +
   1.156 +  let browserWindow = openDialog(chromeWindow.location, "_blank",
   1.157 +                                 "chrome,all,dialog=no", "about:blank");
   1.158 + 
   1.159 +  let helperFunc = function() {
   1.160 +    callback();
   1.161 +    browserWindow.removeEventListener("load", helperFunc, false);
   1.162 +  }
   1.163 +
   1.164 +  browserWindow.addEventListener("load", helperFunc, false);
   1.165 +
   1.166 +  return browserWindow;
   1.167 +}
   1.168 +
   1.169 +function openDownloadManager(callback) {
   1.170 +
   1.171 +  let testObs = {
   1.172 +    observe: function(aSubject, aTopic, aData) {
   1.173 +      if (aTopic != DLMGR_UI_DONE) {
   1.174 +        return;
   1.175 +      }
   1.176 +
   1.177 +      callback();
   1.178 +      observerService.removeObserver(testObs, DLMGR_UI_DONE);
   1.179 +    }
   1.180 +  };
   1.181 +
   1.182 +  observerService.addObserver(testObs, DLMGR_UI_DONE, false);
   1.183 +
   1.184 +  Cc["@mozilla.org/download-manager-ui;1"].
   1.185 +    getService(Ci.nsIDownloadManagerUI).show();
   1.186 +
   1.187 +}
   1.188 +  ]]>
   1.189 +  </script>
   1.190 +
   1.191 +  <body xmlns="http://www.w3.org/1999/xhtml">
   1.192 +    <p id="display"></p>
   1.193 +    <div id="content" style="display:none;"></div>
   1.194 +    <pre id="test"></pre>
   1.195 +  </body>
   1.196 +</window>

mercurial