| Index: content/browser/renderer_host/render_widget_host_view_android.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| index 007cbf693f34e5f7c77b8e759b7ffff8be615149..c15fb3cc8af83145ca7b69a342f8e98ed5b04f1f 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| @@ -43,6 +43,7 @@
|
| #include "content/browser/android/content_view_core_impl.h"
|
| #include "content/browser/android/ime_adapter_android.h"
|
| #include "content/browser/android/overscroll_controller_android.h"
|
| +#include "content/browser/android/selection_popup_controller.h"
|
| #include "content/browser/android/synchronous_compositor_host.h"
|
| #include "content/browser/compositor/surface_utils.h"
|
| #include "content/browser/devtools/render_frame_devtools_agent_host.h"
|
| @@ -759,7 +760,7 @@ void RenderWidgetHostViewAndroid::OnTextSelectionChanged(
|
| if (is_in_vr_)
|
| return;
|
|
|
| - if (!content_view_core_)
|
| + if (!selection_popup_controller_)
|
| return;
|
|
|
| RenderWidgetHostImpl* focused_widget = GetFocusedWidget();
|
| @@ -769,7 +770,7 @@ void RenderWidgetHostViewAndroid::OnTextSelectionChanged(
|
| const TextInputManager::TextSelection& selection =
|
| *text_input_manager_->GetTextSelection(focused_widget->GetView());
|
|
|
| - content_view_core_->OnSelectionChanged(
|
| + selection_popup_controller_->OnSelectionChanged(
|
| base::UTF16ToUTF8(selection.selected_text()));
|
| }
|
|
|
| @@ -918,8 +919,8 @@ bool RenderWidgetHostViewAndroid::OnTouchEvent(
|
| // If a browser-based widget consumes the touch event, it's critical that
|
| // touch event interception be disabled. This avoids issues with
|
| // double-handling for embedder-detected gestures like side swipe.
|
| - if (selection_controller_ &&
|
| - selection_controller_->WillHandleTouchEvent(event)) {
|
| + if (touch_selection_controller_ &&
|
| + touch_selection_controller_->WillHandleTouchEvent(event)) {
|
| RequestDisallowInterceptTouchEvent();
|
| return true;
|
| }
|
| @@ -958,8 +959,8 @@ bool RenderWidgetHostViewAndroid::OnTouchEvent(
|
|
|
| bool RenderWidgetHostViewAndroid::OnTouchHandleEvent(
|
| const ui::MotionEvent& event) {
|
| - return selection_controller_ &&
|
| - selection_controller_->WillHandleTouchEvent(event);
|
| + return touch_selection_controller_ &&
|
| + touch_selection_controller_->WillHandleTouchEvent(event);
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::ResetGestureDetection() {
|
| @@ -1270,8 +1271,9 @@ void RenderWidgetHostViewAndroid::SelectBetweenCoordinates(
|
|
|
| void RenderWidgetHostViewAndroid::OnSelectionEvent(
|
| ui::SelectionEventType event) {
|
| - DCHECK(content_view_core_);
|
| - DCHECK(selection_controller_);
|
| + DCHECK(touch_selection_controller_);
|
| + if (!selection_popup_controller_)
|
| + return;
|
| // If a selection drag has started, it has taken over the active touch
|
| // sequence. Immediately cancel gesture detection and any downstream touch
|
| // listeners (e.g., web content) to communicate this transfer.
|
| @@ -1279,9 +1281,9 @@ void RenderWidgetHostViewAndroid::OnSelectionEvent(
|
| gesture_provider_.GetCurrentDownEvent()) {
|
| ResetGestureDetection();
|
| }
|
| - content_view_core_->OnSelectionEvent(
|
| - event, selection_controller_->GetStartPosition(),
|
| - GetSelectionRect(*selection_controller_));
|
| + selection_popup_controller_->OnSelectionEvent(
|
| + event, touch_selection_controller_->GetStartPosition(),
|
| + GetSelectionRect(*touch_selection_controller_));
|
| }
|
|
|
| std::unique_ptr<ui::TouchHandleDrawable>
|
| @@ -1352,8 +1354,8 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
|
| if (overscroll_controller_)
|
| overscroll_controller_->OnFrameMetadataUpdated(frame_metadata);
|
|
|
| - if (selection_controller_) {
|
| - selection_controller_->OnSelectionBoundsChanged(
|
| + if (touch_selection_controller_) {
|
| + touch_selection_controller_->OnSelectionBoundsChanged(
|
| frame_metadata.selection.start, frame_metadata.selection.end);
|
|
|
| // Set parameters for adaptive handle orientation.
|
| @@ -1362,7 +1364,7 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
|
| gfx::RectF viewport_rect(0.0f, frame_metadata.top_controls_height *
|
| frame_metadata.top_controls_shown_ratio,
|
| viewport_size.width(), viewport_size.height());
|
| - selection_controller_->OnViewportChanged(viewport_rect);
|
| + touch_selection_controller_->OnViewportChanged(viewport_rect);
|
| }
|
|
|
| UpdateBackgroundColor(is_transparent ? SK_ColorTRANSPARENT
|
| @@ -1571,8 +1573,8 @@ bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
|
| needs_animate |= overscroll_controller_->Animate(
|
| frame_time, content_view_core_->GetViewAndroid()->GetLayer());
|
| }
|
| - if (selection_controller_)
|
| - needs_animate |= selection_controller_->Animate(frame_time);
|
| + if (touch_selection_controller_)
|
| + needs_animate |= touch_selection_controller_->Animate(frame_time);
|
| return needs_animate;
|
| }
|
|
|
| @@ -1616,26 +1618,26 @@ void RenderWidgetHostViewAndroid::GestureEventAck(
|
|
|
| InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent(
|
| const blink::WebInputEvent& input_event) {
|
| - if (selection_controller_ &&
|
| + if (touch_selection_controller_ &&
|
| blink::WebInputEvent::isGestureEventType(input_event.type())) {
|
| const blink::WebGestureEvent& gesture_event =
|
| static_cast<const blink::WebGestureEvent&>(input_event);
|
| switch (gesture_event.type()) {
|
| case blink::WebInputEvent::GestureLongPress:
|
| - selection_controller_->HandleLongPressEvent(
|
| + touch_selection_controller_->HandleLongPressEvent(
|
| base::TimeTicks() +
|
| - base::TimeDelta::FromSecondsD(input_event.timeStampSeconds()),
|
| + base::TimeDelta::FromSecondsD(input_event.timeStampSeconds()),
|
| gfx::PointF(gesture_event.x, gesture_event.y));
|
| break;
|
|
|
| case blink::WebInputEvent::GestureTap:
|
| - selection_controller_->HandleTapEvent(
|
| + touch_selection_controller_->HandleTapEvent(
|
| gfx::PointF(gesture_event.x, gesture_event.y),
|
| gesture_event.data.tap.tapCount);
|
| break;
|
|
|
| case blink::WebInputEvent::GestureScrollBegin:
|
| - selection_controller_->OnScrollBeginEvent();
|
| + touch_selection_controller_->OnScrollBeginEvent();
|
| break;
|
|
|
| default:
|
| @@ -1802,13 +1804,13 @@ void RenderWidgetHostViewAndroid::ShowContextMenuAtPoint(
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::DismissTextHandles() {
|
| - if (selection_controller_)
|
| - selection_controller_->HideAndDisallowShowingAutomatically();
|
| + if (touch_selection_controller_)
|
| + touch_selection_controller_->HideAndDisallowShowingAutomatically();
|
| }
|
|
|
| void RenderWidgetHostViewAndroid::SetTextHandlesTemporarilyHidden(bool hidden) {
|
| - if (selection_controller_)
|
| - selection_controller_->SetTemporarilyHidden(hidden);
|
| + if (touch_selection_controller_)
|
| + touch_selection_controller_->SetTemporarilyHidden(hidden);
|
| }
|
|
|
| SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
|
| @@ -1855,7 +1857,7 @@ void RenderWidgetHostViewAndroid::SetContentViewCore(
|
|
|
| bool resize = false;
|
| if (content_view_core != content_view_core_) {
|
| - selection_controller_.reset();
|
| + touch_selection_controller_.reset();
|
| RunAckCallbacks();
|
| // TODO(yusufo) : Get rid of the below conditions and have a better handling
|
| // for resizing after crbug.com/628302 is handled.
|
| @@ -1899,8 +1901,9 @@ void RenderWidgetHostViewAndroid::SetContentViewCore(
|
| if (resize)
|
| WasResized();
|
|
|
| - if (!selection_controller_)
|
| - selection_controller_ = CreateSelectionController(this, content_view_core_);
|
| + if (!touch_selection_controller_)
|
| + touch_selection_controller_ =
|
| + CreateSelectionController(this, content_view_core_);
|
|
|
| if (content_view_core_)
|
| CreateOverscrollControllerIfPossible();
|
|
|