From 9c8b51bd060754e2d0151f4bedd3b554114f6339 Mon Sep 17 00:00:00 2001 From: "yh106.jung" Date: Wed, 1 Feb 2017 13:40:18 +0900 Subject: [PATCH 01/16] [M85 Migration][Callback] Implement new smart callback, 'did,not,allow,script' This patch makes new smart callback that is called when javascript is disabled while page is loading. References: https://review.tizen.org/gerrit/c/platform/framework/web/chromium-efl/+/219752 Change-Id: Ibcd48d4f7332c81b223cf58a29d6194673584ba1 Signed-off-by: yh106.jung --- tizen_src/ewk/efl_integration/BUILD.gn | 2 ++ .../browser/web_view_browser_message_filter.cc | 7 +++++ .../efl_integration/common/render_messages_ewk.h | 10 ++++--- .../ewk/efl_integration/eweb_view_callbacks.h | 5 ++-- .../renderer/content_renderer_client_efl.cc | 2 ++ .../renderer/content_settings_client_efl.cc | 28 +++++++++++++++++++ .../renderer/content_settings_client_efl.h | 31 ++++++++++++++++++++++ 7 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 tizen_src/ewk/efl_integration/renderer/content_settings_client_efl.cc create mode 100644 tizen_src/ewk/efl_integration/renderer/content_settings_client_efl.h diff --git a/tizen_src/ewk/efl_integration/BUILD.gn b/tizen_src/ewk/efl_integration/BUILD.gn index 4b8ea8b..669b529 100644 --- a/tizen_src/ewk/efl_integration/BUILD.gn +++ b/tizen_src/ewk/efl_integration/BUILD.gn @@ -516,6 +516,8 @@ shared_library("chromium-ewk") { "public/ewk_window_features_internal.h", "renderer/content_renderer_client_efl.cc", "renderer/content_renderer_client_efl.h", + "renderer/content_settings_client_efl.cc", + "renderer/content_settings_client_efl.h", "renderer/editorclient_agent.cc", "renderer/editorclient_agent.h", "renderer/print_web_view_helper_efl.cc", diff --git a/tizen_src/ewk/efl_integration/browser/web_view_browser_message_filter.cc b/tizen_src/ewk/efl_integration/browser/web_view_browser_message_filter.cc index 55f50d8..3714144 100644 --- a/tizen_src/ewk/efl_integration/browser/web_view_browser_message_filter.cc +++ b/tizen_src/ewk/efl_integration/browser/web_view_browser_message_filter.cc @@ -158,6 +158,11 @@ class WebViewBrowserMessageFilterPrivate currentNodeIndex, prevState, nextState); } + void OnDidNotAllowScript() { + if (web_view_) + web_view_->SmartCallback().call(); + } + void Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) override { DCHECK_EQ(content::NOTIFICATION_WEB_CONTENTS_DESTROYED, type); @@ -233,6 +238,8 @@ bool WebViewBrowserMessageFilter::OnMessageReceived( #endif IPC_MESSAGE_FORWARD(EwkHostMsg_RequestSelectCollectionInformationUpdateACK, private_, WebViewBrowserMessageFilterPrivate::OnRequestSelectCollectionInformationUpdateACK) + IPC_MESSAGE_FORWARD(EwkHostMsg_DidNotAllowScript, private_, + WebViewBrowserMessageFilterPrivate::OnDidNotAllowScript) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() diff --git a/tizen_src/ewk/efl_integration/common/render_messages_ewk.h b/tizen_src/ewk/efl_integration/common/render_messages_ewk.h index 209a955..2e73e7e 100644 --- a/tizen_src/ewk/efl_integration/common/render_messages_ewk.h +++ b/tizen_src/ewk/efl_integration/common/render_messages_ewk.h @@ -132,14 +132,14 @@ IPC_MESSAGE_CONTROL2(WrtMsg_ParseUrlResponse, GURL) // result: url IPC_MESSAGE_CONTROL1(WrtMsg_SendWrtMessage, - Ewk_Wrt_Message_Data /* data */); + Ewk_Wrt_Message_Data /* data */) IPC_SYNC_MESSAGE_ROUTED1_1(EwkHostMsg_WrtSyncMessage, Ewk_Wrt_Message_Data /* data */, - std::string /*result*/); + std::string /*result*/) IPC_MESSAGE_ROUTED1(EwkHostMsg_WrtMessage, - Ewk_Wrt_Message_Data /* data */); + Ewk_Wrt_Message_Data /* data */) IPC_MESSAGE_CONTROL2(EwkViewHostMsg_HitTestReply, int, /* render_view_id */ @@ -281,9 +281,11 @@ IPC_MESSAGE_ROUTED1(EwkFrameMsg_LoadNotFoundErrorPage, IPC_MESSAGE_ROUTED1(EwkFrameMsg_MoveToNextOrPreviousSelectElement, bool /* next */) -IPC_MESSAGE_ROUTED0(EwkFrameMsg_RequestSelectCollectionInformation); +IPC_MESSAGE_ROUTED0(EwkFrameMsg_RequestSelectCollectionInformation) IPC_MESSAGE_ROUTED4(EwkHostMsg_RequestSelectCollectionInformationUpdateACK, int /* formElementCount */, int /* currentNodeIndex */, bool /* prevState */, bool /* nextState */) + +IPC_MESSAGE_ROUTED0(EwkHostMsg_DidNotAllowScript) diff --git a/tizen_src/ewk/efl_integration/eweb_view_callbacks.h b/tizen_src/ewk/efl_integration/eweb_view_callbacks.h index 8ab6b1b..e23a4bd 100644 --- a/tizen_src/ewk/efl_integration/eweb_view_callbacks.h +++ b/tizen_src/ewk/efl_integration/eweb_view_callbacks.h @@ -136,7 +136,8 @@ enum CallbackType { #if defined(OS_TIZEN) NewWindowNavigationPolicyDecision, #endif // OS_TIZEN - URIChanged + URIChanged, + DidNotAllowScript }; template @@ -284,7 +285,7 @@ DECLARE_EWK_VIEW_CALLBACK(MenuBarVisible, "menubar,visible", bool*); DECLARE_EWK_VIEW_CALLBACK(StatusBarVisible, "statusbar,visible", bool*); DECLARE_EWK_VIEW_CALLBACK(ToolbarVisible, "toolbar,visible", bool*); DECLARE_EWK_VIEW_CALLBACK(WindowResizable, "window,resizable", bool*); - +DECLARE_EWK_VIEW_CALLBACK(DidNotAllowScript, "did,not,allow,script", void); } #endif diff --git a/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.cc b/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.cc index 6baa3cd..106f19a 100644 --- a/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.cc +++ b/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.cc @@ -20,6 +20,7 @@ #include "content/public/renderer/render_view.h" #include "content/renderer/loader/request_extra_data.h" #include "content/renderer/render_view_impl.h" +#include "renderer/content_settings_client_efl.h" #include "renderer/editorclient_agent.h" #include "renderer/plugins/plugin_placeholder_efl.h" #include "renderer/render_frame_observer_efl.h" @@ -129,6 +130,7 @@ void ContentRendererClientEfl::RenderThreadStarted() { void ContentRendererClientEfl::RenderFrameCreated(content::RenderFrame* render_frame) { new content::RenderFrameObserverEfl(render_frame); + new content::ContentSettingsClientEfl(render_frame); #if defined(TIZEN_AUTOFILL_SUPPORT) PasswordAutofillAgent* password_autofill_agent = diff --git a/tizen_src/ewk/efl_integration/renderer/content_settings_client_efl.cc b/tizen_src/ewk/efl_integration/renderer/content_settings_client_efl.cc new file mode 100644 index 0000000..244f45d --- /dev/null +++ b/tizen_src/ewk/efl_integration/renderer/content_settings_client_efl.cc @@ -0,0 +1,28 @@ +// Copyright 2016 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "renderer/content_settings_client_efl.h" + +#include "common/render_messages_ewk.h" +#include "content/public/renderer/render_frame.h" +#include "third_party/blink/public/web/web_local_frame.h" + +namespace content { + +ContentSettingsClientEfl::ContentSettingsClientEfl(RenderFrame* render_frame) + : RenderFrameObserver(render_frame) { + render_frame->GetWebFrame()->SetContentSettingsClient(this); +} + +ContentSettingsClientEfl::~ContentSettingsClientEfl() {} + +void ContentSettingsClientEfl::DidNotAllowScript() { + Send(new EwkHostMsg_DidNotAllowScript(routing_id())); +} + +void ContentSettingsClientEfl::OnDestruct() { + delete this; +} + +} // namespace content diff --git a/tizen_src/ewk/efl_integration/renderer/content_settings_client_efl.h b/tizen_src/ewk/efl_integration/renderer/content_settings_client_efl.h new file mode 100644 index 0000000..49fb42e --- /dev/null +++ b/tizen_src/ewk/efl_integration/renderer/content_settings_client_efl.h @@ -0,0 +1,31 @@ +// Copyright 2016 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_SETTINGS_CLIENT_EFL_H_ +#define CONTENT_SETTINGS_CLIENT_EFL_H_ + +#include "content/public/renderer/render_frame_observer.h" +#include "third_party/blink/public/platform/web_content_settings_client.h" + +namespace content { + +class ContentSettingsClientEfl : public RenderFrameObserver, + public blink::WebContentSettingsClient { + public: + explicit ContentSettingsClientEfl(RenderFrame* render_view); + ~ContentSettingsClientEfl() override; + + // content::RenderFrameObserver implementation. + void OnDestruct() override; + + // blink::WebContentSettingsClient implementation. + void DidNotAllowScript() override; + + private: + DISALLOW_COPY_AND_ASSIGN(ContentSettingsClientEfl); +}; + +} // namespace content + +#endif // CONTENT_SETTINGS_CLIENT_EFL_H -- 2.7.4 From 3cd85ae1241949a5227906fad79a5ac204adb185 Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Tue, 10 Dec 2019 11:12:48 +0530 Subject: [PATCH 02/16] [M85 Migration] Ensure ProduceTexture is executed before ConsumeTexture Black patches are seen occasionally while navigating back and forth between pages. This is a sync issue where ConsumeTexture gets executed before ProduceTexture's execution is completed. To fix this issue, we add glFlush and glError before renderer submits a frame to the browser. This will ensure that execution of ProduceTexture is completed before ConsumeTexture is called. Reference: https://review.tizen.org/gerrit/c/197968/ Change-Id: I6882269588d257da3c455c2aa575b43c26e1d958 Signed-off-by: Chandan Padhi Signed-off-by: uzair --- cc/mojo_embedder/async_layer_tree_frame_sink.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cc/mojo_embedder/async_layer_tree_frame_sink.cc b/cc/mojo_embedder/async_layer_tree_frame_sink.cc index b534bbb..be439af 100644 --- a/cc/mojo_embedder/async_layer_tree_frame_sink.cc +++ b/cc/mojo_embedder/async_layer_tree_frame_sink.cc @@ -19,6 +19,10 @@ #include "components/viz/common/hit_test/hit_test_region_list.h" #include "components/viz/common/quads/compositor_frame.h" +#if defined(USE_EFL) +#include "gpu/command_buffer/client/gles2_interface.h" +#endif + namespace { base::HistogramBase* GetHistogramNamed(const char* histogram_name_format, @@ -246,6 +250,13 @@ void AsyncLayerTreeFrameSink::SubmitCompositorFrame( TRACE_EVENT_FLAG_FLOW_OUT, "step", "SubmitHitTestData"); +#if defined(USE_EFL) + if (auto* compositor_context_provider = context_provider()) { + compositor_context_provider->ContextGL()->Flush(); + compositor_context_provider->ContextGL()->GetError(); + } +#endif + compositor_frame_sink_ptr_->SubmitCompositorFrame( local_surface_id_, std::move(frame), std::move(hit_test_region_list), 0); } -- 2.7.4 From d20a7e4b0dd1eafd050c58c19b4f5f0f3f9508cc Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Fri, 9 Oct 2020 10:11:18 +0530 Subject: [PATCH 03/16] [M85 Dev] Fix crashes during page load/navigation and webview shutdown This commit does the following to fix the crashes. 1. Creates viz::HostFrameSinkManager and viz::FrameSinkManagerImpl 2. Sets up a connection between viz::HostFrameSinkManager and viz::FrameSinkManagerImpl without using Mojo 3. Makes RWHVEfl a viz::HostFrameSinkClient and registers its viz::FrameSinkId Reference: https://review.tizen.org/gerrit/232406/ Change-Id: I6c69ea29a151186f71c55b08818c4036db3c0a4d Signed-off-by: Chandan Padhi --- content/browser/browser_main_loop.cc | 16 ++++++++++++++++ content/browser/browser_main_loop.h | 12 ++++++++++++ content/browser/compositor/surface_utils.cc | 6 +++++- .../browser/renderer_host/render_widget_host_view_efl.cc | 15 +++++++++++++-- .../browser/renderer_host/render_widget_host_view_efl.h | 8 ++++++++ 5 files changed, 54 insertions(+), 3 deletions(-) diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc index 64a5e6c..a82469d 100644 --- a/content/browser/browser_main_loop.cc +++ b/content/browser/browser_main_loop.cc @@ -240,6 +240,11 @@ #include "mojo/public/cpp/bindings/lib/test_random_mojo_delays.h" #endif +#if defined(USE_EFL) +#include "components/viz/service/display_embedder/server_shared_bitmap_manager.h" +#include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" +#endif + // One of the linux specific headers defines this as a macro. #ifdef DestroyAll #undef DestroyAll @@ -1069,6 +1074,9 @@ void BrowserMainLoop::ShutdownThreadsAndCleanUp() { #if !defined(OS_ANDROID) host_frame_sink_manager_.reset(); +#endif + +#if !defined(OS_ANDROID) && !defined(USE_EFL) compositing_mode_reporter_impl_.reset(); #endif @@ -1220,7 +1228,15 @@ int BrowserMainLoop::BrowserThreadsStarted() { always_uses_gpu = ShouldStartGpuProcessOnBrowserStartup(); BrowserGpuChannelHostFactory::Initialize(established_gpu_channel); #elif defined(USE_EFL) + shared_bitmap_manager_ = std::make_unique(); + frame_sink_manager_ = + std::make_unique(shared_bitmap_manager_.get()); + host_frame_sink_manager_ = std::make_unique(); BrowserGpuChannelHostFactory::Initialize(established_gpu_channel); + + // Directly connect without using Mojo. + frame_sink_manager_->SetLocalClient(host_frame_sink_manager_.get()); + host_frame_sink_manager_->SetLocalManager(frame_sink_manager_.get()); #else established_gpu_channel = true; if (parsed_command_line_.HasSwitch(switches::kDisableGpu) || diff --git a/content/browser/browser_main_loop.h b/content/browser/browser_main_loop.h index 2016b1f..9cc59d6 100644 --- a/content/browser/browser_main_loop.h +++ b/content/browser/browser_main_loop.h @@ -76,6 +76,10 @@ class NetworkChangeNotifier; namespace viz { class CompositingModeReporterImpl; class HostFrameSinkManager; +#if defined(USE_EFL) +class FrameSinkManagerImpl; +class ServerSharedBitmapManager; +#endif } // namespace viz namespace content { @@ -388,9 +392,17 @@ class CONTENT_EXPORT BrowserMainLoop { scoped_refptr save_file_manager_; std::unique_ptr tracing_controller_; scoped_refptr responsiveness_watcher_; + +#if defined(USE_EFL) + std::unique_ptr shared_bitmap_manager_; + std::unique_ptr frame_sink_manager_; +#endif + #if !defined(OS_ANDROID) std::unique_ptr host_frame_sink_manager_; +#endif +#if !defined(OS_ANDROID) && !defined(USE_EFL) // Reports on the compositing mode in the system for clients to submit // resources of the right type. This is null if the display compositor // is not in this process. diff --git a/content/browser/compositor/surface_utils.cc b/content/browser/compositor/surface_utils.cc index e3a2fdd..23c41d0 100644 --- a/content/browser/compositor/surface_utils.cc +++ b/content/browser/compositor/surface_utils.cc @@ -14,6 +14,10 @@ #include "ui/compositor/compositor.h" // nogncheck #endif +#if defined(USE_EFL) +#include "content/browser/browser_main_loop.h" +#endif + namespace content { viz::FrameSinkId AllocateFrameSinkId() { @@ -31,7 +35,7 @@ viz::HostFrameSinkManager* GetHostFrameSinkManager() { #if defined(OS_ANDROID) return CompositorDependenciesAndroid::Get().host_frame_sink_manager(); #elif defined(USE_EFL) - return nullptr; + return BrowserMainLoop::GetInstance()->host_frame_sink_manager(); #else ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); if (!factory) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc index c73a052..499ff13 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc @@ -21,6 +21,8 @@ #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" +#include "components/viz/host/host_frame_sink_manager.h" +#include "content/browser/compositor/surface_utils.h" #include "content/browser/renderer_host/disambiguation_popup_efl.h" #include "content/browser/renderer_host/display_util.h" #include "content/browser/renderer_host/edge_effect.h" @@ -133,6 +135,7 @@ RenderWidgetHostViewEfl::RenderWidgetHostViewEfl(RenderWidgetHost* widget_host, device_scale_factor_(1.0f), magnifier_(false), is_loading_(false), + frame_sink_id_(host()->GetFrameSinkId()), gesture_recognizer_(std::make_unique()), current_orientation_(0), evas_gl_(NULL), @@ -155,7 +158,7 @@ RenderWidgetHostViewEfl::RenderWidgetHostViewEfl(RenderWidgetHost* widget_host, device_scale_factor_ = display::Screen::GetScreen()->GetPrimaryDisplay().device_scale_factor(); - host_->SetView(this); + host()->SetView(this); static bool scale_factor_initialized = false; if (!scale_factor_initialized) { @@ -167,6 +170,9 @@ RenderWidgetHostViewEfl::RenderWidgetHostViewEfl(RenderWidgetHost* widget_host, } gesture_recognizer_->AddGestureEventHelper(this); + + GetHostFrameSinkManager()->RegisterFrameSinkId( + frame_sink_id_, this, viz::ReportFirstSurfaceActivation::kNo); } void RenderWidgetHostViewEfl::InitAsChild(gfx::NativeView /* parent_view */) { @@ -487,6 +493,11 @@ bool RenderWidgetHostViewEfl::OnMessageReceived(const IPC::Message& message) { return handled; } +void RenderWidgetHostViewEfl::OnFirstSurfaceActivation( + const viz::SurfaceInfo& surface_info) {} + +void RenderWidgetHostViewEfl::OnFrameTokenChanged(uint32_t frame_token) {} + bool RenderWidgetHostViewEfl::Send(IPC::Message* message) { return host_->Send(message); } @@ -583,7 +594,7 @@ void RenderWidgetHostViewEfl::EnsureSurfaceSynchronizedForWebTest() { } const viz::FrameSinkId& RenderWidgetHostViewEfl::GetFrameSinkId() const { - return viz::FrameSinkId(); + return frame_sink_id_; } const viz::LocalSurfaceIdAllocation& diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.h b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.h index 440d201..aaba4cf 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.h +++ b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.h @@ -17,6 +17,7 @@ #include "components/viz/common/frame_sinks/copy_output_result.h" #include "components/viz/common/quads/compositor_frame.h" #include "components/viz/common/resources/single_release_callback.h" +#include "components/viz/host/host_frame_sink_client.h" #include "content/browser/accessibility/browser_accessibility_manager.h" #include "content/browser/compositor/evasgl_delegated_frame_host.h" #include "content/browser/renderer_host/evas_event_handler.h" @@ -76,6 +77,7 @@ class CONTENT_EXPORT RenderWidgetHostViewEfl public ui::GestureConsumer, public ui::GestureEventHelper, public base::SupportsWeakPtr, + public viz::HostFrameSinkClient, public IPC::Sender { public: explicit RenderWidgetHostViewEfl(RenderWidgetHost*, @@ -174,6 +176,10 @@ class CONTENT_EXPORT RenderWidgetHostViewEfl void DispatchGestureEvent(GestureConsumer* raw_input_consumer, ui::GestureEvent*) override; + // viz::HostFrameSinkClient implementation. + void OnFirstSurfaceActivation(const viz::SurfaceInfo& surface_info) override; + void OnFrameTokenChanged(uint32_t frame_token) override; + // IPC::Sender implementation: bool Send(IPC::Message*) override; @@ -324,6 +330,8 @@ class CONTENT_EXPORT RenderWidgetHostViewEfl scoped_refptr evas_event_handler_; + const viz::FrameSinkId frame_sink_id_; + // Stores the current state of the active pointers targeting this // object. ui::MotionEventAura pointer_state_; -- 2.7.4 From 1b7ed769999b7bbf5c39e9d8b5328d28ca85fb76 Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Fri, 16 Oct 2020 17:07:20 +0530 Subject: [PATCH 04/16] [M85 Migration] Add an evas gl option for rotation Adding EVAS_GL_OPTIONS_CLIENT_SIDE_ROTATION would enforce direct rendering even if the canvas is rotated. In that case, it is the application's role to rotate the contents of the Evas_GL view. Reference: https://review.tizen.org/gerrit/220869 Change-Id: I3b04548919db3a4f8a23cca9a5924e083aad30bb Signed-off-by: Chandan Padhi --- .../content/browser/renderer_host/render_widget_host_view_efl.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc index 499ff13..b882476 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc @@ -418,7 +418,7 @@ void RenderWidgetHostViewEfl::Init_EvasGL(int width, int height) { evas_gl_config_ = evas_gl_config_new(); evas_gl_config_->options_bits = (Evas_GL_Options_Bits)( EVAS_GL_OPTIONS_DIRECT | EVAS_GL_OPTIONS_DIRECT_MEMORY_OPTIMIZE | - EVAS_GL_OPTIONS_DIRECT_OVERRIDE); + EVAS_GL_OPTIONS_DIRECT_OVERRIDE | EVAS_GL_OPTIONS_CLIENT_SIDE_ROTATION); evas_gl_config_->color_format = EVAS_GL_RGBA_8888; evas_gl_config_->depth_bits = EVAS_GL_DEPTH_BIT_24; evas_gl_config_->stencil_bits = EVAS_GL_STENCIL_BIT_8; -- 2.7.4 From 6bf1d33f9ec77b47b0b9b76805ff231c8619d0d3 Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Fri, 16 Oct 2020 16:43:33 +0530 Subject: [PATCH 05/16] [M85 Migration][Rendering] Force gpu acceleration Chromium-efl port does not support s/w mode. So we need to set h/w mode before creating elm_window. To do this, make constructor function which is called at library loading time and set "ELM_ACCEL=hw" here. If not, native app which does not call elm_config_accel_preference_set() function will fail to execute. Reference: https://review.tizen.org/gerrit/220875/ Change-Id: I0f7bb1b53b95dcd5390ca1b4c8b578ac67a6afbf Signed-off-by: Chandan Padhi (cherry picked from commit af5cbc2f38633fbe818fd6421e2fbe5525076970) --- tizen_src/ewk/efl_integration/public/ewk_main.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tizen_src/ewk/efl_integration/public/ewk_main.cc b/tizen_src/ewk/efl_integration/public/ewk_main.cc index e20617b..bb61717 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_main.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_main.cc @@ -45,6 +45,7 @@ static int _ewkInitCount = 0; //private function declaration here static void _ewk_init_web_engine(void); static void _ewk_shutdown_web_engine(void); +static void _ewk_force_acceleration() __attribute__((constructor)); extern std::string g_homeDirectory; @@ -224,3 +225,13 @@ void _ewk_shutdown_web_engine(void) EwkGlobalData::Delete(); } +void _ewk_force_acceleration() +{ + // Chromium-efl port does not support s/w mode. So we need to set h/w mode + // before creating elm_window. To do this, make constructor function which is + // called at library loading time and set "ELM_ACCEL=hw" here. If not, native + // app which does not call elm_config_accel_preference_set() function will + // fail to execute. + setenv("ELM_ACCEL", "hw", 1); +} + -- 2.7.4 From a89a6f74df4b13cd292f31f94ffccdc701be8055 Mon Sep 17 00:00:00 2001 From: "suyambu.rm" Date: Fri, 23 Oct 2020 00:31:34 +0530 Subject: [PATCH 06/16] [M85 Migration] Refactor ScreenEfl. Added features (AddObserver, RemoveObserver and NotifyDevice) in DeviceDisplayInfoEflImpl. References: https://review.tizen.org/gerrit/223074 Change-Id: Ifdf1c7d4b05259c4933af0731122aba455471716 Signed-off-by: ayushi.arya Signed-off-by: suyambu.rm (cherry picked from commit 1961110af787ad4b73eb7a99e859962933ef47b7) --- .../ui/display/device_display_info_efl.cc | 40 ++++++++++++++++++++-- .../ui/display/device_display_info_efl.h | 5 +++ .../ui/display/device_display_info_observer_efl.h | 22 ++++++++++++ tizen_src/chromium_impl/ui/display/screen_efl.cc | 29 ++++++++++++---- tizen_src/chromium_impl/ui/ui_efl.gni | 1 + 5 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h diff --git a/tizen_src/chromium_impl/ui/display/device_display_info_efl.cc b/tizen_src/chromium_impl/ui/display/device_display_info_efl.cc index 22846cf..5527da6 100644 --- a/tizen_src/chromium_impl/ui/display/device_display_info_efl.cc +++ b/tizen_src/chromium_impl/ui/display/device_display_info_efl.cc @@ -5,7 +5,9 @@ #include "ui/display/device_display_info_efl.h" #include "base/logging.h" +#include "base/observer_list.h" #include "tizen/system_info.h" +#include "ui/display/device_display_info_observer_efl.h" namespace display { @@ -67,9 +69,12 @@ class DISPLAY_EXPORT DeviceDisplayInfoEflImpl { int GetDisplayHeight() const; double GetDIPScale() const; int GetRotationDegrees() const; + void AddObserver(DeviceDisplayInfoObserverEfl* observer); + void RemoveObserver(DeviceDisplayInfoObserverEfl* observer); private: DeviceDisplayInfoEflImpl(); + void NotifyDeviceDisplayInfoChanged(); friend struct base::DefaultSingletonTraits; @@ -80,6 +85,7 @@ class DISPLAY_EXPORT DeviceDisplayInfoEflImpl { int display_height_; double dip_scale_; int rotation_degrees_; + base::ObserverList::Unchecked observer_list_; DISALLOW_COPY_AND_ASSIGN(DeviceDisplayInfoEflImpl); }; @@ -107,11 +113,17 @@ void DeviceDisplayInfoEflImpl::Update(int display_width, int display_height, rotation_degrees_ = rotation_degrees; DCHECK_NE(kInvalidRotationDegrees, rotation_degrees_); } + + NotifyDeviceDisplayInfoChanged(); } void DeviceDisplayInfoEflImpl::SetRotationDegrees(int rotation_degrees) { - base::AutoLock autolock(rotation_accessor_); - rotation_degrees_ = rotation_degrees; + { + base::AutoLock autolock(rotation_accessor_); + rotation_degrees_ = rotation_degrees; + } + + NotifyDeviceDisplayInfoChanged(); } int DeviceDisplayInfoEflImpl::GetDisplayWidth() const { @@ -138,12 +150,27 @@ int DeviceDisplayInfoEflImpl::GetRotationDegrees() const { return rotation_degrees_; } +void DeviceDisplayInfoEflImpl::AddObserver( + DeviceDisplayInfoObserverEfl* observer) { + observer_list_.AddObserver(observer); +} + +void DeviceDisplayInfoEflImpl::RemoveObserver( + DeviceDisplayInfoObserverEfl* observer) { + observer_list_.RemoveObserver(observer); +} + DeviceDisplayInfoEflImpl::DeviceDisplayInfoEflImpl() : display_width_(0), display_height_(0), dip_scale_(1.0), rotation_degrees_(kInvalidRotationDegrees) {} +void DeviceDisplayInfoEflImpl::NotifyDeviceDisplayInfoChanged() { + for (auto& observer : observer_list_) + observer.OnDeviceDisplayInfoChanged(); +} + // DeviceDisplayInfoEfl DeviceDisplayInfoEfl::DeviceDisplayInfoEfl() { DCHECK(DeviceDisplayInfoEflImpl::GetInstance()); @@ -188,5 +215,14 @@ int DeviceDisplayInfoEfl::GetRotationDegrees() const { return DeviceDisplayInfoEflImpl::GetInstance()->GetRotationDegrees(); } +void DeviceDisplayInfoEfl::AddObserver(DeviceDisplayInfoObserverEfl* observer) { + DeviceDisplayInfoEflImpl::GetInstance()->AddObserver(observer); +} + +void DeviceDisplayInfoEfl::RemoveObserver( + DeviceDisplayInfoObserverEfl* observer) { + DeviceDisplayInfoEflImpl::GetInstance()->RemoveObserver(observer); +} + } // namespace display diff --git a/tizen_src/chromium_impl/ui/display/device_display_info_efl.h b/tizen_src/chromium_impl/ui/display/device_display_info_efl.h index 43d4ac0..2c3dd9a 100644 --- a/tizen_src/chromium_impl/ui/display/device_display_info_efl.h +++ b/tizen_src/chromium_impl/ui/display/device_display_info_efl.h @@ -11,6 +11,8 @@ namespace display { +class DeviceDisplayInfoObserverEfl; + // Facilitates access to device information in browser or renderer. class DISPLAY_EXPORT DeviceDisplayInfoEfl { public: @@ -40,6 +42,9 @@ class DISPLAY_EXPORT DeviceDisplayInfoEfl { // values are one of { 0, 90, 180, 270 }. int GetRotationDegrees() const; + void AddObserver(DeviceDisplayInfoObserverEfl* observer); + void RemoveObserver(DeviceDisplayInfoObserverEfl* observer); + private: DISALLOW_COPY_AND_ASSIGN(DeviceDisplayInfoEfl); }; diff --git a/tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h b/tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h new file mode 100644 index 0000000..9221a6a --- /dev/null +++ b/tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h @@ -0,0 +1,22 @@ +// Copyright 2018 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_ +#define UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_ + +#include "ui/display/display_export.h" + +namespace display { + +class DISPLAY_EXPORT DeviceDisplayInfoObserverEfl { + public: + virtual void OnDeviceDisplayInfoChanged() = 0; + + protected: + virtual ~DeviceDisplayInfoObserverEfl() {} +}; + +} // namespace display + +#endif // UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_ diff --git a/tizen_src/chromium_impl/ui/display/screen_efl.cc b/tizen_src/chromium_impl/ui/display/screen_efl.cc index e48ea49..d385a77 100644 --- a/tizen_src/chromium_impl/ui/display/screen_efl.cc +++ b/tizen_src/chromium_impl/ui/display/screen_efl.cc @@ -8,6 +8,7 @@ #include "content/browser/renderer_host/dip_util.h" #include "ui/display/device_display_info_efl.h" +#include "ui/display/device_display_info_observer_efl.h" #include "ui/display/display.h" #include "ui/display/display_observer.h" #include "ui/display/screen.h" @@ -18,11 +19,19 @@ using namespace display; namespace ui { -class ScreenEfl : public display::Screen { +class ScreenEfl : public display::Screen, + public display::DeviceDisplayInfoObserverEfl { public: - ScreenEfl() { AddDisplay(); } + ScreenEfl() { + display::DeviceDisplayInfoEfl display_info; + display_info.AddObserver(this); + UpdateDisplays(); + } - ~ScreenEfl() override {} + ~ScreenEfl() override { + display::DeviceDisplayInfoEfl display_info; + display_info.RemoveObserver(this); + } // display::Screen overrides gfx::Point GetCursorScreenPoint() override { @@ -66,7 +75,10 @@ class ScreenEfl : public display::Screen { return GetPrimaryDisplay(); } - display::Display GetPrimaryDisplay() const override { return displays_[0]; } + display::Display GetPrimaryDisplay() const override { + DCHECK(!displays_.empty()); + return displays_[0]; + } void AddObserver(display::DisplayObserver* /*observer*/) override { NOTIMPLEMENTED(); @@ -76,8 +88,11 @@ class ScreenEfl : public display::Screen { NOTIMPLEMENTED(); } + // display::DeviceDisplayInfoObserverEfl implementation. + void OnDeviceDisplayInfoChanged() override { UpdateDisplays(); } + private: - void AddDisplay() { + void UpdateDisplays() { display::DeviceDisplayInfoEfl display_info; const float device_scale_factor = display::Display::HasForceDeviceScaleFactor() @@ -96,8 +111,8 @@ class ScreenEfl : public display::Screen { display.set_device_scale_factor(device_scale_factor); display.set_bounds(bounds_in_dip); - - displays_.push_back(display); + std::vector displays(1, display); + displays_.swap(displays); } std::vector displays_; diff --git a/tizen_src/chromium_impl/ui/ui_efl.gni b/tizen_src/chromium_impl/ui/ui_efl.gni index bab6e66..268f51f 100644 --- a/tizen_src/chromium_impl/ui/ui_efl.gni +++ b/tizen_src/chromium_impl/ui/ui_efl.gni @@ -62,6 +62,7 @@ if (use_ozone) { external_ui_gfx_sources = [ "//tizen_src/chromium_impl/ui/display/device_display_info_efl.cc", "//tizen_src/chromium_impl/ui/display/device_display_info_efl.h", + "//tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h", "//tizen_src/chromium_impl/ui/display/screen_efl.cc", "//tizen_src/chromium_impl/ui/display/screen_efl.h", "//ui/gfx/nine_image_painter.cc", -- 2.7.4 From c1b8cd2bedf755b49a9abed8e6d81e45a706b298 Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Tue, 27 Oct 2020 17:34:35 +0530 Subject: [PATCH 07/16] [M85 Migration] Remove EWK_BRINGUP related to LatencyInfo This commits removes EWK_BRINGUP to provide LatencyInfo with original timestamp. Reference: https://review.tizen.org/gerrit/223737/ Change-Id: I3f883a6f9b56c0a8ad40c3630af189c5a3f64147 Signed-off-by: Chandan Padhi (cherry picked from commit c4f85976cea0ae4d9c2f0aee520690ae2ed21ecd) --- .../renderer_host/render_widget_host_view_efl.cc | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc index b882476..69c9d2d 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc @@ -1334,17 +1334,15 @@ void RenderWidgetHostViewEfl::set_magnifier(bool status) { } ui::LatencyInfo CreateLatencyInfo(const blink::WebInputEvent& event) { - ui::LatencyInfo latency_info; + if (!event.TimeStamp().since_origin().InMicroseconds()) + return ui::LatencyInfo(); + // The latency number should only be added if the timestamp is valid. -#if !defined(EWK_BRINGUP) // FIXME: m69 bringup - if (event.TimeStampSeconds()) { - const int64_t time_micros = static_cast( - event.TimeStampSeconds() * base::Time::kMicrosecondsPerSecond); - latency_info.AddLatencyNumberWithTimestamp( - ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0, - base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros), 1); - } -#endif + ui::LatencyInfo latency_info; + const int64_t time_micros = event.TimeStamp().since_origin().InMicroseconds(); + latency_info.AddLatencyNumberWithTimestamp( + ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, + base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros)); return latency_info; } -- 2.7.4 From 327f6e5d5c24bb06a543735a52ccbe6af92ec5a9 Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Tue, 27 Oct 2020 18:39:11 +0530 Subject: [PATCH 08/16] [M85 Migration] Remove EWK_BRINGUP to set source device for WebGestureEvent This commit removes EWK_BRINGUP to set source device for WebGestureEvent. Reference: https://review.tizen.org/gerrit/223816/ Change-Id: I8e6aca3363b0906b3f3ef5645fc6ece4ea1cd754 Signed-off-by: Chandan Padhi (cherry picked from commit 47d06f19122018224bbc1ce0e3f7c6e550244ca7) --- .../content/browser/renderer_host/render_widget_host_view_efl.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc index 69c9d2d..d56e933 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc @@ -1400,9 +1400,7 @@ void RenderWidgetHostViewEfl::HandleGesture(blink::WebGestureEvent& event) { // event to stop any in-progress flings. blink::WebGestureEvent fling_cancel = event; fling_cancel.SetType(blink::WebInputEvent::Type::kGestureFlingCancel); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - fling_cancel.source_device = blink::kWebGestureDeviceTouchscreen; -#endif + fling_cancel.SetSourceDevice(blink::WebGestureDevice::kTouchscreen); SendGestureEvent(fling_cancel); } else if (event_type == blink::WebInputEvent::Type::kGestureScrollUpdate) { if (event.data.scroll_update.delta_x < 0) -- 2.7.4 From ecfcc8ae2d488dcb8612ce63c4df1b767b045129 Mon Sep 17 00:00:00 2001 From: Gajendra N Date: Thu, 15 Oct 2020 16:28:13 +0530 Subject: [PATCH 09/16] [M85 Migration] Implement SharedURLLoaderFactoryEfl On upstream Chromium, geolocation is refactored to use URLLoaderFactory. GeolocationProviderImpl now dependant on SharedURLLoaderFactory, this patch ports the same to EFL. Added files : shared_url_loader_factory_efl.cc shared_url_loader_factory_efl.h Reference: https://review.tizen.org/gerrit/219507 Change-Id: Ic447a551bf857044627bdfff30976684241ee421 Signed-off-by: Gajendra N (cherry picked from commit 1117d88a3afebe21fa6b830d7b668895ef31b440) --- tizen_src/ewk/efl_integration/BUILD.gn | 2 + .../efl_integration/content_browser_client_efl.cc | 10 +++ .../efl_integration/content_browser_client_efl.h | 8 +++ .../shared_url_loader_factory_efl.cc | 78 ++++++++++++++++++++++ .../shared_url_loader_factory_efl.h | 67 +++++++++++++++++++ 5 files changed, 165 insertions(+) create mode 100644 tizen_src/ewk/efl_integration/shared_url_loader_factory_efl.cc create mode 100644 tizen_src/ewk/efl_integration/shared_url_loader_factory_efl.h diff --git a/tizen_src/ewk/efl_integration/BUILD.gn b/tizen_src/ewk/efl_integration/BUILD.gn index 669b529..ee7a55d 100644 --- a/tizen_src/ewk/efl_integration/BUILD.gn +++ b/tizen_src/ewk/efl_integration/BUILD.gn @@ -258,6 +258,8 @@ shared_library("chromium-ewk") { "popup_controller_efl.h", "scroll_detector.cc", "scroll_detector.h", + "shared_url_loader_factory_efl.cc", + "shared_url_loader_factory_efl.h", "text_encoding_map_efl.cc", "text_encoding_map_efl.h", "url_request_context_getter_efl.cc", diff --git a/tizen_src/ewk/efl_integration/content_browser_client_efl.cc b/tizen_src/ewk/efl_integration/content_browser_client_efl.cc index 13b1975..7ba928f 100644 --- a/tizen_src/ewk/efl_integration/content_browser_client_efl.cc +++ b/tizen_src/ewk/efl_integration/content_browser_client_efl.cc @@ -26,6 +26,7 @@ #include "content/public/common/content_switches.h" #include "common/version_info.h" #include "common/web_contents_utils.h" +#include "shared_url_loader_factory_efl.h" #if defined(OS_TIZEN) #if !defined(EWK_BRINGUP) @@ -110,6 +111,15 @@ void ContentBrowserClientEfl::AppendExtraCommandLineSwitches( CommandLineEfl::AppendProcessSpecificArgs(*command_line); } +scoped_refptr +ContentBrowserClientEfl::GetSystemSharedURLLoaderFactory() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + if (!shared_url_loader_factory_) + shared_url_loader_factory_ = new SharedURLLoaderFactoryEfl(); + + return shared_url_loader_factory_; +} + bool ContentBrowserClientEfl::CanCreateWindow( RenderFrameHost* opener, const GURL& opener_url, diff --git a/tizen_src/ewk/efl_integration/content_browser_client_efl.h b/tizen_src/ewk/efl_integration/content_browser_client_efl.h index e683da1..13823a6 100644 --- a/tizen_src/ewk/efl_integration/content_browser_client_efl.h +++ b/tizen_src/ewk/efl_integration/content_browser_client_efl.h @@ -22,6 +22,7 @@ class BrowserMainPartsEfl; #if defined(ENABLE_NOTIFICATIONS) class NotificationControllerEfl; #endif +class SharedURLLoaderFactoryEfl; class WebContents; class WebContentsView; @@ -111,6 +112,9 @@ class ContentBrowserClientEfl : public ContentBrowserClient { std::string GetUserAgent() override; private: + scoped_refptr + GetSystemSharedURLLoaderFactory() override; + static void SetCertificatePemOnUIThread(int render_process_id, int render_view_id, std::string certificate); @@ -125,6 +129,10 @@ class ContentBrowserClientEfl : public ContentBrowserClient { BrowserContextEfl* browser_context_efl_; + // URLLoaderFactory backed by the NetworkContext returned by GetContext(), so + // consumers don't all need to create their own factory. + scoped_refptr shared_url_loader_factory_; + DISALLOW_COPY_AND_ASSIGN(ContentBrowserClientEfl); }; } diff --git a/tizen_src/ewk/efl_integration/shared_url_loader_factory_efl.cc b/tizen_src/ewk/efl_integration/shared_url_loader_factory_efl.cc new file mode 100644 index 0000000..dcadbbe --- /dev/null +++ b/tizen_src/ewk/efl_integration/shared_url_loader_factory_efl.cc @@ -0,0 +1,78 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Copyright 2019 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "shared_url_loader_factory_efl.h" + +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/network_service_instance.h" +#include "services/network/public/cpp/cross_thread_pending_shared_url_loader_factory.h" + +namespace content { + +/* LCOV_EXCL_START */ +network::mojom::NetworkContextParamsPtr CreateNetworkContextParams() { + return network::mojom::NetworkContextParams::New(); +} + +void SharedURLLoaderFactoryEfl::CreateLoaderAndStart( + mojo::PendingReceiver receiver, + int32_t routing_id, + int32_t request_id, + uint32_t options, + const network::ResourceRequest& url_request, + mojo::PendingRemote client, + const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + GetURLLoaderFactory()->CreateLoaderAndStart( + std::move(receiver), routing_id, request_id, options, url_request, + std::move(client), traffic_annotation); +} + +void SharedURLLoaderFactoryEfl::Clone( + mojo::PendingReceiver receiver) { + GetURLLoaderFactory()->Clone(std::move(receiver)); +} + +std::unique_ptr +SharedURLLoaderFactoryEfl::Clone() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + return std::make_unique( + this); +} + +network::mojom::NetworkContext* SharedURLLoaderFactoryEfl::GetContext() { + if (!network_service_network_context_ || + !network_service_network_context_.is_connected()) { + // This should call into OnNetworkServiceCreated(), which will re-create + // the network service, if needed. There's a chance that it won't be + // invoked, if the NetworkContext has encountered an error but the + // NetworkService has not yet noticed its pipe was closed. In that case, + // trying to create a new NetworkContext would fail, anyways, and hopefully + // a new NetworkContext will be created on the next GetContext() call. + content::GetNetworkService(); + DCHECK(network_service_network_context_); + } + return network_service_network_context_.get(); +} + +network::mojom::URLLoaderFactory* +SharedURLLoaderFactoryEfl::GetURLLoaderFactory() { + if (url_loader_factory_ && url_loader_factory_.is_connected()) + return url_loader_factory_.get(); + + network::mojom::URLLoaderFactoryParamsPtr params = + network::mojom::URLLoaderFactoryParams::New(); + params->process_id = network::mojom::kBrowserProcessId; + params->is_corb_enabled = false; + params->is_trusted = true; + + url_loader_factory_.reset(); + GetContext()->CreateURLLoaderFactory( + url_loader_factory_.BindNewPipeAndPassReceiver(), std::move(params)); + return url_loader_factory_.get(); +} +/* LCOV_EXCL_STOP */ + +} // namespace content diff --git a/tizen_src/ewk/efl_integration/shared_url_loader_factory_efl.h b/tizen_src/ewk/efl_integration/shared_url_loader_factory_efl.h new file mode 100644 index 0000000..49db052 --- /dev/null +++ b/tizen_src/ewk/efl_integration/shared_url_loader_factory_efl.h @@ -0,0 +1,67 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Copyright 2019 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef SHARED_URL_LOADER_FACTORY_EFL_H_ +#define SHARED_URL_LOADER_FACTORY_EFL_H_ + +#include "base/memory/ref_counted.h" +#include "services/network/network_context.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" + +namespace network { +class PendingSharedURLLoaderFactory; +} + +namespace content { + +/* LCOV_EXCL_START */ +// SharedURLLoaderFactory its network context. Transparently handles crashes. +class SharedURLLoaderFactoryEfl : public network::SharedURLLoaderFactory { + public: + SharedURLLoaderFactoryEfl() {} + + // mojom::URLLoaderFactory implementation: + void CreateLoaderAndStart(mojo::PendingReceiver receiver, + int32_t routing_id, + int32_t request_id, + uint32_t options, + const network::ResourceRequest& url_request, + mojo::PendingRemote client, + const net::MutableNetworkTrafficAnnotationTag& + traffic_annotation) override; + + // SharedURLLoaderFactory implementation: + void Clone(mojo::PendingReceiver receiver) override; + + std::unique_ptr Clone() override; + + // Returns the System NetworkContext. May only be called after SetUp(). Does + // any initialization of the NetworkService that may be needed when first + // called. + network::mojom::NetworkContext* GetContext(); + + // Returns a URLLoaderFactory that is backed by the SystemNetworkContext. + // Allows sharing of the URLLoaderFactory. Prefer this to creating a new one. + // Call Clone() on the value returned by this method to get a URLLoaderFactory + // that can be used on other threads. + network::mojom::URLLoaderFactory* GetURLLoaderFactory(); + + private: + friend class base::RefCounted; + ~SharedURLLoaderFactoryEfl() override = default; + + // NetworkContext using the network service, if the network service is + // enabled. mojo::NullRemote(), otherwise. + mojo::Remote network_service_network_context_; + + mojo::Remote url_loader_factory_; + + DISALLOW_COPY_AND_ASSIGN(SharedURLLoaderFactoryEfl); +}; +/* LCOV_EXCL_STOP */ + +} // namespace content + +#endif -- 2.7.4 From c9f04d7508f0a6544daba0bf155ce92186132099 Mon Sep 17 00:00:00 2001 From: "suyambu.rm" Date: Fri, 31 Mar 2017 16:59:45 +0900 Subject: [PATCH 10/16] [M85 Migration][Ubrowser] Ubrowser migration. In order to perform the browser test in m56 beta, we decided to overwrite the Ubrowser codes to m56 beta from m47 beta. This CL applies the Ubrowser source codes to m56 beta from latest m47 beta source codes. However the source codes which related to "TIZEN_VIDEO_MANUAL_ROTATION_SUPPORT" and "TIZEN_VD_TOMATO" flag for specific product target were dropped in this CL. The dropped features will be merged in migration of m47 patches. ewk_view_widget_get API was introduced to help us with focusing issue. However, it didn't resolve the issue, so our clients (email, browser, crosswalk) decided to use the old solution aka "dummy button". The only application that still uses ewk_view_widget_get API is ubrowser. As the API has many side effects (e.g. select picker and context menu do not display), we made a decision to remove it from ubrowser too. Refeirence: https://review.tizen.org/gerrit/224961 Change-Id: I703969fb10ef90d94be95da4477823a5da403ee3 Signed-off-by: suyambu.rm --- .../ewk/efl_integration/public/ewk_context.cc | 5 + tizen_src/ewk/ubrowser/BUILD.gn | 6 + tizen_src/ewk/ubrowser/browser.cc | 231 +++++++++--- tizen_src/ewk/ubrowser/browser.h | 22 +- tizen_src/ewk/ubrowser/main.cc | 155 +++++--- tizen_src/ewk/ubrowser/window.cc | 409 ++++++++++++++++++++- tizen_src/ewk/ubrowser/window.h | 55 ++- tizen_src/ewk/ubrowser/window_ui.cc | 266 ++++++++++---- tizen_src/ewk/ubrowser/window_ui.h | 26 +- 9 files changed, 979 insertions(+), 196 deletions(-) diff --git a/tizen_src/ewk/efl_integration/public/ewk_context.cc b/tizen_src/ewk/efl_integration/public/ewk_context.cc index 9765cddf..d4da429 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_context.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_context.cc @@ -898,3 +898,8 @@ void ewk_context_form_autofill_credit_card_changed_callback_set( { LOG_EWK_API_MOCKUP(); } + +void ewk_context_default_zoom_factor_set(Ewk_Context* context, + double zoom_factor) { + LOG_EWK_API_MOCKUP(); +} diff --git a/tizen_src/ewk/ubrowser/BUILD.gn b/tizen_src/ewk/ubrowser/BUILD.gn index 715b2c2..ad15938 100644 --- a/tizen_src/ewk/ubrowser/BUILD.gn +++ b/tizen_src/ewk/ubrowser/BUILD.gn @@ -65,5 +65,11 @@ executable("ubrowser") { if (is_tizen) { configs += [ "//tizen_src/build:capi-appfw-application" ] configs += [ "//tizen_src/build:libcapi-appfw-application" ] + if (tizen_product_tv) { + configs += [ "//tizen_src/build:ecore-wayland" ] + configs += [ "//tizen_src/build:libecore-wayland" ] + configs += [ "//tizen_src/build:vd-win-util" ] + configs += [ "//tizen_src/build:libvd-win-util" ] + } } } diff --git a/tizen_src/ewk/ubrowser/browser.cc b/tizen_src/ewk/ubrowser/browser.cc index 1fdc4ca..2145c1a 100644 --- a/tizen_src/ewk/ubrowser/browser.cc +++ b/tizen_src/ewk/ubrowser/browser.cc @@ -4,31 +4,82 @@ #include "browser.h" -#include "logger.h" -#include "tizen/system_info.h" - +#include #include +#include +#include + #include #include #include +#include "logger.h" +#include "tizen/system_info.h" + static std::string kHomePage = "http://www.google.com"; static int kDefaultMobileWindowWidth = 360; static int kDefaultMobileWindowHeight = 640; +#if defined(OS_TIZEN_TV_PRODUCT) +static std::string kDefaultCookiePath = "/home/owner/.cookie"; +static std::string kDefaultCertificatePath = "/usr/share/cert/webbrowser.pem"; +static double kDefaultZoomFactor = 1.5; +static int kDefaultDesktopWindowWidth = 1920; +static int kDefaultDesktopWindowHeight = 1048; +#else static int kDefaultDesktopWindowWidth = 1600; static int kDefaultDesktopWindowHeight = 900; +#endif static int kToolboxWindowWidth = 640; static int kToolboxWindowHeight = 400; +static unsigned kInspectorServerPort = 7777; Window* Browser::selected_window_ = NULL; -Browser::Browser(bool desktop) - : toolbox_window_(NULL) - , window_list_(NULL) - , desktop_(desktop) - , inspector_started_(false) - , tracing_enabled_(false) { +static std::string GetConfigPath() { +#if defined(OS_TIZEN_TV_PRODUCT) + return kDefaultCookiePath; +#elif defined(OS_TIZEN) && defined(TIZEN_APP) + // Since ubrowser is not being created in Tizen specific way + // app_get_data_path() returns null. + // TODO: determine proper path using tizen API once TIZEN_APP + // gets enabled. + log_error("GetConfigPath is not implemented"); + return std::string(); +#else + std::string path; + char* config_path = getenv("XDG_CONFIG_HOME"); + if (config_path) { + path = config_path; + } else { + // Fallback code, on Mobile XDG_CONFIG_HOME is not set. + char* home_path = getenv("HOME"); + if (!home_path) { + log_error("Could not determine home directory"); + return std::string(); + } + path = home_path + std::string("/.config"); + } + return path + "/ubrowser"; +#endif +} +Browser::Browser(bool desktop, + GUILevel gui_level, + std::string ua, + std::string tizen_version) + : toolbox_window_(nullptr), + window_list_(nullptr), + desktop_(desktop), + inspector_started_(false), + tracing_enabled_(false), + user_agent_(ua), + tizen_version_(tizen_version), +#if defined(OS_TIZEN) + haptic_timer_id_(nullptr), + haptic_handle_(nullptr), + haptic_effect_(nullptr), +#endif + gui_level_(gui_level) { log_info("UI type: %s", desktop_ ? "desktop" : "mobile"); if (IsDesktopProfile()) { @@ -48,7 +99,7 @@ Browser::Browser(bool desktop) } if (IsEmulatorArch()) { - log_info("Runtime Architecture : EMUULATOR : ", IsEmulatorArch()); + log_info("Runtime Architecture : EMULATOR : ", IsEmulatorArch()); } // If we don't call ewk_context_default_get here, ubrowser crashes in desktop @@ -56,56 +107,80 @@ Browser::Browser(bool desktop) // FIXME: find a real fix Ewk_Context* ctx = ewk_context_default_get(); + // Developers usually kill ubrowser by Ctrl+C which ends + // ecore main loop resulting in not call ewk_shutdown and + // all jobs that saves something on disk do not take place. + // Add SIGINT handler to properly close ubrowser app. + signal(SIGINT, Browser::OnSignalHandler); + + std::string config_path = GetConfigPath(); + if (!config_path.empty()) { + ewk_cookie_manager_persistent_storage_set( + ewk_context_cookie_manager_get(ctx), config_path.c_str(), + EWK_COOKIE_PERSISTENT_STORAGE_SQLITE); + } + + ewk_context_cache_model_set(ctx, EWK_CACHE_MODEL_PRIMARY_WEBBROWSER); + +#if defined(OS_TIZEN_TV_PRODUCT) + ewk_context_default_zoom_factor_set(ctx, kDefaultZoomFactor); + ewk_context_certificate_file_set(ctx, kDefaultCertificatePath.c_str()); + ewk_context_cache_disabled_set(ctx, EINA_FALSE); +#endif + if (desktop_) return; - toolbox_window_ = elm_win_util_standard_add( - "ubrowser-toolbox", "uBrowser ToolBox"); + ewk_context_vibration_client_callbacks_set(ctx, &Browser::OnVibrationStart, + &Browser::OnVibrationStop, this); - evas_object_resize(toolbox_window_, - kToolboxWindowWidth, kToolboxWindowHeight); - elm_win_autodel_set(toolbox_window_, EINA_TRUE); + if (GetGUILevel() == UBROWSER_GUI_LEVEL_ALL) { + toolbox_window_ = + elm_win_util_standard_add("ubrowser-toolbox", "uBrowser ToolBox"); - Evas_Object* box = elm_box_add(toolbox_window_); - evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(toolbox_window_, box); - evas_object_show(box); + evas_object_resize(toolbox_window_, kToolboxWindowWidth, + kToolboxWindowHeight); - window_list_ = elm_list_add(toolbox_window_); - elm_list_select_mode_set(window_list_, ELM_OBJECT_SELECT_MODE_ALWAYS); - evas_object_size_hint_weight_set(window_list_, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(window_list_, EVAS_HINT_FILL, - EVAS_HINT_FILL); - elm_box_pack_end(box, window_list_); - evas_object_show(window_list_); - - Evas_Object* bbox = elm_box_add(toolbox_window_); - elm_box_horizontal_set(bbox, EINA_TRUE); - evas_object_size_hint_weight_set(bbox, EVAS_HINT_EXPAND, 0); - evas_object_size_hint_align_set(bbox, EVAS_HINT_FILL, 0); - elm_box_pack_end(box, bbox); - evas_object_show(bbox); - - AddButton(bbox, "New Window", "add", NULL, OnNewWindowRequest); - AddButton(bbox, "New Incognito Window", "add", NULL, - OnNewIncognitoWindowRequest); - - if (elm_win_wm_rotation_supported_get(toolbox_window_)) { - static const int rots[] = {0, 90, 270}; - elm_win_wm_rotation_available_rotations_set( - toolbox_window_, rots, (sizeof(rots) / sizeof(int))); - } + elm_win_autodel_set(toolbox_window_, EINA_TRUE); + + Evas_Object* box = elm_box_add(toolbox_window_); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(toolbox_window_, box); + evas_object_show(box); + + window_list_ = elm_list_add(toolbox_window_); + elm_list_select_mode_set(window_list_, ELM_OBJECT_SELECT_MODE_ALWAYS); + + evas_object_size_hint_weight_set(window_list_, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + evas_object_size_hint_align_set(window_list_, EVAS_HINT_FILL, + EVAS_HINT_FILL); + + elm_box_pack_end(box, window_list_); + evas_object_show(window_list_); - evas_object_smart_callback_add(toolbox_window_, "delete,request", - &Browser::OnToolboxWindowDelRequest, this); + Evas_Object* bbox = elm_box_add(toolbox_window_); + elm_box_horizontal_set(bbox, EINA_TRUE); + evas_object_size_hint_weight_set(bbox, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(bbox, EVAS_HINT_FILL, 0); + elm_box_pack_end(box, bbox); + evas_object_show(bbox); - ewk_context_vibration_client_callbacks_set(ctx, - &Browser::OnVibrationStart, - &Browser::OnVibrationStop, - this); + AddButton(bbox, "New Window", "add", NULL, OnNewWindowRequest); + AddButton(bbox, "New Incognito Window", "add", NULL, + OnNewIncognitoWindowRequest); - evas_object_show(toolbox_window_); + if (elm_win_wm_rotation_supported_get(toolbox_window_)) { + static const int rots[] = {0, 90, 270}; + elm_win_wm_rotation_available_rotations_set(toolbox_window_, rots, + (sizeof(rots) / sizeof(int))); + } + + evas_object_smart_callback_add(toolbox_window_, "delete,request", + &Browser::OnToolboxWindowDelRequest, this); + evas_object_show(toolbox_window_); + } } Browser::~Browser() { @@ -168,9 +243,40 @@ void Browser::ShowInspectorWindow() { void Browser::StartInspectorServer() { Ewk_Context* ctx = ewk_context_default_get(); - unsigned int port = ewk_context_inspector_server_start(ctx, 7777); - assert(port != 0); - log_trace("Inspector server started at port: %d\n", port); + unsigned port = ewk_context_inspector_server_start(ctx, kInspectorServerPort); + if (port) + DidStartInspectorServer(port); + else + log_error("Could not start Web Inspector Server at %u", + kInspectorServerPort); +} + +void Browser::DidStartInspectorServer(unsigned port) { + // Get IP address. + struct ifaddrs* addrs; + getifaddrs(&addrs); + char url[32] = {0}; + // Find non local, up IP address. + for (struct ifaddrs* iter = addrs; iter && iter->ifa_addr; + iter = iter->ifa_next) { + if (iter->ifa_addr->sa_family == AF_INET && + (iter->ifa_flags & IFF_LOOPBACK) == 0 && + (iter->ifa_flags & IFF_RUNNING) != 0) { + struct sockaddr_in* p_addr = + reinterpret_cast(iter->ifa_addr); + snprintf(url, sizeof(url) / sizeof(url[0]), "http://%s:%u", + inet_ntoa(p_addr->sin_addr), port); + break; + } + } + freeifaddrs(addrs); + + if (strlen(url)) { + if (selected_window_) + selected_window_->ShowInspectorURL(url); + } else + log_error("Web Inspector has started at %u port but its IP is unknown", + kInspectorServerPort); } void Browser::ActivateToolboxWindow() { @@ -345,6 +451,13 @@ Eina_Bool Browser::OnVibrationTimeout(void* data) { return ECORE_CALLBACK_CANCEL; } +void Browser::OnSignalHandler(int sig) { + if (sig == SIGINT) { + if (selected_window_) + selected_window_->Exit(); + } +} + void Browser::Exit() const { #if defined(OS_TIZEN) && defined(TIZEN_APP) ui_app_exit(); @@ -352,3 +465,13 @@ void Browser::Exit() const { elm_exit(); #endif } + +void Browser::SetDefaultZoomFactor(double zoom) { + Ewk_Context* ctx = ewk_context_default_get(); + ewk_context_default_zoom_factor_set(ctx, zoom); +} + +double Browser::DefaultZoomFactor() { + Ewk_Context* ctx = ewk_context_default_get(); + return ewk_context_default_zoom_factor_get(ctx); +} diff --git a/tizen_src/ewk/ubrowser/browser.h b/tizen_src/ewk/ubrowser/browser.h index 7423b95..b882e8b 100644 --- a/tizen_src/ewk/ubrowser/browser.h +++ b/tizen_src/ewk/ubrowser/browser.h @@ -17,7 +17,17 @@ class Browser { public: - Browser(bool desktop); + enum GUILevel { + UBROWSER_GUI_LEVEL_NONE = 0, + UBROWSER_GUI_LEVEL_URL_ONLY, + UBROWSER_GUI_LEVEL_MINIMAL, + UBROWSER_GUI_LEVEL_ALL, + }; + + Browser(bool desktop, + GUILevel gui_level, + std::string ua, + std::string tizen_version); ~Browser(); Window& CreateWindow(bool = false); @@ -26,6 +36,9 @@ class Browser { void ActivateToolboxWindow(); bool IsDesktop() const { return desktop_; } bool IsTracingEnabled() const { return tracing_enabled_; } + std::string GetUserAgent() const { return user_agent_; } + std::string GetTizenVersion() const { return tizen_version_; } + GUILevel GetGUILevel() const { return gui_level_; } void StartTracing(); void StopTracing(); void StartVibration(uint64_t); @@ -38,11 +51,14 @@ class Browser { void OnWindowLoadFinished(Window::IdType id); void Exit() const; + void SetDefaultZoomFactor(double zoom); + double DefaultZoomFactor(); private: void AddButton(Evas_Object*, const char*, const char*, const char*, Evas_Smart_Cb); Evas_Object* CreateControlButtons(Evas_Object*); + void DidStartInspectorServer(unsigned port); static void OnToolboxWindowDelRequest(void* data, Evas_Object*, void*); static void OnWindowElementClicked(void* data, Evas_Object*, void*); @@ -52,6 +68,7 @@ class Browser { static void OnVibrationStart(uint64_t vibration_time, void*); static void OnVibrationStop(void*); static Eina_Bool OnVibrationTimeout(void*); + static void OnSignalHandler(int); typedef struct _WindowMapData { Window* window; @@ -70,12 +87,15 @@ class Browser { bool desktop_; bool inspector_started_; bool tracing_enabled_; + std::string user_agent_; + std::string tizen_version_; #if defined(OS_TIZEN) Ecore_Timer* haptic_timer_id_; haptic_device_h haptic_handle_; haptic_effect_h haptic_effect_; #endif + GUILevel gui_level_; }; #endif // _BROWSER_H_ diff --git a/tizen_src/ewk/ubrowser/main.cc b/tizen_src/ewk/ubrowser/main.cc index 03f3053..94b53e2 100644 --- a/tizen_src/ewk/ubrowser/main.cc +++ b/tizen_src/ewk/ubrowser/main.cc @@ -1,9 +1,8 @@ -// Copyright 2014 Samsung Electronics. All rights reserved. +// Copyright 2016 Samsung Electronics. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include -#include #include #include #include @@ -15,6 +14,12 @@ #include "browser.h" #include "logger.h" +// Default command line flags for all profiles and platforms +const char* kDefaultCommandLineFlags[] = { + "allow-file-access-from-files", + "process-per-tab", +}; + // Default command line flags added by default when // ubrowser is started with --mobile|-m flag. const char* kMobileFlags[] = { @@ -27,10 +32,14 @@ const char* kMobileFlags[] = { extern int logger_show_trace; extern int logger_use_color; -#if defined(OS_TIZEN) -int desktop_ui = 0; +std::string user_agent; +std::string tizen_version; +Browser::GUILevel gui_level = Browser::UBROWSER_GUI_LEVEL_URL_ONLY; +double zoom_factor = 0; +#if defined(OS_TIZEN) && !defined(OS_TIZEN_TV_PRODUCT) +int desktop_mode = 0; #else -int desktop_ui = 1; +int desktop_mode = 1; #endif struct AppData { @@ -44,30 +53,66 @@ struct AppData { void show_help_and_exit(const char* app_name) { printf("Usage: %s [OPTION]... [URL]...\n\n", app_name); printf("Available options:\n"); - printf(" -v, --verbose Print verbose application logs\n"); - printf(" -n, --no-color Don't use colors in application logs\n"); - printf(" -d, --desktop Run application UI in desktop mode\n"); - printf(" -m, --mobile Run application UI in mobile mode\n"); - printf(" -h, --help Show this help message\n"); + printf(" -v, --verbose Print verbose application logs\n"); + printf(" -n, --no-color Don't use colors in application logs\n"); + printf(" -d, --desktop Run application UI in desktop mode\n"); + printf(" -m, --mobile Run application UI in mobile mode\n"); + printf(" -u, --user-agent Set user agent string\n"); + printf(" -l, --gui-level Run application different GUI elements\n"); + printf(" 0 - no GUI\n"); + printf(" 1 - show URL bar only, default option\n"); + printf(" 2 - minimal GUI\n"); + printf(" 3 - full GUI\n"); + printf(" -z, --zoom Set zoom factor using double number\n"); + printf(" -h, --help Show this help message\n"); + printf(" -t, --tizen Run WebView with compliance to Tizen version,\n"); + printf(" for example, -t 2.4 or -t 2.3.1 etc.\n"); exit(0); } -void parse_options(int argc, char** argv) { +static bool verify_gui_level(const char* value) { + int level = atoi(value); + + if ((level == 0 && value[0] != '0') || + level < Browser::UBROWSER_GUI_LEVEL_NONE || + level > Browser::UBROWSER_GUI_LEVEL_ALL) { + log_error("Unsupported GUI level!"); + return false; + } + + gui_level = static_cast(level); + return true; +} + +static bool verify_zoom_factor(const char* value) { + double zoom = atof(value); + + if (zoom <= 0 || zoom > 5) { + log_error("Unsupported Zoom factor!"); + return false; + } + + zoom_factor = zoom; + return true; +} + +void parse_options(int argc, char** argv, AppData* data) { int show_help = 0; - int c; while (1) { + int c = -1; static struct option long_options[] = { - {"verbose", no_argument, &logger_show_trace, 1}, - {"no-color", no_argument, &logger_use_color, 0}, - {"desktop", no_argument, &desktop_ui, 1}, - {"mobile", no_argument, &desktop_ui, 0}, - {"help", no_argument, &show_help, 1}, - {0, 0, 0, 0} - }; + {"desktop", no_argument, &desktop_mode, 1}, + {"mobile", no_argument, &desktop_mode, 0}, + {"user-agent", required_argument, 0, 'u'}, + {"gui-level", required_argument, 0, 'l'}, + {"zoom", required_argument, 0, 'z'}, + {"help", no_argument, &show_help, 1}, + {"tizen-version", required_argument, 0, 't'}, + {0, 0, 0, 0}}; int option_index = 0; - c = getopt_long (argc, argv, "vndmh", long_options, &option_index); + c = getopt_long(argc, argv, "vndmhu:l:z:t:", long_options, &option_index); if (c == -1) break; @@ -80,14 +125,28 @@ void parse_options(int argc, char** argv) { logger_use_color = 0; break; case 'd': - desktop_ui = 1; + desktop_mode = 1; break; case 'm': - desktop_ui = 0; + desktop_mode = 0; break; case 'h': show_help = 1; break; + case 'u': + user_agent = optarg; + break; + case 'l': + if (!verify_gui_level(optarg)) + show_help = 1; + break; + case 'z': + if (!verify_zoom_factor(optarg)) + show_help = 1; + break; + case 't': + tizen_version = optarg; + break; default: // Ignore EFL or chromium specific options, // ewk_set_arguments should handle them @@ -97,6 +156,13 @@ void parse_options(int argc, char** argv) { if (show_help) show_help_and_exit(argv[0]); + + for (int i = optind; i < argc; ++i) + if (argv[i][0] != '-') + data->urls.push_back(std::string(argv[i])); + + if (data->urls.empty()) + data->urls.push_back("http://www.google.com"); } static bool app_create(void* data) { @@ -107,7 +173,10 @@ static bool app_create(void* data) { elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); - app_data->browser = new Browser(desktop_ui); + app_data->browser = + new Browser(desktop_mode, gui_level, user_agent, tizen_version); + if (zoom_factor > 0) + app_data->browser->SetDefaultZoomFactor(zoom_factor); std::vector::iterator it = app_data->urls.begin(); for (;it != app_data->urls.end(); ++it) app_data->browser->CreateWindow().LoadURL(*it); @@ -134,30 +203,34 @@ static void app_resume(void* data) { } #endif // OS_TIZEN -int main(int argc, char** argv) { - AppData data; +// Passes user args and adds custom ubrowser flags. +static void set_arguments(int argc, char** argv) { + static std::vector ubrowser_argv; + // Copy original params first. + for (int i = 0; i < argc; i++) + ubrowser_argv.push_back(argv[i]); - for (int i = 1; i < argc; ++i) - if (argv[i][0] != '-') - data.urls.push_back(std::string(argv[i])); + // Add a default command lines. + for (auto arg : kDefaultCommandLineFlags) + ubrowser_argv.push_back(const_cast(arg)); - if (data.urls.empty()) - data.urls.push_back("http://www.google.com"); + // Add mobile flags for desktop ubrowser --mobile|-m. +#if !defined(OS_TIZEN) + if (!desktop_mode) { + for (auto arg : kMobileFlags) + ubrowser_argv.push_back(const_cast(arg)); + } +#endif + ewk_set_arguments(ubrowser_argv.size(), ubrowser_argv.data()); +} - ewk_set_arguments(argc, argv); +int main(int argc, char** argv) { elm_init(argc, argv); elm_config_accel_preference_set("opengl"); - parse_options(argc, argv); -// Do not propagate mobile flags for all TIZEN builds. -// They are controlled by command_line_efl.cc. -#if !defined(OS_TIZEN) - if (!desktop_ui) { - int size = sizeof(kMobileFlags) / sizeof(kMobileFlags[0]); - for (int i = 0; i < size; ++i) - ewk_chromium_append_command_line_flag(kMobileFlags[i]); - } -#endif + AppData data; + parse_options(argc, argv, &data); + set_arguments(argc, argv); int ret = 0; // Enable the section below once ubrowser is ready diff --git a/tizen_src/ewk/ubrowser/window.cc b/tizen_src/ewk/ubrowser/window.cc index 0b3fe19..f652715 100644 --- a/tizen_src/ewk/ubrowser/window.cc +++ b/tizen_src/ewk/ubrowser/window.cc @@ -4,21 +4,60 @@ #include "window.h" -#include #include #include #include #include +#include +#include #include "browser.h" #include "logger.h" #include "window_ui.h" +#include "tizen/system_info.h" + +#if defined(OS_TIZEN) +#include +#endif + #if defined(OS_TIZEN_TV_PRODUCT) #include "ecore_x_wayland_wrapper.h" #include #endif +#if defined(OS_TIZEN) +#if !defined(EWK_BRINGUP) +//#include "tizen_src/ewk/efl_integration/public/ewk_media_playback_info.h" +#endif +static Ewk_Application_Type application_type = EWK_APPLICATION_TYPE_OTHER; +#endif +#if defined(OS_TIZEN_TV_PRODUCT) +#if !defined(EWK_BRINGUP) +#include "tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.h" +#endif +#endif + +// Parses tizen version string (2.4 | 2.3.1 | 3.0 etc). +// Output std::vector where +// std::vector[0] = major, +// std::vector[1] = minor, +// std::vector[2] = release, +// In case of failure all values of vector are zero. +std::vector ParseTizenVersion(const std::string& tizen_string) { + std::vector version(3, 0); + for (unsigned i = 0, index = 0; i < tizen_string.size(); i++) { + if ((i % 2) == 0) { + if (isdigit(tizen_string[i]) && index < version.size()) + version[index++] = atoi(&tizen_string[i]); + else + return std::vector(3, 0); + } else if (tizen_string[i] != '.') + return std::vector(3, 0); + } + return version; +} + Window::Window(Browser& browser, int width, int height, bool incognito) : browser_(browser) , is_fullscreen_(false) { @@ -26,6 +65,11 @@ Window::Window(Browser& browser, int width, int height, bool incognito) evas_object_resize(window_, width, height); elm_win_autodel_set(window_, EINA_TRUE); + if (IsMobileProfile() && !IsWearableProfile()) { + elm_win_indicator_mode_set(window_, ELM_WIN_INDICATOR_SHOW); + elm_win_indicator_opacity_set(window_, ELM_WIN_INDICATOR_OPAQUE); + } + Evas_Object* conform = elm_conformant_add(window_); evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, @@ -42,33 +86,58 @@ Window::Window(Browser& browser, int width, int height, bool incognito) elm_box_pack_end(box, ui_->GetURLBar()); evas_object_show(ui_->GetURLBar()); + // Add elm_bg for focusing + web_view_elm_host_ = elm_bg_add(window_); + evas_object_size_hint_align_set(web_view_elm_host_, EVAS_HINT_FILL, + EVAS_HINT_FILL); + evas_object_size_hint_weight_set(web_view_elm_host_, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_box_pack_end(box, web_view_elm_host_); + elm_object_focus_allow_set(web_view_elm_host_, EINA_TRUE); + elm_object_focus_set(web_view_elm_host_, EINA_TRUE); + evas_object_show(web_view_elm_host_); + Evas* evas = evas_object_evas_get(window_); + if (incognito) web_view_ = ewk_view_add_in_incognito_mode(evas); else web_view_ = ewk_view_add(evas); + evas_object_resize(web_view_, width, height); - evas_object_size_hint_align_set(web_view_, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_weight_set(web_view_, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - elm_box_pack_end(box, web_view_); - evas_object_show(web_view_); + elm_object_part_content_set(web_view_elm_host_, "overlay", web_view_); + + Evas_Object* navbar = ui_->GetNavBar(); + if (navbar) { + elm_box_pack_end(box, navbar); + evas_object_show(navbar); + } + + std::string ua = browser_.GetUserAgent(); + if (!ua.empty()) + SetUserAgent(ua.c_str()); - elm_box_pack_end(box, ui_->GetNavBar()); - evas_object_show(ui_->GetNavBar()); + evas_object_smart_callback_add(web_view_elm_host_, "focused", + &Window::OnHostFocusedIn, this); + evas_object_smart_callback_add(web_view_elm_host_, "unfocused", + &Window::OnHostFocusedOut, this); evas_object_smart_callback_add(web_view_, "title,changed", &Window::OnTitleChanged, this); evas_object_smart_callback_add(web_view_, "url,changed", &Window::OnURLChanged, this); - evas_object_smart_callback_add(web_view_, "load,progress,started", + evas_object_smart_callback_add(web_view_, "load,started", &Window::OnLoadStarted, this); - evas_object_smart_callback_add(web_view_, "load,progress,finished", + evas_object_smart_callback_add(web_view_, "load,finished", &Window::OnLoadFinished, this); evas_object_smart_callback_add(web_view_, "create,window", &Window::OnNewWindowRequest, this); evas_object_smart_callback_add(web_view_, "console,message", &Window::OnConsoleMessage, NULL); +#if defined(TIZEN_TBM_SUPPORT) && defined(OS_TIZEN_TV_PRODUCT) + evas_object_smart_callback_add(web_view_, "notify,video,texturing", + &Window::OnVideotexturing, NULL); +#endif evas_object_smart_callback_add(web_view_, "policy,newwindow,decide", &Window::OnNewWindowPolicyDecide, NULL); evas_object_smart_callback_add(web_view_, "back,forward,list,changed", @@ -81,26 +150,82 @@ Window::Window(Browser& browser, int width, int height, bool incognito) &Window::OnEnterFullScreenRequest, this); evas_object_smart_callback_add(web_view_, "fullscreen,exitfullscreen", &Window::OnExitFullScreenRequest, this); - + evas_object_smart_callback_add(web_view_, "form,repost,warning,show", + &Window::OnFormRepostWarningShow, this); + evas_object_smart_callback_add(web_view_, "before,repost,warning,show", + &Window::OnBeforeFormRepostWarningShow, this); + +#if defined(OS_TIZEN) + if (IsTvProfile()) { + evas_object_event_callback_add(web_view_, EVAS_CALLBACK_KEY_DOWN, + &Window::OnKeyDown, this); + if (application_type == EWK_APPLICATION_TYPE_HBBTV) { +#if defined(OS_TIZEN_TV_PRODUCT) + evas_object_smart_callback_add(web_view_, "notify,subtitle,play", + &Window::On_Notify_Subtitle_Play, this); + evas_object_smart_callback_add(web_view_, "notify,subtitle,stop", + &Window::On_Notify_Subtitle_Stop, this); + evas_object_smart_callback_add(web_view_, "notify,video,pause", + &Window::On_Notify_Video_Pause, this); + evas_object_smart_callback_add(web_view_, "notify,video,resume", + &Window::On_Notify_Video_Resume, this); + evas_object_smart_callback_add(web_view_, "notify,video,seek,start", + &Window::On_Notify_Video_Seek_Start, this); + evas_object_smart_callback_add(web_view_, "notify,video,seek,completed", + &Window::On_Notify_Video_Seek_Completed, + this); + evas_object_smart_callback_add(web_view_, "on,subtitle,data", + &Window::On_Subtitle_Data, this); + evas_object_smart_callback_add(web_view_, "video,playback,load", + &Window::On_Video_Playback_Load, this); + evas_object_smart_callback_add(web_view_, "notification,playback,ready", + &Window::On_Video_Playback_Ready, this); + evas_object_smart_callback_add(web_view_, "video,playback,start", + &Window::On_Video_Playback_Start, this); + evas_object_smart_callback_add(web_view_, "video,playback,stop", + &Window::On_Video_Playback_Stop, this); + ewk_settings_media_subtitle_notification_set(GetEwkSettings(), true); +#endif + ewk_settings_media_playback_notification_set(GetEwkSettings(), true); + Ewk_Context* context = ewk_view_context_get(web_view_); + ewk_context_application_type_set(context, application_type); + } + } +#endif ewk_view_quota_permission_request_callback_set( web_view_, &Window::OnQuotaPermissionRequest, this); + ewk_view_did_change_theme_color_callback_set( + web_view_, &Window::OnThemeColorChanged, this); ewk_settings_form_profile_data_enabled_set(GetEwkSettings(), true); ewk_settings_form_candidate_data_enabled_set(GetEwkSettings(), true); + ewk_settings_uses_keypad_without_user_action_set(GetEwkSettings(), false); // Auto fit is already turned on for mobile, enable it for "ubrowser --mobile" as well. ewk_settings_auto_fitting_set(GetEwkSettings(), !browser_.IsDesktop()); +#if defined(OS_TIZEN) + eext_object_event_callback_add(window_, EEXT_CALLBACK_BACK, &Window::OnHWBack, + this); +#endif + if (elm_win_wm_rotation_supported_get(window_)) { - static const int rots[] = {0, 90, 270}; - elm_win_wm_rotation_available_rotations_set( - window_, rots, (sizeof(rots) / sizeof(int))); + SetAutoRotate(); evas_object_smart_callback_add(window_, "wm,rotation,changed", &Window::OnOrientationChanged, this); } - EnableMouseEvents(browser_.IsDesktop()); - EnableTouchEvents(!browser_.IsDesktop()); + if (IsTvProfile()) { + // In tv profile, we should use MouseEvent. + EnableMouseEvents(true); + EnableTouchEvents(false); + } else { + EnableMouseEvents(browser_.IsDesktop()); + EnableTouchEvents(!browser_.IsDesktop()); + } +#if defined(OS_TIZEN_TV_PRODUCT) + CreateMouseCursor(); +#endif evas_object_show(window_); } @@ -110,6 +235,11 @@ Window::~Window() { // deleting view will release context evas_object_del(web_view_); delete ui_; + +#if defined(OS_TIZEN) + eext_object_event_callback_del(window_, EEXT_CALLBACK_BACK, + &Window::OnHWBack); +#endif } Ewk_Settings* Window::GetEwkSettings() const { @@ -121,12 +251,14 @@ void Window::LoadURL(std::string url) { const static std::string https = "https://"; const static std::string file = "file://"; const static std::string about = "about:"; + const static std::string chrome = "chrome://"; if (url.compare(0, 1, "/") == 0) { url = "file://" + url; } else if (url.compare(0, http.length(), http) != 0 && - url.compare(0, https.length(), https) != 0 && - url.compare(0, file.length(), file) != 0 && - url.compare(0, about.length(), about) != 0) { + url.compare(0, https.length(), https) != 0 && + url.compare(0, file.length(), file) != 0 && + url.compare(0, about.length(), about) != 0 && + url.compare(0, chrome.length(), chrome) != 0) { url = "http://" + url; } log_info("Loading URL: %s", url.c_str()); @@ -263,10 +395,152 @@ void Window::SetScale(double scale) { ewk_view_scale_set(web_view_, scale, 0, 0); } +void Window::ShowInspectorURL(const char* url) { + ui_->ShowInspectorURLPopup(url); +} + Window::IdType Window::Id() const { return window_; } +void Window::SetAutoRotate() { + static const int rots[] = {0, 90, 180, 270}; + elm_win_wm_rotation_available_rotations_set(window_, rots, + (sizeof(rots) / sizeof(int))); +} + +#if defined(OS_TIZEN_TV_PRODUCT) +void Window::On_Video_Playback_Load(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); + Ewk_Media_Playback_Info* playbackInfo = (Ewk_Media_Playback_Info*)event_info; + const char* video_url = ewk_media_playback_info_media_url_get(playbackInfo); + const char* mime_type = ewk_media_playback_info_mime_type_get(playbackInfo); + char translated_url[] = + "http://www.w3schools.com/html/mov_bbb.mp4"; // for test + log_trace( + ">> video playback start: video_url(%s), mime_type(%s), " + "translated_url(%s)\n", + video_url, mime_type, translated_url); + ewk_media_playback_info_translated_url_set(playbackInfo, translated_url); +} + +void Window::On_Video_Playback_Ready(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); +} + +void Window::On_Video_Playback_Start(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); + + Ewk_Media_Playback_Info* playbackInfo = (Ewk_Media_Playback_Info*)event_info; + const char* video_url = ewk_media_playback_info_media_url_get(playbackInfo); + const char* mime_type = ewk_media_playback_info_mime_type_get(playbackInfo); + char translated_url[] = + "http://www.w3schools.com/html/mov_bbb.mp4"; // for test + + log_trace( + ">> video playback start: video_url(%s), mime_type(%s), " + "translated_url(%s)\n", + video_url, mime_type, translated_url); + ewk_media_playback_info_media_resource_acquired_set(playbackInfo, 1); +} + +void Window::On_Video_Playback_Stop(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); + + Ewk_Media_Playback_Info* playbackInfo = (Ewk_Media_Playback_Info*)event_info; + const char* video_url = ewk_media_playback_info_media_url_get(playbackInfo); + log_trace("<< video playback stop : video_url(%s)\n", video_url); + + Window* thiz = static_cast(data); + char translated_url[] = + "http://www.w3schools.com/html/mov_bbb.mp4"; // for test + // TODO: Once the ewk api is added, remove EWK_BRINGUP +#if !defined(EWK_BRINGUP) + ewk_media_translated_url_set(thiz->web_view_, translated_url); +#endif +} + +#if defined(TIZEN_TBM_SUPPORT) +void Window::OnVideotexturing(void* data, Evas_Object*, void* event_info) { + log_message(INFO, true, "%s", __PRETTY_FUNCTION__); +} +#endif +#endif // defined(OS_TIZEN_TV_PRODUCT) + +#if defined(OS_TIZEN_TV_PRODUCT) +void Window::current_time_call(Evas_Object*, double ct, void* user_data) { + double timestamp = ct; + log_trace("<< current_time_call : timestamp (%f)\n", timestamp); +} + +void Window::On_Notify_Subtitle_Play(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); + + Ewk_Media_Subtitle_Info* subtitleInfo = (Ewk_Media_Subtitle_Info*)event_info; + int id = ewk_media_subtitle_info_id_get(subtitleInfo); + const char* url = ewk_media_subtitle_info_url_get(subtitleInfo); + const char* lang = ewk_media_subtitle_info_lang_get(subtitleInfo); + + log_trace("<< notify subtitle play : id(%d), url(%s), lang(%s)\n", id, url, + lang); +} + +void Window::On_Notify_Subtitle_Stop(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); +} + +void Window::On_Notify_Video_Pause(void* data, Evas_Object*, void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); +} + +void Window::On_Notify_Video_Resume(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); +} + +void Window::On_Notify_Video_Seek_Start(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); + double timestamp = *(double*)event_info; + + log_trace("notify video seek start timestamp%s", timestamp); +} + +void Window::On_Notify_Video_Seek_Completed(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); +} + +void Window::On_Subtitle_Data(void* data, Evas_Object*, void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); + Ewk_Media_Subtitle_Data* subtitleData = (Ewk_Media_Subtitle_Data*)event_info; + int id = ewk_media_subtitle_data_id_get(subtitleData); + double timestamp = ewk_media_subtitle_data_timestamp_get(subtitleData); + unsigned size = ewk_media_subtitle_data_size_get(subtitleData); + const char* subtitile_data = + (const char*)(ewk_media_subtitle_data_get(subtitleData)); + log_trace( + "<< notify subtitle data : id(%d), ts(%f), size(%d), " + "subtitile_data(%s)\n", + id, timestamp, size, subtitile_data); +} +#endif + void Window::OnEnterFullScreenRequest(void* data, Evas_Object*, void* event_info) { log_trace("%s", __PRETTY_FUNCTION__); @@ -281,6 +555,59 @@ void Window::OnExitFullScreenRequest(void* data, Evas_Object*, thiz->is_fullscreen_ = false; } +void Window::OnBeforeFormRepostWarningShow(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); + Window* thiz = static_cast(data); + thiz->ui_->ClosePopup(); +} + +void Window::OnUserFormRepostDecisionTaken(bool decision, void* data) { + log_trace("%s", __PRETTY_FUNCTION__); + Ewk_Form_Repost_Decision_Request* request = + static_cast(data); + ewk_form_repost_decision_request_reply(request, decision); +} + +void Window::OnFormRepostWarningShow(void* data, + Evas_Object*, + void* event_info) { + log_trace("%s", __PRETTY_FUNCTION__); + Ewk_Form_Repost_Decision_Request* request = + static_cast(event_info); + Window* thiz = static_cast(data); + thiz->ui_->ShowPermissionPopup( + "form repost warning", + "The page that you're looking for used information that you entered. " + "Returning to that page might cause any action that you took to be " + "repeated. Do you want to continue?", + OnUserFormRepostDecisionTaken, request); +} + +#if defined(OS_TIZEN) +void Window::OnKeyDown(void* data, + Evas_Object*, + Evas_Object* obj, + void* event_info) { + if (IsTvProfile()) { + log_trace("%s", __PRETTY_FUNCTION__); + Window* thiz = static_cast(data); + + if (!event_info) + return; + + const Evas_Event_Key_Down* key_down = + static_cast(event_info); + + if (!key_down->key) + return; + if (!strcmp(key_down->key, "XF86Back")) + thiz->Back(); + } +} +#endif + #if defined(OS_TIZEN_TV_PRODUCT) void Window::CreateMouseCursor() { log_trace("%s", __PRETTY_FUNCTION__); @@ -334,7 +661,8 @@ void Window::CreateMouseCursor() { } #endif -void Window::OnUserMediaPermissionRequest(void* data, Evas_Object*, +void Window::OnUserMediaPermissionRequest(void* data, + Evas_Object*, void* event_info) { log_trace("%s", __PRETTY_FUNCTION__); Window* thiz = static_cast(data); @@ -432,10 +760,21 @@ void Window::OnOrientationChanged(void* data, Evas_Object *obj, void* event) { int rotation = elm_win_rotation_get(thiz->window_); // ewk_view_orientation_send expects angles: 0, 90, -90, 180. if (rotation == 270) + rotation = 90; + else if (rotation == 90) rotation = -90; ewk_view_orientation_send(thiz->web_view_, rotation); } +#if defined(OS_TIZEN) +void Window::OnHWBack(void* data, Evas_Object*, void*) { + Window* thiz = static_cast(data); + log_trace("%s", __PRETTY_FUNCTION__); + + thiz->Back(); +} +#endif + void Window::OnNewWindowPolicyDecide(void*, Evas_Object*, void* policy) { log_trace("%s", __PRETTY_FUNCTION__); Ewk_Policy_Decision *policy_decision = static_cast(policy); @@ -456,6 +795,36 @@ void Window::OnQuotaPermissionRequest(Evas_Object*, const Ewk_Quota_Permission_R ewk_view_quota_permission_request_reply(request, true); } +void Window::OnThemeColorChanged(Evas_Object* o, + int r, + int g, + int b, + int a, + void* data) { + Window* thiz = static_cast(data); + thiz->ui_->OnThemeColorChanged(r, g, b, a); +} + +void Window::OnHostFocusedIn(void* data, Evas_Object*, void*) { + log_trace("%s", __PRETTY_FUNCTION__); + Window* thiz = static_cast(data); + ewk_view_focus_set(thiz->web_view_, EINA_TRUE); +} + +void Window::OnHostFocusedOut(void* data, Evas_Object*, void*) { + log_trace("%s", __PRETTY_FUNCTION__); + Window* thiz = static_cast(data); + ewk_view_focus_set(thiz->web_view_, EINA_FALSE); +} + +void Window::SetGoogleDataProxyHeaders() const { + ewk_view_custom_header_add( + web_view_, "Chrome-Proxy", + "ps=1477491020-304034222-240280515-829909815, " + "sid=b37590d308108e0b7a229352dee265d8, b=2704, p=103, c=linux"); + ewk_view_custom_header_add(web_view_, "accept", "image/webp,*/*;q=0.8"); +} + void Window::Exit() const { browser_.Exit(); } diff --git a/tizen_src/ewk/ubrowser/window.h b/tizen_src/ewk/ubrowser/window.h index 3243023..52bd135 100644 --- a/tizen_src/ewk/ubrowser/window.h +++ b/tizen_src/ewk/ubrowser/window.h @@ -10,10 +10,6 @@ #include #include -#if defined(OS_TIZEN_TV_PRODUCT) -#include "chromium_impl/build/tizen_version.h" -#endif - class Browser; class WindowUI; @@ -50,6 +46,9 @@ class Window { double GetScale() const; void GetScaleRange(double* minScale, double* maxScale) const; void SetScale(double); + void ShowInspectorURL(const char* url); + void SetGoogleDataProxyHeaders() const; + void SetAutoRotate(); void Exit() const; IdType Id() const; @@ -70,6 +69,53 @@ class Window { static void OnUserMediaPermissionDecisionTaken(bool decision, void* data); static void OnEnterFullScreenRequest(void*, Evas_Object*, void*); static void OnExitFullScreenRequest(void*, Evas_Object*, void*); + static void OnHostFocusedIn(void* data, Evas_Object*, void*); + static void OnHostFocusedOut(void* data, Evas_Object*, void*); + static void OnBeforeFormRepostWarningShow(void*, Evas_Object*, void*); + static void OnFormRepostWarningShow(void*, Evas_Object*, void*); + static void OnUserFormRepostDecisionTaken(bool decision, void* data); + static void OnThemeColorChanged(Evas_Object* o, + int r, + int g, + int b, + int a, + void* data); +#if defined(OS_TIZEN) + static void OnHWBack(void*, Evas_Object*, void*); +#endif + +#if defined(PWE_SUPPORT) + static void OnServiceWorkerRegistrationResult(Ewk_Context*, + const char*, + const char*, + Eina_Bool, + void*); + static void OnServiceWorkerUnregistrationResult(Ewk_Context*, + const char*, + Eina_Bool, + void*); +#endif + +#if defined(OS_TIZEN) + static void OnKeyDown(void*, Evas*, Evas_Object*, void*); +#endif +#if defined(OS_TIZEN_TV_PRODUCT) + static void On_Notify_Subtitle_Play(void*, Evas_Object*, void*); + static void On_Notify_Subtitle_Stop(void*, Evas_Object*, void*); + static void On_Notify_Video_Pause(void*, Evas_Object*, void*); + static void On_Notify_Video_Resume(void*, Evas_Object*, void*); + static void On_Notify_Video_Seek_Start(void*, Evas_Object*, void*); + static void On_Notify_Video_Seek_Completed(void*, Evas_Object*, void*); + static void On_Subtitle_Data(void*, Evas_Object*, void*); + static void current_time_call(Evas_Object*, double, void*); + static void On_Video_Playback_Load(void*, Evas_Object*, void*); + static void On_Video_Playback_Ready(void*, Evas_Object*, void*); + static void On_Video_Playback_Start(void*, Evas_Object*, void*); + static void On_Video_Playback_Stop(void*, Evas_Object*, void*); +#if defined(TIZEN_TBM_SUPPORT) + static void OnVideotexturing(void*, Evas_Object*, void*); +#endif // defined(TIZEN_TBM_SUPPORT) +#endif #if defined(OS_TIZEN_TV_PRODUCT) void CreateMouseCursor(); #endif @@ -77,6 +123,7 @@ class Window { WindowUI* ui_; Evas_Object* window_; Evas_Object* web_view_; + Evas_Object* web_view_elm_host_; bool is_fullscreen_; }; diff --git a/tizen_src/ewk/ubrowser/window_ui.cc b/tizen_src/ewk/ubrowser/window_ui.cc index 147c27a..3123a58 100644 --- a/tizen_src/ewk/ubrowser/window_ui.cc +++ b/tizen_src/ewk/ubrowser/window_ui.cc @@ -10,10 +10,6 @@ #include #include -#ifdef OS_TIZEN -#include -#endif - #include "browser.h" #include "logger.h" #include "window.h" @@ -28,62 +24,36 @@ static int kNotificationTimeoutSec = 3; } WindowUI::WindowUI(Window& window, Browser& browser) - : window_(window) - , browser_(browser) - , active_popup_(NULL) - , menu_(0) - , is_loading_(false) { - navbar_ = elm_box_add(window_.GetEvasObject()); - elm_box_horizontal_set(navbar_, EINA_TRUE); - elm_box_homogeneous_set(navbar_, EINA_TRUE); - evas_object_size_hint_weight_set(navbar_, EVAS_HINT_EXPAND, 0.0f); - evas_object_size_hint_align_set(navbar_, EVAS_HINT_FILL, EVAS_HINT_FILL); - - AddButton(navbar_, "file", "New Window", &WindowUI::OnCreateWindow); - if (browser_.IsDesktop()) - AddButton(navbar_, "file", "New Incognito Window", - &WindowUI::OnCreateIncognitoWindow); - back_button_ = AddButton(navbar_, "arrow_left", "Back", &WindowUI::OnBack); - forward_button_ = AddButton(navbar_, "arrow_right", "Forward", - &WindowUI::OnForward); - stop_reload_button_ = AddButton(navbar_, "refresh", "Reload", - &WindowUI::OnStopOrReload); - AddButton(navbar_, "arrow_up", "More Actions", - &WindowUI::OnShowExtraActionsMenu); - - urlbar_ = elm_box_add(window_.GetEvasObject()); - elm_box_horizontal_set(urlbar_, EINA_TRUE); - evas_object_size_hint_weight_set(urlbar_, EVAS_HINT_EXPAND, 0.0f); - evas_object_size_hint_align_set(urlbar_, EVAS_HINT_FILL, EVAS_HINT_FILL); - - progress_bar_ = elm_progressbar_add(window_.GetEvasObject()); - elm_object_style_set(progress_bar_, "wheel"); - elm_progressbar_pulse_set(progress_bar_, EINA_TRUE); - elm_progressbar_pulse(progress_bar_, EINA_FALSE); - elm_box_pack_end(urlbar_, progress_bar_); - evas_object_show(progress_bar_); - - url_entry_ = elm_entry_add(urlbar_); - elm_entry_single_line_set(url_entry_, EINA_TRUE); - elm_entry_scrollable_set(url_entry_, EINA_TRUE); - elm_entry_input_panel_layout_set(url_entry_, ELM_INPUT_PANEL_LAYOUT_URL); - evas_object_size_hint_weight_set(url_entry_, EVAS_HINT_EXPAND, 1.0f); - evas_object_size_hint_align_set(url_entry_, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_smart_callback_add(url_entry_, "activated", OnURLEntered, this); - elm_box_pack_end(urlbar_, url_entry_); - evas_object_show(url_entry_); - - Evas_Object* separator = elm_separator_add(urlbar_); - elm_separator_horizontal_set(separator, EINA_TRUE); - elm_box_pack_end(urlbar_, separator); - evas_object_show(separator); - -#if defined(OS_TIZEN) - eext_object_event_callback_add(window_.GetEvasObject(), EEXT_CALLBACK_BACK, WindowUI::OnBack, this); + : window_(window), + browser_(browser), + navbar_(nullptr), + urlbar_(nullptr), + url_entry_(nullptr), + stop_reload_button_(nullptr), + progress_bar_(nullptr), + forward_button_(nullptr), + back_button_(nullptr), + active_popup_(nullptr), + menu_(nullptr), +#if defined(OS_TIZEN_TV_PRODUCT) + should_show_label_(true), +#else + should_show_label_(browser_.IsDesktop()), #endif - - EnableBackButton(false); - EnableForwardButton(false); + is_loading_(false) { + if (browser_.GetGUILevel() >= Browser::UBROWSER_GUI_LEVEL_URL_ONLY) + CreateTopBar(); + if (browser_.GetGUILevel() >= Browser::UBROWSER_GUI_LEVEL_MINIMAL) + CreateBottomBar(); + + // TODO: Workaround for http://suprem.sec.samsung.net/jira/browse/TWF-843 + if (IsTvProfile()) { + should_show_label_ = true; + Elm_Theme* theme = elm_theme_new(); + elm_theme_set(theme, "tizen-HD-light"); + elm_object_theme_set(navbar_, theme); + elm_theme_free(theme); + } } WindowUI::~WindowUI() { @@ -93,35 +63,46 @@ WindowUI::~WindowUI() { void WindowUI::OnURLChanged(const char* url) { log_trace("%s: %s", __PRETTY_FUNCTION__, url); - elm_object_text_set(url_entry_, url); + if (url_entry_) + elm_object_text_set(url_entry_, url); } void WindowUI::OnLoadingStarted() { log_trace("%s", __PRETTY_FUNCTION__); - elm_progressbar_pulse(progress_bar_, EINA_TRUE); - Evas_Object* icon = elm_object_part_content_get(stop_reload_button_, "icon"); - elm_icon_standard_set(icon, "close"); - if (browser_.IsDesktop()) - elm_object_text_set(stop_reload_button_, "Stop"); + if (progress_bar_) + elm_progressbar_pulse(progress_bar_, EINA_TRUE); + if (stop_reload_button_) { + Evas_Object* icon = + elm_object_part_content_get(stop_reload_button_, "icon"); + elm_icon_standard_set(icon, "close"); + if (should_show_label_) + elm_object_text_set(stop_reload_button_, "Stop"); + } is_loading_ = true; } void WindowUI::OnLoadingFinished() { log_trace("%s", __PRETTY_FUNCTION__); - elm_progressbar_pulse(progress_bar_, EINA_FALSE); - Evas_Object* icon = elm_object_part_content_get(stop_reload_button_, "icon"); - elm_icon_standard_set(icon, "refresh"); - if (browser_.IsDesktop()) - elm_object_text_set(stop_reload_button_, "Reload"); + if (progress_bar_) + elm_progressbar_pulse(progress_bar_, EINA_FALSE); + if (stop_reload_button_) { + Evas_Object* icon = + elm_object_part_content_get(stop_reload_button_, "icon"); + elm_icon_standard_set(icon, "refresh"); + if (should_show_label_) + elm_object_text_set(stop_reload_button_, "Reload"); + } is_loading_ = false; } void WindowUI::EnableBackButton(bool enable) { - elm_object_disabled_set(back_button_, !enable); + if (back_button_) + elm_object_disabled_set(back_button_, !enable); } void WindowUI::EnableForwardButton(bool enable) { - elm_object_disabled_set(forward_button_, !enable); + if (forward_button_) + elm_object_disabled_set(forward_button_, !enable); } void WindowUI::ShowNotification(const char* text) { @@ -135,12 +116,74 @@ void WindowUI::ShowNotification(const char* text) { evas_object_show(notification); } +void WindowUI::CreateTopBar() { + urlbar_ = elm_box_add(window_.GetEvasObject()); + elm_box_horizontal_set(urlbar_, EINA_TRUE); + evas_object_size_hint_weight_set(urlbar_, EVAS_HINT_EXPAND, 0.0f); + evas_object_size_hint_align_set(urlbar_, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (browser_.GetGUILevel() >= Browser::UBROWSER_GUI_LEVEL_ALL) { + progress_bar_ = elm_progressbar_add(window_.GetEvasObject()); + elm_object_style_set(progress_bar_, "wheel"); + elm_progressbar_pulse_set(progress_bar_, EINA_TRUE); + elm_progressbar_pulse(progress_bar_, EINA_FALSE); + elm_box_pack_end(urlbar_, progress_bar_); + evas_object_show(progress_bar_); + } + + url_entry_ = elm_entry_add(urlbar_); + elm_entry_single_line_set(url_entry_, EINA_TRUE); + elm_entry_scrollable_set(url_entry_, EINA_TRUE); + elm_entry_input_panel_layout_set(url_entry_, ELM_INPUT_PANEL_LAYOUT_URL); + evas_object_size_hint_weight_set(url_entry_, EVAS_HINT_EXPAND, 1.0f); + evas_object_size_hint_align_set(url_entry_, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(url_entry_, "activated", OnURLEntered, this); + elm_box_pack_end(urlbar_, url_entry_); + evas_object_color_get(url_entry_, &url_entry_color_.r, &url_entry_color_.g, + &url_entry_color_.b, &url_entry_color_.a); + evas_object_show(url_entry_); + + if (browser_.GetGUILevel() >= Browser::UBROWSER_GUI_LEVEL_ALL) { + Evas_Object* separator = elm_separator_add(urlbar_); + elm_separator_horizontal_set(separator, EINA_TRUE); + elm_box_pack_end(urlbar_, separator); + evas_object_show(separator); + } +} + +void WindowUI::CreateBottomBar() { + navbar_ = elm_box_add(window_.GetEvasObject()); + elm_box_horizontal_set(navbar_, EINA_TRUE); + elm_box_homogeneous_set(navbar_, EINA_TRUE); + evas_object_size_hint_weight_set(navbar_, EVAS_HINT_EXPAND, 0.0f); + evas_object_size_hint_align_set(navbar_, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (browser_.GetGUILevel() >= Browser::UBROWSER_GUI_LEVEL_ALL) { + AddButton(navbar_, "file", "New Window", &WindowUI::OnCreateWindow); + if (browser_.IsDesktop()) + AddButton(navbar_, "file", "New Incognito Window", + &WindowUI::OnCreateIncognitoWindow); + } + + back_button_ = AddButton(navbar_, "arrow_left", "Back", &WindowUI::OnBack); + forward_button_ = + AddButton(navbar_, "arrow_right", "Forward", &WindowUI::OnForward); + stop_reload_button_ = + AddButton(navbar_, "refresh", "Reload", &WindowUI::OnStopOrReload); + if (browser_.GetGUILevel() >= Browser::UBROWSER_GUI_LEVEL_ALL) + AddButton(navbar_, "arrow_up", "More Actions", + &WindowUI::OnShowExtraActionsMenu); + + EnableBackButton(false); + EnableForwardButton(false); +} + Evas_Object* WindowUI::AddButton(Evas_Object* parent, const char* icon, const char* label, Evas_Smart_Cb cb) { Evas_Object* bt = elm_button_add(parent); evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); - if (label && browser_.IsDesktop()) + if (label && should_show_label_) elm_object_text_set(bt, label); if (icon) { Evas_Object* icon_elm = elm_icon_add(bt); @@ -175,12 +218,11 @@ Evas_Object* WindowUI::CreateExtraActionsMenu(Evas_Object* parent) { } menu_ = elm_ctxpopup_add(parent); - if (IsMobileProfile() || IsWearableProfile()) { + if ((IsMobileProfile() || IsWearableProfile())) { int width; evas_object_geometry_get(parent, 0, 0, &width, 0); evas_object_size_hint_min_set(menu_, width, 0); } - evas_object_smart_callback_add(menu_, "dismissed", _HideCtxPopup, NULL); if (window_.IsFormProfileEnabled()) { @@ -217,6 +259,9 @@ Evas_Object* WindowUI::CreateExtraActionsMenu(Evas_Object* parent) { elm_ctxpopup_item_append(menu_, "Start Web Inspector server", NULL, &WindowUI::OnInspectorServerStart, this); } + + elm_ctxpopup_item_append(menu_, "Use Google data proxy", NULL, + &WindowUI::OnUseGoogleDataProxy, this); #if !defined(OS_TIZEN) elm_ctxpopup_item_append(menu_, "Simulate screen rotation", NULL, &WindowUI::OnRotate, this); @@ -247,6 +292,14 @@ Evas_Object* WindowUI::CreateExtraActionsMenu(Evas_Object* parent) { &WindowUI::OnAutoFittingDisabled, this); } + if (!ewk_settings_scripts_can_open_windows_get(settings)) { + elm_ctxpopup_item_append(menu_, "Enable js window.open", NULL, + &WindowUI::OnScriptWindowOpenEnabled, this); + } else { + elm_ctxpopup_item_append(menu_, "Disable js window.open", NULL, + &WindowUI::OnScriptWindowOpenDisabled, this); + } + if (!ewk_settings_form_profile_data_enabled_get(settings) || !ewk_settings_form_candidate_data_enabled_get(settings)) { elm_ctxpopup_item_append(menu_, "Enable autofill", NULL, @@ -294,6 +347,20 @@ void WindowUI::ShowPermissionPopup(const char* title, evas_object_show(popup); } +void WindowUI::OnThemeColorChanged(int r, int g, int b, int a) { + log_trace("%s: rgba(%d, %d, %d, %d)", __PRETTY_FUNCTION__, r, g, b, a); + if (url_entry_) { + // FIXME: For darker colors font color is to close to background color in + // entry. It is style dependent, so style modification or change would be + // needed to solve that issue. + if (a != 0) + evas_object_color_set(url_entry_, r, g, b, a); + else + evas_object_color_set(url_entry_, url_entry_color_.r, url_entry_color_.g, + url_entry_color_.b, url_entry_color_.a); + } +} + void WindowUI::PermissionGranted(void* data, Evas_Object* button, void*) { log_trace("%s", __PRETTY_FUNCTION__); @@ -312,6 +379,21 @@ void WindowUI::PermissionDeclined(void* data, Evas_Object* button, void*) { delete buttonData; } +void WindowUI::ShowInspectorURLPopup(const char* url) { + log_trace("%s : %s", __PRETTY_FUNCTION__, url); + Evas_Object* popup = elm_popup_add(window_.GetEvasObject()); + elm_object_part_text_set(popup, "title,text", url); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + active_popup_ = popup; + + Evas_Object* btn = elm_button_add(popup); + elm_object_text_set(btn, "Close"); + evas_object_smart_callback_add(btn, "clicked", ClosePopup, this); + elm_object_part_content_set(popup, "button1", btn); + + evas_object_show(popup); +} + void WindowUI::ShowTextEntryPopup(const char* title, const char* initial_content, Evas_Smart_Cb cb) { @@ -441,6 +523,15 @@ void WindowUI::OnInspectorServerStart(void* data, Evas_Object* obj, void*) { thiz->CloseMenu(); } +void WindowUI::OnUseGoogleDataProxy(void* data, Evas_Object* obj, void*) { + log_trace("%s", __PRETTY_FUNCTION__); + WindowUI* thiz = static_cast(data); + ewk_context_proxy_set(ewk_context_default_get(), "compress.googlezip.net:80", + ""); + thiz->window_.SetGoogleDataProxyHeaders(); + thiz->CloseMenu(); +} + void WindowUI::OnRotate(void* data, Evas_Object* obj, void*) { log_trace("%s", __PRETTY_FUNCTION__); WindowUI* thiz = static_cast(data); @@ -520,12 +611,37 @@ void WindowUI::OnAutoFillDisabled(void* data, Evas_Object* obj, void*) { thiz->ShowNotification("Autofill disabled"); } +void WindowUI::OnScriptWindowOpenEnabled(void* data, Evas_Object* obj, void*) { + log_trace("%s", __PRETTY_FUNCTION__); + WindowUI* thiz = static_cast(data); + Ewk_Settings* settings = thiz->window_.GetEwkSettings(); + ewk_settings_scripts_can_open_windows_set(settings, true); + thiz->CloseMenu(); + thiz->ShowNotification("JS window.open enabled"); +} + +void WindowUI::OnScriptWindowOpenDisabled(void* data, Evas_Object* obj, void*) { + log_trace("%s", __PRETTY_FUNCTION__); + WindowUI* thiz = static_cast(data); + Ewk_Settings* settings = thiz->window_.GetEwkSettings(); + ewk_settings_scripts_can_open_windows_set(settings, false); + thiz->CloseMenu(); + thiz->ShowNotification("JS window.open disabled"); +} + void WindowUI::ClosePopup(void* data, Evas_Object*, void*) { WindowUI* thiz = static_cast(data); evas_object_del(thiz->active_popup_); thiz->active_popup_ = NULL; } +void WindowUI::ClosePopup() { + if (active_popup_) { + evas_object_del(active_popup_); + active_popup_ = NULL; + } +} + void WindowUI::OnShowZoomPopup(void* data, Evas_Object* obj, void*) { log_trace("%s", __PRETTY_FUNCTION__); WindowUI* thiz = static_cast(data); diff --git a/tizen_src/ewk/ubrowser/window_ui.h b/tizen_src/ewk/ubrowser/window_ui.h index 940e38b..0a05495 100644 --- a/tizen_src/ewk/ubrowser/window_ui.h +++ b/tizen_src/ewk/ubrowser/window_ui.h @@ -33,16 +33,28 @@ class WindowUI { void EnableBackButton(bool); void EnableForwardButton(bool); - void ShowNotification(const char* text); void ShowPermissionPopup(const char* title, const char* description, PermissionCallback, void* data); + void ShowInspectorURLPopup(const char* url); + + void OnThemeColorChanged(int r, int g, int b, int a); + void ClosePopup(); private: + void CreateTopBar(); + void CreateBottomBar(); Evas_Object* AddButton(Evas_Object*, const char*, const char*, Evas_Smart_Cb); Evas_Object* CreateExtraActionsMenu(Evas_Object*); void ShowTextEntryPopup(const char* title, const char* initial_content, Evas_Smart_Cb); + void ShowNotification(const char* text); +#if defined(PWE_SUPPORT) + void ShowTextEntriesPopup(const char* title, + const std::vector& keys, + Evas_Smart_Cb cb); +#endif + void CloseMenu(); // Nav bar callbacks @@ -61,6 +73,7 @@ class WindowUI { static void OnUAOverrideEntered(void* data, Evas_Object*, void*); static void OnInspectorShow(void* data, Evas_Object*, void*); static void OnInspectorServerStart(void* data, Evas_Object* obj, void*); + static void OnUseGoogleDataProxy(void* data, Evas_Object* obj, void*); static void OnRotate(void* data, Evas_Object*, void*); static void OnSelectMouseInput(void* data, Evas_Object*, void*); static void OnSelectTouchInput(void* data, Evas_Object*, void*); @@ -71,6 +84,9 @@ class WindowUI { static void OnAutoFillEnabled(void* data, Evas_Object*, void*); static void OnAutoFillDisabled(void* data, Evas_Object*, void*); + static void OnScriptWindowOpenEnabled(void* data, Evas_Object* obj, void*); + static void OnScriptWindowOpenDisabled(void* data, Evas_Object* obj, void*); + static void ClosePopup(void* data, Evas_Object*, void*); static void OnShowZoomPopup(void* data, Evas_Object*, void*); static void OnZoomChanged(void* data, Evas_Object*, void*); @@ -96,7 +112,15 @@ class WindowUI { Evas_Object* active_popup_; Evas_Object* menu_; + bool should_show_label_; bool is_loading_; + + struct Color { + int r; + int g; + int b; + int a; + } url_entry_color_; }; #endif // _WINDOW_UI_H_ -- 2.7.4 From 1b0a5e2ab0ecc4664480270bd3d463a0d341e485 Mon Sep 17 00:00:00 2001 From: Gajendra N Date: Wed, 28 Oct 2020 18:12:51 +0530 Subject: [PATCH 11/16] Remove EWK_BRINGUP at few places in tizen_src This patch removes EWK_BRINGUP only in tizen_src directory so that the changes can be permanently merged to tizen.dev branch Change-Id: I7a7728fe9563d6855a338af1c64d0da295060d99 Signed-off-by: Gajendra N (cherry picked from commit 3d11ad70ca0335ce8905522d3d6fe8e8bc6e68a5) --- .../browser/renderer_host/render_widget_host_view_efl.cc | 5 ++--- tizen_src/ewk/efl_integration/eweb_context.cc | 11 ----------- tizen_src/ewk/efl_integration/eweb_context.h | 1 - tizen_src/ewk/efl_integration/private/ewk_context_private.cc | 4 ---- tizen_src/ewk/efl_integration/private/ewk_context_private.h | 1 - .../ewk/efl_integration/url_request_context_getter_efl.cc | 4 ---- tizen_src/ewk/ubrowser/window.cc | 3 --- 7 files changed, 2 insertions(+), 27 deletions(-) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc index d56e933..9028452 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc @@ -552,13 +552,12 @@ void RenderWidgetHostViewEfl::SetSize(const gfx::Size& size) { // This is a hack. See WebContentsView::SizeContents int width = std::min(size.width(), EFL_MAX_WIDTH); int height = std::min(size.height(), EFL_MAX_HEIGHT); -#if !defined(EWK_BRINGUP) // FIXME: m71 bringup - if (popup_type_ != blink::kWebPopupTypeNone) { + if (widget_type_ == WidgetType::kPopup) { // We're a popup, honor the size request. Ecore_Evas* ee = ecore_evas_ecore_evas_get(evas_); ecore_evas_resize(ee, width, height); } -#endif + // Update the size of the RWH. // if (requested_size_.width() != width || // requested_size_.height() != height) { diff --git a/tizen_src/ewk/efl_integration/eweb_context.cc b/tizen_src/ewk/efl_integration/eweb_context.cc index dd11cba..74113c7 100644 --- a/tizen_src/ewk/efl_integration/eweb_context.cc +++ b/tizen_src/ewk/efl_integration/eweb_context.cc @@ -450,17 +450,6 @@ bool EWebContext::GetNetworkCacheEnable() const { #endif } -void EWebContext::AddExtraPluginDir(const char* path) { -#if defined(ENABLE_PLUGINS) -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - // [M51_2704] The AddExtraPluginDir API was removed in content::PluginList - // class. It will be fixed by webview team. - // FIXME: http://suprem.sec.samsung.net/jira/browse/TWF-1132 - content::PluginList::Singleton()->AddExtraPluginDir(base::FilePath(path)); -#endif // EWK_BRINGUP -#endif -} - void EWebContext::SetCertificate(const char* certificate_file) { browser_context_->SetCertificate(certificate_file); } diff --git a/tizen_src/ewk/efl_integration/eweb_context.h b/tizen_src/ewk/efl_integration/eweb_context.h index 83c1d16..e6f94ca 100644 --- a/tizen_src/ewk/efl_integration/eweb_context.h +++ b/tizen_src/ewk/efl_integration/eweb_context.h @@ -91,7 +91,6 @@ class EWebContext { void ClearNetworkCache(); void ClearWebkitCache(); - void AddExtraPluginDir(const char *path); void SetCertificate(const char* certificate_file); void SetCacheModel(Ewk_Cache_Model); diff --git a/tizen_src/ewk/efl_integration/private/ewk_context_private.cc b/tizen_src/ewk/efl_integration/private/ewk_context_private.cc index 60f115a..ef5cd9e 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_context_private.cc +++ b/tizen_src/ewk/efl_integration/private/ewk_context_private.cc @@ -104,10 +104,6 @@ const char* Ewk_Context::GetProxyUri() const { return impl->GetProxyUri(); } -void Ewk_Context::AddExtraPluginDir(const char *path) { - impl->AddExtraPluginDir(path); -} - void Ewk_Context::NotifyLowMemory() { impl->NotifyLowMemory(); } diff --git a/tizen_src/ewk/efl_integration/private/ewk_context_private.h b/tizen_src/ewk/efl_integration/private/ewk_context_private.h index 53befd0..050b60b 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_context_private.h +++ b/tizen_src/ewk/efl_integration/private/ewk_context_private.h @@ -48,7 +48,6 @@ struct Ewk_Context : public base::RefCounted { const char* GetProxyUri() const; // System - void AddExtraPluginDir(const char *path); void NotifyLowMemory(); // HTTP Custom Header diff --git a/tizen_src/ewk/efl_integration/url_request_context_getter_efl.cc b/tizen_src/ewk/efl_integration/url_request_context_getter_efl.cc index 30cdb96..dcceca7 100644 --- a/tizen_src/ewk/efl_integration/url_request_context_getter_efl.cc +++ b/tizen_src/ewk/efl_integration/url_request_context_getter_efl.cc @@ -104,10 +104,6 @@ net::URLRequestContext* URLRequestContextGetterEfl::GetURLRequestContext() { new net::URLRequestContextStorage(url_request_context_.get())); storage_->set_cookie_store( CreateCookieStore(CookieStoreConfig(), net_log_)); -#if !defined(EWK_BRINGUP) // FIXME: m76 bringup - storage_->set_channel_id_service(base::WrapUnique( - new net::ChannelIDService(new net::DefaultChannelIDStore(NULL)))); -#endif storage_->set_http_user_agent_settings( base::WrapUnique(new HttpUserAgentSettingsEfl())); diff --git a/tizen_src/ewk/ubrowser/window.cc b/tizen_src/ewk/ubrowser/window.cc index f652715..254a6a0 100644 --- a/tizen_src/ewk/ubrowser/window.cc +++ b/tizen_src/ewk/ubrowser/window.cc @@ -462,10 +462,7 @@ void Window::On_Video_Playback_Stop(void* data, Window* thiz = static_cast(data); char translated_url[] = "http://www.w3schools.com/html/mov_bbb.mp4"; // for test - // TODO: Once the ewk api is added, remove EWK_BRINGUP -#if !defined(EWK_BRINGUP) ewk_media_translated_url_set(thiz->web_view_, translated_url); -#endif } #if defined(TIZEN_TBM_SUPPORT) -- 2.7.4 From 3ad94341501eff9f6540e64f3d50f1f269d77368 Mon Sep 17 00:00:00 2001 From: Gajendra N Date: Wed, 4 Nov 2020 19:38:52 +0530 Subject: [PATCH 12/16] Replace PermissionManagerEfl with PermissionControllerDelegateEfl This patch applies necessary changes to Permissions related code, so that it can be permanently applied to tizen.dev branch. Also does some cleanup related to obsolete AccessTokerStoreEfl class. (Cherry-picked from b1465410ee517f6badae82fa072d4b449df411e7) Change-Id: Icf257bb843fb9e73c366c8ece040551e830cc132 Signed-off-by: Gajendra N --- tizen_src/ewk/efl_integration/BUILD.gn | 10 +- .../browser/geolocation/access_token_store_efl.cc | 50 ---- .../browser/geolocation/access_token_store_efl.h | 39 ---- .../geolocation_permission_context_efl.cc | 8 +- .../geolocation_permission_context_efl.h | 1 + .../browser/permission_manager_efl.cc | 154 ------------ .../browser/permission_manager_efl.h | 69 ------ .../ewk/efl_integration/browser_context_efl.cc | 7 +- .../ewk/efl_integration/browser_context_efl.h | 1 + .../permission_controller_delegate_efl.cc | 258 +++++++++++++++++++++ .../permission_controller_delegate_efl.h | 81 +++++++ 11 files changed, 354 insertions(+), 324 deletions(-) delete mode 100644 tizen_src/ewk/efl_integration/browser/geolocation/access_token_store_efl.cc delete mode 100644 tizen_src/ewk/efl_integration/browser/geolocation/access_token_store_efl.h delete mode 100644 tizen_src/ewk/efl_integration/browser/permission_manager_efl.cc delete mode 100644 tizen_src/ewk/efl_integration/browser/permission_manager_efl.h create mode 100644 tizen_src/ewk/efl_integration/permission_controller_delegate_efl.cc create mode 100644 tizen_src/ewk/efl_integration/permission_controller_delegate_efl.h diff --git a/tizen_src/ewk/efl_integration/BUILD.gn b/tizen_src/ewk/efl_integration/BUILD.gn index ee7a55d..c048742 100644 --- a/tizen_src/ewk/efl_integration/BUILD.gn +++ b/tizen_src/ewk/efl_integration/BUILD.gn @@ -195,8 +195,6 @@ shared_library("chromium-ewk") { "browser/mime_override_manager_efl.h", "browser/navigation_policy_handler_efl.cc", "browser/navigation_policy_handler_efl.h", - "browser/permission_manager_efl.cc", - "browser/permission_manager_efl.h", "browser/policy_response_delegate_efl.cc", "browser/policy_response_delegate_efl.h", "browser/quota_permission_context_efl.cc", @@ -251,6 +249,8 @@ shared_library("chromium-ewk") { "network_delegate_efl.h", "notification_permission_popup.cc", "notification_permission_popup.h", + "permission_controller_delegate_efl.cc", + "permission_controller_delegate_efl.h", "permission_popup.h", "permission_popup_manager.cc", "permission_popup_manager.h", @@ -288,8 +288,6 @@ shared_library("chromium-ewk") { "browser/favicon/favicon_database_p.h", "browser/favicon/favicon_downloader.cc", "browser/favicon/favicon_downloader.h", - "browser/geolocation/access_token_store_efl.cc", - "browser/geolocation/access_token_store_efl.h", "browser/geolocation/geolocation_permission_context_efl.cc", "browser/geolocation/geolocation_permission_context_efl.h", "browser/geolocation/location_provider_efl.cc", @@ -562,10 +560,6 @@ shared_library("chromium-ewk") { # FIXME: Followings are guarded just for bringup. if (ewk_bringup) { sources -= [ - "browser/geolocation/access_token_store_efl.cc", - "browser/geolocation/access_token_store_efl.h", - "browser/geolocation/geolocation_permission_context_efl.cc", - "browser/geolocation/geolocation_permission_context_efl.h", "browser/geolocation/location_provider_efl.cc", "browser/geolocation/location_provider_efl.h", "browser/vibration/vibration_provider_client.cc", diff --git a/tizen_src/ewk/efl_integration/browser/geolocation/access_token_store_efl.cc b/tizen_src/ewk/efl_integration/browser/geolocation/access_token_store_efl.cc deleted file mode 100644 index 0139d185..0000000 --- a/tizen_src/ewk/efl_integration/browser/geolocation/access_token_store_efl.cc +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2013 Samsung Electronics. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "browser/geolocation/access_token_store_efl.h" - -#include "base/bind.h" -#include "base/message_loop/message_loop.h" -#include "base/strings/utf_string_conversions.h" -#include "content/public/browser/browser_thread.h" -#include "eweb_context.h" -#include "ewk_global_data.h" -#include "private/ewk_context_private.h" - -namespace device { - -AccessTokenStoreEfl::AccessTokenStoreEfl() - : system_request_context_(NULL) -{ -} - -AccessTokenStoreEfl::~AccessTokenStoreEfl() -{ -} - -void AccessTokenStoreEfl::LoadAccessTokens(const LoadAccessTokensCallback& callback) -{ - content::BrowserThread::PostTaskAndReply( - content::BrowserThread::UI, FROM_HERE, - base::Bind(&AccessTokenStoreEfl::GetRequestContextOnUIThread, this), - base::Bind(&AccessTokenStoreEfl::RespondOnOriginatingThread, this, - callback)); -} - -void AccessTokenStoreEfl::GetRequestContextOnUIThread() -{ - system_request_context_ = EwkGlobalData::GetInstance()->GetSystemRequestContextGetter(); -} - -void AccessTokenStoreEfl::RespondOnOriginatingThread(const LoadAccessTokensCallback& callback) -{ - AccessTokenMap access_token_map; - callback.Run(access_token_map, system_request_context_); -} - -void AccessTokenStoreEfl::SaveAccessToken(const GURL& /*server_url*/, const base::string16& /*access_token*/) -{ -} - -} // namespace device diff --git a/tizen_src/ewk/efl_integration/browser/geolocation/access_token_store_efl.h b/tizen_src/ewk/efl_integration/browser/geolocation/access_token_store_efl.h deleted file mode 100644 index 87f7768..0000000 --- a/tizen_src/ewk/efl_integration/browser/geolocation/access_token_store_efl.h +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2013 Samsung Electronics. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ACCESS_TOKEN_STORE_EFL_H_ -#define ACCESS_TOKEN_STORE_EFL_H_ - -#include "browser_context_efl.h" -#include "device/geolocation/access_token_store.h" - -namespace content { -class BrowserContextEfl; -} - -namespace device { - -class AccessTokenStoreEfl : public device::AccessTokenStore { - public: - AccessTokenStoreEfl(); - - // AccessTokenStore - virtual void LoadAccessTokens(const LoadAccessTokensCallback& callback) override; - virtual void SaveAccessToken(const GURL& server_url, const base::string16& access_token) override; - - private: - virtual ~AccessTokenStoreEfl(); - - void GetRequestContextOnUIThread(); - void RespondOnOriginatingThread(const LoadAccessTokensCallback& callback); - - net::URLRequestContextGetter* system_request_context_; - - DISALLOW_COPY_AND_ASSIGN(AccessTokenStoreEfl); -}; - -} // namespace device - -#endif // ACCESS_TOKEN_STORE_EFL_H_ - diff --git a/tizen_src/ewk/efl_integration/browser/geolocation/geolocation_permission_context_efl.cc b/tizen_src/ewk/efl_integration/browser/geolocation/geolocation_permission_context_efl.cc index b878e38..e952ad4 100644 --- a/tizen_src/ewk/efl_integration/browser/geolocation/geolocation_permission_context_efl.cc +++ b/tizen_src/ewk/efl_integration/browser/geolocation/geolocation_permission_context_efl.cc @@ -21,6 +21,8 @@ GeolocationPermissionContextEfl::GeolocationPermissionContextEfl() : weak_ptr_factory_(this) { } +GeolocationPermissionContextEfl::~GeolocationPermissionContextEfl() {} + void GeolocationPermissionContextEfl::RequestPermissionOnUIThread( int render_process_id, int render_frame_id, @@ -28,8 +30,10 @@ void GeolocationPermissionContextEfl::RequestPermissionOnUIThread( base::Callback callback) const { DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); WebContents* web_contents = WebContentsFromFrameID(render_process_id, render_frame_id); - if (!web_contents) + if (!web_contents) { + callback.Run(PermissionStatus::DENIED); return; + } EWebView* web_view = WebViewFromWebContents(web_contents); @@ -69,7 +73,7 @@ void GeolocationPermissionContextEfl::RequestPermission( int render_frame_id, const GURL& requesting_frame, base::Callback callback) const { - base::PostTaskWithTraits( + base::PostTask( FROM_HERE, {BrowserThread::UI}, base::Bind(&GeolocationPermissionContextEfl::RequestPermissionOnUIThread, weak_ptr_factory_.GetWeakPtr(), render_process_id, diff --git a/tizen_src/ewk/efl_integration/browser/geolocation/geolocation_permission_context_efl.h b/tizen_src/ewk/efl_integration/browser/geolocation/geolocation_permission_context_efl.h index 67a47a5..0da4868 100644 --- a/tizen_src/ewk/efl_integration/browser/geolocation/geolocation_permission_context_efl.h +++ b/tizen_src/ewk/efl_integration/browser/geolocation/geolocation_permission_context_efl.h @@ -17,6 +17,7 @@ namespace content { class GeolocationPermissionContextEfl final { public: GeolocationPermissionContextEfl(); + ~GeolocationPermissionContextEfl(); // The renderer is requesting permission to use Geolocation. // When the answer to a permission request has been determined, |callback| diff --git a/tizen_src/ewk/efl_integration/browser/permission_manager_efl.cc b/tizen_src/ewk/efl_integration/browser/permission_manager_efl.cc deleted file mode 100644 index 2f721c0..0000000 --- a/tizen_src/ewk/efl_integration/browser/permission_manager_efl.cc +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2015 Samsung Electronics. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "permission_manager_efl.h" - -#include "base/callback.h" -#include "browser/geolocation/geolocation_permission_context_efl.h" -#include "browser/notification/notification_controller_efl.h" -#include "browser_context_efl.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/permission_controller.h" -#include "content/public/browser/permission_type.h" -#include "content/public/browser/render_frame_host.h" -#include "content/public/browser/render_process_host.h" -#include "content/public/browser/web_contents.h" -#include "content_browser_client_efl.h" -#include "content_main_delegate_efl.h" -#include "ewk_global_data.h" - -using namespace blink::mojom; - -namespace content { - -PermissionManagerEfl::PermissionManagerEfl() { -} - -PermissionManagerEfl::~PermissionManagerEfl() { -} - -int PermissionManagerEfl::RequestPermission( - PermissionType permission, - content::RenderFrameHost* render_frame_host, - const GURL& requesting_origin, - bool user_gesture, - base::OnceCallback callback) { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - // [M48_2564] Temporary disabling the codes for switching to new chromium - // FIXME: http://web.sec.samsung.net/bugzilla/show_bug.cgi?id=15387 - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - - content::WebContents* web_contents = - content::WebContents::FromRenderFrameHost(render_frame_host); - - switch (permission) { - case PermissionType::GEOLOCATION: { - BrowserContextEfl* browser_context = - static_cast(web_contents->GetBrowserContext()); - if (!browser_context) { - LOG(ERROR) << "Dropping GeolocationPermission request"; - callback.Run(PermissionStatus::PERMISSION_STATUS_DENIED); - return; - } - - const GeolocationPermissionContextEfl& geolocation_permission_context = - browser_context->GetGeolocationPermissionContext(); - - int render_process_id = render_frame_host->GetProcess()->GetID(); - int render_frame_id = render_frame_host->GetRoutingID(); - - geolocation_permission_context.RequestPermission(render_process_id, - render_frame_id, - requesting_origin, - callback); - break; - } - case PermissionType::NOTIFICATIONS: - { -#if defined(ENABLE_NOTIFICATIONS) - ContentMainDelegateEfl& cmde = - EwkGlobalData::GetInstance()->GetContentMainDelegateEfl(); - ContentBrowserClientEfl* cbce = - static_cast(cmde.GetContentBrowserClient()); - if (!cbce) { - LOG(ERROR) << "Dropping NotificationPermission request"; - callback.Run(PermissionStatus::PERMISSION_STATUS_DENIED); - return; - } - - cbce->GetNotificationController()->RequestPermission(web_contents, - requesting_origin, - callback); - -#else - callback.Run(PermissionStatus::PERMISSION_STATUS_DENIED); -#endif - break; - } - case PermissionType::PROTECTED_MEDIA_IDENTIFIER: - case PermissionType::MIDI_SYSEX: - case PermissionType::PUSH_MESSAGING: { - NOTIMPLEMENTED() << "RequestPermission not implemented for " - << static_cast(permission); - callback.Run(PermissionStatus::PERMISSION_STATUS_DENIED); - break; - } - default: { - NOTREACHED() << "Invalid RequestPermission for " - << static_cast(permission); - } - } -#else - NOTIMPLEMENTED(); - return PermissionController::kNoPendingOperation; -#endif -} - -int PermissionManagerEfl::RequestPermissions( - const std::vector& permission, - RenderFrameHost* render_frame_host, - const GURL& requesting_origin, - bool user_gesture, - base::OnceCallback&)> callback) { - NOTIMPLEMENTED(); - return PermissionController::kNoPendingOperation; -} - -PermissionStatus PermissionManagerEfl::GetPermissionStatus( - PermissionType permission, - const GURL& requesting_origin, - const GURL& embedding_origin) { - return PermissionStatus::DENIED; -} - -blink::mojom::PermissionStatus -PermissionManagerEfl::GetPermissionStatusForFrame( - PermissionType permission, - content::RenderFrameHost* render_frame_host, - const GURL& requesting_origin) { - return GetPermissionStatus( - permission, requesting_origin, - content::WebContents::FromRenderFrameHost(render_frame_host) - ->GetLastCommittedURL() - .GetOrigin()); -} - -void PermissionManagerEfl::ResetPermission(PermissionType permission, - const GURL& requesting_origin, - const GURL& embedding_origin) { -} - -int PermissionManagerEfl::SubscribePermissionStatusChange( - PermissionType permission, - content::RenderFrameHost* render_frame_host, - const GURL& requesting_origin, - base::RepeatingCallback callback) { - return -1; -} - -void PermissionManagerEfl::UnsubscribePermissionStatusChange( - int subscription_id) { -} - -} diff --git a/tizen_src/ewk/efl_integration/browser/permission_manager_efl.h b/tizen_src/ewk/efl_integration/browser/permission_manager_efl.h deleted file mode 100644 index e0a85b7..0000000 --- a/tizen_src/ewk/efl_integration/browser/permission_manager_efl.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef PERMISSION_MANAGER_EFL_H_ -#define PERMISSION_MANAGER_EFL_H_ - -#include "base/callback_forward.h" -#include "base/macros.h" -#include "content/public/browser/permission_controller_delegate.h" - -namespace content { - -class CONTENT_EXPORT PermissionManagerEfl - : public PermissionControllerDelegate { - public: - - PermissionManagerEfl(); - ~PermissionManagerEfl() override; - - int RequestPermission(PermissionType permission, - RenderFrameHost* render_frame_host, - const GURL& requesting_origin, - bool user_gesture, - base::OnceCallback - callback) override; - - int RequestPermissions( - const std::vector& permission, - RenderFrameHost* render_frame_host, - const GURL& requesting_origin, - bool user_gesture, - base::OnceCallback< - void(const std::vector&)> callback) - override; - - blink::mojom::PermissionStatus GetPermissionStatus( - PermissionType permission, - const GURL& requesting_origin, - const GURL& embedding_origin) override; - - blink::mojom::PermissionStatus GetPermissionStatusForFrame( - PermissionType permission, - RenderFrameHost* render_frame_host, - const GURL& requesting_origin) override; - - void ResetPermission(PermissionType permission, - const GURL& requesting_origin, - const GURL& embedding_origin) override; - - // Runs the given |callback| whenever the |permission| associated with the - // pair { requesting_origin, embedding_origin } changes. - // Returns the subscription_id to be used to unsubscribe. - int SubscribePermissionStatusChange( - PermissionType permission, - content::RenderFrameHost* render_frame_host, - const GURL& requesting_origin, - base::RepeatingCallback callback) - override; - - void UnsubscribePermissionStatusChange(int subscription_id) override; - - private: - DISALLOW_COPY_AND_ASSIGN(PermissionManagerEfl); -}; - -} - -#endif // PERMISSION_MANAGER_EFL_H_ diff --git a/tizen_src/ewk/efl_integration/browser_context_efl.cc b/tizen_src/ewk/efl_integration/browser_context_efl.cc index 6563b9d..6389bc1 100644 --- a/tizen_src/ewk/efl_integration/browser_context_efl.cc +++ b/tizen_src/ewk/efl_integration/browser_context_efl.cc @@ -10,7 +10,6 @@ #include "base/synchronization/waitable_event.h" #include "browser/autofill/personal_data_manager_factory.h" #include "browser/geolocation/geolocation_permission_context_efl.h" -#include "browser/permission_manager_efl.h" #include "browser/webdata/web_data_service_factory.h" #include "components/autofill/core/browser/personal_data_manager.h" #include "components/password_manager/core/common/password_manager_pref_names.h" @@ -27,6 +26,7 @@ #include "content/public/browser/web_contents.h" #include "eweb_context.h" #include "network_delegate_efl.h" +#include "permission_controller_delegate_efl.h" using namespace prefs; using namespace password_manager::prefs; @@ -317,7 +317,10 @@ SSLHostStateDelegate* BrowserContextEfl::GetSSLHostStateDelegate() { PermissionControllerDelegate* BrowserContextEfl::GetPermissionControllerDelegate() { - return nullptr; + if (!permission_controller_delegate_.get()) + permission_controller_delegate_.reset(new PermissionControllerDelegateEfl()); + + return permission_controller_delegate_.get(); } const GeolocationPermissionContextEfl& diff --git a/tizen_src/ewk/efl_integration/browser_context_efl.h b/tizen_src/ewk/efl_integration/browser_context_efl.h index 2f8f8fb..b5b9405 100644 --- a/tizen_src/ewk/efl_integration/browser_context_efl.h +++ b/tizen_src/ewk/efl_integration/browser_context_efl.h @@ -142,6 +142,7 @@ class BrowserContextEfl : public BrowserContext, const bool incognito_; std::unique_ptr network_delegate_for_getter_; std::unique_ptr ssl_host_state_delegate_; + std::unique_ptr permission_controller_delegate_; DISALLOW_COPY_AND_ASSIGN(BrowserContextEfl); }; diff --git a/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.cc b/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.cc new file mode 100644 index 0000000..ddafca7 --- /dev/null +++ b/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.cc @@ -0,0 +1,258 @@ +// Copyright 2015 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "permission_controller_delegate_efl.h" + +#include "base/callback.h" +#include "browser_context_efl.h" +#include "browser/geolocation/geolocation_permission_context_efl.h" +#include "browser/notification/notification_controller_efl.h" +#include "content_browser_client_efl.h" +#include "content_main_delegate_efl.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/permission_controller.h" +#include "content/public/browser/permission_type.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/render_process_host.h" +#include "content/public/browser/web_contents.h" +#include "ewk_global_data.h" + +using namespace blink::mojom; + +namespace content { + +struct PermissionControllerDelegateEfl::PendingRequest { + PendingRequest(const std::vector& permission_types, + content::RenderFrameHost* render_frame_host, + PermissionStatusVectorCallback callback) + : permission_types_(permission_types), + render_process_id_(render_frame_host->GetProcess()->GetID()), + render_frame_id_(render_frame_host->GetRoutingID()), + callback_(std::move(callback)), + results_(permission_types.size(), PermissionStatus::DENIED), + remaining_results_(permission_types.size()) {} + + void SetPermissionStatus(int permission_id, + PermissionStatus permission_status) { + DCHECK(!IsComplete()); + + results_[permission_id] = permission_status; + --remaining_results_; + } + + bool IsComplete() const { return remaining_results_ == 0; } + + PermissionStatusVectorCallback callback() { return std::move(callback_); } + + std::vector results() const { return results_; } + + std::vector permission_types_; + int render_process_id_; + int render_frame_id_; + PermissionStatusVectorCallback callback_; + std::vector results_; + size_t remaining_results_; +}; + +PermissionControllerDelegateEfl::PermissionControllerDelegateEfl() : weak_ptr_factory_(this) { +} + +PermissionControllerDelegateEfl::~PermissionControllerDelegateEfl() { +} + +void PermissionStatusCallbackWrapper( + PermissionStatusCallback callback, + const std::vector& permission_status_list) { + DCHECK_EQ(1ul, permission_status_list.size()); + std::move(callback).Run(permission_status_list[0]); +} + +int PermissionControllerDelegateEfl::RequestPermission( + PermissionType permission, + content::RenderFrameHost* render_frame_host, + const GURL& requesting_origin, + bool user_gesture, + PermissionStatusCallback callback) { + return RequestPermissions( + std::vector(1, permission), render_frame_host, + requesting_origin, user_gesture, + base::BindOnce(&PermissionStatusCallbackWrapper, std::move(callback))); +} + +int PermissionControllerDelegateEfl::RequestPermissions( + const std::vector& permissions, + RenderFrameHost* render_frame_host, + const GURL& requesting_origin, + bool user_gesture, + PermissionStatusVectorCallback callback) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + + if (permissions.empty()) { + std::move(callback).Run(std::vector()); + return content::PermissionController::kNoPendingOperation; + } + + content::WebContents* web_contents = + content::WebContents::FromRenderFrameHost(render_frame_host); + + PendingRequest* pending_request = + new PendingRequest(permissions, render_frame_host, std::move(callback)); + int request_id = pending_requests_.Add(pending_request); + + for (auto i = 0; i < permissions.size(); ++i) { + const auto& permission = permissions[i]; + switch (permission) { + case PermissionType::GEOLOCATION: { + BrowserContextEfl* browser_context = + static_cast(web_contents->GetBrowserContext()); + if (!browser_context) { + LOG(ERROR) << "Dropping GeolocationPermission request"; + OnPermissionRequestResponse(request_id, i, PermissionStatus::DENIED); + continue; + } + + const GeolocationPermissionContextEfl& geolocation_permission_context = + browser_context->GetGeolocationPermissionContext(); + + geolocation_permission_context.RequestPermission( + pending_request->render_process_id_, + pending_request->render_frame_id_, requesting_origin, + base::Bind(&PermissionControllerDelegateEfl::OnPermissionRequestResponse, + weak_ptr_factory_.GetWeakPtr(), request_id, i)); + break; + } +#if defined(ENABLE_NOTIFICATIONS) + case PermissionType::NOTIFICATIONS: { + ContentMainDelegateEfl& cmde = + EwkGlobalData::GetInstance()->GetContentMainDelegatEfl(); + ContentBrowserClientEfl* cbce = static_cast( + cmde.GetContentBrowserClient()); + if (!cbce) { + LOG(ERROR) << "Dropping NotificationPermission request"; + OnPermissionRequestResponse(request_id, i, PermissionStatus::DENIED); + continue; + } + + cbce->GetNotificationController()->RequestPermission( + web_contents, requesting_origin, + base::Bind(&PermissionControllerDelegateEfl::OnPermissionRequestResponse, + weak_ptr_factory_.GetWeakPtr(), request_id, i)); + break; + } +#endif + case PermissionType::PROTECTED_MEDIA_IDENTIFIER: + case PermissionType::MIDI_SYSEX: { + NOTIMPLEMENTED() << "RequestPermission not implemented for " + << static_cast(permission); + OnPermissionRequestResponse(request_id, i, PermissionStatus::DENIED); + break; + } + case PermissionType::SENSORS: { + NOTIMPLEMENTED() << "RequestPermission not implemented for " + << static_cast(permission); + // TODO(gajendra.n): Implement SensorPermissionContextEfl similar to + // GeolocationPermissionContextEfl. For now, by default permission is + // set as GRANTED to enable the feature funtionality working. + OnPermissionRequestResponse(request_id, i, PermissionStatus::GRANTED); + break; + } + default: { + NOTREACHED() << "Invalid RequestPermission for " + << static_cast(permission); + } + } + } + + return request_id; +} + +void PermissionControllerDelegateEfl::OnPermissionRequestResponse( + int request_id, + int permission_id, + PermissionStatus permission_status) { + PendingRequest* pending_request = pending_requests_.Lookup(request_id); + if (!pending_request) + return; + + pending_request->SetPermissionStatus(permission_id, permission_status); + + if (!pending_request->IsComplete()) + return; + + pending_requests_.Remove(request_id); + pending_request->callback().Run(pending_request->results()); +} + +PermissionStatus PermissionControllerDelegateEfl::GetPermissionStatus( + PermissionType permission, + const GURL& requesting_origin, + const GURL& embedding_origin) { + switch (permission) { +#if defined(ENABLE_NOTIFICATIONS) + case PermissionType::NOTIFICATIONS: { + // requesting_origin should be the same as embedding_origin + // using push API from iframes are not allowed + if (requesting_origin != embedding_origin) + return PermissionStatus::DENIED; + + ContentMainDelegateEfl& cmde = + EwkGlobalData::GetInstance()->GetContentMainDelegatEfl(); + ContentBrowserClientEfl* cbce = + static_cast(cmde.GetContentBrowserClient()); + if (!cbce) { + LOG(ERROR) << "Dropping NotificationPermission request"; + return PermissionStatus::DENIED; + } + + PermissionStatus notification_status = + cbce->GetNotificationController()->CheckPermissionOnIOThread( + nullptr, requesting_origin, 0); + + LOG(INFO) << "GetPermissionStatus() type:" << static_cast(permission) + << ", status: " << notification_status; + + return notification_status; + } +#endif + case PermissionType::PROTECTED_MEDIA_IDENTIFIER: + return PermissionStatus::GRANTED; + default: + return PermissionStatus::DENIED; + } +} + +blink::mojom::PermissionStatus +PermissionControllerDelegateEfl::GetPermissionStatusForFrame( + PermissionType permission, + content::RenderFrameHost* render_frame_host, + const GURL& requesting_origin) { + return GetPermissionStatus( + permission, requesting_origin, + content::WebContents::FromRenderFrameHost(render_frame_host) + ->GetLastCommittedURL() + .GetOrigin()); +} + +void PermissionControllerDelegateEfl::ResetPermission(PermissionType permission, + const GURL& requesting_origin, + const GURL& embedding_origin) { + NOTIMPLEMENTED(); +} + +int PermissionControllerDelegateEfl::SubscribePermissionStatusChange( + PermissionType permission, + content::RenderFrameHost* render_frame_host, + const GURL& embedding_origin, + base::RepeatingCallback + callback) { + NOTIMPLEMENTED(); + return -1; +} + +void PermissionControllerDelegateEfl::UnsubscribePermissionStatusChange( + int subscription_id) { + NOTIMPLEMENTED(); +} + +} // namespace content diff --git a/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.h b/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.h new file mode 100644 index 0000000..2fd4bfc --- /dev/null +++ b/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.h @@ -0,0 +1,81 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef PERMISSION_CONTROLLER_DELEGATE_EFL_H_ +#define PERMISSION_CONTROLLER_DELEGATE_EFL_H_ + +#include "base/callback_forward.h" +#include "base/containers/id_map.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "content/public/browser/permission_controller_delegate.h" + +namespace content { + +using PermissionStatusCallback = base::OnceCallback; +using PermissionStatusVectorCallback = + base::OnceCallback&)>; + +class CONTENT_EXPORT PermissionControllerDelegateEfl : public PermissionControllerDelegate { + public: + + PermissionControllerDelegateEfl(); + ~PermissionControllerDelegateEfl() override; + + int RequestPermission(PermissionType permission, + content::RenderFrameHost* render_frame_host, + const GURL& requesting_origin, + bool user_gesture, + PermissionStatusCallback callback) override; + + int RequestPermissions( + const std::vector& permissions, + RenderFrameHost* render_frame_host, + const GURL& requesting_origin, + bool user_gesture, + PermissionStatusVectorCallback callback) override; + + blink::mojom::PermissionStatus GetPermissionStatus(PermissionType permission, + const GURL& requesting_origin, + const GURL& embedding_origin) override; + + blink::mojom::PermissionStatus GetPermissionStatusForFrame( + PermissionType permission, + RenderFrameHost* render_frame_host, + const GURL& requesting_origin) override; + + void ResetPermission(PermissionType permission, + const GURL& requesting_origin, + const GURL& embedding_origin) override; + + // Runs the given |callback| whenever the |permission| associated with the + // pair { requesting_origin, embedding_origin } changes. + // Returns the subscription_id to be used to unsubscribe. + int SubscribePermissionStatusChange( + PermissionType permission, + RenderFrameHost* render_frame_host, + const GURL& embedding_origin, + base::RepeatingCallback + callback) override; + + void UnsubscribePermissionStatusChange(int subscription_id) override; + + private: + struct PendingRequest; + using PendingRequestsMap = base::IDMap; + + void OnPermissionRequestResponse(int request_id, + int permission_id, + blink::mojom::PermissionStatus permission_status); + + PendingRequestsMap pending_requests_; + base::WeakPtrFactory weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(PermissionControllerDelegateEfl); +}; + +} + +#endif // PERMISSION_CONTROLLER_DELEGATE_EFL_H_ + -- 2.7.4 From c48408bf1265e86cfd17db70631a0cc37178b1ab Mon Sep 17 00:00:00 2001 From: Gajendra N Date: Mon, 2 Nov 2020 22:24:35 +0530 Subject: [PATCH 13/16] [M85 Migration] Update Accept-Language field on platform language change The original patch[1] updated accept languages only for http header. However we should update it for RendererPreferences as well, because it can be required by JS script, such as navigator.language. This patch moves listener for accept languages from HttpUserAgentSettingsEfl to ContentBrowserClientEfl and stores it. Plus, sychronizes with renderer whenever accept language or preferred language is changed. [1]: https://review.tizen.org/gerrit/#/c/95478/ Reference: https://review.tizen.org/gerrit/229501 (Cherry-picked from 21f645fc7510973ce8b636f9e9f597c877281ad2) Change-Id: I509663a5bfb398ca7797426bfd277ae03738695c Signed-off-by: Gajendra N --- .../efl_integration/content_browser_client_efl.cc | 94 +++++++++++++++++++++- .../efl_integration/content_browser_client_efl.h | 14 ++++ tizen_src/ewk/efl_integration/eweb_view.cc | 17 ++++ tizen_src/ewk/efl_integration/eweb_view.h | 6 ++ .../http_user_agent_settings_efl.cc | 16 +--- .../efl_integration/http_user_agent_settings_efl.h | 10 +-- .../ewk/efl_integration/public/ewk_context.cc | 41 ++++++++-- 7 files changed, 170 insertions(+), 28 deletions(-) diff --git a/tizen_src/ewk/efl_integration/content_browser_client_efl.cc b/tizen_src/ewk/efl_integration/content_browser_client_efl.cc index 7ba928f..85f3601 100644 --- a/tizen_src/ewk/efl_integration/content_browser_client_efl.cc +++ b/tizen_src/ewk/efl_integration/content_browser_client_efl.cc @@ -32,6 +32,7 @@ #if !defined(EWK_BRINGUP) #include "browser/geolocation/location_provider_efl.h" #endif +#include #include "content/browser/speech/tts_message_filter_efl.h" #endif @@ -48,17 +49,52 @@ using content::BrowserThread; namespace content { +namespace { + +const char* const kDefaultAcceptLanguages = "en-us,en"; + +#if defined(OS_TIZEN) +void PlatformLanguageChanged(keynode_t* keynode, void* data) { + char* lang = vconf_get_str(VCONFKEY_LANGSET); + if (!lang) + return; + + std::string accept_languages(lang); + std::replace(accept_languages.begin(), accept_languages.end(), '_', '-'); + + size_t dot_position = accept_languages.find('.'); + if (dot_position != std::string::npos) + accept_languages = accept_languages.substr(0, dot_position); + + static_cast(data)->SetAcceptLangs( + accept_languages); + + free(lang); +} +#endif // defined(OS_TIZEN) + +} // namespace + ContentBrowserClientEfl::ContentBrowserClientEfl() : browser_main_parts_efl_(nullptr), #if defined(ENABLE_NOTIFICATIONS) notification_controller_(new NotificationControllerEfl), #endif - browser_context_efl_(nullptr) { + browser_context_efl_(nullptr), + accept_langs_(kDefaultAcceptLanguages) { +#if defined(OS_TIZEN) + PlatformLanguageChanged(nullptr, this); + vconf_notify_key_changed(VCONFKEY_LANGSET, PlatformLanguageChanged, this); +#endif } ContentBrowserClientEfl::~ContentBrowserClientEfl() { if (browser_context_efl_) delete browser_context_efl_; + +#if defined(OS_TIZEN) + vconf_ignore_key_changed(VCONFKEY_LANGSET, PlatformLanguageChanged); +#endif } std::unique_ptr @@ -361,4 +397,60 @@ std::string ContentBrowserClientEfl::GetProduct() { std::string ContentBrowserClientEfl::GetUserAgent() { return EflWebView::VersionInfo::GetInstance()->DefaultUserAgent(); } + +std::string ContentBrowserClientEfl::GetAcceptLangs(BrowserContext* context) { + if (!preferred_langs_.empty()) + return preferred_langs_; + + return accept_langs_; +} + +void ContentBrowserClientEfl::SetAcceptLangs(const std::string& accept_langs) { + if (accept_langs.empty() || accept_langs_ == accept_langs) + return; + + accept_langs_ = accept_langs; + + if (preferred_langs_.empty()) + NotifyAcceptLangsChanged(); +} + +void ContentBrowserClientEfl::SetPreferredLangs( + const std::string& preferred_langs) { + if (preferred_langs_ == preferred_langs) + return; + + preferred_langs_ = preferred_langs; + + NotifyAcceptLangsChanged(); +} + +void ContentBrowserClientEfl::AddAcceptLangsChangedCallback( + const AcceptLangsChangedCallback& callback) { + accept_langs_changed_callbacks_.push_back(callback); +} + +void ContentBrowserClientEfl::RemoveAcceptLangsChangedCallback( + const AcceptLangsChangedCallback& callback) { + for (size_t i = 0; i < accept_langs_changed_callbacks_.size(); ++i) { + if (accept_langs_changed_callbacks_[i] == callback) { + accept_langs_changed_callbacks_.erase( + accept_langs_changed_callbacks_.begin() + i); + return; + } + } +} + +void ContentBrowserClientEfl::NotifyAcceptLangsChanged() { + for (const AcceptLangsChangedCallback& callback : + accept_langs_changed_callbacks_) { + if (!callback.is_null()) { + if (preferred_langs_.empty()) + callback.Run(accept_langs_); + else + callback.Run(preferred_langs_); + } + } +} + } diff --git a/tizen_src/ewk/efl_integration/content_browser_client_efl.h b/tizen_src/ewk/efl_integration/content_browser_client_efl.h index 13823a6..7494684 100644 --- a/tizen_src/ewk/efl_integration/content_browser_client_efl.h +++ b/tizen_src/ewk/efl_integration/content_browser_client_efl.h @@ -33,6 +33,7 @@ class ContentBrowserClientEfl : public ContentBrowserClient { ContentBrowserClientEfl(); ~ContentBrowserClientEfl() override; + typedef base::Callback AcceptLangsChangedCallback; std::unique_ptr CreateBrowserMainParts( const MainFunctionParams& parameters) override; @@ -111,6 +112,14 @@ class ContentBrowserClientEfl : public ContentBrowserClient { std::string GetProduct() override; std::string GetUserAgent() override; + std::string GetAcceptLangs(BrowserContext* context) override; + void SetAcceptLangs(const std::string& accept_langs); + void SetPreferredLangs(const std::string& preferred_langs); + void AddAcceptLangsChangedCallback( + const AcceptLangsChangedCallback& callback); + void RemoveAcceptLangsChangedCallback( + const AcceptLangsChangedCallback& callback); + private: scoped_refptr GetSystemSharedURLLoaderFactory() override; @@ -121,6 +130,8 @@ class ContentBrowserClientEfl : public ContentBrowserClient { static void DispatchPopupBlockedOnUIThread(int render_process_id, const GURL& target_url); + void NotifyAcceptLangsChanged(); + BrowserMainPartsEfl* browser_main_parts_efl_; #if defined(ENABLE_NOTIFICATIONS) @@ -132,6 +143,9 @@ class ContentBrowserClientEfl : public ContentBrowserClient { // URLLoaderFactory backed by the NetworkContext returned by GetContext(), so // consumers don't all need to create their own factory. scoped_refptr shared_url_loader_factory_; + std::string accept_langs_; + std::string preferred_langs_; + std::vector accept_langs_changed_callbacks_; DISALLOW_COPY_AND_ASSIGN(ContentBrowserClientEfl); }; diff --git a/tizen_src/ewk/efl_integration/eweb_view.cc b/tizen_src/ewk/efl_integration/eweb_view.cc index 5960294..bace01b 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.cc +++ b/tizen_src/ewk/efl_integration/eweb_view.cc @@ -213,9 +213,21 @@ void EWebView::Initialize() { // allow this object and its children to get a focus elm_object_tree_focus_allow_set(native_view_, EINA_TRUE); is_initialized_ = true; + + auto cbce = static_cast( + content::GetContentClientExport()->browser()); + // Initialize accept languages + SyncAcceptLanguages(cbce->GetAcceptLangs(nullptr)); + accept_langs_changed_callback_ = + base::Bind(&EWebView::SyncAcceptLanguages, base::Unretained(this)); + cbce->AddAcceptLangsChangedCallback(accept_langs_changed_callback_); } EWebView::~EWebView() { + auto cbce = static_cast( + content::GetContentClientExport()->browser()); + cbce->RemoveAcceptLangsChangedCallback(accept_langs_changed_callback_); + std::map::iterator hit_test_callback_iterator; for (hit_test_callback_iterator = hit_test_callback_.begin(); @@ -2121,6 +2133,11 @@ void EWebView::InvokeWebProcessCrashedCallback() { last_url.possibly_invalid_spec().c_str()); } +void EWebView::SyncAcceptLanguages(const std::string& accept_languages) { + web_contents_->GetMutableRendererPrefs()->accept_languages = accept_languages; + web_contents_->SyncRendererPrefs(); +} + void EWebView::HandleRendererProcessCrash() { base::PostTask(FROM_HERE, {BrowserThread::UI}, base::Bind(&EWebView::InvokeWebProcessCrashedCallback, diff --git a/tizen_src/ewk/efl_integration/eweb_view.h b/tizen_src/ewk/efl_integration/eweb_view.h index 071ba8d..9d3a3fc 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.h +++ b/tizen_src/ewk/efl_integration/eweb_view.h @@ -31,6 +31,7 @@ #include "content/public/browser/web_contents_efl_delegate.h" #include "content/public/common/input_event_ack_state.h" #include "content/public/common/menu_item.h" +#include "content_browser_client_efl.h" #include "context_menu_controller_efl.h" #include "eweb_context.h" #include "eweb_view_callbacks.h" @@ -474,6 +475,8 @@ class EWebView { void HandleZoomGesture(blink::WebGestureEvent& event); void ClosePage(); + void SyncAcceptLanguages(const std::string& accept_languages); + private: void InitializeContent(); void SendDelayedMessages(content::RenderViewHost* render_view_host); @@ -610,6 +613,9 @@ class EWebView { std::vector delayed_messages_; std::map hit_test_callback_; + + content::ContentBrowserClientEfl::AcceptLangsChangedCallback + accept_langs_changed_callback_; }; const unsigned int g_default_tilt_motion_sensitivity = 3; diff --git a/tizen_src/ewk/efl_integration/http_user_agent_settings_efl.cc b/tizen_src/ewk/efl_integration/http_user_agent_settings_efl.cc index 738aa0f..0f33529 100644 --- a/tizen_src/ewk/efl_integration/http_user_agent_settings_efl.cc +++ b/tizen_src/ewk/efl_integration/http_user_agent_settings_efl.cc @@ -5,12 +5,7 @@ #include "http_user_agent_settings_efl.h" #include "content/common/content_client_export.h" -#include "content/public/common/content_client.h" - -namespace { - const std::string ACCEPT_LANGUAGES_DEFAULT_VALUE = "en-us,en"; - std::string accept_language_ = ACCEPT_LANGUAGES_DEFAULT_VALUE; -} +#include "content/public/browser/content_browser_client.h" HttpUserAgentSettingsEfl::HttpUserAgentSettingsEfl() { } @@ -18,15 +13,8 @@ HttpUserAgentSettingsEfl::HttpUserAgentSettingsEfl() { HttpUserAgentSettingsEfl::~HttpUserAgentSettingsEfl() { } -void HttpUserAgentSettingsEfl::SetAcceptLanguage(const std::string& accept_language) { - if (accept_language.length() == 0) { - return; - } - accept_language_ = accept_language; -} - std::string HttpUserAgentSettingsEfl::GetAcceptLanguage() const { - return accept_language_; + return content::GetContentClientExport()->browser()->GetAcceptLangs(nullptr); } std::string HttpUserAgentSettingsEfl::GetUserAgent() const { diff --git a/tizen_src/ewk/efl_integration/http_user_agent_settings_efl.h b/tizen_src/ewk/efl_integration/http_user_agent_settings_efl.h index db45c98..0365e89 100644 --- a/tizen_src/ewk/efl_integration/http_user_agent_settings_efl.h +++ b/tizen_src/ewk/efl_integration/http_user_agent_settings_efl.h @@ -16,15 +16,13 @@ class HttpUserAgentSettingsEfl : public net::HttpUserAgentSettings { public: HttpUserAgentSettingsEfl(); - virtual ~HttpUserAgentSettingsEfl(); - - // Set Accept language. In case when empty argument is passed keep previously assigned. - static void SetAcceptLanguage(const std::string&); + ~HttpUserAgentSettingsEfl() override; // HttpUserAgentSettings implementation - virtual std::string GetAcceptLanguage() const override; - virtual std::string GetUserAgent() const override; + std::string GetAcceptLanguage() const override; + std::string GetUserAgent() const override; + private: DISALLOW_COPY_AND_ASSIGN(HttpUserAgentSettingsEfl); }; diff --git a/tizen_src/ewk/efl_integration/public/ewk_context.cc b/tizen_src/ewk/efl_integration/public/ewk_context.cc index d4da429..89c0f12 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_context.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_context.cc @@ -29,7 +29,9 @@ #include "browser/favicon/favicon_database_p.h" #include "browser/vibration/vibration_provider_client.h" #include "browser_context_efl.h" -#include "http_user_agent_settings_efl.h" +#include "content_browser_client_efl.h" +#include "content_main_delegate_efl.h" +#include "ewk_global_data.h" #include "public/ewk_security_origin.h" #include "private/ewk_context_private.h" #include "private/ewk_private.h" @@ -38,6 +40,24 @@ #include "private/ewk_cookie_manager_private.h" #include "private/ewk_context_form_autofill_profile_private.h" +using content::ContentBrowserClientEfl; +using content::ContentMainDelegateEfl; + +namespace { +ContentBrowserClientEfl* GetContentBrowserClient() { + if (!EwkGlobalData::IsInitialized()) { + return nullptr; + } + + ContentMainDelegateEfl& cmde = + EwkGlobalData::GetInstance()->GetContentMainDelegateEfl(); + ContentBrowserClientEfl* cbce = + static_cast(cmde.GetContentBrowserClient()); + + return cbce; +} +} + Ewk_Context *ewk_context_ref(Ewk_Context *context) { EINA_SAFETY_ON_NULL_RETURN_VAL(context, NULL); @@ -608,22 +628,29 @@ Eina_Bool ewk_context_favicon_database_directory_set(Ewk_Context* ewkContext, co void ewk_context_preferred_languages_set(Eina_List* languages) { - std::string preferredLanguages; + ContentBrowserClientEfl* cbce = GetContentBrowserClient(); + EINA_SAFETY_ON_NULL_RETURN(cbce); + + std::string preferred_languages; Eina_List* it; void* data; EINA_LIST_FOREACH(languages, it, data) { if (data) { - preferredLanguages.append(static_cast(data)); + preferred_languages.append(static_cast(data)); if (it->next) { - preferredLanguages.append(","); + preferred_languages.append(","); } } } - std::transform(preferredLanguages.begin(), preferredLanguages.end(), preferredLanguages.begin(), ::tolower); - std::replace(preferredLanguages.begin(), preferredLanguages.end(), '_', '-'); - HttpUserAgentSettingsEfl::SetAcceptLanguage(preferredLanguages); + std::transform(preferred_languages.begin(), + preferred_languages.end(), + preferred_languages.begin(), ::tolower); + std::replace(preferred_languages.begin(), + preferred_languages.end(), '_', '-'); + + cbce->SetPreferredLangs(preferred_languages); } Ewk_Storage_Manager* ewk_context_storage_manager_get(const Ewk_Context* ewkContext) -- 2.7.4 From 82e3a33d8607cd527da568dbfdbf739c5359fb71 Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Fri, 30 Oct 2020 18:32:09 +0530 Subject: [PATCH 14/16] [M85 Migration] Remove EWK_BRINGUP related to ViewMsg_UpdateRotationDegrees This IPC is not currently required as DeviceDisplayInfoEfl's rotation degrees is not used in the renderer process. Reference: https://review.tizen.org/gerrit/224916/ Change-Id: Ia65c0da48c056126a3c3d914c7577b47f9dfe317 Signed-off-by: Chandan Padhi (cherry picked from commit af43c246080b463e555fa2c6072e7da78f61461a) --- .../content/browser/renderer_host/render_widget_host_view_efl.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc index 9028452..6b9542c 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc @@ -321,10 +321,6 @@ bool RenderWidgetHostViewEfl::MakeCurrent() { void RenderWidgetHostViewEfl::UpdateRotationDegrees(int rotation_degrees) { display::DeviceDisplayInfoEfl display_info; display_info.SetRotationDegrees(rotation_degrees); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - Send(new ViewMsg_UpdateRotationDegrees(host_->GetRoutingID(), - display_info.GetRotationDegrees())); -#endif } Evas_GL_API* RenderWidgetHostViewEfl::GetEvasGLAPI() { -- 2.7.4 From a91e1c3a5b50aa7c7c898315a0e52d18dfe3baff Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Tue, 3 Nov 2020 19:18:34 +0530 Subject: [PATCH 15/16] Remove EWK_BRINGUP related to WebCursor This commit enables WebCursor related code under EWK_BRINGUP after making changes as per chromium upstream. Change-Id: I2c0b364c0155086d9d63a4894bad5436baa61838 Signed-off-by: Chandan Padhi (cherry picked from commit e756d39b2e6a4e1d7b1575f18d1dbd107e309e4e) --- .../renderer_host/render_widget_host_view_efl.cc | 15 +- .../content/common/cursors/webcursor_efl.cc | 236 +++++++++------------ .../content/common/cursors/webcursor_efl.h | 6 +- 3 files changed, 109 insertions(+), 148 deletions(-) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc index 6b9542c..431cc9e 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc @@ -659,7 +659,6 @@ void RenderWidgetHostViewEfl::OnDidHandleKeyEvent( } void RenderWidgetHostViewEfl::UpdateCursor(const WebCursor& webcursor) { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup if (is_loading_) { // Setting native Loading cursor #if defined(USE_WAYLAND) @@ -671,26 +670,24 @@ void RenderWidgetHostViewEfl::UpdateCursor(const WebCursor& webcursor) { #else ecore_x_window_cursor_set(GetEcoreXWindow(), ecore_x_cursor_shape_get(ECORE_X_CURSOR_CLOCK)); -#endif +#endif // defined(USE_WAYLAND) } else { - CursorInfo cursor_info; - webcursor.GetCursorInfo(&cursor_info); + const ui::Cursor& cursor = webcursor.cursor(); #if defined(USE_WAYLAND) #if TIZEN_VERSION_AT_LEAST(5, 0, 0) ecore_wl2_window_cursor_from_name_set(GetEcoreWlWindow(), - GetCursorName(cursor_info.type)); + GetCursorName(cursor.type())); #else ecore_wl_window_cursor_from_name_set(GetEcoreWlWindow(), - GetCursorName(cursor_info.type)); + GetCursorName(cursor.type())); #endif // TIZEN_VERSION_AT_LEAST(5, 0, 0) #else - int cursor_type = GetCursorType(cursor_info.type); + int cursor_type = GetCursorType(cursor.type()); ecore_x_window_cursor_set(GetEcoreXWindow(), ecore_x_cursor_shape_get(cursor_type)); -#endif +#endif // defined(USE_WAYLAND) } -#endif // EWK_BRINGUP } void RenderWidgetHostViewEfl::SetIsLoading(bool is_loading) { diff --git a/tizen_src/chromium_impl/content/common/cursors/webcursor_efl.cc b/tizen_src/chromium_impl/content/common/cursors/webcursor_efl.cc index a155967..b3e9b95 100644 --- a/tizen_src/chromium_impl/content/common/cursors/webcursor_efl.cc +++ b/tizen_src/chromium_impl/content/common/cursors/webcursor_efl.cc @@ -9,196 +9,158 @@ #include "base/logging.h" #if defined(USE_WAYLAND) -const char* GetCursorName(int type) { -#if defined(EWK_BRINGUP) // FIXME: m85 bringup - return "left_ptr"; -#else +const char* GetCursorName(ui::mojom::CursorType type) { switch (type) { - case WebCursorInfo::kTypePointer: - return "left_ptr"; - case WebCursorInfo::kTypeCross: - return "left_ptr"; // ECORE_X_CURSOR_CROSS - case WebCursorInfo::kTypeHand: + case ui::mojom::CursorType::kPointer: + case ui::mojom::CursorType::kCross: + case ui::mojom::CursorType::kHelp: + case ui::mojom::CursorType::kNone: + case ui::mojom::CursorType::kNotAllowed: + case ui::mojom::CursorType::kZoomIn: + case ui::mojom::CursorType::kZoomOut: + case ui::mojom::CursorType::kMiddlePanning: + case ui::mojom::CursorType::kMove: + case ui::mojom::CursorType::kCustom: + return "left_ptr"; // ECORE_X_CURSOR_FLEUR + case ui::mojom::CursorType::kHand: return "hand1"; - case WebCursorInfo::kTypeIBeam: + case ui::mojom::CursorType::kIBeam: + case ui::mojom::CursorType::kVerticalText: + case ui::mojom::CursorType::kCell: + case ui::mojom::CursorType::kContextMenu: + case ui::mojom::CursorType::kAlias: + case ui::mojom::CursorType::kNoDrop: + case ui::mojom::CursorType::kCopy: return "xterm"; - case WebCursorInfo::kTypeWait: + case ui::mojom::CursorType::kProgress: + case ui::mojom::CursorType::kWait: return "watch"; - case WebCursorInfo::kTypeHelp: - return "left_ptr"; // ECORE_X_CURSOR_QUESTION_ARROW - case WebCursorInfo::kTypeEastResize: - return "right_side"; - case WebCursorInfo::kTypeNorthResize: - return "top_side"; - case WebCursorInfo::kTypeNorthEastResize: - return "top_right_corner"; - case WebCursorInfo::kTypeNorthWestResize: - return "top_left_corner"; - case WebCursorInfo::kTypeSouthResize: - return "bottom_side"; - case WebCursorInfo::kTypeSouthEastResize: - return "bottom_right_corner"; - case WebCursorInfo::kTypeSouthWestResize: - return "bottom_left_corner"; - case WebCursorInfo::kTypeWestResize: - return "left_side"; - case WebCursorInfo::kTypeNorthSouthResize: - return "top_side"; // ECORE_X_CURSOR_SB_V_DOUBLE_ARROW - case WebCursorInfo::kTypeEastWestResize: - return "left_side"; // ECORE_X_CURSOR_SB_H_DOUBLE_ARROW - case WebCursorInfo::kTypeNorthEastSouthWestResize: - return "top_right_corner"; - case WebCursorInfo::kTypeNorthWestSouthEastResize: - return "top_left_corner"; - case WebCursorInfo::kTypeColumnResize: - return "left_side"; // ECORE_X_CURSOR_SB_H_DOUBLE_ARROW - case WebCursorInfo::kTypeRowResize: - return "top_side"; // ECORE_X_CURSOR_SB_V_DOUBLE_ARROW - case WebCursorInfo::kTypeMiddlePanning: - return "left_ptr"; // ECORE_X_CURSOR_FLEUR - case WebCursorInfo::kTypeEastPanning: - return "right_side"; // ECORE_X_CURSOR_SB_RIGHT_ARROW - case WebCursorInfo::kTypeNorthPanning: - return "top_side"; // ECORE_X_CURSOR_SB_UP_ARROW - case WebCursorInfo::kTypeNorthEastPanning: - return "top_right_corner"; // ECORE_X_CURSOR_TOP_RIGHT_CORNER - case WebCursorInfo::kTypeNorthWestPanning: - return "top_left_corner"; // ECORE_X_CURSOR_TOP_LEFT_CORNER - case WebCursorInfo::kTypeSouthPanning: - return "bottom_side"; // ECORE_X_CURSOR_SB_DOWN_ARROW - case WebCursorInfo::kTypeSouthEastPanning: - return "botton_right_corner"; // ECORE_X_CURSOR_BOTTOM_RIGHT_CORNER - case WebCursorInfo::kTypeSouthWestPanning: - return "botton_left_corner"; // ECORE_X_CURSOR_BOTTOM_LEFT_CORNER - case WebCursorInfo::kTypeWestPanning: - return "left_side"; //ECORE_X_CURSOR_SB_LEFT_ARROW - case WebCursorInfo::kTypeMove: - return "left_ptr"; //ECORE_X_CURSOR_FLEUR - case WebCursorInfo::kTypeVerticalText: - return "xterm"; - case WebCursorInfo::kTypeCell: - return "xterm"; - case WebCursorInfo::kTypeContextMenu: - return "xterm"; - case WebCursorInfo::kTypeAlias: - return "xterm"; - case WebCursorInfo::kTypeProgress: - return "watch"; - case WebCursorInfo::kTypeNoDrop: - return "xterm"; - case WebCursorInfo::kTypeCopy: - return "xterm"; - case WebCursorInfo::kTypeNone: - return "left_ptr"; - case WebCursorInfo::kTypeNotAllowed: - return "left_ptr"; - case WebCursorInfo::kTypeZoomIn: - return "left_ptr"; - case WebCursorInfo::kTypeZoomOut: - return "left_ptr"; - case WebCursorInfo::kTypeGrab: - case WebCursorInfo::kTypeGrabbing: + case ui::mojom::CursorType::kNorthResize: + case ui::mojom::CursorType::kRowResize: + case ui::mojom::CursorType::kNorthPanning: + case ui::mojom::CursorType::kNorthSouthResize: + return "top_side"; // ECORE_X_CURSOR_SB_V_DOUBLE_ARROW + case ui::mojom::CursorType::kEastResize: + case ui::mojom::CursorType::kEastPanning: + return "right_side"; // ECORE_X_CURSOR_SB_RIGHT_ARROW + case ui::mojom::CursorType::kSouthResize: + case ui::mojom::CursorType::kSouthPanning: + return "bottom_side"; // ECORE_X_CURSOR_SB_DOWN_ARROW + case ui::mojom::CursorType::kWestResize: + case ui::mojom::CursorType::kEastWestResize: + case ui::mojom::CursorType::kColumnResize: + case ui::mojom::CursorType::kWestPanning: + return "left_side"; // ECORE_X_CURSOR_SB_H_DOUBLE_ARROW + case ui::mojom::CursorType::kNorthEastResize: + case ui::mojom::CursorType::kNorthEastPanning: + case ui::mojom::CursorType::kNorthEastSouthWestResize: + return "top_right_corner"; // ECORE_X_CURSOR_TOP_RIGHT_CORNER + case ui::mojom::CursorType::kNorthWestResize: + case ui::mojom::CursorType::kNorthWestPanning: + case ui::mojom::CursorType::kNorthWestSouthEastResize: + return "top_left_corner"; // ECORE_X_CURSOR_TOP_LEFT_CORNER + case ui::mojom::CursorType::kSouthEastResize: + case ui::mojom::CursorType::kSouthEastPanning: + return "bottom_right_corner"; // ECORE_X_CURSOR_BOTTOM_RIGHT_CORNER + case ui::mojom::CursorType::kSouthWestResize: + case ui::mojom::CursorType::kSouthWestPanning: + return "bottom_left_corner"; // ECORE_X_CURSOR_BOTTOM_LEFT_CORNER + case ui::mojom::CursorType::kGrab: + case ui::mojom::CursorType::kGrabbing: return "grabbing"; - case WebCursorInfo::kTypeCustom: - return "left_ptr"; } NOTREACHED(); return "left_ptr"; -#endif // EWK_BRINGUP } #else -int GetCursorType(int type) { -#if defined(EWK_BRINGUP) // FIXME: m85 bringup - return ECORE_X_CURSOR_XTERM; -#else +int GetCursorType(ui::mojom::CursorType type) { switch (type) { - case WebCursorInfo::kTypePointer: + case ui::mojom::CursorType::kPointer: return ECORE_X_CURSOR_ARROW; - case WebCursorInfo::kTypeCross: + case ui::mojom::CursorType::kCross: return ECORE_X_CURSOR_CROSS; - case WebCursorInfo::kTypeHand: + case ui::mojom::CursorType::kHand: return ECORE_X_CURSOR_HAND2; - case WebCursorInfo::kTypeIBeam: + case ui::mojom::CursorType::kIBeam: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeWait: + case ui::mojom::CursorType::kWait: return ECORE_X_CURSOR_WATCH; - case WebCursorInfo::kTypeHelp: + case ui::mojom::CursorType::kHelp: return ECORE_X_CURSOR_QUESTION_ARROW; - case WebCursorInfo::kTypeEastResize: + case ui::mojom::CursorType::kEastResize: return ECORE_X_CURSOR_RIGHT_SIDE; - case WebCursorInfo::kTypeNorthResize: + case ui::mojom::CursorType::kNorthResize: return ECORE_X_CURSOR_TOP_SIDE; - case WebCursorInfo::kTypeNorthEastResize: + case ui::mojom::CursorType::kNorthEastResize: return ECORE_X_CURSOR_TOP_RIGHT_CORNER; - case WebCursorInfo::kTypeNorthWestResize: + case ui::mojom::CursorType::kNorthWestResize: return ECORE_X_CURSOR_TOP_LEFT_CORNER; - case WebCursorInfo::kTypeSouthResize: + case ui::mojom::CursorType::kSouthResize: return ECORE_X_CURSOR_BOTTOM_SIDE; - case WebCursorInfo::kTypeSouthEastResize: + case ui::mojom::CursorType::kSouthEastResize: return ECORE_X_CURSOR_BOTTOM_RIGHT_CORNER; - case WebCursorInfo::kTypeSouthWestResize: + case ui::mojom::CursorType::kSouthWestResize: return ECORE_X_CURSOR_BOTTOM_LEFT_CORNER; - case WebCursorInfo::kTypeWestResize: + case ui::mojom::CursorType::kWestResize: return ECORE_X_CURSOR_LEFT_SIDE; - case WebCursorInfo::kTypeNorthSouthResize: + case ui::mojom::CursorType::kNorthSouthResize: return ECORE_X_CURSOR_SB_V_DOUBLE_ARROW; - case WebCursorInfo::kTypeEastWestResize: + case ui::mojom::CursorType::kEastWestResize: return ECORE_X_CURSOR_SB_H_DOUBLE_ARROW; - case WebCursorInfo::kTypeNorthEastSouthWestResize: - case WebCursorInfo::kTypeNorthWestSouthEastResize: + case ui::mojom::CursorType::kNorthEastSouthWestResize: + case ui::mojom::CursorType::kNorthWestSouthEastResize: // There isn't really a useful cursor available for these. return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeColumnResize: + case ui::mojom::CursorType::kColumnResize: return ECORE_X_CURSOR_SB_H_DOUBLE_ARROW; // TODO(evanm): is this correct? - case WebCursorInfo::kTypeRowResize: + case ui::mojom::CursorType::kRowResize: return ECORE_X_CURSOR_SB_V_DOUBLE_ARROW; // TODO(evanm): is this correct? - case WebCursorInfo::kTypeMiddlePanning: + case ui::mojom::CursorType::kMiddlePanning: return ECORE_X_CURSOR_FLEUR; - case WebCursorInfo::kTypeEastPanning: + case ui::mojom::CursorType::kEastPanning: return ECORE_X_CURSOR_SB_RIGHT_ARROW; - case WebCursorInfo::kTypeNorthPanning: + case ui::mojom::CursorType::kNorthPanning: return ECORE_X_CURSOR_SB_UP_ARROW; - case WebCursorInfo::kTypeNorthEastPanning: + case ui::mojom::CursorType::kNorthEastPanning: return ECORE_X_CURSOR_TOP_RIGHT_CORNER; - case WebCursorInfo::kTypeNorthWestPanning: + case ui::mojom::CursorType::kNorthWestPanning: return ECORE_X_CURSOR_TOP_LEFT_CORNER; - case WebCursorInfo::kTypeSouthPanning: + case ui::mojom::CursorType::kSouthPanning: return ECORE_X_CURSOR_SB_DOWN_ARROW; - case WebCursorInfo::kTypeSouthEastPanning: + case ui::mojom::CursorType::kSouthEastPanning: return ECORE_X_CURSOR_BOTTOM_RIGHT_CORNER; - case WebCursorInfo::kTypeSouthWestPanning: + case ui::mojom::CursorType::kSouthWestPanning: return ECORE_X_CURSOR_BOTTOM_LEFT_CORNER; - case WebCursorInfo::kTypeWestPanning: + case ui::mojom::CursorType::kWestPanning: return ECORE_X_CURSOR_SB_LEFT_ARROW; - case WebCursorInfo::kTypeMove: + case ui::mojom::CursorType::kMove: return ECORE_X_CURSOR_FLEUR; - case WebCursorInfo::kTypeVerticalText: + case ui::mojom::CursorType::kVerticalText: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeCell: + case ui::mojom::CursorType::kCell: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeContextMenu: + case ui::mojom::CursorType::kContextMenu: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeAlias: + case ui::mojom::CursorType::kAlias: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeProgress: + case ui::mojom::CursorType::kProgress: return ECORE_X_CURSOR_WATCH; - case WebCursorInfo::kTypeNoDrop: + case ui::mojom::CursorType::kNoDrop: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeCopy: + case ui::mojom::CursorType::kCopy: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeNone: + case ui::mojom::CursorType::kNone: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeNotAllowed: + case ui::mojom::CursorType::kNotAllowed: return ECORE_X_CURSOR_XTERM; - case WebCursorInfo::kTypeZoomIn: - case WebCursorInfo::kTypeZoomOut: - case WebCursorInfo::kTypeGrab: - case WebCursorInfo::kTypeGrabbing: - case WebCursorInfo::kTypeCustom: + case ui::mojom::CursorType::kZoomIn: + case ui::mojom::CursorType::kZoomOut: + case ui::mojom::CursorType::kGrab: + case ui::mojom::CursorType::kGrabbing: + case ui::mojom::CursorType::kCustom: return ECORE_X_CURSOR_XTERM; // Need to check the ECORE_X_CURSOR_XTERM } NOTREACHED(); return ECORE_X_CURSOR_XTERM; -#endif // EWK_BRINGUP } #endif // defined(USE_WAYLAND) diff --git a/tizen_src/chromium_impl/content/common/cursors/webcursor_efl.h b/tizen_src/chromium_impl/content/common/cursors/webcursor_efl.h index c6a5ea1..00784d8 100644 --- a/tizen_src/chromium_impl/content/common/cursors/webcursor_efl.h +++ b/tizen_src/chromium_impl/content/common/cursors/webcursor_efl.h @@ -5,10 +5,12 @@ #ifndef WEBCURSOR_EFL_H #define WEBCURSOR_EFL_H +#include "ui/base/cursor/mojom/cursor_type.mojom-shared.h" + #if defined(USE_WAYLAND) -const char* GetCursorName(int type); +const char* GetCursorName(ui::mojom::CursorType type); #else -int GetCursorType(int type); +int GetCursorType(ui::mojom::CursorType type); #endif #endif -- 2.7.4 From bca564c7a3799bb2ba277ff8a9e7ac1ba2dc204d Mon Sep 17 00:00:00 2001 From: Insoon Kim Date: Wed, 8 Apr 2020 18:26:38 +0530 Subject: [PATCH 16/16] [M85 Migration] Support ServiceWorker Background Sync This patch treats a permission for background sync as notification permission. Reference: https://review.tizen.org/gerrit/230275 Change-Id: I72930b95fce8ba0f2d5a06ea455456c3b43bd027 Signed-off-by: Gajendra N --- tizen_src/ewk/efl_integration/BUILD.gn | 2 ++ .../browser/background_sync_controller_efl.cc | 19 +++++++++++++ .../browser/background_sync_controller_efl.h | 31 ++++++++++++++++++++++ .../ewk/efl_integration/browser_context_efl.cc | 5 +++- .../ewk/efl_integration/browser_context_efl.h | 1 + .../permission_controller_delegate_efl.cc | 1 + 6 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 tizen_src/ewk/efl_integration/browser/background_sync_controller_efl.cc create mode 100644 tizen_src/ewk/efl_integration/browser/background_sync_controller_efl.h diff --git a/tizen_src/ewk/efl_integration/BUILD.gn b/tizen_src/ewk/efl_integration/BUILD.gn index c048742..68cfc7f 100644 --- a/tizen_src/ewk/efl_integration/BUILD.gn +++ b/tizen_src/ewk/efl_integration/BUILD.gn @@ -179,6 +179,8 @@ shared_library("chromium-ewk") { sources += [ "autofill_popup_view_efl.cc", "autofill_popup_view_efl.h", + "browser/background_sync_controller_efl.cc", + "browser/background_sync_controller_efl.h", "browser/browsing_data_remover_efl.cc", "browser/browsing_data_remover_efl.h", "browser/download_manager_delegate_efl.cc", diff --git a/tizen_src/ewk/efl_integration/browser/background_sync_controller_efl.cc b/tizen_src/ewk/efl_integration/browser/background_sync_controller_efl.cc new file mode 100644 index 0000000..d4b57cc --- /dev/null +++ b/tizen_src/ewk/efl_integration/browser/background_sync_controller_efl.cc @@ -0,0 +1,19 @@ +// Copyright 2020 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "background_sync_controller_efl.h" + +base::TimeDelta BackgroundSyncControllerEfl::GetNextEventDelay( + const content::BackgroundSyncRegistration& registration, + content::BackgroundSyncParameters* parameters, + base::TimeDelta time_till_soonest_scheduled_event_for_origin) { + NOTIMPLEMENTED(); + return base::TimeDelta::Max(); +} + +std::unique_ptr +BackgroundSyncControllerEfl::CreateBackgroundSyncEventKeepAlive() { + NOTIMPLEMENTED(); + return nullptr; +} diff --git a/tizen_src/ewk/efl_integration/browser/background_sync_controller_efl.h b/tizen_src/ewk/efl_integration/browser/background_sync_controller_efl.h new file mode 100644 index 0000000..18c7618 --- /dev/null +++ b/tizen_src/ewk/efl_integration/browser/background_sync_controller_efl.h @@ -0,0 +1,31 @@ +// Copyright 2020 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BACKGROUND_SYNC_CONTROLLER_EFL_H_ +#define BACKGROUND_SYNC_CONTROLLER_EFL_H_ + +#include "content/public/browser/background_sync_controller.h" + +class BackgroundSyncControllerEfl : public content::BackgroundSyncController { + public: + BackgroundSyncControllerEfl() = default; + ~BackgroundSyncControllerEfl() override = default; + + private: + // content::BackgroundSyncController overrides. + base::TimeDelta GetNextEventDelay( + const content::BackgroundSyncRegistration& registration, + content::BackgroundSyncParameters* parameters, + base::TimeDelta time_till_soonest_scheduled_event_for_origin) override; + std::unique_ptr + CreateBackgroundSyncEventKeepAlive() override; + void NoteSuspendedPeriodicSyncOrigins( + std::set suspended_origins) override {} + void NoteRegisteredPeriodicSyncOrigins( + std::set registered_origins) override {} + void AddToTrackedOrigins(const url::Origin& origin) override {} + void RemoveFromTrackedOrigins(const url::Origin& origin) override {} +}; + +#endif // BACKGROUND_SYNC_CONTROLLER_EFL_H_ diff --git a/tizen_src/ewk/efl_integration/browser_context_efl.cc b/tizen_src/ewk/efl_integration/browser_context_efl.cc index 6389bc1..eeb7144 100644 --- a/tizen_src/ewk/efl_integration/browser_context_efl.cc +++ b/tizen_src/ewk/efl_integration/browser_context_efl.cc @@ -9,6 +9,7 @@ #include "base/path_service.h" #include "base/synchronization/waitable_event.h" #include "browser/autofill/personal_data_manager_factory.h" +#include "browser/background_sync_controller_efl.h" #include "browser/geolocation/geolocation_permission_context_efl.h" #include "browser/webdata/web_data_service_factory.h" #include "components/autofill/core/browser/personal_data_manager.h" @@ -198,7 +199,9 @@ base::FilePath BrowserContextEfl::GetCachePath() const { } BackgroundSyncController* BrowserContextEfl::GetBackgroundSyncController() { - return nullptr; + if (!background_sync_controller_) + background_sync_controller_.reset(new BackgroundSyncControllerEfl()); + return background_sync_controller_.get(); } void BrowserContextEfl::CreateNetworkDelegate() { diff --git a/tizen_src/ewk/efl_integration/browser_context_efl.h b/tizen_src/ewk/efl_integration/browser_context_efl.h index b5b9405..080c692 100644 --- a/tizen_src/ewk/efl_integration/browser_context_efl.h +++ b/tizen_src/ewk/efl_integration/browser_context_efl.h @@ -142,6 +142,7 @@ class BrowserContextEfl : public BrowserContext, const bool incognito_; std::unique_ptr network_delegate_for_getter_; std::unique_ptr ssl_host_state_delegate_; + std::unique_ptr background_sync_controller_; std::unique_ptr permission_controller_delegate_; DISALLOW_COPY_AND_ASSIGN(BrowserContextEfl); diff --git a/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.cc b/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.cc index ddafca7..1fbf85c 100644 --- a/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.cc +++ b/tizen_src/ewk/efl_integration/permission_controller_delegate_efl.cc @@ -189,6 +189,7 @@ PermissionStatus PermissionControllerDelegateEfl::GetPermissionStatus( const GURL& requesting_origin, const GURL& embedding_origin) { switch (permission) { + case PermissionType::BACKGROUND_SYNC: #if defined(ENABLE_NOTIFICATIONS) case PermissionType::NOTIFICATIONS: { // requesting_origin should be the same as embedding_origin -- 2.7.4