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>