From 690a82fac06197ea379322e486df1976ce598405 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Tue, 26 Nov 2019 21:29:54 -0800 Subject: [PATCH 01/16] [Service][Global] Add handler of stop-service This adds handler of stop-service. Change-Id: I7c73f9a204844216141edc47ab26e142368ec3d1 Signed-off-by: Youngsoo Choi --- wrt_app/service/main.js | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/wrt_app/service/main.js b/wrt_app/service/main.js index 9713ffb..19594ce 100755 --- a/wrt_app/service/main.js +++ b/wrt_app/service/main.js @@ -19,12 +19,18 @@ const wrt = require('../browser/wrt'); const vm = require('vm'); const TizenExtension = require('./tizen_extension'); + var sandbox = []; +var sandbox_count = 0; wrt.on('start-service', (event, app_id) => { console.log('start service app : ' + app_id); new TizenExtension(); if (sandbox[app_id] === undefined) { + if (sandbox_count === 0) { + new TizenExtension(); + } + sandbox_count++; const Module = require('module'); sandbox[app_id] = { console: console, @@ -57,13 +63,33 @@ wrt.on('start-service', (event, app_id) => { } if (sandbox[app_id]['started'] === undefined) { sandbox[app_id]['started'] = true; + sandbox[app_id]['stopped'] = undefined; const start_callback_string = 'if (module.exports.onStart !== undefined) { module.exports.onStart(); }'; vm.runInContext(start_callback_string, sandbox[app_id]); } const request_callback_string = 'if (module.exports.onRequest !== undefined) { module.exports.onRequest(); }'; vm.runInContext(request_callback_string, sandbox[app_id]); -}) +}); + +wrt.on('stop-service', (event, app_id) => { + if (sandbox[app_id]['stopped'] === undefined) { + sandbox_count--; + sandbox[app_id]['stopped'] = true; + sandbox[app_id]['started'] = undefined; + const stop_callback_string = 'if (module.exports.onStop !== undefined) { module.exports.onStop(); }'; + vm.runInContext(stop_callback_string, sandbox[app_id]); + for(let key in sandbox[app_id]) { + delete sandbox[app_id][key]; + } + delete sandbox[app_id]; + if (sandbox_count === 0) { + tizen = null; + } + } else { + console.log('The global service has been already stopped.'); + } +}); process.on('exit', (code) => { console.log('Exit with code : ' + code); -}) +}); -- 2.7.4 From 8c0aa40bf1e2768b25db44536032d8b58df3ab40 Mon Sep 17 00:00:00 2001 From: "k2.nagaraju" Date: Tue, 17 Dec 2019 20:30:57 +0530 Subject: [PATCH 02/16] [Service][Global] Implement access control for privilege management This provides access control as per specified privileges in config.xml for service application. Change-Id: I2bae3574fccd9e7333c485e6b3229b407ad28660 Signed-off-by: k2.nagaraju Signed-off-by: Youngsoo Choi --- wrt_app/service/access_control_manager.js | 123 ++++++++++++++++++++++++++++++ wrt_app/service/main.js | 7 +- 2 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 wrt_app/service/access_control_manager.js diff --git a/wrt_app/service/access_control_manager.js b/wrt_app/service/access_control_manager.js new file mode 100644 index 0000000..bda869d --- /dev/null +++ b/wrt_app/service/access_control_manager.js @@ -0,0 +1,123 @@ +class AccessControlManager { + constructor(permissions, sandbox) { + this.permissions = permissions; + this.sandbox = sandbox; + this.systeminfo = {}; + this.systeminfo.getPropertyValue = sandbox.tizen.systeminfo.getPropertyValue; + } + initialize() { + const permissions = this.permissions; + let tizen = this.sandbox.tizen; + if (!permissions.includes("http://tizen.org/privilege/alarm")) { + tizen.alarm.add = + tizen.alarm.remove = + tizen.alarm.removeAll = + tizen.alarm.get = + tizen.alarm.getAll = + tizen.alarm.getAlarmNotification = + tizen.alarm.addAlarmNotification = function() { + console.log('The alarm permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/apphistory.read")) { + tizen.application.getAppsUsageInfo = + tizen.application.getBatteryUsageInfo = function() { + console.log('The application.read permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/application.launch")) { + tizen.application.launch = + tizen.application.launchAppControl = function() { + console.log('The application.launch permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/application.info")) { + tizen.application.getAppMetaData = function() { + console.log('The application.info permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/appmanager.certificate")) { + tizen.application.getAppCerts = function() { + console.log('The application.certificate permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/appmanager.kill")) { + tizen.application.kill = function() { + console.log('The application.kill permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/appmanager.launch") || + !permissions.includes("http://tizen.org/privilege/datasharing")) { + tizen.datacontrol.addChangeListener = + tizen.datacontrol.removeChangeListener = function() { + console.log('The appmanager.launch or datasharing permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/datacontrol.consumer")) { + tizen.datacontrol.getValue = + tizen.datacontrol.updateValue = + tizen.datacontrol.insert = + tizen.datacontrol.update = + tizen.datacontrol.remove = + tizen.datacontrol.select = + tizen.datacontrol.addValue = + tizen.datacontrol.removeValue = + tizen.datacontrol.getDataControlConsumer = function() { + console.log('The datacontrol.consumer permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/filesystem.read")) { + tizen.filesystem.listDirectory = + tizen.filesystem.isFile = + tizen.filesystem.isDirectory = + tizen.filesystem.pathExists = + tizen.filesystem.copyFile = + tizen.filesystem.copyDirectory = + tizen.filesystem.moveFile = + tizen.filesystem.moveDirectory = + tizen.filesystem.resolve = function() { + console.log('The filesystem.read permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/filesystem.write")) { + tizen.filesystem.createDirectory = + tizen.filesystem.deleteFile = + tizen.filesystem.deleteDirectory = + tizen.filesystem.copyFile = + tizen.filesystem.copyDirectory = + tizen.filesystem.moveFile = + tizen.filesystem.moveDirectory = + tizen.filesystem.rename = function() { + console.log('The filesystem.write permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/notification")) { + tizen.alarm.addAlarmNotification = function() { + console.log('The notification permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/package.info")) { + tizen.package.setPackageInfoEventListener = + tizen.package.unsetPackageInfoEventListener = + tizen.package.getPackageInfo = + tizen.package.getPackagesInfo = function() { + console.log('The package.info permission is missing.'); + } + } + if (!permissions.includes("http://tizen.org/privilege/packagemanager.install")) { + tizen.package.install = + tizen.package.uninstall = function() { + console.log('The packagemanager.install permission is missing.'); + } + } + // systeminfo : Runtime privilege validation is required, based on parameters + tizen.systeminfo.getPropertyValue = function(type, onSuccessCallback, onErrorCallback) { + if (type === "CELLULAR_NETWORK" && !permissions.includes("http://tizen.org/privilege/telephony")) { + console.log('The telephony permission is missing.'); + return; + } + this.systeminfo.getPropertyValue.apply(tizen.systeminfo, arguments); + }.bind(this); + } +} +module.exports = AccessControlManager; diff --git a/wrt_app/service/main.js b/wrt_app/service/main.js index 19594ce..ed10e5d 100755 --- a/wrt_app/service/main.js +++ b/wrt_app/service/main.js @@ -18,13 +18,14 @@ const wrt = require('../browser/wrt'); const vm = require('vm'); +const AccessControlManager = require('./access_control_manager'); const TizenExtension = require('./tizen_extension'); var sandbox = []; var sandbox_count = 0; -wrt.on('start-service', (event, app_id) => { - console.log('start service app : ' + app_id); +wrt.on('start-service', (event, app_id, permissions) => { + console.log('start service app : ' + app_id + ', permissions : ' + permissions); new TizenExtension(); if (sandbox[app_id] === undefined) { if (sandbox_count === 0) { @@ -38,6 +39,8 @@ wrt.on('start-service', (event, app_id) => { require: require, tizen: tizen, }; + let access_control_manager = new AccessControlManager(permissions, sandbox[app_id]); + access_control_manager.initialize(); for(let key in global) { sandbox[app_id][key] = global[key]; } -- 2.7.4 From b017416c2d8597c1bc99f4bb847e99b44fd6ccc5 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Mon, 18 Nov 2019 18:43:03 -0800 Subject: [PATCH 03/16] [Service] Provide iteration API setServiceInterval This provides the use of service iteration and usage is like below: * API: setServiceInterval(function, after, repeat); * Parameters: {func} The function |func| will run. {repeat} The number of iteration is |repeat|. The value 0 means infinite and default. {after} The iteration interval is |after| ms and default is 1000 ms. Change-Id: I5e50ddf9c11f6b7a49cf48aa4c526698c044794f Signed-off-by: Youngsoo Choi --- wrt_app/service/timer_manager.js | 14 ++++++++++++++ wrt_app/src/runtime.js | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/wrt_app/service/timer_manager.js b/wrt_app/service/timer_manager.js index 1f04a72..e17cd68 100644 --- a/wrt_app/service/timer_manager.js +++ b/wrt_app/service/timer_manager.js @@ -20,6 +20,20 @@ class TimerManager { this.timer_api.setTimeout = function(func, delay) { _this.timeout_handlers.push(setTimeout(func, delay)); } + this.timer_api.setServiceInterval = function(func, after = 1000, repeat = 0) { + if (typeof func !== "function") { + console.log("Use function as the first parameter."); + return; + } + let count = 1; + let handler = this.timer_api.setInterval(function() { + func(); + count++; + if (count > repeat && repeat !== 0) { + this.timer_api.clearInterval(handler); + } + }.bind(this), after); + }.bind(this); } getTimerAPI() { return this.timer_api; diff --git a/wrt_app/src/runtime.js b/wrt_app/src/runtime.js index dac4b09..0ef19b0 100644 --- a/wrt_app/src/runtime.js +++ b/wrt_app/src/runtime.js @@ -229,8 +229,8 @@ class Runtime { for(let key in global) { _this.sandbox[app_id][key] = global[key]; } - _this.sandbox[app_id]['timer_manager'] = new TimerManager(); - const timer_api = _this.sandbox[app_id]['timer_manager'].getTimerAPI(); + _this.sandbox[app_id].timer_manager = new TimerManager(); + const timer_api = _this.sandbox[app_id].timer_manager.getTimerAPI(); for(let key in timer_api) { _this.sandbox[app_id][key] = timer_api[key]; } -- 2.7.4 From 72560a7b582e43ac4380d36b3761ae9384ca9b47 Mon Sep 17 00:00:00 2001 From: "jaekuk, lee" Date: Thu, 5 Dec 2019 16:22:48 -0800 Subject: [PATCH 04/16] [MCD] Update gbs.conf.in & common.sh Fixed the build error for wearable Change-Id: I069f5295630a005c70a547041269130196596303 Signed-off-by: jaekuk, lee --- tizen/build/common.sh | 2 +- tizen/build/gbs.conf.in | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/tizen/build/common.sh b/tizen/build/common.sh index dd94659..5c42bf0 100644 --- a/tizen/build/common.sh +++ b/tizen/build/common.sh @@ -70,7 +70,7 @@ function setupAndExecuteTargetBuild() { fi elif [[ $platform == "wearable" ]]; then if [ "$DEFAULT_TIZEN_VERSION" == "5.5" ]; then - PROFILE=tzwr_5.5_armv7l_spin + PROFILE=tzwr_5.5_spin fi else echo "Cannot set default PROFILE for platform=${platform}" diff --git a/tizen/build/gbs.conf.in b/tizen/build/gbs.conf.in index ca83cf1..b13f2ee 100755 --- a/tizen/build/gbs.conf.in +++ b/tizen/build/gbs.conf.in @@ -87,7 +87,6 @@ url = http://165.213.149.200/download/snapshots/tizen/base-wearable/latest/repos # Tizen v5.5 spin Wearable (armv7l) # [profile.tzwr_5.5_spin] -obs = obs.spin repos = repo.wearable_product_5.5_base, repo.wearable_product_5.5 buildroot = ~/GBS-ROOT-M69-TZWR_5.5_SPIN-TIZEN_LATEST-RELEASE user = blinkbot -- 2.7.4 From 0d9c8ef58ca6a05266095b1fc808b83dd772ff74 Mon Sep 17 00:00:00 2001 From: jaekuk lee Date: Tue, 31 Dec 2019 09:15:52 +0000 Subject: [PATCH 05/16] Revert "Revert "Set default background color for product wearable."" This reverts commit 79bf5d968f1bfc7de05086cd78280759cb1e2265. Change the default background color to black for app compatibility. For app that has white text and icons and uses the default background color of target, text and icons should be displayed normally on tw2 and tw3 with the default background color set to black. Change-Id: I7ac040d6ebcb1270562d55b9cddaa7d5ade6784c Signed-off-by: jaekuk, lee --- wrt_app/src/web_application.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wrt_app/src/web_application.js b/wrt_app/src/web_application.js index 38efdab..624d60a 100644 --- a/wrt_app/src/web_application.js +++ b/wrt_app/src/web_application.js @@ -50,7 +50,8 @@ class WebApplication { this.accessiblePath = (wrt.tv ? wrt.tv.getAccessiblePath() : null); this.isAlwaysReload = (wrt.tv ? wrt.tv.isAlwaysReload() : false); this.multitaskingSupport = (wrt.tv ? wrt.tv.getMultitaskingSupport() : true); - this.defaultBackgroundColor = (wrt.tv ? '#000' : '#FFF'); + this.defaultBackgroundColor = (wrt.tv + || (wrt.getPlatformType() === "product_wearable") ? '#000' : '#FFF'); this.defaultTransparent = (wrt.tv ? true : false); this.suspended = false; this.loadFinished = false; -- 2.7.4 From 1e706bba79c504097569b5688164353c0b60872c Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Tue, 7 Jan 2020 17:18:08 +0900 Subject: [PATCH 06/16] Change hide() time for 'visibilitychange' callback In window.hide(), 'visibilitychange' or 'webkitvisibilitychange' event is dispatched from Document::DidChangeVisibilityState(), which is triggered by RenderWidgetHostViewEfl::SetPageVisibility() In window.setEnable(), it try to request suspending to renderer thread, then it try to stop chromium resources even JavaScript context. Thus if hide() is called after setEnable(), it can defer application's 'visibilitchange' callback unexpectedly. Change-Id: Ibe89b79f8a01ca170db40af8a5792fe64e9bf4ba Signed-off-by: DongHyun Song --- wrt_app/src/web_application.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) mode change 100644 => 100755 wrt_app/src/web_application.js diff --git a/wrt_app/src/web_application.js b/wrt_app/src/web_application.js old mode 100644 new mode 100755 index 38efdab..2c478d0 --- a/wrt_app/src/web_application.js +++ b/wrt_app/src/web_application.js @@ -312,6 +312,7 @@ class WebApplication { console.log('WebApplication : suspend - Invalid event emitter'); } this.suspended = true; + this.windowList[this.windowList.length - 1].hide(); if (wrt.tv) { wrt.tv.flushCookie(); this.windowList.forEach((window) => window.webContents.session.flushStorageData()); @@ -327,13 +328,10 @@ class WebApplication { this.windowList.forEach((window) => window.setEnabled(false)); } } - this.windowList[this.windowList.length - 1].hide(); } resume() { console.log('WebApplication : resume'); - this.suspended = false; - if (this.addonEmitter) { console.log('WebApplication : resume - Found event emitter'); this.addonEmitter.emit('lcResume', this.mainWindow.id); @@ -343,7 +341,7 @@ class WebApplication { if (!this.firstRendered) { console.log('WebApplication : resume firstRendered is false'); - return; + return; } if (!this.backgroundRunnable()) { this.windowList.forEach((window) => window.setEnabled(true)); -- 2.7.4 From 1599f3b7db85f19ebb5feffd881a5185f26fc073 Mon Sep 17 00:00:00 2001 From: YONGMAN SON Date: Fri, 10 Jan 2020 11:17:18 +0900 Subject: [PATCH 07/16] [VD] skip wrt-loader launch from LFD product zygote process crashed due to a capability issue related to the zone container in the LFD prodect. LFD uses only one webapp, so there is no need for a wrt-loader. Change-Id: I64f977a0e47d6963726ca8c44d5b360b2547ac34 Signed-off-by: YONGMAN SON --- packaging/wrtjs.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packaging/wrtjs.spec b/packaging/wrtjs.spec index 5e76021..7754296 100755 --- a/packaging/wrtjs.spec +++ b/packaging/wrtjs.spec @@ -35,6 +35,7 @@ install -d %{buildroot}%{_resourcedir} install -m 0755 %{_outdir}/wrt-loader %{buildroot}%{_bindir} install -m 0644 packaging/wrt.loader %{buildroot}%{_datadir}/aul/ %else +%if "%{_vd_cfg_product_type}" != "LFD" ln -s %{_bindir}/wrt %{buildroot}%{_bindir}/wrt-loader %if "%{_vd_cfg_platform_type}" == "FULL_SMART" install -m 0644 packaging/wrt_tv.loader %{buildroot}%{_datadir}/aul/wrt.loader @@ -43,6 +44,7 @@ install -d %{buildroot}%{_resourcedir} install -m 0644 packaging/wrt_tv_lite.loader %{buildroot}%{_datadir}/aul/wrt.loader %endif %endif +%endif cp -r wrt_app/* %{buildroot}%{_resourcedir}/ %post -- 2.7.4 From 9ec00eb2d51387e34ee67b2ebd9442ec4f6c4ddf Mon Sep 17 00:00:00 2001 From: YONGMAN SON Date: Mon, 13 Jan 2020 15:47:18 +0900 Subject: [PATCH 08/16] [VD] Build fix - skip wrt-loader launch for LFD product Eventually, This patch won't make the wrt.loader service file for LFD product. In LFD, it has only one webapp which is launched early time after boot. Thus, wrt-loader is not effective to LFD product. In addition, with WRTjs, zygote process is changed to /usr/bin/wrt from efl_webprocess. 'wrt' has more capability than efl_webprocess and some of its capability (i.e. cap_setpcap), they cannot be working with zone container of security framework. Thus, zygote process is going to die with wrt-loader launching. If webapp is launched directly without wrt-loader, the webapp process is started with app privilege, which means that process has changed smack label, process group as app permission its manifest describes. With these reason, this patch will not make wrt.loader file for LFD product. Change-Id: I6a1db9b65a4e20ac70d072f93f581d50085ee814 Signed-off-by: YONGMAN SON Signed-off-by: DongHyun Song --- packaging/wrtjs.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/wrtjs.spec b/packaging/wrtjs.spec index 7754296..deccb07 100755 --- a/packaging/wrtjs.spec +++ b/packaging/wrtjs.spec @@ -35,7 +35,6 @@ install -d %{buildroot}%{_resourcedir} install -m 0755 %{_outdir}/wrt-loader %{buildroot}%{_bindir} install -m 0644 packaging/wrt.loader %{buildroot}%{_datadir}/aul/ %else -%if "%{_vd_cfg_product_type}" != "LFD" ln -s %{_bindir}/wrt %{buildroot}%{_bindir}/wrt-loader %if "%{_vd_cfg_platform_type}" == "FULL_SMART" install -m 0644 packaging/wrt_tv.loader %{buildroot}%{_datadir}/aul/wrt.loader @@ -44,7 +43,6 @@ install -d %{buildroot}%{_resourcedir} install -m 0644 packaging/wrt_tv_lite.loader %{buildroot}%{_datadir}/aul/wrt.loader %endif %endif -%endif cp -r wrt_app/* %{buildroot}%{_resourcedir}/ %post @@ -62,5 +60,7 @@ rm -fr %{buildroot} %else %{_bindir}/wrt-loader %endif +%if "%{_vd_cfg_product_type}" != "LFD" %{_datadir}/aul/wrt.loader +%endif %{_resourcedir}/* -- 2.7.4 From ae28808c2b7a7fdc7b791dca5c752b0153772388 Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Wed, 15 Jan 2020 09:59:44 +0900 Subject: [PATCH 09/16] fixup! [VD] Build fix - skip wrt-loader launch for LFD product Signed-off-by: DongHyun Song --- packaging/wrtjs.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packaging/wrtjs.spec b/packaging/wrtjs.spec index deccb07..9d24b2f 100755 --- a/packaging/wrtjs.spec +++ b/packaging/wrtjs.spec @@ -36,6 +36,7 @@ install -d %{buildroot}%{_resourcedir} install -m 0644 packaging/wrt.loader %{buildroot}%{_datadir}/aul/ %else ln -s %{_bindir}/wrt %{buildroot}%{_bindir}/wrt-loader +%if "%{_vd_cfg_product_type}" != "LFD" %if "%{_vd_cfg_platform_type}" == "FULL_SMART" install -m 0644 packaging/wrt_tv.loader %{buildroot}%{_datadir}/aul/wrt.loader %endif @@ -43,6 +44,7 @@ install -d %{buildroot}%{_resourcedir} install -m 0644 packaging/wrt_tv_lite.loader %{buildroot}%{_datadir}/aul/wrt.loader %endif %endif +%endif cp -r wrt_app/* %{buildroot}%{_resourcedir}/ %post @@ -61,6 +63,6 @@ rm -fr %{buildroot} %{_bindir}/wrt-loader %endif %if "%{_vd_cfg_product_type}" != "LFD" -%{_datadir}/aul/wrt.loader + %{_datadir}/aul/wrt.loader %endif %{_resourcedir}/* -- 2.7.4 From 914215082980ba95959e8f54d5a32582039cb696 Mon Sep 17 00:00:00 2001 From: SangYong Park Date: Wed, 8 Jan 2020 10:21:54 +0900 Subject: [PATCH 10/16] Support m76 migration add process.wrtBinding() for using process.binding() and process._linkedBinding(). (electron's binding api is changed to process._linkedBinding() from process.binding()) and, change class name of TizenExtension to XWalkExtension. Change-Id: I059fa50051b206bcf5b478442ccf6658ea71ce60 Signed-off-by: SangYong Park --- wrt_app/browser/init.js | 3 ++- wrt_app/browser/wrt.js | 2 +- wrt_app/browser/wrt_web_contents.js | 4 ++-- wrt_app/browser/wrt_window.js | 2 +- .../{service/plugins.json => common/extensions.json} | 0 wrt_app/common/init.js | 11 +++++++++++ .../wrt_xwalk_extension.js} | 19 +++++++++---------- wrt_app/renderer/init.js | 1 + wrt_app/renderer/wrt_renderer.js | 2 +- wrt_app/service/main.js | 6 +++--- wrt_app/service/wrt_service_extension.js | 4 ---- wrt_app/src/runtime.js | 4 ++-- 12 files changed, 33 insertions(+), 25 deletions(-) rename wrt_app/{service/plugins.json => common/extensions.json} (100%) create mode 100644 wrt_app/common/init.js rename wrt_app/{service/tizen_extension.js => common/wrt_xwalk_extension.js} (93%) delete mode 100644 wrt_app/service/wrt_service_extension.js diff --git a/wrt_app/browser/init.js b/wrt_app/browser/init.js index 663464c..9fccd6f 100755 --- a/wrt_app/browser/init.js +++ b/wrt_app/browser/init.js @@ -14,5 +14,6 @@ * limitations under the License. */ -const wrt = require('./wrt'); +require('../common/init') +const wrt = require('./wrt') require(wrt.getElectronPath() + '/browser/init') diff --git a/wrt_app/browser/wrt.js b/wrt_app/browser/wrt.js index a49ef33..288cb5b 100755 --- a/wrt_app/browser/wrt.js +++ b/wrt_app/browser/wrt.js @@ -14,7 +14,7 @@ * limitations under the License. */ require('../common/exception_handling'); -const {wrt} = process.binding('wrt'); +const {wrt} = process.wrtBinding('wrt'); const {EventEmitter} = require('events'); const util = require('util'); diff --git a/wrt_app/browser/wrt_web_contents.js b/wrt_app/browser/wrt_web_contents.js index 994cca2..5c2535a 100644 --- a/wrt_app/browser/wrt_web_contents.js +++ b/wrt_app/browser/wrt_web_contents.js @@ -14,9 +14,9 @@ * limitations under the License. */ -const binding = process.binding('wrt_web_contents') +const binding = process.wrtBinding('wrt_web_contents') const { WRTWebContents } = binding -const { WebContents: AtomWebContents } = process.atomBinding('web_contents') +const { WebContents: AtomWebContents } = process.wrtBinding('atom_browser_web_contents') const parent = AtomWebContents.prototype AtomWebContents.prototype = WRTWebContents.prototype diff --git a/wrt_app/browser/wrt_window.js b/wrt_app/browser/wrt_window.js index 6917b69..004f26d 100644 --- a/wrt_app/browser/wrt_window.js +++ b/wrt_app/browser/wrt_window.js @@ -14,7 +14,7 @@ * limitations under the License. */ -const { WRTWindow } = process.binding('wrt_window') +const { WRTWindow } = process.wrtBinding('wrt_window') const { BrowserWindow } = require('electron') const WRTWebContents = require('../browser/wrt_web_contents'); diff --git a/wrt_app/service/plugins.json b/wrt_app/common/extensions.json similarity index 100% rename from wrt_app/service/plugins.json rename to wrt_app/common/extensions.json diff --git a/wrt_app/common/init.js b/wrt_app/common/init.js new file mode 100644 index 0000000..b407422 --- /dev/null +++ b/wrt_app/common/init.js @@ -0,0 +1,11 @@ +process.wrtBinding = (name) => { + try { + return process._linkedBinding(name) + } catch (error) { + if (/No such module/.test(error.message)) { + return process.binding(name) + } else { + throw error + } + } +} diff --git a/wrt_app/service/tizen_extension.js b/wrt_app/common/wrt_xwalk_extension.js similarity index 93% rename from wrt_app/service/tizen_extension.js rename to wrt_app/common/wrt_xwalk_extension.js index 3c88d5a..86a6575 100644 --- a/wrt_app/service/tizen_extension.js +++ b/wrt_app/common/wrt_xwalk_extension.js @@ -14,24 +14,22 @@ * limitations under the License. */ -const extension = require('./wrt_service_extension'); -const wrt = require('../browser/wrt'); -var window = global; +require('./exception_handling'); + var api_ = {}; var extensions_ = {}; -var runtime_variables_ = {'runtime_name': 'wrt-service'}; -class TizenExtension { +class XWalkExtension { constructor() { - let plugins = require('./plugins.json'); - extension.initialize(runtime_variables_); + let plugins = require('./extensions.json'); - var extensions = extension.getExtensions(); + const binding = process.wrtBinding('wrt_xwalk_extension') + var extensions = binding.getExtensions(); for (var i = 0; i < extensions.length; i++) { extensions[i].loaded = false; for (var idx in plugins) { if (extensions[i].name === plugins[idx].name) { - console.log("ExtensionLoader name " + extensions[i].name); + console.log("Load extension : " + extensions[i].name); extensions_[extensions[i].name] = extensions[i]; } } @@ -215,4 +213,5 @@ class TizenExtension { } } } -module.exports = TizenExtension; + +module.exports = XWalkExtension; diff --git a/wrt_app/renderer/init.js b/wrt_app/renderer/init.js index f0265e3..e207bcd 100755 --- a/wrt_app/renderer/init.js +++ b/wrt_app/renderer/init.js @@ -14,6 +14,7 @@ * limitations under the License. */ +require('../common/init') require('../common/exception_handling'); require('../common/config-search-paths'); const wrtRenderer = require('./wrt_renderer'); diff --git a/wrt_app/renderer/wrt_renderer.js b/wrt_app/renderer/wrt_renderer.js index d642327..c1b183a 100644 --- a/wrt_app/renderer/wrt_renderer.js +++ b/wrt_app/renderer/wrt_renderer.js @@ -1,3 +1,3 @@ -const {wrtRenderer} = process.binding('wrt_renderer'); +const {wrtRenderer} = process.wrtBinding('wrt_renderer'); module.exports = wrtRenderer diff --git a/wrt_app/service/main.js b/wrt_app/service/main.js index ed10e5d..4e2a042 100755 --- a/wrt_app/service/main.js +++ b/wrt_app/service/main.js @@ -19,17 +19,17 @@ const wrt = require('../browser/wrt'); const vm = require('vm'); const AccessControlManager = require('./access_control_manager'); -const TizenExtension = require('./tizen_extension'); +const XWalkExtension = require('../common/wrt_xwalk_extension'); var sandbox = []; var sandbox_count = 0; wrt.on('start-service', (event, app_id, permissions) => { console.log('start service app : ' + app_id + ', permissions : ' + permissions); - new TizenExtension(); + new XWalkExtension(); if (sandbox[app_id] === undefined) { if (sandbox_count === 0) { - new TizenExtension(); + new XWalkExtension(); } sandbox_count++; const Module = require('module'); diff --git a/wrt_app/service/wrt_service_extension.js b/wrt_app/service/wrt_service_extension.js deleted file mode 100644 index 8207706..0000000 --- a/wrt_app/service/wrt_service_extension.js +++ /dev/null @@ -1,4 +0,0 @@ -require('../common/exception_handling'); -const wrt_service_extension = process.binding('wrt_service_extension') - -module.exports = wrt_service_extension; diff --git a/wrt_app/src/runtime.js b/wrt_app/src/runtime.js index 3fa6ac9..bd641fc 100755 --- a/wrt_app/src/runtime.js +++ b/wrt_app/src/runtime.js @@ -21,9 +21,9 @@ const AddonManager = require('./addon_manager'); const {app, ipcMain} = require('electron'); const IPC_MESSAGE = require('./ipc_message'); const TimerManager = require('../service/timer_manager'); -const TizenExtension = require('../service/tizen_extension'); const WAS_EVENT = require('./was_event'); const WebApplication = require('./web_application'); +const XWalkExtension = require('../common/wrt_xwalk_extension'); class Runtime { constructor(options) { @@ -215,7 +215,7 @@ class Runtime { if (type === 'startService') { if (_this.sandbox[app_id] === undefined) { if (_this.sandbox_count === 0) { - new TizenExtension(); + new XWalkExtension(); } _this.sandbox_count++; const fs = require('fs'); -- 2.7.4 From 61b53adaff21f0f5eca86a12dfd5a8b03ebe4aab Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Thu, 30 Jan 2020 10:09:42 +0900 Subject: [PATCH 11/16] [VD] Add clearDeadMount API for TV profile Related patch: https://review.tizen.org/gerrit/223399/ Change-Id: I1592e69f915c996e91fb23d5321184a9f55321af Signed-off-by: DongHyun Song --- wrt_app/src/runtime.js | 1 + 1 file changed, 1 insertion(+) diff --git a/wrt_app/src/runtime.js b/wrt_app/src/runtime.js index 3fa6ac9..e53d2f6 100755 --- a/wrt_app/src/runtime.js +++ b/wrt_app/src/runtime.js @@ -97,6 +97,7 @@ class Runtime { if (wrt.tv) { wrt.tv.importCertificate(''); wrt.tv.optimizeCache(); + wrt.tv.clearDeadMount(); } }); wrt.on('app-control', function(event, appControl) { -- 2.7.4 From 1548dbb019f5a8eccbc2d26b06f5f75279a2d6c2 Mon Sep 17 00:00:00 2001 From: "jaekuk, lee" Date: Thu, 30 Jan 2020 14:26:54 +0900 Subject: [PATCH 12/16] [VD] Add gbs configuration for NikeM build ('20 Product) Reference: https://review.tizen.org/gerrit/219504 Change-Id: Ib8dfb688d15010c5f0933427b2780eb6f2cfa1d7 Signed-off-by: jaekuk, lee --- tizen/build/common.sh | 2 +- tizen/build/gbs.conf.in | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) mode change 100644 => 100755 tizen/build/common.sh diff --git a/tizen/build/common.sh b/tizen/build/common.sh old mode 100644 new mode 100755 index 5c42bf0..bd7ac97 --- a/tizen/build/common.sh +++ b/tizen/build/common.sh @@ -62,7 +62,7 @@ function setupAndExecuteTargetBuild() { if [[ $platform == "tv" ]]; then if [ "$DEFAULT_TIZEN_VERSION" == "5.5" ]; then # FIXME: The latest version of platform hasn't been released yet. - PROFILE=tztv_5.5_arm-musem + PROFILE=tztv_5.5_arm-nikem fi elif [[ $platform == "da" ]]; then if [ "$DEFAULT_TIZEN_VERSION" == "5.5" ]; then diff --git a/tizen/build/gbs.conf.in b/tizen/build/gbs.conf.in index b13f2ee..c97b0ec 100755 --- a/tizen/build/gbs.conf.in +++ b/tizen/build/gbs.conf.in @@ -121,7 +121,26 @@ passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== [obs.tizen_product_tv] url = https://168.219.243.64/api -############################################### +############################################ +# +# Tizen v5.5 for product tv (NikeM armv7l) +# +[profile.tztv_5.5_arm-nikem] +obs = obs.tizen_product_tv +repos = repo.tv_product_5.5_nikem, repo.tv_product_5.5_base +buildroot = ~/GBS-ROOT-5.5-TV-PRODUCT-NIKEM + +[repo.tv_product_5.5_base] +url = http://168.219.244.109/base/current/standard/latest/repos/base/armv7l/packages/ +user = blinkbot +passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== + +[repo.tv_product_5.5_nikem] +url = http://168.219.244.109/products/tv/archive/current/ONEMAIN/NikeM/latest/repos/product/armv7l/packages/ +user = blinkbot +passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== + +############################################ # # Tizen v5.5 for product tv (MuseM armv7l) # @@ -131,12 +150,12 @@ repos = repo.tv_product_5.5_base, repo.tv_product_5.5_musem buildroot = ~/GBS-ROOT-5.5-TV-PRODUCT-MUSEM [repo.tv_product_5.5_base] -url = http://10.113.136.32/download_trbs/snapshots/tizen/5.5-vd-base/latest/repos/standard/packages/ +url = http://168.219.244.109/base/tizen-5.5-base-main/standard/latest/ user = blinkbot passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== [repo.tv_product_5.5_musem] -url = http://10.113.136.26/snapshots/VD/Tizen-5.5/MAIN2019-MuseM/latest/repos/MuseM/packages/ +url = http://168.219.244.109/products/tv/archive/2020/ONEMAIN/MuseM/latest/ user = blinkbot passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== -- 2.7.4 From a160dc5937ff6138245064cac3bc8c8b28075d36 Mon Sep 17 00:00:00 2001 From: "ws29.jung" Date: Fri, 17 Jan 2020 10:43:25 +0900 Subject: [PATCH 13/16] Enable Browser Tizen Device APIs for Addon There are lack of API support to develope Addon. To expand functionality of Addon, now Tizen Device APIs are usable. Change-Id: I4bbff162c59ddbbff6737f9965a928afe4a62730 Signed-off-by: ws29.jung --- wrt_app/src/runtime.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/wrt_app/src/runtime.js b/wrt_app/src/runtime.js index 3c4bb52..52c61ac 100755 --- a/wrt_app/src/runtime.js +++ b/wrt_app/src/runtime.js @@ -36,6 +36,7 @@ class Runtime { this.sandbox_count = 0; this.webContents = null; this.addonPkgs = []; + this.extensionInit = false; var _this = this; app.on('before-quit', function(event) { @@ -93,6 +94,10 @@ class Runtime { _this.addonManager = new AddonManager(); if (!options.noAddons) { _this.addonManager.build(); + if (!_this.extensionInit) { + new XWalkExtension(); + _this.extensionInit = true; + } } if (wrt.tv) { wrt.tv.importCertificate(''); @@ -215,8 +220,9 @@ class Runtime { const vm = require('vm'); if (type === 'startService') { if (_this.sandbox[app_id] === undefined) { - if (_this.sandbox_count === 0) { + if (_this.sandbox_count === 0 && !_this.extensionInit) { new XWalkExtension(); + _this.extensionInit = true; } _this.sandbox_count++; const fs = require('fs'); -- 2.7.4 From 7df5a155d10efea396e0f8b2c4c1c0c921bc0225 Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Thu, 6 Feb 2020 12:39:04 +0900 Subject: [PATCH 14/16] [VD] ClearAllTilesResources for Deeplink To solve unexpected flickering issue, this patch will call ClearAllTilesResources when deeplink reloading case Related patch: https://review.tizen.org/gerrit/224035 Change-Id: I2568f6906241d45fc3730a63614e8af12bb3354c Signed-off-by: DongHyun Song --- wrt_app/src/web_application.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wrt_app/src/web_application.js b/wrt_app/src/web_application.js index 5c47d36..5429050 100755 --- a/wrt_app/src/web_application.js +++ b/wrt_app/src/web_application.js @@ -401,6 +401,8 @@ class WebApplication { } } closeWindows() { + if (wrt.tv) + wrt.tv.clearSurface(this.mainWindow.webContents); this.windowList.forEach((window) => { if (window != this.mainWindow) window.destroy(); -- 2.7.4 From 22e585144842f679258f520f653dfccb4aa892c1 Mon Sep 17 00:00:00 2001 From: "k2.nagaraju" Date: Tue, 18 Feb 2020 18:19:39 +0530 Subject: [PATCH 15/16] fixup! Support m76 migration Added |require('../common/init')| to get the defination of |process.wrtBinding()| for service Change-Id: Icd87a17ed1d33fc8e98fbcf614f9ff7d70f50a90 Signed-off-by: k2.nagaraju --- wrt_app/service/main.js | 1 + 1 file changed, 1 insertion(+) diff --git a/wrt_app/service/main.js b/wrt_app/service/main.js index 4e2a042..f6350de 100755 --- a/wrt_app/service/main.js +++ b/wrt_app/service/main.js @@ -16,6 +16,7 @@ 'use strict'; +require('../common/init') const wrt = require('../browser/wrt'); const vm = require('vm'); const AccessControlManager = require('./access_control_manager'); -- 2.7.4 From 8fe09afd60b78a02a30212ff813209cf6ecd7133 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Thu, 20 Feb 2020 17:17:27 -0800 Subject: [PATCH 16/16] Set default gbs repository to tizen 6.0 This sets default gbs repository to tizen 6.0 for public targets and product tv. Change-Id: I89b37a76a4af872988fb8d3b7590262d732932e5 Signed-off-by: Youngsoo Choi --- tizen/build/common.sh | 15 ++++----------- tizen/build/gbs.conf.in | 31 +++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/tizen/build/common.sh b/tizen/build/common.sh index bd7ac97..806ed5d 100755 --- a/tizen/build/common.sh +++ b/tizen/build/common.sh @@ -6,7 +6,7 @@ export CHROME_SRC="${TOPDIR}" # Please set DEFAULT_TIZEN_VERSION to empty value for the latest tizen version # or set DEFAULT_TIZEN_VERSION to current tizen version for the others. -export DEFAULT_TIZEN_VERSION=5.5 +export DEFAULT_TIZEN_VERSION=latest if [ "$(echo "$@" | grep -e "--tizen")" != "" ]; then tizen_version=$(echo $@ | sed -e 's#.*--tizen_\([0-9.]*\).*#\1#') @@ -60,18 +60,11 @@ function setupAndExecuteTargetBuild() { if [ "$PROFILE" == "" ]; then if [[ $platform == "tv" ]]; then - if [ "$DEFAULT_TIZEN_VERSION" == "5.5" ]; then - # FIXME: The latest version of platform hasn't been released yet. - PROFILE=tztv_5.5_arm-nikem - fi + PROFILE=tztv_6.0_arm-nikem elif [[ $platform == "da" ]]; then - if [ "$DEFAULT_TIZEN_VERSION" == "5.5" ]; then - PROFILE=tzda_5.5_arm-kantm - fi + PROFILE=tzda_5.5_arm-kantm elif [[ $platform == "wearable" ]]; then - if [ "$DEFAULT_TIZEN_VERSION" == "5.5" ]; then - PROFILE=tzwr_5.5_spin - fi + PROFILE=tzwr_5.5_arm-spin else echo "Cannot set default PROFILE for platform=${platform}" exit 1 diff --git a/tizen/build/gbs.conf.in b/tizen/build/gbs.conf.in index c97b0ec..a25b8c4 100755 --- a/tizen/build/gbs.conf.in +++ b/tizen/build/gbs.conf.in @@ -40,7 +40,7 @@ passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== [profile.tz_standard] obs = obs.tizen repos = repo.public_base_standard, repo.tz_standard -buildroot = ~/GBS-ROOT-M69-TZ_STANDARD +buildroot = ~/GBS-ROOT-WRTJS-TZ_STANDARD ############################################### # @@ -49,7 +49,7 @@ buildroot = ~/GBS-ROOT-M69-TZ_STANDARD [profile.tz_emulator] obs = obs.tizen repos = repo.public_base_standard, repo.tz_emulator -buildroot = ~/GBS-ROOT-M69-TZ_EMULATOR +buildroot = ~/GBS-ROOT-WRTJS-TZ_EMULATOR ############################################### # @@ -58,7 +58,7 @@ buildroot = ~/GBS-ROOT-M69-TZ_EMULATOR [profile.tz_standard_mirror] obs = obs.tizen repos = repo.public_base_standard_mirror, repo.tz_standard_mirror -buildroot = ~/GBS-ROOT-M69-TZ_STANDARD-TIZEN_LATEST-RELEASE +buildroot = ~/GBS-ROOT-WRTJS-TZ_STANDARD ############################################### # @@ -67,7 +67,7 @@ buildroot = ~/GBS-ROOT-M69-TZ_STANDARD-TIZEN_LATEST-RELEASE [profile.tz_emulator_mirror] obs = obs.tizen repos = repo.public_base_standard, repo.tz_emulator_mirror -buildroot = ~/GBS-ROOT-M69-TZ_EMULATOR-TIZEN_LATEST-RELEASE +buildroot = ~/GBS-ROOT-WRTJS-TZ_EMULATOR ############################################### # @@ -86,9 +86,9 @@ url = http://165.213.149.200/download/snapshots/tizen/base-wearable/latest/repos # # Tizen v5.5 spin Wearable (armv7l) # -[profile.tzwr_5.5_spin] +[profile.tzwr_5.5_arm-spin] repos = repo.wearable_product_5.5_base, repo.wearable_product_5.5 -buildroot = ~/GBS-ROOT-M69-TZWR_5.5_SPIN-TIZEN_LATEST-RELEASE +buildroot = ~/GBS-ROOT-WRTJS-TZWR_5.5_SPIN-TIZEN_LATEST-RELEASE user = blinkbot passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== @@ -123,6 +123,25 @@ url = https://168.219.243.64/api ############################################ # +# Tizen v6.0 for product tv (NikeM armv7l) +# +[profile.tztv_6.0_arm-nikem] +obs = obs.tizen_product_tv +repos = repo.tv_product_6.0_nikem, repo.tv_product_6.0_base +buildroot = ~/GBS-ROOT-WRTJS-TZTV_6.0_ARM-NIKEM-TIZEN_LATEST-RELEASE + +[repo.tv_product_6.0_base] +url = http://168.219.244.109/base/current/standard/latest/repos/base/armv7l/packages/ +user = blinkbot +passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== + +[repo.tv_product_6.0_nikem] +url = http://168.219.244.109/products/tv/archive/current/ONEMAIN/NikeM/latest/repos/product/armv7l/packages/ +user = blinkbot +passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ== + +############################################ +# # Tizen v5.5 for product tv (NikeM armv7l) # [profile.tztv_5.5_arm-nikem] -- 2.7.4