mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-12 22:28:59 +02:00
175 lines
4.8 KiB
JavaScript
175 lines
4.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
"use strict";
|
|
|
|
const {utils: Cu, classes: Cc, interfaces: Ci} = Components;
|
|
|
|
const {Promise: promise} =
|
|
Cu.import("resource://gre/modules/devtools/deprecated-sync-thenables.js", {});
|
|
const {devtools} =
|
|
Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
|
|
const {require} = devtools;
|
|
|
|
const {AppProjects} = require("devtools/app-manager/app-projects");
|
|
|
|
const APP_MANAGER_URL = "about:app-manager";
|
|
const TEST_BASE =
|
|
"chrome://mochitests/content/browser/browser/devtools/app-manager/test/";
|
|
const HOSTED_APP_MANIFEST = TEST_BASE + "hosted_app.manifest";
|
|
|
|
const PACKAGED_APP_DIR_PATH = getTestFilePath(".");
|
|
|
|
gDevTools.testing = true;
|
|
SimpleTest.registerCleanupFunction(() => {
|
|
gDevTools.testing = false;
|
|
});
|
|
|
|
function addTab(url, targetWindow = window) {
|
|
info("Adding tab: " + url);
|
|
|
|
let deferred = promise.defer();
|
|
let targetBrowser = targetWindow.gBrowser;
|
|
|
|
targetWindow.focus();
|
|
let tab = targetBrowser.selectedTab = targetBrowser.addTab(url);
|
|
let linkedBrowser = tab.linkedBrowser;
|
|
|
|
linkedBrowser.addEventListener("load", function onLoad() {
|
|
linkedBrowser.removeEventListener("load", onLoad, true);
|
|
info("Tab added and finished loading: " + url);
|
|
deferred.resolve(tab);
|
|
}, true);
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function removeTab(tab, targetWindow = window) {
|
|
info("Removing tab.");
|
|
|
|
let deferred = promise.defer();
|
|
let targetBrowser = targetWindow.gBrowser;
|
|
let tabContainer = targetBrowser.tabContainer;
|
|
|
|
tabContainer.addEventListener("TabClose", function onClose(aEvent) {
|
|
tabContainer.removeEventListener("TabClose", onClose, false);
|
|
info("Tab removed and finished closing.");
|
|
deferred.resolve();
|
|
}, false);
|
|
|
|
targetBrowser.removeTab(tab);
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function openAppManager() {
|
|
return addTab(APP_MANAGER_URL);
|
|
}
|
|
|
|
function addSampleHostedApp() {
|
|
info("Adding sample hosted app");
|
|
let projectsWindow = getProjectsWindow();
|
|
let projectsDocument = projectsWindow.document;
|
|
let url = projectsDocument.querySelector("#url-input");
|
|
url.value = HOSTED_APP_MANIFEST;
|
|
return projectsWindow.UI.addHosted();
|
|
}
|
|
|
|
function removeSampleHostedApp() {
|
|
info("Removing sample hosted app");
|
|
return AppProjects.remove(HOSTED_APP_MANIFEST);
|
|
}
|
|
|
|
function addSamplePackagedApp() {
|
|
info("Adding sample packaged app");
|
|
let appDir = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
|
|
appDir.initWithPath(PACKAGED_APP_DIR_PATH);
|
|
return getProjectsWindow().UI.addPackaged(appDir);
|
|
}
|
|
|
|
function removeSamplePackagedApp() {
|
|
info("Removing sample packaged app");
|
|
return AppProjects.remove(PACKAGED_APP_DIR_PATH);
|
|
}
|
|
|
|
function getProjectsWindow() {
|
|
return content.document.querySelector(".projects-panel").contentWindow;
|
|
}
|
|
|
|
function getManifestWindow() {
|
|
return getProjectsWindow().document.querySelector(".variables-view")
|
|
.contentWindow;
|
|
}
|
|
|
|
function waitForProjectsPanel(deferred = promise.defer()) {
|
|
info("Wait for projects panel");
|
|
|
|
let projectsWindow = getProjectsWindow();
|
|
let projectsUI = projectsWindow.UI;
|
|
if (!projectsUI) {
|
|
info("projectsUI false");
|
|
projectsWindow.addEventListener("load", function onLoad() {
|
|
info("got load event");
|
|
projectsWindow.removeEventListener("load", onLoad);
|
|
waitForProjectsPanel(deferred);
|
|
});
|
|
return deferred.promise;
|
|
}
|
|
|
|
if (projectsUI.isReady) {
|
|
info("projectsUI ready");
|
|
deferred.resolve();
|
|
return deferred.promise;
|
|
}
|
|
|
|
info("projectsUI not ready");
|
|
projectsUI.once("ready", deferred.resolve);
|
|
return deferred.promise;
|
|
}
|
|
|
|
function selectProjectsPanel() {
|
|
return Task.spawn(function() {
|
|
let projectsButton = content.document.querySelector(".projects-button");
|
|
EventUtils.sendMouseEvent({ type: "click" }, projectsButton, content);
|
|
|
|
yield waitForProjectsPanel();
|
|
});
|
|
}
|
|
|
|
function waitForProjectSelection() {
|
|
info("Wait for project selection");
|
|
|
|
let deferred = promise.defer();
|
|
getProjectsWindow().UI.once("project-selected", deferred.resolve);
|
|
return deferred.promise;
|
|
}
|
|
|
|
function selectFirstProject() {
|
|
return Task.spawn(function() {
|
|
let projectsFrame = content.document.querySelector(".projects-panel");
|
|
let projectsWindow = projectsFrame.contentWindow;
|
|
let projectsDoc = projectsWindow.document;
|
|
let projectItem = projectsDoc.querySelector(".project-item");
|
|
EventUtils.sendMouseEvent({ type: "click" }, projectItem, projectsWindow);
|
|
|
|
yield waitForProjectSelection();
|
|
});
|
|
}
|
|
|
|
function showSampleProjectDetails() {
|
|
return Task.spawn(function() {
|
|
yield selectProjectsPanel();
|
|
yield selectFirstProject();
|
|
});
|
|
}
|
|
|
|
function waitForTick() {
|
|
let deferred = promise.defer();
|
|
executeSoon(deferred.resolve);
|
|
return deferred.promise;
|
|
}
|
|
|
|
function waitForTime(aDelay) {
|
|
let deferred = promise.defer();
|
|
setTimeout(deferred.resolve, aDelay);
|
|
return deferred.promise;
|
|
}
|