| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/mus/compositor_mus_connection.h" | 5 #include "content/renderer/mus/compositor_mus_connection.h" |
| 6 | 6 |
| 7 #include "base/single_thread_task_runner.h" | 7 #include "base/single_thread_task_runner.h" |
| 8 #include "content/common/input/web_input_event_traits.h" | 8 #include "content/common/input/web_input_event_traits.h" |
| 9 #include "content/renderer/input/input_handler_manager.h" | 9 #include "content/renderer/input/input_handler_manager.h" |
| 10 #include "content/renderer/mus/render_widget_mus_connection.h" | 10 #include "content/renderer/mus/render_widget_mus_connection.h" |
| 11 #include "mojo/converters/blink/blink_input_events_type_converters.h" | 11 #include "mojo/converters/blink/blink_input_events_type_converters.h" |
| 12 #include "ui/events/latency_info.h" | 12 #include "ui/events/latency_info.h" |
| 13 | 13 |
| 14 namespace { |
| 15 |
| 16 void DoNothingBool(bool result) {} |
| 17 |
| 18 } // namespace |
| 19 |
| 14 namespace content { | 20 namespace content { |
| 15 | 21 |
| 16 CompositorMusConnection::CompositorMusConnection( | 22 CompositorMusConnection::CompositorMusConnection( |
| 17 int routing_id, | 23 int routing_id, |
| 18 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, | 24 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner, |
| 19 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, | 25 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, |
| 20 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> request, | 26 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> request, |
| 21 InputHandlerManager* input_handler_manager) | 27 InputHandlerManager* input_handler_manager) |
| 22 : routing_id_(routing_id), | 28 : routing_id_(routing_id), |
| 23 root_(nullptr), | 29 root_(nullptr), |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 70 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 65 RenderWidgetMusConnection* connection = | 71 RenderWidgetMusConnection* connection = |
| 66 RenderWidgetMusConnection::Get(routing_id_); | 72 RenderWidgetMusConnection::Get(routing_id_); |
| 67 if (!connection) | 73 if (!connection) |
| 68 return; | 74 return; |
| 69 connection->OnConnectionLost(); | 75 connection->OnConnectionLost(); |
| 70 } | 76 } |
| 71 | 77 |
| 72 void CompositorMusConnection::OnWindowInputEventOnMainThread( | 78 void CompositorMusConnection::OnWindowInputEventOnMainThread( |
| 73 scoped_ptr<blink::WebInputEvent> web_event, | 79 scoped_ptr<blink::WebInputEvent> web_event, |
| 74 const base::Closure& ack) { | 80 const base::Callback<void(bool)>& ack) { |
| 75 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 81 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 76 RenderWidgetMusConnection* connection = | 82 RenderWidgetMusConnection* connection = |
| 77 RenderWidgetMusConnection::Get(routing_id_); | 83 RenderWidgetMusConnection::Get(routing_id_); |
| 78 if (!connection) { | 84 if (!connection) { |
| 79 ack.Run(); | 85 ack.Run(false); |
| 80 return; | 86 return; |
| 81 } | 87 } |
| 82 connection->OnWindowInputEvent(std::move(web_event), ack); | 88 connection->OnWindowInputEvent(std::move(web_event), ack); |
| 83 } | 89 } |
| 84 | 90 |
| 85 void CompositorMusConnection::OnWindowInputEventAckOnMainThread( | 91 void CompositorMusConnection::OnWindowInputEventAckOnMainThread( |
| 86 const base::Closure& ack) { | 92 const base::Callback<void(bool)>& ack, |
| 93 bool handled) { |
| 87 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 94 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 88 compositor_task_runner_->PostTask(FROM_HERE, ack); | 95 compositor_task_runner_->PostTask(FROM_HERE, base::Bind(ack, handled)); |
| 89 } | 96 } |
| 90 | 97 |
| 91 void CompositorMusConnection::OnConnectionLost( | 98 void CompositorMusConnection::OnConnectionLost( |
| 92 mus::WindowTreeConnection* connection) { | 99 mus::WindowTreeConnection* connection) { |
| 93 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); | 100 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
| 94 main_task_runner_->PostTask( | 101 main_task_runner_->PostTask( |
| 95 FROM_HERE, | 102 FROM_HERE, |
| 96 base::Bind(&CompositorMusConnection::OnConnectionLostOnMainThread, this)); | 103 base::Bind(&CompositorMusConnection::OnConnectionLostOnMainThread, this)); |
| 97 } | 104 } |
| 98 | 105 |
| 99 void CompositorMusConnection::OnEmbed(mus::Window* root) { | 106 void CompositorMusConnection::OnEmbed(mus::Window* root) { |
| 100 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); | 107 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
| 101 root_ = root; | 108 root_ = root; |
| 102 root_->set_input_event_handler(this); | 109 root_->set_input_event_handler(this); |
| 103 if (window_surface_binding_) { | 110 if (window_surface_binding_) { |
| 104 root->AttachSurface(mus::mojom::SurfaceType::DEFAULT, | 111 root->AttachSurface(mus::mojom::SurfaceType::DEFAULT, |
| 105 std::move(window_surface_binding_)); | 112 std::move(window_surface_binding_)); |
| 106 } | 113 } |
| 107 } | 114 } |
| 108 | 115 |
| 109 void CompositorMusConnection::OnWindowInputEvent( | 116 void CompositorMusConnection::OnWindowInputEvent( |
| 110 mus::Window* window, | 117 mus::Window* window, |
| 111 mus::mojom::EventPtr event, | 118 mus::mojom::EventPtr event, |
| 112 scoped_ptr<base::Closure>* ack_callback) { | 119 scoped_ptr<base::Callback<void(bool)>>* ack_callback) { |
| 113 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); | 120 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
| 114 scoped_ptr<blink::WebInputEvent> web_event = | 121 scoped_ptr<blink::WebInputEvent> web_event = |
| 115 event.To<scoped_ptr<blink::WebInputEvent>>(); | 122 event.To<scoped_ptr<blink::WebInputEvent>>(); |
| 116 // TODO(sad): We probably need to plumb LatencyInfo through Mus. | 123 // TODO(sad): We probably need to plumb LatencyInfo through Mus. |
| 117 ui::LatencyInfo info; | 124 ui::LatencyInfo info; |
| 118 InputEventAckState ack_state = input_handler_manager_->HandleInputEvent( | 125 InputEventAckState ack_state = input_handler_manager_->HandleInputEvent( |
| 119 routing_id_, web_event.get(), &info); | 126 routing_id_, web_event.get(), &info); |
| 127 // TODO(jonross): We probably need to ack the event based on the consumed |
| 128 // state. |
| 120 if (ack_state != INPUT_EVENT_ACK_STATE_NOT_CONSUMED) | 129 if (ack_state != INPUT_EVENT_ACK_STATE_NOT_CONSUMED) |
| 121 return; | 130 return; |
| 122 base::Closure ack = base::Bind(&base::DoNothing); | 131 base::Callback<void(bool)> ack = base::Bind(&::DoNothingBool); |
| 123 const bool send_ack = | 132 const bool send_ack = |
| 124 WebInputEventTraits::WillReceiveAckFromRenderer(*web_event); | 133 WebInputEventTraits::WillReceiveAckFromRenderer(*web_event); |
| 125 if (send_ack) { | 134 if (send_ack) { |
| 126 // Ultimately, this ACK needs to go back to the Mus client lib which is not | 135 // Ultimately, this ACK needs to go back to the Mus client lib which is not |
| 127 // thread-safe and lives on the compositor thread. For ACKs that are passed | 136 // thread-safe and lives on the compositor thread. For ACKs that are passed |
| 128 // to the main thread we pass them back to the compositor thread via | 137 // to the main thread we pass them back to the compositor thread via |
| 129 // OnWindowInputEventAckOnMainThread. | 138 // OnWindowInputEventAckOnMainThread. |
| 130 ack = | 139 ack = |
| 131 base::Bind(&CompositorMusConnection::OnWindowInputEventAckOnMainThread, | 140 base::Bind(&CompositorMusConnection::OnWindowInputEventAckOnMainThread, |
| 132 this, *ack_callback->get()); | 141 this, *ack_callback->get()); |
| 133 ack_callback->reset(); | 142 ack_callback->reset(); |
| 134 } | 143 } |
| 135 main_task_runner_->PostTask( | 144 main_task_runner_->PostTask( |
| 136 FROM_HERE, | 145 FROM_HERE, |
| 137 base::Bind(&CompositorMusConnection::OnWindowInputEventOnMainThread, this, | 146 base::Bind(&CompositorMusConnection::OnWindowInputEventOnMainThread, this, |
| 138 base::Passed(std::move(web_event)), ack)); | 147 base::Passed(std::move(web_event)), ack)); |
| 139 } | 148 } |
| 140 | 149 |
| 141 } // namespace content | 150 } // namespace content |
| OLD | NEW |