[dev/m42][uBrowser]Select picker doesn't work
authorAntonio Gomes <a1.gomes@samsung.com>
Mon, 27 Apr 2015 02:28:28 +0000 (19:28 -0700)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 06:57:09 +0000 (06:57 +0000)
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

tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc

index ec51a1d..e6ca863 100644 (file)
@@ -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<int>& selected_indices) {
-#if !defined(EWK_BRINGUP)
   RenderFrameImpl* render_frame_impl_ = static_cast<RenderFrameImpl*>(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() {