const fs = require('fs');
const path = require('path');
const extension_debug = require('debug')('EXTENSION');
-const MANIFEST_FILE = 'package.json';
+const MANIFEST_FILE = 'manifest.json';
const PRELOAD_JS_FILE = 'preload.js';
const EXTENSIONS_DB_FILE = 'extensions_db.json';
+const T_CRX = 'CRX';
const T_WRT = 'WRT';
const T_API = 'API';
+const {BrowserWindow} = require('electron');
var EXTENSIONS_PATH = process.env.WAS_EXTENSIONS_PATH;
if (!EXTENSIONS_PATH) {
try {
var manifest_obj, manifest_path = path.join(extension.path, MANIFEST_FILE);
manifest_obj = JSON.parse(fs.readFileSync(manifest_path));
+ extension_debug('manifest_obj : ' + JSON.stringify(manifest_obj));
if (manifest_obj.type && manifest_obj.type.toUpperCase() === 'INSTALLER') {
// do nothing for installer extension
extension_debug('ExtensionManager.build ' + manifest_obj.name + ' is for installer - SKIP');
}
}
} else {
- if (!extensions[T_WRT]) {
- extensions[T_WRT] = [];
+ var type;
+ if (manifest_obj.main) {
+ type = T_WRT;
+ } else {
+ type = T_CRX;
}
- if (extensions[T_WRT][manifest_obj.name]) {
- extension_debug('extensions[WRT][' + manifest_obj.name + '] already registered : ' + extensions[T_WRT][manifest_obj.name]);
+ if (!extensions[type]) {
+ extensions[type] = [];
+ }
+ if (extensions[type][manifest_obj.name]) {
+ extension_debug('extensions[' + type + '][' + manifest_obj.name + '] already registered : ' + extensions[type][manifest_obj.name]);
continue;
}
- extensions[T_WRT][manifest_obj.name] = path.join(extension.path, manifest_obj.main);
- extension_debug('extensions[WRT][' + manifest_obj.name + '] = ' + manifest_obj.main + ' registered');
+ if (manifest_obj.main) {
+ extensions[type][manifest_obj.name] = path.join(extension.path, manifest_obj.main);
+ } else {
+ extensions[type][manifest_obj.name] = extension.path;
+ }
}
+ extension_debug('extensions[' + type + '][' + manifest_obj.name + '] = ' + extensions[type][manifest_obj.name] + ' registered');
} catch (e) {
extension_debug('ExtensionManager.build error - ' + e);
}
return;
}
var extension, extension_path = null;
- try {
+ if (this.extensions_[T_WRT] !== undefined && this.extensions_[T_WRT][name] !== undefined) {
extension_path = this.extensions_[T_WRT][name];
- } catch (e) {
- extension_debug('activate - error : ' + e);
- return;
- }
- extension_debug('activate: ' + extension_path + ' name:' + name);
- try {
- extension = require(extension_path);
- } catch (e) {
- extension_debug('activate - error on require() : ' + e);
+ extension_debug('activate: ' + extension_path + ' name:' + name);
+ try {
+ extension = require(extension_path);
+ } catch (e) {
+ extension_debug('activate - error on require() : ' + e);
+ return;
+ }
+ if (extension && extension.activate) {
+ extension.activate(event_emitter);
+ }
+ else extension_debug('extension.activate not defined!');
+ } else if (this.extensions_[T_CRX] !== undefined && this.extensions_[T_CRX][name] !== undefined) {
+ extension_path = this.extensions_[T_CRX][name];
+ extension_debug('activate 22: ' + extension_path + ' name:' + name);
+ try {
+ BrowserWindow.addExtension(extension_path);
+ } catch (e) {
+ extension_debug('activate - error on addExtension() : ' + e);
+ }
return;
}
- if (extension && extension.activate) {
- extension.activate(event_emitter);
- }
- else extension_debug('extension.activate not defined!');
}
deactivate(event_emitter, name) {
}
extension_debug('deactivate: name:' + name);
var extension, extension_path = null;
- try {
- extension_path = this.extensions_[T_WRT][name];
- } catch (e) {
- extension_debug('deactivate - error : ' + e);
- return;
- }
- extension_debug('deactivate: path:' + extension_path);
- try {
- extension = require(extension_path);
- } catch (e) {
- extension_debug('deactivate - error on require() : ' + e);
- }
- if (extension && extension.deactivate) {
- extension.deactivate(event_emitter);
- } else {
- extension_debug('extension.deactivate not defined!');
+ if (this.extensions_[T_WRT] !== undefined && this.extensions_[T_WRT][name] !== undefined) {
+ try {
+ extension_path = this.extensions_[T_WRT][name];
+ } catch (e) {
+ extension_debug('deactivate - error : ' + e);
+ return;
+ }
+ extension_debug('deactivate: path:' + extension_path);
+ try {
+ extension = require(extension_path);
+ } catch (e) {
+ extension_debug('deactivate - error on require() : ' + e);
+ }
+ if (extension && extension.deactivate) {
+ extension.deactivate(event_emitter);
+ } else {
+ extension_debug('extension.deactivate not defined!');
+ }
+ } else if (this.extensions_[T_CRX] !== undefined && this.extensions_[T_CRX][name] !== undefined) {
+ try {
+ BrowserWindow.removeExtension(name);
+ } catch (e) {
+ extension_debug('activate - error on removeExtension() : ' + e);
+ }
}
}
for (var name in this.extensions_[T_WRT]) {
this.activate(event_emitter, name);
}
+ for (var name in this.extensions_[T_CRX]) {
+ this.activate(event_emitter, name);
+ }
}
deactivateAll(event_emitter) {