Files
roytam1 14f7ec3aac import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1173947 - Make getRandomValues message be urgent (r=mrbkap) (aca1a06a9)
- Bug 1182824 - Part 1: Use move assignment rather than copy assignment with ContextState::dash. r=mattwoodrow (73af33d32)
- Bug 1182824 - Part 2: Make ContextState::dash a nsTArray. r=mattwoodrow (c66c3105d)
- Bug 1134166 - Restart toolbox if selected app re-opens. r=ochameau (e370c8f02)
- Bug 1134166 - Close toolbox if selected app dies. r=ochameau (5acb76254)
- Bug 1134166 - Check for project when updating toolbox state. r=me (c60bb8766)
- Bug 1090949 - Add way to make WebIDE runtimes configurable. r=ochameau (eef01e3e6)
- Bug 1090949 - Refactor WebIDE preferences panel style. r=ochameau (fe1a9c757)
- Bug 1135191 - Add runtime panel with toggle. r=jryans (e2e290a67)
- missing bit of  Bug 1116188 - Add async ProfileGatherer (308cfdd4f)
- Bug 1185737 - Propagate pause and resume commands to child processes. r=BenWa (2dd302569)
- Bug 1161831 - Stop using threaddsafe ISupports for nsResProtocolHandler. r=billm (0bec61aac)
- Bug 1155968 - Correct indent not multiple of 4. r=khuey (5fb8e3b20)
- Bug 1183291 - Factor idl-parser into a Python package. r=khuey (63a2f0c68)
- Bug 1155968 - Add blank lines where needed in xpcom/idl-parser. r=khuey (ce91a905b)
- Bug 1161831 - Generate an extra macro to declare a non-virtual variant of an interface. r=billm (058876228)
- Bug 1161831 - Factor the sharable bits out of nsIResProtocolHandler. r=billm (b02278fb9)
- Bug 1152997 - Cleanup app update build to exclude android. r=glandium, r=mossop (6cd935294)
- Bug 1170075 - Remove Print Progress UI and view source XUL files from Android. r=snorp (64796ae4a)
- Bug 1180921 - Create a dumping ground for simple services in toolkit/components/utils. r=Gijs (2757d43c8)
- Bug 1180921 - Support custom callbacks for allowing access per-addon load access to cross-origin URIs. r=bz,r=billm (8cc7e2c96)
- Bug 1161831 - Implement moz-extension protocol. r=bz,r=billm,sr=mcmanus (5ee451357)
- Bug 1161831 - Associate extension URIs with the appropriate addon ID. r=billm,sr=bz (f36655ac9)
- Bug 1161831 - Forbid mapping to anything but file:// and jar:// URIs. r=billm,sr=bz (144add9de)
- Bug 1180921 - Generalize test_origin to make it easier to add new origin attributes. r=gabor (b3fbc3545)
- Bug 1180921 - Add the addonId OriginAttribute. r=bholley (0723d0dec)
- Bug 1174093 - Don't recurse into caps/tests/mochitest during the build; r=mshal (76366d21a)
- Bug 1161831 - Tests. r=billm (ed116a703)
- Bug 1155547, Part 1: Fix unified build breakage in adding new sources under dom/ipc/. r=khuey (0d6875348)
- Bug 1166985 - Use two image decoding threads on dual core devices. r=tn (7f07ee8b8)
- Bug 1160422 - Prioritize size decodes over full decodes. r=tn (48d42c011)
- Bug 1151672 - Part 1: Remove the calls to nsThreadManager::SetThreadWorking() and nsThreadManager::SetThreadIdle() due to backout of bug 970307. r=seth (0428dd4a4)
- Bug 1151672 - Part 2: Block PHal::Msg_NotifyNetworkChange__ID to the Nuwa process after it is ready. r=khuey (42debf2c0)
- Bug 1176034 - MessagePort should force a close() if the structured clone algorithm fails, r=bent (3afe74856)
- Bug 1176034 - Implement JSAutoStructuredCloneBuffer::clear(with callbacks and closure), r=sfink (f28f6852b)
- Bug 1155547, Part 2: Create PNuwa protocol (managed by PBackground) for forking content processes. r=khuey (047bc5e61)
- missing bit of Bug 1170075 - Remove Print Progress UI and view source XUL (a08888308)
2021-06-10 09:41:02 +08:00

