Index: third_party/WebKit/Source/core/editing/SelectionController.cpp |
diff --git a/third_party/WebKit/Source/core/editing/SelectionController.cpp b/third_party/WebKit/Source/core/editing/SelectionController.cpp |
index 5c0399a18c0e52f2789c6235cd3dbe11c0c762f7..85273a90b4bb692c62589306d62371ea719b9bbf 100644 |
--- a/third_party/WebKit/Source/core/editing/SelectionController.cpp |
+++ b/third_party/WebKit/Source/core/editing/SelectionController.cpp |
@@ -41,12 +41,14 @@ |
#include "core/frame/LocalFrame.h" |
#include "core/frame/LocalFrameView.h" |
#include "core/frame/Settings.h" |
+#include "core/input/EventHandler.h" |
#include "core/layout/LayoutView.h" |
#include "core/layout/api/LayoutViewItem.h" |
#include "core/page/FocusController.h" |
#include "core/page/Page.h" |
#include "platform/RuntimeEnabledFeatures.h" |
#include "platform/wtf/AutoReset.h" |
+#include "public/web/WebMenuSourceType.h" |
namespace blink { |
SelectionController* SelectionController::Create(LocalFrame& frame) { |
@@ -191,9 +193,14 @@ bool SelectionController::HandleSingleClick( |
return false; |
if (!this->Selection().IsHandleVisible()) { |
- UpdateSelectionForMouseDownDispatchingSelectStart( |
- inner_node, selection, kCharacterGranularity, |
- HandleVisibility::kVisible); |
+ const bool did_select = |
+ UpdateSelectionForMouseDownDispatchingSelectStart( |
+ inner_node, selection, kCharacterGranularity, |
+ HandleVisibility::kVisible); |
+ if (did_select) { |
+ frame_->GetEventHandler().ShowNonLocatedContextMenu(nullptr, |
+ kMenuSourceTouch); |
+ } |
return false; |
} |
} |
@@ -551,10 +558,10 @@ void SelectionController::SelectClosestMisspellingFromHitTestResult( |
kWordGranularity, HandleVisibility::kNotVisible); |
} |
-void SelectionController::SelectClosestWordFromMouseEvent( |
+bool SelectionController::SelectClosestWordFromMouseEvent( |
const MouseEventWithHitTestResults& result) { |
if (!mouse_down_may_start_select_) |
- return; |
+ return false; |
AppendTrailingWhitespace append_trailing_whitespace = |
(result.Event().click_count == 2 && |
@@ -564,7 +571,7 @@ void SelectionController::SelectClosestWordFromMouseEvent( |
DCHECK(!frame_->GetDocument()->NeedsLayoutTreeUpdate()); |
- SelectClosestWordFromHitTestResult( |
+ return SelectClosestWordFromHitTestResult( |
result.GetHitTestResult(), append_trailing_whitespace, |
result.Event().FromTouch() ? SelectInputEventType::kTouch |
: SelectInputEventType::kMouse); |
@@ -585,8 +592,10 @@ void SelectionController::SelectClosestMisspellingFromMouseEvent( |
void SelectionController::SelectClosestWordOrLinkFromMouseEvent( |
const MouseEventWithHitTestResults& result) { |
- if (!result.GetHitTestResult().IsLiveLink()) |
- return SelectClosestWordFromMouseEvent(result); |
+ if (!result.GetHitTestResult().IsLiveLink()) { |
+ SelectClosestWordFromMouseEvent(result); |
+ return; |
+ } |
Node* inner_node = result.InnerNode(); |
@@ -771,7 +780,11 @@ bool SelectionController::HandleDoubleClick( |
// from setting caret selection. |
selection_state_ = SelectionState::kExtendedSelection; |
} else { |
- SelectClosestWordFromMouseEvent(event); |
+ const bool did_select = SelectClosestWordFromMouseEvent(event); |
+ if (did_select && Selection().IsHandleVisible()) { |
+ frame_->GetEventHandler().ShowNonLocatedContextMenu(nullptr, |
+ kMenuSourceTouch); |
+ } |
} |
return true; |
} |
@@ -811,12 +824,20 @@ bool SelectionController::HandleTripleClick( |
const bool is_handle_visible = |
event.Event().FromTouch() && new_selection.IsRange(); |
- return UpdateSelectionForMouseDownDispatchingSelectStart( |
+ const bool did_select = UpdateSelectionForMouseDownDispatchingSelectStart( |
inner_node, |
ExpandSelectionToRespectUserSelectAll(inner_node, new_selection), |
kParagraphGranularity, |
is_handle_visible ? HandleVisibility::kVisible |
: HandleVisibility::kNotVisible); |
+ if (!did_select) |
+ return false; |
+ |
+ if (Selection().IsHandleVisible()) { |
+ frame_->GetEventHandler().ShowNonLocatedContextMenu(nullptr, |
+ kMenuSourceTouch); |
+ } |
+ return true; |
} |
bool SelectionController::HandleMousePressEvent( |