1 var fs = require('fs');
2 var path = require('path');
3 var spawn = require('child_process').spawn;
7 'user_pref("browser.shell.checkDefaultBrowser", false);\n' +
8 'user_pref("browser.bookmarks.restore_default_bookmarks", false);\n' +
9 'user_pref("dom.disable_open_during_load", false);\n' +
10 'user_pref("dom.max_script_run_time", 0);\n' +
11 'user_pref("dom.min_background_timeout_value", 10);\n' +
12 'user_pref("extensions.autoDisableScopes", 0);\n' +
13 'user_pref("extensions.enabledScopes", 15);\n';
15 // Return location of firefox.exe file for a given Firefox directory
16 // (available: "Mozilla Firefox", "Aurora", "Nightly").
17 var getFirefoxExe = function(firefoxDirName) {
18 if (process.platform !== 'win32') {
24 var prefixes = [process.env.PROGRAMFILES, process.env['PROGRAMFILES(X86)']];
25 var suffix = '\\'+ firefoxDirName + '\\firefox.exe';
27 for (var i = 0; i < prefixes.length; i++) {
29 if (fs.existsSync(prefix + suffix)) {
30 return prefix + suffix;
34 return 'C:\\Program Files' + suffix;
37 var getFirefoxWithFallbackOnOSX = function() {
38 if (process.platform !== 'darwin') {
42 var firefoxDirNames = Array.prototype.slice.call(arguments);
43 var prefix = '/Applications/';
44 var suffix = '.app/Contents/MacOS/firefox-bin';
48 for (var i = 0; i < firefoxDirNames.length; i++) {
49 bin = prefix + firefoxDirNames[i] + suffix;
50 homeBin = path.join(process.env.HOME, bin);
52 if (fs.existsSync(homeBin)) {
56 if (fs.existsSync(bin)) {
62 // https://developer.mozilla.org/en-US/docs/Command_Line_Options
63 var FirefoxBrowser = function(id, baseBrowserDecorator, args, logger) {
64 baseBrowserDecorator(this);
66 var log = logger.create('launcher');
67 this._getPrefs = function(prefs) {
68 if (typeof prefs !== 'object') {
72 for (var key in prefs) {
73 result += 'user_pref("' + key + '", ' + JSON.stringify(prefs[key]) + ');\n';
78 this._start = function(url) {
80 var command = this._getCommand();
81 var profilePath = args.profile || self._tempDir;
82 var flags = args.flags || [];
85 if (Array.isArray(args.extensions)) {
86 extensionsDir = path.resolve(profilePath, 'extensions');
87 fs.mkdirSync(extensionsDir);
88 args.extensions.forEach(function (ext) {
89 var extBuffer = fs.readFileSync(ext);
90 var copyDestination = path.resolve(extensionsDir, path.basename(ext));
91 fs.writeFileSync(copyDestination, extBuffer);
95 fs.writeFileSync(profilePath + '/prefs.js', this._getPrefs(args.prefs));
98 [url, '-profile', profilePath, '-no-remote'].concat(flags)
104 FirefoxBrowser.prototype = {
110 darwin: getFirefoxWithFallbackOnOSX('Firefox'),
111 win32: getFirefoxExe('Mozilla Firefox')
113 ENV_CMD: 'FIREFOX_BIN'
116 FirefoxBrowser.$inject = ['id', 'baseBrowserDecorator', 'args', 'logger'];
119 var FirefoxDeveloperBrowser = function() {
120 FirefoxBrowser.apply(this, arguments);
123 FirefoxDeveloperBrowser.prototype = {
124 name: 'FirefoxDeveloper',
127 darwin: getFirefoxWithFallbackOnOSX('FirefoxDeveloperEdition', 'FirefoxAurora'),
128 win32: getFirefoxExe('Firefox Developer Edition')
130 ENV_CMD: 'FIREFOX_DEVELOPER_BIN'
133 FirefoxDeveloperBrowser.$inject = ['id', 'baseBrowserDecorator', 'args', 'logger'];
136 var FirefoxAuroraBrowser = function() {
137 FirefoxBrowser.apply(this, arguments);
140 FirefoxAuroraBrowser.prototype = {
141 name: 'FirefoxAurora',
144 darwin: getFirefoxWithFallbackOnOSX('FirefoxAurora'),
145 win32: getFirefoxExe('Aurora')
147 ENV_CMD: 'FIREFOX_AURORA_BIN'
150 FirefoxAuroraBrowser.$inject = ['id', 'baseBrowserDecorator', 'args', 'logger'];
153 var FirefoxNightlyBrowser = function() {
154 FirefoxBrowser.apply(this, arguments);
157 FirefoxNightlyBrowser.prototype = {
158 name: 'FirefoxNightly',
162 darwin: getFirefoxWithFallbackOnOSX('FirefoxNightly'),
163 win32: getFirefoxExe('Nightly')
165 ENV_CMD: 'FIREFOX_NIGHTLY_BIN'
168 FirefoxNightlyBrowser.$inject = ['id', 'baseBrowserDecorator', 'args', 'logger'];
173 'launcher:Firefox': ['type', FirefoxBrowser],
174 'launcher:FirefoxDeveloper': ['type', FirefoxDeveloperBrowser],
175 'launcher:FirefoxAurora': ['type', FirefoxAuroraBrowser],
176 'launcher:FirefoxNightly': ['type', FirefoxNightlyBrowser]