233 lines
7.2 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const {Cu} = require("chrome");
const {Services} = Cu.import("resource://gre/modules/Services.jsm");
const {AppProjects} = require("devtools/app-manager/app-projects");
const {AppManager} = require("devtools/webide/app-manager");
const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
const EventEmitter = require("devtools/toolkit/event-emitter");
const {RuntimeScanners, WiFiScanner} = require("devtools/webide/runtimes");
const {Devices} = Cu.import("resource://gre/modules/devtools/Devices.jsm");
const {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
const utils = require("devtools/webide/utils");
const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
let RuntimeList;
module.exports = RuntimeList = function(window, parentWindow) {
EventEmitter.decorate(this);
this._doc = window.document;
this._UI = parentWindow.UI;
this._Cmds = parentWindow.Cmds;
this._parentWindow = parentWindow;
this._panelNodeEl = "toolbarbutton";
this._panelBoxEl = "hbox";
this._sidebarsEnabled = Services.prefs.getBoolPref("devtools.webide.sidebars");
if (this._sidebarsEnabled) {
this._panelNodeEl = "button";
this._panelBoxEl = "div";
}
this.onWebIDEUpdate = this.onWebIDEUpdate.bind(this);
this._UI.on("webide-update", this.onWebIDEUpdate);
AppManager.init();
this.appManagerUpdate = this.appManagerUpdate.bind(this);
AppManager.on("app-manager-update", this.appManagerUpdate);
};
RuntimeList.prototype = {
get doc() {
return this._doc;
},
get sidebarsEnabled() {
return this._sidebarsEnabled;
},
appManagerUpdate: function(event, what, details) {
// Got a message from app-manager.js
// See AppManager.update() for descriptions of what these events mean.
switch (what) {
case "runtime-list":
this.update();
break;
case "connection":
case "runtime-global-actors":
this.updateCommands();
break;
};
},
onWebIDEUpdate: function(event, what, details) {
if (what == "busy" || what == "unbusy") {
this.updateCommands();
}
},
takeScreenshot: function() {
return this._UI.busyUntil(AppManager.deviceFront.screenshotToDataURL().then(longstr => {
return longstr.string().then(dataURL => {
longstr.release().then(null, console.error);
this._UI.openInBrowser(dataURL);
});
}), "taking screenshot");
},
showRuntimeDetails: function() {
this._Cmds.showRuntimeDetails();
},
showPermissionsTable: function() {
this._Cmds.showPermissionsTable();
},
showDevicePreferences: function() {
this._Cmds.showDevicePrefs();
},
showSettings: function() {
this._Cmds.showSettings();
},
showTroubleShooting: function() {
this._Cmds.showTroubleShooting();
},
showAddons: function() {
this._Cmds.showAddons();
},
updateCommands: function() {
let doc = this._doc;
// Runtime commands
let screenshotCmd = doc.querySelector("#runtime-screenshot");
let permissionsCmd = doc.querySelector("#runtime-permissions");
let detailsCmd = doc.querySelector("#runtime-details");
let disconnectCmd = doc.querySelector("#runtime-disconnect");
let devicePrefsCmd = doc.querySelector("#runtime-preferences");
let settingsCmd = doc.querySelector("#runtime-settings");
if (AppManager.connected) {
if (AppManager.deviceFront) {
detailsCmd.removeAttribute("disabled");
permissionsCmd.removeAttribute("disabled");
screenshotCmd.removeAttribute("disabled");
}
if (AppManager.preferenceFront) {
devicePrefsCmd.removeAttribute("disabled");
}
if (AppManager.settingsFront) {
settingsCmd.removeAttribute("disabled");
}
disconnectCmd.removeAttribute("disabled");
} else {
detailsCmd.setAttribute("disabled", "true");
permissionsCmd.setAttribute("disabled", "true");
screenshotCmd.setAttribute("disabled", "true");
disconnectCmd.setAttribute("disabled", "true");
devicePrefsCmd.setAttribute("disabled", "true");
settingsCmd.setAttribute("disabled", "true");
}
},
update: function() {
let doc = this._doc;
let wifiHeaderNode = doc.querySelector("#runtime-header-wifi");
if (WiFiScanner.allowed) {
wifiHeaderNode.removeAttribute("hidden");
} else {
wifiHeaderNode.setAttribute("hidden", "true");
}
let usbListNode = doc.querySelector("#runtime-panel-usb");
let wifiListNode = doc.querySelector("#runtime-panel-wifi");
let simulatorListNode = doc.querySelector("#runtime-panel-simulator");
let otherListNode = doc.querySelector("#runtime-panel-other");
let noHelperNode = doc.querySelector("#runtime-panel-noadbhelper");
let noUSBNode = doc.querySelector("#runtime-panel-nousbdevice");
if (Devices.helperAddonInstalled) {
noHelperNode.setAttribute("hidden", "true");
} else {
noHelperNode.removeAttribute("hidden");
}
let runtimeList = AppManager.runtimeList;
if (!runtimeList) {
return;
}
if (runtimeList.usb.length === 0 && Devices.helperAddonInstalled) {
noUSBNode.removeAttribute("hidden");
} else {
noUSBNode.setAttribute("hidden", "true");
}
for (let [type, parent] of [
["usb", usbListNode],
["wifi", wifiListNode],
["simulator", simulatorListNode],
["other", otherListNode],
]) {
while (parent.hasChildNodes()) {
parent.firstChild.remove();
}
for (let runtime of runtimeList[type]) {
let r = runtime;
let panelItemNode = doc.createElement(this._panelBoxEl);
panelItemNode.className = "panel-item-complex";
let connectButton = doc.createElement(this._panelNodeEl);
connectButton.className = "panel-item runtime-panel-item-" + type;
if (this._sidebarsEnabled) {
connectButton.textContent = r.name;
} else {
connectButton.setAttribute("label", r.name);
connectButton.setAttribute("flex", "1");
}
connectButton.addEventListener("click", () => {
if (!this._sidebarsEnabled) {
this._UI.hidePanels();
}
this._UI.dismissErrorNotification();
this._UI.connectToRuntime(r);
}, true);
panelItemNode.appendChild(connectButton);
if (r.configure && this._UI.isRuntimeConfigurationEnabled()) {
let configButton = doc.createElement(this._panelNodeEl);
configButton.className = "configure-button";
configButton.addEventListener("click", r.configure.bind(r), true);
panelItemNode.appendChild(configButton);
}
parent.appendChild(panelItemNode);
}
}
},
destroy: function() {
this._doc = null;
AppManager.off("app-manager-update", this.appManagerUpdate);
if (this.sidebarsEnabled) {
this._UI.off("webide-update", this.onWebIDEUpdate);
}
this._UI = null;
this._Cmds = null;
this._parentWindow = null;
this._panelNodeEl = null;
this._sidebarsEnabled = null;
}
};