Wed, 31 Dec 2014 06:09:35 +0100
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/ */
3 "use strict";
5 const {utils: Cu, classes: Cc, interfaces: Ci} = Components;
7 const {Promise: promise} =
8 Cu.import("resource://gre/modules/devtools/deprecated-sync-thenables.js", {});
9 const {devtools} =
10 Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
11 const {require} = devtools;
13 const {AppProjects} = require("devtools/app-manager/app-projects");
15 const APP_MANAGER_URL = "about:app-manager";
16 const TEST_BASE =
17 "chrome://mochitests/content/browser/browser/devtools/app-manager/test/";
18 const HOSTED_APP_MANIFEST = TEST_BASE + "hosted_app.manifest";
20 const PACKAGED_APP_DIR_PATH = getTestFilePath(".");
22 gDevTools.testing = true;
23 SimpleTest.registerCleanupFunction(() => {
24 gDevTools.testing = false;
25 });
27 function addTab(url, targetWindow = window) {
28 info("Adding tab: " + url);
30 let deferred = promise.defer();
31 let targetBrowser = targetWindow.gBrowser;
33 targetWindow.focus();
34 let tab = targetBrowser.selectedTab = targetBrowser.addTab(url);
35 let linkedBrowser = tab.linkedBrowser;
37 linkedBrowser.addEventListener("load", function onLoad() {
38 linkedBrowser.removeEventListener("load", onLoad, true);
39 info("Tab added and finished loading: " + url);
40 deferred.resolve(tab);
41 }, true);
43 return deferred.promise;
44 }
46 function removeTab(tab, targetWindow = window) {
47 info("Removing tab.");
49 let deferred = promise.defer();
50 let targetBrowser = targetWindow.gBrowser;
51 let tabContainer = targetBrowser.tabContainer;
53 tabContainer.addEventListener("TabClose", function onClose(aEvent) {
54 tabContainer.removeEventListener("TabClose", onClose, false);
55 info("Tab removed and finished closing.");
56 deferred.resolve();
57 }, false);
59 targetBrowser.removeTab(tab);
61 return deferred.promise;
62 }
64 function openAppManager() {
65 return addTab(APP_MANAGER_URL);
66 }
68 function addSampleHostedApp() {
69 info("Adding sample hosted app");
70 let projectsWindow = getProjectsWindow();
71 let projectsDocument = projectsWindow.document;
72 let url = projectsDocument.querySelector("#url-input");
73 url.value = HOSTED_APP_MANIFEST;
74 return projectsWindow.UI.addHosted();
75 }
77 function removeSampleHostedApp() {
78 info("Removing sample hosted app");
79 return AppProjects.remove(HOSTED_APP_MANIFEST);
80 }
82 function addSamplePackagedApp() {
83 info("Adding sample packaged app");
84 let appDir = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
85 appDir.initWithPath(PACKAGED_APP_DIR_PATH);
86 return getProjectsWindow().UI.addPackaged(appDir);
87 }
89 function removeSamplePackagedApp() {
90 info("Removing sample packaged app");
91 return AppProjects.remove(PACKAGED_APP_DIR_PATH);
92 }
94 function getProjectsWindow() {
95 return content.document.querySelector(".projects-panel").contentWindow;
96 }
98 function getManifestWindow() {
99 return getProjectsWindow().document.querySelector(".variables-view")
100 .contentWindow;
101 }
103 function waitForProjectsPanel(deferred = promise.defer()) {
104 info("Wait for projects panel");
106 let projectsWindow = getProjectsWindow();
107 let projectsUI = projectsWindow.UI;
108 if (!projectsUI) {
109 info("projectsUI false");
110 projectsWindow.addEventListener("load", function onLoad() {
111 info("got load event");
112 projectsWindow.removeEventListener("load", onLoad);
113 waitForProjectsPanel(deferred);
114 });
115 return deferred.promise;
116 }
118 if (projectsUI.isReady) {
119 info("projectsUI ready");
120 deferred.resolve();
121 return deferred.promise;
122 }
124 info("projectsUI not ready");
125 projectsUI.once("ready", deferred.resolve);
126 return deferred.promise;
127 }
129 function selectProjectsPanel() {
130 return Task.spawn(function() {
131 let projectsButton = content.document.querySelector(".projects-button");
132 EventUtils.sendMouseEvent({ type: "click" }, projectsButton, content);
134 yield waitForProjectsPanel();
135 });
136 }
138 function waitForProjectSelection() {
139 info("Wait for project selection");
141 let deferred = promise.defer();
142 getProjectsWindow().UI.once("project-selected", deferred.resolve);
143 return deferred.promise;
144 }
146 function selectFirstProject() {
147 return Task.spawn(function() {
148 let projectsFrame = content.document.querySelector(".projects-panel");
149 let projectsWindow = projectsFrame.contentWindow;
150 let projectsDoc = projectsWindow.document;
151 let projectItem = projectsDoc.querySelector(".project-item");
152 EventUtils.sendMouseEvent({ type: "click" }, projectItem, projectsWindow);
154 yield waitForProjectSelection();
155 });
156 }
158 function showSampleProjectDetails() {
159 return Task.spawn(function() {
160 yield selectProjectsPanel();
161 yield selectFirstProject();
162 });
163 }
165 function waitForTick() {
166 let deferred = promise.defer();
167 executeSoon(deferred.resolve);
168 return deferred.promise;
169 }
171 function waitForTime(aDelay) {
172 let deferred = promise.defer();
173 setTimeout(deferred.resolve, aDelay);
174 return deferred.promise;
175 }