Pass error as ErrorPtr into ErrorCallback
Usually ErrorCallback is the final destination for error.
Change-Id: I86298347a0db4cf82689cc47d5cd36705b54ce81
Reviewed-on: https://weave-review.googlesource.com/1301
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/libweave/examples/ubuntu/curl_http_client.cc b/libweave/examples/ubuntu/curl_http_client.cc
index f8172bc..c058a9b 100644
--- a/libweave/examples/ubuntu/curl_http_client.cc
+++ b/libweave/examples/ubuntu/curl_http_client.cc
@@ -38,7 +38,7 @@
void CurlHttpClient::PostError(const ErrorCallback& error_callback,
ErrorPtr error) {
task_runner_->PostDelayedTask(
- FROM_HERE, base::Bind(error_callback, base::Owned(error.release())), {});
+ FROM_HERE, base::Bind(error_callback, base::Passed(&error)), {});
}
void CurlHttpClient::SendRequest(Method method,
diff --git a/libweave/examples/ubuntu/event_http_client.cc b/libweave/examples/ubuntu/event_http_client.cc
index b24c075..8341a07 100644
--- a/libweave/examples/ubuntu/event_http_client.cc
+++ b/libweave/examples/ubuntu/event_http_client.cc
@@ -74,7 +74,8 @@
"request failed: %s",
evutil_socket_error_to_string(err));
state->task_runner_->PostDelayedTask(
- FROM_HERE, base::Bind(state->error_callback_, error.get()), {});
+ FROM_HERE, base::Bind(state->error_callback_, base::Passed(&error)),
+ {});
return;
}
std::unique_ptr<EventHttpResponse> response{new EventHttpResponse()};
@@ -148,8 +149,8 @@
Error::AddToPrintf(&error, FROM_HERE, "http_client", "request_failed",
"request failed: %s %s", EnumToString(method).c_str(),
url.c_str());
- task_runner_->PostDelayedTask(FROM_HERE,
- base::Bind(error_callback, error.get()), {});
+ task_runner_->PostDelayedTask(
+ FROM_HERE, base::Bind(error_callback, base::Passed(&error)), {});
}
} // namespace examples
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index 0891e01..e762791 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -225,7 +225,7 @@
LOG(INFO) << "Device registered: " << device->GetSettings().cloud_id;
}
-void RegisterDeviceError(const weave::Error* error) {
+void RegisterDeviceError(weave::ErrorPtr error) {
LOG(ERROR) << "Fail to register device: " << error->GetMessage();
}
diff --git a/libweave/examples/ubuntu/netlink_network.cc b/libweave/examples/ubuntu/netlink_network.cc
index d121fca..24d0996 100644
--- a/libweave/examples/ubuntu/netlink_network.cc
+++ b/libweave/examples/ubuntu/netlink_network.cc
@@ -106,8 +106,8 @@
ErrorPtr error;
Error::AddTo(&error, FROM_HERE, "tls", "tls_init_failed",
"Failed to initialize TLS stream.");
- task_runner_->PostDelayedTask(FROM_HERE,
- base::Bind(error_callback, error.get()), {});
+ task_runner_->PostDelayedTask(
+ FROM_HERE, base::Bind(error_callback, base::Passed(&error)), {});
}
}
diff --git a/libweave/examples/ubuntu/network_manager.cc b/libweave/examples/ubuntu/network_manager.cc
index 6d92949..ff54f0b 100644
--- a/libweave/examples/ubuntu/network_manager.cc
+++ b/libweave/examples/ubuntu/network_manager.cc
@@ -57,13 +57,12 @@
callbacks_.push_back(callback);
}
-void NetworkImpl::TryToConnect(
- const std::string& ssid,
- const std::string& passphrase,
- int pid,
- base::Time until,
- const SuccessCallback& success_callback,
- const ErrorCallback& error_callback) {
+void NetworkImpl::TryToConnect(const std::string& ssid,
+ const std::string& passphrase,
+ int pid,
+ base::Time until,
+ const SuccessCallback& success_callback,
+ const ErrorCallback& error_callback) {
if (pid) {
int status = 0;
if (pid == waitpid(pid, &status, WNOWAIT)) {
@@ -95,8 +94,7 @@
Error::AddTo(&error, FROM_HERE, "wifi", "timeout",
"Timeout connecting to WiFI network.");
task_runner_->PostDelayedTask(
- FROM_HERE, base::Bind(error_callback, base::Owned(error.release())),
- {});
+ FROM_HERE, base::Bind(error_callback, base::Passed(&error)), {});
return;
}
@@ -117,8 +115,7 @@
ErrorPtr error;
Error::AddTo(&error, FROM_HERE, "wifi", "busy", "Running Access Point.");
task_runner_->PostDelayedTask(
- FROM_HERE, base::Bind(error_callback, base::Owned(error.release())),
- {});
+ FROM_HERE, base::Bind(error_callback, base::Passed(&error)), {});
return;
}
@@ -218,6 +215,8 @@
ErrorPtr error;
Error::AddTo(&error, FROM_HERE, "tls", "tls_init_failed",
"Failed to initialize TLS stream.");
+ task_runner_->PostDelayedTask(
+ FROM_HERE, base::Bind(error_callback, base::Passed(&error)), {});
}
}
diff --git a/libweave/examples/ubuntu/ssl_stream.cc b/libweave/examples/ubuntu/ssl_stream.cc
index 58626cc..e146d58 100644
--- a/libweave/examples/ubuntu/ssl_stream.cc
+++ b/libweave/examples/ubuntu/ssl_stream.cc
@@ -51,9 +51,8 @@
"SSL error");
task_runner_->PostDelayedTask(
FROM_HERE,
- base::Bind(
- &SSLStream::RunDelayedTask, weak_ptr_factory_.GetWeakPtr(),
- base::Bind(error_callback, base::Owned(weave_error.release()))),
+ base::Bind(&SSLStream::RunDelayedTask, weak_ptr_factory_.GetWeakPtr(),
+ base::Bind(error_callback, base::Passed(&weave_error))),
{});
return;
}
@@ -100,9 +99,8 @@
"SSL error");
task_runner_->PostDelayedTask(
FROM_HERE,
- base::Bind(
- &SSLStream::RunDelayedTask, weak_ptr_factory_.GetWeakPtr(),
- base::Bind(error_callback, base::Owned(weave_error.release()))),
+ base::Bind(&SSLStream::RunDelayedTask, weak_ptr_factory_.GetWeakPtr(),
+ base::Bind(error_callback, base::Passed(&weave_error))),
{});
return;
}
diff --git a/libweave/include/weave/error.h b/libweave/include/weave/error.h
index 67f923f..83b33b4 100644
--- a/libweave/include/weave/error.h
+++ b/libweave/include/weave/error.h
@@ -127,7 +127,7 @@
};
using SuccessCallback = base::Closure;
-using ErrorCallback = base::Callback<void(const Error* error)>;
+using ErrorCallback = base::Callback<void(ErrorPtr error)>;
} // namespace weave
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index 09c7014..6481481 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -98,9 +98,9 @@
return AppendQueryParams(result, params);
}
-void IgnoreCloudError(const Error*) {}
+void IgnoreCloudError(ErrorPtr) {}
-void IgnoreCloudErrorWithCallback(const base::Closure& cb, const Error*) {
+void IgnoreCloudErrorWithCallback(const base::Closure& cb, ErrorPtr) {
cb.Run();
}
@@ -134,11 +134,11 @@
success_callback.Run(response);
};
auto on_error = [](int debug_id, const ErrorCallback& error_callback,
- const Error* error) {
+ ErrorPtr error) {
VLOG(1) << "Request failed, id=" << debug_id
<< ", reason: " << error->GetCode()
<< ", message: " << error->GetMessage();
- error_callback.Run(error);
+ error_callback.Run(std::move(error));
};
transport_->SendRequest(method_, url_, GetFullHeaders(), data_,
base::Bind(on_success, debug_id, success_callback),
@@ -357,7 +357,7 @@
ErrorPtr error;
if (!VerifyRegistrationCredentials(&error)) {
- error_callback.Run(error.get());
+ error_callback.Run(std::move(error));
return;
}
@@ -405,10 +405,8 @@
oauth2_backoff_entry_->InformOfRequest(true);
ErrorPtr error;
auto json = ParseOAuthResponse(response, &error);
- if (!json) {
- error_callback->Run(error.get());
- return;
- }
+ if (!json)
+ return error_callback->Run(std::move(error));
int expires_in = 0;
if (!json->GetString("access_token", &access_token_) ||
@@ -417,8 +415,7 @@
LOG(ERROR) << "Access token unavailable.";
Error::AddTo(&error, FROM_HERE, kErrorDomainOAuth2,
"unexpected_server_response", "Access token unavailable");
- error_callback->Run(error.get());
- return;
+ return error_callback->Run(std::move(error));
}
access_token_expiration_ =
base::Time::Now() + base::TimeDelta::FromSeconds(expires_in);
@@ -437,7 +434,7 @@
void DeviceRegistrationInfo::OnRefreshAccessTokenError(
const std::shared_ptr<base::Closure>& success_callback,
const std::shared_ptr<ErrorCallback>& error_callback,
- const Error* error) {
+ ErrorPtr error) {
VLOG(1) << "Refresh access token failed";
oauth2_backoff_entry_->InformOfRequest(false);
RefreshAccessToken(*success_callback, *error_callback);
@@ -530,7 +527,7 @@
ErrorPtr error;
if (!VerifyRegistrationCredentials(&error)) {
if (!error_callback.is_null())
- error_callback.Run(error.get());
+ error_callback.Run(std::move(error));
return;
}
DoCloudRequest(HttpClient::Method::kGet, GetDeviceURL(), nullptr,
@@ -546,11 +543,9 @@
void DeviceRegistrationInfo::RegisterDeviceError(
const std::shared_ptr<RegisterCallbacks>& callbacks,
- const Error* error) {
- ErrorPtr error_clone = error->Clone();
+ ErrorPtr error) {
task_runner_->PostDelayedTask(
- FROM_HERE,
- base::Bind(callbacks->error_callback, base::Owned(error_clone.release())),
+ FROM_HERE, base::Bind(callbacks->error_callback, base::Passed(&error)),
{});
}
@@ -565,7 +560,7 @@
std::unique_ptr<base::DictionaryValue> device_draft =
BuildDeviceResource(&error);
if (!device_draft)
- return RegisterDeviceError(callbacks, error.get());
+ return RegisterDeviceError(callbacks, std::move(error));
base::DictionaryValue req_json;
req_json.SetString("id", ticket_id);
@@ -590,11 +585,11 @@
ErrorPtr error;
auto json_resp = ParseJsonResponse(response, &error);
if (!json_resp)
- return RegisterDeviceError(callbacks, error.get());
+ return RegisterDeviceError(callbacks, std::move(error));
if (!IsSuccessful(response)) {
ParseGCDError(json_resp.get(), &error);
- return RegisterDeviceError(callbacks, error.get());
+ return RegisterDeviceError(callbacks, std::move(error));
}
std::string url =
@@ -613,10 +608,10 @@
ErrorPtr error;
auto json_resp = ParseJsonResponse(response, &error);
if (!json_resp)
- return RegisterDeviceError(callbacks, error.get());
+ return RegisterDeviceError(callbacks, std::move(error));
if (!IsSuccessful(response)) {
ParseGCDError(json_resp.get(), &error);
- return RegisterDeviceError(callbacks, error.get());
+ return RegisterDeviceError(callbacks, std::move(error));
}
std::string auth_code;
@@ -629,7 +624,7 @@
!device_draft_response->GetString("id", &cloud_id)) {
Error::AddTo(&error, FROM_HERE, kErrorDomainGCD, "unexpected_response",
"Device account missing in response");
- return RegisterDeviceError(callbacks, error.get());
+ return RegisterDeviceError(callbacks, std::move(error));
}
UpdateDeviceInfoTimestamp(*device_draft_response);
@@ -666,7 +661,7 @@
access_token_.empty() || refresh_token.empty() || expires_in <= 0) {
Error::AddTo(&error, FROM_HERE, kErrorDomainGCD, "unexpected_response",
"Device access_token missing in response");
- return RegisterDeviceError(callbacks, error.get());
+ return RegisterDeviceError(callbacks, std::move(error));
}
access_token_expiration_ =
@@ -715,19 +710,17 @@
ErrorPtr error;
if (!VerifyRegistrationCredentials(&error)) {
- data->error_callback.Run(error.get());
- return;
+ return data->error_callback.Run(std::move(error));
}
if (cloud_backoff_entry_->ShouldRejectRequest()) {
VLOG(1) << "Cloud request delayed for "
<< cloud_backoff_entry_->GetTimeUntilRelease()
<< " due to backoff policy";
- task_runner_->PostDelayedTask(
+ return task_runner_->PostDelayedTask(
FROM_HERE, base::Bind(&DeviceRegistrationInfo::SendCloudRequest,
AsWeakPtr(), data),
cloud_backoff_entry_->GetTimeUntilRelease());
- return;
}
RequestSender sender{data->method, data->url, http_client_};
@@ -765,9 +758,8 @@
ErrorPtr error;
auto json_resp = ParseJsonResponse(response, &error);
if (!json_resp) {
- data->error_callback.Run(error.get());
cloud_backoff_entry_->InformOfRequest(true);
- return;
+ return data->error_callback.Run(std::move(error));
}
if (!IsSuccessful(response)) {
@@ -775,12 +767,10 @@
if (status_code == http::kForbidden &&
error->HasError(kErrorDomainGCDServer, "rateLimitExceeded")) {
// If we exceeded server quota, retry the request later.
- RetryCloudRequest(data);
- return;
+ return RetryCloudRequest(data);
}
cloud_backoff_entry_->InformOfRequest(true);
- data->error_callback.Run(error.get());
- return;
+ return data->error_callback.Run(std::move(error));
}
cloud_backoff_entry_->InformOfRequest(true);
@@ -790,7 +780,7 @@
void DeviceRegistrationInfo::OnCloudRequestError(
const std::shared_ptr<const CloudRequestData>& data,
- const Error* error) {
+ ErrorPtr error) {
RetryCloudRequest(data);
}
@@ -809,12 +799,12 @@
void DeviceRegistrationInfo::OnAccessTokenError(
const std::shared_ptr<const CloudRequestData>& data,
- const Error* error) {
- CheckAccessTokenError(error);
- data->error_callback.Run(error);
+ ErrorPtr error) {
+ CheckAccessTokenError(error->Clone());
+ data->error_callback.Run(std::move(error));
}
-void DeviceRegistrationInfo::CheckAccessTokenError(const Error* error) {
+void DeviceRegistrationInfo::CheckAccessTokenError(ErrorPtr error) {
if (error->HasError(kErrorDomainOAuth2, "invalid_grant"))
MarkDeviceUnregistered();
}
@@ -963,8 +953,7 @@
std::unique_ptr<base::DictionaryValue> device_resource =
BuildDeviceResource(&error);
if (!device_resource) {
- OnUpdateDeviceResourceError(error.get());
- return;
+ return OnUpdateDeviceResourceError(std::move(error));
}
std::string url = GetDeviceURL(
@@ -1010,7 +999,7 @@
StartQueuedUpdateDeviceResource();
}
-void DeviceRegistrationInfo::OnUpdateDeviceResourceError(const Error* error) {
+void DeviceRegistrationInfo::OnUpdateDeviceResourceError(ErrorPtr error) {
if (error->HasError(kErrorDomainGCDServer, "invalid_last_update_time_ms")) {
// If the server rejected our previous request, retrieve the latest
// timestamp from the server and retry.
@@ -1027,7 +1016,7 @@
// over.
auto callback_list = std::move(in_progress_resource_update_callbacks_);
for (const auto& callback_pair : callback_list)
- callback_pair.second.Run(error);
+ callback_pair.second.Run(error->Clone());
StartQueuedUpdateDeviceResource();
}
@@ -1045,9 +1034,9 @@
}
void DeviceRegistrationInfo::OnFetchCommandsError(const ErrorCallback& callback,
- const Error* error) {
+ ErrorPtr error) {
OnFetchCommandsReturned();
- callback.Run(error);
+ callback.Run(std::move(error));
}
void DeviceRegistrationInfo::OnFetchCommandsReturned() {
@@ -1216,7 +1205,7 @@
PublishStateUpdates();
}
-void DeviceRegistrationInfo::OnPublishStateError(const Error* error) {
+void DeviceRegistrationInfo::OnPublishStateError(ErrorPtr error) {
LOG(ERROR) << "Permanent failure while trying to update device state";
device_state_update_pending_ = false;
}
diff --git a/libweave/src/device_registration_info.h b/libweave/src/device_registration_info.h
index 1577cd4..a7f79b6 100644
--- a/libweave/src/device_registration_info.h
+++ b/libweave/src/device_registration_info.h
@@ -159,7 +159,7 @@
void OnRefreshAccessTokenError(
const std::shared_ptr<base::Closure>& success_callback,
const std::shared_ptr<ErrorCallback>& error_callback,
- const Error* error);
+ ErrorPtr error);
// Parse the OAuth response, and sets registration status to
// kInvalidCredentials if our registration is no longer valid.
@@ -195,20 +195,20 @@
const std::shared_ptr<const CloudRequestData>& data,
const provider::HttpClient::Response& response);
void OnCloudRequestError(const std::shared_ptr<const CloudRequestData>& data,
- const Error* error);
+ ErrorPtr error);
void RetryCloudRequest(const std::shared_ptr<const CloudRequestData>& data);
void OnAccessTokenRefreshed(
const std::shared_ptr<const CloudRequestData>& data);
void OnAccessTokenError(const std::shared_ptr<const CloudRequestData>& data,
- const Error* error);
- void CheckAccessTokenError(const Error* error);
+ ErrorPtr error);
+ void CheckAccessTokenError(ErrorPtr error);
void UpdateDeviceResource(const base::Closure& on_success,
const ErrorCallback& on_failure);
void StartQueuedUpdateDeviceResource();
// Success/failure callbacks for UpdateDeviceResource().
void OnUpdateDeviceResourceSuccess(const base::DictionaryValue& device_info);
- void OnUpdateDeviceResourceError(const Error* error);
+ void OnUpdateDeviceResourceError(ErrorPtr error);
// Callback from GetDeviceInfo() to retrieve the device resource timestamp
// and retry UpdateDeviceResource() call.
@@ -227,7 +227,7 @@
void OnFetchCommandsSuccess(
const base::Callback<void(const base::ListValue&)>& callback,
const base::DictionaryValue& json);
- void OnFetchCommandsError(const ErrorCallback& callback, const Error* error);
+ void OnFetchCommandsError(const ErrorCallback& callback, ErrorPtr error);
// Called when FetchCommands completes (with either success or error).
// This method reschedules any pending/queued fetch requests.
void OnFetchCommandsReturned();
@@ -247,7 +247,7 @@
void PublishStateUpdates();
void OnPublishStateSuccess(StateChangeQueueInterface::UpdateID update_id,
const base::DictionaryValue& reply);
- void OnPublishStateError(const Error* error);
+ void OnPublishStateError(ErrorPtr error);
// If unrecoverable error occurred (e.g. error parsing command instance),
// notify the server that the command is aborted by the device.
@@ -277,7 +277,7 @@
struct RegisterCallbacks;
void RegisterDeviceError(const std::shared_ptr<RegisterCallbacks>& callbacks,
- const Error* error);
+ ErrorPtr error);
void RegisterDeviceOnTicketSent(
const std::string& ticket_id,
const std::shared_ptr<RegisterCallbacks>& callbacks,
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index 49c4ccb..6d00a51 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -172,9 +172,9 @@
bool RefreshAccessToken(ErrorPtr* error) const {
bool succeeded = false;
auto on_success = [&succeeded]() { succeeded = true; };
- auto on_failure = [&error](const Error* in_error) {
+ auto on_failure = [&error](ErrorPtr in_error) {
if (error)
- *error = in_error->Clone();
+ *error = std::move(in_error);
};
dev_reg_->RefreshAccessToken(base::Bind(on_success),
base::Bind(on_failure));
@@ -342,9 +342,7 @@
EXPECT_EQ(test_data::kDeviceId, id);
succeeded = true;
};
- auto on_failure = [](const Error* error) {
- FAIL() << "Should not be called";
- };
+ auto on_failure = [](ErrorPtr error) { FAIL() << "Should not be called"; };
dev_reg_->GetDeviceInfo(base::Bind(on_success), base::Bind(on_failure));
EXPECT_TRUE(succeeded);
}
@@ -514,7 +512,7 @@
EXPECT_EQ(test_data::kRobotAccountEmail,
dev_reg_->GetSettings().robot_account);
}),
- base::Bind([](const Error* error) { ADD_FAILURE(); }));
+ base::Bind([](ErrorPtr error) { ADD_FAILURE(); }));
task_runner_.Run();
EXPECT_TRUE(done);
}
diff --git a/libweave/src/notification/xmpp_channel.cc b/libweave/src/notification/xmpp_channel.cc
index fae2022..0d22286 100644
--- a/libweave/src/notification/xmpp_channel.cc
+++ b/libweave/src/notification/xmpp_channel.cc
@@ -302,7 +302,7 @@
ScheduleRegularPing();
}
-void XmppChannel::OnSslError(const Error* error) {
+void XmppChannel::OnSslError(ErrorPtr error) {
LOG(ERROR) << "TLS handshake failed. Restarting XMPP connection";
backoff_entry_.InformOfRequest(false);
@@ -352,12 +352,12 @@
base::Bind(&XmppChannel::OnReadError, task_ptr_factory_.GetWeakPtr()));
}
-void XmppChannel::OnReadError(const Error* error) {
+void XmppChannel::OnReadError(ErrorPtr error) {
read_pending_ = false;
Restart();
}
-void XmppChannel::OnWriteError(const Error* error) {
+void XmppChannel::OnWriteError(ErrorPtr error) {
write_pending_ = false;
Restart();
}
diff --git a/libweave/src/notification/xmpp_channel.h b/libweave/src/notification/xmpp_channel.h
index 27e1f1b..814b2a5 100644
--- a/libweave/src/notification/xmpp_channel.h
+++ b/libweave/src/notification/xmpp_channel.h
@@ -98,14 +98,14 @@
void CreateSslSocket();
void OnSslSocketReady(std::unique_ptr<Stream> stream);
- void OnSslError(const Error* error);
+ void OnSslError(ErrorPtr error);
void WaitForMessage();
void OnMessageRead(size_t size);
void OnMessageSent();
- void OnReadError(const Error* error);
- void OnWriteError(const Error* error);
+ void OnReadError(ErrorPtr error);
+ void OnWriteError(ErrorPtr error);
void Restart();
void CloseStream();
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 83cb6fb..3df5b86 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -166,12 +166,12 @@
Error::AddToPrintf(&error, FROM_HERE, errors::kDomain,
errors::kInvalidParams, "Invalid role: '%s'",
str_scope.c_str());
- return error_callback.Run(error.get());
+ return error_callback.Run(std::move(error));
}
std::string id;
if (!command_manager_->AddCommand(command, role, &id, &error))
- return error_callback.Run(error.get());
+ return error_callback.Run(std::move(error));
command_owners_[id] = user_info.user_id();
success_callback.Run(*command_manager_->FindCommand(id)->ToJson());
@@ -185,7 +185,7 @@
ErrorPtr error;
auto command = GetCommandInternal(id, user_info, &error);
if (!command)
- return error_callback.Run(error.get());
+ return error_callback.Run(std::move(error));
success_callback.Run(*command->ToJson());
}
@@ -197,7 +197,7 @@
ErrorPtr error;
auto command = GetCommandInternal(id, user_info, &error);
if (!command || !command->Cancel(&error))
- return error_callback.Run(error.get());
+ return error_callback.Run(std::move(error));
success_callback.Run(*command->ToJson());
}
@@ -298,7 +298,7 @@
void RegisterDeviceError(const std::string& ticket_id,
const base::Time& deadline,
- const Error* error) {
+ ErrorPtr error) {
// Registration failed. Retry with backoff.
backoff_entry_.InformOfRequest(false);
task_runner_->PostDelayedTask(
diff --git a/libweave/src/privet/privet_handler.cc b/libweave/src/privet/privet_handler.cc
index 297af73..702104d 100644
--- a/libweave/src/privet/privet_handler.cc
+++ b/libweave/src/privet/privet_handler.cc
@@ -203,7 +203,7 @@
}
void OnCommandRequestFailed(const PrivetHandler::RequestCallback& callback,
- const Error* error) {
+ ErrorPtr error) {
if (error->HasError("gcd", "unknown_command")) {
ErrorPtr new_error = error->Clone();
Error::AddTo(&new_error, FROM_HERE, errors::kDomain, errors::kNotFound,
diff --git a/libweave/src/privet/privet_handler_unittest.cc b/libweave/src/privet/privet_handler_unittest.cc
index 6829984..42dd956 100644
--- a/libweave/src/privet/privet_handler_unittest.cc
+++ b/libweave/src/privet/privet_handler_unittest.cc
@@ -24,6 +24,7 @@
using testing::Invoke;
using testing::Return;
using testing::SetArgPointee;
+using testing::WithArgs;
namespace weave {
namespace privet {
@@ -669,7 +670,9 @@
ErrorPtr error;
Error::AddTo(&error, FROM_HERE, errors::kDomain, "notFound", "");
EXPECT_CALL(cloud_, GetCommand(_, _, _, _))
- .WillOnce(RunCallback<3>(error.get()));
+ .WillOnce(WithArgs<3>(Invoke([&error](const ErrorCallback& callback) {
+ callback.Run(std::move(error));
+ })));
EXPECT_PRED2(IsEqualError, CodeWithReason(404, "notFound"),
HandleRequest("/privet/v3/commands/status", "{'id': '15'}"));
@@ -688,7 +691,9 @@
ErrorPtr error;
Error::AddTo(&error, FROM_HERE, errors::kDomain, "notFound", "");
EXPECT_CALL(cloud_, CancelCommand(_, _, _, _))
- .WillOnce(RunCallback<3>(error.get()));
+ .WillOnce(WithArgs<3>(Invoke([&error](const ErrorCallback& callback) {
+ callback.Run(std::move(error));
+ })));
EXPECT_PRED2(IsEqualError, CodeWithReason(404, "notFound"),
HandleRequest("/privet/v3/commands/cancel", "{'id': '11'}"));
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc
index e67e016..b4b0153 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.cc
+++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -106,11 +106,10 @@
tasks_weak_factory_.GetWeakPtr()));
}
-void WifiBootstrapManager::OnConnectError(const Error* error) {
- ErrorPtr new_error = error ? error->Clone() : nullptr;
- Error::AddTo(&new_error, FROM_HERE, errors::kDomain, errors::kInvalidState,
+void WifiBootstrapManager::OnConnectError(ErrorPtr error) {
+ Error::AddTo(&error, FROM_HERE, errors::kDomain, errors::kInvalidState,
"Failed to connect to provided network");
- setup_state_ = SetupState{std::move(new_error)};
+ setup_state_ = SetupState{std::move(error)};
StartBootstrapping();
}
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h
index 6423b9d..390af31 100644
--- a/libweave/src/privet/wifi_bootstrap_manager.h
+++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -88,7 +88,7 @@
// were temporary.
void OnBootstrapTimeout();
void OnConnectSuccess(const std::string& ssid);
- void OnConnectError(const Error* error);
+ void OnConnectError(ErrorPtr error);
void OnConnectivityChange();
void OnMonitorTimeout();
void UpdateConnectionState();
diff --git a/libweave/src/streams_unittest.cc b/libweave/src/streams_unittest.cc
index 9b1f339..3cef6f0 100644
--- a/libweave/src/streams_unittest.cc
+++ b/libweave/src/streams_unittest.cc
@@ -27,7 +27,7 @@
done = true;
EXPECT_EQ(test_data, destination.GetData());
});
- auto on_error = base::Bind([](const Error* error) { ADD_FAILURE(); });
+ auto on_error = base::Bind([](ErrorPtr error) { ADD_FAILURE(); });
StreamCopier copier{&source, &destination};
copier.Copy(on_success, on_error);
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 5e15212..8d87229 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -338,7 +338,7 @@
task_runner_.Break();
EXPECT_EQ("CLOUD_ID", device_->GetSettings().cloud_id);
}),
- base::Bind([](const Error* error) { ADD_FAILURE(); }));
+ base::Bind([](ErrorPtr error) { ADD_FAILURE(); }));
task_runner_.Run();
EXPECT_TRUE(done);
}