OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "device/hid/hid_service_linux.h" | 5 #include "device/hid/hid_service_linux.h" |
6 | 6 |
7 #include <fcntl.h> | 7 #include <fcntl.h> |
8 #include <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) | 205 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) |
206 : file_task_runner_(file_task_runner), weak_factory_(this) { | 206 : file_task_runner_(file_task_runner), weak_factory_(this) { |
207 task_runner_ = base::ThreadTaskRunnerHandle::Get(); | 207 task_runner_ = base::ThreadTaskRunnerHandle::Get(); |
208 scoped_ptr<FileThreadHelper> helper( | 208 scoped_ptr<FileThreadHelper> helper( |
209 new FileThreadHelper(weak_factory_.GetWeakPtr(), task_runner_)); | 209 new FileThreadHelper(weak_factory_.GetWeakPtr(), task_runner_)); |
210 helper_ = helper.get(); | 210 helper_ = helper.get(); |
211 file_task_runner_->PostTask( | 211 file_task_runner_->PostTask( |
212 FROM_HERE, base::Bind(&FileThreadHelper::Start, base::Passed(&helper))); | 212 FROM_HERE, base::Bind(&FileThreadHelper::Start, base::Passed(&helper))); |
213 } | 213 } |
214 | 214 |
| 215 HidServiceLinux::~HidServiceLinux() { |
| 216 file_task_runner_->DeleteSoon(FROM_HERE, helper_); |
| 217 } |
| 218 |
215 void HidServiceLinux::Connect(const HidDeviceId& device_id, | 219 void HidServiceLinux::Connect(const HidDeviceId& device_id, |
216 const ConnectCallback& callback) { | 220 const ConnectCallback& callback) { |
217 DCHECK(thread_checker_.CalledOnValidThread()); | 221 DCHECK(thread_checker_.CalledOnValidThread()); |
218 | 222 |
219 const auto& map_entry = devices().find(device_id); | 223 const auto& map_entry = devices().find(device_id); |
220 if (map_entry == devices().end()) { | 224 if (map_entry == devices().end()) { |
221 task_runner_->PostTask(FROM_HERE, base::Bind(callback, nullptr)); | 225 task_runner_->PostTask(FROM_HERE, base::Bind(callback, nullptr)); |
222 return; | 226 return; |
223 } | 227 } |
224 scoped_refptr<HidDeviceInfoLinux> device_info = | 228 scoped_refptr<HidDeviceInfoLinux> device_info = |
225 static_cast<HidDeviceInfoLinux*>(map_entry->second.get()); | 229 static_cast<HidDeviceInfoLinux*>(map_entry->second.get()); |
226 | 230 |
227 scoped_ptr<ConnectParams> params(new ConnectParams( | 231 scoped_ptr<ConnectParams> params(new ConnectParams( |
228 device_info, callback, task_runner_, file_task_runner_)); | 232 device_info, callback, task_runner_, file_task_runner_)); |
229 | 233 |
230 #if defined(OS_CHROMEOS) | 234 #if defined(OS_CHROMEOS) |
231 chromeos::PermissionBrokerClient* client = | 235 chromeos::PermissionBrokerClient* client = |
232 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient(); | 236 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient(); |
233 DCHECK(client) << "Could not get permission broker client."; | 237 DCHECK(client) << "Could not get permission broker client."; |
234 client->OpenPath( | 238 client->OpenPath( |
235 device_info->device_node(), | 239 device_info->device_node(), |
236 base::Bind(&HidServiceLinux::OnPathOpened, base::Passed(¶ms))); | 240 base::Bind(&HidServiceLinux::OnPathOpened, base::Passed(¶ms))); |
237 #else | 241 #else |
238 file_task_runner_->PostTask(FROM_HERE, | 242 file_task_runner_->PostTask(FROM_HERE, |
239 base::Bind(&HidServiceLinux::OpenOnBlockingThread, | 243 base::Bind(&HidServiceLinux::OpenOnBlockingThread, |
240 base::Passed(¶ms))); | 244 base::Passed(¶ms))); |
241 #endif // defined(OS_CHROMEOS) | 245 #endif // defined(OS_CHROMEOS) |
242 } | 246 } |
243 | 247 |
244 HidServiceLinux::~HidServiceLinux() { | |
245 file_task_runner_->DeleteSoon(FROM_HERE, helper_); | |
246 } | |
247 | |
248 #if defined(OS_CHROMEOS) | 248 #if defined(OS_CHROMEOS) |
249 | 249 |
250 // static | 250 // static |
251 void HidServiceLinux::OnPathOpened(scoped_ptr<ConnectParams> params, | 251 void HidServiceLinux::OnPathOpened(scoped_ptr<ConnectParams> params, |
252 dbus::FileDescriptor fd) { | 252 dbus::FileDescriptor fd) { |
253 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner = | 253 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner = |
254 params->file_task_runner; | 254 params->file_task_runner; |
255 file_task_runner->PostTask( | 255 file_task_runner->PostTask( |
256 FROM_HERE, base::Bind(&HidServiceLinux::ValidateFdOnBlockingThread, | 256 FROM_HERE, base::Bind(&HidServiceLinux::ValidateFdOnBlockingThread, |
257 base::Passed(¶ms), base::Passed(&fd))); | 257 base::Passed(¶ms), base::Passed(&fd))); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 | 329 |
330 // static | 330 // static |
331 void HidServiceLinux::CreateConnection(scoped_ptr<ConnectParams> params) { | 331 void HidServiceLinux::CreateConnection(scoped_ptr<ConnectParams> params) { |
332 DCHECK(params->device_file.IsValid()); | 332 DCHECK(params->device_file.IsValid()); |
333 params->callback.Run(make_scoped_refptr( | 333 params->callback.Run(make_scoped_refptr( |
334 new HidConnectionLinux(params->device_info, params->device_file.Pass(), | 334 new HidConnectionLinux(params->device_info, params->device_file.Pass(), |
335 params->file_task_runner))); | 335 params->file_task_runner))); |
336 } | 336 } |
337 | 337 |
338 } // namespace device | 338 } // namespace device |
OLD | NEW |