const wrt = require('../browser/wrt');
let sandbox = {};
-let service_source = {};
-let is_global_service = !!wrt.readService;
+let is_global_service = !!wrt.getStartServiceFile;
function callFunctionInContext(name, sandbox) {
const script = `if (typeof ${name} === 'function') { ${name}(); }`;
function startService(id, filename) {
if (sandbox[id] === undefined) {
XWalkExtension.initialize();
-
+ XWalkExtension.setRuntimeMessageHandler((type, data) => {
+ if (type === 'tizen://exit')
+ setTimeout(() => {wrt.stopService(id)}, 500);
+ });
sandbox[id] = {
console: console,
module: new Module,
if (is_global_service) {
const permissions = wrt.getPrivileges(id);
- console.log('permissions : ' + permissions);
+ console.log(`permissions : ${permissions}`);
const AccessControlManager = require('../service/access_control_manager');
AccessControlManager.initialize(permissions, sandbox[id]);
}
let code;
if (is_global_service) {
options.filename = id;
- let service_id = id.substr(0, id.indexOf(":"));
- if (service_source[service_id] === undefined)
- service_source[service_id] = wrt.readService(id);
- code = service_source[service_id];
+ if (wrt.tv) {
+ let extension_resolver = function (module, file_path) {
+ console.log(`resolved path: ${file_path}`);
+ let content = wrt.tv.decryptFile(id, file_path);
+ if (content) {
+ // Remove BOM
+ if (content.charCodeAt(0) === 0xFEFF)
+ content = content.slice(1);
+ module._compile(content, file_path);
+ }
+ };
+ sandbox[id].require.extensions['.js.spm'] = extension_resolver;
+ sandbox[id].require.extensions['.spm'] = extension_resolver;
+ }
+ let start_service_file = wrt.getStartServiceFile(id);
+ console.log(`start service file: ${start_service_file}`);
+ code = `const app = require('${start_service_file}')`;
} else {
- const fs = require('fs');
- code = fs.readFileSync(filename);
+ code = `const app = require('${filename}')`;
}
vm.runInNewContext(code, sandbox[id], options);
if (sandbox[id]['started'] === undefined) {
sandbox[id]['started'] = true;
sandbox[id]['stopped'] = undefined;
- callFunctionInContext('module.exports.onStart', sandbox[id]);
+ callFunctionInContext('app.onStart', sandbox[id]);
if (is_global_service)
wrt.finishStartingService(id);
} else {
console.log(id + ' service has been started.');
}
- callFunctionInContext('module.exports.onRequest', sandbox[id]);
+ callFunctionInContext('app.onRequest', sandbox[id]);
}
function stopService(id) {
+ console.log('stopService')
if (sandbox[id]['stopped']) {
console.log(id + ' service has been already stopped.');
return;
sandbox[id]['stopped'] = true;
sandbox[id]['started'] = undefined;
- callFunctionInContext('module.exports.onStop', sandbox[id]);
+ callFunctionInContext('app.onStop', sandbox[id]);
sandbox[id].timer_manager.releaseRemainingTimers();
for (let key in sandbox[id])
}
}
+ runtimeMessageHandler(type, data, callback) {
+ console.log('This is prototype of runtimeMessageHandler');
+ }
+
/**
* @param {Object} ext
*/
return ext.setMessageListener(fn);
},
sendRuntimeMessage: function(type, data) {
- return runtimeMessageHandler(type, data);
+ return XWalkExtension.runtimeMessageHandler(type, data);
},
sendRuntimeSyncMessage: function(type, data) {
- return runtimeMessageHandler(type, data);
+ return XWalkExtension.runtimeMessageHandler(type, data);
},
sendRuntimeAsyncMessage: function(type, data, callback) {
- return runtimeMessageHandler(type, data, callback);
+ return XWalkExtension.runtimeMessageHandler(type, data, callback);
},
postData: function(msg, chunk) {
return ext.postData(msg, chunk);
if (!instance)
instance = new XWalkExtension;
},
+ setRuntimeMessageHandler: (handler) => {
+ XWalkExtension.runtimeMessageHandler = handler;
+ },
cleanup: () => {
delete global.tizen;
instance = undefined;