From: Piotr Tworek Date: Fri, 24 Apr 2015 11:20:00 +0000 (+0200) Subject: Introduce WebContentsViewEflDelegate interface. X-Git-Tag: submit/tizen/20201118.160233~945 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1d05064b4588979019f505f5708650c82bff531b;p=platform%2Fframework%2Fweb%2Fchromium-efl.git Introduce WebContentsViewEflDelegate interface. The idea is to avoid the need to modify upstrem WebContentsViewDelegate interface. WebContentsViewEflDelagate is supposed to hold only extra EFL specific extensions we'd otherwise have to put in the non Efl counterpart of the interface. The downside is WebCotnentsViewEfl implementation has two delegates now and care has to be taken to call function from the correct one. Still it's probably preferable to do it this way instead of patching chromium. Change-Id: I6cdb0c966b11be33bf71ab3f45f172259cf063ae Signed-off-by: Piotr Tworek --- diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.cc b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.cc index 6efd718..be2ea0a 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.cc +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.cc @@ -12,13 +12,14 @@ #include "base/strings/utf_string_conversions.h" #include "content/browser/renderer_host/render_widget_host_view_efl.h" #include "content/browser/web_contents/web_contents_impl.h" -#include "content/common/view_messages.h" -#include "content/public/browser/screen_orientation_dispatcher_host.h" -#include "content/public/browser/web_contents_view_delegate.h" #include "content/browser/web_contents/web_drag_dest_efl.h" #include "content/browser/web_contents/web_drag_source_efl.h" +#include "content/common/view_messages.h" #include "content/public/browser/interstitial_page.h" #include "content/public/browser/render_view_host.h" +#include "content/public/browser/screen_orientation_dispatcher_host.h" +#include "content/public/browser/web_contents_view_delegate.h" +#include "content/public/browser/web_contents_view_efl_delegate.h" #include "efl/window_factory.h" #include "ui/events/event_switches.h" #include "ui/events/platform/platform_event_source.h" @@ -72,6 +73,10 @@ WebContentsViewEfl::WebContentsViewEfl(WebContents* contents, WebContentsViewEfl::~WebContentsViewEfl() { } +void WebContentsViewEfl::SetEflDelegate(WebContentsViewEflDelegate* delegate) { + efl_delegate_.reset(delegate); +} + void WebContentsViewEfl::CreateView(const gfx::Size& initial_size, gfx::NativeView context) { Evas_Object* root_window = efl::WindowFactory::GetHostWindow(web_contents_); @@ -117,8 +122,8 @@ RenderWidgetHostViewBase* WebContentsViewEfl::CreateViewForPopupWidget( } void WebContentsViewEfl::SetPageTitle(const base::string16& title) { - if (delegate_) - delegate_->SetPageTitle(title); + if (efl_delegate_) + efl_delegate_->SetPageTitle(title); } void WebContentsViewEfl::UpdateDragDest(RenderViewHost* host) { @@ -234,15 +239,15 @@ void WebContentsViewEfl::ShowPopupMenu( const std::vector& items, bool right_aligned, bool allow_multiple_selection) { - if (delegate_) - delegate_->ShowPopupMenu(render_frame_host, bounds, + if (efl_delegate_) + efl_delegate_->ShowPopupMenu(render_frame_host, bounds, item_height, item_font_size, selected_item, items, right_aligned, allow_multiple_selection); } void WebContentsViewEfl::HidePopupMenu() { - if (delegate_) - delegate_->HidePopupMenu(); + if (efl_delegate_) + efl_delegate_->HidePopupMenu(); } void WebContentsViewEfl::StartDragging( diff --git a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.h b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.h index 8105003..43cbd4f 100644 --- a/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.h +++ b/tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.h @@ -15,6 +15,7 @@ namespace content { class WebContents; class WebContentsViewDelegate; +class WebContentsViewEflDelegate; class WebDragDestEfl; class WebDragSourceEfl; class WebDragDestDelegate; @@ -27,6 +28,8 @@ class WebContentsViewEfl WebContentsViewDelegate* delegate = NULL); ~WebContentsViewEfl() override; + void SetEflDelegate(WebContentsViewEflDelegate*); + // content::WebContentsView implementation. void CreateView(const gfx::Size&, gfx::NativeView context) override; RenderWidgetHostViewBase* CreateViewForWidget( @@ -74,9 +77,13 @@ class WebContentsViewEfl void SetPageScaleFactor(float); private: - // Our optional views wrapper. + // Our optional, generic views wrapper. scoped_ptr delegate_; + // Delegate specific to EFL port of chromium. + // May be NULL in case of non EWK apps. + scoped_ptr efl_delegate_; + Evas_Object* native_view_; WebDragDestDelegate* drag_dest_delegate_; diff --git a/tizen_src/chromium_impl/content/content_efl.gypi b/tizen_src/chromium_impl/content/content_efl.gypi index 689e1f7..832145c 100644 --- a/tizen_src/chromium_impl/content/content_efl.gypi +++ b/tizen_src/chromium_impl/content/content_efl.gypi @@ -122,6 +122,7 @@ 'browser/renderer_host/web_event_factory_efl.h', 'browser/renderer_host/web_event_factory_efl.cc', 'public/browser/web_contents_delegate_efl.cc', + 'public/browser/web_contents_view_efl_delegate.h', ], 'sources/': [ ['include', '^browser/renderer_host/ui_events_helper.cc'], diff --git a/tizen_src/chromium_impl/content/public/browser/web_contents_view_efl_delegate.h b/tizen_src/chromium_impl/content/public/browser/web_contents_view_efl_delegate.h new file mode 100644 index 0000000..8b94c56 --- /dev/null +++ b/tizen_src/chromium_impl/content/public/browser/web_contents_view_efl_delegate.h @@ -0,0 +1,38 @@ +// Copyright 2015 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_EFL_DELEGATE_H_ +#define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_EFL_DELEGATE_H_ + +#include + +#include "content/common/content_export.h" +#include "content/public/common/menu_item.h" +#include "ui/gfx/geometry/rect.h" + +namespace content { + +class RenderFrameHost; + +class WebContentsViewEflDelegate { + public: + WebContentsViewEflDelegate() {}; + + virtual void ShowPopupMenu( + RenderFrameHost* render_frame_host, + const gfx::Rect& bounds, + int item_height, + double item_font_size, + int selected_item, + const std::vector& items, + bool right_aligned, + bool allow_multiple_selection) = 0; + virtual void HidePopupMenu() = 0; + + virtual void SetPageTitle(const base::string16& title) = 0; +}; + +} // namespace content + +#endif // CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_VIEW_EFL_DELEGATE_H_ diff --git a/tizen_src/ewk/efl_integration/efl_integration.gypi b/tizen_src/ewk/efl_integration/efl_integration.gypi index 183cfc1..a15f929 100644 --- a/tizen_src/ewk/efl_integration/efl_integration.gypi +++ b/tizen_src/ewk/efl_integration/efl_integration.gypi @@ -173,6 +173,8 @@ 'web_contents_delegate_efl.h', 'web_contents_view_delegate_ewk.cc', 'web_contents_view_delegate_ewk.h', + 'web_contents_view_efl_delegate_ewk.cc', + 'web_contents_view_efl_delegate_ewk.h', 'web_process_content_main_delegate_efl.cc', 'web_process_content_main_delegate_efl.h', diff --git a/tizen_src/ewk/efl_integration/eweb_view.cc b/tizen_src/ewk/efl_integration/eweb_view.cc index 1483537..ca5aeae 100644 --- a/tizen_src/ewk/efl_integration/eweb_view.cc +++ b/tizen_src/ewk/efl_integration/eweb_view.cc @@ -45,6 +45,7 @@ #include "skia/ext/platform_canvas.h" #include "third_party/WebKit/public/web/WebFindOptions.h" #include "ui/events/event_switches.h" +#include "web_contents_view_efl_delegate_ewk.h" #if defined(OS_TIZEN_MOBILE) #include "browser/motion/wkext_motion.h" #endif @@ -2187,9 +2188,10 @@ void EWebView::InitializeContent() { } web_contents_delegate_.reset(new WebContentsDelegateEfl(this)); web_contents_->SetDelegate(web_contents_delegate_.get()); + GetWebContentsViewEfl()->SetEflDelegate( + new WebContentsViewEflDelegateEwk(this)); back_forward_list_.reset(new _Ewk_Back_Forward_List( web_contents_->GetController())); - back_forward_list_.reset( new _Ewk_Back_Forward_List(web_contents_->GetController())); diff --git a/tizen_src/ewk/efl_integration/web_contents_view_delegate_ewk.cc b/tizen_src/ewk/efl_integration/web_contents_view_delegate_ewk.cc index 883b1d2..fd4daf7 100644 --- a/tizen_src/ewk/efl_integration/web_contents_view_delegate_ewk.cc +++ b/tizen_src/ewk/efl_integration/web_contents_view_delegate_ewk.cc @@ -11,27 +11,7 @@ WebContentsViewDelegateEwk::WebContentsViewDelegateEwk(EWebView* wv) } void WebContentsViewDelegateEwk::ShowContextMenu( - content::RenderFrameHost* render_frame_host, - const content::ContextMenuParams& params) { + content::RenderFrameHost* render_frame_host, + const content::ContextMenuParams& params) { web_view_->ShowContextMenu(params); } - -void WebContentsViewDelegateEwk::ShowPopupMenu( - content::RenderFrameHost* render_frame_host, - const gfx::Rect& bounds, - int item_height, - double item_font_size, - int selected_item, - const std::vector& items, - bool right_aligned, - bool allow_multiple_selection) { - web_view_->ShowPopupMenu(items, selected_item, allow_multiple_selection); -} - -void WebContentsViewDelegateEwk::HidePopupMenu() { - web_view_->HidePopupMenu(); -} - -void WebContentsViewDelegateEwk::SetPageTitle(const base::string16& title) { - web_view_->SmartCallback().call(base::UTF16ToUTF8(title).c_str()); -} diff --git a/tizen_src/ewk/efl_integration/web_contents_view_delegate_ewk.h b/tizen_src/ewk/efl_integration/web_contents_view_delegate_ewk.h index a885fbd..180d359 100644 --- a/tizen_src/ewk/efl_integration/web_contents_view_delegate_ewk.h +++ b/tizen_src/ewk/efl_integration/web_contents_view_delegate_ewk.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef WEB_CONTENTS_VIEW_DELEGATE_EFL -#define WEB_CONTENTS_VIEW_DELEGATE_EFL +#ifndef WEB_CONTENTS_VIEW_EFL_DELEGATE_EWK +#define WEB_CONTENTS_VIEW_EFL_DELEGATE_EWK #include "content/public/browser/web_contents_view_delegate.h" @@ -15,29 +15,18 @@ namespace content { class RenderFrameHost; } -class WebContentsViewDelegateEwk : public content::WebContentsViewDelegate { +class WebContentsViewDelegateEwk + : public content::WebContentsViewDelegate { public: WebContentsViewDelegateEwk(EWebView*); void ShowContextMenu( content::RenderFrameHost* render_frame_host, const content::ContextMenuParams& params) override; - void ShowPopupMenu( - content::RenderFrameHost* render_frame_host, - const gfx::Rect& bounds, - int item_height, - double item_font_size, - int selected_item, - const std::vector& items, - bool right_aligned, - bool allow_multiple_selection) override; - void HidePopupMenu() override; - - void SetPageTitle(const base::string16& title) override; private: EWebView* web_view_; }; -#endif // WEB_CONTENTS_VIEW_DELEGATE_EFL +#endif // WEB_CONTENTS_VIEW_EFL_DELEGATE_EWK diff --git a/tizen_src/ewk/efl_integration/web_contents_view_efl_delegate_ewk.cc b/tizen_src/ewk/efl_integration/web_contents_view_efl_delegate_ewk.cc new file mode 100644 index 0000000..ac7e341 --- /dev/null +++ b/tizen_src/ewk/efl_integration/web_contents_view_efl_delegate_ewk.cc @@ -0,0 +1,32 @@ +// Copyright 2015 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "web_contents_view_efl_delegate_ewk.h" + +#include "eweb_view.h" + +WebContentsViewEflDelegateEwk::WebContentsViewEflDelegateEwk(EWebView* wv) + : web_view_(wv) { +} + +void WebContentsViewEflDelegateEwk::ShowPopupMenu( + content::RenderFrameHost* render_frame_host, + const gfx::Rect& bounds, + int item_height, + double item_font_size, + int selected_item, + const std::vector& items, + bool right_aligned, + bool allow_multiple_selection) { + web_view_->ShowPopupMenu(items, selected_item, allow_multiple_selection); +} + +void WebContentsViewEflDelegateEwk::HidePopupMenu() { + web_view_->HidePopupMenu(); +} + +void WebContentsViewEflDelegateEwk::SetPageTitle(const base::string16& title) { + web_view_->SmartCallback(). + call(base::UTF16ToUTF8(title).c_str()); +} diff --git a/tizen_src/ewk/efl_integration/web_contents_view_efl_delegate_ewk.h b/tizen_src/ewk/efl_integration/web_contents_view_efl_delegate_ewk.h new file mode 100644 index 0000000..7c49cb46 --- /dev/null +++ b/tizen_src/ewk/efl_integration/web_contents_view_efl_delegate_ewk.h @@ -0,0 +1,41 @@ +// Copyright 2015 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef WEB_CONTENTS_VIEW_EFL_DELEGATE_EWK +#define WEB_CONTENTS_VIEW_EFL_DELEGATE_EWK + +#include "content/public/browser/web_contents_view_efl_delegate.h" + +#include "content/public/common/menu_item.h" + +class EWebView; + +namespace content { +class RenderFrameHost; +} + +class WebContentsViewEflDelegateEwk + : public content::WebContentsViewEflDelegate { + public: + WebContentsViewEflDelegateEwk(EWebView*); + + void ShowPopupMenu( + content::RenderFrameHost* render_frame_host, + const gfx::Rect& bounds, + int item_height, + double item_font_size, + int selected_item, + const std::vector& items, + bool right_aligned, + bool allow_multiple_selection) override; + void HidePopupMenu() override; + + void SetPageTitle(const base::string16& title) override; + + private: + EWebView* web_view_; +}; + +#endif // WEB_CONTENTS_VIEW_EFL_DELEGATE_EWK +