var sandbox = [];
var sandbox_count = 0;
+var service_source = [];
-wrt.on('start-service', (event, app_id, permissions) => {
- console.log('start service app : ' + app_id + ', permissions : ' + permissions);
- new XWalkExtension();
- if (sandbox[app_id] === undefined) {
+wrt.on('start-service', (event, internal_id, permissions) => {
+ console.log('start service app : ' + internal_id + ', permissions : ' + permissions);
+ if (sandbox[internal_id] === undefined) {
if (sandbox_count === 0) {
new XWalkExtension();
}
sandbox_count++;
const Module = require('module');
- sandbox[app_id] = {
+ sandbox[internal_id] = {
console: console,
module: new Module,
require: require,
tizen: tizen,
};
- let access_control_manager = new AccessControlManager(permissions, sandbox[app_id]);
+ let access_control_manager = new AccessControlManager(permissions, sandbox[internal_id]);
access_control_manager.initialize();
- for(let key in global) {
- sandbox[app_id][key] = global[key];
+ for (let key in global) {
+ sandbox[internal_id][key] = global[key];
}
let standard_object_list = [ Error, EvalError, RangeError, ReferenceError,
SyntaxError, TypeError, URIError, Number, BigInt, Math, Date,
WebAssembly.Table, WebAssembly.CompileError, WebAssembly.LinkError,
WebAssembly.RuntimeError, Boolean, Function, Object, Symbol ];
for (let idx in standard_object_list) {
- sandbox[app_id][standard_object_list[idx].name] = standard_object_list[idx];
+ sandbox[internal_id][standard_object_list[idx].name] = standard_object_list[idx];
}
- let options = { filename: app_id };
- vm.runInNewContext(wrt.readService(app_id), sandbox[app_id], options);
+ let options = { filename: internal_id };
+ let service_id = internal_id.substr(0, internal_id.indexOf(":"));
+ let terminate_service_client_process = false;
+ if (service_source[service_id] === undefined) {
+ service_source[service_id] = wrt.readService(internal_id);
+ terminate_service_client_process = true;
+ }
+ vm.runInNewContext(service_source[service_id], sandbox[internal_id], options);
- if (!wrt.terminateClient(app_id)) {
- console.log('Failed to terminate client process');
+ if (terminate_service_client_process) {
+ if (!wrt.terminateServiceClientProcess(internal_id)) {
+ console.log('Failed to terminate client process');
+ }
}
}
- if (sandbox[app_id]['started'] === undefined) {
- sandbox[app_id]['started'] = true;
- sandbox[app_id]['stopped'] = undefined;
+ if (sandbox[internal_id]['started'] === undefined) {
+ sandbox[internal_id]['started'] = true;
+ sandbox[internal_id]['stopped'] = undefined;
const start_callback_string = 'if (module.exports.onStart !== undefined) { module.exports.onStart(); }';
- vm.runInContext(start_callback_string, sandbox[app_id]);
+ vm.runInContext(start_callback_string, sandbox[internal_id]);
}
const request_callback_string = 'if (module.exports.onRequest !== undefined) { module.exports.onRequest(); }';
- vm.runInContext(request_callback_string, sandbox[app_id]);
+ vm.runInContext(request_callback_string, sandbox[internal_id]);
});
-wrt.on('stop-service', (event, app_id) => {
- if (sandbox[app_id]['stopped'] === undefined) {
+wrt.on('stop-service', (event, internal_id) => {
+ if (sandbox[internal_id]['stopped'] === undefined) {
sandbox_count--;
- sandbox[app_id]['stopped'] = true;
- sandbox[app_id]['started'] = undefined;
+ sandbox[internal_id]['stopped'] = true;
+ sandbox[internal_id]['started'] = undefined;
const stop_callback_string = 'if (module.exports.onStop !== undefined) { module.exports.onStop(); }';
- vm.runInContext(stop_callback_string, sandbox[app_id]);
- for(let key in sandbox[app_id]) {
- delete sandbox[app_id][key];
+ vm.runInContext(stop_callback_string, sandbox[internal_id]);
+ for(let key in sandbox[internal_id]) {
+ delete sandbox[internal_id][key];
}
- delete sandbox[app_id];
+ delete sandbox[internal_id];
if (sandbox_count === 0) {
tizen = null;
}