Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1929)

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 2240553003: Track text selection on the browser side (Mac) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added #ifdef Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_view_aura.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 39f5cbc36e54d8cfa728bfb39381e35bbb3e7907..de8c32fac88ecae2fa2b3b8418cacb2708d7adde 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -3020,41 +3020,27 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged(
if (!GetTextInputManager())
return;
- const TextInputManager::TextSelection* text_selection = nullptr;
- if (is_guest_view_hack_) {
- // We obtain the TextSelection from focused RWH which is obtained from the
- // frame tree. BrowserPlugin-based guests' RWH is not part of the frame tree
- // and the focused RWH will be that of the embedder which is incorrect. In
- // this case we should use TextSelection for |this| since RWHV for guest
- // forwards text selection information to its platform view.
- text_selection = GetTextInputManager()->GetTextSelection(this);
- } else {
- RenderWidgetHostImpl* focused_widget =
- host_->delegate()->GetFocusedRenderWidgetHost(host_);
- if (!!focused_widget && !!focused_widget->GetView()) {
- text_selection = GetTextInputManager()->GetTextSelection(
- focused_widget->GetView());
- }
- }
-
- if (!text_selection)
+ // We obtain the TextSelection from focused RWH which is obtained from the
+ // frame tree. BrowserPlugin-based guests' RWH is not part of the frame tree
+ // and the focused RWH will be that of the embedder which is incorrect. In
+ // this case we should use TextSelection for |this| since RWHV for guest
+ // forwards text selection information to its platform view.
+ RenderWidgetHostViewBase* focused_view =
+ is_guest_view_hack_ ? this : GetFocusedWidget()
+ ? GetFocusedWidget()->GetView()
+ : nullptr;
+
+ if (!focused_view)
return;
- if (text_selection->text.empty() || text_selection->range.is_empty())
- return;
- size_t pos = text_selection->range.GetMin() - text_selection->offset;
- size_t n = text_selection->range.length();
-
- DCHECK(pos + n <= text_selection->text.length())
- << "The text can not fully cover range.";
- if (pos >= text_selection->text.length()) {
- NOTREACHED() << "The text can not cover range.";
- return;
+ base::string16 selected_text;
+ if (GetTextInputManager()
+ ->GetTextSelection(focused_view)
+ ->GetSelectedText(&selected_text)) {
+ // Set the CLIPBOARD_TYPE_SELECTION to the ui::Clipboard.
+ ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_SELECTION);
+ clipboard_writer.WriteText(selected_text);
}
-
- // Set the CLIPBOARD_TYPE_SELECTION to the ui::Clipboard.
- ui::ScopedClipboardWriter clipboard_writer(ui::CLIPBOARD_TYPE_SELECTION);
- clipboard_writer.WriteText(text_selection->text.substr(pos, n));
#endif // defined(USE_X11) && !defined(OS_CHROMEOS)
}

Powered by Google App Engine
This is Rietveld 408576698