From: Youngsoo Choi Date: Sun, 17 Sep 2017 06:02:56 +0000 (+0900) Subject: [WRT] Support chrome style extension management X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6a9d9029210f4c62c27bbfe44cc1058cf4c892fe;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git [WRT] Support chrome style extension management 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 --- diff --git a/wrt/src/extension_manager.js b/wrt/src/extension_manager.js index a11cf8c33..78934ab93 100644 --- a/wrt/src/extension_manager.js +++ b/wrt/src/extension_manager.js @@ -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) { diff --git a/wrt/wrt_support/apps_repo/extensions_settings/src/extension_manager.js b/wrt/wrt_support/apps_repo/extensions_settings/src/extension_manager.js index 1920e5c06..b13296804 100644 --- a/wrt/wrt_support/apps_repo/extensions_settings/src/extension_manager.js +++ b/wrt/wrt_support/apps_repo/extensions_settings/src/extension_manager.js @@ -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'; diff --git a/wrt/wrt_support/apps_repo/extensions_settings/src/main.js b/wrt/wrt_support/apps_repo/extensions_settings/src/main.js index 3e3c5c34d..1abfee190 100644 --- a/wrt/wrt_support/apps_repo/extensions_settings/src/main.js +++ b/wrt/wrt_support/apps_repo/extensions_settings/src/main.js @@ -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 = '' + name + '
v' + extension.version + '
' + extension.description + '
'; diff --git a/wrt/wrt_support/extensions_repo/alarm/manifest.json b/wrt/wrt_support/extensions_repo/alarm/manifest.json new file mode 100644 index 000000000..7310d08ad --- /dev/null +++ b/wrt/wrt_support/extensions_repo/alarm/manifest.json @@ -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 index 7310d08ad..000000000 --- a/wrt/wrt_support/extensions_repo/alarm/package.json +++ /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 index 000000000..178c20055 --- /dev/null +++ b/wrt/wrt_support/extensions_repo/banner_slide/manifest.json @@ -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 index 178c20055..000000000 --- a/wrt/wrt_support/extensions_repo/banner_slide/package.json +++ /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 index 000000000..152fa0774 --- /dev/null +++ b/wrt/wrt_support/extensions_repo/chrome_installer/manifest.json @@ -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 index 152fa0774..000000000 --- a/wrt/wrt_support/extensions_repo/chrome_installer/package.json +++ /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 index 000000000..245bd26a2 --- /dev/null +++ b/wrt/wrt_support/extensions_repo/iframe_banner_ads/manifest.json @@ -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 index 245bd26a2..000000000 --- a/wrt/wrt_support/extensions_repo/iframe_banner_ads/package.json +++ /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 index 000000000..e86b2f00f --- /dev/null +++ b/wrt/wrt_support/extensions_repo/launcher_new/manifest.json @@ -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 index e86b2f00f..000000000 --- a/wrt/wrt_support/extensions_repo/launcher_new/package.json +++ /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 index 000000000..cc4c68ea1 --- /dev/null +++ b/wrt/wrt_support/extensions_repo/ticker_test/manifest.json @@ -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 index cc4c68ea1..000000000 --- a/wrt/wrt_support/extensions_repo/ticker_test/package.json +++ /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 index 000000000..92aad7d05 --- /dev/null +++ b/wrt/wrt_support/extensions_repo/webos_installer/manifest.json @@ -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 index 92aad7d05..000000000 --- a/wrt/wrt_support/extensions_repo/webos_installer/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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_settings/src/extension_manager.js b/wrt/wrt_support/extensions_settings/src/extension_manager.js index 1920e5c06..ccba5a2a8 100755 --- a/wrt/wrt_support/extensions_settings/src/extension_manager.js +++ b/wrt/wrt_support/extensions_settings/src/extension_manager.js @@ -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'; @@ -288,7 +288,7 @@ return false; } // Introduction Comments & preset - var comments = "// Auto-generated code by extensions_installer\n// Generated from “entry_points” field in package.json\n// var = ;\n"; + var comments = "// Auto-generated code by extensions_installer\n// Generated from “entry_points” field in manifest.json\n// var = ;\n"; var preset = "\nvar EXTENSIONS_PATH = process.env.WAS_EXTENSIONS_PATH;\n"; fs.writeSync(fd, comments+preset);