| 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 |