* limitations under the License.
*/
-(function() {
const extension = require('./wrt_service_extension');
const wrt = require('../browser/wrt');
var window = global;
var extensions_ = {};
var runtime_variables_ = {'runtime_name': 'wrt-service'};
-var ExtensionLoader = function() {
- let plugins = require('./plugins.json');
- extension.initialize(runtime_variables_);
-
- var extensions = extension.getExtensions();
- for (var i = 0; i < extensions.length; i++) {
- extensions[i].loaded = false;
- for (var idx in plugins) {
- if (extensions[i].name === plugins[idx].name) {
- console.log("ExtensionLoader name " + extensions[i].name);
- extensions_[extensions[i].name] = extensions[i];
+class TizenExtension {
+ constructor() {
+ let plugins = require('./plugins.json');
+ extension.initialize(runtime_variables_);
+
+ var extensions = extension.getExtensions();
+ for (var i = 0; i < extensions.length; i++) {
+ extensions[i].loaded = false;
+ for (var idx in plugins) {
+ if (extensions[i].name === plugins[idx].name) {
+ console.log("ExtensionLoader name " + extensions[i].name);
+ extensions_[extensions[i].name] = extensions[i];
+ }
}
}
- }
- for (var name in extensions_) {
- if (!extensions_[name].use_trampoline) {
- this.load(extensions_[name]);
+ for (var name in extensions_) {
+ if (!extensions_[name].use_trampoline) {
+ this.load(extensions_[name]);
+ }
}
- }
- for (var name in extensions_) {
- if (extensions_[name].use_trampoline) {
- this.installTrampoline(extensions_[name]);
+ for (var name in extensions_) {
+ if (extensions_[name].use_trampoline) {
+ this.installTrampoline(extensions_[name]);
+ }
}
}
-};
-ExtensionLoader.prototype = {
/**
* Creates namespace for 'name' in given object.
* Eg. this.createNamespace(GLOBAL, 'tizen.contact') will create:
* @param {Object} object
* @param {String} name
*/
- createNamespace: function(object, name) {
+ createNamespace(object, name) {
var obj = object;
var arr = name.split('.');
for (var i = 0; i < arr.length; i++) {
obj[arr[i]] = obj[arr[i]] || {};
obj = obj[arr[i]];
}
- },
- exposeApi: function (ext) {
+ }
+
+ exposeApi(ext) {
var i, entry_points, entry_point, tmp, parent_name, base_name;
// additional entry points are installed in GLOBAL context by eval()
enumerable: true
});
}
- },
+ }
/**
* @param {Object} ext
*/
- load: function(ext) {
+ load(ext) {
if (ext.loaded) {
return;
}
} catch (err) {
console.log('Error loading extension "' + ext.name + '": ' + err.message);
}
- },
+ }
/**
* This is used to defer extension loading to it's first usage.
*
* @param {Object} ext
*/
- installTrampoline: function(ext) {
+ installTrampoline(ext) {
var entry_points = [...new Set(ext.entry_points)];
entry_points.push(ext.name);
for (var i = 0; i < entry_points.length; i++) {
enumerable: true
});
}
- },
+ }
- deleteTrampoline: function(ext) {
+ deleteTrampoline(ext) {
var entry_points = [...new Set(ext.entry_points)];
entry_points.push(ext.name);
delete GLOBAL[parent_name][base_name];
}
}
-};
-
-new ExtensionLoader();
-})();
+}
+module.exports = TizenExtension;
this.isLaunched = false;
this.inspectorEnabledByVconf = false;
this.sandbox = [];
+ this.sandbox_count = 0;
this.webContents = null;
this.addonPkgs = [];
const vm = require('vm');
if (type === 'startService') {
if (_this.sandbox[app_id] === undefined) {
+ if (_this.sandbox_count === 0) {
+ new TizenExtension();
+ }
+ _this.sandbox_count++;
const fs = require('fs');
const Module = require('module');
_this.sandbox[app_id] = {
event.preventDefault();
} else if (type === 'stopService') {
if (_this.sandbox[app_id]['stopped'] === undefined) {
+ _this.sandbox_count--;
_this.sandbox[app_id]['stopped'] = true;
_this.sandbox[app_id]['started'] = undefined;
const stop_callback_string = 'if (module.exports.onStop !== undefined) { module.exports.onStop(); }';
vm.runInContext(stop_callback_string, _this.sandbox[app_id]);
_this.sandbox[app_id]['timer_manager'].releaseRemainingTimers();
- _this.sandbox[app_id] = undefined;
+ for(let key in _this.sandbox[app_id]) {
+ delete _this.sandbox[app_id][key];
+ }
+ delete _this.sandbox[app_id];
+ if (sandbox_count === 0) {
+ tizen = null;
+ }
} else {
console.log('UI service has been stopped.');
}