| 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 <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 #include "content/public/renderer/content_renderer_client.h" | 46 #include "content/public/renderer/content_renderer_client.h" |
| 47 #include "content/renderer/cursor_utils.h" | 47 #include "content/renderer/cursor_utils.h" |
| 48 #include "content/renderer/devtools/render_widget_screen_metrics_emulator.h" | 48 #include "content/renderer/devtools/render_widget_screen_metrics_emulator.h" |
| 49 #include "content/renderer/drop_data_builder.h" | 49 #include "content/renderer/drop_data_builder.h" |
| 50 #include "content/renderer/external_popup_menu.h" | 50 #include "content/renderer/external_popup_menu.h" |
| 51 #include "content/renderer/gpu/frame_swap_message_queue.h" | 51 #include "content/renderer/gpu/frame_swap_message_queue.h" |
| 52 #include "content/renderer/gpu/queue_message_swap_promise.h" | 52 #include "content/renderer/gpu/queue_message_swap_promise.h" |
| 53 #include "content/renderer/gpu/render_widget_compositor.h" | 53 #include "content/renderer/gpu/render_widget_compositor.h" |
| 54 #include "content/renderer/ime_event_guard.h" | 54 #include "content/renderer/ime_event_guard.h" |
| 55 #include "content/renderer/input/input_handler_manager.h" | 55 #include "content/renderer/input/input_handler_manager.h" |
| 56 #include "content/renderer/input/main_thread_event_queue.h" |
| 56 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" | 57 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" |
| 57 #include "content/renderer/render_frame_impl.h" | 58 #include "content/renderer/render_frame_impl.h" |
| 58 #include "content/renderer/render_frame_proxy.h" | 59 #include "content/renderer/render_frame_proxy.h" |
| 59 #include "content/renderer/render_process.h" | 60 #include "content/renderer/render_process.h" |
| 60 #include "content/renderer/render_thread_impl.h" | 61 #include "content/renderer/render_thread_impl.h" |
| 61 #include "content/renderer/render_view_impl.h" | 62 #include "content/renderer/render_view_impl.h" |
| 62 #include "content/renderer/render_widget_owner_delegate.h" | 63 #include "content/renderer/render_widget_owner_delegate.h" |
| 63 #include "content/renderer/renderer_blink_platform_impl.h" | 64 #include "content/renderer/renderer_blink_platform_impl.h" |
| 64 #include "content/renderer/resizing_mode_selector.h" | 65 #include "content/renderer/resizing_mode_selector.h" |
| 65 #include "ipc/ipc_message_start.h" | 66 #include "ipc/ipc_message_start.h" |
| (...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 810 const ui::LatencyInfo& latency_info, | 811 const ui::LatencyInfo& latency_info, |
| 811 InputEventDispatchType dispatch_type) { | 812 InputEventDispatchType dispatch_type) { |
| 812 if (!input_event) | 813 if (!input_event) |
| 813 return; | 814 return; |
| 814 | 815 |
| 815 input_handler_->HandleInputEvent( | 816 input_handler_->HandleInputEvent( |
| 816 blink::WebCoalescedInputEvent(*input_event, coalesced_events), | 817 blink::WebCoalescedInputEvent(*input_event, coalesced_events), |
| 817 latency_info, dispatch_type); | 818 latency_info, dispatch_type); |
| 818 } | 819 } |
| 819 | 820 |
| 821 InputEventAckState RenderWidget::HandleInputEvent( |
| 822 const blink::WebCoalescedInputEvent& input_event, |
| 823 const ui::LatencyInfo& latency_info, |
| 824 InputEventDispatchType dispatch_type) { |
| 825 return input_handler_->HandleInputEvent(input_event, latency_info, |
| 826 dispatch_type); |
| 827 } |
| 828 |
| 820 void RenderWidget::OnCursorVisibilityChange(bool is_visible) { | 829 void RenderWidget::OnCursorVisibilityChange(bool is_visible) { |
| 821 if (GetWebWidget()) | 830 if (GetWebWidget()) |
| 822 GetWebWidget()->SetCursorVisibilityState(is_visible); | 831 GetWebWidget()->SetCursorVisibilityState(is_visible); |
| 823 } | 832 } |
| 824 | 833 |
| 825 void RenderWidget::OnMouseCaptureLost() { | 834 void RenderWidget::OnMouseCaptureLost() { |
| 826 if (GetWebWidget()) | 835 if (GetWebWidget()) |
| 827 GetWebWidget()->MouseCaptureLost(); | 836 GetWebWidget()->MouseCaptureLost(); |
| 828 } | 837 } |
| 829 | 838 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 864 } | 873 } |
| 865 | 874 |
| 866 void RenderWidget::RecordWheelAndTouchScrollingCount( | 875 void RenderWidget::RecordWheelAndTouchScrollingCount( |
| 867 bool has_scrolled_by_wheel, | 876 bool has_scrolled_by_wheel, |
| 868 bool has_scrolled_by_touch) { | 877 bool has_scrolled_by_touch) { |
| 869 GetWebWidget()->RecordWheelAndTouchScrollingCount(has_scrolled_by_wheel, | 878 GetWebWidget()->RecordWheelAndTouchScrollingCount(has_scrolled_by_wheel, |
| 870 has_scrolled_by_touch); | 879 has_scrolled_by_touch); |
| 871 } | 880 } |
| 872 | 881 |
| 873 void RenderWidget::BeginMainFrame(double frame_time_sec) { | 882 void RenderWidget::BeginMainFrame(double frame_time_sec) { |
| 874 RenderThreadImpl* render_thread = RenderThreadImpl::current(); | 883 if (input_event_queue_) { |
| 875 // render_thread may be NULL in tests. | 884 input_event_queue_->DispatchRafAlignedInput( |
| 876 InputHandlerManager* input_handler_manager = | 885 ui::EventTimeStampFromSeconds(frame_time_sec)); |
| 877 render_thread ? render_thread->input_handler_manager() : NULL; | 886 } |
| 878 if (input_handler_manager) | |
| 879 input_handler_manager->ProcessRafAlignedInputOnMainThread( | |
| 880 routing_id_, ui::EventTimeStampFromSeconds(frame_time_sec)); | |
| 881 | 887 |
| 882 GetWebWidget()->BeginFrame(frame_time_sec); | 888 GetWebWidget()->BeginFrame(frame_time_sec); |
| 883 } | 889 } |
| 884 | 890 |
| 885 void RenderWidget::RequestNewCompositorFrameSink( | 891 void RenderWidget::RequestNewCompositorFrameSink( |
| 886 bool fallback, | 892 bool fallback, |
| 887 const CompositorFrameSinkCallback& callback) { | 893 const CompositorFrameSinkCallback& callback) { |
| 888 DCHECK(GetWebWidget()); | 894 DCHECK(GetWebWidget()); |
| 889 // For widgets that are never visible, we don't start the compositor, so we | 895 // For widgets that are never visible, we don't start the compositor, so we |
| 890 // never get a request for a cc::CompositorFrameSink. | 896 // never get a request for a cc::CompositorFrameSink. |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 void RenderWidget::OnDidOverscroll(const ui::DidOverscrollParams& params) { | 1036 void RenderWidget::OnDidOverscroll(const ui::DidOverscrollParams& params) { |
| 1031 Send(new InputHostMsg_DidOverscroll(routing_id_, params)); | 1037 Send(new InputHostMsg_DidOverscroll(routing_id_, params)); |
| 1032 } | 1038 } |
| 1033 | 1039 |
| 1034 void RenderWidget::OnInputEventAck( | 1040 void RenderWidget::OnInputEventAck( |
| 1035 std::unique_ptr<InputEventAck> input_event_ack) { | 1041 std::unique_ptr<InputEventAck> input_event_ack) { |
| 1036 SendOrCrash( | 1042 SendOrCrash( |
| 1037 new InputHostMsg_HandleInputEvent_ACK(routing_id_, *input_event_ack)); | 1043 new InputHostMsg_HandleInputEvent_ACK(routing_id_, *input_event_ack)); |
| 1038 } | 1044 } |
| 1039 | 1045 |
| 1040 void RenderWidget::NotifyInputEventHandled( | |
| 1041 blink::WebInputEvent::Type handled_type, | |
| 1042 blink::WebInputEventResult result, | |
| 1043 InputEventAckState ack_result) { | |
| 1044 RenderThreadImpl* render_thread = RenderThreadImpl::current(); | |
| 1045 InputHandlerManager* input_handler_manager = | |
| 1046 render_thread ? render_thread->input_handler_manager() : NULL; | |
| 1047 if (input_handler_manager) { | |
| 1048 input_handler_manager->NotifyInputEventHandledOnMainThread( | |
| 1049 routing_id_, handled_type, result, ack_result); | |
| 1050 } | |
| 1051 } | |
| 1052 | |
| 1053 void RenderWidget::SetInputHandler(RenderWidgetInputHandler* input_handler) { | 1046 void RenderWidget::SetInputHandler(RenderWidgetInputHandler* input_handler) { |
| 1054 // Nothing to do here. RenderWidget created the |input_handler| and will take | 1047 // Nothing to do here. RenderWidget created the |input_handler| and will take |
| 1055 // ownership of it. We just verify here that we don't already have an input | 1048 // ownership of it. We just verify here that we don't already have an input |
| 1056 // handler. | 1049 // handler. |
| 1057 DCHECK(!input_handler_); | 1050 DCHECK(!input_handler_); |
| 1058 } | 1051 } |
| 1059 | 1052 |
| 1060 void RenderWidget::ShowVirtualKeyboard() { | 1053 void RenderWidget::ShowVirtualKeyboard() { |
| 1061 UpdateTextInputStateInternal(true, false); | 1054 UpdateTextInputStateInternal(true, false); |
| 1062 } | 1055 } |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1305 StartCompositor(); | 1298 StartCompositor(); |
| 1306 DCHECK_NE(MSG_ROUTING_NONE, routing_id_); | 1299 DCHECK_NE(MSG_ROUTING_NONE, routing_id_); |
| 1307 compositor_->SetFrameSinkId( | 1300 compositor_->SetFrameSinkId( |
| 1308 cc::FrameSinkId(RenderThread::Get()->GetClientId(), routing_id_)); | 1301 cc::FrameSinkId(RenderThread::Get()->GetClientId(), routing_id_)); |
| 1309 | 1302 |
| 1310 RenderThreadImpl* render_thread = RenderThreadImpl::current(); | 1303 RenderThreadImpl* render_thread = RenderThreadImpl::current(); |
| 1311 // render_thread may be NULL in tests. | 1304 // render_thread may be NULL in tests. |
| 1312 InputHandlerManager* input_handler_manager = | 1305 InputHandlerManager* input_handler_manager = |
| 1313 render_thread ? render_thread->input_handler_manager() : NULL; | 1306 render_thread ? render_thread->input_handler_manager() : NULL; |
| 1314 if (input_handler_manager) { | 1307 if (input_handler_manager) { |
| 1308 input_event_queue_ = new MainThreadEventQueueWithRenderWidget( |
| 1309 weak_ptr_factory_.GetWeakPtr(), render_thread->GetRendererScheduler()); |
| 1315 input_handler_manager->AddInputHandler( | 1310 input_handler_manager->AddInputHandler( |
| 1316 routing_id_, compositor()->GetInputHandler(), | 1311 routing_id_, compositor()->GetInputHandler(), input_event_queue_, |
| 1317 weak_ptr_factory_.GetWeakPtr(), | 1312 weak_ptr_factory_.GetWeakPtr(), |
| 1318 compositor_deps_->IsScrollAnimatorEnabled()); | 1313 compositor_deps_->IsScrollAnimatorEnabled()); |
| 1319 has_added_input_handler_ = true; | 1314 has_added_input_handler_ = true; |
| 1320 } | 1315 } |
| 1321 | 1316 |
| 1322 return compositor_.get(); | 1317 return compositor_.get(); |
| 1323 } | 1318 } |
| 1324 | 1319 |
| 1325 void RenderWidget::WillCloseLayerTreeView() { | 1320 void RenderWidget::WillCloseLayerTreeView() { |
| 1326 if (host_closing_) | 1321 if (host_closing_) |
| (...skipping 987 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2314 // browser side (https://crbug.com/669219). | 2309 // browser side (https://crbug.com/669219). |
| 2315 // If there is no WebFrameWidget, then there will be no | 2310 // If there is no WebFrameWidget, then there will be no |
| 2316 // InputMethodControllers for a WebLocalFrame. | 2311 // InputMethodControllers for a WebLocalFrame. |
| 2317 return nullptr; | 2312 return nullptr; |
| 2318 } | 2313 } |
| 2319 return static_cast<blink::WebFrameWidget*>(GetWebWidget()) | 2314 return static_cast<blink::WebFrameWidget*>(GetWebWidget()) |
| 2320 ->GetActiveWebInputMethodController(); | 2315 ->GetActiveWebInputMethodController(); |
| 2321 } | 2316 } |
| 2322 | 2317 |
| 2323 } // namespace content | 2318 } // namespace content |
| OLD | NEW |