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 |