From: jaekuk, lee Date: Tue, 5 Jun 2018 01:28:38 +0000 (+0900) Subject: Implement Runtime Add-on X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F46%2F180846%2F1;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git Implement Runtime Add-on Change-Id: I3d5017a68ba43af8f4efff05069667a35d236e97 Signed-off-by: jaekuk, lee --- diff --git a/wrt/src/extension_manager.js b/wrt/src/extension_manager.js index 21c8cd0..1b9b965 100755 --- a/wrt/src/extension_manager.js +++ b/wrt/src/extension_manager.js @@ -14,7 +14,7 @@ var EXTENSIONS_PATH = process.env.WAS_EXTENSIONS_PATH; if (!EXTENSIONS_PATH) { var resourcePath = __dirname.split('app.asar')[0]; extension_debug('WARNING! WAS_EXTENSIONS_PATH not set - extensions cannot be loaded'); - EXTENSIONS_PATH = path.join(resourcePath, 'wrt_support/extensions'); + EXTENSIONS_PATH = path.join(resourcePath, 'runtime_addon'); extension_debug('Temporarily set WAS_EXTENSIONS_PATH=' + EXTENSIONS_PATH); } diff --git a/wrt/src/runtime.js b/wrt/src/runtime.js old mode 100644 new mode 100755 index 0bdaa49..2c1a1de --- a/wrt/src/runtime.js +++ b/wrt/src/runtime.js @@ -1,4 +1,6 @@ 'use strict'; +const EXTENSIONS_PATH = process.env.WAS_EXTENSIONS_PATH; +const ExtensionManager = require('./extension_manager'); const {app, ipcMain, pwrt} = require('electron'); const IPC_MESSAGE = require('./ipc_message'); const WAS_EVENT = require('./was_event'); @@ -13,15 +15,21 @@ class Runtime { this.quitting = false; this.handleWasEvents(); this.handleIpcMessages(); + this.extensionManager = null; this.isLaunched = false; var _this = this; + app.on('will-finish-launching', function() { + return runtime_debug('will-finish-launching'); + }); app.on('before-quit', function(event) { runtime_debug('before-quit'); - _this.quitting = true; + return _this.quitting = true; }); app.on('will-quit', function(event) { runtime_debug('will-quit'); + this.extensionManager.deactivateAll(app); + return _this.killAllProcesses(); }); app.on('quit', function(event) { return runtime_debug('quit'); @@ -56,10 +64,16 @@ class Runtime { }); app.on('ready', function(event) { runtime_debug('ready'); + this.extensionManager = new ExtensionManager(EXTENSIONS_PATH); + if (!options.noExtensions) { + this.extensionManager.build(); + } if (pwrt.isElectronLaunch()) { + this.extensionManager.activateAll(app); return; } this.webApplication = new WebApplication(options); + this.extensionManager.activateAll(app); }); } onPause(web_window_id) { @@ -81,6 +95,7 @@ class Runtime { onAppControl() {} onLanguageChanged() {} onLowMemory() {} + killAllProcesses() {} handleWasEvents() { var _this = this; events.on(WAS_EVENT.WEBAPPLICATION.RESUME, (sender, id) => { @@ -152,6 +167,23 @@ class Runtime { runtime_debug('handleWasMessages: destroyed ' + id); return app.emit(IPC_MESSAGE.WEBCONTENTS.DESTROYED, id); }); + ipcMain.on(IPC_MESSAGE.EXTENSIONS.INSTALLED, (sender, name) => { + runtime_debug('handleIpcMessages: INSTALLED ' + name); + this.extensionManager.build(); + return this.extensionManager.activate(app, name); + }); + ipcMain.on(IPC_MESSAGE.EXTENSIONS.UNINSTALLED, (sender, name) => { + runtime_debug('handleIpcMessages: UNINSTALLED ' + name); + return this.extensionManager.deactivate(app, name); + }); + ipcMain.on(IPC_MESSAGE.EXTENSIONS.ACTIVATE, (sender, name) => { + runtime_debug('handleIpcMessages: ACTIVATE ' + name); + return this.extensionManager.activate(app, name); + }); + ipcMain.on(IPC_MESSAGE.EXTENSIONS.DEACTIVATE, (sender, name) => { + runtime_debug('handleIpcMessages: DEACTIVATE ' + name); + return this.extensionManager.deactivate(app, name); + }); } } module.exports = Runtime;