OLD | NEW |
---|---|
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/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
46 #include "third_party/WebKit/public/platform/WebString.h" | 46 #include "third_party/WebKit/public/platform/WebString.h" |
47 #include "third_party/WebKit/public/web/WebCursorInfo.h" | 47 #include "third_party/WebKit/public/web/WebCursorInfo.h" |
48 #include "third_party/WebKit/public/web/WebHelperPlugin.h" | 48 #include "third_party/WebKit/public/web/WebHelperPlugin.h" |
49 #include "third_party/WebKit/public/web/WebPagePopup.h" | 49 #include "third_party/WebKit/public/web/WebPagePopup.h" |
50 #include "third_party/WebKit/public/web/WebPopupMenu.h" | 50 #include "third_party/WebKit/public/web/WebPopupMenu.h" |
51 #include "third_party/WebKit/public/web/WebPopupMenuInfo.h" | 51 #include "third_party/WebKit/public/web/WebPopupMenuInfo.h" |
52 #include "third_party/WebKit/public/web/WebRange.h" | 52 #include "third_party/WebKit/public/web/WebRange.h" |
53 #include "third_party/WebKit/public/web/WebScreenInfo.h" | 53 #include "third_party/WebKit/public/web/WebScreenInfo.h" |
54 #include "third_party/skia/include/core/SkShader.h" | 54 #include "third_party/skia/include/core/SkShader.h" |
55 #include "ui/base/ui_base_switches.h" | 55 #include "ui/base/ui_base_switches.h" |
56 #include "ui/gfx/point.h" | 56 #include "ui/gfx/point_conversions.h" |
57 #include "ui/gfx/rect_conversions.h" | 57 #include "ui/gfx/rect_conversions.h" |
58 #include "ui/gfx/size_conversions.h" | 58 #include "ui/gfx/size_conversions.h" |
59 #include "ui/gfx/skia_util.h" | 59 #include "ui/gfx/skia_util.h" |
60 #include "ui/gl/gl_switches.h" | 60 #include "ui/gl/gl_switches.h" |
61 #include "ui/surface/transport_dib.h" | 61 #include "ui/surface/transport_dib.h" |
62 #include "webkit/renderer/compositor_bindings/web_rendering_stats_impl.h" | 62 #include "webkit/renderer/compositor_bindings/web_rendering_stats_impl.h" |
63 | 63 |
64 #if defined(OS_ANDROID) | 64 #if defined(OS_ANDROID) |
65 #include "content/renderer/android/synchronous_compositor_factory.h" | 65 #include "content/renderer/android/synchronous_compositor_factory.h" |
66 #endif | 66 #endif |
67 | 67 |
68 #if defined(OS_POSIX) | 68 #if defined(OS_POSIX) |
69 #include "ipc/ipc_channel_posix.h" | 69 #include "ipc/ipc_channel_posix.h" |
70 #include "third_party/skia/include/core/SkMallocPixelRef.h" | 70 #include "third_party/skia/include/core/SkMallocPixelRef.h" |
71 #include "third_party/skia/include/core/SkPixelRef.h" | 71 #include "third_party/skia/include/core/SkPixelRef.h" |
72 #endif // defined(OS_POSIX) | 72 #endif // defined(OS_POSIX) |
73 | 73 |
74 #include "third_party/WebKit/public/web/WebWidget.h" | 74 #include "third_party/WebKit/public/web/WebWidget.h" |
75 | 75 |
76 using WebKit::WebCompositionUnderline; | 76 using WebKit::WebCompositionUnderline; |
77 using WebKit::WebCursorInfo; | 77 using WebKit::WebCursorInfo; |
78 using WebKit::WebGestureEvent; | 78 using WebKit::WebGestureEvent; |
79 using WebKit::WebInputEvent; | 79 using WebKit::WebInputEvent; |
80 using WebKit::WebKeyboardEvent; | 80 using WebKit::WebKeyboardEvent; |
81 using WebKit::WebMouseEvent; | 81 using WebKit::WebMouseEvent; |
82 using WebKit::WebMouseWheelEvent; | |
82 using WebKit::WebNavigationPolicy; | 83 using WebKit::WebNavigationPolicy; |
83 using WebKit::WebPagePopup; | 84 using WebKit::WebPagePopup; |
84 using WebKit::WebPoint; | 85 using WebKit::WebPoint; |
85 using WebKit::WebPopupMenu; | 86 using WebKit::WebPopupMenu; |
86 using WebKit::WebPopupMenuInfo; | 87 using WebKit::WebPopupMenuInfo; |
87 using WebKit::WebPopupType; | 88 using WebKit::WebPopupType; |
88 using WebKit::WebRange; | 89 using WebKit::WebRange; |
89 using WebKit::WebRect; | 90 using WebKit::WebRect; |
90 using WebKit::WebScreenInfo; | 91 using WebKit::WebScreenInfo; |
91 using WebKit::WebSize; | 92 using WebKit::WebSize; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
179 TextInputModeMap::iterator it = singleton->Map().find(input_mode.utf8()); | 180 TextInputModeMap::iterator it = singleton->Map().find(input_mode.utf8()); |
180 if (it == singleton->Map().end()) | 181 if (it == singleton->Map().end()) |
181 return ui::TEXT_INPUT_MODE_DEFAULT; | 182 return ui::TEXT_INPUT_MODE_DEFAULT; |
182 return it->second; | 183 return it->second; |
183 } | 184 } |
184 | 185 |
185 } // namespace | 186 } // namespace |
186 | 187 |
187 namespace content { | 188 namespace content { |
188 | 189 |
190 // RenderWidget::DeviceEmulator ------------------------------------------------ | |
191 | |
192 class RenderWidget::DeviceEmulator { | |
aelias_OOO_until_Jul13
2013/09/20 07:10:14
I suggest renaming this to ScreenMetricsEmulator.
dgozman
2013/09/27 19:02:03
Done. I've left "device" in Blink API though, as "
| |
193 public: | |
194 DeviceEmulator(const gfx::Size& device_size, | |
195 const gfx::Rect& widget_rect, | |
pfeldman
2013/09/19 17:27:16
Poor indent.
dgozman
2013/09/27 19:02:03
Done.
| |
196 float device_scale_factor, | |
197 bool fit_to_view); | |
198 virtual ~DeviceEmulator(); | |
199 | |
200 base::WeakPtr<DeviceEmulator> AsWeakPtr(); | |
201 | |
202 void BeginEmulation(RenderWidget* widget); | |
aelias_OOO_until_Jul13
2013/09/20 07:10:14
If it's always the same RenderWidget, can we just
dgozman
2013/09/27 19:02:03
Done.
| |
203 void ChangeEmulationParams(RenderWidget* widget, | |
204 DeviceEmulator* params); | |
205 void EndEmulation(RenderWidget* widget); | |
206 | |
207 // The following methods alter handlers' behavior for messages related to | |
208 // widget size and position. | |
209 void OnResizeMessage(RenderWidget* widget, | |
210 const ViewMsg_Resize_Params& params); | |
211 void OnUpdateScreenRectsMessage(RenderWidget* widget, | |
212 const gfx::Rect view_screen_rect, | |
213 const gfx::Rect window_screen_rect); | |
214 void OnShowContextMenu(RenderWidget* widget, ContextMenuParams* params); | |
215 | |
216 WebKit::WebInputEvent* ConvertInputEventToEmulated( | |
217 RenderWidget* widget, const WebKit::WebInputEvent* event); | |
218 | |
219 // Created popups need to be repositioned. | |
220 WebKit::WebRect ConvertPopupScreenRectFromEmulated( | |
221 RenderWidget* popup, const WebKit::WebRect& rect); | |
222 | |
223 private: | |
224 void Apply(RenderWidget* widget, float overdraw_bottom_height, | |
225 gfx::Rect resizer_rect, bool is_fullscreen); | |
226 void ConvertMouseEventToEmulated(WebKit::WebMouseEvent* event); | |
227 void ConvertTouchPointToEmulated(WebKit::WebTouchPoint* point); | |
228 | |
229 // Parameters as passed by WebViewClient::EmulateDevice. | |
230 gfx::Size device_size_; | |
231 gfx::Rect widget_rect_; | |
232 float device_scale_factor_; | |
233 bool fit_to_view_; | |
234 | |
235 // The computed scaled used to fit widget into browser window. | |
236 float scale_; | |
237 | |
238 // Original values to restore back after emulation ends. | |
239 gfx::Size original_size_; | |
240 gfx::Size original_physical_backing_size_; | |
241 WebKit::WebScreenInfo original_screen_info_; | |
242 gfx::Rect original_view_screen_rect_; | |
243 gfx::Rect original_window_screen_rect_; | |
244 | |
245 base::WeakPtrFactory<DeviceEmulator> weak_ptr_factory_; | |
246 }; | |
247 | |
248 RenderWidget::DeviceEmulator::DeviceEmulator( | |
249 const gfx::Size& device_size, | |
250 const gfx::Rect& widget_rect, | |
251 float device_scale_factor, | |
252 bool fit_to_view) | |
pfeldman
2013/09/19 17:27:16
scale_ is not initialized.
dgozman
2013/09/27 19:02:03
Done.
| |
253 : device_size_(device_size), | |
254 widget_rect_(widget_rect), | |
255 device_scale_factor_(device_scale_factor), | |
256 fit_to_view_(fit_to_view), | |
257 weak_ptr_factory_(this) { | |
258 } | |
259 | |
260 RenderWidget::DeviceEmulator::~DeviceEmulator() { | |
261 } | |
262 | |
263 void RenderWidget::DeviceEmulator::BeginEmulation(RenderWidget* widget) { | |
264 original_size_ = widget->size_; | |
265 original_physical_backing_size_ = widget->physical_backing_size_; | |
266 original_screen_info_ = widget->screen_info_; | |
267 original_view_screen_rect_ = widget->view_screen_rect_; | |
268 original_window_screen_rect_ = widget->window_screen_rect_; | |
269 Apply(widget, widget->overdraw_bottom_height_, | |
270 widget->resizer_rect_, widget->is_fullscreen_); | |
271 } | |
272 | |
273 void RenderWidget::DeviceEmulator::ChangeEmulationParams( | |
274 RenderWidget* widget, DeviceEmulator* params) { | |
275 device_size_ = params->device_size_; | |
276 widget_rect_ = params->widget_rect_; | |
277 device_scale_factor_ = params->device_scale_factor_; | |
278 fit_to_view_ = params->fit_to_view_; | |
279 Apply(widget, widget->overdraw_bottom_height_, | |
280 widget->resizer_rect_, widget->is_fullscreen_); | |
281 } | |
282 | |
283 void RenderWidget::DeviceEmulator::EndEmulation(RenderWidget* widget) { | |
284 widget->screen_info_ = original_screen_info_; | |
285 | |
286 widget->Send(new ViewHostMsg_SetExpectedSize(widget->routing_id(), | |
287 gfx::Size())); | |
288 | |
289 widget->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); | |
290 widget->SetDeviceEmulationParameters(false /* enabled */, 1.f, 1.f); | |
291 widget->view_screen_rect_ = original_view_screen_rect_; | |
292 widget->window_screen_rect_ = original_window_screen_rect_; | |
293 widget->Resize(original_size_, original_physical_backing_size_, | |
294 widget->overdraw_bottom_height_, widget->resizer_rect_, | |
295 widget->is_fullscreen_, NO_RESIZE_ACK); | |
296 } | |
297 | |
298 void RenderWidget::DeviceEmulator::Apply(RenderWidget* widget, | |
299 float overdraw_bottom_height, gfx::Rect resizer_rect, bool is_fullscreen) { | |
300 if (fit_to_view_) { | |
301 float width_ratio = !original_size_.width() ? 1.f : | |
302 static_cast<float>(widget_rect_.width()) / original_size_.width(); | |
303 float height_ratio = !original_size_.height() ? 1.f : | |
304 static_cast<float>(widget_rect_.height()) / original_size_.height(); | |
305 float ratio = std::max(1.0f, std::max(width_ratio, height_ratio)); | |
306 scale_ = 1.f / ratio; | |
307 } else { | |
308 scale_ = 1.f; | |
309 } | |
310 | |
311 widget->screen_info_.rect = gfx::Rect(device_size_); | |
312 widget->screen_info_.availableRect = gfx::Rect(device_size_); | |
313 widget->screen_info_.deviceScaleFactor = device_scale_factor_; | |
314 | |
315 // Pass two emulation parameters to the blink side: | |
316 // - we keep the real device scale factor in compositor to produce sharp image | |
317 // even when emulating different scale factor; | |
318 // - in order to fit into view, WebView applies scaling transform to the | |
319 // root layer. | |
320 widget->SetDeviceEmulationParameters(true /* enabled */, | |
321 original_screen_info_.deviceScaleFactor, scale_); | |
322 | |
323 widget->SetDeviceScaleFactor(device_scale_factor_); | |
324 widget->view_screen_rect_ = widget_rect_; | |
325 widget->window_screen_rect_ = widget->screen_info_.availableRect; | |
326 | |
327 // Make host accept an image of different size. | |
328 widget->Send(new ViewHostMsg_SetExpectedSize(widget->routing_id(), | |
329 gfx::ToCeiledSize(gfx::ScaleSize(widget_rect_.size(), scale_)))); | |
330 | |
331 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( | |
332 widget_rect_.size(), original_screen_info_.deviceScaleFactor * scale_)); | |
333 widget->Resize(widget_rect_.size(), physical_backing_size, | |
334 overdraw_bottom_height, resizer_rect, is_fullscreen, NO_RESIZE_ACK); | |
335 } | |
336 | |
337 void RenderWidget::DeviceEmulator::OnResizeMessage( | |
338 RenderWidget* widget, const ViewMsg_Resize_Params& params) { | |
339 bool need_ack = params.new_size != original_size_; | |
340 original_size_ = params.new_size; | |
341 original_physical_backing_size_ = params.physical_backing_size; | |
342 original_screen_info_ = params.screen_info; | |
343 Apply(widget, params.overdraw_bottom_height, params.resizer_rect, | |
344 params.is_fullscreen); | |
345 | |
346 if (need_ack) { | |
347 widget->set_next_paint_is_resize_ack(); | |
348 if (widget->is_accelerated_compositing_active_ && widget->compositor_) | |
349 widget->compositor_->SetNeedsRedrawRect(gfx::Rect(widget->size_)); | |
350 else | |
351 widget->didInvalidateRect(gfx::Rect(widget->size_)); | |
aelias_OOO_until_Jul13
2013/09/20 07:10:14
I thought accelerated compositing was mandatory fo
dgozman
2013/09/27 19:02:03
You are right. Removed.
| |
352 } | |
353 } | |
354 | |
355 void RenderWidget::DeviceEmulator::OnUpdateScreenRectsMessage( | |
356 RenderWidget* widget, | |
357 const gfx::Rect view_screen_rect, | |
358 const gfx::Rect window_screen_rect) { | |
359 original_view_screen_rect_ = view_screen_rect; | |
360 original_window_screen_rect_ = window_screen_rect; | |
361 widget->Send(new ViewHostMsg_UpdateScreenRects_ACK(widget->routing_id())); | |
362 } | |
363 | |
364 void RenderWidget::DeviceEmulator::OnShowContextMenu( | |
365 RenderWidget* widget, ContextMenuParams* params) { | |
366 params->x *= scale_; | |
367 params->y *= scale_; | |
368 } | |
369 | |
370 WebInputEvent* RenderWidget::DeviceEmulator::ConvertInputEventToEmulated( | |
aelias_OOO_until_Jul13
2013/09/20 07:10:14
It's the job of Source/web/WebInputEventConversion
dgozman
2013/09/27 19:02:03
Done. Please see https://codereview.chromium.org/2
| |
371 RenderWidget* widget, const WebInputEvent* event) { | |
372 if (!event) | |
373 return NULL; | |
374 | |
375 if (WebInputEvent::isKeyboardEventType(event->type)) { | |
376 const WebKeyboardEvent& keyboard_event = | |
377 *static_cast<const WebKeyboardEvent*>(event); | |
378 WebKeyboardEvent* result = new WebKeyboardEvent(keyboard_event); | |
pfeldman
2013/09/19 17:27:16
return new ...
dgozman
2013/09/27 19:02:03
Done.
| |
379 return result; | |
380 } | |
381 | |
382 if (WebInputEvent::isMouseEventType(event->type)) { | |
383 const WebMouseEvent& mouse_event = | |
384 *static_cast<const WebMouseEvent*>(event); | |
385 WebMouseEvent* result = new WebMouseEvent(mouse_event); | |
386 ConvertMouseEventToEmulated(result); | |
387 return result; | |
388 } | |
389 | |
390 if (WebInputEvent::MouseWheel == event->type) { | |
391 const WebMouseWheelEvent& mouse_wheel_event = | |
392 *static_cast<const WebMouseWheelEvent*>(event); | |
393 WebMouseWheelEvent* result = new WebMouseWheelEvent(mouse_wheel_event); | |
394 ConvertMouseEventToEmulated(result); | |
395 return result; | |
396 } | |
397 | |
398 if (WebInputEvent::isGestureEventType(event->type)) { | |
399 const WebGestureEvent& gesture_event = | |
400 *static_cast<const WebGestureEvent*>(event); | |
401 WebGestureEvent* result = new WebGestureEvent(gesture_event); | |
402 result->x = 1.f / scale_ * result->x; | |
403 result->y = 1.f / scale_ * result->y; | |
404 result->globalX = widget_rect_.x() + result->x; | |
405 result->globalY = widget_rect_.y() + result->y; | |
406 return result; | |
407 } | |
408 | |
409 if (WebInputEvent::isTouchEventType(event->type)) { | |
410 const WebTouchEvent& touch_event = | |
411 *static_cast<const WebTouchEvent*>(event); | |
412 WebTouchEvent* result = new WebTouchEvent(touch_event); | |
413 for (size_t index = 0; index < result->touchesLength; ++index) { | |
pfeldman
2013/09/19 17:27:16
One line blocks don't need {}
dgozman
2013/09/27 19:02:03
Done.
| |
414 ConvertTouchPointToEmulated(&result->touches[index]); | |
415 } | |
416 for (size_t index = 0; index < result->changedTouchesLength; ++index) { | |
417 ConvertTouchPointToEmulated(&result->changedTouches[index]); | |
418 } | |
419 for (size_t index = 0; index < result->targetTouchesLength; ++index) { | |
420 ConvertTouchPointToEmulated(&result->targetTouches[index]); | |
421 } | |
422 return result; | |
423 } | |
424 | |
425 return NULL; | |
426 } | |
427 | |
428 void RenderWidget::DeviceEmulator::ConvertMouseEventToEmulated( | |
429 WebKit::WebMouseEvent* event) { | |
430 event->x = 1.f / scale_ * event->x; | |
431 event->y = 1.f / scale_ * event->y; | |
432 event->movementX = 1.f / scale_ * event->movementX; | |
433 event->movementY = 1.f / scale_ * event->movementY; | |
434 event->windowX = widget_rect_.x() + event->x; | |
435 event->windowY = widget_rect_.y() + event->y; | |
436 event->globalX = event->windowX; | |
437 event->globalY = event->windowY; | |
438 } | |
439 | |
440 void RenderWidget::DeviceEmulator::ConvertTouchPointToEmulated( | |
441 WebKit::WebTouchPoint* point) { | |
442 point->position.x = 1.f / scale_ * point->position.x; | |
443 point->position.y = 1.f / scale_ * point->position.y; | |
444 point->screenPosition.x = widget_rect_.x() + point->position.x; | |
445 point->screenPosition.y = widget_rect_.y() + point->position.y; | |
446 } | |
447 | |
448 base::WeakPtr<RenderWidget::DeviceEmulator> RenderWidget::DeviceEmulator::AsWeak Ptr() { | |
pfeldman
2013/09/19 17:27:16
80 chars limit please.
base::WeakPtr<RenderWidget
dgozman
2013/09/27 19:02:03
Done.
| |
449 return weak_ptr_factory_.GetWeakPtr(); | |
450 } | |
451 | |
452 WebKit::WebRect RenderWidget::DeviceEmulator::ConvertPopupScreenRectFromEmulated ( | |
pfeldman
2013/09/19 17:27:16
ditto
dgozman
2013/09/27 19:02:03
Done.
| |
453 RenderWidget* popup, const WebKit::WebRect& rect) { | |
454 WebKit::WebRect result = rect; | |
455 result.x = original_view_screen_rect_.x() + | |
456 (result.x - widget_rect_.x()) * scale_; | |
457 result.y = original_view_screen_rect_.y() + | |
458 (result.y - widget_rect_.y()) * scale_; | |
459 return result; | |
460 } | |
461 | |
462 // RenderWidget ---------------------------------------------------------------- | |
463 | |
189 RenderWidget::RenderWidget(WebKit::WebPopupType popup_type, | 464 RenderWidget::RenderWidget(WebKit::WebPopupType popup_type, |
190 const WebKit::WebScreenInfo& screen_info, | 465 const WebKit::WebScreenInfo& screen_info, |
191 bool swapped_out, | 466 bool swapped_out, |
192 bool hidden) | 467 bool hidden) |
193 : routing_id_(MSG_ROUTING_NONE), | 468 : routing_id_(MSG_ROUTING_NONE), |
194 surface_id_(0), | 469 surface_id_(0), |
195 webwidget_(NULL), | 470 webwidget_(NULL), |
196 opener_id_(MSG_ROUTING_NONE), | 471 opener_id_(MSG_ROUTING_NONE), |
197 init_complete_(false), | 472 init_complete_(false), |
198 current_paint_buf_(NULL), | 473 current_paint_buf_(NULL), |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
361 } | 636 } |
362 | 637 |
363 bool RenderWidget::UsingSynchronousRendererCompositor() const { | 638 bool RenderWidget::UsingSynchronousRendererCompositor() const { |
364 #if defined(OS_ANDROID) | 639 #if defined(OS_ANDROID) |
365 return SynchronousCompositorFactory::GetInstance() != NULL; | 640 return SynchronousCompositorFactory::GetInstance() != NULL; |
366 #else | 641 #else |
367 return false; | 642 return false; |
368 #endif | 643 #endif |
369 } | 644 } |
370 | 645 |
646 void RenderWidget::EmulateDevice( | |
647 bool enabled, | |
648 const gfx::Size& device_size, | |
649 const gfx::Rect& widget_rect, | |
650 float device_scale_factor, | |
651 bool fit_to_view) { | |
652 if (enabled) { | |
653 DeviceEmulator* helper = new DeviceEmulator(device_size, widget_rect, | |
654 device_scale_factor, fit_to_view); | |
655 | |
656 if (!device_emulator_) { | |
657 device_emulator_.reset(helper); | |
658 device_emulator_->BeginEmulation(this); | |
pfeldman
2013/09/19 17:27:16
I prefer StartEmulation / UpdateEmulation / StopEm
dgozman
2013/09/27 19:02:03
BeginEmulation/EndEmulation are removed.
I'd keep
| |
659 } else { | |
660 device_emulator_->ChangeEmulationParams(this, helper); | |
aelias_OOO_until_Jul13
2013/09/20 07:10:14
You're leaking the "helper" object" in this codepa
dgozman
2013/09/27 19:02:03
Done.
| |
661 } | |
662 } else { | |
663 if (device_emulator_) | |
664 device_emulator_->EndEmulation(this); | |
aelias_OOO_until_Jul13
2013/09/20 07:10:14
Doesn't look like keeping BeginEmulation/EndEmulat
dgozman
2013/09/27 19:02:03
Done.
| |
665 device_emulator_.reset(); | |
666 } | |
667 } | |
668 | |
669 void RenderWidget::SetDeviceEmulationParameters( | |
670 bool enabled, float device_scale_factor, float root_layer_scale) { | |
671 // This is only supported in RenderView. | |
672 NOTREACHED(); | |
673 } | |
674 | |
675 void RenderWidget::OnShowHostContextMenu(ContextMenuParams* params) { | |
676 if (device_emulator_) | |
677 device_emulator_->OnShowContextMenu(this, params); | |
678 } | |
679 | |
680 void RenderWidget::set_popup_device_emulator( | |
681 RenderWidget::DeviceEmulator *emulator) { | |
682 popup_device_emulator_ = emulator->AsWeakPtr(); | |
683 } | |
684 | |
371 bool RenderWidget::OnMessageReceived(const IPC::Message& message) { | 685 bool RenderWidget::OnMessageReceived(const IPC::Message& message) { |
372 bool handled = true; | 686 bool handled = true; |
373 IPC_BEGIN_MESSAGE_MAP(RenderWidget, message) | 687 IPC_BEGIN_MESSAGE_MAP(RenderWidget, message) |
374 IPC_MESSAGE_HANDLER(InputMsg_HandleInputEvent, OnHandleInputEvent) | 688 IPC_MESSAGE_HANDLER(InputMsg_HandleInputEvent, OnHandleInputEvent) |
375 IPC_MESSAGE_HANDLER(InputMsg_CursorVisibilityChange, | 689 IPC_MESSAGE_HANDLER(InputMsg_CursorVisibilityChange, |
376 OnCursorVisibilityChange) | 690 OnCursorVisibilityChange) |
377 IPC_MESSAGE_HANDLER(InputMsg_MouseCaptureLost, OnMouseCaptureLost) | 691 IPC_MESSAGE_HANDLER(InputMsg_MouseCaptureLost, OnMouseCaptureLost) |
378 IPC_MESSAGE_HANDLER(InputMsg_SetFocus, OnSetFocus) | 692 IPC_MESSAGE_HANDLER(InputMsg_SetFocus, OnSetFocus) |
379 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose) | 693 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose) |
380 IPC_MESSAGE_HANDLER(ViewMsg_CreatingNew_ACK, OnCreatingNewAck) | 694 IPC_MESSAGE_HANDLER(ViewMsg_CreatingNew_ACK, OnCreatingNewAck) |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
524 | 838 |
525 // Got a response from the browser after the renderer decided to create a new | 839 // Got a response from the browser after the renderer decided to create a new |
526 // view. | 840 // view. |
527 void RenderWidget::OnCreatingNewAck() { | 841 void RenderWidget::OnCreatingNewAck() { |
528 DCHECK(routing_id_ != MSG_ROUTING_NONE); | 842 DCHECK(routing_id_ != MSG_ROUTING_NONE); |
529 | 843 |
530 CompleteInit(); | 844 CompleteInit(); |
531 } | 845 } |
532 | 846 |
533 void RenderWidget::OnResize(const ViewMsg_Resize_Params& params) { | 847 void RenderWidget::OnResize(const ViewMsg_Resize_Params& params) { |
848 if (device_emulator_) { | |
849 device_emulator_->OnResizeMessage(this, params); | |
850 return; | |
851 } | |
852 | |
534 screen_info_ = params.screen_info; | 853 screen_info_ = params.screen_info; |
535 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); | 854 SetDeviceScaleFactor(screen_info_.deviceScaleFactor); |
536 Resize(params.new_size, params.physical_backing_size, | 855 Resize(params.new_size, params.physical_backing_size, |
537 params.overdraw_bottom_height, params.resizer_rect, | 856 params.overdraw_bottom_height, params.resizer_rect, |
538 params.is_fullscreen, SEND_RESIZE_ACK); | 857 params.is_fullscreen, SEND_RESIZE_ACK); |
539 } | 858 } |
540 | 859 |
541 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { | 860 void RenderWidget::OnChangeResizeRect(const gfx::Rect& resizer_rect) { |
542 if (resizer_rect_ != resizer_rect) { | 861 if (resizer_rect_ != resizer_rect) { |
543 gfx::Rect view_rect(size_); | 862 gfx::Rect view_rect(size_); |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
806 } | 1125 } |
807 | 1126 |
808 // Continue painting if necessary... | 1127 // Continue painting if necessary... |
809 DoDeferredUpdateAndSendInputAck(); | 1128 DoDeferredUpdateAndSendInputAck(); |
810 } | 1129 } |
811 | 1130 |
812 void RenderWidget::OnHandleInputEvent(const WebKit::WebInputEvent* input_event, | 1131 void RenderWidget::OnHandleInputEvent(const WebKit::WebInputEvent* input_event, |
813 const ui::LatencyInfo& latency_info, | 1132 const ui::LatencyInfo& latency_info, |
814 bool is_keyboard_shortcut) { | 1133 bool is_keyboard_shortcut) { |
815 handling_input_event_ = true; | 1134 handling_input_event_ = true; |
1135 | |
1136 scoped_ptr<const WebKit::WebInputEvent> owner; | |
1137 if (device_emulator_) { | |
1138 input_event = device_emulator_->ConvertInputEventToEmulated( | |
1139 this, input_event); | |
1140 if (input_event) | |
1141 owner.reset(input_event); | |
pfeldman
2013/09/19 17:27:16
You can reset unconditionally.
dgozman
2013/09/27 19:02:03
Removed.
| |
1142 } | |
1143 | |
816 if (!input_event) { | 1144 if (!input_event) { |
817 handling_input_event_ = false; | 1145 handling_input_event_ = false; |
818 return; | 1146 return; |
819 } | 1147 } |
820 | 1148 |
821 const char* const event_name = GetEventName(input_event->type); | 1149 const char* const event_name = GetEventName(input_event->type); |
822 TRACE_EVENT1("renderer", "RenderWidget::OnHandleInputEvent", | 1150 TRACE_EVENT1("renderer", "RenderWidget::OnHandleInputEvent", |
823 "event", event_name); | 1151 "event", event_name); |
824 | 1152 |
825 if (compositor_) | 1153 if (compositor_) |
(...skipping 943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1769 return pending_window_rect_; | 2097 return pending_window_rect_; |
1770 | 2098 |
1771 return view_screen_rect_; | 2099 return view_screen_rect_; |
1772 } | 2100 } |
1773 | 2101 |
1774 void RenderWidget::setToolTipText(const WebKit::WebString& text, | 2102 void RenderWidget::setToolTipText(const WebKit::WebString& text, |
1775 WebTextDirection hint) { | 2103 WebTextDirection hint) { |
1776 Send(new ViewHostMsg_SetTooltipText(routing_id_, text, hint)); | 2104 Send(new ViewHostMsg_SetTooltipText(routing_id_, text, hint)); |
1777 } | 2105 } |
1778 | 2106 |
1779 void RenderWidget::setWindowRect(const WebRect& pos) { | 2107 void RenderWidget::setWindowRect(const WebRect& rect) { |
2108 WebRect pos = rect; | |
2109 if (popup_device_emulator_) { | |
2110 pos = popup_device_emulator_->ConvertPopupScreenRectFromEmulated( | |
2111 this, rect); | |
2112 } | |
2113 | |
1780 if (did_show_) { | 2114 if (did_show_) { |
1781 if (!RenderThreadImpl::current()->layout_test_mode()) { | 2115 if (!RenderThreadImpl::current()->layout_test_mode()) { |
1782 Send(new ViewHostMsg_RequestMove(routing_id_, pos)); | 2116 Send(new ViewHostMsg_RequestMove(routing_id_, pos)); |
1783 SetPendingWindowRect(pos); | 2117 SetPendingWindowRect(pos); |
1784 } else { | 2118 } else { |
1785 WebSize new_size(pos.width, pos.height); | 2119 WebSize new_size(pos.width, pos.height); |
1786 Resize(new_size, new_size, overdraw_bottom_height_, | 2120 Resize(new_size, new_size, overdraw_bottom_height_, |
1787 WebRect(), is_fullscreen_, NO_RESIZE_ACK); | 2121 WebRect(), is_fullscreen_, NO_RESIZE_ACK); |
1788 view_screen_rect_ = pos; | 2122 view_screen_rect_ = pos; |
1789 window_screen_rect_ = pos; | 2123 window_screen_rect_ = pos; |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2010 } | 2344 } |
2011 | 2345 |
2012 void RenderWidget::OnSetTextDirection(WebTextDirection direction) { | 2346 void RenderWidget::OnSetTextDirection(WebTextDirection direction) { |
2013 if (!webwidget_) | 2347 if (!webwidget_) |
2014 return; | 2348 return; |
2015 webwidget_->setTextDirection(direction); | 2349 webwidget_->setTextDirection(direction); |
2016 } | 2350 } |
2017 | 2351 |
2018 void RenderWidget::OnUpdateScreenRects(const gfx::Rect& view_screen_rect, | 2352 void RenderWidget::OnUpdateScreenRects(const gfx::Rect& view_screen_rect, |
2019 const gfx::Rect& window_screen_rect) { | 2353 const gfx::Rect& window_screen_rect) { |
2354 if (device_emulator_) { | |
2355 device_emulator_->OnUpdateScreenRectsMessage( | |
2356 this, view_screen_rect, window_screen_rect); | |
2357 return; | |
2358 } | |
2020 view_screen_rect_ = view_screen_rect; | 2359 view_screen_rect_ = view_screen_rect; |
2021 window_screen_rect_ = window_screen_rect; | 2360 window_screen_rect_ = window_screen_rect; |
2022 Send(new ViewHostMsg_UpdateScreenRects_ACK(routing_id())); | 2361 Send(new ViewHostMsg_UpdateScreenRects_ACK(routing_id())); |
2023 } | 2362 } |
2024 | 2363 |
2025 #if defined(OS_ANDROID) | 2364 #if defined(OS_ANDROID) |
2026 void RenderWidget::OnImeBatchStateChanged(bool is_begin) { | 2365 void RenderWidget::OnImeBatchStateChanged(bool is_begin) { |
2027 Send(new ViewHostMsg_ImeBatchStateChanged_ACK(routing_id(), is_begin)); | 2366 Send(new ViewHostMsg_ImeBatchStateChanged_ACK(routing_id(), is_begin)); |
2028 } | 2367 } |
2029 | 2368 |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2525 | 2864 |
2526 if (!context->InitializeWithDefaultBufferSizes( | 2865 if (!context->InitializeWithDefaultBufferSizes( |
2527 attributes, | 2866 attributes, |
2528 false /* bind generates resources */, | 2867 false /* bind generates resources */, |
2529 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE) ) | 2868 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE) ) |
2530 return scoped_ptr<WebGraphicsContext3DCommandBufferImpl>(); | 2869 return scoped_ptr<WebGraphicsContext3DCommandBufferImpl>(); |
2531 return context.Pass(); | 2870 return context.Pass(); |
2532 } | 2871 } |
2533 | 2872 |
2534 } // namespace content | 2873 } // namespace content |
OLD | NEW |