Bug 1090949 - In WebIDE, register simulators by name not by version. r=ochameau

This commit is contained in:
Jan Keromnes 2014-11-26 18:34:00 +01:00
parent 731a2f07b8
commit 1d41a9fb1a
7 changed files with 46 additions and 55 deletions

View File

@ -34,20 +34,22 @@ function close() {
return p.kill();
}
let appinfo = {};
let name;
AddonManager.getAddonByID(require("addon").id, function (addon) {
appinfo.label = addon.name.replace(" Simulator", "");
name = addon.name.replace(" Simulator", "");
Simulator.register(appinfo.label, {
appinfo: appinfo,
Simulator.register(name, {
// We keep the deprecated `appinfo` object so that recent simulator addons
// remain forward-compatible with older Firefox.
appinfo: { label: name },
launch: launch,
close: close
});
});
exports.shutdown = function () {
Simulator.unregister(appinfo.label);
Simulator.unregister(name);
close();
}

View File

@ -137,7 +137,7 @@ let UI = {
startSimulator: function(version) {
this._portBeforeSimulatorStarted = this.connection.port;
let port = ConnectionManager.getFreeTCPPort();
let simulator = Simulator.getByVersion(version);
let simulator = Simulator.getByName(version);
if (!simulator) {
this.connection.log("Error: can't find simulator: " + version);
return;

View File

@ -9,11 +9,11 @@ const {Simulator} = Cu.import("resource://gre/modules/devtools/Simulator.jsm");
let store = new ObservableObject({versions:[]});
function feedStore() {
store.object.versions = Simulator.availableVersions().map(v => {
let simulator = Simulator.getByVersion(v);
store.object.versions = Simulator.availableNames().map(name => {
let simulator = Simulator.getByName(name);
return {
version: v,
label: simulator.appinfo.label
version: name,
label: simulator ? name : "Unknown"
}
});
}

View File

@ -6,8 +6,6 @@ const {Cu} = require("chrome");
const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm");
const {AddonManager} = Cu.import("resource://gre/modules/AddonManager.jsm");
const {EventEmitter} = Cu.import("resource://gre/modules/devtools/event-emitter.js");
const {Simulator} = Cu.import("resource://gre/modules/devtools/Simulator.jsm");
const {Devices} = Cu.import("resource://gre/modules/devtools/Devices.jsm");
const {Services} = Cu.import("resource://gre/modules/Services.jsm");
const {GetAddonsJSON} = require("devtools/webide/remote-resources");

View File

@ -205,8 +205,8 @@ let SimulatorScanner = {
_updateRuntimes() {
this._runtimes = [];
for (let version of Simulator.availableVersions()) {
this._runtimes.push(new SimulatorRuntime(version));
for (let name of Simulator.availableNames()) {
this._runtimes.push(new SimulatorRuntime(name));
}
this._emitUpdated();
},
@ -463,15 +463,15 @@ WiFiRuntime.prototype = {
// For testing use only
exports._WiFiRuntime = WiFiRuntime;
function SimulatorRuntime(version) {
this.version = version;
function SimulatorRuntime(name) {
this.name = name;
}
SimulatorRuntime.prototype = {
type: RuntimeTypes.SIMULATOR,
connect: function(connection) {
let port = ConnectionManager.getFreeTCPPort();
let simulator = Simulator.getByVersion(this.version);
let simulator = Simulator.getByName(this.name);
if (!simulator || !simulator.launch) {
return promise.reject("Can't find simulator: " + this.name);
}
@ -484,14 +484,7 @@ SimulatorRuntime.prototype = {
});
},
get id() {
return this.version;
},
get name() {
let simulator = Simulator.getByVersion(this.version);
if (!simulator) {
return "Unknown";
}
return Simulator.getByVersion(this.version).appinfo.label;
return this.name;
},
};

View File

@ -28,10 +28,14 @@
adbAddonsInstalled.resolve();
});
function onSimulatorInstalled(version) {
function getVersion(name) {
return name.match(/(\d+\.\d+)/)[0];
}
function onSimulatorInstalled(name) {
let deferred = promise.defer();
Simulator.on("register", function onUpdate() {
if (Simulator.getByVersion(version)) {
if (Simulator.getByName(name)) {
Simulator.off("register", onUpdate);
nextTick().then(deferred.resolve);
}
@ -39,17 +43,17 @@
return deferred.promise;
}
function installSimulatorFromUI(doc, version) {
let li = doc.querySelector('[addon="simulator-' + version + '"]');
function installSimulatorFromUI(doc, name) {
let li = doc.querySelector('[addon="simulator-' + getVersion(name) + '"]');
li.querySelector(".install-button").click();
return onSimulatorInstalled(version);
return onSimulatorInstalled(name);
}
function uninstallSimulatorFromUI(doc, version) {
function uninstallSimulatorFromUI(doc, name) {
let deferred = promise.defer();
Simulator.on("unregister", function onUpdate() {
nextTick().then(() => {
let li = doc.querySelector('[status="uninstalled"][addon="simulator-' + version + '"]');
let li = doc.querySelector('[status="uninstalled"][addon="simulator-' + getVersion(name) + '"]');
if (li) {
Simulator.off("unregister", onUpdate);
deferred.resolve();
@ -58,7 +62,7 @@
}
})
});
let li = doc.querySelector('[status="installed"][addon="simulator-' + version + '"]');
let li = doc.querySelector('[status="installed"][addon="simulator-' + getVersion(name) + '"]');
li.querySelector(".uninstall-button").click();
return deferred.promise;
}
@ -100,7 +104,7 @@
let sim10 = addons.simulators.filter(a => a.version == "1.0")[0];
sim10.install();
yield onSimulatorInstalled("1.0");
yield onSimulatorInstalled("Firefox OS 1.0");
win.Cmds.showAddons();
@ -119,11 +123,11 @@
info("Uninstalling Simulator 2.0");
yield installSimulatorFromUI(addonDoc, "2.0");
yield installSimulatorFromUI(addonDoc, "Firefox OS 2.0");
info("Uninstalling Simulator 3.0");
yield installSimulatorFromUI(addonDoc, "3.0");
yield installSimulatorFromUI(addonDoc, "Firefox OS 3.0");
yield nextTick();
@ -136,9 +140,9 @@
items = panelNode.querySelectorAll(".runtime-panel-item-simulator");
is(items.length, 3, "Found 3 simulators button");
yield uninstallSimulatorFromUI(addonDoc, "1.0");
yield uninstallSimulatorFromUI(addonDoc, "2.0");
yield uninstallSimulatorFromUI(addonDoc, "3.0");
yield uninstallSimulatorFromUI(addonDoc, "Firefox OS 1.0");
yield uninstallSimulatorFromUI(addonDoc, "Firefox OS 2.0");
yield uninstallSimulatorFromUI(addonDoc, "Firefox OS 3.0");
items = panelNode.querySelectorAll(".runtime-panel-item-simulator");
is(items.length, 0, "No simulator listed");

View File

@ -8,33 +8,27 @@ Components.utils.import("resource://gre/modules/devtools/event-emitter.js");
const EXPORTED_SYMBOLS = ["Simulator"];
function getVersionNumber(fullVersion) {
return fullVersion.match(/(\d+\.\d+)/)[0];
}
const Simulator = {
_simulators: {},
register: function (label, simulator) {
register: function (name, simulator) {
// simulators register themselves as "Firefox OS X.Y"
let versionNumber = getVersionNumber(label);
this._simulators[versionNumber] = simulator;
this.emit("register", versionNumber);
this._simulators[name] = simulator;
this.emit("register", name);
},
unregister: function (label) {
let versionNumber = getVersionNumber(label);
delete this._simulators[versionNumber];
this.emit("unregister", versionNumber);
unregister: function (name) {
delete this._simulators[name];
this.emit("unregister", name);
},
availableVersions: function () {
availableNames: function () {
return Object.keys(this._simulators).sort();
},
getByVersion: function (version) {
return this._simulators[version];
}
getByName: function (name) {
return this._simulators[name];
},
};
EventEmitter.decorate(Simulator);