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 a11cf8c..78934ab 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 1920e5c..b132968 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 3e3c5c3..1abfee1 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/package.json b/wrt/wrt_support/extensions_repo/alarm/manifest.json similarity index 100% rename from wrt/wrt_support/extensions_repo/alarm/package.json rename to wrt/wrt_support/extensions_repo/alarm/manifest.json diff --git a/wrt/wrt_support/extensions_repo/banner_slide/package.json b/wrt/wrt_support/extensions_repo/banner_slide/manifest.json similarity index 100% rename from wrt/wrt_support/extensions_repo/banner_slide/package.json rename to wrt/wrt_support/extensions_repo/banner_slide/manifest.json diff --git a/wrt/wrt_support/extensions_repo/chrome_installer/package.json b/wrt/wrt_support/extensions_repo/chrome_installer/manifest.json similarity index 100% rename from wrt/wrt_support/extensions_repo/chrome_installer/package.json rename to wrt/wrt_support/extensions_repo/chrome_installer/manifest.json diff --git a/wrt/wrt_support/extensions_repo/iframe_banner_ads/package.json b/wrt/wrt_support/extensions_repo/iframe_banner_ads/manifest.json similarity index 100% rename from wrt/wrt_support/extensions_repo/iframe_banner_ads/package.json rename to wrt/wrt_support/extensions_repo/iframe_banner_ads/manifest.json diff --git a/wrt/wrt_support/extensions_repo/launcher_new/package.json b/wrt/wrt_support/extensions_repo/launcher_new/manifest.json similarity index 100% rename from wrt/wrt_support/extensions_repo/launcher_new/package.json rename to wrt/wrt_support/extensions_repo/launcher_new/manifest.json diff --git a/wrt/wrt_support/extensions_repo/ticker_test/package.json b/wrt/wrt_support/extensions_repo/ticker_test/manifest.json similarity index 100% rename from wrt/wrt_support/extensions_repo/ticker_test/package.json rename to wrt/wrt_support/extensions_repo/ticker_test/manifest.json diff --git a/wrt/wrt_support/extensions_repo/webos_installer/package.json b/wrt/wrt_support/extensions_repo/webos_installer/manifest.json similarity index 100% rename from wrt/wrt_support/extensions_repo/webos_installer/package.json rename to wrt/wrt_support/extensions_repo/webos_installer/manifest.json diff --git a/wrt/wrt_support/extensions_settings/src/extension_manager.js b/wrt/wrt_support/extensions_settings/src/extension_manager.js index 1920e5c..ccba5a2 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);