[WRT] Support chrome style extension management 36/150736/5
authorYoungsoo Choi <kenshin.choi@samsung.com>
Sun, 17 Sep 2017 06:02:56 +0000 (15:02 +0900)
committermin7.choi <min7.choi@samsung.com>
Fri, 22 Sep 2017 01:43:49 +0000 (10:43 +0900)
There has been an extension to inject js logic to app.
This supports chrome style extension as well.
The chrome style extension consists of background(event page),
content script, and manifest.json.

Now, two types of extensions are supportive:
one for injection style extension and another for chrome style extension.

Change-Id: Ie37f830d0a3856e8bebba4332bd354dc1f9840fb
Signed-off-by: Youngsoo Choi <kenshin.choi@samsung.com>
18 files changed:
wrt/src/extension_manager.js
wrt/wrt_support/apps_repo/extensions_settings/src/extension_manager.js
wrt/wrt_support/apps_repo/extensions_settings/src/main.js
wrt/wrt_support/extensions_repo/alarm/manifest.json [new file with mode: 0644]
wrt/wrt_support/extensions_repo/alarm/package.json [deleted file]
wrt/wrt_support/extensions_repo/banner_slide/manifest.json [new file with mode: 0644]
wrt/wrt_support/extensions_repo/banner_slide/package.json [deleted file]
wrt/wrt_support/extensions_repo/chrome_installer/manifest.json [new file with mode: 0644]
wrt/wrt_support/extensions_repo/chrome_installer/package.json [deleted file]
wrt/wrt_support/extensions_repo/iframe_banner_ads/manifest.json [new file with mode: 0644]
wrt/wrt_support/extensions_repo/iframe_banner_ads/package.json [deleted file]
wrt/wrt_support/extensions_repo/launcher_new/manifest.json [new file with mode: 0644]
wrt/wrt_support/extensions_repo/launcher_new/package.json [deleted file]
wrt/wrt_support/extensions_repo/ticker_test/manifest.json [new file with mode: 0644]
wrt/wrt_support/extensions_repo/ticker_test/package.json [deleted file]
wrt/wrt_support/extensions_repo/webos_installer/manifest.json [new file with mode: 0644]
wrt/wrt_support/extensions_repo/webos_installer/package.json [deleted file]
wrt/wrt_support/extensions_settings/src/extension_manager.js

index a11cf8c333835ffd3b5ceb42ed1f3ce6227150eb..78934ab935ba8b3801279290839e7458236e98e5 100644 (file)
@@ -2,11 +2,13 @@
 const fs = require('fs');
 const path = require('path');
 const extension_debug = require('debug')('EXTENSION');
-const MANIFEST_FILE = 'package.json';
+const MANIFEST_FILE = 'manifest.json';
 const PRELOAD_JS_FILE = 'preload.js';
 const EXTENSIONS_DB_FILE = 'extensions_db.json';
+const T_CRX = 'CRX';
 const T_WRT = 'WRT';
 const T_API = 'API';
