| 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/renderer/input/input_handler_manager.h" | 8 #include "content/renderer/input/input_handler_manager.h" |
| 9 #include "content/renderer/mus/render_widget_mus_connection.h" | 9 #include "content/renderer/mus/render_widget_mus_connection.h" |
| 10 #include "ui/events/blink/blink_event_util.h" | 10 #include "ui/events/blink/blink_event_util.h" |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 void CompositorMusConnection::OnConnectionLostOnMainThread() { | 88 void CompositorMusConnection::OnConnectionLostOnMainThread() { |
| 89 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 89 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 90 RenderWidgetMusConnection* connection = | 90 RenderWidgetMusConnection* connection = |
| 91 RenderWidgetMusConnection::Get(routing_id_); | 91 RenderWidgetMusConnection::Get(routing_id_); |
| 92 if (!connection) | 92 if (!connection) |
| 93 return; | 93 return; |
| 94 connection->OnConnectionLost(); | 94 connection->OnConnectionLost(); |
| 95 } | 95 } |
| 96 | 96 |
| 97 void CompositorMusConnection::OnWindowInputEventOnMainThread( | 97 void CompositorMusConnection::OnWindowInputEventOnMainThread( |
| 98 ui::ScopedWebInputEvent web_event, | 98 blink::ScopedCoalescedWebInputEvent web_event, |
| 99 const base::Callback<void(EventResult)>& ack) { | 99 const base::Callback<void(EventResult)>& ack) { |
| 100 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 100 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 101 RenderWidgetMusConnection* connection = | 101 RenderWidgetMusConnection* connection = |
| 102 RenderWidgetMusConnection::Get(routing_id_); | 102 RenderWidgetMusConnection::Get(routing_id_); |
| 103 if (!connection) { | 103 if (!connection) { |
| 104 ack.Run(EventResult::UNHANDLED); | 104 ack.Run(EventResult::UNHANDLED); |
| 105 return; | 105 return; |
| 106 } | 106 } |
| 107 connection->OnWindowInputEvent(std::move(web_event), ack); | 107 connection->OnWindowInputEvent(std::move(web_event), ack); |
| 108 } | 108 } |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 | 179 |
| 180 void CompositorMusConnection::OnWindowInputEvent( | 180 void CompositorMusConnection::OnWindowInputEvent( |
| 181 ui::Window* window, | 181 ui::Window* window, |
| 182 const ui::Event& event, | 182 const ui::Event& event, |
| 183 std::unique_ptr<base::Callback<void(EventResult)>>* ack_callback) { | 183 std::unique_ptr<base::Callback<void(EventResult)>>* ack_callback) { |
| 184 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); | 184 DCHECK(compositor_task_runner_->BelongsToCurrentThread()); |
| 185 | 185 |
| 186 // Take ownership of the callback, indicating that we will handle it. | 186 // Take ownership of the callback, indicating that we will handle it. |
| 187 std::unique_ptr<base::Callback<void(EventResult)>> callback = | 187 std::unique_ptr<base::Callback<void(EventResult)>> callback = |
| 188 std::move(*ack_callback); | 188 std::move(*ack_callback); |
| 189 ui::ScopedWebInputEvent web_event(Convert(event).release()); | 189 blink::ScopedCoalescedWebInputEvent web_event( |
| 190 new blink::CoalescedWebInputEvent(Convert(event).release())); |
| 190 // TODO(sad): We probably need to plumb LatencyInfo through Mus. | 191 // TODO(sad): We probably need to plumb LatencyInfo through Mus. |
| 191 ui::LatencyInfo info; | 192 ui::LatencyInfo info; |
| 192 input_handler_manager_->HandleInputEvent( | 193 input_handler_manager_->HandleInputEvent( |
| 193 routing_id_, std::move(web_event), info, | 194 routing_id_, std::move(web_event), info, |
| 194 base::Bind( | 195 base::Bind( |
| 195 &CompositorMusConnection::DidHandleWindowInputEventAndOverscroll, | 196 &CompositorMusConnection::DidHandleWindowInputEventAndOverscroll, |
| 196 this, base::Passed(std::move(callback)))); | 197 this, base::Passed(std::move(callback)))); |
| 197 } | 198 } |
| 198 | 199 |
| 199 void CompositorMusConnection::DidHandleWindowInputEventAndOverscroll( | 200 void CompositorMusConnection::DidHandleWindowInputEventAndOverscroll( |
| 200 std::unique_ptr<base::Callback<void(EventResult)>> ack_callback, | 201 std::unique_ptr<base::Callback<void(EventResult)>> ack_callback, |
| 201 InputEventAckState ack_state, | 202 InputEventAckState ack_state, |
| 202 ui::ScopedWebInputEvent web_event, | 203 blink::ScopedCoalescedWebInputEvent web_event, |
| 203 const ui::LatencyInfo& latency_info, | 204 const ui::LatencyInfo& latency_info, |
| 204 std::unique_ptr<ui::DidOverscrollParams> overscroll_params) { | 205 std::unique_ptr<ui::DidOverscrollParams> overscroll_params) { |
| 205 // TODO(jonross): We probably need to ack the event based on the consumed | 206 // TODO(jonross): We probably need to ack the event based on the consumed |
| 206 // state. | 207 // state. |
| 207 if (ack_state != INPUT_EVENT_ACK_STATE_NOT_CONSUMED) { | 208 if (ack_state != INPUT_EVENT_ACK_STATE_NOT_CONSUMED) { |
| 208 // We took the ownership of the callback, so we need to send the ack, and | 209 // We took the ownership of the callback, so we need to send the ack, and |
| 209 // mark the event as not consumed to preserve existing behavior. | 210 // mark the event as not consumed to preserve existing behavior. |
| 210 ack_callback->Run(EventResult::UNHANDLED); | 211 ack_callback->Run(EventResult::UNHANDLED); |
| 211 return; | 212 return; |
| 212 } | 213 } |
| 213 base::Callback<void(EventResult)> ack = | 214 base::Callback<void(EventResult)> ack = |
| 214 base::Bind(&::DoNothingWithEventResult); | 215 base::Bind(&::DoNothingWithEventResult); |
| 215 const bool send_ack = | 216 const bool send_ack = |
| 216 ui::WebInputEventTraits::ShouldBlockEventStream(*web_event); | 217 ui::WebInputEventTraits::ShouldBlockEventStream(web_event->event()); |
| 217 if (send_ack) { | 218 if (send_ack) { |
| 218 // Ultimately, this ACK needs to go back to the Mus client lib which is not | 219 // Ultimately, this ACK needs to go back to the Mus client lib which is not |
| 219 // thread-safe and lives on the compositor thread. For ACKs that are passed | 220 // thread-safe and lives on the compositor thread. For ACKs that are passed |
| 220 // to the main thread we pass them back to the compositor thread via | 221 // to the main thread we pass them back to the compositor thread via |
| 221 // OnWindowInputEventAckOnMainThread. | 222 // OnWindowInputEventAckOnMainThread. |
| 222 ack = | 223 ack = |
| 223 base::Bind(&CompositorMusConnection::OnWindowInputEventAckOnMainThread, | 224 base::Bind(&CompositorMusConnection::OnWindowInputEventAckOnMainThread, |
| 224 this, *ack_callback); | 225 this, *ack_callback); |
| 225 } else { | 226 } else { |
| 226 // We took the ownership of the callback, so we need to send the ack, and | 227 // We took the ownership of the callback, so we need to send the ack, and |
| 227 // mark the event as not consumed to preserve existing behavior. | 228 // mark the event as not consumed to preserve existing behavior. |
| 228 ack_callback->Run(EventResult::UNHANDLED); | 229 ack_callback->Run(EventResult::UNHANDLED); |
| 229 } | 230 } |
| 230 ack_callback.reset(); | 231 ack_callback.reset(); |
| 231 | 232 |
| 232 main_task_runner_->PostTask( | 233 main_task_runner_->PostTask( |
| 233 FROM_HERE, | 234 FROM_HERE, |
| 234 base::Bind(&CompositorMusConnection::OnWindowInputEventOnMainThread, this, | 235 base::Bind(&CompositorMusConnection::OnWindowInputEventOnMainThread, this, |
| 235 base::Passed(std::move(web_event)), ack)); | 236 base::Passed(std::move(web_event)), ack)); |
| 236 } | 237 } |
| 237 | 238 |
| 238 } // namespace content | 239 } // namespace content |
| OLD | NEW |