Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index bb881cbbd0bdf2581d61e758bd9e8c9974b8a082..bdf5e2ab76d66a3782e9cc88a0ffd43d98adbe70 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -1357,6 +1357,8 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { |
OnReleaseDisambiguationPopupBitmap) |
IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw) |
IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret) |
+ IPC_MESSAGE_HANDLER(ViewMsg_ExpandSelectionByCharacterOffset, |
+ OnExpandSelectionByCharacterOffset) |
#if defined(OS_ANDROID) |
IPC_MESSAGE_HANDLER(InputMsg_ActivateNearestFindResult, |
OnActivateNearestFindResult) |
@@ -1393,6 +1395,25 @@ void RenderViewImpl::OnSelectWordAroundCaret() { |
handling_input_event_ = false; |
} |
+void RenderViewImpl::OnExpandSelectionByCharacterOffset(int start_adjust, |
+ int end_adjust) { |
+ if (!webview()) |
+ return; |
+ |
+ handling_input_event_ = true; |
+ size_t start, length; |
+ if (webview()->caretOrSelectionRange(&start, &length)) { |
+ start -= start_adjust; |
+ length += end_adjust + start_adjust; |
+ WebLocalFrame* web_local_frame = |
+ webview()->focusedFrame()->toWebLocalFrame(); |
+ web_local_frame->selectRange(WebRange::fromDocumentRange(web_local_frame, |
+ start, |
+ length)); |
+ } |
+ handling_input_event_ = false; |
+} |
+ |
void RenderViewImpl::OnCopyImageAt(int x, int y) { |
webview()->copyImageAt(WebPoint(x, y)); |
} |