mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-06-11 10:59:30 +00:00
7624030fbf
- Bug 1055181 - CSS Filter Tooltip; r=pbrosset (327b035a7) - Bug 1137238 - Fix toolboxes when switching between apps in WebIDE. r=jryans (1a333bdfa) - Bug 1138939 - Notify when WebIDE has finished initializing so that Valence can register runtime scanners. r=ochameau (7fe61c384) - Don't let WebIDE break when trying to debug Chrome settings (bug 1134619). r=ochameau (4a18f048e) - fix imports since devtools are in a different path compared to FF (15c2a1e70) - port bits of Bug 916804 - Telemetry for WebIDE. (cf5b49ca7) - Bug 1042859 - Ignore host port when fetching cookies with the gcli cookie command. r=pbrosset (1e6217f76) - fix include path (6efaacd7a) - Bug 1128988 - runAt support for commands/converters; r=bgrins (bed6cb594) - Bug 1143027 - The performance tool tab highlights during a recording. r=vp (e1f310e2d) - missing pieces of Bug 1141817 - Followup to fix additional intermittents and Bug 1142748 - Fix the 'Protocol error (unknownError) (b27da36af) - Bug 1159480 - Pull out actor-specific logic from Performance Front. r=vp (9c253604b) - Bug 1156499 - Disable all non-profiler/fps components in the performance tools when in aurora, for 40.0 release. r=vp (041a0fa34) - Bug 1159052 - Performance recording should stop rendering and recording as soon as the recording stops. r=vp (2a9f093b4) - Bug 114187 - Add getBufferInfo to devtools profiler actor. r=fitzgen (00496e8e4) - Bug 1145187 - Implement polling for buffer status on performance actor facades. r=vp (ae2cbac27) - Bug 1082695 - Simplify the record start/stop time buttons, and more cleanly render the console.profile notifications during a console recording. r=vp (dfe9a9b26) - Bug 1160900 - Display buffer status while recording a profile. r=vp (c3d302a62) - Bug 1154115 - Add adapter that deduplicates old, undeduplicated profiles in the frontend. (r=jsantell,vporof) (aa1bd6769) - Bug 1160696 - Display MIRTypes in the JIT optimizations side pane as "Site : MIRType". (r=jsantell) (beccaed3d) - Bug 1154115 - Make the memory stuff in the performance devtool synthesize the new profiler JSON format. (r=jsantell) (685e3a576) - Bug 1154115 - Fix nsIProfiler xpcshell tests to use the new profiler JSON format. (r=me) (da2a18c89) - Bug 1151526 - Do not display optimization data for meta-platform frames in the profiler. r=vporof (d4cc514ca) - Bug 1154115 - Fix devtools tests to use the new profiler JSON format. (r=jsantell) (61a9064ce) - Bug 1126432: Set preference toggle to switch to new WebIDE project listing layout r=jryans (825831eeb) - Bug 1130084 - Avoid spurious connection errors even on success. r=past (1911930b6) - missing bits of Bug 1069552 - Add WebIDE scanner / runtime API. (773111b87) - Bug 1130084 - Allow runtimes to take infinite time to connect. r=past (a1482c500) - Bug 1025311 - Add telemetry for canvas debugger. r=vp,miker (d2f8d51f2) - Bug 1134778 - Consolidate usages of view sourcing in tools with a source-utils module. r=vp,jryans (1432dfac1) - Bug 1167230 - Use nsCString instead of std::string in FrameKey in the profiler. (r=mstange) (9a3d84b86) - Bug 1166492 - Handle huge strings in the profile JSON writer. (r=mstange) (3d6f90062) - Bug 1166492 - Remove dead code in the ProfileBuffer and ThreadProfile. (r=mstange) (cc8e81dd3) - Bug 1166492 - Return UniquePtr<char[]> from profiler_get_profile to avoid double copying. (r=mstange) (f9d58d5cf) - Bug 1167230 - Don't pack ProfileEntry on ARM. r=shu (b6f920dd3) - Bug 1168784 - Part 1: Fix the script merging profiles to handle new profiler JSON format. r=benwa (dd1008084) - Bug 1090949 - Add `nextTick()` to `lazyIframeIsLoaded()` in WebIDE tests. r=ochameau (94bf972da) - Bug 1143028 - Make AppMan reinitable; update tab list when sidebars disabled. r=past (1020f8306) - Bug 1146542 - Clean up and describe app-manager events. r=ochameau (cc4bcadf5) - Bug 1146542 - Restore tab list changes for non-sidebar case. r=ochameau (531b70e41) - Bug 1149820 - Restore WebIDE project auto select. r=ochameau (d0526612a) - Bug 1135018 - Move getjson from webide/ to shared/. r=jryans (9e405c1bf) - Bug 1135018 - Make devices.js use a CDN. r=ochameau (16adb49c4) - Bug 1090949 - Make WebIDE's Firefox OS Simulators configurable. r=ochameau (354331a6e) - Bug 1157201 - Prevent exception while hovering the rule-view. r=pbrosset (4ec81d85b)
321 lines
9.7 KiB
JavaScript
321 lines
9.7 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 = Components.utils;
|
|
|
|
const { require } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
|
|
const { GetDevices, GetDeviceString } = require("devtools/shared/devices");
|
|
const { Services } = Cu.import("resource://gre/modules/Services.jsm");
|
|
const { Simulators, Simulator } = require("devtools/webide/simulators");
|
|
const EventEmitter = require('devtools/toolkit/event-emitter');
|
|
const promise = require("promise");
|
|
const utils = require("devtools/webide/utils");
|
|
|
|
const Strings = Services.strings.createBundle("chrome://browser/locale/devtools/webide.properties");
|
|
|
|
let SimulatorEditor = {
|
|
|
|
// Available Firefox OS Simulator addons (key: `addon.id`).
|
|
_addons: {},
|
|
|
|
// Available device simulation profiles (key: `device.name`).
|
|
_devices: {},
|
|
|
|
// The names of supported simulation options.
|
|
_deviceOptions: [],
|
|
|
|
// The <form> element used to edit Simulator options.
|
|
_form: null,
|
|
|
|
// The Simulator object being edited.
|
|
_simulator: null,
|
|
|
|
// Generate the dynamic form elements.
|
|
init() {
|
|
let promises = [];
|
|
|
|
// Grab the <form> element.
|
|
let form = this._form;
|
|
if (!form) {
|
|
// This is the first time we run `init()`, bootstrap some things.
|
|
form = this._form = document.querySelector("#simulator-editor");
|
|
form.addEventListener("change", this.update.bind(this));
|
|
Simulators.on("configure", (e, simulator) => { this.edit(simulator) });
|
|
// Extract the list of device simulation options we'll support.
|
|
let deviceFields = form.querySelectorAll("*[data-device]");
|
|
this._deviceOptions = [].map.call(deviceFields, field => field.name);
|
|
}
|
|
|
|
// Append a new <option> to a <select> (or <optgroup>) element.
|
|
function opt(select, value, text) {
|
|
let option = document.createElement("option");
|
|
option.value = value;
|
|
option.textContent = text;
|
|
select.appendChild(option);
|
|
}
|
|
|
|
// Generate B2G version selector.
|
|
promises.push(Simulators.findSimulatorAddons().then(addons => {
|
|
this._addons = {};
|
|
form.version.innerHTML = "";
|
|
form.version.classList.remove("custom");
|
|
addons.forEach(addon => {
|
|
this._addons[addon.id] = addon;
|
|
opt(form.version, addon.id, addon.name);
|
|
});
|
|
opt(form.version, "custom", "");
|
|
opt(form.version, "pick", Strings.GetStringFromName("simulator_custom_binary"));
|
|
}));
|
|
|
|
// Generate profile selector.
|
|
form.profile.innerHTML = "";
|
|
form.profile.classList.remove("custom");
|
|
opt(form.profile, "default", Strings.GetStringFromName("simulator_default_profile"));
|
|
opt(form.profile, "custom", "");
|
|
opt(form.profile, "pick", Strings.GetStringFromName("simulator_custom_profile"));
|
|
|
|
// Generate example devices list.
|
|
form.device.innerHTML = "";
|
|
form.device.classList.remove("custom");
|
|
opt(form.device, "custom", Strings.GetStringFromName("simulator_custom_device"));
|
|
promises.push(GetDevices().then(devices => {
|
|
devices.TYPES.forEach(type => {
|
|
let b2gDevices = devices[type].filter(d => d.firefoxOS);
|
|
if (b2gDevices.length < 1) {
|
|
return;
|
|
}
|
|
let optgroup = document.createElement("optgroup");
|
|
optgroup.label = GetDeviceString(type);
|
|
b2gDevices.forEach(device => {
|
|
this._devices[device.name] = device;
|
|
opt(optgroup, device.name, device.name);
|
|
});
|
|
form.device.appendChild(optgroup);
|
|
});
|
|
}));
|
|
|
|
return promise.all(promises);
|
|
},
|
|
|
|
// Edit the configuration of an existing Simulator, or create a new one.
|
|
edit(simulator) {
|
|
// If no Simulator was given to edit, we're creating a new one.
|
|
if (!simulator) {
|
|
simulator = new Simulator(); // Default options.
|
|
Simulators.add(simulator);
|
|
}
|
|
|
|
this._simulator = null;
|
|
|
|
return this.init().then(() => {
|
|
this._simulator = simulator;
|
|
|
|
// Update the form fields.
|
|
this._form.name.value = simulator.name;
|
|
this.updateVersionSelector();
|
|
this.updateProfileSelector();
|
|
this.updateDeviceSelector();
|
|
this.updateDeviceFields();
|
|
});
|
|
},
|
|
|
|
// Close the configuration panel.
|
|
close() {
|
|
this._simulator = null;
|
|
window.parent.UI.openProject();
|
|
},
|
|
|
|
// Restore the simulator to its default configuration.
|
|
restoreDefaults() {
|
|
let simulator = this._simulator;
|
|
this.version = simulator.addon.id;
|
|
this.profile = "default";
|
|
simulator.restoreDefaults();
|
|
Simulators.emitUpdated();
|
|
return this.edit(simulator);
|
|
},
|
|
|
|
// Delete this simulator.
|
|
deleteSimulator() {
|
|
Simulators.remove(this._simulator);
|
|
this.close();
|
|
},
|
|
|
|
// Select an available option, or set the "custom" option.
|
|
updateSelector(selector, value) {
|
|
selector.value = value;
|
|
if (selector[selector.selectedIndex].value !== value) {
|
|
selector.value = "custom";
|
|
selector.classList.add("custom");
|
|
selector[selector.selectedIndex].textContent = value;
|
|
}
|
|
},
|
|
|
|
// VERSION: Can be an installed `addon.id` or a custom binary path.
|
|
|
|
get version() {
|
|
return this._simulator.options.b2gBinary || this._simulator.addon.id;
|
|
},
|
|
|
|
set version(value) {
|
|
let form = this._form;
|
|
let simulator = this._simulator;
|
|
let oldVer = simulator.version;
|
|
if (this._addons[value]) {
|
|
// `value` is a simulator addon ID.
|
|
simulator.addon = this._addons[value];
|
|
simulator.options.b2gBinary = null;
|
|
} else {
|
|
// `value` is a custom binary path.
|
|
simulator.options.b2gBinary = value;
|
|
// TODO (Bug 1146531) Indicate that a custom profile is now required.
|
|
}
|
|
// If `form.name` contains the old version, update its last occurrence.
|
|
if (form.name.value.contains(oldVer) && simulator.version !== oldVer) {
|
|
let regex = new RegExp("(.*)" + oldVer);
|
|
let name = form.name.value.replace(regex, "$1" + simulator.version);
|
|
simulator.options.name = form.name.value = Simulators.uniqueName(name);
|
|
}
|
|
},
|
|
|
|
updateVersionSelector() {
|
|
this.updateSelector(this._form.version, this.version);
|
|
},
|
|
|
|
// PROFILE. Can be "default" or a custom profile directory path.
|
|
|
|
get profile() {
|
|
return this._simulator.options.gaiaProfile || "default";
|
|
},
|
|
|
|
set profile(value) {
|
|
this._simulator.options.gaiaProfile = (value == "default" ? null : value);
|
|
},
|
|
|
|
updateProfileSelector() {
|
|
this.updateSelector(this._form.profile, this.profile);
|
|
},
|
|
|
|
// DEVICE. Can be an existing `device.name` or "custom".
|
|
|
|
get device() {
|
|
let devices = this._devices;
|
|
let simulator = this._simulator;
|
|
|
|
// Search for the name of a device matching current simulator options.
|
|
for (let name in devices) {
|
|
let match = true;
|
|
for (let option of this._deviceOptions) {
|
|
if (simulator.options[option] === devices[name][option]) {
|
|
continue;
|
|
}
|
|
match = false;
|
|
break;
|
|
}
|
|
if (match) {
|
|
return name;
|
|
}
|
|
}
|
|
return "custom";
|
|
},
|
|
|
|
set device(name) {
|
|
let device = this._devices[name];
|
|
if (!device) {
|
|
return;
|
|
}
|
|
let form = this._form;
|
|
let simulator = this._simulator;
|
|
this._deviceOptions.forEach(option => {
|
|
simulator.options[option] = form[option].value = device[option] || null;
|
|
});
|
|
// TODO (Bug 1146531) Indicate when a custom profile is required (e.g. for
|
|
// tablet, TV…).
|
|
},
|
|
|
|
updateDeviceSelector() {
|
|
this.updateSelector(this._form.device, this.device);
|
|
},
|
|
|
|
// Erase any current values, trust only the `simulator.options`.
|
|
updateDeviceFields() {
|
|
let form = this._form;
|
|
let simulator = this._simulator;
|
|
this._deviceOptions.forEach(option => {
|
|
form[option].value = simulator.options[option];
|
|
});
|
|
},
|
|
|
|
// Handle a change in our form's fields.
|
|
update(event) {
|
|
let simulator = this._simulator;
|
|
if (!simulator) {
|
|
return;
|
|
}
|
|
let form = this._form;
|
|
let input = event.target;
|
|
switch (input.name) {
|
|
case "name":
|
|
simulator.options.name = input.value;
|
|
break;
|
|
case "version":
|
|
switch (input.value) {
|
|
case "pick":
|
|
let file = utils.getCustomBinary(window);
|
|
if (file) {
|
|
this.version = file.path;
|
|
}
|
|
// Whatever happens, don't stay on the "pick" option.
|
|
this.updateVersionSelector();
|
|
break;
|
|
case "custom":
|
|
this.version = input[input.selectedIndex].textContent;
|
|
break;
|
|
default:
|
|
this.version = input.value;
|
|
}
|
|
break;
|
|
case "profile":
|
|
switch (input.value) {
|
|
case "pick":
|
|
let directory = utils.getCustomProfile(window);
|
|
if (directory) {
|
|
this.profile = directory.path;
|
|
}
|
|
// Whatever happens, don't stay on the "pick" option.
|
|
this.updateProfileSelector();
|
|
break;
|
|
case "custom":
|
|
this.profile = input[input.selectedIndex].textContent;
|
|
break;
|
|
default:
|
|
this.profile = input.value;
|
|
}
|
|
break;
|
|
case "device":
|
|
this.device = input.value;
|
|
break;
|
|
default:
|
|
simulator.options[input.name] = input.value || null;
|
|
this.updateDeviceSelector();
|
|
}
|
|
Simulators.emitUpdated();
|
|
},
|
|
};
|
|
|
|
window.addEventListener("load", function onLoad() {
|
|
document.querySelector("#close").onclick = e => {
|
|
SimulatorEditor.close();
|
|
};
|
|
document.querySelector("#reset").onclick = e => {
|
|
SimulatorEditor.restoreDefaults();
|
|
};
|
|
document.querySelector("#remove").onclick = e => {
|
|
SimulatorEditor.deleteSimulator();
|
|
};
|
|
|
|
// We just loaded, so we probably missed the first configure request.
|
|
SimulatorEditor.edit(Simulators._lastConfiguredSimulator);
|
|
});
|