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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_base.cc

Issue 2130133004: Tracking text selection on the browser side in OOPIF. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added an interactive ui test Created 4 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_base.h" 5 #include "content/browser/renderer_host/render_widget_host_view_base.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "content/browser/accessibility/browser_accessibility_manager.h" 9 #include "content/browser/accessibility/browser_accessibility_manager.h"
10 #include "content/browser/gpu/gpu_data_manager_impl.h" 10 #include "content/browser/gpu/gpu_data_manager_impl.h"
(...skipping 18 matching lines...) Expand all
29 // How many microseconds apart input events should be flushed. 29 // How many microseconds apart input events should be flushed.
30 const int kFlushInputRateInUs = 16666; 30 const int kFlushInputRateInUs = 16666;
31 31
32 } 32 }
33 33
34 RenderWidgetHostViewBase::RenderWidgetHostViewBase() 34 RenderWidgetHostViewBase::RenderWidgetHostViewBase()
35 : popup_type_(blink::WebPopupTypeNone), 35 : popup_type_(blink::WebPopupTypeNone),
36 background_color_(SK_ColorWHITE), 36 background_color_(SK_ColorWHITE),
37 mouse_locked_(false), 37 mouse_locked_(false),
38 showing_context_menu_(false), 38 showing_context_menu_(false),
39 #if !defined(USE_AURA)
39 selection_text_offset_(0), 40 selection_text_offset_(0),
40 selection_range_(gfx::Range::InvalidRange()), 41 selection_range_(gfx::Range::InvalidRange()),
42 #endif
41 current_device_scale_factor_(0), 43 current_device_scale_factor_(0),
42 current_display_rotation_(display::Display::ROTATE_0), 44 current_display_rotation_(display::Display::ROTATE_0),
43 pinch_zoom_enabled_(content::IsPinchToZoomEnabled()), 45 pinch_zoom_enabled_(content::IsPinchToZoomEnabled()),
44 text_input_manager_(nullptr), 46 text_input_manager_(nullptr),
45 renderer_frame_number_(0), 47 renderer_frame_number_(0),
46 weak_factory_(this) {} 48 weak_factory_(this) {
49 }
47 50
48 RenderWidgetHostViewBase::~RenderWidgetHostViewBase() { 51 RenderWidgetHostViewBase::~RenderWidgetHostViewBase() {
49 DCHECK(!mouse_locked_); 52 DCHECK(!mouse_locked_);
50 // We call this here to guarantee that observers are notified before we go 53 // We call this here to guarantee that observers are notified before we go
51 // away. However, some subclasses may wish to call this earlier in their 54 // away. However, some subclasses may wish to call this earlier in their
52 // shutdown process, e.g. to force removal from 55 // shutdown process, e.g. to force removal from
53 // RenderWidgetHostInputEventRouter's surface map before relinquishing a 56 // RenderWidgetHostInputEventRouter's surface map before relinquishing a
54 // host pointer, as in RenderWidgetHostViewGuest. There is no harm in calling 57 // host pointer, as in RenderWidgetHostViewGuest. There is no harm in calling
55 // NotifyObserversAboutShutdown() twice, as the observers are required to 58 // NotifyObserversAboutShutdown() twice, as the observers are required to
56 // de-register on the first call, and so the second call does nothing. 59 // de-register on the first call, and so the second call does nothing.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 107
105 void RenderWidgetHostViewBase::SelectionBoundsChanged( 108 void RenderWidgetHostViewBase::SelectionBoundsChanged(
106 const ViewHostMsg_SelectionBounds_Params& params) { 109 const ViewHostMsg_SelectionBounds_Params& params) {
107 if (GetTextInputManager()) 110 if (GetTextInputManager())
108 GetTextInputManager()->SelectionBoundsChanged(this, params); 111 GetTextInputManager()->SelectionBoundsChanged(this, params);
109 } 112 }
110 113
111 void RenderWidgetHostViewBase::SelectionChanged(const base::string16& text, 114 void RenderWidgetHostViewBase::SelectionChanged(const base::string16& text,
112 size_t offset, 115 size_t offset,
113 const gfx::Range& range) { 116 const gfx::Range& range) {
117 #if defined(USE_AURA)
kenrb 2016/07/12 19:15:25 Shouldn't the SelectionChanged() override in Rende
EhsanK 2016/07/12 19:33:48 Yes, definitely. Sorry it was missing in this patc
118 if (GetTextInputManager())
119 GetTextInputManager()->SelectionChanged(this, text, offset, range);
120 #else
114 selection_text_ = text; 121 selection_text_ = text;
115 selection_text_offset_ = offset; 122 selection_text_offset_ = offset;
116 selection_range_.set_start(range.start()); 123 selection_range_.set_start(range.start());
117 selection_range_.set_end(range.end()); 124 selection_range_.set_end(range.end());
125 #endif
118 } 126 }
119 127
120 gfx::Size RenderWidgetHostViewBase::GetRequestedRendererSize() const { 128 gfx::Size RenderWidgetHostViewBase::GetRequestedRendererSize() const {
121 return GetViewBounds().size(); 129 return GetViewBounds().size();
122 } 130 }
123 131
124 ui::TextInputClient* RenderWidgetHostViewBase::GetTextInputClient() { 132 ui::TextInputClient* RenderWidgetHostViewBase::GetTextInputClient() {
125 NOTREACHED(); 133 NOTREACHED();
126 return NULL; 134 return NULL;
127 } 135 }
128 136
129 bool RenderWidgetHostViewBase::IsShowingContextMenu() const { 137 bool RenderWidgetHostViewBase::IsShowingContextMenu() const {
130 return showing_context_menu_; 138 return showing_context_menu_;
131 } 139 }
132 140
133 void RenderWidgetHostViewBase::SetShowingContextMenu(bool showing) { 141 void RenderWidgetHostViewBase::SetShowingContextMenu(bool showing) {
134 DCHECK_NE(showing_context_menu_, showing); 142 DCHECK_NE(showing_context_menu_, showing);
135 showing_context_menu_ = showing; 143 showing_context_menu_ = showing;
136 } 144 }
137 145
138 base::string16 RenderWidgetHostViewBase::GetSelectedText() const { 146 base::string16 RenderWidgetHostViewBase::GetSelectedText() const {
147 #if defined(USE_AURA)
148 return const_cast<RenderWidgetHostViewBase*>(this)
149 ->GetSelectedTextFromTextInputManager();
150 #else
139 if (!selection_range_.IsValid()) 151 if (!selection_range_.IsValid())
140 return base::string16(); 152 return base::string16();
141 return selection_text_.substr( 153 return selection_text_.substr(
142 selection_range_.GetMin() - selection_text_offset_, 154 selection_range_.GetMin() - selection_text_offset_,
143 selection_range_.length()); 155 selection_range_.length());
156 #endif
144 } 157 }
145 158
146 bool RenderWidgetHostViewBase::IsMouseLocked() { 159 bool RenderWidgetHostViewBase::IsMouseLocked() {
147 return mouse_locked_; 160 return mouse_locked_;
148 } 161 }
149 162
150 InputEventAckState RenderWidgetHostViewBase::FilterInputEvent( 163 InputEventAckState RenderWidgetHostViewBase::FilterInputEvent(
151 const blink::WebInputEvent& input_event) { 164 const blink::WebInputEvent& input_event) {
152 // By default, input events are simply forwarded to the renderer. 165 // By default, input events are simply forwarded to the renderer.
153 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 166 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 298
286 void RenderWidgetHostViewBase::FlushInput() { 299 void RenderWidgetHostViewBase::FlushInput() {
287 RenderWidgetHostImpl* impl = NULL; 300 RenderWidgetHostImpl* impl = NULL;
288 if (GetRenderWidgetHost()) 301 if (GetRenderWidgetHost())
289 impl = RenderWidgetHostImpl::From(GetRenderWidgetHost()); 302 impl = RenderWidgetHostImpl::From(GetRenderWidgetHost());
290 if (!impl) 303 if (!impl)
291 return; 304 return;
292 impl->FlushInput(); 305 impl->FlushInput();
293 } 306 }
294 307
308 base::string16 RenderWidgetHostViewBase::GetSelectedTextFromTextInputManager() {
309 if (!GetTextInputManager())
310 return base::string16();
311
312 const TextInputManager::TextSelection* selection =
313 GetTextInputManager()->GetTextSelection(this);
314
315 if (!selection || !selection->range.IsValid())
316 return base::string16();
317
318 return selection->text.substr(selection->range.GetMin() - selection->offset,
319 selection->range.length());
320 }
321
295 void RenderWidgetHostViewBase::OnTextSurroundingSelectionResponse( 322 void RenderWidgetHostViewBase::OnTextSurroundingSelectionResponse(
296 const base::string16& content, 323 const base::string16& content,
297 size_t start_offset, 324 size_t start_offset,
298 size_t end_offset) { 325 size_t end_offset) {
299 NOTIMPLEMENTED(); 326 NOTIMPLEMENTED();
300 } 327 }
301 328
302 void RenderWidgetHostViewBase::ShowDisambiguationPopup( 329 void RenderWidgetHostViewBase::ShowDisambiguationPopup(
303 const gfx::Rect& rect_pixels, 330 const gfx::Rect& rect_pixels,
304 const SkBitmap& zoomed_bitmap) { 331 const SkBitmap& zoomed_bitmap) {
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 481
455 bool RenderWidgetHostViewBase::IsChildFrameForTesting() const { 482 bool RenderWidgetHostViewBase::IsChildFrameForTesting() const {
456 return false; 483 return false;
457 } 484 }
458 485
459 cc::SurfaceId RenderWidgetHostViewBase::SurfaceIdForTesting() const { 486 cc::SurfaceId RenderWidgetHostViewBase::SurfaceIdForTesting() const {
460 return cc::SurfaceId(); 487 return cc::SurfaceId();
461 } 488 }
462 489
463 } // namespace content 490 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698