Chromium Code Reviews| Index: chromeos/dbus/permission_broker_client.cc |
| diff --git a/chromeos/dbus/permission_broker_client.cc b/chromeos/dbus/permission_broker_client.cc |
| index fb0c934db1c7175d8c69c0b3675d540bf058c7ff..1ec95714d607cacd0d7d4c53c5b12e09bd541125 100644 |
| --- a/chromeos/dbus/permission_broker_client.cc |
| +++ b/chromeos/dbus/permission_broker_client.cc |
| @@ -42,14 +42,17 @@ class PermissionBrokerClientImpl : public PermissionBrokerClient { |
| } |
| void OpenPath(const std::string& path, |
| - const OpenPathCallback& callback) override { |
| + const OpenPathCallback& callback, |
| + const ErrorCallback& error_callback) override { |
| dbus::MethodCall method_call(kPermissionBrokerInterface, kOpenPath); |
| dbus::MessageWriter writer(&method_call); |
| writer.AppendString(path); |
| - proxy_->CallMethod( |
| + proxy_->CallMethodWithErrorCallback( |
| &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| base::Bind(&PermissionBrokerClientImpl::OnOpenPathResponse, |
| - weak_ptr_factory_.GetWeakPtr(), callback)); |
| + weak_ptr_factory_.GetWeakPtr(), callback), |
| + base::Bind(&PermissionBrokerClientImpl::OnError, |
| + weak_ptr_factory_.GetWeakPtr(), error_callback)); |
| } |
| void RequestTcpPortAccess(uint16_t port, |
| @@ -133,15 +136,23 @@ class PermissionBrokerClientImpl : public PermissionBrokerClient { |
| void OnOpenPathResponse(const OpenPathCallback& callback, |
| dbus::Response* response) { |
| dbus::FileDescriptor fd; |
| + dbus::MessageReader reader(response); |
| + if (!reader.PopFileDescriptor(&fd)) |
| + LOG(WARNING) << "Could not parse response: " << response->ToString(); |
| + callback.Run(std::move(fd)); |
| + } |
| + |
| + void OnError(const ErrorCallback& callback, dbus::ErrorResponse* response) { |
| + std::string error_name; |
| + std::string error_message; |
| if (response) { |
| dbus::MessageReader reader(response); |
| - if (!reader.PopFileDescriptor(&fd)) |
| - LOG(WARNING) << "Could not parse response: " << response->ToString(); |
| + error_name = response->GetErrorName(); |
| + reader.PopString(&error_message); |
| } else { |
| - LOG(WARNING) << "Access request method call failed."; |
| + error_name = "org.chromium.Error.NoResponse"; |
|
stevenjb
2016/02/10 00:01:02
nit: define at the top of the file:
const char kN
Reilly Grant (use Gerrit)
2016/02/10 00:16:32
Done.
|
| } |
| - |
| - callback.Run(std::move(fd)); |
| + callback.Run(error_name, error_message); |
| } |
| dbus::ObjectProxy* proxy_; |