Chromium Code Reviews| Index: chromeos/dbus/cras_audio_client.cc |
| diff --git a/chromeos/dbus/cras_audio_client.cc b/chromeos/dbus/cras_audio_client.cc |
| index 7a0b1c37f0b73e2e138f9efc28ab00f7084d9d47..f9023d64ce381a319544564644db5e1bc6c7f0c8 100644 |
| --- a/chromeos/dbus/cras_audio_client.cc |
| +++ b/chromeos/dbus/cras_audio_client.cc |
| @@ -16,6 +16,10 @@ |
| namespace chromeos { |
| +// Error name if cras dbus call fails with empty ErrorResponse. |
| +const char kNoResponseError[] = |
| + "org.chromium.cras.Error.NoResponse"; |
| + |
| // The CrasAudioClient implementation used in production. |
| class CrasAudioClientImpl : public CrasAudioClient { |
| public: |
| @@ -47,14 +51,17 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| weak_ptr_factory_.GetWeakPtr(), callback)); |
| } |
| - virtual void GetNodes(const GetNodesCallback& callback) OVERRIDE { |
| + virtual void GetNodes(const GetNodesCallback& callback, |
| + const ErrorCallback& error_callback) OVERRIDE { |
| dbus::MethodCall method_call(cras::kCrasControlInterface, |
| cras::kGetNodes); |
| - cras_proxy_->CallMethod( |
| + cras_proxy_->CallMethodWithErrorCallback( |
| &method_call, |
| dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| base::Bind(&CrasAudioClientImpl::OnGetNodes, |
| - weak_ptr_factory_.GetWeakPtr(), callback)); |
| + weak_ptr_factory_.GetWeakPtr(), callback), |
| + base::Bind(&CrasAudioClientImpl::OnError, |
| + weak_ptr_factory_.GetWeakPtr(), error_callback)); |
| } |
| virtual void SetOutputNodeVolume(uint64 node_id, int32 volume) OVERRIDE { |
| @@ -293,14 +300,28 @@ class CrasAudioClientImpl : public CrasAudioClient { |
| } |
| } |
| - if (node_list.size() == 0) { |
| - success = false; |
| - LOG(ERROR) << "Error calling " << cras::kGetNodes; |
| - } |
| + if (node_list.size() == 0) |
|
Daniel Erat
2013/09/13 01:36:27
nit: node_list.empty() (if this is a vector)
jennyz
2013/09/13 16:25:23
Done.
|
| + return; |
| callback.Run(node_list, success); |
| } |
| + void OnError(const ErrorCallback& error_callback, |
| + dbus::ErrorResponse* response) { |
| + // Error response has optional error message argument. |
| + std::string error_name; |
| + std::string error_message; |
| + if (response) { |
| + dbus::MessageReader reader(response); |
| + error_name = response->GetErrorName(); |
| + reader.PopString(&error_message); |
| + } else { |
| + error_name = kNoResponseError; |
| + error_message = ""; |
| + } |
| + error_callback.Run(error_name, error_message); |
| + } |
| + |
| bool GetAudioNode(dbus::Response* response, |
| dbus::MessageReader* array_reader, |
| AudioNode *node) { |