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

Side by Side Diff: ui/events/ozone/evdev/input_device_factory_evdev.cc

Issue 1868363002: Replace scoped_ptr with std::unique_ptr in //ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scopedptrcc
Patch Set: scopedptrui: rebase-make_scoped_ptr Created 4 years, 8 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 "ui/events/ozone/evdev/input_device_factory_evdev.h" 5 #include "ui/events/ozone/evdev/input_device_factory_evdev.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <linux/input.h> 8 #include <linux/input.h>
9 #include <stddef.h> 9 #include <stddef.h>
10
10 #include <utility> 11 #include <utility>
11 12
13 #include "base/memory/ptr_util.h"
12 #include "base/stl_util.h" 14 #include "base/stl_util.h"
13 #include "base/thread_task_runner_handle.h" 15 #include "base/thread_task_runner_handle.h"
14 #include "base/threading/worker_pool.h" 16 #include "base/threading/worker_pool.h"
15 #include "base/time/time.h" 17 #include "base/time/time.h"
16 #include "base/trace_event/trace_event.h" 18 #include "base/trace_event/trace_event.h"
17 #include "ui/events/devices/device_data_manager.h" 19 #include "ui/events/devices/device_data_manager.h"
18 #include "ui/events/devices/device_util_linux.h" 20 #include "ui/events/devices/device_util_linux.h"
19 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h" 21 #include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h"
20 #include "ui/events/ozone/evdev/event_converter_evdev_impl.h" 22 #include "ui/events/ozone/evdev/event_converter_evdev_impl.h"
21 #include "ui/events/ozone/evdev/event_device_info.h" 23 #include "ui/events/ozone/evdev/event_device_info.h"
22 #include "ui/events/ozone/evdev/tablet_event_converter_evdev.h" 24 #include "ui/events/ozone/evdev/tablet_event_converter_evdev.h"
23 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h" 25 #include "ui/events/ozone/evdev/touch_event_converter_evdev.h"
24 26
25 #if defined(USE_EVDEV_GESTURES) 27 #if defined(USE_EVDEV_GESTURES)
26 #include "ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h" 28 #include "ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h"
27 #include "ui/events/ozone/evdev/libgestures_glue/gesture_feedback.h" 29 #include "ui/events/ozone/evdev/libgestures_glue/gesture_feedback.h"
28 #include "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cr os.h" 30 #include "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cr os.h"
29 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h" 31 #include "ui/events/ozone/evdev/libgestures_glue/gesture_property_provider.h"
30 #endif 32 #endif
31 33
32 #ifndef EVIOCSCLOCKID 34 #ifndef EVIOCSCLOCKID
33 #define EVIOCSCLOCKID _IOW('E', 0xa0, int) 35 #define EVIOCSCLOCKID _IOW('E', 0xa0, int)
34 #endif 36 #endif
35 37
36 namespace ui { 38 namespace ui {
37 39
38 namespace { 40 namespace {
39 41
40 typedef base::Callback<void(scoped_ptr<EventConverterEvdev>)> 42 typedef base::Callback<void(std::unique_ptr<EventConverterEvdev>)>
41 OpenInputDeviceReplyCallback; 43 OpenInputDeviceReplyCallback;
42 44
43 struct OpenInputDeviceParams { 45 struct OpenInputDeviceParams {
44 // Unique identifier for the new device. 46 // Unique identifier for the new device.
45 int id; 47 int id;
46 48
47 // Device path to open. 49 // Device path to open.
48 base::FilePath path; 50 base::FilePath path;
49 51
50 // Dispatcher for events. Call on UI thread only. 52 // Dispatcher for events. Call on UI thread only.
(...skipping 24 matching lines...) Expand all
75 bool value) { 77 bool value) {
76 GesturesProp* property = provider->GetProperty(id, name); 78 GesturesProp* property = provider->GetProperty(id, name);
77 if (property) { 79 if (property) {
78 std::vector<bool> values(1, value); 80 std::vector<bool> values(1, value);
79 property->SetBoolValue(values); 81 property->SetBoolValue(values);
80 } 82 }
81 } 83 }
82 84
83 #endif 85 #endif
84 86
85 scoped_ptr<EventConverterEvdev> CreateConverter( 87 std::unique_ptr<EventConverterEvdev> CreateConverter(
86 const OpenInputDeviceParams& params, 88 const OpenInputDeviceParams& params,
87 int fd, 89 int fd,
88 const EventDeviceInfo& devinfo) { 90 const EventDeviceInfo& devinfo) {
89 #if defined(USE_EVDEV_GESTURES) 91 #if defined(USE_EVDEV_GESTURES)
90 // Touchpad or mouse: use gestures library. 92 // Touchpad or mouse: use gestures library.
91 // EventReaderLibevdevCros -> GestureInterpreterLibevdevCros -> DispatchEvent 93 // EventReaderLibevdevCros -> GestureInterpreterLibevdevCros -> DispatchEvent
92 if (devinfo.HasTouchpad() || devinfo.HasMouse()) { 94 if (devinfo.HasTouchpad() || devinfo.HasMouse()) {
93 scoped_ptr<GestureInterpreterLibevdevCros> gesture_interp = 95 std::unique_ptr<GestureInterpreterLibevdevCros> gesture_interp =
94 make_scoped_ptr(new GestureInterpreterLibevdevCros( 96 base::WrapUnique(new GestureInterpreterLibevdevCros(
95 params.id, params.cursor, params.gesture_property_provider, 97 params.id, params.cursor, params.gesture_property_provider,
96 params.dispatcher)); 98 params.dispatcher));
97 return make_scoped_ptr(new EventReaderLibevdevCros( 99 return base::WrapUnique(new EventReaderLibevdevCros(
98 fd, params.path, params.id, devinfo, std::move(gesture_interp))); 100 fd, params.path, params.id, devinfo, std::move(gesture_interp)));
99 } 101 }
100 #endif 102 #endif
101 103
102 // Touchscreen: use TouchEventConverterEvdev. 104 // Touchscreen: use TouchEventConverterEvdev.
103 if (devinfo.HasTouchscreen()) { 105 if (devinfo.HasTouchscreen()) {
104 scoped_ptr<TouchEventConverterEvdev> converter(new TouchEventConverterEvdev( 106 std::unique_ptr<TouchEventConverterEvdev> converter(
105 fd, params.path, params.id, devinfo, params.dispatcher)); 107 new TouchEventConverterEvdev(fd, params.path, params.id, devinfo,
108 params.dispatcher));
106 converter->Initialize(devinfo); 109 converter->Initialize(devinfo);
107 return std::move(converter); 110 return std::move(converter);
108 } 111 }
109 112
110 // Graphics tablet 113 // Graphics tablet
111 if (devinfo.HasTablet()) 114 if (devinfo.HasTablet())
112 return make_scoped_ptr<EventConverterEvdev>(new TabletEventConverterEvdev( 115 return base::WrapUnique<EventConverterEvdev>(new TabletEventConverterEvdev(
113 fd, params.path, params.id, params.cursor, devinfo, params.dispatcher)); 116 fd, params.path, params.id, params.cursor, devinfo, params.dispatcher));
114 117
115 // Everything else: use EventConverterEvdevImpl. 118 // Everything else: use EventConverterEvdevImpl.
116 return make_scoped_ptr<EventConverterEvdevImpl>(new EventConverterEvdevImpl( 119 return base::WrapUnique<EventConverterEvdevImpl>(new EventConverterEvdevImpl(
117 fd, params.path, params.id, devinfo, params.cursor, params.dispatcher)); 120 fd, params.path, params.id, devinfo, params.cursor, params.dispatcher));
118 } 121 }
119 122
120 // Open an input device. Opening may put the calling thread to sleep, and 123 // Open an input device. Opening may put the calling thread to sleep, and
121 // therefore should be run on a thread where latency is not critical. We 124 // therefore should be run on a thread where latency is not critical. We
122 // run it on a thread from the worker pool. 125 // run it on a thread from the worker pool.
123 // 126 //
124 // This takes a TaskRunner and runs the reply on that thread, so that we 127 // This takes a TaskRunner and runs the reply on that thread, so that we
125 // can hop threads if necessary (back to the UI thread). 128 // can hop threads if necessary (back to the UI thread).
126 void OpenInputDevice(scoped_ptr<OpenInputDeviceParams> params, 129 void OpenInputDevice(std::unique_ptr<OpenInputDeviceParams> params,
127 scoped_refptr<base::TaskRunner> reply_runner, 130 scoped_refptr<base::TaskRunner> reply_runner,
128 const OpenInputDeviceReplyCallback& reply_callback) { 131 const OpenInputDeviceReplyCallback& reply_callback) {
129 const base::FilePath& path = params->path; 132 const base::FilePath& path = params->path;
130 scoped_ptr<EventConverterEvdev> converter; 133 std::unique_ptr<EventConverterEvdev> converter;
131 134
132 TRACE_EVENT1("evdev", "OpenInputDevice", "path", path.value()); 135 TRACE_EVENT1("evdev", "OpenInputDevice", "path", path.value());
133 136
134 int fd = open(path.value().c_str(), O_RDWR | O_NONBLOCK); 137 int fd = open(path.value().c_str(), O_RDWR | O_NONBLOCK);
135 if (fd < 0) { 138 if (fd < 0) {
136 PLOG(ERROR) << "Cannot open '" << path.value(); 139 PLOG(ERROR) << "Cannot open '" << path.value();
137 reply_runner->PostTask( 140 reply_runner->PostTask(
138 FROM_HERE, base::Bind(reply_callback, base::Passed(&converter))); 141 FROM_HERE, base::Bind(reply_callback, base::Passed(&converter)));
139 return; 142 return;
140 } 143 }
(...skipping 18 matching lines...) Expand all
159 162
160 // Reply with the constructed converter. 163 // Reply with the constructed converter.
161 reply_runner->PostTask(FROM_HERE, 164 reply_runner->PostTask(FROM_HERE,
162 base::Bind(reply_callback, base::Passed(&converter))); 165 base::Bind(reply_callback, base::Passed(&converter)));
163 } 166 }
164 167
165 // Close an input device. Closing may put the calling thread to sleep, and 168 // Close an input device. Closing may put the calling thread to sleep, and
166 // therefore should be run on a thread where latency is not critical. We 169 // therefore should be run on a thread where latency is not critical. We
167 // run it on the FILE thread. 170 // run it on the FILE thread.
168 void CloseInputDevice(const base::FilePath& path, 171 void CloseInputDevice(const base::FilePath& path,
169 scoped_ptr<EventConverterEvdev> converter) { 172 std::unique_ptr<EventConverterEvdev> converter) {
170 TRACE_EVENT1("evdev", "CloseInputDevice", "path", path.value()); 173 TRACE_EVENT1("evdev", "CloseInputDevice", "path", path.value());
171 converter.reset(); 174 converter.reset();
172 } 175 }
173 176
174 } // namespace 177 } // namespace
175 178
176 InputDeviceFactoryEvdev::InputDeviceFactoryEvdev( 179 InputDeviceFactoryEvdev::InputDeviceFactoryEvdev(
177 scoped_ptr<DeviceEventDispatcherEvdev> dispatcher, 180 std::unique_ptr<DeviceEventDispatcherEvdev> dispatcher,
178 CursorDelegateEvdev* cursor) 181 CursorDelegateEvdev* cursor)
179 : task_runner_(base::ThreadTaskRunnerHandle::Get()), 182 : task_runner_(base::ThreadTaskRunnerHandle::Get()),
180 cursor_(cursor), 183 cursor_(cursor),
181 #if defined(USE_EVDEV_GESTURES) 184 #if defined(USE_EVDEV_GESTURES)
182 gesture_property_provider_(new GesturePropertyProvider), 185 gesture_property_provider_(new GesturePropertyProvider),
183 #endif 186 #endif
184 dispatcher_(std::move(dispatcher)), 187 dispatcher_(std::move(dispatcher)),
185 weak_ptr_factory_(this) { 188 weak_ptr_factory_(this) {
186 } 189 }
187 190
188 InputDeviceFactoryEvdev::~InputDeviceFactoryEvdev() { 191 InputDeviceFactoryEvdev::~InputDeviceFactoryEvdev() {
189 STLDeleteValues(&converters_); 192 STLDeleteValues(&converters_);
190 } 193 }
191 194
192 void InputDeviceFactoryEvdev::AddInputDevice(int id, 195 void InputDeviceFactoryEvdev::AddInputDevice(int id,
193 const base::FilePath& path) { 196 const base::FilePath& path) {
194 scoped_ptr<OpenInputDeviceParams> params(new OpenInputDeviceParams); 197 std::unique_ptr<OpenInputDeviceParams> params(new OpenInputDeviceParams);
195 params->id = id; 198 params->id = id;
196 params->path = path; 199 params->path = path;
197 params->cursor = cursor_; 200 params->cursor = cursor_;
198 params->dispatcher = dispatcher_.get(); 201 params->dispatcher = dispatcher_.get();
199 202
200 #if defined(USE_EVDEV_GESTURES) 203 #if defined(USE_EVDEV_GESTURES)
201 params->gesture_property_provider = gesture_property_provider_.get(); 204 params->gesture_property_provider = gesture_property_provider_.get();
202 #endif 205 #endif
203 206
204 OpenInputDeviceReplyCallback reply_callback = 207 OpenInputDeviceReplyCallback reply_callback =
(...skipping 12 matching lines...) Expand all
217 void InputDeviceFactoryEvdev::RemoveInputDevice(const base::FilePath& path) { 220 void InputDeviceFactoryEvdev::RemoveInputDevice(const base::FilePath& path) {
218 DetachInputDevice(path); 221 DetachInputDevice(path);
219 } 222 }
220 223
221 void InputDeviceFactoryEvdev::OnStartupScanComplete() { 224 void InputDeviceFactoryEvdev::OnStartupScanComplete() {
222 startup_devices_enumerated_ = true; 225 startup_devices_enumerated_ = true;
223 NotifyDevicesUpdated(); 226 NotifyDevicesUpdated();
224 } 227 }
225 228
226 void InputDeviceFactoryEvdev::AttachInputDevice( 229 void InputDeviceFactoryEvdev::AttachInputDevice(
227 scoped_ptr<EventConverterEvdev> converter) { 230 std::unique_ptr<EventConverterEvdev> converter) {
228 if (converter.get()) { 231 if (converter.get()) {
229 const base::FilePath& path = converter->path(); 232 const base::FilePath& path = converter->path();
230 233
231 TRACE_EVENT1("evdev", "AttachInputDevice", "path", path.value()); 234 TRACE_EVENT1("evdev", "AttachInputDevice", "path", path.value());
232 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 235 DCHECK(task_runner_->RunsTasksOnCurrentThread());
233 236
234 // If we have an existing device, detach it. We don't want two 237 // If we have an existing device, detach it. We don't want two
235 // devices with the same name open at the same time. 238 // devices with the same name open at the same time.
236 if (converters_[path]) 239 if (converters_[path])
237 DetachInputDevice(path); 240 DetachInputDevice(path);
(...skipping 10 matching lines...) Expand all
248 251
249 --pending_device_changes_; 252 --pending_device_changes_;
250 NotifyDevicesUpdated(); 253 NotifyDevicesUpdated();
251 } 254 }
252 255
253 void InputDeviceFactoryEvdev::DetachInputDevice(const base::FilePath& path) { 256 void InputDeviceFactoryEvdev::DetachInputDevice(const base::FilePath& path) {
254 TRACE_EVENT1("evdev", "DetachInputDevice", "path", path.value()); 257 TRACE_EVENT1("evdev", "DetachInputDevice", "path", path.value());
255 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 258 DCHECK(task_runner_->RunsTasksOnCurrentThread());
256 259
257 // Remove device from map. 260 // Remove device from map.
258 scoped_ptr<EventConverterEvdev> converter(converters_[path]); 261 std::unique_ptr<EventConverterEvdev> converter(converters_[path]);
259 converters_.erase(path); 262 converters_.erase(path);
260 263
261 if (converter) { 264 if (converter) {
262 // Disable the device (to release keys/buttons/etc). 265 // Disable the device (to release keys/buttons/etc).
263 converter->SetEnabled(false); 266 converter->SetEnabled(false);
264 267
265 // Cancel libevent notifications from this converter. This part must be 268 // Cancel libevent notifications from this converter. This part must be
266 // on UI since the polling happens on UI. 269 // on UI since the polling happens on UI.
267 converter->Stop(); 270 converter->Stop();
268 271
(...skipping 13 matching lines...) Expand all
282 } 285 }
283 286
284 void InputDeviceFactoryEvdev::UpdateInputDeviceSettings( 287 void InputDeviceFactoryEvdev::UpdateInputDeviceSettings(
285 const InputDeviceSettingsEvdev& settings) { 288 const InputDeviceSettingsEvdev& settings) {
286 input_device_settings_ = settings; 289 input_device_settings_ = settings;
287 ApplyInputDeviceSettings(); 290 ApplyInputDeviceSettings();
288 } 291 }
289 292
290 void InputDeviceFactoryEvdev::GetTouchDeviceStatus( 293 void InputDeviceFactoryEvdev::GetTouchDeviceStatus(
291 const GetTouchDeviceStatusReply& reply) { 294 const GetTouchDeviceStatusReply& reply) {
292 scoped_ptr<std::string> status(new std::string); 295 std::unique_ptr<std::string> status(new std::string);
293 #if defined(USE_EVDEV_GESTURES) 296 #if defined(USE_EVDEV_GESTURES)
294 DumpTouchDeviceStatus(gesture_property_provider_.get(), status.get()); 297 DumpTouchDeviceStatus(gesture_property_provider_.get(), status.get());
295 #endif 298 #endif
296 reply.Run(std::move(status)); 299 reply.Run(std::move(status));
297 } 300 }
298 301
299 void InputDeviceFactoryEvdev::GetTouchEventLog( 302 void InputDeviceFactoryEvdev::GetTouchEventLog(
300 const base::FilePath& out_dir, 303 const base::FilePath& out_dir,
301 const GetTouchEventLogReply& reply) { 304 const GetTouchEventLogReply& reply) {
302 scoped_ptr<std::vector<base::FilePath>> log_paths( 305 std::unique_ptr<std::vector<base::FilePath>> log_paths(
303 new std::vector<base::FilePath>); 306 new std::vector<base::FilePath>);
304 #if defined(USE_EVDEV_GESTURES) 307 #if defined(USE_EVDEV_GESTURES)
305 DumpTouchEventLog(converters_, gesture_property_provider_.get(), out_dir, 308 DumpTouchEventLog(converters_, gesture_property_provider_.get(), out_dir,
306 std::move(log_paths), reply); 309 std::move(log_paths), reply);
307 #else 310 #else
308 reply.Run(std::move(log_paths)); 311 reply.Run(std::move(log_paths));
309 #endif 312 #endif
310 } 313 }
311 314
312 base::WeakPtr<InputDeviceFactoryEvdev> InputDeviceFactoryEvdev::GetWeakPtr() { 315 base::WeakPtr<InputDeviceFactoryEvdev> InputDeviceFactoryEvdev::GetWeakPtr() {
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 std::vector<int> ids; 485 std::vector<int> ids;
483 gesture_property_provider_->GetDeviceIdsByType(type, &ids); 486 gesture_property_provider_->GetDeviceIdsByType(type, &ids);
484 for (size_t i = 0; i < ids.size(); ++i) { 487 for (size_t i = 0; i < ids.size(); ++i) {
485 SetGestureBoolProperty(gesture_property_provider_.get(), ids[i], name, 488 SetGestureBoolProperty(gesture_property_provider_.get(), ids[i], name,
486 value); 489 value);
487 } 490 }
488 #endif 491 #endif
489 } 492 }
490 493
491 } // namespace ui 494 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/ozone/evdev/input_device_factory_evdev.h ('k') | ui/events/ozone/evdev/input_device_factory_evdev_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698