[M108 Migration][API] Fix ewk_view_text_selection_text_get API 68/286568/2
authorBakka Uday Kiran <b.kiran@samsung.com>
Tue, 10 Jan 2023 04:10:48 +0000 (09:40 +0530)
committerBot Blink <blinkbot@samsung.com>
Tue, 10 Jan 2023 06:19:31 +0000 (06:19 +0000)
It enables sync for text selected by javascript
and proper functionality of ewk_view_text_selection_text_get API.

Reference:
https://review.tizen.org/gerrit/274241

Change-Id: Iec4996ec1f6adb79cb12bacb7863f30d7c34f15a
Signed-off-by: Bakka Uday Kiran <b.kiran@samsung.com>
content/renderer/render_frame_impl.cc
tizen_src/ewk/efl_integration/eweb_view.cc
tizen_src/ewk/efl_integration/eweb_view.h
tizen_src/ewk/efl_integration/public/ewk_view.cc

index d7f19a4..e8d27f6 100644 (file)
@@ -4100,10 +4100,17 @@ void RenderFrameImpl::AbortClientNavigation() {
 
 void RenderFrameImpl::DidChangeSelection(bool is_empty_selection,
                                          blink::SyncCondition force_sync) {
+#if !BUILDFLAG(IS_EFL)
+  // In EFL/TIZEN, application can get selection text in RWHVBase by using
+  // ewk_view_text_selection_text_get(). But selected text by javascript
+  // doesn't synced because of below condition. To support API properly
+  // we should sync selection information regardless of below condition.
+  // Additionally, when selecting text via context menu by pressing "Select"
+  // menu item, selection has to be sync'ed regardless of the conditions below.
   if (!GetLocalRootWebFrameWidget()->HandlingInputEvent() &&
       !GetLocalRootWebFrameWidget()->HandlingSelectRange())
     return;
-
+#endif
   if (is_empty_selection)
     selection_text_.clear();
 
index 246670d..cd892ab 100644 (file)
@@ -823,15 +823,12 @@ const char* EWebView::GetUserAgentAppName() const {
   return user_agent_app_name_.c_str();
 }
 
-const char* EWebView::GetSelectedText() const {
-#if !defined(USE_AURA)
-  if (!rwhv())
+const char* EWebView::CacheSelectedText() {
+  if (!rwhva())
     return "";
 
-  return base::UTF16ToUTF8(rwhv()->GetSelectedText()).c_str();
-#else
-  return "";
-#endif
+  selected_text_cached_ = base::UTF16ToUTF8(rwhva()->GetSelectedText());
+  return selected_text_cached_.c_str();
 }
 
 _Ewk_Frame* EWebView::GetMainFrame() {
index e8a014f..9cd498f 100644 (file)
@@ -242,7 +242,7 @@ class EWebView {
   bool GetPrivateBrowsing() const;
   const char* GetUserAgent() const;
   const char* GetUserAgentAppName() const;
-  const char* GetSelectedText() const;
+  const char* CacheSelectedText();
   Ewk_Settings* GetSettings() { return settings_.get(); }
   _Ewk_Frame* GetMainFrame();
   void UpdateWebKitPreferences();
@@ -550,6 +550,7 @@ class EWebView {
   mutable std::string user_agent_;
   mutable std::string user_agent_app_name_;
   std::unique_ptr<_Ewk_Auth_Challenge> auth_challenge_;
+  std::string selected_text_cached_;
 
   Eina_List* popupMenuItems_;
   Popup_Picker* popupPicker_;
index c1cff32..7094600 100644 (file)
@@ -728,7 +728,7 @@ Eina_Bool ewk_view_text_selection_clear(Evas_Object *view)
 const char* ewk_view_text_selection_text_get(Evas_Object* view)
 {
   EWK_VIEW_IMPL_GET_OR_RETURN(view, impl, NULL);
-  return impl->GetSelectedText();
+  return impl->CacheSelectedText();
 }
 
 void ewk_view_focused_input_element_value_set(Evas_Object* ewkView, const char* value)