'use strict';
-const moduleList = require('./module-list');
-
-const memoizedGetter = (getter) => {
- let memoizedValue = null;
+const common = require('../common/addonapi');
+common.defineProperties(exports);
- return () => {
- if (memoizedValue === null) {
- memoizedValue = getter();
- }
- return memoizedValue;
- }
-}
+const moduleList = require('./module-list');
for (const module of moduleList) {
Object.defineProperty(exports, module.name, {
- get: memoizedGetter(() => require(`./modules/${module.file}.js`))
+ get: common.memoizedGetter(() => require(`./modules/${module.file}`))
});
}
// Browser side add-on modules, please sort alphabetically
module.exports = [
{ name: 'messaging', file: 'messaging' },
- { name: 'options', file: 'options' },
{ name: 'window', file: 'window' }
]
+++ /dev/null
-'use strict';
-
-const fs = require('fs');
-const path = require('path');
-
-const REPO_PATH = path.join(require('os').homedir(), 'data/electron/runtime_addon/');
-const DB_FILE = '_db.json';
-
-module.exports = {
- get: function (addon_name, key) {
- const DB_PATH = REPO_PATH + addon_name + DB_FILE;
- try {
- const fileContents = fs.readFileSync(DB_PATH);
- const jsonObject = JSON.parse(fileContents);
- console.log(`read value: ${JSON.stringify(jsonObject)}`);
- return jsonObject[key];
- } catch (err) {
- console.log(`An error has occurred: ${err}`);
- }
- },
-
- set: function (addon_name, key, value) {
- const DB_PATH = REPO_PATH + addon_name + DB_FILE;
- try {
- const fileContents = fs.readFileSync(DB_PATH);
- let jsonObject = JSON.parse(fileContents);
- console.log(`current value: ${JSON.stringify(jsonObject)}`);
- jsonObject[key] = value;
- console.log(`new value: ${JSON.stringify(jsonObject)}`);
- const jsonString = JSON.stringify(jsonObject);
- fs.writeFileSync(DB_PATH, jsonString);
- } catch (err) {
- console.log(`An error has occurred: ${err}`);
- }
- }
-}
\ No newline at end of file
--- /dev/null
+'use strict';
+
+const moduleList = require('./module-list');
+
+exports.memoizedGetter = (getter) => {
+ let memoizedValue = null;
+
+ return () => {
+ if (memoizedValue === null) {
+ memoizedValue = getter();
+ }
+ return memoizedValue;
+ }
+}
+
+exports.defineProperties = function (targetExports) {
+ const descriptors = {};
+ for (const module of moduleList) {
+ descriptors[module.name] = {
+ get: exports.memoizedGetter(() => require(`./modules/${module.file}`))
+ }
+ }
+ return Object.defineProperties(targetExports, descriptors);
+}
--- /dev/null
+'use strict';
+
+// Common add-on modules, please sort alphabetically
+module.exports = [
+ { name: 'options', file: 'options' }
+];
--- /dev/null
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+const utils = require('../utils');
+
+const REPO_PATH = path.join(require('os').homedir(), 'data/electron/runtime_addon/');
+const DB_FILE = '_db.json';
+
+module.exports = {
+ get: function (key) {
+ const addon_name = utils.getPackageID();
+ if (!addon_name) {
+ console.error(`Package ID not found`);
+ return undefined;
+ }
+ const DB_PATH = REPO_PATH + addon_name + DB_FILE;
+ console.log(`DB_PATH: ${DB_PATH}`);
+ try {
+ const fileContents = fs.readFileSync(DB_PATH);
+ const jsonObject = JSON.parse(fileContents);
+ console.log(`Read value: ${JSON.stringify(jsonObject)}`);
+ return jsonObject[key];
+ } catch (err) {
+ console.log(`An error has occurred: ${err}`);
+ return undefined;
+ }
+ },
+
+ set: function (key, value) {
+ const addon_name = utils.getPackageID();
+ if (!addon_name) {
+ console.error(`Package ID not found`);
+ return false;
+ }
+ const DB_PATH = REPO_PATH + addon_name + DB_FILE;
+ console.log(`DB_PATH: ${DB_PATH}`);
+ try {
+ let jsonObject;
+ try {
+ const fileContents = fs.readFileSync(DB_PATH);
+ jsonObject = JSON.parse(fileContents);
+ console.log(`Current value: ${JSON.stringify(jsonObject)}`);
+ } catch {
+ console.log(`Add-on DB file doesn't exist`);
+ jsonObject = {};
+ }
+ jsonObject[key] = value;
+ console.log(`New value: ${JSON.stringify(jsonObject)}`);
+ const jsonString = JSON.stringify(jsonObject);
+ fs.writeFileSync(DB_PATH, jsonString);
+ return true;
+ } catch (err) {
+ console.log(`An error has occurred: ${err}`);
+ return false;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+const keyTerm = 'globalapps';
+const delimiter = '/';
+
+function extractID(line) {
+ let keyTermAt = line.search(keyTerm);
+ let delimiterAt = line.indexOf(delimiter, keyTermAt);
+ return line.substr(delimiterAt + 1, 10);
+}
+
+module.exports = {
+ getPackageID() {
+ let stack = new Error().stack;
+ stack = stack.split('\n');
+ for (let i = 0; i < stack.length; ++i) {
+ if (stack[i].indexOf(keyTerm) !== -1)
+ return extractID(stack[i]);
+ }
+ return '';
+ }
+}
\ No newline at end of file
'use strict';
-const moduleList = require('./module-list');
-
-const memoizedGetter = (getter) => {
- let memoizedValue = null;
+const common = require('../common/addonapi');
+common.defineProperties(exports);
- return () => {
- if (memoizedValue === null) {
- memoizedValue = getter();
- }
- return memoizedValue;
- }
-}
+const moduleList = require('./module-list');
for (const module of moduleList) {
Object.defineProperty(exports, module.name, {
- get: memoizedGetter(() => require(`./modules/${module.file}.js`))
+ get: common.memoizedGetter(() => require(`./modules/${module.file}`))
});
}
'use strict';
-const ADDONS_PATH = require('path').join(__dirname, 'addonapi.js');
+const path = require('path');
const Module = require('module');
const originalResolveFilename = Module._resolveFilename;
+const ADDONS_PATH = path.join(__dirname, '..', 'addon', process.type, 'addonapi.js');
+
Module._resolveFilename = function (request, parent, isMain) {
if (request === 'addonapi') {
return ADDONS_PATH;
*/
require('../common/exception_handling');
+require('../common/config-search-paths');
const wrtRenderer = require('./wrt_renderer');
require(wrtRenderer.getElectronPath() + '/renderer/init')
path.join(require('os').homedir(), 'data/electron/runtime_addon');
const MANIFEST_FILE = 'manifest.json';
const ADDONS_DB_FILE = 'addons_db.json';
-const ADDONS_PATH = path.join(__dirname, '..', 'addon', 'browser', 'addonapi.js');
// A set of predefined events for addons
const EventList = [
class AddonManager {
constructor() {
- this.registerAPIModule();
this.addons_list_ = null;
this.addons_ = null;
this.evt_emitter_ = null;
}
- registerAPIModule() {
- const Module = require('module');
- const originalResolveFilename = Module._resolveFilename;
- Module._resolveFilename = function (request, parent, isMain) {
- if (request === 'addonapi') {
- return ADDONS_PATH;
- } else {
- return originalResolveFilename(request, parent, isMain);
- }
- }
- }
-
loadJsonDB(db_path) {
if (!db_path) {
db_path = path.join(ADN_PATH, ADDONS_DB_FILE);
'use strict';
require('../common/exception_handling');
+require('../common/config-search-paths');
new (require('./runtime'))({
devMode: false,
const wrt = require('../browser/wrt');
const WRTWebContents = require('../browser/wrt_web_contents');
const WRTWindow = require('../browser/wrt_window');
-const PRELOAD_PATH = require('path').join(__dirname, '..', 'addon', 'renderer', 'apreload.js');
class WebApplication {
constructor(options) {
show: false,
webPreferences: {
nodeIntegration: options.isAddonAvailable,
- nodeIntegrationInWorker: false,
- preload: (options.isAddonAvailable) ? PRELOAD_PATH : undefined
+ nodeIntegrationInWorker: false
},
webContents: WRTWebContents.create(),
'web-preferences': {