VulpesOS/gaia/tools/extensions/gaia-build@gaiamobile.org/content/gaia.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

171 lines
5.6 KiB
JavaScript
Executable file

var Gaia = {
_listeners: {},
buildModules: {},
require: null,
loadXpcshellScript: function gaia_loadXpcshellScript(config, name) {
let module =
Cu.Sandbox(Services.scriptSecurityManager.getSystemPrincipal());
for (var i in config) {
module[i] = config[i];
}
Services.scriptloader.loadSubScript(
'file:///' + config.GAIA_DIR.replace(/\\/g, '/') + '/build/' + name +
'.js', module
);
return module;
},
getConfig: function gaia_getConfig(profilePath, gaiaPath) {
let os = Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULRuntime).OS;
const SEP = os === 'WINNT' ? '\\' : '/';
let config = {};
config.GAIA_DIR = gaiaPath;
config.PROFILE_DIR = profilePath;
config.PROFILE_FOLDER = 'profile-debug';
config.GAIA_SCHEME = 'http://';
config.GAIA_DOMAIN = 'gaiamobile.org';
config.DEBUG = 1;
config.DEVICE_DEBUG = 0;
config.LOCAL_DOMAINS = 1;
config.DESKTOP = 1;
config.HOMESCREEN = config.GAIA_SCHEME + 'system.' + config.GAIA_DOMAIN;
config.GAIA_PORT = ':8080';
config.GAIA_LOCALES_PATH = 'locales';
config.LOCALES_FILE = 'shared/resources/languages.json';
config.LOCALE_BASEDIR = '';
config.BUILD_APP_NAME = '*';
config.PRODUCTION = '0';
config.GAIA_OPTIMIZE = '0';
config.GAIA_DEV_PIXELS_PER_PX = '1';
config.DOGFOOD = '0';
config.OFFICIAL = '';
config.GAIA_DEFAULT_LOCALE = 'en-US';
config.GAIA_PRETRANSLATE = '1';
config.GAIA_CONCAT_LOCALES = '1';
config.GAIA_ENGINE = 'xpcshell';
config.TARGET_BUILD_VARIANT = '';
config.NOFTU = '1';
config.REMOTE_DEBUGGER = '0';
config.SETTINGS_PATH = ['build', 'config',
'custom-settings.json'].join(SEP);
config.GAIA_DISTRIBUTION_DIR = [gaiaPath, 'distribution'].join(SEP);
config.GAIA_BUILD_DIR = 'file://' + gaiaPath + '/build/';
config.GAIA_KEYBOARD_LAYOUTS = 'en,pt-BR,es,de,fr,pl';
return config;
},
getTmpFolder: function gaia_getTmpFolder(name) {
let file = Cc['@mozilla.org/file/directory_service;1']
.getService(Ci.nsIProperties).get('TmpD', Ci.nsIFile);
file.append(name);
file.createUnique(Ci.nsIFile.DIRECTORY_TYPE, parseInt('0777', 8));
return file;
},
installExtension: function gaia_installExtension(extensionsDir, gaiaPath,
extName, domain) {
let utils = this.buildModules['utils'];
let ext = extensionsDir.clone();
let src = utils.getFile(gaiaPath, 'tools', 'extensions', extName);
let destname = extName.contains('@') ? extName : extName + '@' + domain;
ext.append(destname);
utils.writeContent(ext, src.path);
},
setup: function gaia_setup(gaiaPath) {
var self = this;
if (!gaiaPath) {
throw new Error('gaiaPath is empty');
}
this.profile = this.getTmpFolder('gaia');
// Generate global variables required by build scripts
try {
this.config = this.getConfig(this.profile.path, gaiaPath);
} catch (e) {
var msg = 'Can\'t load Gaia configuration, You may choose wrong gaia' +
' directory';
throw new Error(msg);
}
try {
this.require = this.loadXpcshellScript(this.config,
'xpcshell-commonjs').require;
} catch (e) {
throw new Error('xpcshell-commonjs doesn\'t exist, you may choose wrong' +
' gaia directory');
}
var modules = ['utils', 'preferences', 'applications-data', 'variant',
'webapp-manifests', 'webapp-optimize', 'webapp-zip', 'settings'];
modules.forEach(function(m) { self.buildModules[m] = self.require(m); });
var evt = new CustomEvent('setupFinished');
this.dispatchEvent(evt);
},
install: function gaia_install() {
var self = this;
if (!this.config || !this.profile) {
throw new Error('config or profile doesn\'t exist');
}
var config = this.config;
// Execute all parts of the build system
this.buildModules['preferences'].execute(config);
this.buildModules['applications-data'].execute(config);
this.buildModules['webapp-manifests'].execute(config);
this.buildModules['settings'].execute(config);
// Install all helper addons
let extensions = this.profile.clone();
extensions.append('extensions');
this.buildModules['utils'].ensureFolderExists(extensions);
let exts = ['desktop-helper', 'browser-helper@gaiamobile.org', 'httpd'];
exts.forEach(function(ext) {
self.installExtension(extensions, config.GAIA_DIR, ext,
config.GAIA_DOMAIN);
});
},
launch: function gaia_launch() {
// Launch firefox with the custom profile
let firefox = Cc['@mozilla.org/file/directory_service;1']
.getService(Ci.nsIProperties).get('XREExeF', Ci.nsIFile);
let process = Cc['@mozilla.org/process/util;1']
.createInstance(Ci.nsIProcess);
process.init(firefox);
let args = ['-no-remote', '-profile', this.config.PROFILE_DIR];
process.run(false, args, args.length);
},
addEventListener: function gaia_addEventListener(type, listener) {
if (!this._listeners[type]) {
this._listeners[type] = [];
}
this._listeners[type].push(listener);
},
removeEventListener: function gaia_removeEventListener(type, listener) {
if (this._listeners[type]) {
this._listeners[type].every(function(li, index) {
if (li === listener) {
this._listeners.splice(index, 1);
return false;
}
return true;
});
}
},
dispatchEvent: function gaia_dispatchEvent(event) {
if (this._listeners[event.type]) {
this._listeners[event.type].forEach(function(listener) {
listener(event);
});
}
}
};