// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chromeos/dbus/fake_permission_broker_client.h" #include #include #include "base/bind.h" #include "base/callback.h" #include "base/location.h" #include "base/logging.h" #include "base/posix/eintr_wrapper.h" #include "base/strings/stringprintf.h" #include "base/thread_task_runner_handle.h" #include "base/threading/worker_pool.h" #include "dbus/file_descriptor.h" namespace chromeos { namespace { const char kOpenFailedError[] = "open_failed"; // So that real devices can be accessed by tests and "Chromium OS on Linux" this // function implements a simplified version of the method implemented by the // permission broker by opening the path specified and returning the resulting // file descriptor. void OpenPathAndValidate( const std::string& path, const PermissionBrokerClient::OpenPathCallback& callback, const PermissionBrokerClient::ErrorCallback& error_callback, scoped_refptr task_runner) { int fd = HANDLE_EINTR(open(path.c_str(), O_RDWR)); if (fd < 0) { int error_code = logging::GetLastSystemErrorCode(); task_runner->PostTask( FROM_HERE, base::Bind(error_callback, kOpenFailedError, base::StringPrintf( "Failed to open '%s': %s", path.c_str(), logging::SystemErrorCodeToString(error_code).c_str()))); return; } dbus::FileDescriptor dbus_fd; dbus_fd.PutValue(fd); dbus_fd.CheckValidity(); task_runner->PostTask(FROM_HERE, base::Bind(callback, base::Passed(&dbus_fd))); } } // namespace FakePermissionBrokerClient::FakePermissionBrokerClient() {} FakePermissionBrokerClient::~FakePermissionBrokerClient() {} void FakePermissionBrokerClient::Init(dbus::Bus* bus) {} void FakePermissionBrokerClient::CheckPathAccess( const std::string& path, const ResultCallback& callback) { callback.Run(true); } void FakePermissionBrokerClient::OpenPath(const std::string& path, const OpenPathCallback& callback, const ErrorCallback& error_callback) { base::WorkerPool::PostTask( FROM_HERE, base::Bind(&OpenPathAndValidate, path, callback, error_callback, base::ThreadTaskRunnerHandle::Get()), false); } void FakePermissionBrokerClient::RequestTcpPortAccess( uint16_t port, const std::string& interface, const dbus::FileDescriptor& lifeline_fd, const ResultCallback& callback) { DCHECK(lifeline_fd.is_valid()); callback.Run(true); } void FakePermissionBrokerClient::RequestUdpPortAccess( uint16_t port, const std::string& interface, const dbus::FileDescriptor& lifeline_fd, const ResultCallback& callback) { DCHECK(lifeline_fd.is_valid()); callback.Run(true); } void FakePermissionBrokerClient::ReleaseTcpPort( uint16_t port, const std::string& interface, const ResultCallback& callback) { callback.Run(true); } void FakePermissionBrokerClient::ReleaseUdpPort( uint16_t port, const std::string& interface, const ResultCallback& callback) { callback.Run(true); } } // namespace chromeos