From d8c268314ec71143e0e32df83eb41d74277e3754 Mon Sep 17 00:00:00 2001 From: "ws29.jung" Date: Mon, 23 Jul 2018 18:46:46 +0900 Subject: [PATCH 01/16] Change extension activate timing Before this patch, Web App crashed when any extension was installed because of calling function from window pointer which is casted from NULL. Now activation is called after Window is completly constructed. Change-Id: Ie1fd74f7d8a29a91a11ca7c3a6e668e7b10d5335 Signed-off-by: ws29.jung --- wrt/src/runtime.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wrt/src/runtime.js b/wrt/src/runtime.js index d0e5460..a49487d 100755 --- a/wrt/src/runtime.js +++ b/wrt/src/runtime.js @@ -69,11 +69,12 @@ class Runtime { if (!options.noExtensions && wrt.appID !== 'NVPDzvckj9.RuntimeAddonSetting') { _this.extensionManager.build(); } - _this.extensionManager.activateAll(app); if (wrt.isElectronLaunch()) { + _this.extensionManager.activateAll(app); return; } _this.webApplication = new WebApplication(options); + _this.extensionManager.activateAll(app); }); } onPause(web_window_id) { -- 2.7.4 From 6f627f5360b740e5a2c4211d743dd190af7b8202 Mon Sep 17 00:00:00 2001 From: "surya.kumar7" Date: Mon, 23 Jul 2018 20:44:18 +0530 Subject: [PATCH 02/16] Set Default TTS voice as Female/en_US To resemeble crosswalk, set default TTS voice as Female/en_US in TtsDispatcher's construction Change-Id: I4a5e8d1a1813fbd52f8780ac5b353ead777c069d Signed-off-by: surya.kumar7 --- chromium_src/chrome/common/tts_utterance_request.cc | 9 +++++++++ chromium_src/chrome/common/tts_utterance_request.h | 2 ++ chromium_src/chrome/renderer/tts_dispatcher.cc | 12 ++++++++++++ 3 files changed, 23 insertions(+) diff --git a/chromium_src/chrome/common/tts_utterance_request.cc b/chromium_src/chrome/common/tts_utterance_request.cc index a2e3e7f..bb16da9 100644 --- a/chromium_src/chrome/common/tts_utterance_request.cc +++ b/chromium_src/chrome/common/tts_utterance_request.cc @@ -19,6 +19,15 @@ TtsVoice::TtsVoice() is_default(false) { } +TtsVoice::TtsVoice(std::string voice_uri, std::string name, std::string lang, + bool local_service, bool is_default) + : voice_uri(voice_uri), + name(name), + lang(lang), + local_service(local_service), + is_default(is_default) { +} + TtsVoice::~TtsVoice() { } diff --git a/chromium_src/chrome/common/tts_utterance_request.h b/chromium_src/chrome/common/tts_utterance_request.h index a4b4cab..1c5e829 100644 --- a/chromium_src/chrome/common/tts_utterance_request.h +++ b/chromium_src/chrome/common/tts_utterance_request.h @@ -25,6 +25,8 @@ struct TtsUtteranceRequest { struct TtsVoice { TtsVoice(); + TtsVoice(std::string voice_uri, std::string name, std::string lang, + bool local_service, bool is_default); ~TtsVoice(); std::string voice_uri; diff --git a/chromium_src/chrome/renderer/tts_dispatcher.cc b/chromium_src/chrome/renderer/tts_dispatcher.cc index 0d3b97c..e574de0 100644 --- a/chromium_src/chrome/renderer/tts_dispatcher.cc +++ b/chromium_src/chrome/renderer/tts_dispatcher.cc @@ -21,11 +21,23 @@ using blink::WebSpeechSynthesisVoice; using blink::WebString; using blink::WebVector; +namespace { + +static const std::vector& getDefaultVoiceList() { + static std::vector default_voices( + 1, TtsVoice("localhost:Female/en_US", "Female", "en_US", false, false)); + + return default_voices; +} + +} // namespace + int TtsDispatcher::next_utterance_id_ = 1; TtsDispatcher::TtsDispatcher(WebSpeechSynthesizerClient* client) : synthesizer_client_(client) { RenderThread::Get()->AddObserver(this); + OnSetVoiceList(getDefaultVoiceList()); } TtsDispatcher::~TtsDispatcher() { -- 2.7.4 From 91ac680a6fbd51c6c23e1fdb374ecb83ca3ffd43 Mon Sep 17 00:00:00 2001 From: "min7.choi" Date: Thu, 19 Jul 2018 18:59:53 +0900 Subject: [PATCH 03/16] Fixed using BackKey to navigate back to the page Implemented with remote url, backward compatibility. Change-Id: I8d04f3d04b02c907b8c1c4b6e0759a7181297384 Signed-off-by: min7.choi --- atom/browser/native_window_efl.cc | 41 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/atom/browser/native_window_efl.cc b/atom/browser/native_window_efl.cc index b71e563..54589a6 100644 --- a/atom/browser/native_window_efl.cc +++ b/atom/browser/native_window_efl.cc @@ -23,6 +23,7 @@ #include "base/strings/utf_string_conversions.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/render_frame_host.h" +#include "tizen/common/application_data.h" #endif #if defined(OS_TIZEN_TV_PRODUCT) @@ -38,6 +39,9 @@ std::map window_map_; const int kDefaultWindowWidthDip = 800; const int kDefaultWindowHeightDip = 600; +const char* kFileScheme = "file"; +const std::string kViewmodeTypeWindowed = "windowed"; + #if defined(OS_TIZEN) const char* kBackKeyEventScript = "(function(){" @@ -456,24 +460,55 @@ NativeWindow* NativeWindow::Create( #if defined(OS_TIZEN) // static void NativeWindowEfl::HWBackKeyCallback(void* data, Evas_Object*, void*) { + + auto app_data_ = common::ApplicationDataManager::GetCurrentAppData(); + + bool enabled = app_data_->setting_info() != NULL + ? app_data_->setting_info()->hwkey_enabled() + : true; + if(!enabled) + return; + NativeWindow* thiz = static_cast(data); // TODO: We need to consider to clear selection or exit fullscreen // before send JS custom event. content::RenderFrameHost* rfh = thiz->web_contents()->GetMainFrame(); + if (rfh) { rfh->ExecuteJavaScriptWithUserGestureForTests( base::UTF8ToUTF16(kBackKeyEventScript)); } - if (thiz->web_contents()->GetController().CanGoBack()) + + std::string scheme = thiz->web_contents()->GetURL().scheme(); + + if ((app_data_->setting_info() != NULL && + app_data_->setting_info()->backbutton_presence()) || + (app_data_->widget_info() != NULL && + app_data_->widget_info()->view_modes() == kViewmodeTypeWindowed) || + (scheme != kFileScheme)) { + if (thiz->web_contents()->GetController().CanGoBack()) + thiz->web_contents()->GetController().GoBack(); + else + thiz->Close(); + } else { thiz->web_contents()->GetController().GoBack(); - else - thiz->Close(); + } + } // static void NativeWindowEfl::HWMoreKeyCallback(void* data, Evas_Object*, void*) { NativeWindow* thiz = static_cast(data); content::RenderFrameHost* rfh = thiz->web_contents()->GetMainFrame(); + + auto app_data_ = common::ApplicationDataManager::GetCurrentAppData(); + + bool enabled = app_data_->setting_info() != NULL + ? app_data_->setting_info()->hwkey_enabled() + : true; + if(!enabled) + return; + if (rfh) { rfh->ExecuteJavaScriptWithUserGestureForTests( base::UTF8ToUTF16(kMenuKeyEventScript)); -- 2.7.4 From acf2b97425e14613f6623d1205195bd01715dae1 Mon Sep 17 00:00:00 2001 From: "k2.nagaraju" Date: Thu, 19 Jul 2018 18:05:53 +0530 Subject: [PATCH 04/16] |did-frame-rendered| used for optimize launching time Change-Id: I22de24a81b98401f02be6cb53bdd08a8e1db2de3 Signed-off-by: k2.nagaraju --- atom/browser/api/atom_api_web_contents.cc | 11 ++++++++++- atom/browser/api/atom_api_web_contents.h | 3 ++- wrt/src/web_window.js | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 99cb90a..fccae5a 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -283,7 +283,8 @@ WebContents::WebContents(v8::Isolate* isolate, type_(type), request_id_(0), background_throttling_(true), - enable_devtools_(true) { + enable_devtools_(true), + notify_ready_state_(false) { if (type == REMOTE) { web_contents->SetUserAgentOverride(GetBrowserContext()->GetUserAgent()); Init(isolate); @@ -746,7 +747,15 @@ void WebContents::DidFailLoad(content::RenderFrameHost* render_frame_host, Emit("did-fail-load", error_code, error_description, url, is_main_frame); } +void WebContents::DidRenderFrame() { + if (!notify_ready_state_) { + notify_ready_state_ = true; + Emit("did-frame-rendered"); + } +} + void WebContents::DidStartLoading() { + notify_ready_state_ = false; #if defined(OS_TIZEN) if (owner_window() && !owner_window()->IsVisible()) { std::string scheme = web_contents()->GetURL().scheme(); diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index 6d50694..48d23e8 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -352,7 +352,7 @@ class WebContents : public mate::TrackableObject, void DevToolsFocused() override; void DevToolsOpened() override; void DevToolsClosed() override; - + void DidRenderFrame() override; private: struct LoadURLParams { LoadURLParams() : params(GURL()), id(0) {} @@ -412,6 +412,7 @@ class WebContents : public mate::TrackableObject, // Whether to enable devtools. bool enable_devtools_; + bool notify_ready_state_; // Container to hold url parms for deferred load when // there is a pending navigation entry. diff --git a/wrt/src/web_window.js b/wrt/src/web_window.js index 039b294..cb1f8ee 100644 --- a/wrt/src/web_window.js +++ b/wrt/src/web_window.js @@ -129,13 +129,17 @@ class WebWindow { }); this.mainWindow.webContents.on('did-finish-load', function() { webwindow_debug('WebWindow : webContents did-finish-load'); + app.emit(IPC_MESSAGE.WEBCONTENTS.DID_FINISH_LOAD, self.mainWindow.id); + }); + this.mainWindow.webContents.on('did-frame-rendered', function() { + webwindow_debug('WebWindow : webContents did-frame-rendered'); wrt.hideSplashScreen(1); if(!options.show){ webwindow_debug('WebWindow : browserWindow show options is ',options.show); + options.show = true; self.show(); } - app.emit(IPC_MESSAGE.WEBCONTENTS.DID_FINISH_LOAD, self.mainWindow.id); }); this.mainWindow.webContents.on('did-fail-load', function(event, errorCode, errorDescription, validatedUrl) { webwindow_debug('WebWindow : webContents did-fail-load'); -- 2.7.4 From 22c43587f5c2acb7b37aaea180289b8472031435 Mon Sep 17 00:00:00 2001 From: guneet1995 Date: Mon, 23 Jul 2018 15:09:18 +0530 Subject: [PATCH 05/16] Resize |web_view_| as soon as it is initialized. |web_view_| is resized with |window_| dimensions as soon as it is initialized in native_window_efl.cc. If resize occurs at a later point, then window.innerHeight and window.innerWidth are zero. Change-Id: Ibf7542e546de4efdd2bf77b13934a2fa862401c5 Signed-off-by: guneet1995 --- atom/browser/native_window_efl.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/atom/browser/native_window_efl.cc b/atom/browser/native_window_efl.cc index 54589a6..d032579 100644 --- a/atom/browser/native_window_efl.cc +++ b/atom/browser/native_window_efl.cc @@ -36,8 +36,8 @@ namespace atom { namespace { std::map window_map_; -const int kDefaultWindowWidthDip = 800; -const int kDefaultWindowHeightDip = 600; +int window_width_; +int window_height_; const char* kFileScheme = "file"; const std::string kViewmodeTypeWindowed = "windowed"; @@ -99,10 +99,10 @@ NativeWindowEfl::NativeWindowEfl( DCHECK(window_); + elm_win_screen_size_get(window_, NULL, NULL, &window_width_, &window_height_); evas_object_smart_callback_add(window_, "delete,request", OnWindowDeleteRequest, this); - evas_object_resize(window_, kDefaultWindowWidthDip, - kDefaultWindowHeightDip); + evas_object_resize(window_, window_width_, window_height_); Evas_Object* box = elm_box_add(window_); evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -115,6 +115,8 @@ NativeWindowEfl::NativeWindowEfl( evas_object_size_hint_weight_set(web_view_, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_box_pack_end(box, web_view_); + evas_object_resize(web_view_, window_width_, window_height_); + web_contents()->Focus(); #if defined(OS_TIZEN) -- 2.7.4 From a2c77acec5ed4b2a1044c706f3086d7bca8ba0c3 Mon Sep 17 00:00:00 2001 From: "ws29.jung" Date: Tue, 24 Jul 2018 18:01:22 +0900 Subject: [PATCH 06/16] Fix WebApp crash with installed extension on TV (multiprocess) Earlier then this patch, there was fix up patch for same issue but only applied with Tizen WebApp. (d8c2683) This patch moves extension activation on 'browser-window-created' callback so now BrowserWindow construction is guaranteed before activation for both Tizen and Electron Web App type. Change-Id: I94405ead5ef6188da09faaac91f976307fae3a3b Signed-off-by: ws29.jung --- wrt/src/runtime.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wrt/src/runtime.js b/wrt/src/runtime.js index a49487d..ae01bb3 100755 --- a/wrt/src/runtime.js +++ b/wrt/src/runtime.js @@ -42,6 +42,10 @@ class Runtime { return runtime_debug('browser-window-focus'); }); app.on('browser-window-created', function() { + if (!_this.isLaunched) { + _this.extensionManager.activateAll(app); + _this.isLaunched = true; + } return runtime_debug('browser-window-created'); }); app.on('gpu-process-crashed', function() { @@ -70,11 +74,9 @@ class Runtime { _this.extensionManager.build(); } if (wrt.isElectronLaunch()) { - _this.extensionManager.activateAll(app); return; } _this.webApplication = new WebApplication(options); - _this.extensionManager.activateAll(app); }); } onPause(web_window_id) { -- 2.7.4 From 8ffefbeddaef8bee3697a9e1bd9e4f0b81e6e714 Mon Sep 17 00:00:00 2001 From: Soorya R Date: Tue, 24 Jul 2018 20:13:06 +0530 Subject: [PATCH 07/16] fixup! Initial implementation of watch app This CL fixes the crash that occurs when MakeRuntime is called during prelaunch phase. Change-Id: I685a0ea66fbdf21081a583781095755cd15ac799 Signed-off-by: Soorya R --- atom/app/runtime.cc | 5 +++++ atom/app/runtime.h | 1 + atom/app/ui_runtime.cc | 17 ++++++----------- atom/app/watch_runtime.cc | 3 --- tizen/src/wrt_main.cc | 10 +++++----- 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/atom/app/runtime.cc b/atom/app/runtime.cc index fcfda5e..c089436 100644 --- a/atom/app/runtime.cc +++ b/atom/app/runtime.cc @@ -17,6 +17,7 @@ #include "atom/app/runtime.h" #include "atom/app/ui_runtime.h" #include "atom/app/watch_runtime.h" +#include "atom/browser/atom_browser_main_parts.h" #include "atom/browser/native_window_efl.h" #include "base/logging.h" #include "efl/window_factory.h" @@ -24,6 +25,10 @@ namespace runtime { +Runtime::Runtime() { + atom::AtomBrowserMainParts::SetNodeEnvironment(); +} + Runtime::~Runtime() { } diff --git a/atom/app/runtime.h b/atom/app/runtime.h index a5bcbc2..c5552fb 100644 --- a/atom/app/runtime.h +++ b/atom/app/runtime.h @@ -27,6 +27,7 @@ namespace runtime { class Runtime { public: + Runtime(); virtual ~Runtime() = 0; virtual int Exec() = 0; diff --git a/atom/app/ui_runtime.cc b/atom/app/ui_runtime.cc index b38b7ed..c078f65 100644 --- a/atom/app/ui_runtime.cc +++ b/atom/app/ui_runtime.cc @@ -20,28 +20,23 @@ #include "atom/app/atom_main_delegate.h" #include "atom/app/ui_runtime.h" -#include "atom/browser/browser.h" #include "atom/browser/atom_browser_client.h" #include "atom/browser/atom_browser_main_parts.h" +#include "atom/browser/browser.h" #include "atom/common/atom_command_line.h" #include "base/logging.h" #include "content/public/app/content_main.h" -#include "tizen/common/app_db.h" +#include "gin/v8_initializer.h" #include "tizen/common/app_control.h" -#include "tizen/common/constants.h" +#include "tizen/common/app_db.h" #include "tizen/common/application_data.h" #include "tizen/common/command_line.h" - -#include "gin/v8_initializer.h" +#include "tizen/common/constants.h" namespace runtime { -UiRuntime::UiRuntime(content::ContentMainParams *params) { - _params = params; - - // This line's position is essential as this creates the Browser - // object which is needed later on by ui_runtime in its ui_loop callbacks - atom::AtomBrowserMainParts::SetNodeEnvironment(); +UiRuntime::UiRuntime(content::ContentMainParams *params) + : _params(params) { } UiRuntime::~UiRuntime() { diff --git a/atom/app/watch_runtime.cc b/atom/app/watch_runtime.cc index 1309b53..58b4204 100644 --- a/atom/app/watch_runtime.cc +++ b/atom/app/watch_runtime.cc @@ -38,9 +38,6 @@ namespace runtime { WatchRuntime::WatchRuntime(content::ContentMainParams *params) : _params(params) { - // This line's position is essential as this creates the Browser - // object which is needed later on by watch_runtime in its watch_loop callbacks - atom::AtomBrowserMainParts::SetNodeEnvironment(); } WatchRuntime::~WatchRuntime() { diff --git a/tizen/src/wrt_main.cc b/tizen/src/wrt_main.cc index 35027bd..c32c287 100644 --- a/tizen/src/wrt_main.cc +++ b/tizen/src/wrt_main.cc @@ -10,6 +10,7 @@ #include "content/public/app/content_main.h" #include "atom/app/node_main.h" +#include "atom/browser/atom_browser_main_parts.h" #include "atom/common/atom_command_line.h" #include "base/at_exit.h" #include "base/i18n/icu_util.h" @@ -73,7 +74,6 @@ REFERENCE_MODULE(wrt); #if defined(OS_TIZEN) bool g_initialized_ = false; -std::unique_ptr runtime_; // For debug purpose only. // TODO: To be removed later @@ -106,6 +106,7 @@ int main(int argc, char* argv[]) { base::CommandLine::Init(argc, argv); } + std::unique_ptr runtime_; common::CommandLine* runtime_cmd = common::CommandLine::ForCurrentProcess(); std::string appid = runtime_cmd->GetAppIdFromCommandLine("/usr/bin/wrt"); @@ -144,9 +145,8 @@ int main(int argc, char* argv[]) { #if defined(OS_TIZEN) if (hasTizenPackageID(argc,argv)) { // TODO: Check to be removed later elm_init(argc, argv); - if (!g_initialized_) { - runtime_ = runtime::Runtime::MakeRuntime(¶ms); - } else { + runtime_ = runtime::Runtime::MakeRuntime(¶ms); + if (g_initialized_) { runtime_->SetParam(¶ms); } return runtime_->Exec(); @@ -172,7 +172,7 @@ int main(int argc, const char* argv[]) { params.argc = argc; params.argv = const_cast(argv); atom::AtomCommandLine::Init(argc, argv); - runtime_ = runtime::Runtime::MakeRuntime(nullptr); + atom::AtomBrowserMainParts::SetNodeEnvironment(); tizen::PreloadManager::GetInstance()->CreateCacheComponent(); return 0; }; -- 2.7.4 From 3465b7713914a4290070d2ff6fcc19b1ac317a11 Mon Sep 17 00:00:00 2001 From: "k2.nagaraju" Date: Tue, 24 Jul 2018 18:05:27 +0530 Subject: [PATCH 08/16] Add tizen tts support Electron currently uses the chromium tts engine. Added tizen tts support. Change-Id: Ie7e0231f2cc2a280a3c0c4d4df72c18378ee6193 Signed-off-by: k2.nagaraju --- atom/browser/atom_browser_client.cc | 11 ++++++++++- atom/common/common_message_generator.h | 4 +++- atom/renderer/renderer_client_base.cc | 9 +++++++++ efl/build/system.gyp | 21 ++++++++++++++++++++ filenames.gypi | 36 ++++++++++++++++++++-------------- packaging/electron-efl.spec | 1 + wrt.gyp | 1 + 7 files changed, 66 insertions(+), 17 deletions(-) diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 6fefad7..1f5aee5 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -28,7 +28,6 @@ #include "chrome/browser/printing/printing_message_filter.h" #include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h" #include "chrome/browser/renderer_host/pepper/widevine_cdm_message_filter.h" -#include "chrome/browser/speech/tts_message_filter.h" #include "content/common/resource_request_body_impl.h" #include "content/public/browser/browser_ppapi_host.h" #include "content/public/browser/client_certificate_delegate.h" @@ -44,6 +43,12 @@ #include "ui/base/l10n/l10n_util.h" #include "v8/include/v8.h" +#if defined(OS_TIZEN) +#include "content/browser/speech/tts_message_filter_efl.h" +#else +#include "chrome/browser/speech/tts_message_filter.h" +#endif + namespace atom { namespace { @@ -130,7 +135,11 @@ void AtomBrowserClient::RenderProcessWillLaunch( content::RenderProcessHost* host) { int process_id = host->GetID(); host->AddFilter(new printing::PrintingMessageFilter(process_id)); +#if defined(OS_TIZEN) + host->AddFilter(new content::TtsMessageFilterEfl()); +#else host->AddFilter(new TtsMessageFilter(process_id, host->GetBrowserContext())); +#endif host->AddFilter( new WidevineCdmMessageFilter(process_id, host->GetBrowserContext())); diff --git a/atom/common/common_message_generator.h b/atom/common/common_message_generator.h index a63c40b..f2c65cd 100644 --- a/atom/common/common_message_generator.h +++ b/atom/common/common_message_generator.h @@ -6,7 +6,9 @@ #include "atom/common/api/api_messages.h" #include "chrome/common/print_messages.h" -#include "chrome/common/tts_messages.h" #include "chrome/common/widevine_cdm_messages.h" #include "chrome/common/chrome_utility_messages.h" #include "components/pdf/common/pdf_messages.h" +#if !defined(OS_TIZEN) +#include "chrome/common/tts_messages.h" +#endif diff --git a/atom/renderer/renderer_client_base.cc b/atom/renderer/renderer_client_base.cc index 4d3675e..51720d0 100644 --- a/atom/renderer/renderer_client_base.cc +++ b/atom/renderer/renderer_client_base.cc @@ -36,6 +36,11 @@ #include "base/strings/sys_string_conversions.h" #endif +#if defined(OS_TIZEN) +#include "content/common/tts_messages_efl.h" +#include "content/renderer/tts_dispatcher_efl.h" +#endif + #if defined(OS_WIN) #include #endif @@ -160,7 +165,11 @@ void RendererClientBase::DidClearWindowObject( blink::WebSpeechSynthesizer* RendererClientBase::OverrideSpeechSynthesizer( blink::WebSpeechSynthesizerClient* client) { +#if defined(OS_TIZEN) + return new content::TtsDispatcherEfl(client); +#else return new TtsDispatcher(client); +#endif } bool RendererClientBase::OverrideCreatePlugin( diff --git a/efl/build/system.gyp b/efl/build/system.gyp index 2d41270..ebbc965 100644 --- a/efl/build/system.gyp +++ b/efl/build/system.gyp @@ -281,5 +281,26 @@ }], ], }, # appcore-watch + { + 'target_name': 'tts', + 'type': 'none', + 'conditions': [ + ['is_tizen==1', { + 'direct_dependent_settings': { + 'cflags': [ + ' Date: Wed, 25 Jul 2018 03:55:58 +0000 Subject: [PATCH 09/16] Revert "Set Default TTS voice as Female/en_US" This change is not needed. On tizen, we need to use CAPI framework for TTS. This reverts commit 6f627f5360b740e5a2c4211d743dd190af7b8202. Change-Id: I4ba520063aa0b04d8fc4a48c03a20b01de1a4ab3 Signed-off-by: Venugopal S M --- chromium_src/chrome/common/tts_utterance_request.cc | 9 --------- chromium_src/chrome/common/tts_utterance_request.h | 2 -- chromium_src/chrome/renderer/tts_dispatcher.cc | 12 ------------ 3 files changed, 23 deletions(-) diff --git a/chromium_src/chrome/common/tts_utterance_request.cc b/chromium_src/chrome/common/tts_utterance_request.cc index bb16da9..a2e3e7f 100644 --- a/chromium_src/chrome/common/tts_utterance_request.cc +++ b/chromium_src/chrome/common/tts_utterance_request.cc @@ -19,15 +19,6 @@ TtsVoice::TtsVoice() is_default(false) { } -TtsVoice::TtsVoice(std::string voice_uri, std::string name, std::string lang, - bool local_service, bool is_default) - : voice_uri(voice_uri), - name(name), - lang(lang), - local_service(local_service), - is_default(is_default) { -} - TtsVoice::~TtsVoice() { } diff --git a/chromium_src/chrome/common/tts_utterance_request.h b/chromium_src/chrome/common/tts_utterance_request.h index 1c5e829..a4b4cab 100644 --- a/chromium_src/chrome/common/tts_utterance_request.h +++ b/chromium_src/chrome/common/tts_utterance_request.h @@ -25,8 +25,6 @@ struct TtsUtteranceRequest { struct TtsVoice { TtsVoice(); - TtsVoice(std::string voice_uri, std::string name, std::string lang, - bool local_service, bool is_default); ~TtsVoice(); std::string voice_uri; diff --git a/chromium_src/chrome/renderer/tts_dispatcher.cc b/chromium_src/chrome/renderer/tts_dispatcher.cc index e574de0..0d3b97c 100644 --- a/chromium_src/chrome/renderer/tts_dispatcher.cc +++ b/chromium_src/chrome/renderer/tts_dispatcher.cc @@ -21,23 +21,11 @@ using blink::WebSpeechSynthesisVoice; using blink::WebString; using blink::WebVector; -namespace { - -static const std::vector& getDefaultVoiceList() { - static std::vector default_voices( - 1, TtsVoice("localhost:Female/en_US", "Female", "en_US", false, false)); - - return default_voices; -} - -} // namespace - int TtsDispatcher::next_utterance_id_ = 1; TtsDispatcher::TtsDispatcher(WebSpeechSynthesizerClient* client) : synthesizer_client_(client) { RenderThread::Get()->AddObserver(this); - OnSetVoiceList(getDefaultVoiceList()); } TtsDispatcher::~TtsDispatcher() { -- 2.7.4 From 897ac8b1502a71d58977d69bcdee4d7610e6fe5e Mon Sep 17 00:00:00 2001 From: "ws29.jung" Date: Wed, 25 Jul 2018 16:41:54 +0900 Subject: [PATCH 10/16] Separate Watch app implementation from TV build Tizen build has 2 type build: Standard, TV. Wath App implementation files must include within only Standard build but gyp and sources files were including watch app files on both Standard and TV. In this patch, files relate to the Watch App are separated from TV build. Change-Id: Id355deae9b6316e3a65d237d434cbaff1a620dfd Signed-off-by: ws29.jung --- atom/app/runtime.cc | 4 ++++ atom/browser/native_window_efl.cc | 14 +++++++++----- efl/build/system.gyp | 4 ++-- packaging/electron-efl.spec | 10 +++++----- wrt.gyp | 8 ++++++++ 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/atom/app/runtime.cc b/atom/app/runtime.cc index c089436..6e27d1a 100644 --- a/atom/app/runtime.cc +++ b/atom/app/runtime.cc @@ -16,7 +16,9 @@ #include "atom/app/runtime.h" #include "atom/app/ui_runtime.h" +#if !defined(OS_TIZEN_TV_PRODUCT) #include "atom/app/watch_runtime.h" +#endif #include "atom/browser/atom_browser_main_parts.h" #include "atom/browser/native_window_efl.h" #include "base/logging.h" @@ -43,9 +45,11 @@ std::unique_ptr Runtime::MakeRuntime(content::ContentMainParams *params #endif // IME_FEATURE_SUPPORT */ auto app_data = common::ApplicationDataManager::GetCurrentAppData(); efl::WindowFactory::SetDelegate(&atom::NativeWindowEfl::GetHostWindowDelegate); +#if !defined(OS_TIZEN_TV_PRODUCT) if (app_data->app_type() == common::ApplicationData::WATCH) return std::unique_ptr(new WatchRuntime(params)); else +#endif return std::unique_ptr(new UiRuntime(params)); } diff --git a/atom/browser/native_window_efl.cc b/atom/browser/native_window_efl.cc index d032579..1fac541 100644 --- a/atom/browser/native_window_efl.cc +++ b/atom/browser/native_window_efl.cc @@ -6,7 +6,12 @@ #include #include +#if defined(OS_TIZEN_TV_PRODUCT) +#include +#include +#else #include +#endif #include "atom/common/options_switches.h" #include "base/command_line.h" @@ -26,11 +31,6 @@ #include "tizen/common/application_data.h" #endif -#if defined(OS_TIZEN_TV_PRODUCT) -#include -#include -#endif - namespace atom { namespace { @@ -73,6 +73,7 @@ Evas_Object* NativeWindowEfl::GetHostWindowDelegate(const content::WebContents* Evas_Object* win = NULL; auto app_data = common::ApplicationDataManager::GetCurrentAppData(); +#if !defined(OS_TIZEN_TV_PRODUCT) if (app_data->app_type() == common::ApplicationData::WATCH) { elm_config_accel_preference_set("opengl"); watch_app_get_elm_win(&win); @@ -80,9 +81,12 @@ Evas_Object* NativeWindowEfl::GetHostWindowDelegate(const content::WebContents* evas_object_render_op_set(win, EVAS_RENDER_COPY); } else { +#endif win = elm_win_util_standard_add("", ""); elm_win_autodel_set(win, EINA_TRUE); +#if !defined(OS_TIZEN_TV_PRODUCT) } +#endif window_map_[web_contents] = win; return win; diff --git a/efl/build/system.gyp b/efl/build/system.gyp index ebbc965..4b56c0d 100644 --- a/efl/build/system.gyp +++ b/efl/build/system.gyp @@ -243,7 +243,7 @@ 'target_name': 'capi-appfw-watch-application', 'type': 'none', 'conditions': [ - ['is_tizen==1', { + ['tizen_product_tv==0', { 'direct_dependent_settings': { 'cflags': [ ' Date: Wed, 25 Jul 2018 17:34:23 +0900 Subject: [PATCH 11/16] fixup! Separate Watch app implementation from TV build ttrace was accidently removed from spec file. Change-Id: I9fe7e74009128bcef8767d610ac5ac3ce820b4bf Signed-off-by: ws29.jung --- packaging/electron-efl.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/packaging/electron-efl.spec b/packaging/electron-efl.spec index 3a9137f..ba61619 100755 --- a/packaging/electron-efl.spec +++ b/packaging/electron-efl.spec @@ -48,6 +48,7 @@ BuildRequires: pkgconfig(nss) BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(uuid) +BuildRequires: pkgconfig(ttrace) BuildRequires: pkgconfig(tts) BuildRequires: pkgconfig(wgt-manifest-handlers) BuildRequires: pkgconfig(jsoncpp) -- 2.7.4 From 6ea597120e61db2be35b578241a3b9bbc2d0a321 Mon Sep 17 00:00:00 2001 From: "surya.kumar7" Date: Thu, 19 Jul 2018 13:50:00 +0530 Subject: [PATCH 12/16] Add runtime configuration to dynamically modify single process mode Single process mode can be easily altered with the help of a platform level environment flag Change-Id: Ie5b56e0b786f3221b37522ff921a495e17a9347f Signed-off-by: surya.kumar7 --- atom/app/node_main.cc | 8 ++++---- atom/browser/browser.cc | 2 ++ atom/browser/node_debugger.h | 2 +- packaging/electron-efl.spec | 5 +++++ tizen/pwrt_env.sh | 1 + tizen/src/wrt_main.cc | 5 ++--- vendor/node/src/node.cc | 6 +++--- vendor/node/src/node.h | 4 ++-- wrt.gyp | 8 ++++++++ 9 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 tizen/pwrt_env.sh diff --git a/atom/app/node_main.cc b/atom/app/node_main.cc index dbfbfae..9e80ef2 100644 --- a/atom/app/node_main.cc +++ b/atom/app/node_main.cc @@ -44,7 +44,7 @@ int NodeMain(int argc, char *argv[]) { int exec_argc; const char** exec_argv; - // node::Init(&argc, const_cast(argv), &exec_argc, &exec_argv); not called + node::Init(&argc, const_cast(argv), &exec_argc, &exec_argv); node::IsolateData isolate_data(gin_env.isolate(), loop); node::Environment* env = node::CreateEnvironment( @@ -52,9 +52,9 @@ int NodeMain(int argc, char *argv[]) { exec_argc, exec_argv); // Start our custom debugger implementation. - // NodeDebugger node_debugger(gin_env.isolate()); not called - // if (node_debugger.IsRunning()) - // env->AssignToContext(v8::Debug::GetDebugContext(gin_env.isolate())); + NodeDebugger node_debugger(gin_env.isolate()); + if (node_debugger.IsRunning()) + env->AssignToContext(v8::Debug::GetDebugContext(gin_env.isolate())); mate::Dictionary process(gin_env.isolate(), env->process_object()); #if defined(OS_WIN) diff --git a/atom/browser/browser.cc b/atom/browser/browser.cc index dcbe344..24c6c1f 100644 --- a/atom/browser/browser.cc +++ b/atom/browser/browser.cc @@ -121,6 +121,8 @@ void Browser::Shutdown() { if (base::ThreadTaskRunnerHandle::IsSet()) { if (::tizen::is_single_process) { + // TODO: If delay is not produced, child thread closure is not happening; + // engine has to be checked base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), base::TimeDelta::FromSeconds(1)); } else { diff --git a/atom/browser/node_debugger.h b/atom/browser/node_debugger.h index 4889fb2..04a4f62 100644 --- a/atom/browser/node_debugger.h +++ b/atom/browser/node_debugger.h @@ -19,7 +19,7 @@ namespace atom { // Add support for node's "--debug" switch. class NodeDebugger : public net::test_server::StreamListenSocket::Delegate { public: - explicit NodeDebugger(v8::Isolate* isolate, uv_loop_t* loop_); + explicit NodeDebugger(v8::Isolate* isolate, uv_loop_t* loop_ = uv_default_loop()); virtual ~NodeDebugger(); bool IsRunning() const; diff --git a/packaging/electron-efl.spec b/packaging/electron-efl.spec index ba61619..0e1a392 100755 --- a/packaging/electron-efl.spec +++ b/packaging/electron-efl.spec @@ -160,6 +160,10 @@ install -p -m 644 %{_out}/gen/widget.json %{buildroot}%{extension_path} # Need to remove the below line later install -p -m 644 %{_out}/lib/libwidget_plugin.so %{buildroot}%{_libdir} +# pwrt_env file +mkdir -p %{buildroot}%{_sysconfdir}/profile.d/ +install -p -m 755 %{_out}/gen/pwrt_env.sh %{buildroot}%{_sysconfdir}/profile.d/pwrt_env.sh + # screen_plugin install -p -m 644 %{_out}/lib/libsplash_screen_plugin.so %{buildroot}%{extension_path} install -p -m 644 %{_out}/gen/splash_screen.json %{buildroot}%{extension_path} @@ -200,3 +204,4 @@ rm -fr %{buildroot} # Need to remove these below lines later %attr(644,root,root) %{_libdir}/libwidget_plugin.so %attr(644,root,root) %{_libdir}/libsplash_screen_plugin.so +%attr(755,root,root) %{_sysconfdir}/profile.d/pwrt_env.sh diff --git a/tizen/pwrt_env.sh b/tizen/pwrt_env.sh new file mode 100644 index 0000000..96cb594 --- /dev/null +++ b/tizen/pwrt_env.sh @@ -0,0 +1 @@ +export PWRT_BLOCK_SINGLE_PROCESS=ON \ No newline at end of file diff --git a/tizen/src/wrt_main.cc b/tizen/src/wrt_main.cc index c32c287..f449862 100644 --- a/tizen/src/wrt_main.cc +++ b/tizen/src/wrt_main.cc @@ -9,7 +9,6 @@ #include "atom/app/atom_main_delegate.h" // NOLINT #include "content/public/app/content_main.h" -#include "atom/app/node_main.h" #include "atom/browser/atom_browser_main_parts.h" #include "atom/common/atom_command_line.h" #include "base/at_exit.h" @@ -30,7 +29,7 @@ namespace { -bool block_single_process = false; // set to true to disable single process mode altogether +const char *kBlockSingleProcess = "PWRT_BLOCK_SINGLE_PROCESS"; // set to ON to disable single process mode altogether // Default command line flags for all profiles and platforms const char* kDefaultCommandLineFlags[] = { @@ -124,7 +123,7 @@ int main(int argc, char* argv[]) { int args_count = kElectronArgsCount; if (IsBrowserProcess()) { - if (!block_single_process && !isElectronWebApp()) { + if (!getenv(kBlockSingleProcess) && !isElectronWebApp()) { LOG(ERROR) << "will run in single process mode"; tizen::is_single_process = true; args_count = kTizenWebappArgsCount; diff --git a/vendor/node/src/node.cc b/vendor/node/src/node.cc index 4b54bf8..9fb3463 100644 --- a/vendor/node/src/node.cc +++ b/vendor/node/src/node.cc @@ -4440,7 +4440,7 @@ void FreeEnvironment(Environment* env) { } -inline int Start(Isolate* isolate, IsolateData* isolate_data, // not called +inline int Start(Isolate* isolate, IsolateData* isolate_data, int argc, const char* const* argv, int exec_argc, const char* const* exec_argv) { HandleScope handle_scope(isolate); @@ -4501,7 +4501,7 @@ inline int Start(Isolate* isolate, IsolateData* isolate_data, // not called return exit_code; } -inline int Start(uv_loop_t* event_loop, // not called +inline int Start(uv_loop_t* event_loop, int argc, const char* const* argv, int exec_argc, const char* const* exec_argv) { Isolate::CreateParams params; @@ -4563,7 +4563,7 @@ int Start(int argc, char** argv) { // optional, in case you're wondering. int exec_argc; const char** exec_argv; - // Init(&argc, const_cast(argv), &exec_argc, &exec_argv); + Init(&argc, const_cast(argv), &exec_argc, &exec_argv); #if HAVE_OPENSSL if (const char* extra = secure_getenv("NODE_EXTRA_CA_CERTS")) diff --git a/vendor/node/src/node.h b/vendor/node/src/node.h index bac44b0..5890706 100644 --- a/vendor/node/src/node.h +++ b/vendor/node/src/node.h @@ -189,11 +189,11 @@ NODE_EXTERN extern bool g_standalone_mode; NODE_EXTERN extern bool g_upstream_node_mode; NODE_EXTERN int Start(int argc, char *argv[]); -NODE_EXTERN void Init(int* argc, // apart from NodeBindings::Initialize(), no one seems to call +NODE_EXTERN void Init(int* argc, const char** argv, int* exec_argc, const char*** exec_argv, - uv_loop_t* uv_loop_); + uv_loop_t* uv_loop_ = uv_default_loop()); class IsolateData; class Environment; diff --git a/wrt.gyp b/wrt.gyp index 272eb50..7fadfec 100644 --- a/wrt.gyp +++ b/wrt.gyp @@ -42,6 +42,14 @@ ], 'cflags': [ '-fPIC' ], 'cflags_cc': [ '-fPIC' ], + 'copies': [ + { + 'destination': '<(SHARED_INTERMEDIATE_DIR)', + 'files': [ + 'tizen/pwrt_env.sh', + ], + }, + ], }, # target wrt { 'target_name': 'wrt-service', -- 2.7.4 From a85e8595738a1970de7f93c048f81ed2382ee212 Mon Sep 17 00:00:00 2001 From: "surya.kumar7" Date: Thu, 26 Jul 2018 12:42:13 +0530 Subject: [PATCH 13/16] Refactor runtime object Since runtime object is not created during prelaunch, removed functions which handled such scenarios Change-Id: I3ab42b4b5b7299c8a700ee670c7c0ca3a6ab68be Signed-off-by: surya.kumar7 --- atom/app/runtime.h | 2 -- atom/app/ui_runtime.cc | 8 -------- atom/app/ui_runtime.h | 3 +-- atom/app/watch_runtime.cc | 7 ------- atom/app/watch_runtime.h | 3 +-- tizen/src/wrt_main.cc | 3 --- 6 files changed, 2 insertions(+), 24 deletions(-) diff --git a/atom/app/runtime.h b/atom/app/runtime.h index c5552fb..b5f956a 100644 --- a/atom/app/runtime.h +++ b/atom/app/runtime.h @@ -32,8 +32,6 @@ class Runtime { virtual int Exec() = 0; - virtual void SetParam(content::ContentMainParams *params) = 0; - static std::unique_ptr MakeRuntime(content::ContentMainParams *params); }; diff --git a/atom/app/ui_runtime.cc b/atom/app/ui_runtime.cc index c078f65..0b5c77e 100644 --- a/atom/app/ui_runtime.cc +++ b/atom/app/ui_runtime.cc @@ -26,7 +26,6 @@ #include "atom/common/atom_command_line.h" #include "base/logging.h" #include "content/public/app/content_main.h" -#include "gin/v8_initializer.h" #include "tizen/common/app_control.h" #include "tizen/common/app_db.h" #include "tizen/common/application_data.h" @@ -42,13 +41,6 @@ UiRuntime::UiRuntime(content::ContentMainParams *params) UiRuntime::~UiRuntime() { } -void UiRuntime::SetParam(content::ContentMainParams *params) { - if (_params) - LOG(ERROR) << "Use SetParam only when params is null"; - else - _params = params; -} - bool UiRuntime::OnCreate() { auto appdata = common::ApplicationDataManager::GetCurrentAppData(); atom::Browser::Get()->Initialize(); diff --git a/atom/app/ui_runtime.h b/atom/app/ui_runtime.h index f32086b..f39dc4e 100644 --- a/atom/app/ui_runtime.h +++ b/atom/app/ui_runtime.h @@ -29,8 +29,7 @@ class UiRuntime : public Runtime { UiRuntime(content::ContentMainParams *params); virtual ~UiRuntime(); - virtual int Exec(); - virtual void SetParam(content::ContentMainParams *params); + virtual int Exec() override; protected: virtual bool OnCreate(); diff --git a/atom/app/watch_runtime.cc b/atom/app/watch_runtime.cc index 58b4204..793356c 100644 --- a/atom/app/watch_runtime.cc +++ b/atom/app/watch_runtime.cc @@ -43,13 +43,6 @@ WatchRuntime::WatchRuntime(content::ContentMainParams *params) WatchRuntime::~WatchRuntime() { } -void WatchRuntime::SetParam(content::ContentMainParams *params) { - if (_params) - LOG(ERROR) << "Use SetParam only when params is null"; - else - _params = params; -} - bool WatchRuntime::OnCreate() { auto appdata = common::ApplicationDataManager::GetCurrentAppData(); if (appdata->splash_screen_info()) { diff --git a/atom/app/watch_runtime.h b/atom/app/watch_runtime.h index 43636bc..23cdfbd 100644 --- a/atom/app/watch_runtime.h +++ b/atom/app/watch_runtime.h @@ -30,8 +30,7 @@ class WatchRuntime : public Runtime { WatchRuntime(content::ContentMainParams *params); virtual ~WatchRuntime(); - virtual int Exec(); - virtual void SetParam(content::ContentMainParams *params); + virtual int Exec() override; protected: virtual bool OnCreate(); diff --git a/tizen/src/wrt_main.cc b/tizen/src/wrt_main.cc index f449862..32de242 100644 --- a/tizen/src/wrt_main.cc +++ b/tizen/src/wrt_main.cc @@ -145,9 +145,6 @@ int main(int argc, char* argv[]) { if (hasTizenPackageID(argc,argv)) { // TODO: Check to be removed later elm_init(argc, argv); runtime_ = runtime::Runtime::MakeRuntime(¶ms); - if (g_initialized_) { - runtime_->SetParam(¶ms); - } return runtime_->Exec(); } #endif -- 2.7.4 From 3e58f27649209936f44aa63a83d855587f95be11 Mon Sep 17 00:00:00 2001 From: Prathmesh Date: Tue, 24 Jul 2018 15:56:44 +0530 Subject: [PATCH 14/16] Make wrt target separate from the main target Make main target as none, so that libs can be generated separately if required, else all the .so needs to be statically linked with wrt target Change-Id: I149b467e1ba4c2b152f73388fb44d830a29ae246 Signed-off-by: Prathmesh --- packaging/electron-efl.spec | 9 +-------- script/update.py | 2 +- wrt.gyp | 2 -- wrt_all.gyp | 13 +++++++++++++ 4 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 wrt_all.gyp diff --git a/packaging/electron-efl.spec b/packaging/electron-efl.spec index 0e1a392..ea9690e 100755 --- a/packaging/electron-efl.spec +++ b/packaging/electron-efl.spec @@ -103,7 +103,7 @@ DEFINE_ARGS+=" -v %endif -./script/build.py -c D -t wrt +./script/build.py -c D -t wrt_all %install install -d %{_out}/packaging @@ -157,8 +157,6 @@ install -p -m 755 %{_out}/lib/libxwalk_injected_bundle.so %{buildroot}%{_libdir} # widget plugin install -p -m 644 %{_out}/lib/libwidget_plugin.so %{buildroot}%{extension_path} install -p -m 644 %{_out}/gen/widget.json %{buildroot}%{extension_path} -# Need to remove the below line later -install -p -m 644 %{_out}/lib/libwidget_plugin.so %{buildroot}%{_libdir} # pwrt_env file mkdir -p %{buildroot}%{_sysconfdir}/profile.d/ @@ -167,8 +165,6 @@ install -p -m 755 %{_out}/gen/pwrt_env.sh %{buildroot}%{_sysconfdir}/profile.d/p # screen_plugin install -p -m 644 %{_out}/lib/libsplash_screen_plugin.so %{buildroot}%{extension_path} install -p -m 644 %{_out}/gen/splash_screen.json %{buildroot}%{extension_path} -# Need to remove the below line later -install -p -m 644 %{_out}/lib/libsplash_screen_plugin.so %{buildroot}%{_libdir} %post # FIXME: Until electron-efl is released to platform, @@ -201,7 +197,4 @@ rm -fr %{buildroot} %attr(644,root,root) %{extension_path}/widget.json %attr(644,root,root) %{extension_path}/libsplash_screen_plugin.so %attr(644,root,root) %{extension_path}/splash_screen.json -# Need to remove these below lines later -%attr(644,root,root) %{_libdir}/libwidget_plugin.so -%attr(644,root,root) %{_libdir}/libsplash_screen_plugin.so %attr(755,root,root) %{_sysconfdir}/profile.d/pwrt_env.sh diff --git a/script/update.py b/script/update.py index 5c9c957..08bdf58 100755 --- a/script/update.py +++ b/script/update.py @@ -98,7 +98,7 @@ def run_gyp(target_arch, component): if 'use_efl=1' in [d.strip() for d in args.defines.split(' ')]: return subprocess.call([python, gyp, '-f', generator, '--depth', '.', - 'wrt.gyp', '-I' + os.path.join('tizen', 'common.gypi')] + defines, env=env) + 'wrt_all.gyp', '-I' + os.path.join('tizen', 'common.gypi')] + defines, env=env) return subprocess.call([python, gyp, '-f', generator, '--depth', '.', 'electron.gyp', '-Icommon.gypi'] + defines, env=env) diff --git a/wrt.gyp b/wrt.gyp index 7fadfec..83132ca 100644 --- a/wrt.gyp +++ b/wrt.gyp @@ -14,8 +14,6 @@ 'wrt-service', '<(DEPTH)/tizen/common/common.gyp:wrt_common', '<(DEPTH)/tizen/loader/loader.gyp:wrt-loader', - '<(DEPTH)/tizen/extensions/extensions.gyp:widget_plugin', - '<(DEPTH)/tizen/extensions/extensions.gyp:splash_screen_plugin', '<(DEPTH)/tizen/renderer/injected_bundle.gyp:xwalk_injected_bundle', '<(DEPTH)/efl/build/system.gyp:ecore', '<(DEPTH)/efl/build/system.gyp:launchpad', diff --git a/wrt_all.gyp b/wrt_all.gyp new file mode 100644 index 0000000..31b6291 --- /dev/null +++ b/wrt_all.gyp @@ -0,0 +1,13 @@ +{ + 'targets': [ + { + 'target_name': 'wrt_all', + 'type': 'none', + 'dependencies': [ + '<(DEPTH)/tizen/extensions/extensions.gyp:widget_plugin', + '<(DEPTH)/tizen/extensions/extensions.gyp:splash_screen_plugin', + '<(DEPTH)/wrt.gyp:wrt', + ], + }, # end of target 'wrt_all' + ], # end of targets +} \ No newline at end of file -- 2.7.4 From 991b30c36bfbb645fd37ae118b622486a0fec206 Mon Sep 17 00:00:00 2001 From: SangYong Park Date: Wed, 25 Jul 2018 18:44:31 +0900 Subject: [PATCH 15/16] Initialize chromium binding during preload Initialize chroimium binding during preload for electron's launch sequence. It will show better launch performance and minimal electron's code change. Change-Id: I1e1441c2cc1762afc0ae6a46e946ca44a20b8885 Signed-off-by: SangYong Park --- atom/app/atom_main_delegate.cc | 9 -- atom/app/runtime.cc | 24 ++-- atom/app/runtime.h | 13 +- atom/app/ui_runtime.cc | 95 +++++--------- atom/app/ui_runtime.h | 21 ++- atom/app/watch_runtime.cc | 104 +++++---------- atom/app/watch_runtime.h | 21 ++- atom/browser/browser.cc | 22 +--- atom/browser/browser.h | 8 -- atom/browser/native_window.cc | 6 - atom/browser/native_window.h | 1 - atom/browser/native_window_observer.h | 1 - tizen/common/application_data.cc | 10 ++ tizen/common/application_data.h | 2 + tizen/src/app/wrt_main_delegate.cc | 62 +++++++++ tizen/src/app/wrt_main_delegate.h | 26 ++++ tizen/src/browser/api/wrt_api_core.cc | 10 +- tizen/src/browser/api/wrt_api_core.h | 7 +- tizen/src/browser/native_web_runtime.cc | 56 ++++++++ tizen/src/browser/native_web_runtime.h | 40 ++++++ tizen/src/browser/native_web_runtime_observer.h | 15 +++ tizen/src/wrt_main.cc | 167 ++++++++---------------- wrt.gyp | 5 + wrt/src/runtime.js | 29 ++-- wrt/src/web_application.js | 1 + wrt/src/web_window.js | 4 - 26 files changed, 409 insertions(+), 350 deletions(-) create mode 100644 tizen/src/app/wrt_main_delegate.cc create mode 100644 tizen/src/app/wrt_main_delegate.h create mode 100644 tizen/src/browser/native_web_runtime.cc create mode 100644 tizen/src/browser/native_web_runtime.h create mode 100644 tizen/src/browser/native_web_runtime_observer.h diff --git a/atom/app/atom_main_delegate.cc b/atom/app/atom_main_delegate.cc index b88049f..0358e7d 100644 --- a/atom/app/atom_main_delegate.cc +++ b/atom/app/atom_main_delegate.cc @@ -151,15 +151,6 @@ void AtomMainDelegate::PreSandboxStartup() { // Allow file:// URIs to read other file:// URIs by default. command_line->AppendSwitch(::switches::kAllowFileAccessFromFiles); -#if defined(OS_TIZEN) - LOG (ERROR) << "Set Injected bundle path to engine"; - command_line->AppendSwitchASCII( - "injected-bundle-path","/usr/lib/libxwalk_injected_bundle.so"); - std::string app_id = common::CommandLine::ForCurrentProcess()-> - GetAppIdFromCommandLine("/usr/bin/wrt"); - command_line->AppendSwitchASCII("widget-id",app_id); -#endif - #if defined(OS_MACOSX) // Enable AVFoundation. command_line->AppendSwitch("enable-avfoundation"); diff --git a/atom/app/runtime.cc b/atom/app/runtime.cc index 6e27d1a..157755a 100644 --- a/atom/app/runtime.cc +++ b/atom/app/runtime.cc @@ -15,26 +15,24 @@ */ #include "atom/app/runtime.h" + #include "atom/app/ui_runtime.h" -#if !defined(OS_TIZEN_TV_PRODUCT) -#include "atom/app/watch_runtime.h" -#endif -#include "atom/browser/atom_browser_main_parts.h" #include "atom/browser/native_window_efl.h" -#include "base/logging.h" #include "efl/window_factory.h" #include "tizen/common/application_data.h" +#if !defined(OS_TIZEN_TV_PRODUCT) +#include "atom/app/watch_runtime.h" +#endif + namespace runtime { -Runtime::Runtime() { - atom::AtomBrowserMainParts::SetNodeEnvironment(); -} +Runtime::Runtime() {} -Runtime::~Runtime() { -} +Runtime::~Runtime() {} -std::unique_ptr Runtime::MakeRuntime(content::ContentMainParams *params) { +// static +std::unique_ptr Runtime::MakeRuntime() { /* if (app_data->app_type() == common::ApplicationData::UI) { return std::unique_ptr(new UiRuntime()); } @@ -47,10 +45,10 @@ std::unique_ptr Runtime::MakeRuntime(content::ContentMainParams *params efl::WindowFactory::SetDelegate(&atom::NativeWindowEfl::GetHostWindowDelegate); #if !defined(OS_TIZEN_TV_PRODUCT) if (app_data->app_type() == common::ApplicationData::WATCH) - return std::unique_ptr(new WatchRuntime(params)); + return std::unique_ptr(new WatchRuntime()); else #endif - return std::unique_ptr(new UiRuntime(params)); + return std::unique_ptr(new UiRuntime()); } } // namespace runtime diff --git a/atom/app/runtime.h b/atom/app/runtime.h index b5f956a..d07c56e 100644 --- a/atom/app/runtime.h +++ b/atom/app/runtime.h @@ -19,20 +19,19 @@ #define RUNTIME_H_ #include -#include - -#include "content/public/app/content_main.h" namespace runtime { class Runtime { public: - Runtime(); - virtual ~Runtime() = 0; + virtual ~Runtime(); - virtual int Exec() = 0; + virtual int Exec(int argc, char** argv) = 0; - static std::unique_ptr MakeRuntime(content::ContentMainParams *params); + static std::unique_ptr MakeRuntime(); + + protected: + Runtime(); }; } // namespace runtime diff --git a/atom/app/ui_runtime.cc b/atom/app/ui_runtime.cc index 0b5c77e..186b765 100644 --- a/atom/app/ui_runtime.cc +++ b/atom/app/ui_runtime.cc @@ -14,123 +14,90 @@ * limitations under the License. */ +#include "atom/app/ui_runtime.h" + #include #include -#include -#include "atom/app/atom_main_delegate.h" -#include "atom/app/ui_runtime.h" -#include "atom/browser/atom_browser_client.h" -#include "atom/browser/atom_browser_main_parts.h" #include "atom/browser/browser.h" -#include "atom/common/atom_command_line.h" #include "base/logging.h" -#include "content/public/app/content_main.h" #include "tizen/common/app_control.h" #include "tizen/common/app_db.h" #include "tizen/common/application_data.h" -#include "tizen/common/command_line.h" #include "tizen/common/constants.h" namespace runtime { -UiRuntime::UiRuntime(content::ContentMainParams *params) - : _params(params) { -} +UiRuntime::UiRuntime() {} -UiRuntime::~UiRuntime() { -} +UiRuntime::~UiRuntime() {} bool UiRuntime::OnCreate() { + LOG(INFO) << "OnCreate()"; auto appdata = common::ApplicationDataManager::GetCurrentAppData(); - atom::Browser::Get()->Initialize(); - if(appdata->splash_screen_info()){ - atom::Browser* browser_model = atom::Browser::Get(); - browser_model->SetSplashScreen(); + auto browser = atom::Browser::Get(); + browser->Initialize(); + if (appdata->splash_screen_info()) { + browser->SetSplashScreen(); } - return true; } void UiRuntime::OnTerminate() { - LOG(ERROR) << "OnTerminate()"; + LOG(INFO) << "OnTerminate()"; } void UiRuntime::OnPause() { - LOG(ERROR) << "OnPause()"; - atom::Browser *browser_model = atom::Browser::Get(); - browser_model->Hide(); + LOG(INFO) << "OnPause()"; + atom::Browser::Get()->Hide(); } void UiRuntime::OnResume() { - LOG(ERROR) << "OnResume()"; - atom::Browser *browser_model = atom::Browser::Get(); - browser_model->Show(); + LOG(INFO) << "OnResume()"; + atom::Browser::Get()->Show(); } void UiRuntime::OnAppControl(app_control_h app_control) { - LOG(ERROR) << "OnAppControl()"; + LOG(INFO) << "OnAppControl()"; std::unique_ptr appcontrol(new common::AppControl(app_control)); common::AppDB* appdb = common::AppDB::GetInstance(); appdb->Set(kAppDBRuntimeSection, kAppDBRuntimeBundle, appcontrol->encoded_bundle()); - atom::Browser *browser_model = atom::Browser::Get(); - if (browser_model->launched()) { - browser_model->AppControl(std::move(appcontrol)); + auto browser = atom::Browser::Get(); + if (browser->launched()) { + browser->AppControl(std::move(appcontrol)); } else { - browser_model->Launch(std::move(appcontrol)); + browser->Launch(std::move(appcontrol)); } } void UiRuntime::OnLanguageChanged(const std::string& language) { - LOG(ERROR) << "OnLanguageChanged()"; + LOG(INFO) << "OnLanguageChanged()"; } void UiRuntime::OnLowMemory() { - LOG(ERROR) << "OnLowMemory()"; + LOG(INFO) << "OnLowMemory()"; } -int UiRuntime::Exec() { - ui_app_lifecycle_callback_s ops = {NULL, NULL, NULL, NULL, NULL}; - - // onCreate +int UiRuntime::Exec(int argc, char** argv) { + ui_app_lifecycle_callback_s ops; ops.create = [](void* data) -> bool { - LOG(ERROR) << "Create Tizen App."; - UiRuntime *runtime = (UiRuntime*)data; - runtime->OnCreate(); - content::ContentMain(*runtime->_params); - return true; + return reinterpret_cast(data)->OnCreate(); }; - - // onTerminate ops.terminate = [](void* data) -> void { - LOG(ERROR) << "Terminate Tizen App."; - UiRuntime *runtime = (UiRuntime*)data; - runtime->OnTerminate(); + reinterpret_cast(data)->OnTerminate(); }; - - // onPause ops.pause = [](void* data) -> void { - LOG(ERROR) << "Pause Tizen App."; - UiRuntime *runtime = (UiRuntime*)data; - runtime->OnPause(); + reinterpret_cast(data)->OnPause(); }; - - // onResume ops.resume = [](void* data) -> void { - LOG(ERROR) << "Resume Tizen App."; - UiRuntime *runtime = (UiRuntime*)data; - runtime->OnResume(); + reinterpret_cast(data)->OnResume(); }; - - // onAppControl ops.app_control = [](app_control_h app_control, void* data) -> void { - LOG(ERROR) << "app_control Tizen App."; - UiRuntime *runtime = (UiRuntime*)data; - runtime->OnAppControl(app_control); + reinterpret_cast(data)->OnAppControl(app_control); }; - - return ui_app_main(_params->argc, const_cast(_params->argv), &ops, this); + return ui_app_main(argc, argv, &ops, this); } -} //namespace + +} // namespace runtime diff --git a/atom/app/ui_runtime.h b/atom/app/ui_runtime.h index f39dc4e..d86818b 100644 --- a/atom/app/ui_runtime.h +++ b/atom/app/ui_runtime.h @@ -26,22 +26,19 @@ namespace runtime { class UiRuntime : public Runtime { public: - UiRuntime(content::ContentMainParams *params); + UiRuntime(); virtual ~UiRuntime(); - virtual int Exec() override; + int Exec(int argc, char** argv) override; protected: - virtual bool OnCreate(); - virtual void OnTerminate(); - virtual void OnPause(); - virtual void OnResume(); - virtual void OnAppControl(app_control_h app_control); - virtual void OnLanguageChanged(const std::string& language); - virtual void OnLowMemory(); - - private: - content::ContentMainParams *_params; + bool OnCreate(); + void OnTerminate(); + void OnPause(); + void OnResume(); + void OnAppControl(app_control_h app_control); + void OnLanguageChanged(const std::string& language); + void OnLowMemory(); }; } // namespace runtime diff --git a/atom/app/watch_runtime.cc b/atom/app/watch_runtime.cc index 793356c..d32b51f 100644 --- a/atom/app/watch_runtime.cc +++ b/atom/app/watch_runtime.cc @@ -14,126 +14,94 @@ * limitations under the License. */ +#include "atom/app/watch_runtime.h" + #include #include -#include #include -#include "atom/app/atom_main_delegate.h" -#include "atom/app/watch_runtime.h" -#include "atom/browser/atom_browser_client.h" -#include "atom/browser/atom_browser_main_parts.h" #include "atom/browser/browser.h" -#include "atom/common/atom_command_line.h" #include "base/logging.h" -#include "content/public/app/content_main.h" -#include "gin/v8_initializer.h" #include "tizen/common/app_control.h" #include "tizen/common/app_db.h" #include "tizen/common/application_data.h" -#include "tizen/common/command_line.h" #include "tizen/common/constants.h" namespace runtime { -WatchRuntime::WatchRuntime(content::ContentMainParams *params) - : _params(params) { -} +WatchRuntime::WatchRuntime() {} -WatchRuntime::~WatchRuntime() { -} +WatchRuntime::~WatchRuntime() {} bool WatchRuntime::OnCreate() { + LOG(INFO) << "OnCreate()"; auto appdata = common::ApplicationDataManager::GetCurrentAppData(); + auto browser = atom::Browser::Get(); if (appdata->splash_screen_info()) { - atom::Browser* browser_model = atom::Browser::Get(); - browser_model->SetSplashScreen(); + browser->SetSplashScreen(); } - return true; } void WatchRuntime::OnTerminate() { - LOG(ERROR) << "OnTerminate()"; - atom::Browser *browser_model = atom::Browser::Get(); + LOG(INFO) << "OnTerminate()"; } void WatchRuntime::OnPause() { - LOG(ERROR) << "OnPause()"; - atom::Browser *browser_model = atom::Browser::Get(); - browser_model->Hide(); + LOG(INFO) << "OnPause()"; + atom::Browser::Get()->Hide(); } void WatchRuntime::OnResume() { - LOG(ERROR) << "OnResume()"; - atom::Browser *browser_model = atom::Browser::Get(); - browser_model->Show(); + LOG(INFO) << "OnResume()"; + atom::Browser::Get()->Show(); } void WatchRuntime::OnAppControl(app_control_h app_control) { - LOG(ERROR) << "OnAppControl()"; + LOG(INFO) << "OnAppControl()"; std::unique_ptr appcontrol(new common::AppControl(app_control)); common::AppDB* appdb = common::AppDB::GetInstance(); appdb->Set(kAppDBRuntimeSection, kAppDBRuntimeBundle, appcontrol->encoded_bundle()); - atom::Browser *browser_model = atom::Browser::Get(); - if (browser_model->launched()) { - browser_model->AppControl(std::move(appcontrol)); + auto browser = atom::Browser::Get(); + if (browser->launched()) { + browser->AppControl(std::move(appcontrol)); } else { - browser_model->Initialize(); - browser_model->Launch(std::move(appcontrol)); + browser->Initialize(); + browser->Launch(std::move(appcontrol)); } } void WatchRuntime::OnLanguageChanged(const std::string& language) { - LOG(ERROR) << "OnLanguageChanged()"; + LOG(INFO) << "OnLanguageChanged()"; } void WatchRuntime::OnLowMemory() { - LOG(ERROR) << "OnLowMemory()"; + LOG(INFO) << "OnLowMemory()"; } -int WatchRuntime::Exec() { - watch_app_lifecycle_callback_s ops = {NULL, NULL, NULL, NULL, NULL}; - - // onCreate - ops.create = [](int width, int height, void *data) -> bool { - LOG(ERROR) << "Create Tizen App."; - WatchRuntime *runtime = (WatchRuntime*)data; - runtime->OnCreate(); - content::ContentMain(*runtime->_params); - return true; +int WatchRuntime::Exec(int argc, char** argv) { + watch_app_lifecycle_callback_s ops; + ops.create = [](int width, int height, void* data) -> bool { + return reinterpret_cast(data)->OnCreate(); }; - - // onTerminate - ops.terminate = [](void* data) -> void { - LOG(ERROR) << "Terminate Tizen App."; - WatchRuntime *runtime = (WatchRuntime*)data; - runtime->OnTerminate(); + ops.app_control = [](app_control_h app_control, void* data) -> void { + reinterpret_cast(data)->OnAppControl(app_control); }; - - // onPause ops.pause = [](void* data) -> void { - LOG(ERROR) << "Pause Tizen App."; - WatchRuntime *runtime = (WatchRuntime*)data; - runtime->OnPause(); + reinterpret_cast(data)->OnPause(); }; - - // onResume ops.resume = [](void* data) -> void { - LOG(ERROR) << "Resume Tizen App."; - WatchRuntime *runtime = (WatchRuntime*)data; - runtime->OnResume(); + reinterpret_cast(data)->OnResume(); }; - - // onAppControl - ops.app_control = [](app_control_h app_control, void* data) -> void { - LOG(ERROR) << "app_control Tizen App."; - WatchRuntime *runtime = (WatchRuntime*)data; - runtime->OnAppControl(app_control); + ops.terminate = [](void* data) -> void { + reinterpret_cast(data)->OnTerminate(); }; - - return watch_app_main(_params->argc, const_cast(_params->argv), &ops, this); + ops.time_tick = nullptr; + ops.ambient_tick = nullptr; + ops.ambient_changed = nullptr; + return watch_app_main(argc, argv, &ops, this); } -} //namespace + +} // namespace runtime diff --git a/atom/app/watch_runtime.h b/atom/app/watch_runtime.h index 23cdfbd..4fbfe56 100644 --- a/atom/app/watch_runtime.h +++ b/atom/app/watch_runtime.h @@ -27,22 +27,19 @@ namespace runtime { class WatchRuntime : public Runtime { public: - WatchRuntime(content::ContentMainParams *params); + WatchRuntime(); virtual ~WatchRuntime(); - virtual int Exec() override; + int Exec(int argc, char** argv) override; protected: - virtual bool OnCreate(); - virtual void OnTerminate(); - virtual void OnPause(); - virtual void OnResume(); - virtual void OnAppControl(app_control_h app_control); - virtual void OnLanguageChanged(const std::string& language); - virtual void OnLowMemory(); - - private: - content::ContentMainParams *_params; + bool OnCreate(); + void OnTerminate(); + void OnPause(); + void OnResume(); + void OnAppControl(app_control_h app_control); + void OnLanguageChanged(const std::string& language); + void OnLowMemory(); }; } // namespace runtime diff --git a/atom/browser/browser.cc b/atom/browser/browser.cc index 24c6c1f..808e913 100644 --- a/atom/browser/browser.cc +++ b/atom/browser/browser.cc @@ -23,6 +23,7 @@ #if defined(OS_TIZEN) #include "tizen/common/command_line.h" #include "tizen/common/application_data.h" +#include "tizen/src/browser/native_web_runtime.h" #include #include "wgt_manifest_handlers/launch_screen_handler.h" #endif // defined(OS_TIZEN) @@ -35,7 +36,6 @@ Browser::Browser() : is_quiting_(false), #if defined(OS_TIZEN) launched_(false), - is_electron_launch_(false), #endif is_exiting_(false), is_ready_(false), @@ -136,19 +136,6 @@ void Browser::Shutdown() { } } -#if defined(OS_TIZEN) -void Browser::SetElectronAppLaunch() { - if (!is_electron_launch_) { - auto app_data = common::ApplicationDataManager::GetCurrentAppData(); - if (app_data->content_info() && !strcmp(app_data->content_info()->src().c_str(), "package.json")) { - is_electron_launch_ = true; - } - } else { - is_electron_launch_ = false; - } -} -#endif - std::string Browser::GetVersion() const { if (version_override_.empty()) { std::string version = GetExecutableFileVersion(); @@ -200,9 +187,6 @@ void Browser::Activate(bool has_visible_windows) { } void Browser::WillFinishLaunching() { -#if defined(OS_TIZEN) - SetElectronAppLaunch(); -#endif for (BrowserObserver& observer : observers_) observer.OnWillFinishLaunching(); } @@ -335,9 +319,7 @@ void Browser::Launch(std::unique_ptr appcontrol) { if (res) start_url_ = resource_manager_->GetLocalizedPath(res->uri()); - NativeWindow *last_window = WindowList::GetLastWindow(); - if (last_window) - last_window->NotifyAppControl(); + tizen::NativeWebRuntime::GetInstance().StartApplication(); } void Browser::SetSplashScreen() { diff --git a/atom/browser/browser.h b/atom/browser/browser.h index 358bcb9..6c73a24 100644 --- a/atom/browser/browser.h +++ b/atom/browser/browser.h @@ -231,9 +231,6 @@ class Browser : public WindowListObserver, bool is_shutting_down() const { return is_shutdown_; } bool is_quiting() const { return is_quiting_; } bool is_ready() const { return is_ready_; } -#if defined(OS_TIZEN) - bool is_electron_launch() const { return is_electron_launch_; } -#endif protected: // Returns the version of application bundle or executable file. @@ -255,10 +252,6 @@ class Browser : public WindowListObserver, void OnWindowCloseCancelled(NativeWindow* window) override; void OnWindowAllClosed() override; -#if defined(OS_TIZEN) - void SetElectronAppLaunch(); -#endif - // Observers of the browser. base::ObserverList observers_; @@ -266,7 +259,6 @@ class Browser : public WindowListObserver, std::unique_ptr splash_screen_; std::string start_url_; bool launched_; - bool is_electron_launch_; #endif // Whether `app.exit()` has been called diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 4320eb8..0964d4e 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -617,12 +617,6 @@ void NativeWindow::NotifyResume() for (NativeWindowObserver& observer : observers_) observer.OnResume(); } - -void NativeWindow::NotifyAppControl() -{ - for (NativeWindowObserver& observer : observers_) - observer.OnAppControl(); -} #endif std::unique_ptr NativeWindow::DraggableRegionsToSkRegion( diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index 0e07787..f5237ec 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -251,7 +251,6 @@ class NativeWindow : public base::SupportsUserData, #if defined(OS_TIZEN) void NotifySuspend(); void NotifyResume(); - void NotifyAppControl(); #endif void AddObserver(NativeWindowObserver* obs) { observers_.AddObserver(obs); diff --git a/atom/browser/native_window_observer.h b/atom/browser/native_window_observer.h index 96ac375..76bf7dc 100644 --- a/atom/browser/native_window_observer.h +++ b/atom/browser/native_window_observer.h @@ -97,7 +97,6 @@ class NativeWindowObserver { // Tizen virtual void OnSuspend() {} virtual void OnResume() {} - virtual void OnAppControl() {} #endif }; diff --git a/tizen/common/application_data.cc b/tizen/common/application_data.cc index 13ecf5c..987d3fd 100644 --- a/tizen/common/application_data.cc +++ b/tizen/common/application_data.cc @@ -162,6 +162,16 @@ ApplicationData::AppType ApplicationData::GetAppType() { return UI; } +bool ApplicationData::IsElectronApp() { + if (!content_info_) { + return false; + } + std::string startUrl = content_info_->src(); + std::string suffix(".json"); + return (startUrl.size() > suffix.size() && + std::equal(suffix.rbegin(), suffix.rend(), startUrl.rbegin())); +} + bool ApplicationData::init() { std::unique_ptr res_path(app_get_resource_path()); if (res_path) { diff --git a/tizen/common/application_data.h b/tizen/common/application_data.h index 0429eb0..8fecc85 100644 --- a/tizen/common/application_data.h +++ b/tizen/common/application_data.h @@ -71,6 +71,8 @@ class ApplicationData { const std::string app_id() const { return app_id_; } ApplicationData::AppType app_type() { return app_type_; } + bool IsElectronApp(); + private: bool init(); ApplicationData::AppType GetAppType(); diff --git a/tizen/src/app/wrt_main_delegate.cc b/tizen/src/app/wrt_main_delegate.cc new file mode 100644 index 0000000..55eff65 --- /dev/null +++ b/tizen/src/app/wrt_main_delegate.cc @@ -0,0 +1,62 @@ +#include "tizen/src/app/wrt_main_delegate.h" + +#include "base/command_line.h" +#include "content/public/common/content_switches.h" +#include "efl/init.h" +#include "tizen/common/env_variables.h" +#include "tizen/common/application_data.h" + +namespace { + +const char* kBlockSingleProcess = "PWRT_BLOCK_SINGLE_PROCESS"; // set to ON to disable single process mode altogether + +} // namespace + +namespace tizen { + +WRTMainDelegate::WRTMainDelegate() {} + +WRTMainDelegate::~WRTMainDelegate() {} + +bool WRTMainDelegate::BasicStartupComplete(int* exit_code) { + auto command_line = base::CommandLine::ForCurrentProcess(); + auto process_type(command_line->GetSwitchValueASCII(switches::kProcessType)); + bool is_browser_process = process_type.empty(); + + if (is_browser_process) { + efl::AppendPortParams(*command_line); + command_line->AppendSwitch(switches::kEnableLogging); + + std::string block_single_process(getenv(kBlockSingleProcess)); + auto app_data = common::ApplicationDataManager::GetCurrentAppData(); + if (app_data && app_data->IsElectronApp()) { + block_single_process = "ON"; + } + if (block_single_process != "ON") { + LOG(INFO) << "will run in single process mode"; + tizen::is_single_process = true; + command_line->AppendSwitch(switches::kAllowUniversalAccessFromFiles); + command_line->AppendSwitch(switches::kNoZygote); + command_line->AppendSwitch(switches::kSingleProcess); + } else { + LOG(INFO) << "will run in non-single process mode"; + } + } + + command_line->AppendSwitch("enable-tizen-app-container"); + command_line->AppendSwitchASCII( + "injected-bundle-path", "/usr/lib/libxwalk_injected_bundle.so"); + + return AtomMainDelegate::BasicStartupComplete(exit_code); +} + +int WRTMainDelegate::RunProcess( + const std::string& process_type, + const content::MainFunctionParams& main_function_params) { + if (process_type.empty()) + return 0; + else + return AtomMainDelegate::RunProcess(process_type, main_function_params); +} + +} // namespace tizen diff --git a/tizen/src/app/wrt_main_delegate.h b/tizen/src/app/wrt_main_delegate.h new file mode 100644 index 0000000..b79c095 --- /dev/null +++ b/tizen/src/app/wrt_main_delegate.h @@ -0,0 +1,26 @@ +#ifndef APP_WRT_MAIN_DELEGATE_H_ +#define APP_WRT_MAIN_DELEGATE_H_ + +#include "atom/app/atom_main_delegate.h" + +namespace tizen { + +class WRTMainDelegate : public atom::AtomMainDelegate { + public: + WRTMainDelegate(); + ~WRTMainDelegate(); + + protected: + // content::ContentMainDelegate: + bool BasicStartupComplete(int* exit_code) override; + int RunProcess( + const std::string& process_type, + const content::MainFunctionParams& main_function_params) override; + + private: + DISALLOW_COPY_AND_ASSIGN(WRTMainDelegate); +}; + +} // namespace tizen + +#endif // APP_WRT_MAIN_DELEGATE_H_ diff --git a/tizen/src/browser/api/wrt_api_core.cc b/tizen/src/browser/api/wrt_api_core.cc index c171f64..5c87593 100644 --- a/tizen/src/browser/api/wrt_api_core.cc +++ b/tizen/src/browser/api/wrt_api_core.cc @@ -9,6 +9,7 @@ #include "native_mate/dictionary.h" #include "tizen/common/application_data.h" #include "tizen/common/command_line.h" +#include "tizen/src/browser/native_web_runtime.h" #include "tizen/src/browser/wrt_service.h" namespace tizen { @@ -20,10 +21,16 @@ WebRuntime* WebRuntime::instance_ = nullptr; WebRuntime::WebRuntime(v8::Isolate* isolate) { Init(isolate); instance_ = this; + NativeWebRuntime::GetInstance().AddObserver(this); } WebRuntime::~WebRuntime() { instance_ = nullptr; + NativeWebRuntime::GetInstance().RemoveObserver(this); +} + +void WebRuntime::OnStartApplication() { + Emit("start-app"); } std::string WebRuntime::AppID() const { @@ -82,7 +89,8 @@ bool WebRuntime::isTizenWebApp() const { } bool WebRuntime::isElectronLaunch() const { - return atom::Browser::Get()->is_electron_launch(); + auto app_data = common::ApplicationDataManager::GetCurrentAppData(); + return app_data->IsElectronApp(); } void WebRuntime::HideSplashScreen(int reason) { diff --git a/tizen/src/browser/api/wrt_api_core.h b/tizen/src/browser/api/wrt_api_core.h index 99eb3c0..c3940f5 100644 --- a/tizen/src/browser/api/wrt_api_core.h +++ b/tizen/src/browser/api/wrt_api_core.h @@ -3,12 +3,14 @@ #include "atom/browser/api/event_emitter.h" #include "native_mate/handle.h" +#include "tizen/src/browser/native_web_runtime_observer.h" namespace tizen { namespace api { -class WebRuntime : public mate::EventEmitter { +class WebRuntime : public mate::EventEmitter, + public NativeWebRuntimeObserver { public: static mate::Handle Create(v8::Isolate* isolate); @@ -21,6 +23,9 @@ class WebRuntime : public mate::EventEmitter { explicit WebRuntime(v8::Isolate* isolate); ~WebRuntime() override; + // NativeWebRuntimeObserver: + void OnStartApplication() override; + private: std::string AppID() const; std::string GetMessage() const; diff --git a/tizen/src/browser/native_web_runtime.cc b/tizen/src/browser/native_web_runtime.cc new file mode 100644 index 0000000..20c5413 --- /dev/null +++ b/tizen/src/browser/native_web_runtime.cc @@ -0,0 +1,56 @@ +#include "tizen/src/browser/native_web_runtime.h" + +#include "base/command_line.h" +#include "content/public/common/main_function_params.h" + +namespace tizen { + +NativeWebRuntime::NativeWebRuntime() { } + +NativeWebRuntime::~NativeWebRuntime() { + if (browser_main_runner_) { + browser_main_runner_->Shutdown(); + } + if (content_main_runner_) { + content_main_runner_->Shutdown(); + } +} + +// static +NativeWebRuntime& NativeWebRuntime::GetInstance() { + static NativeWebRuntime runtime; + return runtime; +} + +void NativeWebRuntime::InitializeMain(content::ContentMainParams* params) { + if (content_main_runner_) { + LOG(ERROR) << "Try to initialize multiple times."; + return; + } + + content_main_runner_ = std::unique_ptr( + content::ContentMainRunner::Create()); + browser_main_runner_ = std::unique_ptr( + content::BrowserMainRunner::Create()); + + int exit_code = content_main_runner_->Initialize(*params); + if (exit_code >= 0) { + LOG(FATAL) << "Fail to initialize content main runner"; + } + content_main_runner_->Run(); + + const base::CommandLine& command_line = + *base::CommandLine::ForCurrentProcess(); + content::MainFunctionParams main_params(command_line); + exit_code = browser_main_runner_->Initialize(main_params); + if (exit_code >= 0) { + LOG(FATAL) << "Fail to initialize browser main runner"; + } +} + +void NativeWebRuntime::StartApplication() { + for (auto& observer : observers_) + observer.OnStartApplication(); +} + +} // namespace diff --git a/tizen/src/browser/native_web_runtime.h b/tizen/src/browser/native_web_runtime.h new file mode 100644 index 0000000..c772593 --- /dev/null +++ b/tizen/src/browser/native_web_runtime.h @@ -0,0 +1,40 @@ +#ifndef BROWSER_NATIVE_WEB_RUNTIME_H_ +#define BROWSER_NATIVE_WEB_RUNTIME_H_ + +#include + +#include "base/observer_list.h" +#include "content/public/app/content_main_runner.h" +#include "content/public/browser/browser_main_runner.h" +#include "tizen/src/browser/native_web_runtime_observer.h" + +namespace tizen { + +class NativeWebRuntime { + public: + ~NativeWebRuntime(); + + static NativeWebRuntime& GetInstance(); + + void InitializeMain(content::ContentMainParams* params); + void StartApplication(); + + void AddObserver(NativeWebRuntimeObserver* obs) { + observers_.AddObserver(obs); + } + void RemoveObserver(NativeWebRuntimeObserver* obs) { + observers_.RemoveObserver(obs); + } + + private: + NativeWebRuntime(); + + std::unique_ptr content_main_runner_; + std::unique_ptr browser_main_runner_; + + base::ObserverList observers_; +}; + +} // namespace tizen + +#endif // BROWSER_NATIVE_WEB_RUNTIME_H_ diff --git a/tizen/src/browser/native_web_runtime_observer.h b/tizen/src/browser/native_web_runtime_observer.h new file mode 100644 index 0000000..8423b4f --- /dev/null +++ b/tizen/src/browser/native_web_runtime_observer.h @@ -0,0 +1,15 @@ +#ifndef BROWSER_NATIVE_WEB_RUNTIME_OBSERVER_H_ +#define BROWSER_NATIVE_WEB_RUNTIME_OBSERVER_H_ + +namespace tizen { + +class NativeWebRuntimeObserver { + public: + virtual ~NativeWebRuntimeObserver() {} + + virtual void OnStartApplication() = 0; +}; + +} // namespace tizen + +#endif // BROWSER_NATIVE_WEB_RUNTIME_OBSERVER_H_ diff --git a/tizen/src/wrt_main.cc b/tizen/src/wrt_main.cc index 32de242..38ccdfa 100644 --- a/tizen/src/wrt_main.cc +++ b/tizen/src/wrt_main.cc @@ -3,24 +3,22 @@ // found in the LICENSE file. #include "wrt_main.h" -#include "tizen/common/env_variables.h" #include -#include "atom/app/atom_main_delegate.h" // NOLINT -#include "content/public/app/content_main.h" -#include "atom/browser/atom_browser_main_parts.h" #include "atom/common/atom_command_line.h" -#include "base/at_exit.h" -#include "base/i18n/icu_util.h" - +#include "base/command_line.h" +#include "base/files/file_path.h" +#include "base/logging.h" +#include "content/public/app/content_main.h" +#include "content/public/common/content_switches.h" #include "efl/init.h" +#include "tizen/common/env_variables.h" +#include "tizen/src/app/wrt_main_delegate.h" +#include "tizen/src/browser/native_web_runtime.h" #if defined(OS_TIZEN) -#include - #include "atom/app/runtime.h" -#include "base/logging.h" #include "tizen/common/application_data.h" #include "tizen/common/command_line.h" #include "tizen/loader/prelauncher.h" @@ -29,39 +27,8 @@ namespace { -const char *kBlockSingleProcess = "PWRT_BLOCK_SINGLE_PROCESS"; // set to ON to disable single process mode altogether - -// Default command line flags for all profiles and platforms -const char* kDefaultCommandLineFlags[] = { - "allow-file-access-from-files", - "enable-tizen-app-container", - "allow-universal-access-from-files", - "single-process", - "no-sandbox", - "no-zygote", -}; - -const int kElectronArgsCount = 2; -const int kTizenWebappArgsCount = 6; - -bool isElectronWebApp() { - auto app_data = common::ApplicationDataManager::GetCurrentAppData(); - if (app_data) { - if (app_data->content_info()) { - std::string startUrl = app_data->content_info()->src(); - if (std::string::npos != startUrl.find(".json")) { - return true; - } - } - } - return false; -} - -bool IsBrowserProcess() { - auto command_line = base::CommandLine::ForCurrentProcess(); - std::string process_type = command_line->GetSwitchValueASCII("type"); - return process_type.empty(); -} +bool g_initialized_ = false; +tizen::WRTMainDelegate g_delegate; } // namespace @@ -71,114 +38,90 @@ bool IsBrowserProcess() { REFERENCE_MODULE(wrt); #undef REFERENCE_MODULE -#if defined(OS_TIZEN) -bool g_initialized_ = false; - -// For debug purpose only. -// TODO: To be removed later -bool hasTizenPackageID(int argc, const char* const* argv) { - if (argc > 3) { - if (0 == strncmp(argv[0], "/opt/usr/globalapps/", strlen("/opt/usr/globalapps/"))) { - return true; - } - if (0 == strncmp(argv[0], "/opt/usr/apps/", strlen("/opt/usr/apps/"))) { - return true; - } - } - return false; -} - int real_main(int argc, char* argv[]) { -#else -int main(int argc, char* argv[]) { -#endif for (int i = 0; i < argc; ++i) - LOG(ERROR) << "argv[" << i << "] : " << argv[i]; + LOG(INFO) << "argv[" << i << "] : " << argv[i]; if (!common::CommandLine::Init(argc, argv)) { common::CommandLine::Reset(); common::CommandLine::Init(argc, argv); } - if (!base::CommandLine::Init(argc, argv)) { - base::CommandLine::Reset(); + if (base::CommandLine::InitializedForCurrentProcess()) { + base::CommandLine::ForCurrentProcess()->SetProgram(base::FilePath(argv[0])); + } else { base::CommandLine::Init(argc, argv); } - std::unique_ptr runtime_; common::CommandLine* runtime_cmd = common::CommandLine::ForCurrentProcess(); std::string appid = runtime_cmd->GetAppIdFromCommandLine("/usr/bin/wrt"); - // load manifest - if (appid != "wrt") { // TODO: Any better way to distinguish? + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + bool is_browser_process = + command_line->GetSwitchValueASCII(switches::kProcessType).empty(); + + if (is_browser_process) { common::ApplicationDataManager::SetCurrentAppID(appid); + command_line->AppendSwitchASCII("widget-id", appid); } + if (!g_initialized_) { if (efl::Initialize(argc, const_cast(argv))) return 1; } - // Add params for EFL port - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - - int args_count = kElectronArgsCount; - if (IsBrowserProcess()) { - if (!getenv(kBlockSingleProcess) && !isElectronWebApp()) { - LOG(ERROR) << "will run in single process mode"; - tizen::is_single_process = true; - args_count = kTizenWebappArgsCount; - } else LOG(ERROR) << "will run in non-single process mode"; - } else LOG(ERROR) << "not a browser process"; - - static std::vector flags; - for (int i = 0; i < args_count; ++i) - command_line->AppendSwitch(const_cast(kDefaultCommandLineFlags[i])); - - efl::AppendPortParams(*command_line); - - atom::AtomMainDelegate delegate; - content::ContentMainParams params(&delegate); + content::ContentMainParams params(&g_delegate); params.argc = argc; params.argv = const_cast(argv); atom::AtomCommandLine::Init(argc, argv); -#if defined(OS_TIZEN) - if (hasTizenPackageID(argc,argv)) { // TODO: Check to be removed later - elm_init(argc, argv); - runtime_ = runtime::Runtime::MakeRuntime(¶ms); - return runtime_->Exec(); + + if (is_browser_process) { + auto app_data = common::ApplicationDataManager::GetCurrentAppData(); + if (tizen::is_single_process && app_data->IsElectronApp()) { + // FIXME: Need to find better way for electron app. + LOG(INFO) << "Run electron app in single process. Try restarting."; + execv(argv[0], argv); + LOG(FATAL) << "Fail to restart electron app"; + } + + if (!g_initialized_) { + tizen::NativeWebRuntime::GetInstance().InitializeMain(¶ms); + } + + std::unique_ptr runtime = runtime::Runtime::MakeRuntime(); + return runtime->Exec(argc, argv); } -#endif return content::ContentMain(params); } -#if defined(OS_TIZEN) __attribute__((visibility("default"))) int main(int argc, const char* argv[]) { - for (int i = 0; i < argc; ++i) - LOG(ERROR) << "argv[" << i << "] : " << argv[i]; if (strcmp(argv[0], "/usr/bin/wrt-loader") == 0) { - LOG(ERROR) << "run with wrt-loader"; - auto preload = [argc, argv](void) { + LOG(INFO) << "run with wrt-loader"; + for (int i = 0; i < argc; ++i) + LOG(INFO) << "argv[" << i << "] : " << argv[i]; + int no_argument_count = 1; + atom::AtomCommandLine::Init(no_argument_count, argv); + + auto preload = []() { g_initialized_ = true; - if (efl::Initialize(argc, const_cast(argv))) + const auto& argv = atom::AtomCommandLine::argv(); + std::vector arguments; + arguments.reserve(argv.size()); + for (auto& s : argv) + arguments.push_back(&s[0]); + if (efl::Initialize(arguments.size(), arguments.data())) return 1; - - atom::AtomMainDelegate delegate; - content::ContentMainParams params(&delegate); - params.argc = argc; - params.argv = const_cast(argv); - atom::AtomCommandLine::Init(argc, argv); - atom::AtomBrowserMainParts::SetNodeEnvironment(); + content::ContentMainParams params(&g_delegate); + tizen::NativeWebRuntime::GetInstance().InitializeMain(¶ms); tizen::PreloadManager::GetInstance()->CreateCacheComponent(); return 0; }; - auto did_launch = [](const std::string& app_path) { - }; + auto did_launch = [](const std::string& app_path) {}; auto prelaunch = runtime::PreLauncher::Prelaunch; return prelaunch(argc, const_cast(argv), preload, did_launch, real_main); } else { - LOG(ERROR) << "run without wrt-loader"; + LOG(INFO) << "run without wrt-loader"; return real_main(argc, const_cast(argv)); } } -#endif diff --git a/wrt.gyp b/wrt.gyp index 83132ca..e0a24b3 100644 --- a/wrt.gyp +++ b/wrt.gyp @@ -125,8 +125,13 @@ 'chromium_src/chrome/browser/extensions/global_shortcut_listener_ozone.cc', 'chromium_src/chrome/browser/extensions/global_shortcut_listener_ozone.h', 'chromium_src/chrome/browser/icon_loader_efllinux.cc', + 'tizen/src/app/wrt_main_delegate.cc', + 'tizen/src/app/wrt_main_delegate.h', 'tizen/src/browser/api/wrt_api_core.cc', 'tizen/src/browser/api/wrt_api_core.h', + 'tizen/src/browser/native_web_runtime.cc', + 'tizen/src/browser/native_web_runtime.h', + 'tizen/src/browser/native_web_runtime_observer.h', 'tizen/src/browser/wrt_ipc.cc', 'tizen/src/browser/wrt_ipc.h', 'tizen/src/browser/wrt_service.cc', diff --git a/wrt/src/runtime.js b/wrt/src/runtime.js index ae01bb3..1c13e82 100755 --- a/wrt/src/runtime.js +++ b/wrt/src/runtime.js @@ -56,8 +56,20 @@ class Runtime { }); app.on('will-finish-launching', function(event) { runtime_debug('will-finish-launching'); + }); + app.once('ready', function(event) { + runtime_debug('ready'); + _this.extensionManager = new ExtensionManager(EXTENSIONS_PATH); + if (!options.noExtensions) { + _this.extensionManager.build(); + } + _this.webApplication = new WebApplication(options); + }); + wrt.on('start-app', function() { + runtime_debug('start-app'); if (wrt.isElectronLaunch()) { console.log("Electron App launch"); + _this.webApplication = null; let filePath = wrt.getPath(); let pkgJson = require(filePath.substr(7, filePath.length - 12)); let mainJsPath = filePath.substr(7, filePath.length - 19) + @@ -65,18 +77,13 @@ class Runtime { const Module = require('module'); Module._load(mainJsPath, Module, true); - } - }); - app.on('ready', function(event) { - runtime_debug('ready'); - _this.extensionManager = new ExtensionManager(EXTENSIONS_PATH); - if (!options.noExtensions && wrt.appID !== 'NVPDzvckj9.RuntimeAddonSetting') { - _this.extensionManager.build(); + app.emit('ready'); + } else { + _this.webApplication.focusedWebWindow.setUrl(''); + if (wrt.appID !== 'NVPDzvckj9.RuntimeAddonSetting') { + _this.extensionManager.activateAll(app); + } } - if (wrt.isElectronLaunch()) { - return; - } - _this.webApplication = new WebApplication(options); }); } onPause(web_window_id) { diff --git a/wrt/src/web_application.js b/wrt/src/web_application.js index 101897f..7505bc1 100644 --- a/wrt/src/web_application.js +++ b/wrt/src/web_application.js @@ -59,6 +59,7 @@ class WebApplication { setupWebWindow() {} addWebWindow(webwindow) { this.webwindows.push(webwindow); + this.focusedWebWindow = webwindow; } removeWebWindow(webwindow) { var _ref; diff --git a/wrt/src/web_window.js b/wrt/src/web_window.js index cb1f8ee..d6d581e 100644 --- a/wrt/src/web_window.js +++ b/wrt/src/web_window.js @@ -119,10 +119,6 @@ class WebWindow { webwindow_debug('WebWindow : app-on-resume'); events.emit(WAS_EVENT.WEBAPPLICATION.RESUME, 'web_window', self.mainWindow.id); }); - this.mainWindow.on('app-on-appcontrol', function() { - webwindow_debug('WebWindow : app-on-appcontrol'); - self.setUrl(''); - }); this.mainWindow.webContents.on('crashed', function() { webwindow_debug('WebWindow : webContents crashed'); self.webApplication.exit(100); -- 2.7.4 From 2e83697aff70fde91e30670e02fe3247ad631d35 Mon Sep 17 00:00:00 2001 From: SangYong Park Date: Tue, 7 Aug 2018 13:30:40 +0900 Subject: [PATCH 16/16] Make build directory depending on profile . make build directory depending on profile . change build dependency (dbus-glib-1 -> dbus-1) . fix build warning Change-Id: I829394b076f187b51b9246ad7b47a3f631febf54 Signed-off-by: SangYong Park --- packaging/electron-efl.spec | 11 +++++++++-- script/build.py | 4 ++-- script/update.py | 2 -- tizen/extensions/renderer/xwalk_module_system.cc | 2 +- tizen/extensions/renderer/xwalk_v8tools_module.cc | 5 ++++- tizen/script/build | 12 ++++++++++-- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/packaging/electron-efl.spec b/packaging/electron-efl.spec index ea9690e..54ecad2 100755 --- a/packaging/electron-efl.spec +++ b/packaging/electron-efl.spec @@ -27,7 +27,7 @@ BuildRequires: pkgconfig(capi-system-system-settings) BuildRequires: pkgconfig(capi-system-info) BuildRequires: pkgconfig(chromium-efl) BuildRequires: pkgconfig(cynara-client) -BuildRequires: pkgconfig(dbus-glib-1) +BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(ecore) BuildRequires: pkgconfig(ecore-evas) @@ -74,10 +74,17 @@ cp %{SOURCE1001} . %define _icondir %TZ_SYS_RO_APP/%{_pkgid}/shared/res %define _pkgid org.tizen.%{name} %define _xmldir %TZ_SYS_RO_PACKAGES -%define _out out.tizen/out/D %define _resourcedir /opt/usr/home/owner/data/wrt %define extension_path %{_libdir}/tizen-extensions-crosswalk +%define _build_config D +%if "%{?outputdir}" != "" +%define _out %outputdir/out/%_build_config +export GYP_GENERATOR_OUTPUT=%outputdir +%else +%define _out out.tizen/out/%_build_config +%endif + DEFINE_ARGS=" libchromiumcontent_component=1 use_efl=1 diff --git a/script/build.py b/script/build.py index 80f266d..05dff2f 100755 --- a/script/build.py +++ b/script/build.py @@ -27,8 +27,8 @@ def main(): args = parse_args() for config in args.configuration: - if PLATFORM == 'tizen': - build_path = os.path.join('out.tizen', 'out', config[0]) + if PLATFORM == 'tizen' and os.environ.has_key('GYP_GENERATOR_OUTPUT'): + build_path = os.path.join(os.environ.get('GYP_GENERATOR_OUTPUT'), 'out', config[0]) else: build_path = os.path.join('out', config[0]) ret = subprocess.call([ninja, '-C', build_path, args.target]) diff --git a/script/update.py b/script/update.py index 08bdf58..a82822a 100755 --- a/script/update.py +++ b/script/update.py @@ -61,8 +61,6 @@ def run_gyp(target_arch, component): env['GYP_CROSSCOMPILE'] = '1' elif PLATFORM == 'win32': env['GYP_MSVS_VERSION'] = '2015' - elif PLATFORM == 'tizen': - env['GYP_GENERATOR_OUTPUT'] = os.path.join(SOURCE_ROOT, 'out.tizen') python = sys.executable if sys.platform == 'cygwin': # Force using win32 python on cygwin. diff --git a/tizen/extensions/renderer/xwalk_module_system.cc b/tizen/extensions/renderer/xwalk_module_system.cc index 2218188..0cba12f 100644 --- a/tizen/extensions/renderer/xwalk_module_system.cc +++ b/tizen/extensions/renderer/xwalk_module_system.cc @@ -517,7 +517,7 @@ void XWalkModuleSystem::EnsureExtensionNamespaceIsReadOnly( v8::Handle v8_extension_name( v8::String::NewFromUtf8(context->GetIsolate(), basename.c_str())); value.As()->ForceSet( - v8_extension_name, value.As()->Get(v8_extension_name), + context, v8_extension_name, value.As()->Get(v8_extension_name), v8::ReadOnly); } diff --git a/tizen/extensions/renderer/xwalk_v8tools_module.cc b/tizen/extensions/renderer/xwalk_v8tools_module.cc index 4fcad37..1d8ce93 100644 --- a/tizen/extensions/renderer/xwalk_v8tools_module.cc +++ b/tizen/extensions/renderer/xwalk_v8tools_module.cc @@ -18,7 +18,10 @@ void ForceSetPropertyCallback( if (info.Length() != 3 || !info[0]->IsObject() || !info[1]->IsString()) { return; } - info[0].As()->ForceSet(info[1], info[2]); + v8::Isolate* isolate = info.GetIsolate(); + v8::HandleScope handle_scope(isolate); + v8::Local context = isolate->GetCurrentContext(); + info[0].As()->ForceSet(context, info[1], info[2]); } // ================ diff --git a/tizen/script/build b/tizen/script/build index 22091bd..8ea059c 100755 --- a/tizen/script/build +++ b/tizen/script/build @@ -122,6 +122,7 @@ def build_gbs(profile, force_bootstrap, verbose): print 'Build : profile=' + profile + ' architecture=' + arch command = ['gbs', '--conf', os.path.join(SCRIPT_PATH, 'gbs.conf'), 'build', '-P', profile, '--include-all', '-A', arch, '--incremental'] + command.extend(['--define=outputdir ' + get_output_dir(profile)]) if not force_bootstrap and not need_bootstrap(profile): command.extend(['--define=skipbootstrap 1']) return True if subprocess.call(command) == 0 else False @@ -131,15 +132,22 @@ def find_architecture(profile): return 'armv7l' values = profile.split('_') arch = values[-1] if values[-1] != 'mirror' else values[-2] - arch = arch if arch != 'ia32' else 'i586' + if arch == 'standard': + return 'armv7l' + elif arch == 'ia32': + return 'i586' return arch +def get_output_dir(profile): + values = profile.split('_') + return 'out.' + '_'.join(values if values[-1] != 'mirror' else values[:-1]) + def need_bootstrap(profile): # TODO: condition improvement is necessary if profile == 'desktop': if os.path.isdir(os.path.join(ROOT_PATH, 'out')): return False - elif os.path.isdir(os.path.join(ROOT_PATH, 'out.tizen', 'out')): + elif os.path.isdir(os.path.join(ROOT_PATH, get_output_dir(profile), 'out')): return False return True -- 2.7.4