browser/devtools/app-manager/test/head.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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 }

mercurial