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

Side by Side Diff: device/hid/hid_service_linux.cc

Issue 1681383002: Add path open errors from the permission broker to the device log. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_request_access
Patch Set: Addresses stevenjb@'s comments. Created 4 years, 10 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
« no previous file with comments | « device/hid/hid_service_linux.h ('k') | device/serial/serial_io_handler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stdint.h> 8 #include <stdint.h>
9 #include <limits> 9 #include <limits>
10 #include <string> 10 #include <string>
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 scoped_refptr<HidDeviceInfoLinux> device_info = 234 scoped_refptr<HidDeviceInfoLinux> device_info =
235 static_cast<HidDeviceInfoLinux*>(map_entry->second.get()); 235 static_cast<HidDeviceInfoLinux*>(map_entry->second.get());
236 236
237 scoped_ptr<ConnectParams> params(new ConnectParams( 237 scoped_ptr<ConnectParams> params(new ConnectParams(
238 device_info, callback, task_runner_, file_task_runner_)); 238 device_info, callback, task_runner_, file_task_runner_));
239 239
240 #if defined(OS_CHROMEOS) 240 #if defined(OS_CHROMEOS)
241 chromeos::PermissionBrokerClient* client = 241 chromeos::PermissionBrokerClient* client =
242 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient(); 242 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
243 DCHECK(client) << "Could not get permission broker client."; 243 DCHECK(client) << "Could not get permission broker client.";
244 chromeos::PermissionBrokerClient::ErrorCallback error_callback =
245 base::Bind(&HidServiceLinux::OnPathOpenError,
246 params->device_info->device_node(), params->callback);
244 client->OpenPath( 247 client->OpenPath(
245 device_info->device_node(), 248 device_info->device_node(),
246 base::Bind(&HidServiceLinux::OnPathOpened, base::Passed(&params))); 249 base::Bind(&HidServiceLinux::OnPathOpenComplete, base::Passed(&params)),
250 error_callback);
247 #else 251 #else
248 file_task_runner_->PostTask(FROM_HERE, 252 file_task_runner_->PostTask(FROM_HERE,
249 base::Bind(&HidServiceLinux::OpenOnBlockingThread, 253 base::Bind(&HidServiceLinux::OpenOnBlockingThread,
250 base::Passed(&params))); 254 base::Passed(&params)));
251 #endif // defined(OS_CHROMEOS) 255 #endif // defined(OS_CHROMEOS)
252 } 256 }
253 257
254 #if defined(OS_CHROMEOS) 258 #if defined(OS_CHROMEOS)
255 259
256 // static 260 // static
257 void HidServiceLinux::OnPathOpened(scoped_ptr<ConnectParams> params, 261 void HidServiceLinux::OnPathOpenComplete(scoped_ptr<ConnectParams> params,
258 dbus::FileDescriptor fd) { 262 dbus::FileDescriptor fd) {
259 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner = 263 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner =
260 params->file_task_runner; 264 params->file_task_runner;
261 file_task_runner->PostTask( 265 file_task_runner->PostTask(
262 FROM_HERE, base::Bind(&HidServiceLinux::ValidateFdOnBlockingThread, 266 FROM_HERE, base::Bind(&HidServiceLinux::ValidateFdOnBlockingThread,
263 base::Passed(&params), base::Passed(&fd))); 267 base::Passed(&params), base::Passed(&fd)));
264 } 268 }
265 269
266 // static 270 // static
271 void HidServiceLinux::OnPathOpenError(const std::string& device_path,
272 const ConnectCallback& callback,
273 const std::string& error_name,
274 const std::string& error_message) {
275 HID_LOG(EVENT) << "Permission broker failed to open '" << device_path
276 << "': " << error_name << ": " << error_message;
277 callback.Run(nullptr);
278 }
279
280 // static
267 void HidServiceLinux::ValidateFdOnBlockingThread( 281 void HidServiceLinux::ValidateFdOnBlockingThread(
268 scoped_ptr<ConnectParams> params, 282 scoped_ptr<ConnectParams> params,
269 dbus::FileDescriptor fd) { 283 dbus::FileDescriptor fd) {
270 base::ThreadRestrictions::AssertIOAllowed(); 284 base::ThreadRestrictions::AssertIOAllowed();
271
272 fd.CheckValidity(); 285 fd.CheckValidity();
273 if (fd.is_valid()) { 286 DCHECK(fd.is_valid());
274 params->device_file = base::File(fd.TakeValue()); 287 params->device_file = base::File(fd.TakeValue());
275 FinishOpen(std::move(params)); 288 FinishOpen(std::move(params));
276 } else {
277 HID_LOG(EVENT) << "Permission broker denied access to '"
278 << params->device_info->device_node() << "'.";
279 params->task_runner->PostTask(FROM_HERE,
280 base::Bind(params->callback, nullptr));
281 }
282 } 289 }
283 290
284 #else 291 #else
285 292
286 // static 293 // static
287 void HidServiceLinux::OpenOnBlockingThread(scoped_ptr<ConnectParams> params) { 294 void HidServiceLinux::OpenOnBlockingThread(scoped_ptr<ConnectParams> params) {
288 base::ThreadRestrictions::AssertIOAllowed(); 295 base::ThreadRestrictions::AssertIOAllowed();
289 scoped_refptr<base::SingleThreadTaskRunner> task_runner = params->task_runner; 296 scoped_refptr<base::SingleThreadTaskRunner> task_runner = params->task_runner;
290 297
291 base::FilePath device_path(params->device_info->device_node()); 298 base::FilePath device_path(params->device_info->device_node());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 341
335 // static 342 // static
336 void HidServiceLinux::CreateConnection(scoped_ptr<ConnectParams> params) { 343 void HidServiceLinux::CreateConnection(scoped_ptr<ConnectParams> params) {
337 DCHECK(params->device_file.IsValid()); 344 DCHECK(params->device_file.IsValid());
338 params->callback.Run(make_scoped_refptr(new HidConnectionLinux( 345 params->callback.Run(make_scoped_refptr(new HidConnectionLinux(
339 params->device_info, std::move(params->device_file), 346 params->device_info, std::move(params->device_file),
340 params->file_task_runner))); 347 params->file_task_runner)));
341 } 348 }
342 349
343 } // namespace device 350 } // namespace device
OLDNEW
« no previous file with comments | « device/hid/hid_service_linux.h ('k') | device/serial/serial_io_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698