Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 50795297 authored by Carmelo Messina's avatar Carmelo Messina
Browse files

Experimental support for extensions on Android: fix dangling raw_ptr on popup...

Experimental support for extensions on Android: fix dangling raw_ptr on popup controller (#256 #2511)
parent 65d7b348
Loading
Loading
Loading
Loading
+52 −1
Original line number Diff line number Diff line
@@ -137,11 +137,14 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
 .../installable/installable_icon_fetcher.cc   |  6 +-
 .../installable/installable_icon_fetcher.h    |  2 +-
 .../version/resources/about_version.html      |  2 +-
 .../selection/selection_popup_controller.cc   |  5 ++
 .../selection/selection_popup_controller.h    |  1 +
 content/browser/browser_main_loop.cc          |  2 +-
 .../media/video_capture_manager.cc            |  4 +-
 .../media/video_capture_manager.h             |  6 +-
 .../render_widget_host_view_android.cc        |  2 +-
 .../browser/ContentUiEventHandler.java        |  7 +-
 .../SelectionPopupControllerImpl.java         |  5 ++
 content/public/common/content_features.cc     |  2 +-
 .../render_frame_media_playback_options.cc    |  2 +-
 .../about_flags_cc/Extensions-Android.inc     | 12 ++++
@@ -180,7 +183,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
 ui/webui/resources/cr_elements/BUILD.gn       |  2 +-
 .../cr_elements/cr_toolbar/cr_toolbar.css     |  6 ++
 ui/webui/resources/css/BUILD.gn               |  2 +-
 168 files changed, 585 insertions(+), 305 deletions(-)
 171 files changed, 596 insertions(+), 305 deletions(-)
 create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Enable-extensions-Android.grdp
 create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Extensions-Android.grdp
 create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Extensions-Android.inc
@@ -2851,6 +2854,32 @@ diff --git a/components/webui/version/resources/about_version.html b/components/
         <tr>
           <td class="label">Desktop Android</td>
           <td class="version">true</td>
diff --git a/content/browser/android/selection/selection_popup_controller.cc b/content/browser/android/selection/selection_popup_controller.cc
--- a/content/browser/android/selection/selection_popup_controller.cc
+++ b/content/browser/android/selection/selection_popup_controller.cc
@@ -347,6 +347,11 @@ void SelectionPopupController::OnSelectAroundCaretAck(
       result->word_start_adjust, result->word_end_adjust);
 }
 
+void SelectionPopupController::DismissMenu() {
+  menu_model_bridge_.reset();
+  extra_items_menu_model_.reset();
+}
+
 void SelectionPopupController::HidePopupsAndPreserveSelection() {
   JNIEnv* env = AttachCurrentThread();
   ScopedJavaLocalRef<jobject> obj = java_obj_.get(env);
diff --git a/content/browser/android/selection/selection_popup_controller.h b/content/browser/android/selection/selection_popup_controller.h
--- a/content/browser/android/selection/selection_popup_controller.h
+++ b/content/browser/android/selection/selection_popup_controller.h
@@ -70,6 +70,7 @@ class SelectionPopupController : public RenderWidgetHostConnector {
                               int endOffset,
                               int surroundingTextLength,
                               blink::mojom::SelectAroundCaretResultPtr result);
+  void DismissMenu();
   void HidePopupsAndPreserveSelection();
   void RestoreSelectionPopupsIfNecessary();
   void ChildLocalSurfaceIdChanged();
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -2943,6 +2972,28 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Conten
         if (didOffsetEvent) event.recycle();
         return true;
     }
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
@@ -758,6 +758,9 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper
      */
     @Override
     public void finishActionMode() {
+        SelectionPopupControllerImplJni.get()
+                .dismissMenu(mNativeSelectionPopupController);
+
         mHidden = false;
         mHandler.removeCallbacks(mRepeatingHideRunnable);
 
@@ -1964,6 +1967,8 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper
 
         void setTextHandlesTemporarilyHidden(long nativeSelectionPopupController, boolean hidden);
 
+        void dismissMenu(long nativeSelectionPopupController);
+
         void setTextHandlesHiddenForDropdownMenu(
                 long nativeSelectionPopupController, boolean hidden);
 
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc