[Remoting] Make OAuthTokenGetter::TokenCallback OnceCallback
This CL makes OAuthTokenGetter::TokenCallback OnceCallback so that it's
cleaner to use. It also marks
OAuthTokenGetter::CredentialsUpdatedCallback repeating callback, which
doesn't change its behavior but makes it cleaner.
Bug: 824488
Change-Id: I7b5a64c66792ac32b01d788f1e4e2895d97a393a
Reviewed-on: https://chromium-review.googlesource.com/c/1477924
Commit-Queue: Yuwei Huang <[email protected]>
Reviewed-by: Joe Downing <[email protected]>
Cr-Commit-Position: refs/heads/master@{#633930}
diff --git a/remoting/base/fake_oauth_token_getter.cc b/remoting/base/fake_oauth_token_getter.cc
index b1b21c7..4c60e6d 100644
--- a/remoting/base/fake_oauth_token_getter.cc
+++ b/remoting/base/fake_oauth_token_getter.cc
@@ -18,10 +18,10 @@
FakeOAuthTokenGetter::~FakeOAuthTokenGetter() = default;
-void FakeOAuthTokenGetter::CallWithToken(const TokenCallback& on_access_token) {
+void FakeOAuthTokenGetter::CallWithToken(TokenCallback on_access_token) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::BindOnce(on_access_token, status_, user_email_, access_token_));
+ FROM_HERE, base::BindOnce(std::move(on_access_token), status_,
+ user_email_, access_token_));
}
void FakeOAuthTokenGetter::InvalidateCache() {
diff --git a/remoting/base/fake_oauth_token_getter.h b/remoting/base/fake_oauth_token_getter.h
index 0b70a09..1966f96 100644
--- a/remoting/base/fake_oauth_token_getter.h
+++ b/remoting/base/fake_oauth_token_getter.h
@@ -20,7 +20,7 @@
~FakeOAuthTokenGetter() override;
// OAuthTokenGetter interface.
- void CallWithToken(const TokenCallback& on_access_token) override;
+ void CallWithToken(TokenCallback on_access_token) override;
void InvalidateCache() override;
private:
diff --git a/remoting/base/oauth_token_getter.h b/remoting/base/oauth_token_getter.h
index cd3eb58..361d01e 100644
--- a/remoting/base/oauth_token_getter.h
+++ b/remoting/base/oauth_token_getter.h
@@ -25,14 +25,13 @@
AUTH_ERROR,
};
- // TODO(crbug.com/824488): Change to use base::OnceCallback.
- typedef base::Callback<void(Status status,
- const std::string& user_email,
- const std::string& access_token)>
+ typedef base::OnceCallback<void(Status status,
+ const std::string& user_email,
+ const std::string& access_token)>
TokenCallback;
- typedef base::Callback<void(const std::string& user_email,
- const std::string& refresh_token)>
+ typedef base::RepeatingCallback<void(const std::string& user_email,
+ const std::string& refresh_token)>
CredentialsUpdatedCallback;
// This structure contains information required to perform authorization
@@ -87,7 +86,7 @@
// Call |on_access_token| with an access token, or the failure status.
virtual void CallWithToken(
- const OAuthTokenGetter::TokenCallback& on_access_token) = 0;
+ OAuthTokenGetter::TokenCallback on_access_token) = 0;
// Invalidates the cache, so the next CallWithToken() will get a fresh access
// token.
diff --git a/remoting/base/oauth_token_getter_impl.cc b/remoting/base/oauth_token_getter_impl.cc
index f095ccbe..5bc231b 100644
--- a/remoting/base/oauth_token_getter_impl.cc
+++ b/remoting/base/oauth_token_getter_impl.cc
@@ -148,11 +148,11 @@
const std::string& user_email,
const std::string& access_token) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- base::queue<TokenCallback> callbacks(pending_callbacks_);
- pending_callbacks_ = base::queue<TokenCallback>();
+ base::queue<TokenCallback> callbacks;
+ callbacks.swap(pending_callbacks_);
while (!callbacks.empty()) {
- callbacks.front().Run(status, user_email, access_token);
+ std::move(callbacks.front()).Run(status, user_email, access_token);
callbacks.pop();
}
}
@@ -189,10 +189,10 @@
std::string());
}
-void OAuthTokenGetterImpl::CallWithToken(const TokenCallback& on_access_token) {
+void OAuthTokenGetterImpl::CallWithToken(TokenCallback on_access_token) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (intermediate_credentials_) {
- pending_callbacks_.push(on_access_token);
+ pending_callbacks_.push(std::move(on_access_token));
if (!response_pending_) {
GetOauthTokensFromAuthCode();
}
@@ -203,13 +203,13 @@
(!authorization_credentials_->is_service_account && !email_verified_);
if (need_new_auth_token) {
- pending_callbacks_.push(on_access_token);
+ pending_callbacks_.push(std::move(on_access_token));
if (!response_pending_) {
RefreshAccessToken();
}
} else {
- on_access_token.Run(SUCCESS, authorization_credentials_->login,
- oauth_access_token_);
+ std::move(on_access_token)
+ .Run(SUCCESS, authorization_credentials_->login, oauth_access_token_);
}
}
}
diff --git a/remoting/base/oauth_token_getter_impl.h b/remoting/base/oauth_token_getter_impl.h
index bdb20080..68ef1fec 100644
--- a/remoting/base/oauth_token_getter_impl.h
+++ b/remoting/base/oauth_token_getter_impl.h
@@ -42,8 +42,7 @@
~OAuthTokenGetterImpl() override;
// OAuthTokenGetter interface.
- void CallWithToken(
- const OAuthTokenGetter::TokenCallback& on_access_token) override;
+ void CallWithToken(OAuthTokenGetter::TokenCallback on_access_token) override;
void InvalidateCache() override;
private:
diff --git a/remoting/base/telemetry_log_writer.cc b/remoting/base/telemetry_log_writer.cc
index 6b8e0ec..8054f9c 100644
--- a/remoting/base/telemetry_log_writer.cc
+++ b/remoting/base/telemetry_log_writer.cc
@@ -67,7 +67,7 @@
LOG(ERROR) << "Failed to serialize log to JSON.";
return;
}
- token_getter_->CallWithToken(base::BindRepeating(
+ token_getter_->CallWithToken(base::BindOnce(
&TelemetryLogWriter::PostJsonToServer, base::Unretained(this), json));
}
diff --git a/remoting/client/jni/jni_oauth_token_getter.cc b/remoting/client/jni/jni_oauth_token_getter.cc
index 3198018..ea6a1e8 100644
--- a/remoting/client/jni/jni_oauth_token_getter.cc
+++ b/remoting/client/jni/jni_oauth_token_getter.cc
@@ -37,9 +37,12 @@
NOTREACHED();
return;
}
- callback->Run(status,
- user_email.is_null() ? "" : ConvertJavaStringToUTF8(user_email),
- token.is_null() ? "" : ConvertJavaStringToUTF8(token));
+
+ std::string utf8_user_email =
+ user_email.is_null() ? "" : ConvertJavaStringToUTF8(user_email);
+ std::string utf8_token =
+ token.is_null() ? "" : ConvertJavaStringToUTF8(token);
+ std::move(*callback).Run(status, utf8_user_email, utf8_token);
delete callback;
}
@@ -52,12 +55,12 @@
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
}
-void JniOAuthTokenGetter::CallWithToken(const TokenCallback& on_access_token) {
+void JniOAuthTokenGetter::CallWithToken(TokenCallback on_access_token) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
JNIEnv* env = base::android::AttachCurrentThread();
- TokenCallback* callback_copy = new TokenCallback(on_access_token);
- Java_JniOAuthTokenGetter_fetchAuthToken(
- env, reinterpret_cast<intptr_t>(callback_copy));
+ TokenCallback* callback = new TokenCallback(std::move(on_access_token));
+ Java_JniOAuthTokenGetter_fetchAuthToken(env,
+ reinterpret_cast<intptr_t>(callback));
}
void JniOAuthTokenGetter::InvalidateCache() {
diff --git a/remoting/client/jni/jni_oauth_token_getter.h b/remoting/client/jni/jni_oauth_token_getter.h
index bdb0381..7328032 100644
--- a/remoting/client/jni/jni_oauth_token_getter.h
+++ b/remoting/client/jni/jni_oauth_token_getter.h
@@ -31,7 +31,7 @@
~JniOAuthTokenGetter() override;
// OAuthTokenGetter overrides.
- void CallWithToken(const TokenCallback& on_access_token) override;
+ void CallWithToken(TokenCallback on_access_token) override;
void InvalidateCache() override;
base::WeakPtr<JniOAuthTokenGetter> GetWeakPtr();
diff --git a/remoting/client/oauth_token_getter_proxy.cc b/remoting/client/oauth_token_getter_proxy.cc
index 361412b..af04ae84 100644
--- a/remoting/client/oauth_token_getter_proxy.cc
+++ b/remoting/client/oauth_token_getter_proxy.cc
@@ -14,19 +14,19 @@
namespace {
void ResolveCallback(
- const OAuthTokenGetter::TokenCallback& on_access_token,
+ OAuthTokenGetter::TokenCallback on_access_token,
scoped_refptr<base::SingleThreadTaskRunner> original_task_runner,
OAuthTokenGetter::Status status,
const std::string& user_email,
const std::string& access_token) {
if (!original_task_runner->BelongsToCurrentThread()) {
original_task_runner->PostTask(
- FROM_HERE,
- base::BindOnce(on_access_token, status, user_email, access_token));
+ FROM_HERE, base::BindOnce(std::move(on_access_token), status,
+ user_email, access_token));
return;
}
- on_access_token.Run(status, user_email, access_token);
+ std::move(on_access_token).Run(status, user_email, access_token);
}
} // namespace
@@ -39,21 +39,20 @@
OAuthTokenGetterProxy::~OAuthTokenGetterProxy() {}
void OAuthTokenGetterProxy::CallWithToken(
- const OAuthTokenGetter::TokenCallback& on_access_token) {
+ OAuthTokenGetter::TokenCallback on_access_token) {
if (!task_runner_->BelongsToCurrentThread()) {
auto task_runner_to_reply = base::ThreadTaskRunnerHandle::Get();
- // TODO(crbug.com/824488): Change to base::BindOnce().
- auto reply_callback = base::BindRepeating(&ResolveCallback, on_access_token,
- task_runner_to_reply);
- task_runner_->PostTask(FROM_HERE,
- base::BindOnce(&OAuthTokenGetter::CallWithToken,
- token_getter_, reply_callback));
+ auto reply_callback = base::BindOnce(
+ &ResolveCallback, std::move(on_access_token), task_runner_to_reply);
+ task_runner_->PostTask(
+ FROM_HERE, base::BindOnce(&OAuthTokenGetter::CallWithToken,
+ token_getter_, std::move(reply_callback)));
return;
}
if (token_getter_) {
- token_getter_->CallWithToken(on_access_token);
+ token_getter_->CallWithToken(std::move(on_access_token));
}
}
diff --git a/remoting/client/oauth_token_getter_proxy.h b/remoting/client/oauth_token_getter_proxy.h
index 2fe3199a..a246a434 100644
--- a/remoting/client/oauth_token_getter_proxy.h
+++ b/remoting/client/oauth_token_getter_proxy.h
@@ -29,7 +29,7 @@
~OAuthTokenGetterProxy() override;
// OAuthTokenGetter overrides.
- void CallWithToken(const TokenCallback& on_access_token) override;
+ void CallWithToken(TokenCallback on_access_token) override;
void InvalidateCache() override;
private:
diff --git a/remoting/client/oauth_token_getter_proxy_unittest.cc b/remoting/client/oauth_token_getter_proxy_unittest.cc
index d9f0bdc..58caac0 100644
--- a/remoting/client/oauth_token_getter_proxy_unittest.cc
+++ b/remoting/client/oauth_token_getter_proxy_unittest.cc
@@ -37,7 +37,7 @@
void ExpectInvalidateCache();
// OAuthTokenGetter overrides.
- void CallWithToken(const TokenCallback& on_access_token) override;
+ void CallWithToken(TokenCallback on_access_token) override;
void InvalidateCache() override;
base::WeakPtr<FakeOAuthTokenGetter> GetWeakPtr();
@@ -66,8 +66,7 @@
const std::string& access_token) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(!on_access_token_.is_null());
- on_access_token_.Run(status, user_email, access_token);
- on_access_token_.Reset();
+ std::move(on_access_token_).Run(status, user_email, access_token);
}
void FakeOAuthTokenGetter::ExpectInvalidateCache() {
@@ -76,9 +75,9 @@
invalidate_cache_expected_ = true;
}
-void FakeOAuthTokenGetter::CallWithToken(const TokenCallback& on_access_token) {
+void FakeOAuthTokenGetter::CallWithToken(TokenCallback on_access_token) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- on_access_token_ = on_access_token;
+ on_access_token_ = std::move(on_access_token);
}
void FakeOAuthTokenGetter::InvalidateCache() {
diff --git a/remoting/host/gcd_rest_client.cc b/remoting/host/gcd_rest_client.cc
index 0120d08..cbd3a42 100644
--- a/remoting/host/gcd_rest_client.cc
+++ b/remoting/host/gcd_rest_client.cc
@@ -82,7 +82,7 @@
resource_request_->method = "POST";
token_getter_->CallWithToken(
- base::Bind(&GcdRestClient::OnTokenReceived, base::Unretained(this)));
+ base::BindOnce(&GcdRestClient::OnTokenReceived, base::Unretained(this)));
}
void GcdRestClient::SetClockForTest(base::Clock* clock) {
diff --git a/remoting/host/signaling_connector.cc b/remoting/host/signaling_connector.cc
index 530bfa6..397ea44 100644
--- a/remoting/host/signaling_connector.cc
+++ b/remoting/host/signaling_connector.cc
@@ -175,7 +175,7 @@
if (signal_strategy_->GetState() == SignalStrategy::DISCONNECTED) {
HOST_LOG << "Attempting to connect signaling.";
- oauth_token_getter_->CallWithToken(base::Bind(
+ oauth_token_getter_->CallWithToken(base::BindOnce(
&SignalingConnector::OnAccessToken, weak_factory_.GetWeakPtr()));
}
}
diff --git a/remoting/ios/facade/ios_oauth_token_getter.h b/remoting/ios/facade/ios_oauth_token_getter.h
index 7ad1fa8..684f25d 100644
--- a/remoting/ios/facade/ios_oauth_token_getter.h
+++ b/remoting/ios/facade/ios_oauth_token_getter.h
@@ -20,7 +20,7 @@
~IosOauthTokenGetter() override;
// OAuthTokenGetter overrides.
- void CallWithToken(const TokenCallback& on_access_token) override;
+ void CallWithToken(TokenCallback on_access_token) override;
void InvalidateCache() override;
base::WeakPtr<IosOauthTokenGetter> GetWeakPtr();
diff --git a/remoting/ios/facade/ios_oauth_token_getter.mm b/remoting/ios/facade/ios_oauth_token_getter.mm
index 1f60af2..d9d542f 100644
--- a/remoting/ios/facade/ios_oauth_token_getter.mm
+++ b/remoting/ios/facade/ios_oauth_token_getter.mm
@@ -20,9 +20,8 @@
IosOauthTokenGetter::~IosOauthTokenGetter() {}
-void IosOauthTokenGetter::CallWithToken(const TokenCallback& on_access_token) {
- // This forces the block to copy the callback instead of just the reference.
- TokenCallback on_access_token_copied = on_access_token;
+void IosOauthTokenGetter::CallWithToken(TokenCallback on_access_token) {
+ __block TokenCallback block_callback = std::move(on_access_token);
[RemotingService.instance.authentication
callbackWithAccessToken:^(RemotingAuthenticationStatus status,
NSString* userEmail, NSString* accessToken) {
@@ -40,9 +39,9 @@
default:
NOTREACHED();
}
- on_access_token_copied.Run(oauth_status,
- base::SysNSStringToUTF8(userEmail),
- base::SysNSStringToUTF8(accessToken));
+ std::move(block_callback)
+ .Run(oauth_status, base::SysNSStringToUTF8(userEmail),
+ base::SysNSStringToUTF8(accessToken));
}];
}
diff --git a/remoting/ios/facade/remoting_oauth_authentication.mm b/remoting/ios/facade/remoting_oauth_authentication.mm
index 7f25698..a33a7c02 100644
--- a/remoting/ios/facade/remoting_oauth_authentication.mm
+++ b/remoting/ios/facade/remoting_oauth_authentication.mm
@@ -170,7 +170,7 @@
// Be careful here since a failure to reset onAccessToken will end up with
// retain cycle and memory leakage.
if (_tokenGetter) {
- _tokenGetter->CallWithToken(base::BindRepeating(
+ _tokenGetter->CallWithToken(base::BindOnce(
^(remoting::OAuthTokenGetter::Status status,
const std::string& user_email, const std::string& access_token) {
onAccessToken(oauthStatusToRemotingAuthenticationStatus(status),
diff --git a/remoting/protocol/http_ice_config_request.cc b/remoting/protocol/http_ice_config_request.cc
index 13f02b5..241b9055 100644
--- a/remoting/protocol/http_ice_config_request.cc
+++ b/remoting/protocol/http_ice_config_request.cc
@@ -75,7 +75,7 @@
on_ice_config_callback_ = callback;
if (oauth_token_getter_) {
- oauth_token_getter_->CallWithToken(base::Bind(
+ oauth_token_getter_->CallWithToken(base::BindOnce(
&HttpIceConfigRequest::OnOAuthToken, weak_factory_.GetWeakPtr()));
} else {
SendRequest();