Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Side by Side Diff: content/renderer/mus/compositor_mus_connection.cc

Issue 1749323002: Update WindowTree::OnWindowInputEventAck to include handled (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Missing Component Build DEPS Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
OLDNEW
« no previous file with comments | « content/renderer/mus/compositor_mus_connection.h ('k') | content/renderer/mus/compositor_mus_connection_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698