| 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)
|
| + 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) {
|
|
|