mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 22:55:23 +00:00
93 lines
2.5 KiB
JavaScript
93 lines
2.5 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 { Cc, Ci, Cu } = require("chrome");
|
|
|
|
const { AddonManager } = Cu.import("resource://gre/modules/AddonManager.jsm", {});
|
|
const { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
|
|
const { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
|
|
const { Simulator } = Cu.import("resource://gre/modules/devtools/Simulator.jsm");
|
|
const { SimulatorProcess } = require("./simulator-process");
|
|
const Runtime = require("sdk/system/runtime");
|
|
const URL = require("sdk/url");
|
|
|
|
const ROOT_URI = require("addon").uri;
|
|
const PROFILE_URL = ROOT_URI + "profile/";
|
|
const BIN_URL = ROOT_URI + "b2g/";
|
|
|
|
let process;
|
|
|
|
function launch(options) {
|
|
// Close already opened simulation.
|
|
if (process) {
|
|
return close().then(launch.bind(null, options));
|
|
}
|
|
|
|
// Compute B2G runtime path.
|
|
let path;
|
|
try {
|
|
let pref = "extensions." + require("addon").id + ".customRuntime";
|
|
path = Services.prefs.getComplexValue(pref, Ci.nsIFile);
|
|
} catch(e) {}
|
|
|
|
if (!path) {
|
|
let executables = {
|
|
WINNT: "b2g-bin.exe",
|
|
Darwin: "B2G.app/Contents/MacOS/b2g-bin",
|
|
Linux: "b2g-bin",
|
|
};
|
|
path = URL.toFilename(BIN_URL);
|
|
path += Runtime.OS == "WINNT" ? "\\" : "/";
|
|
path += executables[Runtime.OS];
|
|
}
|
|
options.runtimePath = path;
|
|
console.log("simulator path:", options.runtimePath);
|
|
|
|
// Compute Gaia profile path.
|
|
if (!options.profilePath) {
|
|
let gaiaProfile;
|
|
try {
|
|
let pref = "extensions." + require("addon").id + ".gaiaProfile";
|
|
gaiaProfile = Services.prefs.getComplexValue(pref, Ci.nsIFile).path;
|
|
} catch(e) {}
|
|
|
|
options.profilePath = gaiaProfile || URL.toFilename(PROFILE_URL);
|
|
}
|
|
|
|
process = new SimulatorProcess(options);
|
|
process.run();
|
|
|
|
return promise.resolve();
|
|
}
|
|
|
|
function close() {
|
|
if (!process) {
|
|
return promise.resolve();
|
|
}
|
|
let p = process;
|
|
process = null;
|
|
return p.kill();
|
|
}
|
|
|
|
let name;
|
|
|
|
AddonManager.getAddonByID(require("addon").id, function (addon) {
|
|
name = addon.name.replace(" Simulator", "");
|
|
|
|
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(name);
|
|
close();
|
|
}
|
|
|