From 4cf2d5bfb5164aa09fcd2536b90785a89138ad0c Mon Sep 17 00:00:00 2001 From: Antonio Gomes Date: Sun, 26 Apr 2015 19:28:28 -0700 Subject: [PATCH] [dev/m42][uBrowser]Select picker doesn't work In RenderFrameImpl::OnSelectPopupMenuItems, 'external_popup_menu' is reset when an item is selected. This is not how the Tizen browser is supposed to behave: due to compatibility reasons with webkit browser (kiran), chromium-efl only close the popup when user actually dismisses it (by either pressing "DONE" or back button). Thus, the custom behavior is implemented on RenderFrameObserverEfl::OnSelectPopupMenuItems. Patch fixes our select implement by making use of a hack: in order to have access to RenderFrameImpl::external_popup_menu_ it "defines" private as public before including the associated header. This works because RenderFrameObserver (the base class) is declared as 'friend' to RenderFrameImpl. Thus we get access to its private members. Associated EWK_BRINGUP macros are also removed. Bug: http://107.108.218.239/bugzilla/show_bug.cgi?id=12720 Change-Id: I3f2384d79da5ea7e5a2d3d696527aa19cc7d700d --- .../ewk/efl_integration/renderer/render_frame_observer_efl.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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 ec51a1d..e6ca863 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 @@ -7,7 +7,13 @@ #include "content/common/frame_messages.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_view.h" +// RenderFrameImpl declares itself as a friend class to +// RenderFrameObserver. In order to access private members of +// the former from a descendant class of RenderFrameObserver, +// we define redefine "private" while including the associated header. +#define private public #include "content/renderer/render_frame_impl.h" +#undef private #include "content/renderer/external_popup_menu.h" #include "common/render_messages_ewk.h" #include "third_party/WebKit/public/web/WebDocument.h" @@ -73,9 +79,8 @@ bool RenderFrameObserverEfl::OnMessageReceived(const IPC::Message& message) { void RenderFrameObserverEfl::OnSelectPopupMenuItems( bool canceled, const std::vector& selected_indices) { -#if !defined(EWK_BRINGUP) RenderFrameImpl* render_frame_impl_ = static_cast(render_frame()); - ExternalPopupMenu* external_popup_menu_ = render_frame_impl_->GetExternalPopupMenu(); + ExternalPopupMenu* external_popup_menu_ = render_frame_impl_->external_popup_menu_.get(); if (external_popup_menu_ == NULL) return; // It is possible to receive more than one of these calls if the user presses @@ -86,7 +91,6 @@ void RenderFrameObserverEfl::OnSelectPopupMenuItems( external_popup_menu_->DidSelectItems(canceled, selected_indices); if (canceled) render_frame_impl_->DidHideExternalPopupMenu(); -#endif } void RenderFrameObserverEfl::OnClosePopupMenu() { -- 2.7.4