+const {BrowserWindow} = require('electron');
 
 var EXTENSIONS_PATH = process.env.WAS_EXTENSIONS_PATH;
 if (!EXTENSIONS_PATH) {
@@ -171,6 +173,7 @@ class ExtensionManager {
                 try {
                     var manifest_obj, manifest_path = path.join(extension.path, MANIFEST_FILE);
                     manifest_obj = JSON.parse(fs.readFileSync(manifest_path));
+                    extension_debug('manifest_obj : ' + JSON.stringify(manifest_obj));
                     if (manifest_obj.type && manifest_obj.type.toUpperCase() === 'INSTALLER') {
                         // do nothing for installer extension
                         extension_debug('ExtensionManager.build ' + manifest_obj.name + ' is for installer - SKIP');
@@ -195,16 +198,26 @@ class ExtensionManager {
                             }
                         }
                     } else {
-                        if (!extensions[T_WRT]) {
-                            extensions[T_WRT] = [];
+                        var type;
+                        if (manifest_obj.main) {
+                            type = T_WRT;
+                        } else {
+                            type = T_CRX;
                         }
-                        if (extensions[T_WRT][manifest_obj.name]) {
-                            extension_debug('extensions[WRT][' + manifest_obj.name + '] already registered : ' + extensions[T_WRT][manifest_obj.name]);
+                        if (!extensions[type]) {
+                            extensions[type] = [];
+                        }
+                        if (extensions[type][manifest_obj.name]) {
+                            extension_debug('extensions[' + type + '][' + manifest_obj.name + '] already registered : ' + extensions[type][manifest_obj.name]);
                             continue;
                         }
-                        extensions[T_WRT][manifest_obj.name] = path.join(extension.path, manifest_obj.main);
-                        extension_debug('extensions[WRT][' + manifest_obj.name + '] = ' + manifest_obj.main + ' registered');
+                        if (manifest_obj.main) {
+                            extensions[type][manifest_obj.name] = path.join(extension.path, manifest_obj.main);
+                        } else {
+                            extensions[type][manifest_obj.name] = extension.path;
+                        }
                     }
+                    extension_debug('extensions[' + type + '][' + manifest_obj.name + '] = ' + extensions[type][manifest_obj.name] + ' registered');
                 } catch (e) {
                     extension_debug('ExtensionManager.build error - ' + e);
                 }
@@ -228,23 +241,29 @@ class ExtensionManager {
             return;
         }
         var extension, extension_path = null;
-        try {
+        if (this.extensions_[T_WRT] !== undefined && this.extensions_[T_WRT][name] !== undefined) {
             extension_path = this.extensions_[T_WRT][name];
-        } catch (e) {
-            extension_debug('activate - error : ' + e);
-            return;
-        }
-        extension_debug('activate: ' + extension_path + ' name:' + name);
-        try {
-            extension = require(extension_path);
-        } catch (e) {
-            extension_debug('activate - error on require() : ' + e);
+            extension_debug('activate: ' + extension_path + ' name:' + name);
+            try {
+                extension = require(extension_path);
+            } catch (e) {
+                extension_debug('activate - error on require() : ' + e);
+                return;
+            }
+            if (extension && extension.activate) {
+                extension.activate(event_emitter);
+            }
+            else extension_debug('extension.activate not defined!');
+        } else if (this.extensions_[T_CRX] !== undefined && this.extensions_[T_CRX][name] !== undefined) {
+            extension_path = this.extensions_[T_CRX][name];
+            extension_debug('activate 22: ' + extension_path + ' name:' + name);
+            try {
+                BrowserWindow.addExtension(extension_path);
+            } catch (e) {
+                extension_debug('activate - error on addExtension() : ' + e);
+            }
             return;
         }
-        if (extension && extension.activate) {
-            extension.activate(event_emitter);
-        }
-        else extension_debug('extension.activate not defined!');
     }
 
     deactivate(event_emitter, name) {
@@ -253,22 +272,30 @@ class ExtensionManager {
         }
         extension_debug('deactivate: name:' + name);
         var extension, extension_path = null;
-        try {
-            extension_path = this.extensions_[T_WRT][name];
-        } catch (e) {
-            extension_debug('deactivate - error : ' + e);
-            return;
-        }
-        extension_debug('deactivate: path:' + extension_path);
-        try {
-            extension = require(extension_path);
-        } catch (e) {
-            extension_debug('deactivate - error on require() : ' + e);
-        }
-        if (extension && extension.deactivate) {
-            extension.deactivate(event_emitter);
-        } else {
-            extension_debug('extension.deactivate not defined!');
+        if (this.extensions_[T_WRT] !== undefined && this.extensions_[T_WRT][name] !== undefined) {
+            try {
+                extension_path = this.extensions_[T_WRT][name];
+            } catch (e) {
+                extension_debug('deactivate - error : ' + e);
+                return;
+            }
+            extension_debug('deactivate: path:' + extension_path);
+            try {
+                extension = require(extension_path);
+            } catch (e) {
+                extension_debug('deactivate - error on require() : ' + e);
+            }
+            if (extension && extension.deactivate) {
+                extension.deactivate(event_emitter);
+            } else {
+                extension_debug('extension.deactivate not defined!');
+            }
+        } else if (this.extensions_[T_CRX] !== undefined && this.extensions_[T_CRX][name] !== undefined) {
+            try {
+                BrowserWindow.removeExtension(name);
+            } catch (e) {
+                extension_debug('activate - error on removeExtension() : ' + e);
+            }
         }
     }
 
@@ -280,6 +307,9 @@ class ExtensionManager {
         for (var name in this.extensions_[T_WRT]) {
             this.activate(event_emitter, name);
         }
+        for (var name in this.extensions_[T_CRX]) {
+            this.activate(event_emitter, name);
+        }
     }
 
     deactivateAll(event_emitter) {
index 1920e5c0622bd577e749370b6bcab5ee84770a2f..b132968046abaf3dbad8f4e715ace3d461c776a7 100644 (file)
@@ -1,7 +1,7 @@
 // This file is forked from wrt/src/extension_manager.js //
 
 (function() {
-  var MANIFEST_FILE = 'package.json';
+  var MANIFEST_FILE = 'manifest.json';
   var PRELOAD_JS_FILE = 'preload.js';
   var EXTENSIONS_DB_FILE = 'extensions_db.json';
   var T_WRT = 'WRT', T_API = 'API';
index 3e3c5c34d77e1aad798bbd44cf73349c9b4596b9..1abfee190e2b653139c3b98ac2e6b867c875998d 100644 (file)
@@ -70,6 +70,7 @@ var refreshRepoList = function() {
   extension_manager.loadJsonDB();
 
   for (name in extension_manager.repo_list_) {
+    console.log('name of repo list : ' + name);
     var repo_path = extension_manager.repo_list_[name];
     var extension = extension_manager.loadExtensionFromPath(repo_path);
     var contents = '<b>' + name + '</b><br><font size=1>v' + extension.version + '<br>' + extension.description + '</font>';
diff --git a/wrt/wrt_support/extensions_repo/alarm/manifest.json b/wrt/wrt_support/extensions_repo/alarm/manifest.json
new file mode 100644 (file)
index 0000000..7310d08
--- /dev/null
@@ -0,0 +1,13 @@
+{
+  "name": "alarm",
+  "version": "0.0.0",
+  "main": "Alarm",
+  "description": "Sample extension for API type",
+  "repository": "localhost",
+  "type": "API",
+  "namespace": "tizen",
+  "entry_points": [
+    { "AlarmAbsolute": "AlarmAbsolute" },
+    { "AlarmRelative": "AlarmRelative" }
+  ]
+}
diff --git a/wrt/wrt_support/extensions_repo/alarm/package.json b/wrt/wrt_support/extensions_repo/alarm/package.json
deleted file mode 100644 (file)
index 7310d08..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "name": "alarm",
-  "version": "0.0.0",
-  "main": "Alarm",
-  "description": "Sample extension for API type",
-  "repository": "localhost",
-  "type": "API",
-  "namespace": "tizen",
-  "entry_points": [
-    { "AlarmAbsolute": "AlarmAbsolute" },
-    { "AlarmRelative": "AlarmRelative" }
-  ]
-}
diff --git a/wrt/wrt_support/extensions_repo/banner_slide/manifest.json b/wrt/wrt_support/extensions_repo/banner_slide/manifest.json
new file mode 100644 (file)
index 0000000..178c200
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "name": "banner_slide",
+  "version": "0.0.0",
+  "main": "banner_slide",
+  "description": "Banner Slider by Jssor",
+  "repository": "localhost",
+  "developer": {
+    "name": "Jssor",
+    "url": "http://www.jssor.com"
+  }
+}
diff --git a/wrt/wrt_support/extensions_repo/banner_slide/package.json b/wrt/wrt_support/extensions_repo/banner_slide/package.json
deleted file mode 100644 (file)
index 178c200..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "name": "banner_slide",
-  "version": "0.0.0",
-  "main": "banner_slide",
-  "description": "Banner Slider by Jssor",
-  "repository": "localhost",
-  "developer": {
-    "name": "Jssor",
-    "url": "http://www.jssor.com"
-  }
-}
diff --git a/wrt/wrt_support/extensions_repo/chrome_installer/manifest.json b/wrt/wrt_support/extensions_repo/chrome_installer/manifest.json
new file mode 100644 (file)
index 0000000..152fa07
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "name": "chrome_installer",
+  "version": "0.0.1",
+  "main": "chrome_Installer",
+  "description": "Chrome installer extension",
+  "repository": "localhost",
+  "type": "installer"
+}
diff --git a/wrt/wrt_support/extensions_repo/chrome_installer/package.json b/wrt/wrt_support/extensions_repo/chrome_installer/package.json
deleted file mode 100644 (file)
index 152fa07..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "name": "chrome_installer",
-  "version": "0.0.1",
-  "main": "chrome_Installer",
-  "description": "Chrome installer extension",
-  "repository": "localhost",
-  "type": "installer"
-}
diff --git a/wrt/wrt_support/extensions_repo/iframe_banner_ads/manifest.json b/wrt/wrt_support/extensions_repo/iframe_banner_ads/manifest.json
new file mode 100644 (file)
index 0000000..245bd26
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "name": "iframe_banner_ads",
+  "version": "0.0.0",
+  "main": "iframe_banner_ads",
+  "description": "IFrameBannerAds by Microsoft",
+  "repository": "https://support.microsoft.com/en-us/kb/272246",
+  "developer": {
+    "name": "Microsoft",
+    "url": "https://www.microsoft.com"
+  }
+}
diff --git a/wrt/wrt_support/extensions_repo/iframe_banner_ads/package.json b/wrt/wrt_support/extensions_repo/iframe_banner_ads/package.json
deleted file mode 100644 (file)
index 245bd26..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "name": "iframe_banner_ads",
-  "version": "0.0.0",
-  "main": "iframe_banner_ads",
-  "description": "IFrameBannerAds by Microsoft",
-  "repository": "https://support.microsoft.com/en-us/kb/272246",
-  "developer": {
-    "name": "Microsoft",
-    "url": "https://www.microsoft.com"
-  }
-}
diff --git a/wrt/wrt_support/extensions_repo/launcher_new/manifest.json b/wrt/wrt_support/extensions_repo/launcher_new/manifest.json
new file mode 100644 (file)
index 0000000..e86b2f0
--- /dev/null
@@ -0,0 +1,7 @@
+{
+  "name": "launcher_new",
+  "version": "0.0.0",
+  "main": "launcher_new",
+  "description": "alert Window Infomation when launched",
+  "repository": "localhost"
+}
diff --git a/wrt/wrt_support/extensions_repo/launcher_new/package.json b/wrt/wrt_support/extensions_repo/launcher_new/package.json
deleted file mode 100644 (file)
index e86b2f0..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "name": "launcher_new",
-  "version": "0.0.0",
-  "main": "launcher_new",
-  "description": "alert Window Infomation when launched",
-  "repository": "localhost"
-}
diff --git a/wrt/wrt_support/extensions_repo/ticker_test/manifest.json b/wrt/wrt_support/extensions_repo/ticker_test/manifest.json
new file mode 100644 (file)
index 0000000..cc4c68e
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "name": "ticker_test",
+  "version": "0.0.0",
+  "main": "ticker_test",
+  "description": "Sample Ticker extension for WRT type",
+  "repository": "localhost",
+  "type": "WRT"
+}
diff --git a/wrt/wrt_support/extensions_repo/ticker_test/package.json b/wrt/wrt_support/extensions_repo/ticker_test/package.json
deleted file mode 100644 (file)
index cc4c68e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "name": "ticker_test",
-  "version": "0.0.0",
-  "main": "ticker_test",
-  "description": "Sample Ticker extension for WRT type",
-  "repository": "localhost",
-  "type": "WRT"
-}
diff --git a/wrt/wrt_support/extensions_repo/webos_installer/manifest.json b/wrt/wrt_support/extensions_repo/webos_installer/manifest.json
new file mode 100644 (file)
index 0000000..92aad7d
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "name": "webos_installer",
+  "version": "0.0.1",
+  "main": "WebOS_Installer",
+  "description": "WebOS installer extension",
+  "repository": "localhost",
+  "type": "installer"
+}
diff --git a/wrt/wrt_support/extensions_repo/webos_installer/package.json b/wrt/wrt_support/extensions_repo/webos_installer/package.json
deleted file mode 100644 (file)
index 92aad7d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "name": "webos_installer",
-  "version": "0.0.1",
-  "main": "WebOS_Installer",
-  "description": "WebOS installer extension",
-  "repository": "localhost",
-  "type": "installer"
-}
index 1920e5c0622bd577e749370b6bcab5ee84770a2f..ccba5a2a8cae80fddf09a7317899a809ad11ed05 100755 (executable)
@@ -1,7 +1,7 @@
 // This file is forked from wrt/src/extension_manager.js //
 
 (function() {
-  var MANIFEST_FILE = 'package.json';
+  var MANIFEST_FILE = 'manifest.json';
   var PRELOAD_JS_FILE = 'preload.js';
   var EXTENSIONS_DB_FILE = 'extensions_db.json';
   var T_WRT = 'WRT', T_API = 'API';
         return false;
       }
       // Introduction Comments & preset
-      var comments = "// Auto-generated code by extensions_installer\n// Generated from “entry_points” field in package.json\n// var <entry_points_symbol> = <entry_points_class>;\n";
+      var comments = "// Auto-generated code by extensions_installer\n// Generated from “entry_points” field in manifest.json\n// var <entry_points_symbol> = <entry_points_class>;\n";
       var preset = "\nvar EXTENSIONS_PATH = process.env.WAS_EXTENSIONS_PATH;\n";
       fs.writeSync(fd, comments+preset);