Implement Runtime Add-on 46/180846/1
authorjaekuk, lee <juku1999@samsung.com>
Tue, 5 Jun 2018 01:28:38 +0000 (10:28 +0900)
committerjaekuk, lee <juku1999@samsung.com>
Tue, 5 Jun 2018 01:28:38 +0000 (10:28 +0900)
Change-Id: I3d5017a68ba43af8f4efff05069667a35d236e97
Signed-off-by: jaekuk, lee <juku1999@samsung.com>
wrt/src/extension_manager.js
wrt/src/runtime.js [changed mode: 0644->0755]

index 21c8cd0..1b9b965 100755 (executable)
@@ -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);
 }
 
old mode 100644 (file)
new mode 100755 (executable)
index 0bdaa49..2c1a1de
@@ -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;