From 1ffa1ca0af1958ab6aa9b07aeaca5677cde3eb30 Mon Sep 17 00:00:00 2001 From: Venugopal S M Date: Mon, 18 Jul 2022 18:10:35 -0700 Subject: [PATCH 01/16] [M108 Migration][MM] Handle PlaybackRate. - Enable call to setPlaybackRate - Delay setting playback rate if player is not prepared(HBBTV) Reference: https://review.tizen.org/gerrit/278307 https://review.tizen.org/gerrit/278434 https://review.tizen.org/gerrit/281298 https://review.tizen.org/gerrit/288027 Change-Id: Ib82d363fb0c5f8e585a10967a3d913cd2eb181d3 Signed-off-by: Venugopal S M --- .../content/browser/media/tizen_renderer_impl.cc | 9 ++++----- .../media/base/tizen/media_player_bridge_capi.cc | 17 +++++++++++++++++ .../media/base/tizen/media_player_bridge_capi.h | 1 + .../media/filters/media_player_esplusplayer.cc | 2 +- .../media/filters/media_player_esplusplayer.h | 2 +- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/tizen_src/chromium_impl/content/browser/media/tizen_renderer_impl.cc b/tizen_src/chromium_impl/content/browser/media/tizen_renderer_impl.cc index 19667a5..f45686c 100644 --- a/tizen_src/chromium_impl/content/browser/media/tizen_renderer_impl.cc +++ b/tizen_src/chromium_impl/content/browser/media/tizen_renderer_impl.cc @@ -432,13 +432,12 @@ void TizenRendererImpl::SetPlaybackRate(double playback_rate) { playback_rate_ = playback_rate; - // TODO: Random error is observed on TM1. - // EsppPlayer::GetEsppPlayer()->SetRate(playback_rate_); - - if (playback_rate > 0) + if (playback_rate > 0) { + GetPlayer()->SetRate(playback_rate_); GetPlayer()->Play(); - else + } else { GetPlayer()->Pause(); + } } void TizenRendererImpl::SetVolume(float volume) { diff --git a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc index 6da6d56..9eefb6aa 100644 --- a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc +++ b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc @@ -128,6 +128,7 @@ MediaPlayerBridgeCapi::MediaPlayerBridgeCapi(int player_id, is_seeking_(false), is_play_pending_(false), is_initialized_(false), + is_set_playback_rate_delayed_(false), duration_(0), playback_time_(0), seek_duration_(0), @@ -302,11 +303,21 @@ void MediaPlayerBridgeCapi::Play() { return; } + if (GetPlayerState() < PLAYER_STATE_READY) { + delayed_player_state_ = PLAYER_STATE_DELAYED_PLAY; + return; + } + if (playback_rate_ == 0.0) { is_paused_ = false; return; } + if (is_set_playback_rate_delayed_) { + is_set_playback_rate_delayed_ = false; + SetRate(playback_rate_); + } + if (player_start(player_) != PLAYER_ERROR_NONE) { LOG(ERROR) << "|player_start| failed"; return; @@ -358,6 +369,12 @@ void MediaPlayerBridgeCapi::SetRate(double rate) { return; } + if (GetPlayerState() < PLAYER_STATE_READY) { + playback_rate_ = rate; + is_set_playback_rate_delayed_ = true; + return; + } + if (!is_file_url_ && player_set_streaming_playback_rate(player_, static_cast(rate)) != PLAYER_ERROR_NONE) { diff --git a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h index 396abe9..59d4133 100644 --- a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h +++ b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h @@ -105,6 +105,7 @@ class MEDIA_EXPORT MediaPlayerBridgeCapi : public MediaPlayerEfl { bool is_play_pending_; bool is_player_released_; bool is_initialized_; + bool is_set_playback_rate_delayed_; double duration_; double playback_time_; diff --git a/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc b/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc index 30c306c..a1b03fd 100644 --- a/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc +++ b/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc @@ -459,7 +459,7 @@ void MediaPlayerESPlusPlayer::SetRate(double rate) { int error = esplusplayer_set_playback_rate(esplayer_, playback_rate_, should_mute); if (error != ESPLUSPLAYER_ERROR_TYPE_NONE) { - LOG(ERROR) << "player pause failed! error #" + LOG(ERROR) << "player set playback rate failed! error #" << esplusplayer_get_error_string( static_cast(error)); return; diff --git a/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h b/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h index 72e0f6d..1f80bd7 100644 --- a/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h +++ b/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h @@ -161,7 +161,7 @@ class MEDIA_EXPORT MediaPlayerESPlusPlayer : public MediaPlayerTizen { last_frames_; double volume_ = 1.0; - bool playback_rate_ = 0.0; + double playback_rate_ = 0.0; bool is_prepared_ = false; bool is_preparing_ = false; bool is_paused_ = true; -- 2.7.4 From 1ad279a4bf3025d99a7ede5d861ae89a2d2fb4c0 Mon Sep 17 00:00:00 2001 From: Venugopal S M Date: Thu, 9 Jun 2022 19:23:40 +0530 Subject: [PATCH 02/16] [M108 Migration][MM] MediaSourceExperimental experimental feature Enables TrackDefaultList that SourceBuffer may consult. It causes MSE webTCT failure. Reference: https://review.tizen.org/gerrit/276105 Change-Id: Ic93e9656632e7cc6b920524ac74a620b1db0e471 Signed-off-by: Venugopal S M --- third_party/blink/renderer/platform/runtime_enabled_features.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 503c566..5d8bf04 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 @@ -1663,7 +1663,7 @@ }, { name: "MediaSourceExperimental", - status: "experimental", + status: "stable", }, { name: "MediaSourceExtensionsForWebCodecs", -- 2.7.4 From 55ecc3eb01529375cc6abf7297ca69444e330cdc Mon Sep 17 00:00:00 2001 From: "ayush.k123" Date: Mon, 20 Feb 2023 09:56:12 +0530 Subject: [PATCH 03/16] [M108 Migration] Add Overscroll related callbacks & Bringup Edge Effect feature This patch adds overscroll related callbacks, - overscrolled,left - overscrolled,right - overscrolled,top - overscrolled,bottom They will be invoked when overscroll occurs for specific element. Edge Effect is a glow like effect shown when webpage is overscrolled horizontally or vertically to give an indication to user that the webpage contents end at that point. Browser is notified with 'DidOverscroll' and 'DidUpdateMainFrameLayout' to keep track of overscroll and contents size changes. References: https://review.tizen.org/gerrit/282151/ Change-Id: I2fcdfd64c68619705f695f6253b00709d7ea903b Signed-off-by: Ayush Kumar --- .../renderer_host/render_widget_host_view_aura.cc | 4 + content/public/renderer/render_frame_observer.h | 1 + content/renderer/render_frame_impl.cc | 8 + content/renderer/render_frame_impl.h | 1 + third_party/blink/public/web/web_local_frame.h | 5 + .../blink/public/web/web_local_frame_client.h | 1 + .../blink/renderer/core/frame/local_dom_window.cc | 12 + .../blink/renderer/core/frame/local_dom_window.h | 7 + .../blink/renderer/core/frame/local_frame_client.h | 3 + .../renderer/core/frame/local_frame_client_impl.cc | 10 + .../renderer/core/frame/local_frame_client_impl.h | 3 + .../renderer/core/frame/web_local_frame_impl.cc | 11 + .../renderer/core/frame/web_local_frame_impl.h | 3 + third_party/blink/renderer/core/frame/window.idl | 4 + .../content/browser/renderer_host/edge_effect.cc | 123 ++++--- .../content/browser/renderer_host/edge_effect.h | 29 +- .../rwhv_aura_offscreen_helper_efl.cc | 77 ++++- .../renderer_host/rwhv_aura_offscreen_helper_efl.h | 7 + .../web_contents_view_aura_helper_efl.cc | 5 +- .../public/browser/web_contents_efl_delegate.h | 4 + tizen_src/chromium_impl/edje_resources/Edge.edc | 356 ++++++++++++++++++++- .../images/b_end_effect_bottom_bg.png | Bin 0 -> 2468 bytes .../images/b_end_effect_bottom_edge_bg.png | Bin 0 -> 2357 bytes .../edje_resources/images/b_end_effect_left_bg.png | Bin 0 -> 3019 bytes .../images/b_end_effect_left_edge_bg.png | Bin 0 -> 2824 bytes .../images/b_end_effect_right_bg.png | Bin 0 -> 3020 bytes .../images/b_end_effect_right_edge_bg.png | Bin 0 -> 2768 bytes .../edje_resources/images/b_end_effect_top_bg.png | Bin 0 -> 2479 bytes .../images/b_end_effect_top_edge_bg.png | Bin 0 -> 2339 bytes .../efl_integration/common/render_messages_ewk.h | 6 + .../renderer/render_frame_observer_efl.cc | 8 + .../renderer/render_frame_observer_efl.h | 2 + .../web_contents_efl_delegate_ewk.cc | 6 + .../web_contents_efl_delegate_ewk.h | 3 + .../efl_integration/web_contents_observer_efl.cc | 16 + .../efl_integration/web_contents_observer_efl.h | 3 + 36 files changed, 638 insertions(+), 80 deletions(-) create mode 100755 tizen_src/chromium_impl/edje_resources/images/b_end_effect_bottom_bg.png create mode 100755 tizen_src/chromium_impl/edje_resources/images/b_end_effect_bottom_edge_bg.png create mode 100755 tizen_src/chromium_impl/edje_resources/images/b_end_effect_left_bg.png create mode 100755 tizen_src/chromium_impl/edje_resources/images/b_end_effect_left_edge_bg.png create mode 100755 tizen_src/chromium_impl/edje_resources/images/b_end_effect_right_bg.png create mode 100755 tizen_src/chromium_impl/edje_resources/images/b_end_effect_right_edge_bg.png create mode 100755 tizen_src/chromium_impl/edje_resources/images/b_end_effect_top_bg.png create mode 100755 tizen_src/chromium_impl/edje_resources/images/b_end_effect_top_edge_bg.png diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index 8b3a5ce..133558d 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -1108,6 +1108,10 @@ void RenderWidgetHostViewAura::DidOverscroll( const ui::DidOverscrollParams& params) { if (overscroll_controller_) overscroll_controller_->OnDidOverscroll(params); +#if BUILDFLAG(IS_EFL) + if (offscreen_helper_) + offscreen_helper_->DidOverscroll(params); +#endif } void RenderWidgetHostViewAura::GestureEventAck( diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h index d1d08d3..5dc7166 100644 --- a/content/public/renderer/render_frame_observer.h +++ b/content/public/renderer/render_frame_observer.h @@ -127,6 +127,7 @@ class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener, virtual void DidCreateNewDocument() {} virtual void DidCreateDocumentElement() {} #if BUILDFLAG(IS_EFL) + virtual void AddEdgeEffectForUIF(bool, bool, bool, bool) {} virtual void PlayLinkEffect() {} virtual void PrintToPdf(int width, int height, diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 859a801..7be59b4 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -3914,6 +3914,14 @@ void RenderFrameImpl::DidDispatchDOMContentLoadedEvent() { } #if BUILDFLAG(IS_EFL) +void RenderFrameImpl::AddEdgeEffectForUIF(bool top, + bool bottom, + bool left, + bool right) { + for (auto& observer : observers_) + observer.AddEdgeEffectForUIF(top, bottom, right, left); +} + void RenderFrameImpl::PlayLinkEffect() { for (auto& observer : observers_) observer.PlayLinkEffect(); diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index d09efdb..d22f0f8 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h @@ -541,6 +541,7 @@ class CONTENT_EXPORT RenderFrameImpl void DidClearWindowObject() override; void DidCreateDocumentElement() override; #if BUILDFLAG(IS_EFL) + void AddEdgeEffectForUIF(bool, bool, bool, bool) override; void PlayLinkEffect() override; void PrintToPdf(int width, int height, diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h index d3b3529..6ec3917 100644 --- a/third_party/blink/public/web/web_local_frame.h +++ b/third_party/blink/public/web/web_local_frame.h @@ -716,6 +716,11 @@ class BLINK_EXPORT WebLocalFrame : public WebFrame { // The size of the document in this frame. virtual gfx::Size DocumentSize() const = 0; +#if BUILDFLAG(IS_TIZEN) + // The size of the scrollable content size in this frame. + virtual gfx::Size ScrollableContentSize() const = 0; +#endif + // Returns true if the contents (minus scrollbars) has non-zero area. virtual bool HasVisibleContent() const = 0; diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h index e927f2d..3fe6c51 100644 --- a/third_party/blink/public/web/web_local_frame_client.h +++ b/third_party/blink/public/web/web_local_frame_client.h @@ -382,6 +382,7 @@ class BLINK_EXPORT WebLocalFrameClient { virtual void DidCreateDocumentElement() {} #if BUILDFLAG(IS_EFL) + virtual void AddEdgeEffectForUIF(bool, bool, bool, bool) {} virtual void PlayLinkEffect() {} virtual void PrintToPdf(int width, int height, diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc index f18293c..7458c2c 100644 --- a/third_party/blink/renderer/core/frame/local_dom_window.cc +++ b/third_party/blink/renderer/core/frame/local_dom_window.cc @@ -1417,6 +1417,18 @@ bool LocalDOMWindow::find(const String& string, return Editor::FindString(*GetFrame(), string, options); } +#if BUILDFLAG(IS_EFL) +void LocalDOMWindow::addEdgeEffectONSCROLLTizenUIF(bool top, + bool bottom, + bool right, + bool left) const { +#if BUILDFLAG(IS_TIZEN) + if (GetFrame() && GetFrame()->Client()) + GetFrame()->Client()->AddEdgeEffectForUIF(top, bottom, right, left); +#endif +} +#endif + bool LocalDOMWindow::offscreenBuffering() const { return true; } diff --git a/third_party/blink/renderer/core/frame/local_dom_window.h b/third_party/blink/renderer/core/frame/local_dom_window.h index 9373ba0..08f0d78 100644 --- a/third_party/blink/renderer/core/frame/local_dom_window.h +++ b/third_party/blink/renderer/core/frame/local_dom_window.h @@ -317,6 +317,13 @@ class CORE_EXPORT LocalDOMWindow final : public DOMWindow, void moveBy(int x, int y) const; void moveTo(int x, int y) const; +#if BUILDFLAG(IS_EFL) + void addEdgeEffectONSCROLLTizenUIF(bool top, + bool bottom, + bool right, + bool left) const; +#endif + void resizeBy(int x, int y) const; void resizeTo(int width, int height) const; diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h index dda91c4..1ecad0e 100644 --- a/third_party/blink/renderer/core/frame/local_frame_client.h +++ b/third_party/blink/renderer/core/frame/local_frame_client.h @@ -298,6 +298,9 @@ class CORE_EXPORT LocalFrameClient : public FrameClient { virtual void RunScriptsAtDocumentElementAvailable() = 0; virtual void RunScriptsAtDocumentReady(bool document_is_empty) = 0; virtual void RunScriptsAtDocumentIdle() = 0; +#if BUILDFLAG(IS_EFL) + virtual void AddEdgeEffectForUIF(bool, bool, bool, bool) {} +#endif virtual void DidCreateScriptContext(v8::Local, int32_t world_id) = 0; diff --git a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc index 4f233e8..a195252 100644 --- a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc +++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc @@ -208,6 +208,16 @@ void LocalFrameClientImpl::DocumentElementAvailable() { web_frame_->Client()->DidCreateDocumentElement(); } +#if BUILDFLAG(IS_EFL) +void LocalFrameClientImpl::AddEdgeEffectForUIF(bool top, + bool bottom, + bool right, + bool left) { + if (web_frame_->Client()) + web_frame_->Client()->AddEdgeEffectForUIF(top, bottom, right, left); +} +#endif + void LocalFrameClientImpl::RunScriptsAtDocumentElementAvailable() { if (web_frame_->Client()) web_frame_->Client()->RunScriptsAtDocumentElementAvailable(); diff --git a/third_party/blink/renderer/core/frame/local_frame_client_impl.h b/third_party/blink/renderer/core/frame/local_frame_client_impl.h index 210ce94..df85a91 100644 --- a/third_party/blink/renderer/core/frame/local_frame_client_impl.h +++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.h @@ -77,6 +77,9 @@ class CORE_EXPORT LocalFrameClientImpl final : public LocalFrameClient { void RunScriptsAtDocumentElementAvailable() override; void RunScriptsAtDocumentReady(bool document_is_empty) override; void RunScriptsAtDocumentIdle() override; +#if BUILDFLAG(IS_EFL) + void AddEdgeEffectForUIF(bool, bool, bool, bool) override; +#endif void DidCreateScriptContext(v8::Local, int32_t world_id) override; diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc index 15ef698..5e4f00b 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc @@ -1720,6 +1720,17 @@ void WebLocalFrameImpl::DeleteSurroundingText(int before, int after) { GetFrame()->GetInputMethodController().DeleteSurroundingText(before, after); } +#if BUILDFLAG(IS_TIZEN) +gfx::Size WebLocalFrameImpl::ScrollableContentSize() const { + if (!GetFrameView() || !GetFrameView()->GetLayoutView()) + return gfx::Size(); + + return gfx::Size( + ToPixelSnappedRect(GetFrameView()->GetLayoutView()->DocumentRect()) + .size()); +} +#endif + void WebLocalFrameImpl::DeleteSurroundingTextInCodePoints(int before, int after) { TRACE_EVENT0("blink", "WebLocalFrameImpl::deleteSurroundingTextInCodePoints"); diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h index f25bb3a..6031575 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h @@ -363,6 +363,9 @@ class CORE_EXPORT WebLocalFrameImpl final session_storage_area) override; void AddHitTestOnTouchStartCallback( base::RepeatingCallback callback) override; +#if BUILDFLAG(IS_TIZEN) + gfx::Size ScrollableContentSize() const override; +#endif // WebNavigationControl overrides: bool DispatchBeforeUnloadEvent(bool) override; diff --git a/third_party/blink/renderer/core/frame/window.idl b/third_party/blink/renderer/core/frame/window.idl index 79b54e2..3e0afa5 100644 --- a/third_party/blink/renderer/core/frame/window.idl +++ b/third_party/blink/renderer/core/frame/window.idl @@ -143,6 +143,10 @@ void scrollBy(optional ScrollToOptions options = {}); void scrollBy(unrestricted double x, unrestricted double y); + // This API is called from TAU library to show edge effect manually. + // It is added to match with the Tizen 2.3 compatibility. + void addEdgeEffectONSCROLLTizenUIF(boolean top, boolean bottom, boolean right, boolean left); + // Visual Viewport API // https://github.com/WICG/ViewportAPI [Replaceable, SameObject] readonly attribute VisualViewport visualViewport; diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/edge_effect.cc b/tizen_src/chromium_impl/content/browser/renderer_host/edge_effect.cc index a4e3648..c6b52e3 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/edge_effect.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/edge_effect.cc @@ -35,7 +35,11 @@ namespace content { namespace { -bool g_force_disable_edge_effect = false; + +// To enable or disable Edge Effect globally. By default enabled. +bool g_edge_effect_enabled = true; + +const base::TimeDelta kEffectDuration = base::Milliseconds(200); void viewResizeCallback(void* data, Evas*, Evas_Object* view, void*) { int width, height; @@ -58,10 +62,7 @@ void viewHideCallback(void* data, Evas*, Evas_Object* view, void*) { } } -EdgeEffect::EdgeEffect(Evas_Object* parent) - : enabled_(true) - , parent_view_(parent) - , edge_object_(NULL) { +EdgeEffect::EdgeEffect(Evas_Object* parent) : parent_view_(parent) { DCHECK(parent); edge_object_ = edje_object_add(evas_object_evas_get(parent)); @@ -74,10 +75,8 @@ EdgeEffect::EdgeEffect(Evas_Object* parent) CHECK(edje_object_file_set(edge_object_, edge_edj.AsUTF8Unsafe().c_str(), "edge_effect")); - int x, y, width, height; - evas_object_geometry_get(parent, &x, &y, &width, &height); - evas_object_move(edge_object_, x, y); - evas_object_resize(edge_object_, width, height); + UpdateRect(); + evas_object_show(edge_object_); evas_object_pass_events_set(edge_object_, EINA_TRUE); @@ -92,6 +91,8 @@ EdgeEffect::EdgeEffect(Evas_Object* parent) } EdgeEffect::~EdgeEffect() { + if (effect_timer_) + ecore_timer_del(effect_timer_); evas_object_del(edge_object_); evas_object_event_callback_del(parent_view_, EVAS_CALLBACK_RESIZE, viewResizeCallback); @@ -105,57 +106,67 @@ EdgeEffect::~EdgeEffect() { //static void EdgeEffect::EnableGlobally(bool enable) { - g_force_disable_edge_effect = !enable; -} + g_edge_effect_enabled = enable; +} + +const std::string EdgeEffect::GetSourceString(const Direction direction) { + switch (direction) { + case TOP: + return std::string("edge,top"); + case BOTTOM: + return std::string("edge,bottom"); + case LEFT: + return std::string("edge,left"); + case RIGHT: + return std::string("edge,right"); + default: + return std::string(); + } +} + +void EdgeEffect::ShowOrHide(const Direction direction, bool show) { + if (direction < TOP || direction > RIGHT) + return; -void EdgeEffect::Show(const std::string& source) { - if (!enabled_ || g_force_disable_edge_effect) + if (show && !enabled_) return; - const char* state = 0; - double ret = 0; - if (source.find("top") != std::string::npos) - state = edje_object_part_state_get(edge_object_, "edge_effect_top", &ret); - else if (source.find("bottom") != std::string::npos) - state = edje_object_part_state_get(edge_object_, "edge_effect_bottom", &ret); - else if (source.find("left") != std::string::npos) - state = edje_object_part_state_get(edge_object_, "edge_effect_left", &ret); - else if (source.find("right") != std::string::npos) - state = edje_object_part_state_get(edge_object_, "edge_effect_right", &ret); - - if (state && !strcmp(state, "visible")) + if ((show && visible_[direction]) || (!show && !visible_[direction])) return; - edje_object_signal_emit(edge_object_, "edge,show", source.c_str()); -} + visible_[direction] = show; -void EdgeEffect::Hide(const std::string& source) { - const char* state = 0; - double ret = 0; - if (source.find("top") != std::string::npos) - state = edje_object_part_state_get(edge_object_, "edge_effect_top", &ret); - else if (source.find("bottom") != std::string::npos) - state = edje_object_part_state_get(edge_object_, "edge_effect_bottom", &ret); - else if (source.find("left") != std::string::npos) - state = edje_object_part_state_get(edge_object_, "edge_effect_left", &ret); - else if (source.find("right") != std::string::npos) - state = edje_object_part_state_get(edge_object_, "edge_effect_right", &ret); + if (show) + UpdateRect(); - if (state && strcmp(state, "visible")) - return; + std::string msg; + msg = show ? "edge,show" : "edge,hide"; + + edje_object_signal_emit(edge_object_, msg.c_str(), + GetSourceString(direction).c_str()); +} - edje_object_signal_emit(edge_object_, "edge,hide", source.c_str()); +bool EdgeEffect::IsVisible() const { + return visible_[TOP] || visible_[BOTTOM] || visible_[LEFT] || visible_[RIGHT]; } void EdgeEffect::Hide() { - edje_object_signal_emit(edge_object_, "edge,hide", "edge,top"); - edje_object_signal_emit(edge_object_, "edge,hide", "edge,bottom"); - edje_object_signal_emit(edge_object_, "edge,hide", "edge,left"); - edje_object_signal_emit(edge_object_, "edge,hide", "edge,right"); + if (!IsVisible() || effect_timer_) + return; + + std::string msg = "edge,hide"; + for (int i = TOP; i <= RIGHT; i++) { + if (visible_[i]) { + edje_object_signal_emit( + edge_object_, msg.c_str(), + GetSourceString(static_cast(i)).c_str()); + visible_[i] = false; + } + } } void EdgeEffect::Enable() { - enabled_ = true; + enabled_ = g_edge_effect_enabled; } void EdgeEffect::ResizeObject(int width, int height) { @@ -183,4 +194,24 @@ void EdgeEffect::Disable() { enabled_ = false; } +void EdgeEffect::UpdateRect() { + int x, y, w, h; + evas_object_geometry_get(parent_view_, &x, &y, &w, &h); + + int x1, y1, w1, h1; + evas_object_geometry_get(edge_object_, &x1, &y1, &w1, &h1); + if (gfx::Rect(x, y, w, h) == gfx::Rect(x1, y1, w1, h1)) + return; + + evas_object_move(edge_object_, x, y); + evas_object_resize(edge_object_, w, h); +} + +Eina_Bool EdgeEffect::OnEffectTimerExpired(void* data) { + auto edge_effect = static_cast(data); + edge_effect->effect_timer_ = nullptr; + edge_effect->Hide(); + return ECORE_CALLBACK_CANCEL; +} + } // namespace content diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/edge_effect.h b/tizen_src/chromium_impl/content/browser/renderer_host/edge_effect.h index d63e8ca..eaceb89 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/edge_effect.h +++ b/tizen_src/chromium_impl/content/browser/renderer_host/edge_effect.h @@ -26,22 +26,30 @@ #ifndef EDGE_EFFECT_H #define EDGE_EFFECT_H +#include #include #include +#include "base/time/time.h" #include "content/common/content_export.h" +#include "ui/gfx/geometry/rect.h" namespace content { class CONTENT_EXPORT EdgeEffect { public: + enum Direction { TOP = 1, BOTTOM, LEFT, RIGHT }; + EdgeEffect(Evas_Object* view); ~EdgeEffect(); + EdgeEffect(const EdgeEffect&) = delete; + EdgeEffect& operator=(const EdgeEffect&) = delete; + static void EnableGlobally(bool enable); - void Show(const std::string& source); - void Hide(const std::string& source); + void ShowOrHide(const Direction direction, bool show); + void Hide(); void Enable(); void Disable(); @@ -51,12 +59,23 @@ class CONTENT_EXPORT EdgeEffect { void ShowObject(); void HideObject(); + void UpdateRect(); + private: - // Is this instance of EdgeEffect enabled. - bool enabled_; + const std::string GetSourceString(const Direction direction); + bool IsVisible() const; + + static Eina_Bool OnEffectTimerExpired(void* data); Evas_Object* parent_view_; - Evas_Object* edge_object_; + Evas_Object* edge_object_ = nullptr; + + // Flag is set when edge effect is enabled. + bool enabled_ = true; + bool visible_[RIGHT + 1] = {false}; + + gfx::Rect rect_; + Ecore_Timer* effect_timer_ = nullptr; }; } // namespace content diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc index f85b628..a283e89 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc @@ -1273,8 +1273,11 @@ bool RWHVAuraOffscreenHelperEfl::TouchEventsEnabled() { } EdgeEffect& RWHVAuraOffscreenHelperEfl::EnsureEdgeEffect() { - if (!edge_effect_) + if (!edge_effect_) { edge_effect_ = base::WrapUnique(new EdgeEffect(content_image_)); + edge_effect_->UpdateRect(); + } + return *edge_effect_.get(); } @@ -1358,20 +1361,76 @@ void RWHVAuraOffscreenHelperEfl::HandleGesture(blink::WebGestureEvent& event) { fling_cancel.SetType(blink::WebInputEvent::Type::kGestureFlingCancel); fling_cancel.SetSourceDevice(blink::WebGestureDevice::kTouchscreen); SendGestureEvent(fling_cancel); + } else if (event_type == blink::WebInputEvent::Type::kGesturePinchBegin) { + EnsureEdgeEffect().Disable(); + } else if (event_type == blink::WebInputEvent::Type::kGesturePinchEnd) { + EnsureEdgeEffect().Enable(); } else if (event_type == blink::WebInputEvent::Type::kGestureScrollUpdate) { if (event.data.scroll_update.delta_x < 0) - EnsureEdgeEffect().Hide("edge,left"); + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::LEFT, false); else if (event.data.scroll_update.delta_x > 0) - EnsureEdgeEffect().Hide("edge,right"); + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::RIGHT, false); if (event.data.scroll_update.delta_y < 0) - EnsureEdgeEffect().Hide("edge,top"); + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::TOP, false); else if (event.data.scroll_update.delta_y > 0) - EnsureEdgeEffect().Hide("edge,bottom"); - } else if (event_type == blink::WebInputEvent::Type::kGesturePinchBegin) { - EnsureEdgeEffect().Disable(); - } else if (event_type == blink::WebInputEvent::Type::kGesturePinchEnd) { - EnsureEdgeEffect().Enable(); + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::BOTTOM, false); } } +#if BUILDFLAG(IS_TIZEN) +void RWHVAuraOffscreenHelperEfl::OnEdgeEffectForUIF(bool top, + bool bottom, + bool right, + bool left) { + EnsureEdgeEffect().Enable(); + + if (top) + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::TOP, true); + if (bottom) + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::BOTTOM, true); + if (left) + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::LEFT, true); + if (right) + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::RIGHT, true); + + EnsureEdgeEffect().Hide(); + EnsureEdgeEffect().Disable(); +} +#endif + +void RWHVAuraOffscreenHelperEfl::DidOverscroll( + const ui::DidOverscrollParams& params) { + if (web_contents_) { + WebContentsImpl* wc = static_cast(web_contents_); + WebContentsViewAura* wcva = + static_cast(wc->GetView()); + wcva->wcva_helper()->OnOverscrolled(params.accumulated_overscroll, + params.latest_overscroll_delta); + } + + const gfx::Vector2dF& accumulated_overscroll = params.accumulated_overscroll; + const gfx::Vector2dF& latest_overscroll_delta = + params.latest_overscroll_delta; + + if (GetScrollableSize().width() > 0) { + if (latest_overscroll_delta.x() < 0 && (int)accumulated_overscroll.x() < 0) + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::LEFT, true); + if (latest_overscroll_delta.x() > 0 && (int)accumulated_overscroll.x() > 0) + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::RIGHT, true); + } + + if (GetScrollableSize().height() > 0) { + if (latest_overscroll_delta.y() < 0 && + (int)accumulated_overscroll.y() < 0) { + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::TOP, true); + } + if (latest_overscroll_delta.y() > 0 && (int)accumulated_overscroll.y() > 0) + EnsureEdgeEffect().ShowOrHide(EdgeEffect::Direction::BOTTOM, true); + } +} + +void RWHVAuraOffscreenHelperEfl::UpdateEdgeEffect() { + EnsureEdgeEffect().UpdateRect(); +} + } // namespace content diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h index 37d1dbe..e195e6b 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h +++ b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h @@ -35,6 +35,7 @@ namespace ui { class EflEventHandler; class IMContextEfl; +struct DidOverscrollParams; } // namespace ui namespace content { @@ -97,6 +98,11 @@ class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl { } int GetTopControlsHeight(); + void DidOverscroll(const ui::DidOverscrollParams& params); +#if BUILDFLAG(IS_TIZEN) + void OnEdgeEffectForUIF(bool, bool, bool, bool); +#endif + void Focus(bool focus); bool HasFocus(); void SetPageVisibility(bool visible); @@ -125,6 +131,7 @@ class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl { RenderWidgetHostViewAura* rwhva() { return rwhv_aura_; } void OnGestureEvent(ui::GestureEvent* event); EdgeEffect& EnsureEdgeEffect(); + void UpdateEdgeEffect(); void HandleGestureBegin(); void HandleGestureEnd(); void SendGestureEvent(blink::WebGestureEvent& event); diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.cc b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.cc index 067a13a..8b2ea46 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.cc +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.cc @@ -169,11 +169,10 @@ bool WebContentsViewAuraHelperEfl::ImeHandleKeyEventEnabled() const { void WebContentsViewAuraHelperEfl::OnOverscrolled( const gfx::Vector2dF& accumulated_overscroll, const gfx::Vector2dF& latest_overscroll_delta) { -#if !defined(EWK_BRINGUP) - if (efl_delegate_) + if (efl_delegate_) { efl_delegate_->OnOverscrolled(accumulated_overscroll, latest_overscroll_delta); -#endif + } } } // namespace content diff --git a/tizen_src/chromium_impl/content/public/browser/web_contents_efl_delegate.h b/tizen_src/chromium_impl/content/public/browser/web_contents_efl_delegate.h index 0b25d66..502073a 100644 --- a/tizen_src/chromium_impl/content/public/browser/web_contents_efl_delegate.h +++ b/tizen_src/chromium_impl/content/public/browser/web_contents_efl_delegate.h @@ -75,6 +75,10 @@ class CONTENT_EXPORT WebContentsEflDelegate { ui::TextInputType dialog_type, double dialog_value, content::DateTimeChooserEfl* date_chooser) = 0; + + virtual void OnOverscrolled( + const gfx::Vector2dF& accumulated_overscroll, + const gfx::Vector2dF& latest_overscroll_delta) = 0; }; } // namespace content diff --git a/tizen_src/chromium_impl/edje_resources/Edge.edc b/tizen_src/chromium_impl/edje_resources/Edge.edc index 9878a66..22a7a33 100644 --- a/tizen_src/chromium_impl/edje_resources/Edge.edc +++ b/tizen_src/chromium_impl/edje_resources/Edge.edc @@ -26,6 +26,14 @@ collections { group { name: "edge_effect"; images { + image: "b_end_effect_bottom_bg.png" COMP; + image: "b_end_effect_bottom_edge_bg.png" COMP; + image: "b_end_effect_top_bg.png" COMP; + image: "b_end_effect_top_edge_bg.png" COMP; + image: "b_end_effect_left_bg.png" COMP; + image: "b_end_effect_left_edge_bg.png" COMP; + image: "b_end_effect_right_bg.png" COMP; + image: "b_end_effect_right_edge_bg.png" COMP; image: "overscrolling_dark_top.png" COMP; image: "overscrolling_dark_bottom.png" COMP; image: "overscrolling_dark_left.png" COMP; @@ -33,7 +41,7 @@ collections { } parts { - part { name: "clipper"; + part { name: "clipper1"; type: RECT; scale: 1; description { state: "default" 0.0; @@ -42,6 +50,40 @@ collections { color: 255 255 255 0; } } + part { name: "clipper2"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + rel1.offset: -3 -3; + rel2.offset: 3 3; + color: 255 255 255 0; + } + } + + part { name: "edge_effect_top_wearable"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: 0 76; + max: -1 76; + fixed: 0 1; + align: 0.5 1.0; + color: 66 151 255 0; + visible: 0; + rel1 { relative: 0.0 0.0; to: "clipper2"; } + rel2 { relative: 1.0 0.0; to: "clipper2"; } + image.normal: "b_end_effect_top_edge_bg.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + } + } part { name: "edge_effect_top"; type: IMAGE; scale: 1; @@ -52,8 +94,8 @@ collections { align: 0.5 0.0; color: 255 255 255 100; visible: 0; - rel1 { relative: 0.0 0.0; to: "clipper"; } - rel2 { relative: 1.0 0.0; to: "clipper"; } + rel1 { relative: 0.0 0.0; to: "clipper1"; } + rel2 { relative: 1.0 0.0; to: "clipper1"; } image.normal: "overscrolling_dark_top.png"; } description { state: "visible" 0.0; @@ -65,6 +107,54 @@ collections { inherit: "default" 0.0; } } + part { name: "edge_glow_top"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: 0 70; + max: -1 70; + fixed: 0 1; + align: 0.5 1.0; + color: 66 151 255 51; + visible: 0; + rel1 { relative: 0.0 0.0; to: "clipper2"; } + rel2 { relative: 1.0 0.0; to: "clipper2"; } + image.normal: "b_end_effect_top_bg.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + align: 0.5 0.0; + visible: 1; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + } + } + part { name: "edge_effect_bottom_wearable"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: 0 76; + max: -1 76; + fixed: 0 1; + align: 0.5 0.0; + color: 66 151 255 0; + visible: 0; + rel1 { relative: 0.0 1.0; to: "clipper2"; } + rel2 { relative: 1.0 1.0; to: "clipper2"; } + image.normal: "b_end_effect_bottom_edge_bg.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + } + } part { name: "edge_effect_bottom"; type: IMAGE; scale: 1; @@ -75,8 +165,8 @@ collections { align: 0.5 1.0; color: 255 255 255 100; visible: 0; - rel1 { relative: 0.0 1.0; to: "clipper"; } - rel2 { relative: 1.0 1.0; to: "clipper"; } + rel1 { relative: 0.0 1.0; to: "clipper1"; } + rel2 { relative: 1.0 1.0; to: "clipper1"; } image.normal: "overscrolling_dark_bottom.png"; } description { state: "visible" 0.0; @@ -88,6 +178,54 @@ collections { inherit: "default" 0.0; } } + part { name: "edge_glow_bottom"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: 0 70; + max: -1 70; + fixed: 0 1; + align: 0.5 0.0; + color: 66 151 255 51; + visible: 0; + rel1 { relative: 0.0 1.0; to: "clipper2"; } + rel2 { relative: 1.0 1.0; to: "clipper2"; } + image.normal: "b_end_effect_bottom_bg.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + align: 0.5 1.0; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + } + } + part { name: "edge_effect_left_wearable"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: 76 0; + max: 76 -1; + fixed: 1 0; + align: 1.0 0.5; + color: 66 151 255 0; + visible: 0; + rel1 { relative: 0.0 0.0; to: "clipper2"; } + rel2 { relative: 0.0 1.0; to: "clipper2"; } + image.normal: "b_end_effect_left_edge_bg.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + } + } part { name: "edge_effect_left"; type: IMAGE; scale: 1; @@ -98,8 +236,8 @@ collections { align: 0.0 0.5; color: 255 255 255 100; visible: 0; - rel1 { relative: 0.0 0.0; to: "clipper"; } - rel2 { relative: 0.0 1.0; to: "clipper"; } + rel1 { relative: 0.0 0.0; to: "clipper1"; } + rel2 { relative: 0.0 1.0; to: "clipper1"; } image.normal: "overscrolling_dark_left.png"; } description { state: "visible" 0.0; @@ -111,6 +249,54 @@ collections { inherit: "default" 0.0; } } + part { name: "edge_glow_left"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: 70 0; + max: 70 -1; + fixed: 1 0; + align: 1.0 0.5; + color: 66 151 255 51; + visible: 0; + rel1 { relative: 0.0 0.0; to: "clipper2"; } + rel2 { relative: 0.0 1.0; to: "clipper2"; } + image.normal: "b_end_effect_left_bg.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + align: 0.0 0.5; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + } + } + part { name: "edge_effect_right_wearable"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: 76 0; + max: 76 -1; + fixed: 1 0; + align: 0.0 0.5; + color: 66 151 255 0; + visible: 0; + rel1 { relative: 1.0 0.0; to: "clipper2"; } + rel2 { relative: 1.0 1.0; to: "clipper2"; } + image.normal: "b_end_effect_right_edge_bg.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + } + } part { name: "edge_effect_right"; type: IMAGE; scale: 1; @@ -121,8 +307,8 @@ collections { align: 1.0 0.5; color: 255 255 255 100; visible: 0; - rel1 { relative: 1.0 0.0; to: "clipper"; } - rel2 { relative: 1.0 1.0; to: "clipper"; } + rel1 { relative: 1.0 0.0; to: "clipper1"; } + rel2 { relative: 1.0 1.0; to: "clipper1"; } image.normal: "overscrolling_dark_right.png"; } description { state: "visible" 0.0; @@ -134,64 +320,200 @@ collections { inherit: "default" 0.0; } } + part { name: "edge_glow_right"; + type: IMAGE; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: 70 0; + max: 70 -1; + fixed: 1 0; + align: 0.0 0.5; + color: 66 151 255 51; + visible: 0; + rel1 { relative: 1.0 0.0; to: "clipper2"; } + rel2 { relative: 1.0 1.0; to: "clipper2"; } + image.normal: "b_end_effect_right_bg.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + align: 1.0 0.5; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + } + } } programs { + program { name: "edge_top_show_wearable"; + signal: "edge,show,wearable"; + source: "edge,top"; + action: STATE_SET "visible" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_effect_top_wearable"; + } program { name: "edge_top_show"; signal: "edge,show"; source: "edge,top"; action: STATE_SET "visible" 0.0; - transition: LINEAR 0.5; + transition: LINEAR 0.2; target: "edge_effect_top"; } + program { name: "glow_top_show"; + signal: "glow,show"; + source: "edge,top"; + action: STATE_SET "visible" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_glow_top"; + } + program { name: "edge_bottom_show_wearable"; + signal: "edge,show,wearable"; + source: "edge,bottom"; + action: STATE_SET "visible" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_effect_bottom_wearable"; + } program { name: "edge_bottom_show"; signal: "edge,show"; source: "edge,bottom"; action: STATE_SET "visible" 0.0; - transition: LINEAR 0.5; + transition: LINEAR 0.2; target: "edge_effect_bottom"; } + program { name: "glow_bottom_show"; + signal: "glow,show"; + source: "edge,bottom"; + action: STATE_SET "visible" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_glow_bottom"; + } + program { name: "edge_left_show_wearable"; + signal: "edge,show,wearable"; + source: "edge,left"; + action: STATE_SET "visible" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_effect_left_wearable"; + } program { name: "edge_left_show"; signal: "edge,show"; source: "edge,left"; action: STATE_SET "visible" 0.0; - transition: LINEAR 0.5; + transition: LINEAR 0.2; target: "edge_effect_left"; } + program { name: "glow_left_show"; + signal: "glow,show"; + source: "edge,left"; + action: STATE_SET "visible" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_glow_left"; + } + program { name: "edge_right_show_wearable"; + signal: "edge,show,wearable"; + source: "edge,right"; + action: STATE_SET "visible" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_effect_right_wearable"; + } program { name: "edge_right_show"; signal: "edge,show"; source: "edge,right"; action: STATE_SET "visible" 0.0; - transition: LINEAR 0.5; + transition: LINEAR 0.2; target: "edge_effect_right"; } + program { name: "glow_right_show"; + signal: "glow,show"; + source: "edge,right"; + action: STATE_SET "visible" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_glow_right"; + } + program { name: "edge_top_hide_wearable"; + signal: "edge,hide,wearable"; + source: "edge,top"; + action: STATE_SET "hidden" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_effect_top_wearable"; + } program { name: "edge_top_hide"; signal: "edge,hide"; source: "edge,top"; action: STATE_SET "hidden" 0.0; - transition: LINEAR 0.5; + transition: LINEAR 0.2; target: "edge_effect_top"; } + program { name: "glow_top_hide"; + signal: "glow,hide"; + source: "edge,top"; + action: STATE_SET "hidden" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_glow_top"; + } + program { name: "edge_bottom_hide_wearable"; + signal: "edge,hide,wearable"; + source: "edge,bottom"; + action: STATE_SET "hidden" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_effect_bottom_wearable"; + } program { name: "edge_bottom_hide"; signal: "edge,hide"; source: "edge,bottom"; action: STATE_SET "hidden" 0.0; - transition: LINEAR 0.5; + transition: LINEAR 0.2; target: "edge_effect_bottom"; } + program { name: "glow_bottom_hide"; + signal: "glow,hide"; + source: "edge,bottom"; + action: STATE_SET "hidden" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_glow_bottom"; + } + program { name: "edge_left_hide_wearable"; + signal: "edge,hide,wearable"; + source: "edge,left"; + action: STATE_SET "hidden" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_effect_left_wearable"; + } program { name: "edge_left_hide"; signal: "edge,hide"; source: "edge,left"; action: STATE_SET "hidden" 0.0; - transition: LINEAR 0.5; + transition: LINEAR 0.2; target: "edge_effect_left"; } + program { name: "glow_left_hide"; + signal: "glow,hide"; + source: "edge,left"; + action: STATE_SET "hidden" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_glow_left"; + } + program { name: "edge_right_hide_wearable"; + signal: "edge,hide,wearable"; + source: "edge,right"; + action: STATE_SET "hidden" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_effect_right_wearable"; + } program { name: "edge_right_hide"; signal: "edge,hide"; source: "edge,right"; action: STATE_SET "hidden" 0.0; - transition: LINEAR 0.5; + transition: LINEAR 0.2; target: "edge_effect_right"; } + program { name: "glow_right_hide"; + signal: "glow,hide"; + source: "edge,right"; + action: STATE_SET "hidden" 0.0; + transition: CUBIC_BEZIER 0.2 0.25 0.46 0.45 1.0; + target: "edge_glow_right"; + } } } } diff --git a/tizen_src/chromium_impl/edje_resources/images/b_end_effect_bottom_bg.png b/tizen_src/chromium_impl/edje_resources/images/b_end_effect_bottom_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..61c54a498a931e860966ef2fe50dbf87b551ad0c GIT binary patch literal 2468 zcma)8YgAKL77ik!QB(vJ@j-}>0z#6T2YE<M#Q3gSUiCDk~=|U8!%#DJbA5K^Ak9+so_xtv@&p!K{ zb@D<(HrSw@&?pqjCNO}*N1-g@5Ib`AEad(0x$I};vlQk=!r{zC!60ENe##_Ze0?0sEgi*;7n^oUY=rt7ZpRL;{XbkN~U^Xhy;LwCy?+Yf+vy0 zAQKp5B4+BrB5DfBP6nUDo6v>Rq(kxV~ML6#UC{3)hg zTL#MEKn@d&{J}}25(bIGW3zcg7L^3hxfB3E44OZIL~JrPt57PJK*>rs^YVP0EeBLclRybi0m(2Q>dTORMxV~668tGt&a^&_ z%LC|C3f-Sf;;<YJFtzY4d<`WXC9w zt+Cp>ryPZ{x*y142~__c>fV$P5#e}scwc6OyQj>}JsT}p==T_I!m0DzQ}_S%GU+)ztXa` z>PdOWctN~f^R_DsCkrw%4vo6~4yMbXUUh+~F$AzB(J2{~32?-=GjZ>`}6cIS6( z2U}zgXs2RuP1niqid>)AO{ksvuIF^ebi9apnACKg)TVNc6Fhzzb6KfPNoQ^=b}(f; zUSjP0{q-rs5`)k%3omPUpEDfVeqvt3lE%=e8jsMB;~F5p_dP$Vs%GSN2#?L`Yl(VV z_8d$*S=Z*fY^ja=6YI*Ga~p1M8jr`rq3t=bqkA@oAADPNYX29&VnN}H$(Y)-V`&5B zFY&FZt-#)(|helteuQUFPX1qu^ zbS>QAmOsPlwO*k!+3L1im0H!WxL!8aKu>I3ZL02S?%V4YyQMt}Of7vSl+SL&SiIYg zr>efx<6D*gVzFY&x=T_6^asK)S9dFDdY08bOF{MDsvbG?#@A-vsS8etObO|{g7D`(<`@kNp|3qe%N;FJ*#@2Ah9Tw} zizS9T>CQ>zV?@0C$z-H$^Rugsdv+nc(5Nel*A8mw`IcZpSXo$^FbSBCc8YjQ65N_I z9CN-jaO;%-w2aW&=Tjch6aIE?2y4|EC%ftaeZDT#OYPS6RdKhYJ(+*2$0>cEB0_V4 zeZV)Vt9OktXW`>>$c14kDTXf8f2rq4cdRb%&^4ZJJW(@y*ruzZqR=vF<%q(FHuAT0 z6yGscPHfabH+y~xaE<#q|Q}HiQRDOvg=oOi@pmhwRDd7mmgm z#x!GN%dcwj&5(jrVM=t$hIa=GGqZV}uX1Wn$i{n!pj1=)^78XDrHiYzS{He4^pb~* ztkF(awqIZmt+9;Fy|}*h@-oray}E+~kn*O-9ET-#+Rw zst#}Ky4}Sz&3QjQakWP`TD`4HD!0rl9~_N1UHQN_HH|y5RkPkbX{^@rv;PYv%Hq`k literal 0 HcmV?d00001 diff --git a/tizen_src/chromium_impl/edje_resources/images/b_end_effect_bottom_edge_bg.png b/tizen_src/chromium_impl/edje_resources/images/b_end_effect_bottom_edge_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..6162cb01cb84e7880da60ffddb5afa26b516b351 GIT binary patch literal 2357 zcmaJ@c~}#78jh=|P1V|pBDmCaXa!rzH6bAZWJ88<$;^+du^EBP+}E9z!6f!2^hRl z2au#{u)YYX^x=rP)!aAO)n_(m@V` z%3;t+^A~_e!^Ghn0mPq=g}*rg5~Whkp-^IDW67}~8O0(fG&Y+}q0%XIx-ITutB6CC zLX|C|uv$=nV1)>i%9TOAmg?B?Lae*cs3kgOo}%}7zLrCXc>$s zJs>9l|3Vf^#T*dg^LTtZmj%+;u68sU4(wg1Ad3d_m^^zXw4kvR*M&#pfgp=YV^bj- z&6UZe+0*!t3zbUaGgxepzrgiC6iOi?f*0aS@wjtbCjU3N93BP>l_(Z~qEQPI;3q+q zs6v9uNj!fh$tFmOh|yTZ_L=s~ofd*IX$&mpW2lTYTVIZJiTGSPpU2|5KnwBhnN)}e zxwtUtd?p{V=K=Fv@e(zg=eqtXmx3olnHi3EhGoHoPv8t(9DV#{ad}__-xv&Ejj}7Q zF9`$_ykgt{Rr}9fyHDr&Z(cQYNiC?T7` z=5RPf!m)ccJVJi{GQax-q6NWZ?Hsg`;P6QDO5BP=Qw9$Iz+L_h#NA98I0Lu-A9+@1 zkvyyOzvNk+Me?l9V&o;r??nmoz=enm4>FxNICimf*G&rll3Dh^&h^HYadr1 z6r;Rb>y-lI6a6Lac5RWR+&=kZBoKN6ZG*z0T4`DR{`6HFtjlvYSA9YM;_ChTuP)5g z;q>jBdMhmmI74}-6C>R>@9)rk)O;5y>;G~D){dpPanqm&K#aU!#IVDXjCaZCTk04_(v&oq7P?`q?aFpZJbJ*`tN&{HWo@ffS%uLM*y;9lmlbHWN_Y3?CsQm4 z(Im>Anlh5mdi^79h}Yhu(?x|^7Jyb7b9%Ec z#3*_)2DXe&3W8oZh)(El8hUfPKYLrg^|mN}XmiztDYd>{>zWe41+N)Blk&!*g&*wP zW@hQUBf7{v95H;5qR4%;?P`RfJhP_px!LRMiiqM?Lw2NOBjZ@l%EHp#edg@3!-*4T z1wsD-M{XGZ+-v+MudTf0cy;NcORynq=cq`##jC4nxho=+-kG>z?p>z<}QF42RUkWCf8n=Z91h&V-wbUV4* z{cn4wY+nB@oqY+ZrT7#^Y^`tu^sw#g$UeH(lYk%9o+{fC#KKV zrFMQ8ce$lvS zU2@I(^boCq{i<^+^YCZZWty`i4O54<63=mkmjq_5SQak~1SqSW6S5DL_@LHPF*|^pNl_Y{ZLqowXV=xYLe&Rjx~y(lO}WeD~59)5bgWbinsg8y=>YFlctlO z4>^v1+^Tjg@*LiEqjNk<(bG}hQGG9P;80aj!arghDkqX0LXn=I9Q$7O3v@4R5lVk$ v?O=!Uj_*K{X3tA9>UN8mz3fdEVL4&L51*d9!-Py{eq=mceV|g8{mK6Y2b9-| literal 0 HcmV?d00001 diff --git a/tizen_src/chromium_impl/edje_resources/images/b_end_effect_left_bg.png b/tizen_src/chromium_impl/edje_resources/images/b_end_effect_left_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..9680e8f4067ce5540047b67c1efc39274da1e685 GIT binary patch literal 3019 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 literal 0 HcmV?d00001 diff --git a/tizen_src/chromium_impl/edje_resources/images/b_end_effect_left_edge_bg.png b/tizen_src/chromium_impl/edje_resources/images/b_end_effect_left_edge_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..e65a5201179206a3c7db5a29b346e157cace7b20 GIT binary patch literal 2824 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 D$1!5% literal 0 HcmV?d00001 diff --git a/tizen_src/chromium_impl/edje_resources/images/b_end_effect_top_bg.png b/tizen_src/chromium_impl/edje_resources/images/b_end_effect_top_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..e723a0d216d4faeccdd96faa8fd38f4625a245ef GIT binary patch literal 2479 zcmbVOX;f2Z8oua2hbXv(RV*PKH6cP)2#G`+vLGrDHi1&akX%TVEF^&>0tbl;sELk} zXi>q~ilS^ISg0aUl>r;jI$#Y5ilQh*3xXSn4s)a6^oOT2XYP-C-|xB4^KRe!-E((y zLWAsJt}p-q?1I-YBLKik0NJsBwSn$kgQ9lm;i6#0Dk3Gx3ME$t0(8D42}A^oxG7)+ z$mOfkeg*>oV0N-FDpnC2vYyJ5hK+%c+1sd z1y|)QmV3^4V1jahTK@jf`L zNMxz&16!_$0RNN5XW8;7wG_lgfO1K?j0f#UvgeE#>fN6QvJjzcs9`c8v?<(Fri7O+ z0>z48CJhO_@!<>kR3ekjV6X{vG7(Q<`Qq`A;U9=2lJP`_AH&~|IpgDVS_*@V3-l$k z@Dv;qk7xP$v)FhF*_RSXA~G4izN8s#uvo6(ih1BnTp<*9TFd-XEtMeyxeAFaN+L;} znE;MJqL9c15-EZa>4!kY2*rGfQjWH4&&O(+piGzn^4T(p2=Sr6RN-ghGZ;jIe;}Da zVz8N(x&v8$bbmIUfb(b3nRF%*Ij!aYKRv@j$zUzR@rPlVfuISrn4d-;T6{V@pcpza zGU#YjY-(o#fOTImlOCnI^XzVXz9HJVWwb=Nq4QYBX41SfJbv5|GiW`ApvfNuevNi2 zI`N&xSovMq#e4$wpASxz!CWyg*xs?5xeG(uND-~BAt4ooX}1XSQ%}+xj!xuU770svK0jq0jKUDS1l1?W{{6oj3m$xvB!UZ>OUI3j{ClR%xq{x zet{B1=|uEzO3$m3QHxyKtQPAXOtN3d9^w-KoMaN0R^_K;qT^5D4qdIjz4uOaS4=NW zYYivaPd>d8(|i~s*TfRo;)A0fnCSbKrcyvV^hAVc;j za$pgdJGR)<$~xhjT2WfDtU{(EbjI8$ZQPg`o>Q7-Trnp#k8|@{1J?wabf$EZfPK(5 z?Tpa^AaQMl!hM zN{{KNN3p$?wGLhb;b`TKahnD3yoTV%z5{jxVJ&pJ=hB=!k1z9TA{yx~m)F2VRfI$} zt@&YQ*7nGorJ7}l-hF4*C%X-{zHL6c74y(&3|Bj0=6RX(8tX4uwEUjcGeJ>w64&23zfHkYC5iUe??&bXU7w)ACcdP&;Xu z)Q4+lJDg{z>FQO|w-D^nt$XS|c8h2~7nylQE6Q%4lO1*fN`Ah3AHQrMXqHmPNbmM~ zD@+U@NpgcL4s^?34o81!*GseiElFw4T&t$Mq_r)8D?HrFdMg4Pf8;Lc5bYg1IksnP z9+div;mre-fw}D5x#yN&2{2~0qilZRuyKNC_nh6;s1*KneX|++Mt#C4zgnyiwSK$d z?U2j0w@twBTP9c~2hyS(K?PvE`YgBbK`G&1K*u6UC_?5 ze%>GpyT8gEY;_D$cW1P$Gac3wVa<)Vo1Ry_w`sWyqw1b*Y_B!9pQFGFm$cQ86RxMg z%Z;7J8!`43dZP4xrt#ON_&ro4(}L`g4aKGLsuI;n@{iRLF=mY z5<`)8r{>1WOywb($3Rw2QRT6pVmYkLz%0)_hUXDE32m_`L9_S#%*Eq#!BZXmRlORx zVN;#s`_Q=IDvbWP;k|Yjv~{{S9pX`QjbV2#O*B{QFl;jrl(+=@f*?*I!AV|MhnHq2 z=daE>_SpP{(+fX0wtcLidTrc8b8ly%h7Hp`@2KqxZ~EC|IKAf;TD#n-cBiWR`s-ch z$sY`VFDmb9Q=tU>$O@+nIkF(IH_+wjz`miHgLhA+u7^v}qTEGrI0<$J9e(@aLh~Wp z##!z+zTIb9m1s3Jv@})thTvlub8Ptw%rz)U@ALzWk@k{a>1|hhX(X?wQF1z^KIQ1) z)Ex85@rARjb>~Y%^y$3*J4s>0x=G)z+k1+pDs4yAx>p|e!s_qkBovIlaGf_c<@~y7 zfA{;{^^+65`i~aw9hq*^nWK8pJ?XuGWy5miU8r1EgtP8Zg4`_FC=yY(5xNy`$VD!pJ6vMBdp!NI^JC`u-g%$r zy?pO?&UYv_Cd$iWr3Z;b@`~OF%1NYoY62&`vygb-{XyGGeEhM<1S}3wVMYZClf)2` z29u+;ie0cARzT)G&9IO}TA1lqRiC7 zIxHF#QHVb@NCOF2pj0A}GR0gLgC7~nU=V;8L1%FpED1-#fY_%YaYCeV`DT-*xGyN54-V$FTVKI3TTqav01*hwd zh~$WQQU;UGixh)mkVTo}LjOXXCk7>s#^&M% zPZG&3E*ccao9+$V-+RGkSnd7-u|VfBOGwQntH=>^t&elErM2uX{bcv+ro0@xYHFuS z#o|mcPI^_<{c&m0UR_{5Z6jEe;?dk+^`PeIw|aU1NXe@#?ekM3LnU$99fn>}$LNGJ zyKLSQ+gHE6wb=8|o<}?nXRPuM@b~fe>!wv^U)3f+kn^fy*l^I+V@viM;}51gn#LK( z#D>cE2DMP4vsPG18BBE?%xbLfc;2vX=$m;SxNiN!^}Ty6i!6sM*+IoYdxtw4U)5Vn ztafX##m%zrvel30fmauId1ah$huGgt0}HPtOnIc~Pw`7fg&t)m04^yzY2uzR5` z!>9Y4Y9n;g`l2)AehYsn#bK{t_l!$z1sDDAd3|4${L`}|!gxGjZMrDlkL~>DXXER~ zimd$9*Zt7TKKqlRafXrKTDY%Q-f%v7Q+0snxpfT^>Wj%*Wm_%&^0GCoOKAxU`ueD9 zE7t?xu(m8P=5UHX|8w6)-EwVv8SO%1d_E6J{{49Wjz^Q;`u_3VYpc?s8vK4s-*ePV zLz5v@HhduW3$MpjSA&AKA5%^A^d)S|H#(~x+9shdxk)jF13ukV>wMFt8Q1RY{Q%tz zeZ1#ULGBmSfq*&+`t5uB_qV&}tQh;U?|U51t8OW%cu>>&S3G6aiiz-s8zM{3lTlAM z8Bk;>JsYK?=7blQ2l3q}cQ~9@cWR<;qH@)QsFap19uQ1oBN);Ka%&O)Cp~dM^XOnZy5qs=UzEW|Q7n**z?o8r$YkL2Y z{VKMs-v0V4T*ylMTi^f-^%;C<4GcYaTm?+zp-rvuneOV*lZv=oScAPGQ{(t?$+J$7Uw<;awy#x66ps$aO+)Lha z$GR9@Qn-2>eqVUP7TFXJf;QOQU-#_5d z!z249Q+D8)iucDCPv1Wa zlp@WWBp|mrRot~34R^|}e+qc~z3isnX#L=m+t$v``s~gE{7l}#caOV^A761eK0Gp} zT43WZ!x}#eE=^riM<2vAOLQHrq3j{~SYLxV?W35wI>9#aXf(gZnCiG-9ZG8N@>;A- zu$hxSS8nyg$}IiCj&tVHz>-%t7ke$re#m&*rYFpFUgZrs$z$bd?-lBINXys+{GE8g z>C^LOAj!>(fU&m-D*->rT}Z$X^)KNvHen?gg!O;PvpO#Ftj>RvXCz(ZSshp8w~<{* dsH1Wg(MdZmG2-PtPiO8e(UCFW#fY7`{{h|tyr=*G literal 0 HcmV?d00001 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 84ab6c7..ecc54df 100644 --- a/tizen_src/ewk/efl_integration/common/render_messages_ewk.h +++ b/tizen_src/ewk/efl_integration/common/render_messages_ewk.h @@ -164,6 +164,12 @@ IPC_MESSAGE_ROUTED2(EwkHostMsg_HandleTapGestureWithContext, IPC_MESSAGE_ROUTED0(EwkHostMsg_PlayLinkEffect) +IPC_MESSAGE_ROUTED4(EwkHostMsg_AddEdgeEffectForUIF, + bool /* top */, + bool /* bottom */, + bool /* right */, + bool /* left */) + IPC_MESSAGE_ROUTED2(EwkHostMsg_PlainTextGetContents, std::string, /* contentText */ int /* callback id */) diff --git a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc index 30e9096..b5ccfa2 100644 --- a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc +++ b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc @@ -208,6 +208,14 @@ void RenderFrameObserverEfl::PrintToPdf(int width, print_helper.PrintToPdf(width, height); } +void RenderFrameObserverEfl::AddEdgeEffectForUIF(bool top, + bool bottom, + bool right, + bool left) { + Send(new EwkHostMsg_AddEdgeEffectForUIF(render_frame()->GetRoutingID(), top, + bottom, right, left)); +} + void RenderFrameObserverEfl::DidCreateScriptContext( v8::Local context, int world_id) { diff --git a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.h b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.h index 0d9098b..000c1070 100644 --- a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.h +++ b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.h @@ -52,6 +52,8 @@ class RenderFrameObserverEfl : public RenderFrameObserver { int world_id) override; void WillReleaseScriptContext(v8::Handle context, int world_id) override; + void AddEdgeEffectForUIF(bool, bool, bool, bool) override; + void DidCreateDocumentElement() override; void PlayLinkEffect() override; void PrintToPdf(int width, diff --git a/tizen_src/ewk/efl_integration/web_contents_efl_delegate_ewk.cc b/tizen_src/ewk/efl_integration/web_contents_efl_delegate_ewk.cc index a4ecb2c..33a26cc 100644 --- a/tizen_src/ewk/efl_integration/web_contents_efl_delegate_ewk.cc +++ b/tizen_src/ewk/efl_integration/web_contents_efl_delegate_ewk.cc @@ -94,3 +94,9 @@ void WebContentsEflDelegateEwk::OpenDateTimeDialog( content::DateTimeChooserEfl* date_time_chooser) { web_view_->InputPickerShow(dialog_type, dialog_value, date_time_chooser); } + +void WebContentsEflDelegateEwk::OnOverscrolled( + const gfx::Vector2dF& accumulated_overscroll, + const gfx::Vector2dF& latest_overscroll_delta) { + web_view_->OnOverscrolled(accumulated_overscroll, latest_overscroll_delta); +} diff --git a/tizen_src/ewk/efl_integration/web_contents_efl_delegate_ewk.h b/tizen_src/ewk/efl_integration/web_contents_efl_delegate_ewk.h index 0d6117c..921893b 100644 --- a/tizen_src/ewk/efl_integration/web_contents_efl_delegate_ewk.h +++ b/tizen_src/ewk/efl_integration/web_contents_efl_delegate_ewk.h @@ -49,6 +49,9 @@ class WebContentsEflDelegateEwk : public content::WebContentsEflDelegate { content::DateTimeChooserEfl* date_time_chooser) override; private: + void OnOverscrolled(const gfx::Vector2dF& accumulated_overscroll, + const gfx::Vector2dF& latest_overscroll_delta) override; + EWebView* web_view_; }; diff --git a/tizen_src/ewk/efl_integration/web_contents_observer_efl.cc b/tizen_src/ewk/efl_integration/web_contents_observer_efl.cc index 8917a69..05eacbc 100644 --- a/tizen_src/ewk/efl_integration/web_contents_observer_efl.cc +++ b/tizen_src/ewk/efl_integration/web_contents_observer_efl.cc @@ -12,6 +12,7 @@ #include "browser_context_efl.h" #include "common/print_pages_params.h" #include "common/render_messages_ewk.h" +#include "content/browser/renderer_host/render_widget_host_view_aura.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/favicon_status.h" #include "content/public/browser/file_select_listener.h" @@ -251,6 +252,9 @@ bool WebContentsObserverEfl::OnMessageReceived( IPC_MESSAGE_HANDLER(EwkHostMsg_DidCreateDocumentElement, OnDidCreateDocumentElement) IPC_MESSAGE_HANDLER(EwkHostMsg_PlayLinkEffect, OnPlayLinkEffect) +#if BUILDFLAG(IS_TIZEN) + IPC_MESSAGE_HANDLER(EwkHostMsg_AddEdgeEffectForUIF, OnEdgeEffectForUIF) +#endif IPC_MESSAGE_HANDLER(EwkHostMsg_DidPrintPagesToPdf, OnPrintedMetafileReceived) IPC_MESSAGE_HANDLER(EwkHostMsg_WrtMessage, OnWrtPluginMessage) @@ -309,6 +313,18 @@ void WebContentsObserverEfl::OnPrintedMetafileReceived( params.filename)); } +#if BUILDFLAG(IS_TIZEN) +void WebContentsObserverEfl::OnEdgeEffectForUIF(bool top, + bool bottom, + bool right, + bool left) { + auto* rwhva = static_cast( + web_contents_.GetRenderWidgetHostView()); + if (rwhva) + rwhva->offscreen_helper()->OnEdgeEffectForUIF(top, bottom, right, left); +} +#endif + void WebContentsObserverEfl::OnWrtPluginMessage( const Ewk_Wrt_Message_Data& data) { std::unique_ptr p(new Ewk_Wrt_Message_Data); diff --git a/tizen_src/ewk/efl_integration/web_contents_observer_efl.h b/tizen_src/ewk/efl_integration/web_contents_observer_efl.h index 255067e..0d082a7 100644 --- a/tizen_src/ewk/efl_integration/web_contents_observer_efl.h +++ b/tizen_src/ewk/efl_integration/web_contents_observer_efl.h @@ -78,6 +78,9 @@ class WebContentsObserverEfl : public WebContentsObserver, public IPC::Sender { void OnFormSubmit(const GURL& url); void OnDidNotAllowScript(); void OnPlayLinkEffect(); +#if BUILDFLAG(IS_TIZEN) + void OnEdgeEffectForUIF(bool, bool, bool, bool); +#endif void OnWrtPluginMessage(const Ewk_Wrt_Message_Data& data); void OnWrtPluginSyncMessage(const Ewk_Wrt_Message_Data& data, IPC::Message* reply); -- 2.7.4 From 9053e24a25076a2a35bff41c56b2c770c8cdf064 Mon Sep 17 00:00:00 2001 From: "ayush.k123" Date: Wed, 22 Feb 2023 08:15:01 +0530 Subject: [PATCH 04/16] [M108 Migration] Add "custom,scroll,begin","custom,scroll,end" support Handles and context menu should be temporarily hidden durnig scrolling. But specific applications like email-app uses their own scrolling mechanism within chromium-efl does not know about this happening. This breaks chromium-EFL behaviour. To meet these requirements email-app provided smart callbacks to notify engine that custom scrolling is started and finished. The patch is a counterpart of above smart callbacks. Reference: https://review.tizen.org/gerrit/281741 Change-Id: I5ab6d978b50b4e9ed4302ad28fcc65f1c248453b Signed-off-by: Ayush Kumar --- tizen_src/ewk/efl_integration/eweb_view.cc | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tizen_src/ewk/efl_integration/eweb_view.cc b/tizen_src/ewk/efl_integration/eweb_view.cc index 4638300..5d6f3a4 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.cc +++ b/tizen_src/ewk/efl_integration/eweb_view.cc @@ -115,6 +115,12 @@ static const char* kRendererCrashedHTMLMessage = // that the web view is only partially visible. static const char* kVisibleContentChangedSignalName = "visible,content,changed"; +// email-app specific signal which informs that custom scrolling is started. +const char* kCustomScrollBeginSignalName = "custom,scroll,begin"; + +// email-app specific signal which informs that custom scrolling is finished. +const char* kCustomScrollEndSignalName = "custom,scroll,end"; + inline void SetDefaultStringIfNull(const char*& variable, const char* default_string) { if (!variable) { @@ -284,15 +290,17 @@ void EWebView::VisibleContentChangedCallback(void* user_data, void EWebView::OnCustomScrollBeginCallback(void* user_data, Evas_Object* /*object*/, void* /*event_info*/) { - auto view = static_cast(user_data); - view->GetSelectionController()->SetControlsTemporarilyHidden(true, true); + auto* view = static_cast(user_data); + if (auto* selection_controller = view->GetSelectionController()) + selection_controller->SetControlsTemporarilyHidden(true,true); } void EWebView::OnCustomScrollEndCallback(void* user_data, Evas_Object* /*object*/, void* /*event_info*/) { - auto view = static_cast(user_data); - view->GetSelectionController()->SetControlsTemporarilyHidden(false, true); + auto* view = static_cast(user_data); + if (auto* selection_controller = view->GetSelectionController()) + selection_controller->SetControlsTemporarilyHidden(false,true); } EWebView::EWebView(Ewk_Context* context, Evas_Object* object) @@ -314,6 +322,10 @@ EWebView::EWebView(Ewk_Context* context, Evas_Object* object) kVisibleContentChangedSignalName, VisibleContentChangedCallback, this); + evas_object_smart_callback_add(evas_object_, kCustomScrollBeginSignalName, + OnCustomScrollBeginCallback, this); + evas_object_smart_callback_add(evas_object_, kCustomScrollEndSignalName, + OnCustomScrollEndCallback, this); evas_object_event_callback_add(evas_object_, EVAS_CALLBACK_FOCUS_IN, OnViewFocusIn, this); evas_object_event_callback_add(evas_object_, EVAS_CALLBACK_FOCUS_OUT, @@ -445,6 +457,10 @@ EWebView::~EWebView() { evas_object_smart_callback_del(evas_object_, kVisibleContentChangedSignalName, VisibleContentChangedCallback); + evas_object_smart_callback_del(evas_object_, kCustomScrollBeginSignalName, + OnCustomScrollBeginCallback); + evas_object_smart_callback_del(evas_object_, kCustomScrollEndSignalName, + OnCustomScrollEndCallback); } } -- 2.7.4 From 142c92a44fae95e52a67d4a77a3648427e82fa7f Mon Sep 17 00:00:00 2001 From: "ayush.k123" Date: Tue, 21 Feb 2023 15:04:22 +0530 Subject: [PATCH 05/16] [M108 Migration][WCS] Bringup contents magnifier This patch brings up contents magnifier. Reference: https://review.tizen.org/gerrit/282646/ Change-Id: Ib4dcd1c5d22083c1a601f201989ce3b66eb262f4 Signed-off-by: Ayush Kumar --- .../rwhv_aura_offscreen_helper_efl.cc | 55 +++++++- .../renderer_host/rwhv_aura_offscreen_helper_efl.h | 14 ++ .../browser/selection/selection_controller_efl.cc | 21 +-- .../browser/selection/selection_controller_efl.h | 1 + .../browser/selection/selection_magnifier_efl.cc | 150 ++++++++++++--------- .../browser/selection/selection_magnifier_efl.h | 2 +- 6 files changed, 155 insertions(+), 88 deletions(-) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc index a283e89..cf06dce 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc @@ -465,6 +465,12 @@ void RWHVAuraOffscreenHelperEfl::PaintTextureToSurface(GLuint texture_id) { // for snapshot frame_rendered_ = true; + + // Get snapshot for magnifier. + if (!magnifier_snapshot_request_.is_null()) { + std::move(magnifier_snapshot_request_).Run(); + magnifier_snapshot_request_.Reset(); + } } void RWHVAuraOffscreenHelperEfl::InitEvasGL() { @@ -1309,8 +1315,10 @@ void RWHVAuraOffscreenHelperEfl::SendGestureEvent( blink::WebGestureEvent& event) { HandleGesture(event); blink::WebInputEvent::Type event_type = event.GetType(); - if (event_type == blink::WebInputEvent::Type::kGestureScrollUpdate) + if (magnifier_ && + event_type == blink::WebInputEvent::Type::kGestureScrollUpdate) { return; + } if (event_type != blink::WebInputEvent::Type::kUndefined) { rwhv_aura_->host()->ForwardGestureEventWithLatencyInfo( @@ -1318,6 +1326,51 @@ void RWHVAuraOffscreenHelperEfl::SendGestureEvent( } } +void RWHVAuraOffscreenHelperEfl::set_magnifier(bool status) { + magnifier_ = status; +} + +void RWHVAuraOffscreenHelperEfl::GetMagnifierSnapshot( + gfx::Rect snapshot_area, + float scale_factor, + std::unique_ptr cb) { +#if defined(USE_TTRACE) + TTRACE(TTRACE_TAG_WEB, + "RenderWidgetHostViewAuraHelperEfl::GetMagnifierSnapshot"); +#endif + // GetSnapshot might be replaced with something designed for magnifier. + Evas_Object* image = GetSnapshot(snapshot_area, scale_factor, true); + + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&ScreenshotCapturedCallback::Run, + base::Owned(cb.release()), base::Unretained(image))); +} + +void RWHVAuraOffscreenHelperEfl::RequestMagnifierSnapshotAsync( + const Eina_Rectangle rect, + Screenshot_Captured_Callback callback, + void* user_data, + float scale_factor) { + gfx::Rect snapshot_area(rect.x, rect.y, rect.w, rect.h); + gfx::Rect view_rect = GetViewBoundsInPix(); + + // Adjust snapshot rect for email app + auto visible_viewport_rect = selection_controller_->GetVisibleViewportRect(); + int hidden_view_width = visible_viewport_rect.x() - view_rect.x(); + int hidden_view_height = visible_viewport_rect.y() - view_rect.y(); + if (hidden_view_height || hidden_view_width) { + snapshot_area.set_x(snapshot_area.x() + hidden_view_width); + snapshot_area.set_y(snapshot_area.y() + hidden_view_height); + } + + magnifier_snapshot_request_ = + base::BindOnce(&RWHVAuraOffscreenHelperEfl::GetMagnifierSnapshot, + base::Unretained(this), snapshot_area, scale_factor, + std::move(std::unique_ptr( + new ScreenshotCapturedCallback(callback, user_data)))); +} + void RWHVAuraOffscreenHelperEfl::HandleGesture(blink::WebGestureEvent& event) { SelectionControllerEfl* controller = GetSelectionController(); if (controller) diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h index e195e6b..d462660 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h +++ b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h @@ -165,6 +165,11 @@ class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl { void MoveCaret(const gfx::Point& point); void SelectClosestWord(const gfx::Point& touch_point); bool HasSelectableText(); + void set_magnifier(bool status); + void RequestMagnifierSnapshotAsync(const Eina_Rectangle rect, + Screenshot_Captured_Callback callback, + void* user_data, + float scale_factor = 1.0f); private: static void OnParentViewResize(void* data, Evas*, Evas_Object*, void*); @@ -191,6 +196,9 @@ class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl { void RunGetSnapshotOnMainThread(const gfx::Rect snapshot_area, int request_id, float scale_factor); + void GetMagnifierSnapshot(gfx::Rect snapshot_area, + float scale_factor, + std::unique_ptr cb); ui::EflEventHandler* GetEventHandler(); ui::IMContextEfl* GetIMContextEfl(); @@ -245,11 +253,17 @@ class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl { bool horizontal_panning_hold_ = false; bool vertical_panning_hold_ = false; + bool magnifier_ = false; + OnFocusCallback on_focus_in_callback_; OnFocusCallback on_focus_out_callback_; bool is_content_editable_ = false; std::unique_ptr edge_effect_; + // Magnifier snapshot requests are not added to snapshot_task_list_, because + // we only care about the last one if they piled up - we can only display + // one anyway. + SnapshotTask magnifier_snapshot_request_; }; } // namespace content diff --git a/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc b/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc index ae22b6f..d6e172f 100644 --- a/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc +++ b/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc @@ -518,17 +518,6 @@ void SelectionControllerEfl::HandleDragBeginNotification( handle_being_dragged_ = true; - Evas_Coord x, y; - evas_object_geometry_get(rwhva_->offscreen_helper()->content_image(), &x, &y, - 0, 0); - gfx::Point magnifier_point( - handle->GetBasePosition().x() + x, - handle->GetBasePosition().y() + y); - - magnifier_->UpdateLocation(magnifier_point); - magnifier_->Move(magnifier_point); - magnifier_->Show(); - if (handle == input_handle_.get()) return; @@ -572,12 +561,6 @@ void SelectionControllerEfl::HandleDragUpdateNotification(SelectionHandleEfl* ha gfx::Rect view_bounds = rwhva_->offscreen_helper()->GetViewBoundsInPix(); selection_change_reason_ = Reason::HandleDragged; - gfx::Point magnifier_point; - magnifier_point.set_x(handle->GetBasePosition().x() + view_bounds.x()); - magnifier_point.set_y(handle->GetBasePosition().y() + view_bounds.y()); - magnifier_->UpdateLocation(magnifier_point); - magnifier_->Move(magnifier_point); - switch (handle->Type()) { case SelectionHandleEfl::HANDLE_TYPE_INPUT: { rwhva_->offscreen_helper()->MoveCaret(handle->GetBasePosition()); @@ -611,7 +594,6 @@ void SelectionControllerEfl::HandleDragEndNotification() { ecore_events_filter_ = nullptr; selection_change_reason_ = Reason::Irrelevant; - magnifier_->Hide(); start_handle_->SetBasePosition(selection_data_->GetLeftRect().bottom_left()); end_handle_->SetBasePosition(selection_data_->GetRightRect().bottom_right()); handle_being_dragged_ = false; @@ -750,7 +732,8 @@ void SelectionControllerEfl::HandleLongPressEventPrivate( gfx::Rect view_bounds = rwhva_->offscreen_helper()->GetViewBoundsInPix(); magnifier_->HandleLongPress(gfx::Point(touch_point.x() + view_bounds.x(), - touch_point.y() + view_bounds.y())); + touch_point.y() + view_bounds.y()), + selection_data_->IsInEditField()); } void SelectionControllerEfl::HandleLongPressMoveEvent(const gfx::Point& touch_point) { diff --git a/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h b/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h index fcf9eff..8247b16 100644 --- a/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h +++ b/tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h @@ -49,6 +49,7 @@ class CONTENT_EXPORT SelectionControllerEfl { const content::ContextMenuParams& params); void HandleLongPressMoveEvent(const gfx::Point& touch_point); void HandleLongPressEndEvent(); + bool HandleBeingDragged() const { return handle_being_dragged_; } void PostHandleTapGesture(bool is_content_editable); diff --git a/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.cc b/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.cc index 388e19c..3e863e6 100644 --- a/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.cc +++ b/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.cc @@ -45,7 +45,8 @@ SelectionMagnifierEfl::~SelectionMagnifierEfl() { evas_object_del(container_); } -void SelectionMagnifierEfl::HandleLongPress(const gfx::Point& touch_point) { +void SelectionMagnifierEfl::HandleLongPress(const gfx::Point& touch_point, + bool is_in_edit_field) { evas_object_event_callback_add( controller_->rwhva()->offscreen_helper()->content_image(), EVAS_CALLBACK_MOUSE_MOVE, OnAnimatorMove, this); @@ -55,8 +56,10 @@ void SelectionMagnifierEfl::HandleLongPress(const gfx::Point& touch_point) { // Call OnAnimatorMove here, so that the magnifier widget // gets properly placed. Other calls to it are expected to // happen as a react to finger/mouse movements. - OnAnimatorMove(); - Show(); + if (!is_in_edit_field && !controller_->HandleBeingDragged()) { + OnAnimatorMove(); + Show(); + } } void SelectionMagnifierEfl::DisconnectCallbacks() { @@ -68,8 +71,11 @@ void SelectionMagnifierEfl::DisconnectCallbacks() { EVAS_CALLBACK_MOUSE_UP, OnAnimatorUp); } -void SelectionMagnifierEfl::OnAnimatorMove(void* data, Evas*, Evas_Object*, void*) { - SelectionMagnifierEfl* magnifier_data = static_cast(data); +void SelectionMagnifierEfl::OnAnimatorMove(void* data, + Evas*, + Evas_Object*, + void*) { + auto* magnifier_data = static_cast(data); DCHECK(magnifier_data); if (magnifier_data) @@ -84,12 +90,18 @@ void SelectionMagnifierEfl::OnAnimatorMove() { &point.x, &point.y); gfx::Point display_point(point.x, point.y); controller_->HandleLongPressMoveEvent(display_point); - UpdateLocation(display_point); - Move(display_point); + + if (controller_->GetVisibleViewportRect().Contains(display_point)) { + UpdateLocation(display_point); + Move(display_point); + } } -void SelectionMagnifierEfl::OnAnimatorUp(void* data, Evas*, Evas_Object*, void*) { - SelectionMagnifierEfl* magnifier_data = static_cast(data); +void SelectionMagnifierEfl::OnAnimatorUp(void* data, + Evas*, + Evas_Object*, + void*) { + auto* magnifier_data = static_cast(data); DCHECK(magnifier_data); if (magnifier_data) @@ -103,10 +115,8 @@ void SelectionMagnifierEfl::OnAnimatorUp() { } void SelectionMagnifierEfl::MagnifierGetSnapshotCb(Evas_Object* image, - void* user_data) -{ - SelectionMagnifierEfl* selection_magnifier = - static_cast(user_data); + void* user_data) { + auto* selection_magnifier = static_cast(user_data); if (selection_magnifier->content_image_) { evas_object_del(selection_magnifier->content_image_); @@ -116,8 +126,8 @@ void SelectionMagnifierEfl::MagnifierGetSnapshotCb(Evas_Object* image, selection_magnifier->content_image_ = image; evas_object_show(selection_magnifier->content_image_); - elm_object_part_content_set(selection_magnifier->container_, - "swallow", selection_magnifier->content_image_); + elm_object_part_content_set(selection_magnifier->container_, "swallow", + selection_magnifier->content_image_); evas_object_pass_events_set(selection_magnifier->content_image_, EINA_TRUE); evas_object_clip_set(selection_magnifier->content_image_, selection_magnifier->container_); @@ -127,65 +137,78 @@ void SelectionMagnifierEfl::MagnifierGetSnapshotCb(Evas_Object* image, } void SelectionMagnifierEfl::UpdateLocation(const gfx::Point& location) { - int device_x, device_y, device_width, device_height; - evas_object_geometry_get( - controller_->rwhva()->offscreen_helper()->content_image(), &device_x, - &device_y, &device_width, &device_height); + auto visible_viewport_rect = controller_->GetVisibleViewportRect(); + int visible_viewport_x = visible_viewport_rect.x(); + int visible_viewport_y = visible_viewport_rect.y(); + int visible_viewport_width = visible_viewport_rect.width(); + int visible_viewport_height = visible_viewport_rect.height(); int zoomedWidth = width_ * kZoomScale; int zoomedHeight = height_ * kZoomScale; - if (zoomedWidth > device_width) - zoomedWidth = device_width; + if (zoomedWidth > visible_viewport_width) + zoomedWidth = visible_viewport_width; - if (zoomedHeight > device_height) - zoomedHeight = device_height; + if (zoomedHeight > visible_viewport_height) + zoomedHeight = visible_viewport_height; - gfx::Rect content_rect(location.x() - zoomedWidth/2, - location.y() - zoomedHeight/2, zoomedWidth, zoomedHeight); + // Place screenshot area center on touch point + gfx::Rect content_rect(location.x() - zoomedWidth / 2, + location.y() - zoomedHeight / 2, zoomedWidth, + zoomedHeight); - // Adjustments for boundry conditions - if (content_rect.x() < device_x) - content_rect.set_x(device_x); - else if ((content_rect.x() + zoomedWidth) > device_x + device_width) - content_rect.set_x(device_x + device_width - zoomedWidth); + // Move magnifier rect so it stays inside webview area + if (content_rect.x() < visible_viewport_x) { + content_rect.set_x(visible_viewport_x); + } else if ((content_rect.x() + zoomedWidth) >= + visible_viewport_x + visible_viewport_width) { + content_rect.set_x(visible_viewport_x + visible_viewport_width - + zoomedWidth - 1); + } - if (content_rect.y() < device_y) // Do not let location to be less then magnifier y value - content_rect.set_y(device_y); - else if (content_rect.y() > device_y + device_height - zoomedHeight) - content_rect.set_y(device_y + device_height - zoomedHeight); + if (content_rect.y() < visible_viewport_y) { + content_rect.set_y(visible_viewport_y); + } else if ((content_rect.y() + zoomedHeight) >= + visible_viewport_y + visible_viewport_height) { + content_rect.set_y(visible_viewport_y + visible_viewport_height - + zoomedHeight - 1); + } + // Convert to webview parameter space Eina_Rectangle rect; - rect.x = content_rect.x(); - rect.y = content_rect.y(); + rect.x = content_rect.x() - visible_viewport_x; + rect.y = content_rect.y() - visible_viewport_y; rect.w = content_rect.width(); rect.h = content_rect.height(); -#if !defined(USE_AURA) - RenderWidgetHostViewEfl* rwhv = - static_cast(web_contents_.GetRenderWidgetHostView()); - if (rwhv) - rwhv->RequestSnapshotAsync(rect, MagnifierGetSnapshotCb, this); -#endif + + controller_->rwhva()->offscreen_helper()->RequestMagnifierSnapshotAsync( + rect, MagnifierGetSnapshotCb, this); } void SelectionMagnifierEfl::Move(const gfx::Point& location) { - int device_x, device_y, device_width, device_height; - evas_object_geometry_get( - controller_->rwhva()->offscreen_helper()->content_image(), &device_x, - &device_y, &device_width, &device_height); + auto visible_viewport_rect = controller_->GetVisibleViewportRect(); + int visible_viewport_x = visible_viewport_rect.x(); + int visible_viewport_y = visible_viewport_rect.y(); + int visible_viewport_width = visible_viewport_rect.width(); + int visible_viewport_height = visible_viewport_rect.height(); int magnifier_x = location.x(); int magnifier_y = location.y() - height_ - kHeightOffset; - if (magnifier_y < device_y) // Do not let location to be out of screen - magnifier_y = device_y; - else if (magnifier_y > device_height + device_y - height_) - magnifier_y = device_height + device_y - height_; - - if (magnifier_x < device_x + width_/2) // Do not let location to be out of screen - magnifier_x = device_x + width_/2; - else if (magnifier_x > device_width + device_x - width_/2) - magnifier_x = device_width + device_x - width_/2; + // Do not let location to be out of screen + if (magnifier_y < visible_viewport_y) { + magnifier_y = visible_viewport_y; + } else if (magnifier_y > + visible_viewport_height + visible_viewport_y - height_) { + magnifier_y = visible_viewport_height + visible_viewport_y - height_; + } + // Do not let location to be out of screen + if (magnifier_x < visible_viewport_x + width_ / 2) { + magnifier_x = visible_viewport_x + width_ / 2; + } else if (magnifier_x > + visible_viewport_width + visible_viewport_x - width_ / 2) { + magnifier_x = visible_viewport_width + visible_viewport_x - width_ / 2; + } evas_object_move(container_, magnifier_x, magnifier_y); } @@ -200,12 +223,7 @@ void SelectionMagnifierEfl::Show() { shown_ = true; evas_object_show(container_); -#if !defined(USE_AURA) - RenderWidgetHostViewEfl* rwhv = - static_cast(web_contents_.GetRenderWidgetHostView()); - if (rwhv) - rwhv->set_magnifier(true); -#endif + controller_->rwhva()->offscreen_helper()->set_magnifier(true); if (controller_->rwhva()->offscreen_helper()->ewk_view()) { evas_object_smart_callback_call( controller_->rwhva()->offscreen_helper()->ewk_view(), "magnifier,show", @@ -214,15 +232,13 @@ void SelectionMagnifierEfl::Show() { } void SelectionMagnifierEfl::Hide() { + if (!shown_) + return; + shown_ = false; evas_object_hide(content_image_); evas_object_hide(container_); -#if !defined(USE_AURA) - RenderWidgetHostViewEfl* rwhv = - static_cast(web_contents_.GetRenderWidgetHostView()); - if (rwhv) - rwhv->set_magnifier(false); -#endif + controller_->rwhva()->offscreen_helper()->set_magnifier(false); if (controller_->rwhva()->offscreen_helper()->ewk_view()) { evas_object_smart_callback_call( controller_->rwhva()->offscreen_helper()->ewk_view(), "magnifier,hide", diff --git a/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.h b/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.h index 53cf98e..a693783 100644 --- a/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.h +++ b/tizen_src/chromium_impl/content/browser/selection/selection_magnifier_efl.h @@ -22,7 +22,7 @@ class SelectionMagnifierEfl { SelectionMagnifierEfl(content::SelectionControllerEfl* controller); ~SelectionMagnifierEfl(); - void HandleLongPress(const gfx::Point& touch_point); + void HandleLongPress(const gfx::Point& touch_point, bool is_in_edit_field); void UpdateLocation(const gfx::Point& location); void Move(const gfx::Point& location); void Show(); -- 2.7.4 From 8a9f1476e67548fb103b51b30d4f0753554285d2 Mon Sep 17 00:00:00 2001 From: Gajendra N Date: Wed, 22 Feb 2023 11:11:09 +0530 Subject: [PATCH 06/16] Fix multiwindow event handling issue ParentWindowWithContext is used to maintain hierarchy of aura windows, however it is not suitable for offscreen rendering mode where Native Window is not yet available at the ozone layer during child aura window creation in case of 'CreateNewWindow'. Enabling ParentWindowWithContext causes event handling issue during multiple windows (tabs) scenario, hence it disabling for offscreen case. Change-Id: Iae0f471768b498b1dc1eff5e1e1d15b80f356834 Signed-off-by: Gajendra N --- .../browser/web_contents/web_contents_view_aura.cc | 35 ++++++++++++++-------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc index fb2b9db..f371758 100644 --- a/content/browser/web_contents/web_contents_view_aura.cc +++ b/content/browser/web_contents/web_contents_view_aura.cc @@ -1017,19 +1017,30 @@ void WebContentsViewAura::CreateAuraWindow(aura::Window* context) { window_->set_owned_by_parent(false); window_->SetName("WebContentsViewAura"); window_->Init(ui::LAYER_NOT_DRAWN); - aura::Window* root_window = context ? context->GetRootWindow() : nullptr; - if (root_window) { - // There are places where there is no context currently because object - // hierarchies are built before they're attached to a Widget. (See - // views::WebView as an example; GetWidget() returns NULL at the point - // where we are created.) - // - // It should be OK to not set a default parent since such users will - // explicitly add this WebContentsViewAura to their tree after they create - // us. - aura::client::ParentWindowWithContext(window_.get(), root_window, - root_window->GetBoundsInScreen()); +#if BUILDFLAG(IS_EFL) + // ParentWindowWithContext is not suitable for offscreen rendering mode where + // Native Window is not yet available at the ozone layer during child aura + // window creation in case of 'CreateNewWindow'. Enabling below code causes + // event handling issue during multiple windows (tabs) scenario, hence + // disabling it for offscreen case. + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableOffscreenRendering)) { + aura::Window* root_window = context ? context->GetRootWindow() : nullptr; + if (root_window) { + // There are places where there is no context currently because object + // hierarchies are built before they're attached to a Widget. (See + // views::WebView as an example; GetWidget() returns NULL at the point + // where we are created.) + // + // It should be OK to not set a default parent since such users will + // explicitly add this WebContentsViewAura to their tree after they create + // us. + aura::client::ParentWindowWithContext(window_.get(), root_window, + root_window->GetBoundsInScreen()); + } } +#endif + window_->layer()->SetMasksToBounds(true); window_->TrackOcclusionState(); -- 2.7.4 From cd97a838b15c5bbfe2f3714aaffa5cfe2d5a4ae3 Mon Sep 17 00:00:00 2001 From: lizhifan Date: Tue, 21 Feb 2023 10:38:15 +0800 Subject: [PATCH 07/16] [M108 Migration][VD] Avoid pending frame counter becoming negative There should be only one frame rendering at one time, this counter help scheduler accomplish this task. But sometimes this counter could be notified to decrease more times than it should be, so it becomes negative, then scheduler is not working properly, the FPS will go sky high. From: https://review.tizen.org/gerrit/#/c/platform/framework/web/chromium-efl/+/262951/ Change-Id: Icb7ef4ae0c206a8764581cccb078bb57bbc0c432 Signed-off-by: lizhifan --- cc/scheduler/scheduler_state_machine.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc index 35692af..6a1dd9f 100644 --- a/cc/scheduler/scheduler_state_machine.cc +++ b/cc/scheduler/scheduler_state_machine.cc @@ -1465,7 +1465,8 @@ void SchedulerStateMachine::DidReceiveCompositorFrameAck() { TRACE_EVENT_NESTABLE_ASYNC_END1("cc", "Scheduler:pending_submit_frames", TRACE_ID_LOCAL(this), "pending_frames", pending_submit_frames_); - pending_submit_frames_--; + if (pending_submit_frames_ > 0) + pending_submit_frames_--; } void SchedulerStateMachine::SetTreePrioritiesAndScrollState( -- 2.7.4 From dfeeefc6f3364ef28e076c2ec9b10686d615f72a Mon Sep 17 00:00:00 2001 From: Chandan Padhi Date: Thu, 16 Feb 2023 21:03:24 +0530 Subject: [PATCH 08/16] Shorten NotifySwap path for offscreen rendering This commit shortens NotifySwap path by removing some of the changes in upstream code. w/o patch: SkiaOutputSurfaceImpl->Display(OutputSurfaceClient)-> RootCompositorFrameSinkImpl(DisplayClient)->FrameSinkManagerImpl-> HostFrameSinkManager(FrameSinkManagerClient)-> DelegatedFrameHost(HostFrameSinkClient)-> DelegatedFrameHostClientAura(DelegatedFrameHostClient)-> RenderWidgetHostViewAura->RWHVAuraOffscreenHelperEfl with patch: SkiaOutputSurfaceImpl->Display(OutputSurfaceClient)-> RootCompositorFrameSinkImpl(DisplayClient)-> HostDisplayClient(mojom::DisplayClient)->Compositor-> CompositorObserverEfl(CompositorObserver)-> RWHVAuraOffscreenHelperEfl Reference: https://review.tizen.org/gerrit/287806/ Change-Id: I5dbfad3a6bb8460804045c6a8b66bae1f74130ac Signed-off-by: Chandan Padhi --- components/viz/host/host_frame_sink_client.h | 3 -- components/viz/host/host_frame_sink_manager.cc | 12 ------- components/viz/host/host_frame_sink_manager.h | 5 --- .../service/frame_sinks/frame_sink_manager_impl.cc | 8 ----- .../service/frame_sinks/frame_sink_manager_impl.h | 4 --- .../frame_sinks/root_compositor_frame_sink_impl.cc | 4 +-- .../compositor/viz_process_transport_factory.cc | 6 ++++ .../browser/renderer_host/delegated_frame_host.cc | 6 ---- .../browser/renderer_host/delegated_frame_host.h | 7 ---- .../delegated_frame_host_client_aura.cc | 6 ---- .../delegated_frame_host_client_aura.h | 3 -- .../renderer_host/render_widget_host_view_aura.cc | 5 --- .../renderer_host/render_widget_host_view_aura.h | 1 - services/viz/privileged/mojom/compositing/BUILD.gn | 2 +- .../mojom/compositing/display_private.mojom | 3 ++ .../mojom/compositing/frame_sink_manager.mojom | 3 -- .../rwhv_aura_offscreen_helper_efl.cc | 1 + .../renderer_host/rwhv_aura_offscreen_helper_efl.h | 1 - .../ui/compositor/compositor_observer_efl.cc | 39 ++++++++++++++++++++ .../ui/compositor/compositor_observer_efl.h | 42 ++++++++++++++++++++++ tizen_src/chromium_impl/ui/ui_efl.gni | 7 +++- tizen_src/ewk/efl_integration/eweb_view.cc | 5 +++ tizen_src/ewk/efl_integration/eweb_view.h | 1 + ui/compositor/BUILD.gn | 8 +++++ ui/compositor/compositor.cc | 7 ++++ ui/compositor/compositor.h | 4 +++ ui/compositor/compositor_observer.h | 4 +++ 27 files changed, 129 insertions(+), 68 deletions(-) create mode 100644 tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.cc create mode 100644 tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.h diff --git a/components/viz/host/host_frame_sink_client.h b/components/viz/host/host_frame_sink_client.h index 9e04e64..288cf89 100644 --- a/components/viz/host/host_frame_sink_client.h +++ b/components/viz/host/host_frame_sink_client.h @@ -22,9 +22,6 @@ class HostFrameSinkClient { // Called when a CompositorFrame with a new frame token is provided. virtual void OnFrameTokenChanged(uint32_t frame_token, base::TimeTicks activation_time) = 0; -#if BUILDFLAG(IS_EFL) - virtual void NotifySwap(const uint32_t texture_id) {} -#endif protected: virtual ~HostFrameSinkClient() {} diff --git a/components/viz/host/host_frame_sink_manager.cc b/components/viz/host/host_frame_sink_manager.cc index 2e759a3..8d724ed 100644 --- a/components/viz/host/host_frame_sink_manager.cc +++ b/components/viz/host/host_frame_sink_manager.cc @@ -441,16 +441,4 @@ HostFrameSinkManager::FrameSinkData::~FrameSinkData() = default; HostFrameSinkManager::FrameSinkData& HostFrameSinkManager::FrameSinkData:: operator=(FrameSinkData&& other) = default; -#if BUILDFLAG(IS_EFL) -void HostFrameSinkManager::NotifySwap(const uint32_t texture_id, - const FrameSinkId& frame_sink_id) { - auto iter = frame_sink_data_map_.find(frame_sink_id); - if (iter != frame_sink_data_map_.end()) { - const FrameSinkData& data = iter->second; - if (data.client) - data.client->NotifySwap(texture_id); - } -} -#endif - } // namespace viz diff --git a/components/viz/host/host_frame_sink_manager.h b/components/viz/host/host_frame_sink_manager.h index b0cada9..0c8c1a6 100644 --- a/components/viz/host/host_frame_sink_manager.h +++ b/components/viz/host/host_frame_sink_manager.h @@ -295,11 +295,6 @@ class VIZ_HOST_EXPORT HostFrameSinkManager const bool enable_sync_window_destruction_; -#if BUILDFLAG(IS_EFL) - void NotifySwap(const uint32_t texture_id, - const FrameSinkId& frame_sink_id) override; -#endif - // Connections to/from FrameSinkManagerImpl. mojo::Remote frame_sink_manager_remote_; // This will point to |frame_sink_manager_remote_| if using mojo or it may diff --git a/components/viz/service/frame_sinks/frame_sink_manager_impl.cc b/components/viz/service/frame_sinks/frame_sink_manager_impl.cc index b95e558..7c25edc 100644 --- a/components/viz/service/frame_sinks/frame_sink_manager_impl.cc +++ b/components/viz/service/frame_sinks/frame_sink_manager_impl.cc @@ -808,12 +808,4 @@ void FrameSinkManagerImpl::ClearThrottling(const FrameSinkId& id) { UpdateThrottlingRecursively(id, base::TimeDelta()); } -#if BUILDFLAG(IS_EFL) -void FrameSinkManagerImpl::NotifySwap(const uint32_t texture_id, - const FrameSinkId& id) { - for (auto child : GetChildrenByParent(id)) - client_->NotifySwap(texture_id, child); -} -#endif - } // namespace viz diff --git a/components/viz/service/frame_sinks/frame_sink_manager_impl.h b/components/viz/service/frame_sinks/frame_sink_manager_impl.h index 418747b..aae01af 100644 --- a/components/viz/service/frame_sinks/frame_sink_manager_impl.h +++ b/components/viz/service/frame_sinks/frame_sink_manager_impl.h @@ -257,10 +257,6 @@ class VIZ_SERVICE_EXPORT FrameSinkManagerImpl bool VerifySandboxedThreadIds( base::flat_set thread_ids); -#if BUILDFLAG(IS_EFL) - void NotifySwap(const uint32_t texture_id, const FrameSinkId& id); -#endif - private: friend class FrameSinkManagerTest; diff --git a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc b/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc index 0b6f3f8..821d45b 100644 --- a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc +++ b/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc @@ -625,8 +625,8 @@ BeginFrameSource* RootCompositorFrameSinkImpl::begin_frame_source() { #if BUILDFLAG(IS_EFL) void RootCompositorFrameSinkImpl::NotifySwap(const uint32_t texture_id) { - support_->frame_sink_manager()->NotifySwap(texture_id, - support_->frame_sink_id()); + if (display_client_) + display_client_->NotifySwap(texture_id); } #endif diff --git a/content/browser/compositor/viz_process_transport_factory.cc b/content/browser/compositor/viz_process_transport_factory.cc index 4c5bf12..5855d1e 100644 --- a/content/browser/compositor/viz_process_transport_factory.cc +++ b/content/browser/compositor/viz_process_transport_factory.cc @@ -124,6 +124,12 @@ class HostDisplayClient : public viz::HostDisplayClient { } #endif +#if BUILDFLAG(IS_EFL) + void NotifySwap(const uint32_t texture_id) override { + compositor_->NotifySwap(texture_id); + } +#endif + private: [[maybe_unused]] const raw_ptr compositor_; }; diff --git a/content/browser/renderer_host/delegated_frame_host.cc b/content/browser/renderer_host/delegated_frame_host.cc index 2f07bdb..b089659 100644 --- a/content/browser/renderer_host/delegated_frame_host.cc +++ b/content/browser/renderer_host/delegated_frame_host.cc @@ -329,12 +329,6 @@ void DelegatedFrameHost::OnFrameTokenChanged(uint32_t frame_token, client_->OnFrameTokenChanged(frame_token, activation_time); } -#if BUILDFLAG(IS_EFL) -void DelegatedFrameHost::NotifySwap(const uint32_t texture_id) { - client_->NotifySwap(texture_id); -} -#endif - // CommitPending without a target for TakeFallbackContentFrom. Since we cannot // guarantee that Navigation will complete, evict our surfaces which are from // a previous Navigation. diff --git a/content/browser/renderer_host/delegated_frame_host.h b/content/browser/renderer_host/delegated_frame_host.h index 85e3aa2..7d55757 100644 --- a/content/browser/renderer_host/delegated_frame_host.h +++ b/content/browser/renderer_host/delegated_frame_host.h @@ -54,9 +54,6 @@ class CONTENT_EXPORT DelegatedFrameHostClient { virtual void InvalidateLocalSurfaceIdOnEviction() = 0; virtual std::vector CollectSurfaceIdsForEviction() = 0; virtual bool ShouldShowStaleContentOnEviction() = 0; -#if BUILDFLAG(IS_EFL) - virtual void NotifySwap(const uint32_t texture_id) {} -#endif }; // The DelegatedFrameHost is used to host all of the RenderWidgetHostView state @@ -108,10 +105,6 @@ class CONTENT_EXPORT DelegatedFrameHost void OnFrameTokenChanged(uint32_t frame_token, base::TimeTicks activation_time) override; -#if BUILDFLAG(IS_EFL) - void NotifySwap(const uint32_t texture_id) override; -#endif - // Public interface exposed to RenderWidgetHostView. // kOccluded means the native window for the host was diff --git a/content/browser/renderer_host/delegated_frame_host_client_aura.cc b/content/browser/renderer_host/delegated_frame_host_client_aura.cc index d667785..6e1b082 100644 --- a/content/browser/renderer_host/delegated_frame_host_client_aura.cc +++ b/content/browser/renderer_host/delegated_frame_host_client_aura.cc @@ -64,10 +64,4 @@ bool DelegatedFrameHostClientAura::ShouldShowStaleContentOnEviction() { return render_widget_host_view_->ShouldShowStaleContentOnEviction(); } -#if BUILDFLAG(IS_EFL) -void DelegatedFrameHostClientAura::NotifySwap(const uint32_t texture_id) { - render_widget_host_view_->NotifySwap(texture_id); -} -#endif - } // namespace content diff --git a/content/browser/renderer_host/delegated_frame_host_client_aura.h b/content/browser/renderer_host/delegated_frame_host_client_aura.h index 074e6e2..87a23e8 100644 --- a/content/browser/renderer_host/delegated_frame_host_client_aura.h +++ b/content/browser/renderer_host/delegated_frame_host_client_aura.h @@ -42,9 +42,6 @@ class CONTENT_EXPORT DelegatedFrameHostClientAura void InvalidateLocalSurfaceIdOnEviction() override; std::vector CollectSurfaceIdsForEviction() override; bool ShouldShowStaleContentOnEviction() override; -#if BUILDFLAG(IS_EFL) - void NotifySwap(const uint32_t texture_id) override; -#endif private: raw_ptr render_widget_host_view_; diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index 133558d..21d097e 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -564,11 +564,6 @@ void RenderWidgetHostViewAura::BackgroundColorReceived(int callback_id, offscreen_helper_->BackgroundColorReceived(callback_id, bg_color); } -void RenderWidgetHostViewAura::NotifySwap(const uint32_t texture_id) { - if (offscreen_helper_) - offscreen_helper_->NotifySwap(texture_id); -} - void RenderWidgetHostViewAura::DidGetContentSnapshot(const SkBitmap& bitmap, int request_id) { if (offscreen_helper_) diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h index 014d829..701f9a2 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.h +++ b/content/browser/renderer_host/render_widget_host_view_aura.h @@ -422,7 +422,6 @@ class CONTENT_EXPORT RenderWidgetHostViewAura RWHVAuraOffscreenHelperEfl* offscreen_helper() { return offscreen_helper_.get(); } - void NotifySwap(const uint32_t texture_id); void DidGetContentSnapshot(const SkBitmap& bitmap, int request_id) override; void DidHandleKeyEvent(blink::WebInputEvent::Type input_event, bool processed) override; diff --git a/services/viz/privileged/mojom/compositing/BUILD.gn b/services/viz/privileged/mojom/compositing/BUILD.gn index 8a28eee..a7fe718 100644 --- a/services/viz/privileged/mojom/compositing/BUILD.gn +++ b/services/viz/privileged/mojom/compositing/BUILD.gn @@ -44,7 +44,7 @@ mojom("compositing") { enabled_features += [ "enable_cast_overlay_strategy" ] } if (use_efl) { - enabled_features += [ "use_efl" ] + enabled_features += [ "is_efl" ] } cpp_typemaps = [ diff --git a/services/viz/privileged/mojom/compositing/display_private.mojom b/services/viz/privileged/mojom/compositing/display_private.mojom index 44e7dde..116905f 100644 --- a/services/viz/privileged/mojom/compositing/display_private.mojom +++ b/services/viz/privileged/mojom/compositing/display_private.mojom @@ -125,4 +125,7 @@ interface DisplayClient { [EnableIf=is_android] SetPreferredRefreshRate(float refresh_rate); + + [EnableIf=is_efl] + NotifySwap(uint32 texture_id); }; diff --git a/services/viz/privileged/mojom/compositing/frame_sink_manager.mojom b/services/viz/privileged/mojom/compositing/frame_sink_manager.mojom index 2ac593f..5776b0b 100644 --- a/services/viz/privileged/mojom/compositing/frame_sink_manager.mojom +++ b/services/viz/privileged/mojom/compositing/frame_sink_manager.mojom @@ -192,7 +192,4 @@ interface FrameSinkManagerClient { // when a surface of the provided |frame_sink_id| activates. OnFrameTokenChanged(FrameSinkId frame_sink_id, uint32 frame_token, mojo_base.mojom.TimeTicks activation_time); - - [EnableIf=use_efl] - NotifySwap(uint32 texture_id, FrameSinkId frame_sink_id); }; diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc index cf06dce..ee3e3f8 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc +++ b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc @@ -14,6 +14,7 @@ #include "content/browser/web_contents/web_contents_view_aura.h" #include "content/public/browser/render_widget_host_helper.h" #include "content/public/browser/web_contents_delegate.h" +#include "ecore_x_wayland_wrapper.h" #include "gpu/command_buffer/service/texture_base.h" #include "skia/ext/image_operations.h" #include "tizen/system_info.h" diff --git a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h index d462660..42ad061 100644 --- a/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h +++ b/tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h @@ -14,7 +14,6 @@ #include #include #include -#include "ecore_x_wayland_wrapper.h" #include "base/callback.h" #include "base/containers/id_map.h" diff --git a/tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.cc b/tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.cc new file mode 100644 index 0000000..52dcb89 --- /dev/null +++ b/tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.cc @@ -0,0 +1,39 @@ +// Copyright 2023 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 "ui/compositor/compositor_observer_efl.h" + +#include "content/browser/renderer_host/render_widget_host_view_aura.h" +#include "content/public/browser/web_contents.h" +#include "ui/compositor/compositor.h" + +namespace ui { + +CompositorObserverEfl::CompositorObserverEfl(ui::Compositor* compositor, + content::WebContents* web_contents) + : compositor_(compositor), web_contents_(web_contents) { + compositor_->AddObserver(this); +} + +CompositorObserverEfl::~CompositorObserverEfl() { + if (compositor_) + compositor_->RemoveObserver(this); +} + +void CompositorObserverEfl::NotifySwap(const uint32_t texture_id) { + auto* rwhva = static_cast( + web_contents_->GetRenderWidgetHostView()); + if (!rwhva || !rwhva->offscreen_helper()) + return; + + rwhva->offscreen_helper()->NotifySwap(texture_id); +} + +void CompositorObserverEfl::OnCompositingShuttingDown( + ui::Compositor* compositor) { + DCHECK_EQ(compositor, compositor_); + compositor_->RemoveObserver(this); + compositor_ = nullptr; +} +} // namespace ui diff --git a/tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.h b/tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.h new file mode 100644 index 0000000..2bf46b7 --- /dev/null +++ b/tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.h @@ -0,0 +1,42 @@ +// Copyright 2023 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_COMPOSITOR_COMPOSITOR_OBSERVER_EFL_H_ +#define UI_COMPOSITOR_COMPOSITOR_OBSERVER_EFL_H_ + +#include "ui/compositor/compositor_export.h" +#include "ui/compositor/compositor_observer.h" + +namespace content { +class WebContents; +} // namespace content + +namespace ui { + +class Compositor; + +class COMPOSITOR_EXPORT CompositorObserverEfl : public CompositorObserver { + public: + CompositorObserverEfl(Compositor* compositor, + content::WebContents* web_contents); + + CompositorObserverEfl(const CompositorObserverEfl&) = delete; + CompositorObserverEfl& operator=(const CompositorObserverEfl&) = delete; + + ~CompositorObserverEfl() override; + + ui::Compositor* compositor() { return compositor_; } + + private: + // ui::CompositorObserver implementation: + void NotifySwap(const uint32_t texture_id) override; + void OnCompositingShuttingDown(Compositor* compositor) override; + + Compositor* compositor_; + content::WebContents* web_contents_; +}; + +} // namespace ui + +#endif // UI_COMPOSITOR_COMPOSITOR_OBSERVER_EFL_H_ diff --git a/tizen_src/chromium_impl/ui/ui_efl.gni b/tizen_src/chromium_impl/ui/ui_efl.gni index 1a0117f..7e08db0 100644 --- a/tizen_src/chromium_impl/ui/ui_efl.gni +++ b/tizen_src/chromium_impl/ui/ui_efl.gni @@ -134,4 +134,9 @@ if (!use_aura) { external_ui_accessiblility_platform_sources = [ "//tizen_src/chromium_impl/ui/accessibility/platform/ax_platform_node_efl.cc", "//tizen_src/chromium_impl/ui/accessibility/platform/ax_platform_node_efl.h", -] \ No newline at end of file +] + +external_ui_compositor_sources = [ + "//tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.cc", + "//tizen_src/chromium_impl/ui/compositor/compositor_observer_efl.h", +] diff --git a/tizen_src/ewk/efl_integration/eweb_view.cc b/tizen_src/ewk/efl_integration/eweb_view.cc index 5d6f3a4..76e4b48 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.cc +++ b/tizen_src/ewk/efl_integration/eweb_view.cc @@ -77,6 +77,7 @@ #include "ui/aura/window.h" #include "ui/base/clipboard/clipboard_helper_efl.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/compositor/compositor_observer_efl.h" #include "ui/display/screen.h" #include "ui/events/event_switches.h" #include "ui/gfx/geometry/dip_util.h" @@ -435,6 +436,8 @@ EWebView::~EWebView() { context_menu_.reset(); mhtml_callback_map_.Clear(); + compositor_observer_.reset(); + // Release manually those scoped pointers to // make sure they are released in correct order web_contents_.reset(); @@ -2498,6 +2501,8 @@ void EWebView::InitializeWindowTreeHost() { std::make_unique(host_->window()); window_parenting_client_ = std::make_unique(host_->window()); + compositor_observer_ = std::make_unique( + host_->compositor(), web_contents_.get()); aura::Window* content = web_contents_->GetNativeView(); aura::Window* parent = host_->window(); diff --git a/tizen_src/ewk/efl_integration/eweb_view.h b/tizen_src/ewk/efl_integration/eweb_view.h index 17cb0c3..571af8c 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.h +++ b/tizen_src/ewk/efl_integration/eweb_view.h @@ -864,6 +864,7 @@ class EWebView { std::unique_ptr host_; std::unique_ptr focus_client_; std::unique_ptr window_parenting_client_; + std::unique_ptr compositor_observer_; content::DateTimeChooserEfl* date_time_chooser_ = nullptr; #if defined(TIZEN_ATK_SUPPORT) diff --git a/ui/compositor/BUILD.gn b/ui/compositor/BUILD.gn index d42dd37..cdf5544 100644 --- a/ui/compositor/BUILD.gn +++ b/ui/compositor/BUILD.gn @@ -5,6 +5,10 @@ import("//build/config/ui.gni") import("//testing/test.gni") +if (use_efl) { + import("//tizen_src/chromium_impl/ui/ui_efl.gni") +} + component("compositor") { sources = [ "animation_throughput_reporter.cc", @@ -87,6 +91,10 @@ component("compositor") { ] } + if (use_efl) { + sources += external_ui_compositor_sources + } + defines = [ "COMPOSITOR_IMPLEMENTATION" ] public_deps = [ "//cc" ] diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc index ea97a5f..16177cf 100644 --- a/ui/compositor/compositor.cc +++ b/ui/compositor/compositor.cc @@ -875,6 +875,13 @@ void Compositor::OnCompleteSwapWithNewSize(const gfx::Size& size) { } #endif +#if BUILDFLAG(IS_EFL) +void Compositor::NotifySwap(const uint32_t texture_id) { + for (auto& observer : observer_list_) + observer.NotifySwap(texture_id); +} +#endif + void Compositor::SetOutputIsSecure(bool output_is_secure) { output_is_secure_ = output_is_secure; if (display_private_) diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h index ad691e7..1fedaa1 100644 --- a/ui/compositor/compositor.h +++ b/ui/compositor/compositor.h @@ -424,6 +424,10 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver, void OnCompleteSwapWithNewSize(const gfx::Size& size); #endif +#if BUILDFLAG(IS_EFL) + void NotifySwap(const uint32_t texture_id); +#endif + bool IsLocked() { return lock_manager_.IsLocked(); } void SetOutputIsSecure(bool output_is_secure); diff --git a/ui/compositor/compositor_observer.h b/ui/compositor/compositor_observer.h index 8e00a18..1814689 100644 --- a/ui/compositor/compositor_observer.h +++ b/ui/compositor/compositor_observer.h @@ -54,6 +54,10 @@ class COMPOSITOR_EXPORT CompositorObserver { const gfx::Size& size) {} #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +#if BUILDFLAG(IS_EFL) + virtual void NotifySwap(const uint32_t texture_id) {} +#endif + // Called at the top of the compositor's destructor, to give observers a // chance to remove themselves. virtual void OnCompositingShuttingDown(Compositor* compositor) {} -- 2.7.4 From 0d0b696d2e76bca0989dbae216e55cee71565f7d Mon Sep 17 00:00:00 2001 From: "yh106.jung" Date: Wed, 22 Feb 2023 19:29:13 -0800 Subject: [PATCH 09/16] Do not include chromium internal headers in ewk header This patch does not include build_config.h to ewk headers, but to ewk sources in order to resolve build breaks that occur in modules that reference chromium-efl. Change-Id: Ic683dfce4c3e516a00121e005bdf1bb34516171f Signed-off-by: yh106.jung --- .../ewk/efl_integration/public/ewk_context_menu.cc | 13 +++++++++++-- .../public/ewk_context_menu_product.h | 4 ---- .../public/ewk_media_playback_info.cc | 19 +++++++++++++++++-- .../public/ewk_media_playback_info_product.h | 4 ---- .../public/ewk_media_subtitle_info.cc | 22 ++++++++++++++++++++-- .../public/ewk_media_subtitle_info_product.h | 4 ---- 6 files changed, 48 insertions(+), 18 deletions(-) diff --git a/tizen_src/ewk/efl_integration/public/ewk_context_menu.cc b/tizen_src/ewk/efl_integration/public/ewk_context_menu.cc index 6347a38..3b8e6ae 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_context_menu.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_context_menu.cc @@ -5,6 +5,7 @@ #include "ewk_context_menu_product.h" #include +#include "build/build_config.h" #include "private/ewk_private.h" #include "private/ewk_context_menu_private.h" #include "context_menu_controller_efl.h" @@ -144,16 +145,24 @@ Eina_Bool ewk_context_menu_hide(Ewk_Context_Menu* menu) return false; } -#if BUILDFLAG(IS_TIZEN_TV) int ewk_context_menu_pos_x_get(Ewk_Context_Menu* menu) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); return 0; +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); + return 0; +#endif } int ewk_context_menu_pos_y_get(Ewk_Context_Menu* menu) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); return 0; +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); + return 0; +#endif } -#endif // IS_TIZEN_TV diff --git a/tizen_src/ewk/efl_integration/public/ewk_context_menu_product.h b/tizen_src/ewk/efl_integration/public/ewk_context_menu_product.h index 4d5ba0a..dd7fdc4 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_context_menu_product.h +++ b/tizen_src/ewk/efl_integration/public/ewk_context_menu_product.h @@ -33,8 +33,6 @@ #include "ewk_context_menu_internal.h" -#include "build/build_config.h" - #ifdef __cplusplus extern "C" { #endif @@ -111,7 +109,6 @@ EXPORT_API Eina_Bool ewk_context_menu_item_select(Ewk_Context_Menu *menu, Ewk_Co */ EXPORT_API Eina_Bool ewk_context_menu_hide(Ewk_Context_Menu *menu); -#if BUILDFLAG(IS_TIZEN_TV) /** * Gets the x_position of context menu. * @@ -127,7 +124,6 @@ EXPORT_API int ewk_context_menu_pos_x_get(Ewk_Context_Menu* menu); * @return the y_position of context menu on success or @c 0 on failure */ EXPORT_API int ewk_context_menu_pos_y_get(Ewk_Context_Menu* menu); -#endif // IS_TIZEN_TV #ifdef __cplusplus } diff --git a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.cc b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.cc index 980cc50..b7baf7e 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info.cc @@ -24,6 +24,8 @@ */ #include "ewk_media_playback_info_product.h" + +#include "build/build_config.h" #include "private/ewk_private.h" const char* ewk_media_playback_info_media_url_get( @@ -71,24 +73,37 @@ const int ewk_media_playback_info_video_id_get(Ewk_Media_Playback_Info* data) LOG_EWK_API_MOCKUP(); } -#if BUILDFLAG(IS_TIZEN_TV) Ewk_Media_Playback_Info* ewkMediaPlaybackInfoCreate(const int player_id, const char* url, const char* mime_type) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); return NULL; +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); + return NULL; +#endif + } Eina_Bool ewk_media_playback_info_media_resource_acquired_get( Ewk_Media_Playback_Info* data) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); return EINA_FALSE; +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); + return EINA_FALSE; +#endif } void ewkMediaPlaybackInfoDelete(Ewk_Media_Playback_Info* data) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); -} +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); #endif +} diff --git a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info_product.h b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info_product.h index 895c9e0..a7689d5 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_media_playback_info_product.h +++ b/tizen_src/ewk/efl_integration/public/ewk_media_playback_info_product.h @@ -35,8 +35,6 @@ #include #include -#include "build/build_config.h" - #ifdef __cplusplus extern "C" { #endif @@ -120,14 +118,12 @@ EXPORT_API void ewk_media_playback_info_drm_info_set( Ewk_Media_Playback_Info* data, const char* drm_info); -#if BUILDFLAG(IS_TIZEN_TV) Ewk_Media_Playback_Info* ewkMediaPlaybackInfoCreate(const int player_id, const char* url, const char* mime_type); Eina_Bool ewk_media_playback_info_media_resource_acquired_get( Ewk_Media_Playback_Info* data); void ewkMediaPlaybackInfoDelete(Ewk_Media_Playback_Info* data); -#endif #ifdef __cplusplus } diff --git a/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.cc b/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.cc index 3a681da..7c0cb73 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info.cc @@ -3,6 +3,8 @@ // found in the LICENSE file. #include "ewk_media_subtitle_info_product.h" + +#include "build/build_config.h" #include "private/ewk_private.h" int ewk_media_subtitle_info_id_get(Ewk_Media_Subtitle_Info *data) @@ -53,26 +55,42 @@ const void* ewk_media_subtitle_data_get(Ewk_Media_Subtitle_Data *data) return NULL; } -#if BUILDFLAG(IS_TIZEN_TV) Ewk_Media_Subtitle_Info* ewkMediaSubtitleInfoCreate(int id, const char* url, const char* lang, const char* label) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); return NULL; +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); + return NULL; +#endif } void ewkMediaSubtitleInfoDelete(Ewk_Media_Subtitle_Info* data) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); +#endif } Ewk_Media_Subtitle_Data* ewkMediaSubtitleDataCreate(int id, double timestamp, const void* data, unsigned size) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); return NULL; +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); + return NULL; +#endif } void ewkMediaSubtitleDataDelete(Ewk_Media_Subtitle_Data* data) { +#if BUILDFLAG(IS_TIZEN_TV) LOG_EWK_API_MOCKUP(); -} +#else + LOG_EWK_API_MOCKUP("Only for Tizen TV."); #endif +} diff --git a/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info_product.h b/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info_product.h index 678eb2d..6036ad8 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info_product.h +++ b/tizen_src/ewk/efl_integration/public/ewk_media_subtitle_info_product.h @@ -35,8 +35,6 @@ #include #include -#include "build/build_config.h" - #ifdef __cplusplus extern "C" { #endif @@ -117,7 +115,6 @@ EXPORT_API unsigned ewk_media_subtitle_data_size_get(Ewk_Media_Subtitle_Data *da */ EXPORT_API const void* ewk_media_subtitle_data_get(Ewk_Media_Subtitle_Data *data); -#if BUILDFLAG(IS_TIZEN_TV) Ewk_Media_Subtitle_Info* ewkMediaSubtitleInfoCreate(int id, const char* url, const char* lang, const char* label); @@ -127,7 +124,6 @@ Ewk_Media_Subtitle_Data* ewkMediaSubtitleDataCreate(int id, double timestamp, const void* data, unsigned size); void ewkMediaSubtitleDataDelete(Ewk_Media_Subtitle_Data* data); -#endif #ifdef __cplusplus } -- 2.7.4 From f8847dea5cdadcb4eefe5202cd811d74abb26a6c Mon Sep 17 00:00:00 2001 From: "fr.fang" Date: Wed, 22 Feb 2023 09:24:18 +0800 Subject: [PATCH 10/16] [M108 Migration][HBBTV] Implement new ewk context api Support incognito mode in Injected bundle, implement the api of ewk_context_new_with_injected_bundle_path_in_incognito_mode for the request from hbbtv. Reference: https://review.tizen.org/gerrit/#/c/281230 Change-Id: I4f5153f0a88b2fbd655f8a597ba8d78955b122d4 Signed-off-by: fr.fang --- tizen_src/ewk/efl_integration/eweb_context.cc | 6 ------ tizen_src/ewk/efl_integration/eweb_context.h | 2 -- .../ewk/efl_integration/private/ewk_context_private.cc | 17 +++++++++-------- .../ewk/efl_integration/private/ewk_context_private.h | 5 +++-- tizen_src/ewk/efl_integration/public/ewk_context.cc | 7 ++++--- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/tizen_src/ewk/efl_integration/eweb_context.cc b/tizen_src/ewk/efl_integration/eweb_context.cc index 47e9c4c..b2c3b7d 100644 --- a/tizen_src/ewk/efl_integration/eweb_context.cc +++ b/tizen_src/ewk/efl_integration/eweb_context.cc @@ -305,12 +305,6 @@ bool EWebContext::OverrideMimeForURL(const std::string& url_spec, return false; } -EWebContext::EWebContext(bool incognito) - : EWebContext(incognito, std::string()) {} - -EWebContext::EWebContext(const std::string& injectedBundlePath) - : EWebContext(false, injectedBundlePath) {} - EWebContext::EWebContext(bool incognito, const std::string& injectedBundlePath) : injected_bundle_path_(injectedBundlePath), #if BUILDFLAG(IS_TIZEN) diff --git a/tizen_src/ewk/efl_integration/eweb_context.h b/tizen_src/ewk/efl_integration/eweb_context.h index 3e6cdf0..bb51d19 100644 --- a/tizen_src/ewk/efl_integration/eweb_context.h +++ b/tizen_src/ewk/efl_integration/eweb_context.h @@ -206,8 +206,6 @@ class EWebContext { void SetMaxRefreshRate(int max_refresh_rate); private: - EWebContext(bool incognito); - EWebContext(const std::string& injectedBundlePath); EWebContext(bool incognito, const std::string& injectedBundlePath); ~EWebContext(); friend class Ewk_Context; 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 9cc1f2d..be871bd 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_context_private.cc +++ b/tizen_src/ewk/efl_integration/private/ewk_context_private.cc @@ -60,8 +60,9 @@ Ewk_Context* Ewk_Context::Create(bool incognito) { } // static -Ewk_Context* Ewk_Context::Create(const std::string& injectedBundlePath) { - Ewk_Context* context = new Ewk_Context(injectedBundlePath); +Ewk_Context* Ewk_Context::Create(bool incognito, + const std::string& injected_bundle_path) { + Ewk_Context* context = new Ewk_Context(incognito, injected_bundle_path); context->AddRef(); return context; } @@ -80,12 +81,12 @@ void Ewk_Context::Delete(Ewk_Context* context) { } } -Ewk_Context::Ewk_Context(bool incognito) : impl(new EWebContext(incognito)) { -} +Ewk_Context::Ewk_Context(bool incognito) + : impl(new EWebContext(incognito, std::string())) {} -Ewk_Context::Ewk_Context(const std::string& injectedBundlePath) - : impl(new EWebContext(injectedBundlePath)) { -} +Ewk_Context::Ewk_Context(bool incognito, + const std::string& injected_bundle_path) + : impl(new EWebContext(incognito, injected_bundle_path)) {} Ewk_Context::~Ewk_Context() { if (this == default_context_) @@ -341,4 +342,4 @@ Ewk_Application_Type Ewk_Context::GetApplicationType() const { void Ewk_Context::SetMaxRefreshRate(int max_refresh_rate) { impl->SetMaxRefreshRate(max_refresh_rate); -} \ No newline at end of file +} 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 a7af91a..fc39ea3 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_context_private.h +++ b/tizen_src/ewk/efl_integration/private/ewk_context_private.h @@ -28,7 +28,8 @@ struct Ewk_Context : public base::RefCounted { static Ewk_Context* IncognitoContext(); static void DefaultContextRelease(); static Ewk_Context* Create(bool incognito = false); - static Ewk_Context* Create(const std::string& injectedBundlePath); + static Ewk_Context* Create(bool incognito, + const std::string& injected_bundle_path); static void Delete(Ewk_Context*); // Get related class @@ -169,7 +170,7 @@ struct Ewk_Context : public base::RefCounted { EWebContext* impl; Ewk_Context(bool incognito); - Ewk_Context(const std::string& injectedBundlePath); + Ewk_Context(bool incognito, const std::string& injected_bundle_path); ~Ewk_Context(); Ewk_Context(const Ewk_Context&) = delete; diff --git a/tizen_src/ewk/efl_integration/public/ewk_context.cc b/tizen_src/ewk/efl_integration/public/ewk_context.cc index caa783f..95dd572 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_context.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_context.cc @@ -100,7 +100,8 @@ Ewk_Context* ewk_context_new() Ewk_Context *ewk_context_new_with_injected_bundle_path(const char *path) { EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); - return Ewk_Context::Create(std::string(path)); + // To create new Ewk_Context with default incognito = false. + return Ewk_Context::Create(false,std::string(path)); } void ewk_context_delete(Ewk_Context* context) @@ -742,8 +743,8 @@ void ewk_context_compression_proxy_data_size_reset(Ewk_Context* context) Ewk_Context *ewk_context_new_with_injected_bundle_path_in_incognito_mode(const char *path) { - LOG_EWK_API_MOCKUP(); - return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); + return Ewk_Context::Create(true, std::string(path)); } Eina_Bool ewk_context_audio_latency_mode_set(Ewk_Context* context, Ewk_Audio_Latency_Mode latency_mode) -- 2.7.4 From 3f2a40a8e27c70187d9a766ee6239f802256d4a8 Mon Sep 17 00:00:00 2001 From: uzair Date: Thu, 23 Feb 2023 09:28:56 +0530 Subject: [PATCH 11/16] Compiler error fixes for supporting VD QB Below change fixes compiler errors by partially migrating [1] and [2] for supporting VD QB. [1] https://review.tizen.org/gerrit/c/271760 [2] https://review.tizen.org/gerrit/c/271757 Change-Id: Iabea727eefc8c7e03fa01a6f529f9b1ed613b931 Signed-off-by: uzair --- tizen_src/ewk/efl_integration/public/ewk_view.cc | 31 ++++++++++- tizen_src/ewk/efl_integration/public/ewk_view.h | 2 +- .../ewk/efl_integration/public/ewk_view_internal.h | 65 ++++++++++++++++++++++ .../ewk/efl_integration/public/ewk_view_product.h | 5 +- 4 files changed, 100 insertions(+), 3 deletions(-) diff --git a/tizen_src/ewk/efl_integration/public/ewk_view.cc b/tizen_src/ewk/efl_integration/public/ewk_view.cc index c3407d8..dc263e2 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_view.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_view.cc @@ -1425,7 +1425,10 @@ void ewk_view_clear_all_tiles_resources(Evas_Object* ewkView) { LOG_EWK_API_MOCKUP(); } -Eina_Bool ewk_view_set_support_video_hole(Evas_Object* ewkView, Evas_Object* window, Eina_Bool enable, Eina_Bool isVideoWindow) { +Eina_Bool ewk_view_set_support_video_hole(Evas_Object* ewkView, + void* window, + Eina_Bool enable, + Eina_Bool isVideoWindow) { LOG_EWK_API_MOCKUP(); #if defined(TIZEN_VIDEO_HOLE) EWK_VIEW_IMPL_GET_OR_RETURN(ewkView, impl, EINA_FALSE); @@ -1570,6 +1573,32 @@ void ewk_view_floating_window_state_changed(const Evas_Object *o, Eina_Bool stat LOG_EWK_API_MOCKUP(); } +void ewk_view_feed_mouse_down(Evas_Object* view, + Ewk_Mouse_Button_Type button, + int x, + int y) { + LOG_EWK_API_MOCKUP("NUI feature is not enabled"); +} + +void ewk_view_feed_mouse_up(Evas_Object* view, + Ewk_Mouse_Button_Type button, + int x, + int y) { + LOG_EWK_API_MOCKUP("NUI feature is not enabled"); +} + +void ewk_view_feed_mouse_move(Evas_Object* view, int x, int y) { + LOG_EWK_API_MOCKUP("NUI feature is not enabled"); +} + +void ewk_view_feed_mouse_wheel(Evas_Object* view, + Eina_Bool y_direction, + int step, + int x, + int y) { + LOG_EWK_API_MOCKUP("NUI feature is not enabled"); +} + void ewk_view_auto_login(Evas_Object *view, const char* user_name, const char* password) { LOG_EWK_API_MOCKUP(); diff --git a/tizen_src/ewk/efl_integration/public/ewk_view.h b/tizen_src/ewk/efl_integration/public/ewk_view.h index 77e8c36..91ec416 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_view.h +++ b/tizen_src/ewk/efl_integration/public/ewk_view.h @@ -769,7 +769,7 @@ EXPORT_API void ewk_view_request_manifest(Evas_Object* o, Ewk_View_Request_Manif * @return return @c EINA_TRUE on success or @c EINA_FALSE on failure */ EXPORT_API Eina_Bool ewk_view_set_support_video_hole(Evas_Object* ewkView, - Evas_Object* window, + void* window, Eina_Bool enable, Eina_Bool isVideoWindow); #endif diff --git a/tizen_src/ewk/efl_integration/public/ewk_view_internal.h b/tizen_src/ewk/efl_integration/public/ewk_view_internal.h index f7a8de7842..986e3ef 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_view_internal.h +++ b/tizen_src/ewk/efl_integration/public/ewk_view_internal.h @@ -150,6 +150,13 @@ enum Ewk_Top_Control_State { }; typedef enum Ewk_Top_Control_State Ewk_Top_Control_State; +enum Ewk_Mouse_Button_Type { + EWK_Mouse_Button_Left = 1, + EWK_Mouse_Button_Middle = 2, + EWK_Mouse_Button_Right = 3 +}; +typedef enum Ewk_Mouse_Button_Type Ewk_Mouse_Button_Type; + /// Ewk view's class, to be overridden by sub-classes. struct Ewk_View_Smart_Class { Evas_Smart_Class sc; /**< all but 'data' is free to be changed. */ @@ -1422,6 +1429,64 @@ EXPORT_API void ewk_view_offscreen_rendering_enabled_set(Evas_Object* o, Eina_Bo */ EXPORT_API void ewk_view_ime_window_set(Evas_Object* o, void* window); +/** + * Sends mouse down event. + * + * @since_tizen 6.0 + * + * @param[in] o view object + * @param[in] button button type + * @param[in] x horizontal position of mouse event + * @param[in] y vertical position of mouse event + */ +EXPORT_API void ewk_view_feed_mouse_down(Evas_Object* o, + Ewk_Mouse_Button_Type button, + int x, + int y); + +/** + * Sends mouse up event. + * + * @since_tizen 6.0 + * + * @param[in] o view object + * @param[in] button button type + * @param[in] x horizontal position of mouse event + * @param[in] y vertical position of mouse event + */ +EXPORT_API void ewk_view_feed_mouse_up(Evas_Object* o, + Ewk_Mouse_Button_Type button, + int x, + int y); + +/** + * Sends mouse move event. + * + * @since_tizen 6.0 + * + * @param[in] o view object + * @param[in] x horizontal position of mouse event + * @param[in] y vertical position of mouse event + */ +EXPORT_API void ewk_view_feed_mouse_move(Evas_Object* o, int x, int y); + +/** + * Sends mouse wheel event. + * + * @since_tizen 6.0 + * + * @param[in] o view object + * @param[in] y_direction wheel mouse direction + * @param[in] step how much mouse wheel was scrolled up or down + * @param[in] x horizontal position of mouse event + * @param[in] y vertical position of mouse event + */ +EXPORT_API void ewk_view_feed_mouse_wheel(Evas_Object* o, + Eina_Bool y_direction, + int step, + int x, + int y); + #ifdef __cplusplus } #endif diff --git a/tizen_src/ewk/efl_integration/public/ewk_view_product.h b/tizen_src/ewk/efl_integration/public/ewk_view_product.h index cd9ceae..18b8752 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_view_product.h +++ b/tizen_src/ewk/efl_integration/public/ewk_view_product.h @@ -628,7 +628,10 @@ EXPORT_API Eina_Bool ewk_view_stop_video(Evas_Object* o, Ewk_Stop_Video_Callback * * @return return @c EINA_TRUE on success or @c EINA_FALSE on failure */ -EXPORT_API Eina_Bool ewk_view_set_support_video_hole(Evas_Object* ewkView, Evas_Object* window, Eina_Bool enable, Eina_Bool isVideoWindow); +EXPORT_API Eina_Bool ewk_view_set_support_video_hole(Evas_Object* ewkView, + void* window, + Eina_Bool enable, + Eina_Bool isVideoWindow); /** * @brief Sets the support of canvas hole, Use H/W overlay for video quality of WebGL 360 degree. -- 2.7.4 From 54f93930479e5cad88a19ee820a547e58c404614 Mon Sep 17 00:00:00 2001 From: "ayush.k123" Date: Wed, 22 Feb 2023 08:38:59 +0530 Subject: [PATCH 12/16] [M108 Migration] Support encoding property for WRT config.xml ewk_settings_default_text_encoding_name_set() was not affected due to |usesEncodingDetector| in TextResourceDecoder. If |defaultTextEncodingName| is changed by ewk_settings API, |usesEncodingDetector| will be disabled. References: https://review.tizen.org/gerrit/280599/ Change-Id: Ib1295cd52b07cdf5fa6284e706d46a70d10448c8 Signed-off-by: Ayush Kumar --- .../web_preferences_mojom_traits.cc | 5 ++-- .../common/web_preferences/web_preferences.h | 1 + .../web_preferences/web_preferences_mojom_traits.h | 4 ++++ .../mojom/webpreferences/web_preferences.mojom | 3 +++ third_party/blink/public/web/web_settings.h | 5 ++-- .../renderer/core/exported/web_settings_impl.cc | 8 +++++++ .../renderer/core/exported/web_settings_impl.h | 2 ++ .../blink/renderer/core/exported/web_view_impl.cc | 1 + .../blink/renderer/core/frame/settings.json5 | 5 ++++ .../html/parser/text_resource_decoder_builder.cc | 27 +++++++++++++++------- .../private/ewk_settings_private.cc | 1 + wrt/src/browser/wrt_browser_client.cc | 2 +- 12 files changed, 49 insertions(+), 15 deletions(-) diff --git a/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc b/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc index acbc8b2..7bb384f 100644 --- a/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc +++ b/third_party/blink/common/web_preferences/web_preferences_mojom_traits.cc @@ -180,13 +180,12 @@ bool StructTraitsforce_enable_zoom = data.force_enable_zoom(); out->link_effect_enabled = data.link_effect_enabled(); + out->uses_encoding_detector = data.uses_encoding_detector(); + out->atk_enabled = data.atk_enabled(); #endif #if BUILDFLAG(IS_TIZEN) out->max_refresh_rate = data.max_refresh_rate(); #endif -#if BUILDFLAG(IS_EFL) - out->atk_enabled = data.atk_enabled(); -#endif #if BUILDFLAG(IS_ANDROID) out->font_scale_factor = data.font_scale_factor(); out->device_scale_adjustment = data.device_scale_adjustment(); diff --git a/third_party/blink/public/common/web_preferences/web_preferences.h b/third_party/blink/public/common/web_preferences/web_preferences.h index b8115fb..0b1b1e8 100644 --- a/third_party/blink/public/common/web_preferences/web_preferences.h +++ b/third_party/blink/public/common/web_preferences/web_preferences.h @@ -238,6 +238,7 @@ struct BLINK_COMMON_EXPORT WebPreferences { bool text_zoom_enabled = false; bool selection_magnifier_enabled = false; bool long_press_enabled = false; + bool uses_encoding_detector = true; #endif bool double_tap_to_zoom_enabled; diff --git a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h index b004407..f63111c 100644 --- a/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h +++ b/third_party/blink/public/common/web_preferences/web_preferences_mojom_traits.h @@ -595,6 +595,10 @@ struct BLINK_COMMON_EXPORT StructTraitsTizenCompatibilityModeEnabled(); } + +void WebSettingsImpl::SetUsesEncodingDetector(bool uses_encoding_detector) { + settings_->SetUsesEncodingDetector(uses_encoding_detector); +} + +bool WebSettingsImpl::UsesEncodingDetector() const { + return settings_->GetUsesEncodingDetector(); +} #endif #if defined(TIZEN_ATK_SUPPORT) diff --git a/third_party/blink/renderer/core/exported/web_settings_impl.h b/third_party/blink/renderer/core/exported/web_settings_impl.h index f316fa7..3d896b7 100644 --- a/third_party/blink/renderer/core/exported/web_settings_impl.h +++ b/third_party/blink/renderer/core/exported/web_settings_impl.h @@ -230,6 +230,8 @@ class CORE_EXPORT WebSettingsImpl final : public WebSettings { void SetLinkEffectEnabled(bool) override; bool LinkEffectEnabled() const override; bool TizenCompatibilityModeEnabled() const override; + void SetUsesEncodingDetector(bool) override; + bool UsesEncodingDetector() const override; #endif #if defined(TIZEN_ATK_SUPPORT) diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index b2d3d6c..06b1fac 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc @@ -1709,6 +1709,7 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs, prefs.tizen_version_release); web_view_impl->SetIgnoreViewportTagScaleLimits(prefs.force_enable_zoom); settings->SetLoadWithOverviewMode(prefs.shrinks_viewport_contents_to_fit); + settings->SetUsesEncodingDetector(prefs.uses_encoding_detector); #endif #if BUILDFLAG(IS_TIZEN) diff --git a/third_party/blink/renderer/core/frame/settings.json5 b/third_party/blink/renderer/core/frame/settings.json5 index 0025005..5331ed9 100644 --- a/third_party/blink/renderer/core/frame/settings.json5 +++ b/third_party/blink/renderer/core/frame/settings.json5 @@ -223,6 +223,11 @@ }, { + name: "usesEncodingDetector", + initial: false, + }, + + { name: "presentationRequiresUserGesture", initial: true, }, diff --git a/third_party/blink/renderer/core/html/parser/text_resource_decoder_builder.cc b/third_party/blink/renderer/core/html/parser/text_resource_decoder_builder.cc index 006d0cb..d789152 100644 --- a/third_party/blink/renderer/core/html/parser/text_resource_decoder_builder.cc +++ b/third_party/blink/renderer/core/html/parser/text_resource_decoder_builder.cc @@ -142,14 +142,25 @@ std::unique_ptr BuildTextResourceDecoder( TextResourceDecoderOptions::kJSONContent, default_encoding)); use_hint_encoding = false; } else { - WTF::TextEncoding hint_encoding; - if (use_hint_encoding && - parent_frame->GetDocument()->EncodingWasDetectedHeuristically()) - hint_encoding = parent_frame->GetDocument()->Encoding(); - decoder = std::make_unique( - TextResourceDecoderOptions::CreateWithAutoDetection( - DetermineContentType(mime_type), default_encoding, hint_encoding, - url)); +#if BUILDFLAG(IS_EFL) + if (!encoding_from_domain.IsValid() && + !frame->GetSettings()->GetUsesEncodingDetector()) { + decoder = + std::make_unique(TextResourceDecoderOptions( + DetermineContentType(mime_type), default_encoding)); + } else { +#endif + WTF::TextEncoding hint_encoding; + if (use_hint_encoding && + parent_frame->GetDocument()->EncodingWasDetectedHeuristically()) + hint_encoding = parent_frame->GetDocument()->Encoding(); + decoder = std::make_unique( + TextResourceDecoderOptions::CreateWithAutoDetection( + DetermineContentType(mime_type), default_encoding, hint_encoding, + url)); +#if BUILDFLAG(IS_EFL) + } +#endif } } else { decoder = std::make_unique(TextResourceDecoderOptions( diff --git a/tizen_src/ewk/efl_integration/private/ewk_settings_private.cc b/tizen_src/ewk/efl_integration/private/ewk_settings_private.cc index 6112948..607544f 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_settings_private.cc +++ b/tizen_src/ewk/efl_integration/private/ewk_settings_private.cc @@ -18,6 +18,7 @@ void Ewk_Settings::setCurrentLegacyFontSizeMode(Ewk_Legacy_Font_Size_Mode mode) } void Ewk_Settings::setDefaultTextEncoding(const char* encoding) { + m_preferences.uses_encoding_detector = !(encoding && *encoding); if (encoding) m_preferences.default_encoding = encoding; } diff --git a/wrt/src/browser/wrt_browser_client.cc b/wrt/src/browser/wrt_browser_client.cc index 0bdee4c..0cf861c 100755 --- a/wrt/src/browser/wrt_browser_client.cc +++ b/wrt/src/browser/wrt_browser_client.cc @@ -236,9 +236,9 @@ void WRTBrowserClient::OverrideWebkitPrefs( auto& runtime = NativeWebRuntime::GetInstance(); prefs->default_encoding = runtime.GetEncodingType(); -#if !defined(WRT_JS_BRINGUP) prefs->uses_encoding_detector = false; +#if !defined(WRT_JS_BRINGUP) if (IsWearableProfile() && WRTNativeWindow::GetWindowShape() == WRTNativeWindow::Shape::SQUARE) { prefs->mirror_blur_enabled = true; -- 2.7.4 From 58a4432927bffadb30177dd0da32bc762d190c52 Mon Sep 17 00:00:00 2001 From: "ayush.k123" Date: Tue, 21 Feb 2023 14:40:32 +0530 Subject: [PATCH 13/16] [M108 Migration] Remove EWK_BRINGUP from ewk_settings.cc This patch removes EWK_BRINGUP and unused code from ewk_settings.cc. References: https://review.tizen.org/gerrit/280785/ Change-Id: I7950338a8fb06b8d07e82f991d81f72185227cec Signed-off-by: Ayush Kumar --- .../ewk/efl_integration/public/ewk_settings.cc | 112 ++------------------- 1 file changed, 9 insertions(+), 103 deletions(-) diff --git a/tizen_src/ewk/efl_integration/public/ewk_settings.cc b/tizen_src/ewk/efl_integration/public/ewk_settings.cc index ea62255..d406e3fd 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_settings.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_settings.cc @@ -40,18 +40,6 @@ void ewkUpdateWebkitPreferences(Evas_Object *ewkView) EWebView* impl = EWebView::FromEvasObject(ewkView); assert(impl); - bool autoSelectWord = ewk_settings_select_word_automatically_get(impl->GetSettings()); - // TODO(sns.park) : remove dependency to chromium internals - if(autoSelectWord){ -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - ui::GestureConfiguration::set_double_tap_to_zoom_enabled(false); -#endif - } - else{ -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - ui::GestureConfiguration::set_double_tap_to_zoom_enabled(true); -#endif - } impl->UpdateWebKitPreferences(); } @@ -59,26 +47,14 @@ void ewkUpdateWebkitPreferences(Evas_Object *ewkView) Eina_Bool ewk_settings_fullscreen_enabled_set(Ewk_Settings* settings, Eina_Bool enable) { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup -#pragma message "[M38] fullscreen_enabled flag has been deleted from webpreference.h" - EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false); - settings->getPreferences().fullscreen_enabled = enable; - ewkUpdateWebkitPreferences(settings->getEvasObject()); - return EINA_TRUE; -#else + LOG_EWK_API_MOCKUP("Not Supported by chromium"); return EINA_FALSE; -#endif } Eina_Bool ewk_settings_fullscreen_enabled_get(const Ewk_Settings* settings) { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup -#pragma message "[M38] fullscreen_enabled flag has been deleted from webpreference.h" - EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false); - return settings->getPreferences().fullscreen_enabled; -#else + LOG_EWK_API_MOCKUP("Not Supported by chromium"); return EINA_FALSE; -#endif } Eina_Bool ewk_settings_javascript_enabled_set(Ewk_Settings* settings, Eina_Bool enable) @@ -242,12 +218,8 @@ Eina_Bool ewk_settings_private_browsing_enabled_get(const Ewk_Settings* settings Eina_Bool ewk_settings_editable_link_behavior_set(Ewk_Settings* settings, Ewk_Editable_Link_Behavior behavior) { - EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - settings->getPreferences().editable_link_behavior = static_cast(behavior); -#endif - ewkUpdateWebkitPreferences(settings->getEvasObject()); - return EINA_TRUE; + LOG_EWK_API_MOCKUP("Not Supported by chromium"); + return EINA_FALSE; } Eina_Bool ewk_settings_load_remote_images_set(Ewk_Settings* settings, Eina_Bool loadRemoteImages) @@ -335,9 +307,7 @@ Eina_Bool ewk_settings_link_effect_enabled_get(const Ewk_Settings* settings) Eina_Bool ewk_settings_uses_encoding_detector_set(Ewk_Settings* settings, Eina_Bool use) { EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup settings->getPreferences().uses_encoding_detector = use; -#endif ewkUpdateWebkitPreferences(settings->getEvasObject()); return EINA_TRUE; } @@ -345,11 +315,7 @@ Eina_Bool ewk_settings_uses_encoding_detector_set(Ewk_Settings* settings, Eina_B Eina_Bool ewk_settings_uses_encoding_detector_get(const Ewk_Settings* settings) { EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup return settings->getPreferences().uses_encoding_detector; -#else - return EINA_FALSE; -#endif } Eina_Bool ewk_settings_default_keypad_enabled_set(Ewk_Settings* settings, Eina_Bool enable) @@ -566,22 +532,14 @@ Eina_Bool ewk_settings_select_word_automatically_get(const Ewk_Settings* setting Ewk_List_Style_Position ewk_settings_initial_list_style_position_get(const Ewk_Settings* settings) { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EWK_LIST_STYLE_POSITION_OUTSIDE); - return static_cast(settings->getPreferences().initial_list_style_position); -#else + LOG_EWK_API_MOCKUP("Not Supported by chromium"); return EWK_LIST_STYLE_POSITION_OUTSIDE; -#endif } Eina_Bool ewk_settings_initial_list_style_position_set(Ewk_Settings* settings, Ewk_List_Style_Position style) { - EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - settings->getPreferences().initial_list_style_position = static_cast(style); -#endif - ewkUpdateWebkitPreferences(settings->getEvasObject()); - return EINA_TRUE; + LOG_EWK_API_MOCKUP("Not Supported by chromium"); + return EINA_FALSE; } Eina_Bool ewk_settings_webkit_text_size_adjust_enabled_set(Ewk_Settings* settings, Eina_Bool enabled) @@ -596,20 +554,13 @@ Eina_Bool ewk_settings_webkit_text_size_adjust_enabled_set(Ewk_Settings* setting // TODO: this API is gone in newer versions of webkit-efl void ewk_settings_detect_contents_automatically_set(Ewk_Settings* settings, Eina_Bool enable) { - EINA_SAFETY_ON_NULL_RETURN(settings); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - settings->setDetectContentsEnabled(enable); -#endif + LOG_EWK_API_MOCKUP("Not Supported by chromium"); } Eina_Bool ewk_settings_detect_contents_automatically_get(const Ewk_Settings* settings) { - EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - return settings->getDetectContentsEnabled(); -#else + LOG_EWK_API_MOCKUP("Not Supported by chromium"); return EINA_FALSE; -#endif } void ewk_settings_cache_builder_enabled_set(Ewk_Settings *settings, Eina_Bool enabled) @@ -671,51 +622,6 @@ Eina_Bool ewk_settings_encoding_detector_enabled_set(Ewk_Settings* settings, Ein return EINA_FALSE; } -namespace { -#define EXTRA_FEATURE_FUNCTIONS(VALNAME) \ - void Ewk_Extra_Feature_Set_ ## VALNAME(Ewk_Settings* settings, Eina_Bool value) \ - { \ - EINA_SAFETY_ON_NULL_RETURN(settings); \ - settings->set ## VALNAME ## Enabled(value == EINA_TRUE); \ - } \ - Eina_Bool Ewk_Extra_Feature_Get_ ## VALNAME(const Ewk_Settings* settings) \ - { \ - EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE); \ - return settings->get ## VALNAME ## Enabled() ? EINA_TRUE : EINA_FALSE; \ - } - -#define EWK_EXTRA_FEATURE(NAME, VALNAME) {NAME, Ewk_Extra_Feature_Set_## VALNAME, Ewk_Extra_Feature_Get_ ## VALNAME} - - EXTRA_FEATURE_FUNCTIONS(LongPress) - EXTRA_FEATURE_FUNCTIONS(LinkMagnifier) - EXTRA_FEATURE_FUNCTIONS(DetectContents) - EXTRA_FEATURE_FUNCTIONS(WebLogin) - EXTRA_FEATURE_FUNCTIONS(DoubleTap) - EXTRA_FEATURE_FUNCTIONS(Zoom) - EXTRA_FEATURE_FUNCTIONS(OpenPanel) - EXTRA_FEATURE_FUNCTIONS(AllowRestrictedURL) - EXTRA_FEATURE_FUNCTIONS(URLBarHide) - - void Ewk_Extra_Feature_Set_ViewportQuirk(Ewk_Settings* settings, Eina_Bool value) - { - EINA_SAFETY_ON_NULL_RETURN(settings); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - settings->getPreferences().viewport_meta_non_user_scalable_quirk = value; -#endif - ewkUpdateWebkitPreferences(settings->getEvasObject()); - } - - Eina_Bool Ewk_Extra_Feature_Get_ViewportQuirk(const Ewk_Settings* settings) - { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - EINA_SAFETY_ON_NULL_RETURN_VAL(settings, false); - return settings->getPreferences().viewport_meta_non_user_scalable_quirk; -#else - return EINA_FALSE; -#endif - } -} - Eina_Bool ewk_settings_extra_feature_get(const Ewk_Settings* settings, const char* feature) { EINA_SAFETY_ON_NULL_RETURN_VAL(settings, EINA_FALSE); -- 2.7.4 From 348206f00fe6f075a97c3a3599fa63070c39b8f0 Mon Sep 17 00:00:00 2001 From: Venugopal S M Date: Mon, 20 Feb 2023 18:34:15 +0530 Subject: [PATCH 14/16] fixup! [MM] Implement MMPlayer(CAPI) path to support HBBTV. Notify the completion of playback(EOS) to the pipeline Reference: https://review.tizen.org/gerrit/288026 Change-Id: I74172a7d406d64b8c0868443acc02428ce040621 Signed-off-by: Sun-woo Nam --- tizen_src/chromium_impl/media/base/efl/media_player_manager_efl.h | 1 + tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc | 1 + .../chromium_impl/media/filters/media_player_bridge_capi_adapter.cc | 4 ++++ .../chromium_impl/media/filters/media_player_bridge_capi_adapter.h | 1 + 4 files changed, 7 insertions(+) diff --git a/tizen_src/chromium_impl/media/base/efl/media_player_manager_efl.h b/tizen_src/chromium_impl/media/base/efl/media_player_manager_efl.h index b670084..90b05fc 100644 --- a/tizen_src/chromium_impl/media/base/efl/media_player_manager_efl.h +++ b/tizen_src/chromium_impl/media/base/efl/media_player_manager_efl.h @@ -25,6 +25,7 @@ class MEDIA_EXPORT MediaPlayerManager { virtual ~MediaPlayerManager() {} virtual MediaPlayerEfl* GetPlayer(int player_id) = 0; + virtual void OnEnded() = 0; virtual void OnTimeChanged(int player_id) = 0; virtual void OnTimeUpdate(int player_id, double current_time) = 0; virtual void OnRequestSeek(int player_id, double seek_time) = 0; diff --git a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc index 9eefb6aa..4e37d58 100644 --- a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc +++ b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc @@ -597,6 +597,7 @@ void MediaPlayerBridgeCapi::PlaybackCompleteUpdate() { StopCurrentTimeUpdateTimer(); manager()->OnTimeUpdate(GetPlayerId(), GetCurrentTime()); manager()->OnTimeChanged(GetPlayerId()); + manager()->OnEnded(); } void MediaPlayerBridgeCapi::SeekCompleteUpdate() { diff --git a/tizen_src/chromium_impl/media/filters/media_player_bridge_capi_adapter.cc b/tizen_src/chromium_impl/media/filters/media_player_bridge_capi_adapter.cc index a4aa284..97f1fbe 100644 --- a/tizen_src/chromium_impl/media/filters/media_player_bridge_capi_adapter.cc +++ b/tizen_src/chromium_impl/media/filters/media_player_bridge_capi_adapter.cc @@ -114,6 +114,10 @@ MediaPlayerEfl* MediaPlayerBridgeCapiAdapter::GetPlayer(int player_id) { return media_player_; } +void MediaPlayerBridgeCapiAdapter::OnEnded() { + renderer_client_->OnEnded(); +} + void MediaPlayerBridgeCapiAdapter::OnTimeChanged(int player_id) {} void MediaPlayerBridgeCapiAdapter::OnTimeUpdate(int player_id, diff --git a/tizen_src/chromium_impl/media/filters/media_player_bridge_capi_adapter.h b/tizen_src/chromium_impl/media/filters/media_player_bridge_capi_adapter.h index 26df8d0..c93a172 100644 --- a/tizen_src/chromium_impl/media/filters/media_player_bridge_capi_adapter.h +++ b/tizen_src/chromium_impl/media/filters/media_player_bridge_capi_adapter.h @@ -69,6 +69,7 @@ class MEDIA_EXPORT MediaPlayerBridgeCapiAdapter : public MediaPlayerTizen, // MediaPlayerManager MediaPlayerEfl* GetPlayer(int player_id) override; + void OnEnded() override; void OnTimeChanged(int player_id) override; void OnTimeUpdate(int player_id, double current_time) override; void OnRequestSeek(int player_id, double seek_time) override; -- 2.7.4 From af9df69141def45bdfb8caf79219ffde03266f50 Mon Sep 17 00:00:00 2001 From: Bakka Uday Kiran Date: Fri, 10 Feb 2023 15:02:59 +0530 Subject: [PATCH 15/16] [M108 Migration] Bringup Drag and Drop (DnD) This patch brings up DnD feature to M108. Between M85 and M94, due to upstream refactoring, the DragEnter notification IPC call is done through mojom::blink::PageBroadcast (WebViewImpl). Reference: https://review.tizen.org/gerrit/c/278386 Change-Id: I9aeb92ad80485f28434065c3cd582e9468497991 Signed-off-by: Bakka Uday Kiran --- content/browser/web_contents/web_contents_impl.cc | 9 +++ content/browser/web_contents/web_contents_impl.h | 5 ++ .../browser/web_contents/web_contents_view_aura.cc | 20 +++++ content/public/browser/web_contents.h | 4 + content/test/test_page_broadcast.cc | 4 + content/test/test_page_broadcast.h | 5 ++ packaging/chromium-efl.spec | 4 + .../context_menu_data/context_menu_mojom_traits.cc | 5 ++ .../context_menu_params_builder.cc | 5 ++ .../untrustworthy_context_menu_params.cc | 5 ++ .../common/context_menu_data/context_menu_data.h | 5 ++ .../context_menu_data/context_menu_mojom_traits.h | 6 ++ .../untrustworthy_context_menu_params.h | 5 ++ third_party/blink/public/mojom/BUILD.gn | 5 ++ .../public/mojom/context_menu/context_menu.mojom | 4 + third_party/blink/public/mojom/page/page.mojom | 4 + third_party/blink/public/web/web_frame.h | 5 ++ .../blink/renderer/core/exported/web_view_impl.cc | 7 ++ .../blink/renderer/core/exported/web_view_impl.h | 3 + .../renderer/core/frame/web_local_frame_impl.cc | 5 ++ .../renderer/core/frame/web_local_frame_impl.h | 4 + .../blink/renderer/core/input/event_handler.cc | 6 ++ .../blink/renderer/core/input/event_handler.h | 4 + .../blink/renderer/core/input/gesture_manager.cc | 10 +++ .../blink/renderer/core/input/gesture_manager.h | 8 ++ .../renderer/core/input/mouse_event_manager.cc | 36 +++++++++ .../renderer/core/input/mouse_event_manager.h | 4 + .../renderer/core/page/context_menu_controller.cc | 3 + tizen_src/build/config/tizen_features.gni | 1 + .../web_contents_view_aura_helper_efl.cc | 16 +++- .../web_contents_view_aura_helper_efl.h | 3 + .../browser/web_contents/web_drag_dest_efl.cc | 88 ++++++++------------- .../browser/web_contents/web_drag_dest_efl.h | 8 +- .../browser/web_contents/web_drag_source_efl.cc | 66 ++++++++++++---- .../browser/web_contents/web_drag_source_efl.h | 7 +- tizen_src/chromium_impl/content/common/BUILD.gn | 1 + .../chromium_impl/content/common/paths_efl.cc | 13 +++ tizen_src/ewk/efl_integration/BUILD.gn | 6 ++ tizen_src/ewk/efl_integration/command_line_efl.cc | 3 + .../efl_integration/context_menu_controller_efl.cc | 29 ++++--- tizen_src/ewk/efl_integration/eweb_view.cc | 9 +++ tizen_src/ewk/efl_integration/eweb_view.h | 3 + .../resource/images/broken_image.png | Bin 0 -> 810 bytes 43 files changed, 345 insertions(+), 98 deletions(-) create mode 100644 tizen_src/ewk/efl_integration/resource/images/broken_image.png diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 9818f54..b8dbef7 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -4833,6 +4833,15 @@ void WebContentsImpl::SetHistoryOffsetAndLengthForView( broadcast->SetHistoryOffsetAndLength(history_offset, history_length); } +#if BUILDFLAG(IS_TIZEN) +void WebContentsImpl::EnterDragState(RenderViewHost* render_view_host) { + if (auto& broadcast = static_cast(render_view_host) + ->GetAssociatedPageBroadcast()) { + broadcast->EnterDragState(); + } +} +#endif + void WebContentsImpl::ReloadFocusedFrame() { OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::ReloadFocusedFrame"); RenderFrameHost* focused_frame = GetFocusedFrame(); diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index c9399b5..1c2f209 100755 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h @@ -1763,6 +1763,11 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents, void LoadingStateChanged(bool should_show_loading_ui, LoadNotificationDetails* details); +#if BUILDFLAG(IS_TIZEN) + // Notifes the delegate to enter into drag state. + void EnterDragState(RenderViewHost* render_view_host); +#endif + // Misc non-view stuff ------------------------------------------------------- // Sets the history for a specified RenderViewHost to |history_length| diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc index f371758..0d13728 100644 --- a/content/browser/web_contents/web_contents_view_aura.cc +++ b/content/browser/web_contents/web_contents_view_aura.cc @@ -720,6 +720,8 @@ WebContentsViewAura::WebContentsViewAura( wcva_helper_ = std::make_unique( this, web_contents_, delegate_.get()); + if (wcva_helper_) + wcva_helper_->SetViewDelegate(delegate_.get()); #endif } @@ -1002,6 +1004,10 @@ void WebContentsViewAura::FocusThroughTabTraversal(bool reverse) { } DropData* WebContentsViewAura::GetDropData() const { +#if BUILDFLAG(IS_EFL) + if (wcva_helper()) + return wcva_helper()->GetDropData(); +#endif return current_drop_data_.get(); } @@ -1119,6 +1125,13 @@ RenderWidgetHostViewBase* WebContentsViewAura::CreateViewForWidget( InstallOverscrollControllerDelegate(view); } +#if BUILDFLAG(IS_EFL) + if (wcva_helper()) { + RenderViewHost* render_view_host = web_contents_->GetRenderViewHost(); + wcva_helper()->UpdateDragDest(render_view_host); + } +#endif + return view; } @@ -1187,6 +1200,13 @@ void WebContentsViewAura::StartDragging( const gfx::Rect& drag_obj_rect, const blink::mojom::DragEventSourceInfo& event_info, RenderWidgetHostImpl* source_rwh) { +#if BUILDFLAG(IS_EFL) + if (wcva_helper()) { + wcva_helper()->StartDragging(drop_data, operations, image, cursor_offset, + event_info, source_rwh); + return; + } +#endif aura::Window* root_window = GetNativeView()->GetRootWindow(); if (!aura::client::GetDragDropClient(root_window)) { web_contents_->SystemDragEnded(source_rwh); diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h index 273d548..bbb8bca 100755 --- a/content/public/browser/web_contents.h +++ b/content/public/browser/web_contents.h @@ -921,6 +921,10 @@ class WebContents : public PageNavigator, // Returns the current drop data, if any. virtual DropData* GetDropData() = 0; +#if BUILDFLAG(IS_TIZEN) + virtual void EnterDragState(RenderViewHost* render_view_host) = 0; +#endif + // Sets focus to the native widget for this tab. virtual void Focus() = 0; diff --git a/content/test/test_page_broadcast.cc b/content/test/test_page_broadcast.cc index 57fad67..c74ac78 100644 --- a/content/test/test_page_broadcast.cc +++ b/content/test/test_page_broadcast.cc @@ -51,6 +51,10 @@ void TestPageBroadcast::ScrollFocusedNodeIntoView() {} void TestPageBroadcast::SetScrollOffset(float x, float y) {} #endif +#if BUILDFLAG(IS_TIZEN) +void TestPageBroadcast::EnterDragState() {} +#endif + void TestPageBroadcast::SetPageBaseBackgroundColor( absl::optional color) {} diff --git a/content/test/test_page_broadcast.h b/content/test/test_page_broadcast.h index c501cfc..2058bdc 100644 --- a/content/test/test_page_broadcast.h +++ b/content/test/test_page_broadcast.h @@ -37,6 +37,11 @@ class TestPageBroadcast : public blink::mojom::PageBroadcast { void ScrollFocusedNodeIntoView() override; void SetScrollOffset(float x, float y) override; #endif + +#if BUILDFLAG(IS_TIZEN) + void EnterDragState() override; +#endif + void SetPageBaseBackgroundColor(absl::optional color) override; void CreateRemoteMainFrame( const blink::RemoteFrameToken& token, diff --git a/packaging/chromium-efl.spec b/packaging/chromium-efl.spec index 04fa71a..e8e97a4 100644 --- a/packaging/chromium-efl.spec +++ b/packaging/chromium-efl.spec @@ -351,6 +351,7 @@ fi "is_tizen=true" \ "data_dir=\"%{CHROMIUM_DATA_DIR}\"" \ "edje_dir=\"%{CHROMIUM_DATA_DIR}/themes\"" \ + "image_dir=\"%{CHROMIUM_DATA_DIR}/images\"" \ "exe_dir=\"%{CHROMIUM_EXE_DIR}\"" \ "tizen_version=%{tizen_version}" \ "tizen_version_major=%{tizen_version_major}" \ @@ -455,6 +456,7 @@ install -d "%{buildroot}"%{_includedir}/v8 install -d "%{buildroot}%{CHROMIUM_EXE_DIR}" install -d "%{buildroot}%{CHROMIUM_EXE_DIR}"/locales install -d "%{buildroot}%{CHROMIUM_DATA_DIR}"/themes +install -d "%{buildroot}"%{CHROMIUM_DATA_DIR}/images install -d "%{buildroot}"%{_libdir}/../local/lib/ %if %{__use_clang} == 1 @@ -465,6 +467,7 @@ install -m 0755 "%{OUTPUT_FOLDER}"/icudtl.dat "%{buildroot}%{CHROMIUM_EXE_DIR install -m 0755 "%{OUTPUT_FOLDER}"/snapshot_blob.bin "%{buildroot}%{CHROMIUM_EXE_DIR}" install -m 0644 "%{OUTPUT_FOLDER}"/content_shell.pak "%{buildroot}%{CHROMIUM_EXE_DIR}" install -m 0644 "%{OUTPUT_FOLDER}"/resources/*.edj "%{buildroot}%{CHROMIUM_DATA_DIR}"/themes +install -m 0644 "%{OUTPUT_FOLDER}"/images/*.png "%{buildroot}%{CHROMIUM_DATA_DIR}"/images/ install -d "%{OUTPUT_FOLDER}"/packages install -d %{buildroot}%{_xmldir} @@ -651,6 +654,7 @@ setcap cap_mac_admin=eip %{_bindir}/wrt-service %{CHROMIUM_EXE_DIR}/content_shell.pak %{CHROMIUM_EXE_DIR}/locales/*.pak %{CHROMIUM_DATA_DIR}/themes/*.edj +%{CHROMIUM_DATA_DIR}/images/*.png %if %{__build_chrome} == 1 %{CHROMIUM_EXE_DIR}/chrome_100_percent.pak diff --git a/third_party/blink/common/context_menu_data/context_menu_mojom_traits.cc b/third_party/blink/common/context_menu_data/context_menu_mojom_traits.cc index a26b986..4a34262 100644 --- a/third_party/blink/common/context_menu_data/context_menu_mojom_traits.cc +++ b/third_party/blink/common/context_menu_data/context_menu_mojom_traits.cc @@ -62,6 +62,11 @@ bool StructTraitsis_text_node = data.is_text_node(); #endif + +#if BUILDFLAG(IS_TIZEN) + out->is_draggable = data.is_draggable(); +#endif + out->writing_direction_default = data.writing_direction_default(); out->writing_direction_left_to_right = data.writing_direction_left_to_right(); out->writing_direction_right_to_left = data.writing_direction_right_to_left(); diff --git a/third_party/blink/common/context_menu_data/context_menu_params_builder.cc b/third_party/blink/common/context_menu_data/context_menu_params_builder.cc index e257944..b9532c7 100644 --- a/third_party/blink/common/context_menu_data/context_menu_params_builder.cc +++ b/third_party/blink/common/context_menu_data/context_menu_params_builder.cc @@ -58,6 +58,11 @@ UntrustworthyContextMenuParams ContextMenuParamsBuilder::Build( #if BUILDFLAG(IS_EFL) params.is_text_node = data.is_text_node; #endif + +#if BUILDFLAG(IS_TIZEN) + params.is_draggable = data.is_draggable; +#endif + params.writing_direction_default = data.writing_direction_default; params.writing_direction_left_to_right = data.writing_direction_left_to_right; params.writing_direction_right_to_left = data.writing_direction_right_to_left; diff --git a/third_party/blink/common/context_menu_data/untrustworthy_context_menu_params.cc b/third_party/blink/common/context_menu_data/untrustworthy_context_menu_params.cc index 5ede70a..5e99669 100644 --- a/third_party/blink/common/context_menu_data/untrustworthy_context_menu_params.cc +++ b/third_party/blink/common/context_menu_data/untrustworthy_context_menu_params.cc @@ -65,6 +65,11 @@ void UntrustworthyContextMenuParams::Assign( #if BUILDFLAG(IS_EFL) is_text_node = other.is_text_node; #endif + +#if BUILDFLAG(IS_TIZEN) + is_draggable = other.is_draggable; +#endif + writing_direction_default = other.writing_direction_default; writing_direction_left_to_right = other.writing_direction_left_to_right; writing_direction_right_to_left = other.writing_direction_right_to_left; diff --git a/third_party/blink/public/common/context_menu_data/context_menu_data.h b/third_party/blink/public/common/context_menu_data/context_menu_data.h index 611b3a8..0168924 100644 --- a/third_party/blink/public/common/context_menu_data/context_menu_data.h +++ b/third_party/blink/public/common/context_menu_data/context_menu_data.h @@ -121,6 +121,11 @@ struct ContextMenuData { bool is_text_node; #endif +#if BUILDFLAG(IS_TIZEN) + // Whether element is draggable. + bool is_draggable; +#endif + // If this node is an input field, the type of that field. blink::mojom::ContextMenuDataInputFieldType input_field_type; diff --git a/third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h b/third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h index 40c94c4..3fc5f80 100644 --- a/third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h +++ b/third_party/blink/public/common/context_menu_data/context_menu_mojom_traits.h @@ -121,6 +121,12 @@ struct BLINK_COMMON_EXPORT } #endif +#if BUILDFLAG(IS_TIZEN) + static bool is_draggable(const blink::UntrustworthyContextMenuParams& r) { + return r.is_draggable; + } +#endif + static int writing_direction_default( const blink::UntrustworthyContextMenuParams& r) { return r.writing_direction_default; diff --git a/third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h b/third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h index 99a5b3a..d1676b0 100644 --- a/third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h +++ b/third_party/blink/public/common/context_menu_data/untrustworthy_context_menu_params.h @@ -108,6 +108,11 @@ struct BLINK_COMMON_EXPORT UntrustworthyContextMenuParams { bool is_text_node; #endif +#if BUILDFLAG(IS_TIZEN) + // Whether element is draggable. + bool is_draggable; +#endif + // Writing direction menu items. int writing_direction_default; int writing_direction_left_to_right; diff --git a/third_party/blink/public/mojom/BUILD.gn b/third_party/blink/public/mojom/BUILD.gn index da550e3..3d36e4a 100644 --- a/third_party/blink/public/mojom/BUILD.gn +++ b/third_party/blink/public/mojom/BUILD.gn @@ -1114,6 +1114,11 @@ mojom("mojom_core") { ] enabled_features = [] + + if (is_tizen) { + enabled_features += [ "is_tizen" ] + } + if (use_efl) { enabled_features += [ "is_efl" ] } diff --git a/third_party/blink/public/mojom/context_menu/context_menu.mojom b/third_party/blink/public/mojom/context_menu/context_menu.mojom index 0aaa56f..60259f1 100644 --- a/third_party/blink/public/mojom/context_menu/context_menu.mojom +++ b/third_party/blink/public/mojom/context_menu/context_menu.mojom @@ -171,6 +171,10 @@ struct UntrustworthyContextMenuParams { [EnableIf=is_efl] bool is_text_node; + // Whether element is draggable + [EnableIf=is_tizen] + bool is_draggable; + // Writing direction menu items. int32 writing_direction_default; int32 writing_direction_left_to_right; diff --git a/third_party/blink/public/mojom/page/page.mojom b/third_party/blink/public/mojom/page/page.mojom index d48ab58..d8e81cc 100644 --- a/third_party/blink/public/mojom/page/page.mojom +++ b/third_party/blink/public/mojom/page/page.mojom @@ -110,6 +110,10 @@ interface PageBroadcast { [EnableIf=is_efl] SetScrollOffset(float x, float y); + // Notifies webivew to enter into drag state. + [EnableIf=is_tizen] + EnterDragState(); + // Sent to whole page, but should only be used by the main frame. SetPageBaseBackgroundColor(skia.mojom.SkColor? color); diff --git a/third_party/blink/public/web/web_frame.h b/third_party/blink/public/web/web_frame.h index b88fb1a..4c4121f 100644 --- a/third_party/blink/public/web/web_frame.h +++ b/third_party/blink/public/web/web_frame.h @@ -192,6 +192,11 @@ class BLINK_EXPORT WebFrame { // RemoteFrame <--> RenderFrameProxyHost in the browser process. const FrameToken& GetFrameToken() const { return frame_token_; } +#if BUILDFLAG(IS_TIZEN) + // Enters web drag and drop state. + virtual void EnterDragState() {} +#endif + #if INSIDE_BLINK static WebFrame* FromCoreFrame(Frame*); static Frame* ToCoreFrame(const WebFrame&); diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc index 06b1fac..3f64b57 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.cc +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc @@ -3550,6 +3550,13 @@ void WebViewImpl::UpdateWebPreferences( ApplyCommandLineToSettings(SettingsImpl()); } +#if BUILDFLAG(IS_TIZEN) +void WebViewImpl::EnterDragState() { + if (MainFrameImpl()) + MainFrameImpl()->EnterDragState(); +} +#endif + void WebViewImpl::AddObserver(WebViewObserver* observer) { observers_.AddObserver(observer); } diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_party/blink/renderer/core/exported/web_view_impl.h index f4a0b57..e0947c1 100644 --- a/third_party/blink/renderer/core/exported/web_view_impl.h +++ b/third_party/blink/renderer/core/exported/web_view_impl.h @@ -309,6 +309,9 @@ class CORE_EXPORT WebViewImpl final : public WebView, const RendererPreferences& preferences) override; void SetHistoryOffsetAndLength(int32_t history_offset, int32_t history_length) override; +#if BUILDFLAG(IS_TIZEN) + void EnterDragState() override; +#endif void SetPageBaseBackgroundColor(absl::optional color) override; void CreateRemoteMainFrame( const RemoteFrameToken& frame_token, diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc index 5e4f00b..c041fe2 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc @@ -1729,6 +1729,11 @@ gfx::Size WebLocalFrameImpl::ScrollableContentSize() const { ToPixelSnappedRect(GetFrameView()->GetLayoutView()->DocumentRect()) .size()); } + +void WebLocalFrameImpl::EnterDragState() { + if (GetFrame()) + GetFrame()->GetEventHandler().EnterDragState(); +} #endif void WebLocalFrameImpl::DeleteSurroundingTextInCodePoints(int before, diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h index 6031575..b226256 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h @@ -367,6 +367,10 @@ class CORE_EXPORT WebLocalFrameImpl final gfx::Size ScrollableContentSize() const override; #endif +#if BUILDFLAG(IS_TIZEN) + void EnterDragState() override; +#endif + // WebNavigationControl overrides: bool DispatchBeforeUnloadEvent(bool) override; void CommitNavigation( diff --git a/third_party/blink/renderer/core/input/event_handler.cc b/third_party/blink/renderer/core/input/event_handler.cc index 825d76e..d451ade 100644 --- a/third_party/blink/renderer/core/input/event_handler.cc +++ b/third_party/blink/renderer/core/input/event_handler.cc @@ -1388,6 +1388,12 @@ WebInputEventResult EventHandler::PerformDragAndDrop( return result; } +#if BUILDFLAG(IS_TIZEN) +void EventHandler::EnterDragState() { + gesture_manager_->EnterDragState(); +} +#endif + void EventHandler::ClearDragState() { scroll_manager_->StopAutoscroll(); drag_target_ = nullptr; diff --git a/third_party/blink/renderer/core/input/event_handler.h b/third_party/blink/renderer/core/input/event_handler.h index 325d6a7..6f7855e 100644 --- a/third_party/blink/renderer/core/input/event_handler.h +++ b/third_party/blink/renderer/core/input/event_handler.h @@ -261,6 +261,10 @@ class CORE_EXPORT EventHandler final : public GarbageCollected { void ContextMenuEventForWordOrLinkSelection(const WebGestureEvent&); #endif +#if BUILDFLAG(IS_TIZEN) + void EnterDragState(); +#endif + // Clears drag target and related states. It is called when drag is done or // canceled. void ClearDragState(); diff --git a/third_party/blink/renderer/core/input/gesture_manager.cc b/third_party/blink/renderer/core/input/gesture_manager.cc index dd71c13b..5c38e9a8 100644 --- a/third_party/blink/renderer/core/input/gesture_manager.cc +++ b/third_party/blink/renderer/core/input/gesture_manager.cc @@ -183,6 +183,12 @@ bool GestureManager::GestureContextMenuDeferred() const { return gesture_context_menu_deferred_; } +#if BUILDFLAG(IS_TIZEN) +void GestureManager::EnterDragState() { + mouse_event_manager_->EnterDragState(last_gesture_event_); +} +#endif + WebInputEventResult GestureManager::HandleGestureTapDown( const GestureEventWithHitTestResults& targeted_event) { suppress_mouse_events_from_gestures_ = @@ -398,6 +404,10 @@ WebInputEventResult GestureManager::HandleGestureLongPress( const GestureEventWithHitTestResults& targeted_event) { const WebGestureEvent& gesture_event = targeted_event.Event(); +#if BUILDFLAG(IS_TIZEN) + last_gesture_event_ = gesture_event; +#endif + // FIXME: Ideally we should try to remove the extra mouse-specific hit-tests // here (re-using the supplied HitTestResult), but that will require some // overhaul of the touch drag-and-drop code and LongPress is such a special diff --git a/third_party/blink/renderer/core/input/gesture_manager.h b/third_party/blink/renderer/core/input/gesture_manager.h index 2553a4a..3a4c62b 100644 --- a/third_party/blink/renderer/core/input/gesture_manager.h +++ b/third_party/blink/renderer/core/input/gesture_manager.h @@ -68,6 +68,10 @@ class CORE_EXPORT GestureManager final // This must be called from local root frame. void NotifyPointerEventHandled(const WebPointerEvent& web_pointer_event); +#if BUILDFLAG(IS_TIZEN) + void EnterDragState(); +#endif + private: WebInputEventResult HandleGestureShowPress(); WebInputEventResult HandleGestureTapDown( @@ -114,6 +118,10 @@ class CORE_EXPORT GestureManager final Member mouse_event_manager_; Member pointer_event_manager_; +#if BUILDFLAG(IS_TIZEN) + WebGestureEvent last_gesture_event_; +#endif + // Set on GestureTapDown if the |pointerdown| event corresponding to the // triggering |touchstart| event was canceled. This suppresses mouse event // firing for the current gesture sequence (i.e. until next GestureTapDown). diff --git a/third_party/blink/renderer/core/input/mouse_event_manager.cc b/third_party/blink/renderer/core/input/mouse_event_manager.cc index e8cce48..18cc985 100644 --- a/third_party/blink/renderer/core/input/mouse_event_manager.cc +++ b/third_party/blink/renderer/core/input/mouse_event_manager.cc @@ -58,6 +58,10 @@ #include "ui/gfx/geometry/point_conversions.h" #include "ui/gfx/geometry/quad_f.h" +#if BUILDFLAG(IS_TIZEN) +#include "tizen/system_info.h" +#endif + namespace blink { namespace { @@ -745,6 +749,10 @@ void MouseEventManager::UpdateSelectionForMouseDrag() { bool MouseEventManager::HandleDragDropIfPossible( const GestureEventWithHitTestResults& targeted_event) { +#if BUILDFLAG(IS_TIZEN) + if (IsMobileProfile()) + return false; +#endif const WebGestureEvent& gesture_event = targeted_event.Event(); unsigned modifiers = gesture_event.GetModifiers(); @@ -772,6 +780,34 @@ bool MouseEventManager::HandleDragDropIfPossible( return HandleDrag(mev, DragInitiator::kTouch); } +#if BUILDFLAG(IS_TIZEN) +void MouseEventManager::EnterDragState( + const WebGestureEvent& last_gesture_event) { + if (frame_->GetSettings() && + frame_->GetSettings()->GetTouchDragDropEnabled() && frame_->View()) { + mouse_down_ = WebMouseEvent( + WebInputEvent::Type::kMouseDown, last_gesture_event, + WebPointerProperties::Button::kLeft, 1, + WebInputEvent::Modifiers::kLeftButtonDown, base::TimeTicks::Now()); + + WebMouseEvent mouse_drag_event( + WebInputEvent::Type::kMouseMove, last_gesture_event, + WebPointerProperties::Button::kLeft, 1, + WebInputEvent::Modifiers::kLeftButtonDown, base::TimeTicks::Now()); + + HitTestRequest request(HitTestRequest::kReadOnly); + MouseEventWithHitTestResults mev = + event_handling_util::PerformMouseEventHitTest(frame_, request, + mouse_drag_event); + mouse_down_may_start_drag_ = true; + ResetDragSource(); + mouse_down_pos_ = frame_->View()->ConvertFromRootFrame( + gfx::ToFlooredPoint(mouse_drag_event.PositionInRootFrame())); + HandleDrag(mev, DragInitiator::kTouch); + } +} +#endif + void MouseEventManager::FocusDocumentView() { Page* page = frame_->GetPage(); if (!page) diff --git a/third_party/blink/renderer/core/input/mouse_event_manager.h b/third_party/blink/renderer/core/input/mouse_event_manager.h index bfd4d72..e153cfe 100644 --- a/third_party/blink/renderer/core/input/mouse_event_manager.h +++ b/third_party/blink/renderer/core/input/mouse_event_manager.h @@ -101,6 +101,10 @@ class CORE_EXPORT MouseEventManager final DragState& GetDragState(); +#if BUILDFLAG(IS_TIZEN) + void EnterDragState(const WebGestureEvent&); +#endif + void FocusDocumentView(); // Resets the state that indicates the next events could cause a drag. It is diff --git a/third_party/blink/renderer/core/page/context_menu_controller.cc b/third_party/blink/renderer/core/page/context_menu_controller.cc index 27ec0bfb..854831a 100644 --- a/third_party/blink/renderer/core/page/context_menu_controller.cc +++ b/third_party/blink/renderer/core/page/context_menu_controller.cc @@ -508,6 +508,9 @@ bool ContextMenuController::ShowContextMenu(LocalFrame* frame, auto* html_element = DynamicTo(result.InnerNode()); if (html_element) { +#if BUILDFLAG(IS_TIZEN) + data.is_draggable = html_element->draggable(); +#endif data.title_text = html_element->title().Utf8(); data.alt_text = html_element->AltText().Utf8(); } diff --git a/tizen_src/build/config/tizen_features.gni b/tizen_src/build/config/tizen_features.gni index 3b91599..47b30e0 100644 --- a/tizen_src/build/config/tizen_features.gni +++ b/tizen_src/build/config/tizen_features.gni @@ -38,6 +38,7 @@ declare_args() { edje_dir = "/usr/share/chromium-efl/themes/" tizen_data_dir = "/usr/share/chromium-efl/" locale_dir = "/usr/share/chromium-efl/locale/" + image_dir = "/usr/share/chromium-efl/images/" chromium_impl_lib_name = "libchromium-ewk.so" tizen_version = 0 diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.cc b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.cc index 8b2ea46..30584d7 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.cc +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.cc @@ -99,8 +99,10 @@ void WebContentsViewAuraHelperEfl::StartDragging( const blink::mojom::DragEventSourceInfo& event_info, RenderWidgetHostImpl* source_rwh) { if (drag_dest_) { - drag_dest_->SetDropData(drop_data); - drag_dest_->SetAction(allowed_ops); + if (drag_dest_.get()) { + drag_dest_->SetDropData(drop_data); + drag_dest_->SetAction(allowed_ops); + } } if (!drag_source_) { @@ -109,14 +111,15 @@ void WebContentsViewAuraHelperEfl::StartDragging( } if (!drag_source_->StartDragging(drop_data, allowed_ops, event_info.location, - *image.bitmap(), image_offset)) { + *image.bitmap(), image_offset, source_rwh)) { web_contents_->SystemDragEnded(source_rwh); } } DropData* WebContentsViewAuraHelperEfl::GetDropData() const { if (drag_dest_) - return drag_dest_->GetDropData(); + if (drag_dest_.get()) + return drag_dest_->GetDropData(); return nullptr; } @@ -175,4 +178,9 @@ void WebContentsViewAuraHelperEfl::OnOverscrolled( } } +void WebContentsViewAuraHelperEfl::SetViewDelegate( + WebContentsViewDelegate* delegate) { + delegate = view_delegate_; +} + } // namespace content diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.h b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.h index a732c19..3639625 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.h +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_aura_helper_efl.h @@ -17,6 +17,8 @@ #include "mojo/public/cpp/bindings/remote.h" #include "third_party/blink/public/common/page/drag_operation.h" #include "third_party/blink/public/mojom/choosers/popup_menu.mojom.h" +#include "third_party/blink/public/mojom/drag/drag.mojom.h" +#include "tizen_src/chromium_impl/content/public/browser/web_contents_efl_delegate.h" #include "ui/gfx/image/image_skia.h" namespace content { @@ -58,6 +60,7 @@ class CONTENT_EXPORT WebContentsViewAuraHelperEfl { void SetEflDelegate(WebContentsEflDelegate*); WebContentsEflDelegate* GetEflDelegate(); + void SetViewDelegate(WebContentsViewDelegate* delegate); void UpdateDragDest(RenderViewHost* host); void StartDragging(const DropData& drop_data, blink::DragOperationsMask allowed_ops, diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_drag_dest_efl.cc b/tizen_src/chromium_impl/content/browser/web_contents/web_drag_dest_efl.cc index 75dc051..79d920c 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_drag_dest_efl.cc +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_drag_dest_efl.cc @@ -7,8 +7,9 @@ #include "build/tizen_version.h" #include "content/browser/web_contents/web_contents_impl.h" -#include "content/public/browser/web_drag_dest_delegate.h" #include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_widget_host.h" +#include "content/public/browser/web_drag_dest_delegate.h" #include "ui/display/screen.h" namespace content { @@ -42,14 +43,12 @@ WebDragDestEfl::WebDragDestEfl(WebContents* web_contents) delegate_(nullptr), web_contents_(web_contents), page_scale_factor_(1.0f), + drag_action_(blink::kDragOperationNone), drag_initialized_(false) { -#if defined(USE_AURA) - parent_view_ = nullptr; -#else - parent_view_ = static_cast(web_contents->GetNativeView()); -#endif device_scale_factor_ = display::Screen::GetScreen()-> GetPrimaryDisplay().device_scale_factor(); + parent_view_ = + static_cast(web_contents)->GetEflNativeView(); SetDragCallbacks(); } @@ -85,32 +84,25 @@ void WebDragDestEfl::DragStateEnter() { } void WebDragDestEfl::DragStateLeave() { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - // FIXME: EWK_BRINGUP definition should be removed. - GetRenderViewHost()->DragTargetDragLeave(); -#endif // !defined(EWK_BRINGUP) if (delegate_) delegate_->OnDragLeave(); } void WebDragDestEfl::DragPos( Evas_Coord x, Evas_Coord y, Elm_Xdnd_Action action) { - gfx::Point screen_pt = gfx::Point(x / device_scale_factor_, - y / device_scale_factor_); + if (!drop_data_) + return; + + auto screen_pt = + gfx::PointF(x / device_scale_factor_, y / device_scale_factor_); last_pointer_pos_ = screen_pt; - gfx::Point client_pt = gfx::Point(screen_pt.x() / page_scale_factor_, - screen_pt.y() / page_scale_factor_); + auto client_pt = gfx::PointF(screen_pt.x() / page_scale_factor_, + screen_pt.y() / page_scale_factor_); if (!drag_initialized_) { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - // FIXME: EWK_BRINGUP definition should be removed. - GetRenderViewHost()->DragTargetDragEnter( - *drop_data_, - client_pt, - screen_pt, - drag_action_, - modifier_flags_); -#endif // !defined(EWK_BRINGUP) + GetRenderWidgetHost()->DragTargetDragEnter( + *drop_data_, client_pt, screen_pt, drag_action_, modifier_flags_, + base::DoNothing()); if (delegate_) delegate_->OnDragEnter(); @@ -118,14 +110,8 @@ void WebDragDestEfl::DragPos( drag_initialized_ = true; } -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - // FIXME: EWK_BRINGUP definition should be removed. - GetRenderViewHost()->DragTargetDragOver( - client_pt, - screen_pt, - drag_action_, - modifier_flags_); -#endif // !defined(EWK_BRINGUP) + GetRenderWidgetHost()->DragTargetDragOver(client_pt, screen_pt, drag_action_, + modifier_flags_, base::DoNothing()); if (!delegate_) return; @@ -133,41 +119,31 @@ void WebDragDestEfl::DragPos( } Eina_Bool WebDragDestEfl::DragDrop(Elm_Selection_Data* data) { - gfx::Point client_pt = - gfx::Point(last_pointer_pos_.x() / page_scale_factor_, - last_pointer_pos_.y() / page_scale_factor_); - -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - // FIXME: EWK_BRINGUP definition should be removed. - GetRenderViewHost()->FilterDropData(drop_data_.get()); - GetRenderViewHost()->DragTargetDrop( - *drop_data_, - client_pt, - last_pointer_pos_, - modifier_flags_); -#endif // !defined(EWK_BRINGUP) + if (!drag_initialized_) + return EINA_FALSE; + + auto client_pt = gfx::PointF(last_pointer_pos_.x() / page_scale_factor_, + last_pointer_pos_.y() / page_scale_factor_); + + GetRenderWidgetHost()->FilterDropData(drop_data_.get()); + GetRenderWidgetHost()->DragTargetDrop(*drop_data_, client_pt, + last_pointer_pos_, modifier_flags_, + base::DoNothing()); if (delegate_) delegate_->OnDrop(); drag_initialized_ = false; -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - // FIXME: EWK_BRINGUP definition should be removed. - // Invoking via message loop to not mess around with target - // from within one of its callbacks. - base::MessageLoop::current()->PostTask( + + base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::BindOnce(&WebDragDestEfl::ResetDragCallbacks, base::Unretained(this))); -#endif // !defined(EWK_BRINGUP) return EINA_TRUE; } void WebDragDestEfl::DragLeave() { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - // FIXME: EWK_BRINGUP definition should be removed. - GetRenderViewHost()->DragTargetDragLeave(); -#endif // !defined(EWK_BRINGUP) + GetRenderWidgetHost()->DragTargetDragLeave(gfx::PointF(), gfx::PointF()); if (delegate_) delegate_->OnDragLeave(); @@ -182,8 +158,8 @@ void WebDragDestEfl::SetPageScaleFactor(float scale) { page_scale_factor_ = scale; } -RenderViewHost* WebDragDestEfl::GetRenderViewHost() const { - return web_contents_->GetRenderViewHost(); +RenderWidgetHost* WebDragDestEfl::GetRenderWidgetHost() const { + return web_contents_->GetRenderViewHost()->GetWidget(); } } // namespace content diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_drag_dest_efl.h b/tizen_src/chromium_impl/content/browser/web_contents/web_drag_dest_efl.h index 26efada..05e0714 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_drag_dest_efl.h +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_drag_dest_efl.h @@ -10,13 +10,13 @@ #include "content/public/common/drop_data.h" #include "third_party/blink/public/common/page/drag_operation.h" -#include "ui/gfx/geometry/point.h" +#include "ui/gfx/geometry/point_f.h" namespace content { class WebContents; class WebDragDestDelegate; -class RenderViewHost; +class RenderWidgetHost; class WebDragDestEfl { public: @@ -29,7 +29,7 @@ class WebDragDestEfl { blink::DragOperationsMask GetAction() { return drag_action_; } WebDragDestDelegate* GetDelegate() const { return delegate_; } DropData* GetDropData() { return drop_data_.get(); } - RenderViewHost* GetRenderViewHost() const; + RenderWidgetHost* GetRenderWidgetHost() const; WebContents* GetWebContents() { return web_contents_; } void ResetDropData() { drop_data_.reset(); } @@ -70,7 +70,7 @@ class WebDragDestEfl { float device_scale_factor_; float page_scale_factor_; - gfx::Point last_pointer_pos_; + gfx::PointF last_pointer_pos_; bool drag_initialized_; diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_drag_source_efl.cc b/tizen_src/chromium_impl/content/browser/web_contents/web_drag_source_efl.cc index 0e3182c..6bad9c0 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_drag_source_efl.cc +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_drag_source_efl.cc @@ -4,9 +4,13 @@ #include "content/browser/web_contents/web_drag_source_efl.h" +#include "base/files/file_path.h" +#include "base/path_service.h" +#include "base/strings/utf_string_conversions.h" #include "content/browser/download/drag_download_util.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/web_contents/web_contents_impl.h" +#include "content/common/paths_efl.h" #include "content/public/common/drop_data.h" #include "third_party/skia/include/core/SkPixelRef.h" #include "ui/base/dragdrop/drag_drop_types.h" @@ -23,6 +27,10 @@ namespace content { namespace { +const char* const kDefaultDragIcon = "broken_image.png"; +const int kDefaultDragIconWidth = 105; +const int kDefaultDragIconHeight = 120; + DragOperation GetDragOperationFromMask(blink::DragOperationsMask operations) { if (operations & ui::DragDropTypes::DRAG_COPY) return DragOperation::kCopy; @@ -61,12 +69,13 @@ void DragStateCb(void* data, Evas_Object* obj) { WebDragSourceEfl::WebDragSourceEfl(WebContents* web_contents) : web_contents_(static_cast(web_contents)), + source_rwh_(nullptr), drag_failed_(false), drag_started_(false), + drag_action_(blink::kDragOperationNone), page_scale_factor_(1.0f) { -#if !defined(USE_AURA) - parent_view_ = static_cast(web_contents->GetNativeView()); -#endif + parent_view_ = + static_cast(web_contents)->GetEflNativeView(); device_scale_factor_ = display::Screen::GetScreen()->GetPrimaryDisplay().device_scale_factor(); } @@ -77,38 +86,54 @@ bool WebDragSourceEfl::StartDragging(const DropData& drop_data, blink::DragOperationsMask allowed_ops, const gfx::Point& root_location, const SkBitmap& image, - const gfx::Vector2d& image_offset) { + const gfx::Vector2d& image_offset, + RenderWidgetHostImpl* source_rwh) { // Guard against re-starting before previous drag completed. if (drag_started_) { NOTREACHED(); return false; } + std::u16string elm_drag_data; int targets_mask = 0; - drop_data_.reset(new DropData(drop_data)); initial_position_ = root_location; - if (drop_data.text && !drop_data.text->empty()) + if (drop_data.text && !drop_data.text->empty()) { + elm_drag_data = *drop_data.text; targets_mask |= ELM_SEL_FORMAT_TEXT; - if (drop_data.url.is_valid()) + } + if (drop_data.url.is_valid()) { + elm_drag_data = base::UTF8ToUTF16(drop_data.url.spec()); targets_mask |= ELM_SEL_FORMAT_TEXT; - if (drop_data.html && !drop_data.html->empty()) + } + if (drop_data.html && !drop_data.html->empty()) { + elm_drag_data = *drop_data.html; targets_mask |= ELM_SEL_FORMAT_HTML; + } if (!drop_data.file_contents.empty()) { + GURL parsed_url; #if defined(ENABLE_WRT_JS) && !defined(WRT_JS_BRINGUP) - GURL parsed_url = wrt::ParseURL(drop_data.file_contents_source_url); + parsed_url = wrt::ParseURL(drop_data.file_contents_source_url); if ((parsed_url.is_valid() && !parsed_url.IsAboutBlank())) drop_data_.file_contents_source_url = parsed_url; #endif + elm_drag_data = + (parsed_url.is_valid() && !parsed_url.IsAboutBlank()) + ? base::UTF8ToUTF16(parsed_url.spec()) + : base::UTF8ToUTF16(drop_data.file_contents_source_url.spec()); targets_mask |= ELM_SEL_FORMAT_IMAGE; } if (!drop_data.download_metadata.empty() && ParseDownloadMetadata(drop_data.download_metadata, &wide_download_mime_type_, &download_file_name_, - &download_url_)) + &download_url_)) { + elm_drag_data = drop_data.download_metadata; targets_mask |= ELM_SEL_FORMAT_IMAGE; - if (!drop_data.custom_data.empty()) + } + if (!drop_data.custom_data.empty()) { + elm_drag_data = drop_data.custom_data.begin()->first; targets_mask |= ELM_SEL_FORMAT_NONE; + } int action = 0; @@ -125,10 +150,11 @@ bool WebDragSourceEfl::StartDragging(const DropData& drop_data, image_offset_ = image_offset; drag_action_ = allowed_ops; drag_failed_ = false; + source_rwh_ = source_rwh; drag_started_ = elm_drag_start( parent_view_, static_cast(targets_mask), - reinterpret_cast(drop_data_.get()), + base::UTF16ToUTF8(elm_drag_data).c_str(), static_cast(action), DragIconCreateCb, this, DragPosCb, this, DragAcceptCb, this, DragStateCb, this); @@ -137,7 +163,6 @@ bool WebDragSourceEfl::StartDragging(const DropData& drop_data, if (!drag_started_) { LOG(WARNING) << "Failed to start drag and drop"; drag_failed_ = true; - drop_data_.reset(); return false; } @@ -155,13 +180,22 @@ Evas_Object* WebDragSourceEfl::DragIconCreate(Evas_Object* win, *yoff = initial_position_.y(); Evas* evas = evas_object_evas_get(win); Evas_Object* icon = evas_object_image_add(evas); - evas_object_image_size_set(icon, w, h); + if (w > 0 && h > 0) { + evas_object_image_size_set(icon, w, h); + evas_object_image_data_copy_set(icon, image_.pixelRef()->pixels()); + } else { + w = kDefaultDragIconWidth; + h = kDefaultDragIconHeight; + base::FilePath path; + base::PathService::Get(PathsEfl::IMAGE_RESOURCE_DIR, &path); + path = path.Append(FILE_PATH_LITERAL(kDefaultDragIcon)); + evas_object_image_file_set(icon, path.AsUTF8Unsafe().c_str(), nullptr); + } + evas_object_image_fill_set(icon, 0, 0, w, h); evas_object_image_alpha_set(icon, EINA_TRUE); - evas_object_image_data_copy_set(icon, image_.pixelRef()->pixels()); evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_move(icon, initial_position_.x(), initial_position_.y()); - evas_object_image_fill_set(icon, 0, 0, w, h); evas_object_resize(icon, w, h); evas_object_show(icon); diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_drag_source_efl.h b/tizen_src/chromium_impl/content/browser/web_contents/web_drag_source_efl.h index da355cb..99eb872 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_drag_source_efl.h +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_drag_source_efl.h @@ -39,7 +39,8 @@ class WebDragSourceEfl { blink::DragOperationsMask allowed_ops, const gfx::Point& root_location, const SkBitmap& image, - const gfx::Vector2d& image_offset); + const gfx::Vector2d& image_offset, + RenderWidgetHostImpl* source_rwh); void Reset() { drag_started_ = false; } void SetLastPoint(gfx::Point point) { last_point_ = point; } @@ -62,10 +63,6 @@ class WebDragSourceEfl { // Browser side IPC handler. RenderWidgetHostImpl* source_rwh_; - // The drop data for the current drag (for drags that originate in the render - // view). Non-NULL iff there is a current drag. - std::unique_ptr drop_data_; - // The image used for depicting the drag, and the offset between the cursor // and the top left pixel. SkBitmap image_; diff --git a/tizen_src/chromium_impl/content/common/BUILD.gn b/tizen_src/chromium_impl/content/common/BUILD.gn index d1ffc54..85a125f 100644 --- a/tizen_src/chromium_impl/content/common/BUILD.gn +++ b/tizen_src/chromium_impl/content/common/BUILD.gn @@ -24,6 +24,7 @@ config("content_common_efl") { outdir = rebase_path("$root_out_dir") defines += [ "EDJE_DIR=\"$outdir/resources\"", + "IMAGE_DIR=\"$image_dir\"", "LOCALE_DIR=\"$outdir/locale\"", ] } diff --git a/tizen_src/chromium_impl/content/common/paths_efl.cc b/tizen_src/chromium_impl/content/common/paths_efl.cc index 174e2b1..7f1f716 100644 --- a/tizen_src/chromium_impl/content/common/paths_efl.cc +++ b/tizen_src/chromium_impl/content/common/paths_efl.cc @@ -32,6 +32,9 @@ const base::FilePath::CharType kApplicationCacheDir[] = FILE_PATH_LITERAL("cache const base::FilePath::CharType kChromiumLibPath[] = FILE_PATH_LITERAL("lib/" CHROMIUM_IMPL_LIB_FILE); const base::FilePath::CharType kNotificationIconDir[] = FILE_PATH_LITERAL("noti"); +const base::FilePath::CharType kImageDir[] = FILE_PATH_LITERAL("images"); +#else +const base::FilePath::CharType kImagePath[] = FILE_PATH_LITERAL(IMAGE_DIR); #endif #if !defined(EWK_BRINGUP) // FIXME: m67 bringup @@ -211,6 +214,16 @@ bool PathProvider(int key, base::FilePath* result) { cur = cur.Append(kNotificationIconDir); break; #endif + case IMAGE_RESOURCE_DIR: +#if BUILDFLAG(IS_TIZEN) + if (!base::PathService::Get(DIR_USER_DATA, &cur)) + return false; + cur = cur.Append(kImageDir); + break; +#else + *result = base::FilePath(kImagePath); + return true; +#endif default: return false; } diff --git a/tizen_src/ewk/efl_integration/BUILD.gn b/tizen_src/ewk/efl_integration/BUILD.gn index 3254f23..3e32f33 100755 --- a/tizen_src/ewk/efl_integration/BUILD.gn +++ b/tizen_src/ewk/efl_integration/BUILD.gn @@ -643,6 +643,7 @@ shared_library("chromium-ewk") { ] } deps += [ "resource:edje_resources_ewk" ] + deps += [ ":broken_image" ] } executable("efl_webprocess") { @@ -658,3 +659,8 @@ copy("launch_exec_script") { sources = [ "launch_exec.sh" ] outputs = [ "$root_out_dir/{{source_file_part}}" ] } + +copy("broken_image") { + sources = [ "./resource/images/broken_image.png" ] + outputs = [ "$root_out_dir/images/{{source_file_part}}" ] +} \ No newline at end of file diff --git a/tizen_src/ewk/efl_integration/command_line_efl.cc b/tizen_src/ewk/efl_integration/command_line_efl.cc index eddd778..de01912 100644 --- a/tizen_src/ewk/efl_integration/command_line_efl.cc +++ b/tizen_src/ewk/efl_integration/command_line_efl.cc @@ -103,6 +103,9 @@ content::MainFunctionParams CommandLineEfl::GetDefaultPortParams() { #endif } + if (IsMobileProfile()) + p_command_line->AppendSwitch(switches::kEnableTouchDragDrop); + #if !defined(EWK_BRINGUP) if (p_command_line->HasSwitch(switches::kDisableIpcSandbox)) p_command_line->AppendSwitch(switches::kDisableRendererZygote); diff --git a/tizen_src/ewk/efl_integration/context_menu_controller_efl.cc b/tizen_src/ewk/efl_integration/context_menu_controller_efl.cc index 2e33c0b..21aea88 100644 --- a/tizen_src/ewk/efl_integration/context_menu_controller_efl.cc +++ b/tizen_src/ewk/efl_integration/context_menu_controller_efl.cc @@ -14,6 +14,7 @@ #include "common/web_contents_utils.h" #include "content/browser/renderer_host/render_widget_host_view_aura.h" #include "content/browser/selection/selection_controller_efl.h" +#include "content/browser/web_contents/web_contents_impl.h" #include "content/common/paths_efl.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/download_manager.h" @@ -62,14 +63,13 @@ std::vector ContextMenuControllerEfl::_context_menu_listdata ContextMenuControllerEfl::ContextMenuControllerEfl(EWebView* wv, WebContents& web_contents) : webview_(wv), -#if !defined(USE_AURA) - native_view_(static_cast(web_contents.GetNativeView())), -#endif popup_(nullptr), menu_items_(nullptr), web_contents_(web_contents), is_text_selection_(false), weak_ptr_factory_(this) { + native_view_ = + static_cast(&web_contents_)->GetEflNativeView(); } ContextMenuControllerEfl::~ContextMenuControllerEfl() { @@ -241,10 +241,12 @@ void ContextMenuControllerEfl::GetProposedContextMenu() { } #endif } -#if !defined(EWK_BRINGUP) - if (params_.is_draggable) { - AddItemToProposedList(EWK_CONTEXT_MENU_ITEM_TYPE_ACTION, EWK_CONTEXT_MENU_ITEM_TAG_DRAG, - std::string(dgettext("WebKit", "IDS_WEBVIEW_OPT_DRAG_AND_DROP"))); +#if BUILDFLAG(IS_TIZEN) + if (IsMobileProfile() && params_.is_draggable && + params_.media_type == ContextMenuDataMediaType::kImage) { + AddItemToProposedList( + EWK_CONTEXT_MENU_ITEM_TYPE_ACTION, EWK_CONTEXT_MENU_ITEM_TAG_DRAG, + std::string(dgettext("WebKit", "IDS_WEBVIEW_OPT_DRAG_AND_DROP_ABB"))); } #endif @@ -958,12 +960,13 @@ void ContextMenuControllerEfl::MenuItemSelected(ContextMenuItemEfl* menu_item) break; } case EWK_CONTEXT_MENU_ITEM_TAG_DRAG: { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - RenderViewHost* rvh = web_contents_.GetRenderViewHost(); - rvh->StartDragging(); - context_menu_show_pos_.SetPoint(params_.x, params_.y); -#else - NOTIMPLEMENTED(); +#if BUILDFLAG(IS_TIZEN) + if (IsMobileProfile()) { + webview_->EnterDragState(); + context_menu_show_pos_.SetPoint(params_.x, params_.y); + } else { + NOTIMPLEMENTED(); + } #endif break; } diff --git a/tizen_src/ewk/efl_integration/eweb_view.cc b/tizen_src/ewk/efl_integration/eweb_view.cc index 76e4b48..a9a6708 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.cc +++ b/tizen_src/ewk/efl_integration/eweb_view.cc @@ -731,6 +731,15 @@ void EWebView::ExecuteEditCommand(const char* command, const char* value) { } } +#if BUILDFLAG(IS_TIZEN) +void EWebView::EnterDragState() { + if (IsMobileProfile()) { + if (RenderViewHost* render_view_host = web_contents_->GetRenderViewHost()) + web_contents_->EnterDragState(render_view_host); + } +} +#endif + void EWebView::SetOrientation(int orientation) { if (GetOrientation() == orientation) return; diff --git a/tizen_src/ewk/efl_integration/eweb_view.h b/tizen_src/ewk/efl_integration/eweb_view.h index 571af8c..601562e 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.h +++ b/tizen_src/ewk/efl_integration/eweb_view.h @@ -326,6 +326,9 @@ class EWebView { double GetPageZoomFactor() const; void SetPageZoomFactor(double page_zoom_factor); void ExecuteEditCommand(const char* command, const char* value); +#if BUILDFLAG(IS_TIZEN) + void EnterDragState(); +#endif void SetOrientation(int orientation); int GetOrientation(); bool TouchEventsEnabled() const; diff --git a/tizen_src/ewk/efl_integration/resource/images/broken_image.png b/tizen_src/ewk/efl_integration/resource/images/broken_image.png new file mode 100644 index 0000000000000000000000000000000000000000..45edebcd5150d522620aefa9e3fbb0f9b6755450 GIT binary patch literal 810 zcmV+_1J(SAP){PkE;hYNfp@?Q)ugb<^guz~uln#LatF2$yvi~ezGr+Y4GZgNslFhVa~|pZ0S?7N z5Lnl+E6B1{5%N^$C|?G_3%^RXkTKc1D!M_Kn$`LKwZcMxJ?wiwokqDJFw#3LCw5EO zN#&N=Ld*U?5{ea}S$?1RpDh(qOU-{W65{#{G$V$fuNrlMdMH9&RpxpuKqkD%m?=!g zBlwW$XPHG%sm9)#qu5_}3YETESDELrFg<+J+6ac`u0YGhTplEeiG>J0CZ6KZmJ8Uk z@rY9<4~_kM=*C#Q5B)#eC7GLeaPBgOqa6UqRR&@qaYEvRPV1XkHzpS!Vl7PO(-J`( ztZQ}k*$Ek1squyTEL#WS-C_ivmIhd17fZlGIKj8nD~!Z%txINYUPo_Y$@t}*7q_8F z7(ejh_f-J2UKwLh8ZYOs Date: Mon, 20 Feb 2023 15:27:19 +0800 Subject: [PATCH 16/16] [M108 Migration][API] Provide ewk_context_tizen_app_version_set api This patch is for the requirement: Provide ewk setting api for widget version which be used for html5 video. 1.Provide ewk_context_tizen_app_version_set api for HBBTV, to set the value of widget version. 2.This api must be used after ewk_context_tizen_app_id_set or ewk_send_widget_info beacuse need drop the process privillages and set dynamic plugin. Reference: - https://review.tizen.org/gerrit/283610/ Change-Id: I67f644d3455af3d1ac939bbe316d64ee347a9911 Signed-off-by: Jie Zhang --- .../ewk/efl_integration/common/content_switches_efl.cc | 1 + .../ewk/efl_integration/common/content_switches_efl.h | 1 + .../ewk/efl_integration/content_browser_client_efl.cc | 2 ++ tizen_src/ewk/efl_integration/eweb_context.cc | 18 ++++++++++++++++++ tizen_src/ewk/efl_integration/eweb_context.h | 3 +++ .../ewk/efl_integration/private/ewk_context_private.cc | 4 ++++ .../ewk/efl_integration/private/ewk_context_private.h | 2 +- tizen_src/ewk/efl_integration/public/ewk_context.cc | 7 +++++-- 8 files changed, 35 insertions(+), 3 deletions(-) diff --git a/tizen_src/ewk/efl_integration/common/content_switches_efl.cc b/tizen_src/ewk/efl_integration/common/content_switches_efl.cc index 1e8d1f9..d7f83f9 100644 --- a/tizen_src/ewk/efl_integration/common/content_switches_efl.cc +++ b/tizen_src/ewk/efl_integration/common/content_switches_efl.cc @@ -20,6 +20,7 @@ const char kApplicationType[] = "application-type"; // Widget Info const char kTizenAppId[] = "widget-id"; +const char kTizenAppVersion[] = "app-version"; const char kWidgetScale[] = "widget-scale"; const char kWidgetTheme[] = "widget-theme"; const char kWidgetEncodedBundle[] = "widget-encoded-bundle"; diff --git a/tizen_src/ewk/efl_integration/common/content_switches_efl.h b/tizen_src/ewk/efl_integration/common/content_switches_efl.h index abefe6d..ff0b1a2 100644 --- a/tizen_src/ewk/efl_integration/common/content_switches_efl.h +++ b/tizen_src/ewk/efl_integration/common/content_switches_efl.h @@ -23,6 +23,7 @@ CONTENT_EXPORT extern const char kInjectedBundlePath[]; CONTENT_EXPORT extern const char kApplicationType[]; #endif CONTENT_EXPORT extern const char kTizenAppId[]; +CONTENT_EXPORT extern const char kTizenAppVersion[]; CONTENT_EXPORT extern const char kWidgetScale[]; CONTENT_EXPORT extern const char kWidgetTheme[]; CONTENT_EXPORT extern const char kWidgetEncodedBundle[]; 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 cc199f7..5107d5a 100644 --- a/tizen_src/ewk/efl_integration/content_browser_client_efl.cc +++ b/tizen_src/ewk/efl_integration/content_browser_client_efl.cc @@ -132,6 +132,8 @@ void AppendExtraCommandLineSwitchesInternal(base::CommandLine* command_line, const std::string& tizen_app_id = context->GetTizenAppId(); command_line->AppendSwitchASCII(switches::kTizenAppId, tizen_app_id); + command_line->AppendSwitchASCII(switches::kTizenAppVersion, + context->GetTizenAppVersion()); double scale = context->GetWidgetScale(); command_line->AppendSwitchASCII(switches::kWidgetScale, diff --git a/tizen_src/ewk/efl_integration/eweb_context.cc b/tizen_src/ewk/efl_integration/eweb_context.cc index b2c3b7d..f344603 100644 --- a/tizen_src/ewk/efl_integration/eweb_context.cc +++ b/tizen_src/ewk/efl_integration/eweb_context.cc @@ -277,6 +277,24 @@ void EWebContext::SetWidgetInfo(const std::string& tizen_app_id, #endif // IS_TIZEN } +bool EWebContext::SetAppVersion(const std::string& tizen_app_version) { + if (tizen_app_id_.empty()) { + LOG(ERROR) << "Please set tizen_app_id first."; + return false; + } + + tizen_app_version_ = tizen_app_version; + +#if BUILDFLAG(IS_TIZEN) + base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); + command_line.AppendSwitchASCII(switches::kTizenAppVersion, tizen_app_version); + return true; +#else + LOG(WARNING) << "OS_TIZEN is not enabled."; + return false; +#endif // IS_TIZEN +} + void EWebContext::SendWrtMessage(const Ewk_Wrt_Message_Data& data) { WrtWidgetHost::Get()->SendWrtMessage(data); } diff --git a/tizen_src/ewk/efl_integration/eweb_context.h b/tizen_src/ewk/efl_integration/eweb_context.h index bb51d19..651941c 100644 --- a/tizen_src/ewk/efl_integration/eweb_context.h +++ b/tizen_src/ewk/efl_integration/eweb_context.h @@ -147,6 +147,7 @@ class EWebContext { Evas_Object *AddFaviconObject(const char *uri, Evas *canvas) const; void SetWidgetInfo(const std::string& tizen_app_id, double scale, const std::string &theme, const std::string &encoded_bundle); + bool SetAppVersion(const std::string& tizen_app_version); void SendWrtMessage(const Ewk_Wrt_Message_Data& message); void SetMimeOverrideCallback(Ewk_Context_Override_Mime_For_Url_Callback callback, @@ -182,6 +183,7 @@ class EWebContext { const std::string& GetInjectedBundlePath() const { return injected_bundle_path_; } const std::string& GetTizenAppId() const { return tizen_app_id_; } + const std::string& GetTizenAppVersion() const { return tizen_app_version_; } const std::string& GetWidgetTheme() const { return widget_theme_; } const std::string& GetWidgetEncodedBundle() const { return widget_encoded_bundle_; } double GetWidgetScale() const { return widget_scale_; } @@ -230,6 +232,7 @@ class EWebContext { // widget info std::string tizen_app_id_; + std::string tizen_app_version_; std::string widget_theme_; std::string widget_encoded_bundle_; double widget_scale_; 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 be871bd..e10e87a 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_context_private.cc +++ b/tizen_src/ewk/efl_integration/private/ewk_context_private.cc @@ -256,6 +256,10 @@ void Ewk_Context::SetWidgetInfo(const std::string& tizen_app_id, impl->SetWidgetInfo(tizen_app_id, scale, theme, encoded_bundle); } +bool Ewk_Context::SetAppVersion(const std::string& tizen_app_version) { + return impl->SetAppVersion(tizen_app_version); +} + int Ewk_Context::Pixmap() const { return impl->Pixmap(); } 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 fc39ea3..869cde0 100644 --- a/tizen_src/ewk/efl_integration/private/ewk_context_private.h +++ b/tizen_src/ewk/efl_integration/private/ewk_context_private.h @@ -116,7 +116,7 @@ struct Ewk_Context : public base::RefCounted { double scale, const std::string& theme, const std::string& encoded_bundle); - //void SendWrtMessage(const Ewk_IPC_Wrt_Message_Data& message); + bool SetAppVersion(const std::string& tizen_app_version); // Pixmap int Pixmap() const; diff --git a/tizen_src/ewk/efl_integration/public/ewk_context.cc b/tizen_src/ewk/efl_integration/public/ewk_context.cc index 95dd572..a7e298a 100644 --- a/tizen_src/ewk/efl_integration/public/ewk_context.cc +++ b/tizen_src/ewk/efl_integration/public/ewk_context.cc @@ -26,6 +26,7 @@ #include "ewk_context_product.h" #include "base/memory/ref_counted.h" +#include "base/trace_event/ttrace.h" #include "browser/favicon/favicon_database_p.h" #include "browser/vibration/vibration_provider_client.h" #include "browser_context_efl.h" @@ -614,8 +615,10 @@ void ewk_context_tizen_app_id_set(Ewk_Context* context, Eina_Bool ewk_context_tizen_app_version_set(Ewk_Context* context, const char* tizen_app_version) { - LOG_EWK_API_MOCKUP(); - return false; + EINA_SAFETY_ON_NULL_RETURN_VAL(context, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(tizen_app_version, EINA_FALSE); + TTRACE_WEB("tizen_app_version: %s", tizen_app_version); + return context->SetAppVersion(tizen_app_version); } Ewk_Application_Cache_Manager* ewk_context_application_cache_manager_get(const Ewk_Context* ewkContext) -- 2.7.4