| 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/browser/renderer_host/render_widget_host_impl.h" | 5 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "cc/output/compositor_frame_ack.h" | 24 #include "cc/output/compositor_frame_ack.h" |
| 25 #include "content/browser/accessibility/browser_accessibility_state_impl.h" | 25 #include "content/browser/accessibility/browser_accessibility_state_impl.h" |
| 26 #include "content/browser/gpu/compositor_util.h" | 26 #include "content/browser/gpu/compositor_util.h" |
| 27 #include "content/browser/gpu/gpu_process_host.h" | 27 #include "content/browser/gpu/gpu_process_host.h" |
| 28 #include "content/browser/gpu/gpu_process_host_ui_shim.h" | 28 #include "content/browser/gpu/gpu_process_host_ui_shim.h" |
| 29 #include "content/browser/gpu/gpu_surface_tracker.h" | 29 #include "content/browser/gpu/gpu_surface_tracker.h" |
| 30 #include "content/browser/renderer_host/backing_store.h" | 30 #include "content/browser/renderer_host/backing_store.h" |
| 31 #include "content/browser/renderer_host/backing_store_manager.h" | 31 #include "content/browser/renderer_host/backing_store_manager.h" |
| 32 #include "content/browser/renderer_host/dip_util.h" | 32 #include "content/browser/renderer_host/dip_util.h" |
| 33 #include "content/browser/renderer_host/input/immediate_input_router.h" | 33 #include "content/browser/renderer_host/input/immediate_input_router.h" |
| 34 #include "content/browser/renderer_host/input/synthetic_gesture.h" | |
| 35 #include "content/browser/renderer_host/input/synthetic_gesture_controller.h" | |
| 36 #include "content/browser/renderer_host/input/synthetic_gesture_target.h" | |
| 37 #include "content/browser/renderer_host/overscroll_controller.h" | 34 #include "content/browser/renderer_host/overscroll_controller.h" |
| 38 #include "content/browser/renderer_host/render_process_host_impl.h" | 35 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 39 #include "content/browser/renderer_host/render_view_host_impl.h" | 36 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 40 #include "content/browser/renderer_host/render_widget_helper.h" | 37 #include "content/browser/renderer_host/render_widget_helper.h" |
| 41 #include "content/browser/renderer_host/render_widget_host_delegate.h" | 38 #include "content/browser/renderer_host/render_widget_host_delegate.h" |
| 42 #include "content/common/accessibility_messages.h" | 39 #include "content/common/accessibility_messages.h" |
| 43 #include "content/common/content_constants_internal.h" | 40 #include "content/common/content_constants_internal.h" |
| 44 #include "content/common/gpu/gpu_messages.h" | 41 #include "content/common/gpu/gpu_messages.h" |
| 45 #include "content/common/input_messages.h" | 42 #include "content/common/input_messages.h" |
| 46 #include "content/common/view_messages.h" | 43 #include "content/common/view_messages.h" |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 return rwh->AsRenderWidgetHostImpl(); | 309 return rwh->AsRenderWidgetHostImpl(); |
| 313 } | 310 } |
| 314 | 311 |
| 315 void RenderWidgetHostImpl::SetView(RenderWidgetHostView* view) { | 312 void RenderWidgetHostImpl::SetView(RenderWidgetHostView* view) { |
| 316 view_ = RenderWidgetHostViewPort::FromRWHV(view); | 313 view_ = RenderWidgetHostViewPort::FromRWHV(view); |
| 317 | 314 |
| 318 if (!view_) { | 315 if (!view_) { |
| 319 GpuSurfaceTracker::Get()->SetSurfaceHandle( | 316 GpuSurfaceTracker::Get()->SetSurfaceHandle( |
| 320 surface_id_, gfx::GLSurfaceHandle()); | 317 surface_id_, gfx::GLSurfaceHandle()); |
| 321 } | 318 } |
| 322 | |
| 323 synthetic_gesture_controller_.reset(); | |
| 324 } | 319 } |
| 325 | 320 |
| 326 RenderProcessHost* RenderWidgetHostImpl::GetProcess() const { | 321 RenderProcessHost* RenderWidgetHostImpl::GetProcess() const { |
| 327 return process_; | 322 return process_; |
| 328 } | 323 } |
| 329 | 324 |
| 330 int RenderWidgetHostImpl::GetRoutingID() const { | 325 int RenderWidgetHostImpl::GetRoutingID() const { |
| 331 return routing_id_; | 326 return routing_id_; |
| 332 } | 327 } |
| 333 | 328 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 | 377 |
| 383 last_view_screen_rect_ = view_->GetViewBounds(); | 378 last_view_screen_rect_ = view_->GetViewBounds(); |
| 384 last_window_screen_rect_ = view_->GetBoundsInRootWindow(); | 379 last_window_screen_rect_ = view_->GetBoundsInRootWindow(); |
| 385 Send(new ViewMsg_UpdateScreenRects( | 380 Send(new ViewMsg_UpdateScreenRects( |
| 386 GetRoutingID(), last_view_screen_rect_, last_window_screen_rect_)); | 381 GetRoutingID(), last_view_screen_rect_, last_window_screen_rect_)); |
| 387 if (delegate_) | 382 if (delegate_) |
| 388 delegate_->DidSendScreenRects(this); | 383 delegate_->DidSendScreenRects(this); |
| 389 waiting_for_screen_rects_ack_ = true; | 384 waiting_for_screen_rects_ack_ = true; |
| 390 } | 385 } |
| 391 | 386 |
| 387 base::TimeDelta |
| 388 RenderWidgetHostImpl::GetSyntheticGestureMessageInterval() const { |
| 389 return synthetic_gesture_controller_.GetSyntheticGestureMessageInterval(); |
| 390 } |
| 391 |
| 392 void RenderWidgetHostImpl::SetOverscrollControllerEnabled(bool enabled) { | 392 void RenderWidgetHostImpl::SetOverscrollControllerEnabled(bool enabled) { |
| 393 if (!enabled) | 393 if (!enabled) |
| 394 overscroll_controller_.reset(); | 394 overscroll_controller_.reset(); |
| 395 else if (!overscroll_controller_) | 395 else if (!overscroll_controller_) |
| 396 overscroll_controller_.reset(new OverscrollController()); | 396 overscroll_controller_.reset(new OverscrollController()); |
| 397 } | 397 } |
| 398 | 398 |
| 399 void RenderWidgetHostImpl::SuppressNextCharEvents() { | 399 void RenderWidgetHostImpl::SuppressNextCharEvents() { |
| 400 suppress_next_char_events_ = true; | 400 suppress_next_char_events_ = true; |
| 401 } | 401 } |
| 402 | 402 |
| 403 void RenderWidgetHostImpl::FlushInput() { | 403 void RenderWidgetHostImpl::FlushInput() { |
| 404 input_router_->Flush(); | 404 input_router_->Flush(); |
| 405 if (synthetic_gesture_controller_) | |
| 406 synthetic_gesture_controller_->Flush(base::TimeTicks::Now()); | |
| 407 } | 405 } |
| 408 | 406 |
| 409 void RenderWidgetHostImpl::SetNeedsFlush() { | 407 void RenderWidgetHostImpl::SetNeedsFlush() { |
| 410 if (view_) | 408 if (view_) |
| 411 view_->OnSetNeedsFlushInput(); | 409 view_->OnSetNeedsFlushInput(); |
| 412 } | 410 } |
| 413 | 411 |
| 414 void RenderWidgetHostImpl::Init() { | 412 void RenderWidgetHostImpl::Init() { |
| 415 DCHECK(process_->HasConnection()); | 413 DCHECK(process_->HasConnection()); |
| 416 | 414 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 443 } | 441 } |
| 444 | 442 |
| 445 bool RenderWidgetHostImpl::IsRenderView() const { | 443 bool RenderWidgetHostImpl::IsRenderView() const { |
| 446 return false; | 444 return false; |
| 447 } | 445 } |
| 448 | 446 |
| 449 bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) { | 447 bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) { |
| 450 bool handled = true; | 448 bool handled = true; |
| 451 bool msg_is_ok = true; | 449 bool msg_is_ok = true; |
| 452 IPC_BEGIN_MESSAGE_MAP_EX(RenderWidgetHostImpl, msg, msg_is_ok) | 450 IPC_BEGIN_MESSAGE_MAP_EX(RenderWidgetHostImpl, msg, msg_is_ok) |
| 453 IPC_MESSAGE_HANDLER(InputHostMsg_QueueSyntheticGesture, | |
| 454 OnQueueSyntheticGesture) | |
| 455 IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewReady, OnRenderViewReady) | 451 IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewReady, OnRenderViewReady) |
| 456 IPC_MESSAGE_HANDLER(ViewHostMsg_RenderProcessGone, OnRenderProcessGone) | 452 IPC_MESSAGE_HANDLER(ViewHostMsg_RenderProcessGone, OnRenderProcessGone) |
| 457 IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnClose) | 453 IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnClose) |
| 458 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateScreenRects_ACK, | 454 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateScreenRects_ACK, |
| 459 OnUpdateScreenRectsAck) | 455 OnUpdateScreenRectsAck) |
| 460 IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnRequestMove) | 456 IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnRequestMove) |
| 461 IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnSetTooltipText) | 457 IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnSetTooltipText) |
| 462 IPC_MESSAGE_HANDLER(ViewHostMsg_PaintAtSize_ACK, OnPaintAtSizeAck) | 458 IPC_MESSAGE_HANDLER(ViewHostMsg_PaintAtSize_ACK, OnPaintAtSizeAck) |
| 463 #if defined(OS_MACOSX) | 459 #if defined(OS_MACOSX) |
| 464 IPC_MESSAGE_HANDLER(ViewHostMsg_CompositorSurfaceBuffersSwapped, | 460 IPC_MESSAGE_HANDLER(ViewHostMsg_CompositorSurfaceBuffersSwapped, |
| 465 OnCompositorSurfaceBuffersSwapped) | 461 OnCompositorSurfaceBuffersSwapped) |
| 466 #endif | 462 #endif |
| 467 IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_SwapCompositorFrame, | 463 IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_SwapCompositorFrame, |
| 468 msg_is_ok = OnSwapCompositorFrame(msg)) | 464 msg_is_ok = OnSwapCompositorFrame(msg)) |
| 469 IPC_MESSAGE_HANDLER(ViewHostMsg_DidOverscroll, OnOverscrolled) | 465 IPC_MESSAGE_HANDLER(ViewHostMsg_DidOverscroll, OnOverscrolled) |
| 470 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect) | 466 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateRect, OnUpdateRect) |
| 471 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateIsDelayed, OnUpdateIsDelayed) | 467 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateIsDelayed, OnUpdateIsDelayed) |
| 468 IPC_MESSAGE_HANDLER(ViewHostMsg_BeginSmoothScroll, OnBeginSmoothScroll) |
| 469 IPC_MESSAGE_HANDLER(ViewHostMsg_BeginPinch, OnBeginPinch) |
| 472 IPC_MESSAGE_HANDLER(ViewHostMsg_Focus, OnFocus) | 470 IPC_MESSAGE_HANDLER(ViewHostMsg_Focus, OnFocus) |
| 473 IPC_MESSAGE_HANDLER(ViewHostMsg_Blur, OnBlur) | 471 IPC_MESSAGE_HANDLER(ViewHostMsg_Blur, OnBlur) |
| 474 IPC_MESSAGE_HANDLER(ViewHostMsg_SetCursor, OnSetCursor) | 472 IPC_MESSAGE_HANDLER(ViewHostMsg_SetCursor, OnSetCursor) |
| 475 IPC_MESSAGE_HANDLER(ViewHostMsg_TextInputTypeChanged, | 473 IPC_MESSAGE_HANDLER(ViewHostMsg_TextInputTypeChanged, |
| 476 OnTextInputTypeChanged) | 474 OnTextInputTypeChanged) |
| 477 IPC_MESSAGE_HANDLER(ViewHostMsg_ImeCancelComposition, | 475 IPC_MESSAGE_HANDLER(ViewHostMsg_ImeCancelComposition, |
| 478 OnImeCancelComposition) | 476 OnImeCancelComposition) |
| 479 IPC_MESSAGE_HANDLER(ViewHostMsg_DidActivateAcceleratedCompositing, | 477 IPC_MESSAGE_HANDLER(ViewHostMsg_DidActivateAcceleratedCompositing, |
| 480 OnDidActivateAcceleratedCompositing) | 478 OnDidActivateAcceleratedCompositing) |
| 481 IPC_MESSAGE_HANDLER(ViewHostMsg_LockMouse, OnLockMouse) | 479 IPC_MESSAGE_HANDLER(ViewHostMsg_LockMouse, OnLockMouse) |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1275 in_flight_event_count_ = 0; | 1273 in_flight_event_count_ = 0; |
| 1276 | 1274 |
| 1277 if (view_) { | 1275 if (view_) { |
| 1278 GpuSurfaceTracker::Get()->SetSurfaceHandle(surface_id_, | 1276 GpuSurfaceTracker::Get()->SetSurfaceHandle(surface_id_, |
| 1279 gfx::GLSurfaceHandle()); | 1277 gfx::GLSurfaceHandle()); |
| 1280 view_->RenderProcessGone(status, exit_code); | 1278 view_->RenderProcessGone(status, exit_code); |
| 1281 view_ = NULL; // The View should be deleted by RenderProcessGone. | 1279 view_ = NULL; // The View should be deleted by RenderProcessGone. |
| 1282 } | 1280 } |
| 1283 | 1281 |
| 1284 BackingStoreManager::RemoveBackingStore(this); | 1282 BackingStoreManager::RemoveBackingStore(this); |
| 1285 | |
| 1286 synthetic_gesture_controller_.reset(); | |
| 1287 } | 1283 } |
| 1288 | 1284 |
| 1289 void RenderWidgetHostImpl::UpdateTextDirection(WebTextDirection direction) { | 1285 void RenderWidgetHostImpl::UpdateTextDirection(WebTextDirection direction) { |
| 1290 text_direction_updated_ = true; | 1286 text_direction_updated_ = true; |
| 1291 text_direction_ = direction; | 1287 text_direction_ = direction; |
| 1292 } | 1288 } |
| 1293 | 1289 |
| 1294 void RenderWidgetHostImpl::CancelUpdateTextDirection() { | 1290 void RenderWidgetHostImpl::CancelUpdateTextDirection() { |
| 1295 if (text_direction_updated_) | 1291 if (text_direction_updated_) |
| 1296 text_direction_canceled_ = true; | 1292 text_direction_canceled_ = true; |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1709 // DidUpdateBackingStore() method. On platforms which have asynchronous | 1705 // DidUpdateBackingStore() method. On platforms which have asynchronous |
| 1710 // painting, such as Linux, this is the sum of MPArch.RWH_OnMsgUpdateRect, | 1706 // painting, such as Linux, this is the sum of MPArch.RWH_OnMsgUpdateRect, |
| 1711 // MPArch.RWH_DidUpdateBackingStore, and the time spent asynchronously | 1707 // MPArch.RWH_DidUpdateBackingStore, and the time spent asynchronously |
| 1712 // waiting for the paint to complete. | 1708 // waiting for the paint to complete. |
| 1713 // | 1709 // |
| 1714 // On other platforms, this will be equivalent to MPArch.RWH_OnMsgUpdateRect. | 1710 // On other platforms, this will be equivalent to MPArch.RWH_OnMsgUpdateRect. |
| 1715 delta = now - paint_start; | 1711 delta = now - paint_start; |
| 1716 UMA_HISTOGRAM_TIMES("MPArch.RWH_TotalPaintTime", delta); | 1712 UMA_HISTOGRAM_TIMES("MPArch.RWH_TotalPaintTime", delta); |
| 1717 } | 1713 } |
| 1718 | 1714 |
| 1719 void RenderWidgetHostImpl::OnQueueSyntheticGesture( | 1715 void RenderWidgetHostImpl::OnBeginSmoothScroll( |
| 1720 const SyntheticGesturePacket& gesture_packet) { | 1716 const ViewHostMsg_BeginSmoothScroll_Params& params) { |
| 1721 if (!synthetic_gesture_controller_) { | 1717 if (!view_) |
| 1722 if (!view_) | 1718 return; |
| 1723 return; | 1719 synthetic_gesture_controller_.BeginSmoothScroll(view_, params); |
| 1724 synthetic_gesture_controller_.reset( | 1720 } |
| 1725 new SyntheticGestureController( | |
| 1726 view_->CreateSyntheticGestureTarget().Pass())); | |
| 1727 } | |
| 1728 | 1721 |
| 1729 synthetic_gesture_controller_->QueueSyntheticGesture( | 1722 void RenderWidgetHostImpl::OnBeginPinch( |
| 1730 SyntheticGesture::Create(*gesture_packet.gesture_params())); | 1723 const ViewHostMsg_BeginPinch_Params& params) { |
| 1724 if (!view_) |
| 1725 return; |
| 1726 synthetic_gesture_controller_.BeginPinch(view_, params); |
| 1731 } | 1727 } |
| 1732 | 1728 |
| 1733 void RenderWidgetHostImpl::OnFocus() { | 1729 void RenderWidgetHostImpl::OnFocus() { |
| 1734 // Only RenderViewHost can deal with that message. | 1730 // Only RenderViewHost can deal with that message. |
| 1735 RecordAction(UserMetricsAction("BadMessageTerminate_RWH4")); | 1731 RecordAction(UserMetricsAction("BadMessageTerminate_RWH4")); |
| 1736 GetProcess()->ReceivedBadMessage(); | 1732 GetProcess()->ReceivedBadMessage(); |
| 1737 } | 1733 } |
| 1738 | 1734 |
| 1739 void RenderWidgetHostImpl::OnBlur() { | 1735 void RenderWidgetHostImpl::OnBlur() { |
| 1740 // Only RenderViewHost can deal with that message. | 1736 // Only RenderViewHost can deal with that message. |
| (...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2481 continue; | 2477 continue; |
| 2482 } | 2478 } |
| 2483 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rwh); | 2479 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rwh); |
| 2484 if (rwhi_set.insert(rwhi).second) | 2480 if (rwhi_set.insert(rwhi).second) |
| 2485 rwhi->FrameSwapped(latency_info); | 2481 rwhi->FrameSwapped(latency_info); |
| 2486 } | 2482 } |
| 2487 } | 2483 } |
| 2488 } | 2484 } |
| 2489 | 2485 |
| 2490 } // namespace content | 2486 } // namespace content |
| OLD | NEW |