Commit 9f07c522 authored by Leonard Grey's avatar Leonard Grey Committed by Chromium LUCI CQ

[Code health] Convert callbacks in AdbClientSocket to Once/Repeating

Bug: 1152274
Change-Id: I81358a8df4b853654ba031bce0a251ed8445a8ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2586156
Commit-Queue: Leonard Grey <lgrey@chromium.org>
Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#836715}
parent 386aad04
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <utility> #include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/callback_helpers.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
...@@ -47,23 +48,24 @@ class AdbTransportSocket : public AdbClientSocket { ...@@ -47,23 +48,24 @@ class AdbTransportSocket : public AdbClientSocket {
AdbTransportSocket(int port, AdbTransportSocket(int port,
const std::string& serial, const std::string& serial,
const std::string& socket_name, const std::string& socket_name,
const SocketCallback& callback) SocketCallback callback)
: AdbClientSocket(port), : AdbClientSocket(port),
serial_(serial), serial_(serial),
socket_name_(socket_name), socket_name_(socket_name),
callback_(callback) { callback_(std::move(callback)) {
Connect(base::BindOnce(&AdbTransportSocket::OnConnected, Connect(base::BindOnce(&AdbTransportSocket::OnConnected,
base::Unretained(this))); base::Unretained(this)));
} }
private: private:
~AdbTransportSocket() {} ~AdbTransportSocket() { DCHECK(callback_.is_null()); }
void OnConnected(int result) { void OnConnected(int result) {
if (!CheckNetResultOrDie(result)) if (!CheckNetResultOrDie(result))
return; return;
SendCommand(base::StringPrintf(kHostTransportCommand, serial_.c_str()), SendCommand(base::StringPrintf(kHostTransportCommand, serial_.c_str()),
true, base::Bind(&AdbTransportSocket::SendLocalAbstract, true,
base::BindOnce(&AdbTransportSocket::SendLocalAbstract,
base::Unretained(this))); base::Unretained(this)));
} }
...@@ -71,21 +73,22 @@ class AdbTransportSocket : public AdbClientSocket { ...@@ -71,21 +73,22 @@ class AdbTransportSocket : public AdbClientSocket {
if (!CheckNetResultOrDie(result)) if (!CheckNetResultOrDie(result))
return; return;
SendCommand(socket_name_, true, SendCommand(socket_name_, true,
base::Bind(&AdbTransportSocket::OnSocketAvailable, base::BindOnce(&AdbTransportSocket::OnSocketAvailable,
base::Unretained(this))); base::Unretained(this)));
} }
void OnSocketAvailable(int result, const std::string& response) { void OnSocketAvailable(int result, const std::string& response) {
if (!CheckNetResultOrDie(result)) if (!CheckNetResultOrDie(result))
return; return;
callback_.Run(net::OK, std::move(socket_)); std::move(callback_).Run(net::OK, std::move(socket_));
delete this; delete this;
} }
bool CheckNetResultOrDie(int result) { bool CheckNetResultOrDie(int result) {
if (result >= 0) if (result >= 0)
return true; return true;
callback_.Run(result, base::WrapUnique<net::StreamSocket>(NULL)); std::move(callback_).Run(result,
base::WrapUnique<net::StreamSocket>(nullptr));
delete this; delete this;
return false; return false;
} }
...@@ -97,12 +100,10 @@ class AdbTransportSocket : public AdbClientSocket { ...@@ -97,12 +100,10 @@ class AdbTransportSocket : public AdbClientSocket {
class AdbQuerySocket : AdbClientSocket { class AdbQuerySocket : AdbClientSocket {
public: public:
AdbQuerySocket(int port, AdbQuerySocket(int port, const std::string& query, CommandCallback callback)
const std::string& query,
const CommandCallback& callback)
: AdbClientSocket(port), : AdbClientSocket(port),
current_query_(0), current_query_(0),
callback_(callback) { callback_(std::move(callback)) {
queries_ = base::SplitString(query, "|", base::KEEP_WHITESPACE, queries_ = base::SplitString(query, "|", base::KEEP_WHITESPACE,
base::SPLIT_WANT_NONEMPTY); base::SPLIT_WANT_NONEMPTY);
if (queries_.empty()) { if (queries_.empty()) {
...@@ -114,8 +115,7 @@ class AdbQuerySocket : AdbClientSocket { ...@@ -114,8 +115,7 @@ class AdbQuerySocket : AdbClientSocket {
} }
private: private:
~AdbQuerySocket() { ~AdbQuerySocket() { DCHECK(callback_.is_null()); }
}
void SendNextQuery(int result) { void SendNextQuery(int result) {
if (!CheckNetResultOrDie(result)) if (!CheckNetResultOrDie(result))
...@@ -134,7 +134,7 @@ class AdbQuerySocket : AdbClientSocket { ...@@ -134,7 +134,7 @@ class AdbQuerySocket : AdbClientSocket {
if (++current_query_ < queries_.size()) { if (++current_query_ < queries_.size()) {
SendNextQuery(net::OK); SendNextQuery(net::OK);
} else { } else {
callback_.Run(result, response); std::move(callback_).Run(result, response);
delete this; delete this;
} }
} }
...@@ -142,7 +142,7 @@ class AdbQuerySocket : AdbClientSocket { ...@@ -142,7 +142,7 @@ class AdbQuerySocket : AdbClientSocket {
bool CheckNetResultOrDie(int result) { bool CheckNetResultOrDie(int result) {
if (result >= 0) if (result >= 0)
return true; return true;
callback_.Run(result, std::string()); std::move(callback_).Run(result, std::string());
delete this; delete this;
return false; return false;
} }
...@@ -157,16 +157,16 @@ class AdbQuerySocket : AdbClientSocket { ...@@ -157,16 +157,16 @@ class AdbQuerySocket : AdbClientSocket {
// static // static
void AdbClientSocket::AdbQuery(int port, void AdbClientSocket::AdbQuery(int port,
const std::string& query, const std::string& query,
const CommandCallback& callback) { CommandCallback callback) {
new AdbQuerySocket(port, query, callback); new AdbQuerySocket(port, query, std::move(callback));
} }
// static // static
void AdbClientSocket::TransportQuery(int port, void AdbClientSocket::TransportQuery(int port,
const std::string& serial, const std::string& serial,
const std::string& socket_name, const std::string& socket_name,
const SocketCallback& callback) { SocketCallback callback) {
new AdbTransportSocket(port, serial, socket_name, callback); new AdbTransportSocket(port, serial, socket_name, std::move(callback));
} }
AdbClientSocket::AdbClientSocket(int port) AdbClientSocket::AdbClientSocket(int port)
...@@ -200,7 +200,7 @@ void AdbClientSocket::Connect(net::CompletionOnceCallback callback) { ...@@ -200,7 +200,7 @@ void AdbClientSocket::Connect(net::CompletionOnceCallback callback) {
void AdbClientSocket::SendCommand(const std::string& command, void AdbClientSocket::SendCommand(const std::string& command,
bool is_void, bool is_void,
const CommandCallback& callback) { CommandCallback callback) {
scoped_refptr<net::StringIOBuffer> request_buffer = scoped_refptr<net::StringIOBuffer> request_buffer =
base::MakeRefCounted<net::StringIOBuffer>(EncodeMessage(command)); base::MakeRefCounted<net::StringIOBuffer>(EncodeMessage(command));
net::NetworkTrafficAnnotationTag traffic_annotation = net::NetworkTrafficAnnotationTag traffic_annotation =
...@@ -226,71 +226,75 @@ void AdbClientSocket::SendCommand(const std::string& command, ...@@ -226,71 +226,75 @@ void AdbClientSocket::SendCommand(const std::string& command,
"This is not a network request and is only used for remote " "This is not a network request and is only used for remote "
"debugging." "debugging."
})"); })");
int result =
socket_->Write(request_buffer.get(), request_buffer->size(), base::RepeatingCallback<void(int)> on_response =
base::BindOnce(&AdbClientSocket::ReadResponse, base::AdaptCallbackForRepeating(
base::Unretained(this), callback, is_void), base::BindOnce(&AdbClientSocket::ReadResponse, base::Unretained(this),
traffic_annotation); std::move(callback), is_void));
int result = socket_->Write(request_buffer.get(), request_buffer->size(),
on_response, traffic_annotation);
if (result != net::ERR_IO_PENDING) if (result != net::ERR_IO_PENDING)
ReadResponse(callback, is_void, result); on_response.Run(result);
} }
void AdbClientSocket::ReadResponse(const CommandCallback& callback, void AdbClientSocket::ReadResponse(CommandCallback callback,
bool is_void, bool is_void,
int result) { int result) {
if (result < 0) { if (result < 0) {
callback.Run(result, "IO error"); std::move(callback).Run(result, "IO error");
return; return;
} }
scoped_refptr<net::IOBuffer> response_buffer = scoped_refptr<net::IOBuffer> response_buffer =
base::MakeRefCounted<net::IOBuffer>(kBufferSize); base::MakeRefCounted<net::IOBuffer>(kBufferSize);
result = socket_->Read( base::RepeatingCallback<void(int)> on_response_header =
response_buffer.get(), kBufferSize, base::AdaptCallbackForRepeating(base::BindOnce(
base::BindOnce(&AdbClientSocket::OnResponseHeader, base::Unretained(this), &AdbClientSocket::OnResponseHeader, base::Unretained(this),
callback, is_void, response_buffer)); std::move(callback), is_void, response_buffer));
result =
socket_->Read(response_buffer.get(), kBufferSize, on_response_header);
if (result != net::ERR_IO_PENDING) if (result != net::ERR_IO_PENDING)
OnResponseHeader(callback, is_void, response_buffer, result); on_response_header.Run(result);
} }
void AdbClientSocket::OnResponseHeader( void AdbClientSocket::OnResponseHeader(
const CommandCallback& callback, CommandCallback callback,
bool is_void, bool is_void,
scoped_refptr<net::IOBuffer> response_buffer, scoped_refptr<net::IOBuffer> response_buffer,
int result) { int result) {
if (result <= 0) { if (result <= 0) {
callback.Run(result == 0 ? net::ERR_CONNECTION_CLOSED : result, std::move(callback).Run(result == 0 ? net::ERR_CONNECTION_CLOSED : result,
"IO error"); "IO error");
return; return;
} }
std::string data = std::string(response_buffer->data(), result); std::string data = std::string(response_buffer->data(), result);
if (result < 4) { if (result < 4) {
callback.Run(net::ERR_FAILED, "Response is too short: " + data); std::move(callback).Run(net::ERR_FAILED, "Response is too short: " + data);
return; return;
} }
std::string status = data.substr(0, 4); std::string status = data.substr(0, 4);
if (status != kOkayResponse) { if (status != kOkayResponse) {
callback.Run(net::ERR_FAILED, data); std::move(callback).Run(net::ERR_FAILED, data);
return; return;
} }
// Trim OKAY. // Trim OKAY.
data = data.substr(4); data = data.substr(4);
if (!is_void) if (!is_void)
OnResponseData(callback, data, response_buffer, -1, 0); OnResponseData(std::move(callback), data, response_buffer, -1, 0);
else else
callback.Run(net::OK, data); std::move(callback).Run(net::OK, data);
} }
void AdbClientSocket::OnResponseData( void AdbClientSocket::OnResponseData(
const CommandCallback& callback, CommandCallback callback,
const std::string& response, const std::string& response,
scoped_refptr<net::IOBuffer> response_buffer, scoped_refptr<net::IOBuffer> response_buffer,
int bytes_left, int bytes_left,
int result) { int result) {
if (result < 0) { if (result < 0) {
callback.Run(result, "IO error"); std::move(callback).Run(result, "IO error");
return; return;
} }
...@@ -310,17 +314,21 @@ void AdbClientSocket::OnResponseData( ...@@ -310,17 +314,21 @@ void AdbClientSocket::OnResponseData(
} }
if (bytes_left == 0) { if (bytes_left == 0) {
callback.Run(net::OK, new_response); std::move(callback).Run(net::OK, new_response);
return; return;
} }
// Read tail // Read tail
base::RepeatingCallback<void(int, const std::string&)> on_finished =
base::AdaptCallbackForRepeating(std::move(callback));
result = socket_->Read( result = socket_->Read(
response_buffer.get(), kBufferSize, response_buffer.get(), kBufferSize,
base::BindOnce(&AdbClientSocket::OnResponseData, base::Unretained(this), base::BindOnce(&AdbClientSocket::OnResponseData, base::Unretained(this),
callback, new_response, response_buffer, bytes_left)); on_finished, new_response, response_buffer, bytes_left));
if (result > 0) if (result > 0) {
OnResponseData(callback, new_response, response_buffer, bytes_left, result); OnResponseData(on_finished, new_response, response_buffer, bytes_left,
else if (result != net::ERR_IO_PENDING) result);
callback.Run(net::OK, new_response); } else if (result != net::ERR_IO_PENDING) {
on_finished.Run(net::OK, new_response);
}
} }
...@@ -14,19 +14,19 @@ ...@@ -14,19 +14,19 @@
class AdbClientSocket { class AdbClientSocket {
public: public:
typedef base::Callback<void(int, const std::string&)> CommandCallback; typedef base::OnceCallback<void(int, const std::string&)> CommandCallback;
typedef base::Callback<void(int result, std::unique_ptr<net::StreamSocket>)> typedef base::OnceCallback<void(int result,
std::unique_ptr<net::StreamSocket>)>
SocketCallback; SocketCallback;
static void AdbQuery(int port, static void AdbQuery(int port,
const std::string& query, const std::string& query,
const CommandCallback& callback); CommandCallback callback);
static void TransportQuery(int port, static void TransportQuery(int port,
const std::string& serial, const std::string& serial,
const std::string& socket_name, const std::string& socket_name,
const SocketCallback& callback); SocketCallback callback);
protected: protected:
explicit AdbClientSocket(int port); explicit AdbClientSocket(int port);
...@@ -36,19 +36,19 @@ class AdbClientSocket { ...@@ -36,19 +36,19 @@ class AdbClientSocket {
void SendCommand(const std::string& command, void SendCommand(const std::string& command,
bool is_void, bool is_void,
const CommandCallback& callback); CommandCallback callback);
std::unique_ptr<net::StreamSocket> socket_; std::unique_ptr<net::StreamSocket> socket_;
private: private:
void ReadResponse(const CommandCallback& callback, bool is_void, int result); void ReadResponse(CommandCallback callback, bool is_void, int result);
void OnResponseHeader(const CommandCallback& callback, void OnResponseHeader(CommandCallback callback,
bool is_void, bool is_void,
scoped_refptr<net::IOBuffer> response_buffer, scoped_refptr<net::IOBuffer> response_buffer,
int result); int result);
void OnResponseData(const CommandCallback& callback, void OnResponseData(CommandCallback callback,
const std::string& response, const std::string& response,
scoped_refptr<net::IOBuffer> response_buffer, scoped_refptr<net::IOBuffer> response_buffer,
int bytes_left, int bytes_left,
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
#include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process.h"
#include "chrome/browser/devtools/device/adb/adb_client_socket.h"
#include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/net/system_network_context_manager.h"
#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
...@@ -44,7 +43,7 @@ static void RunSocketCallback( ...@@ -44,7 +43,7 @@ static void RunSocketCallback(
class ResolveHostAndOpenSocket final : public network::ResolveHostClientBase { class ResolveHostAndOpenSocket final : public network::ResolveHostClientBase {
public: public:
ResolveHostAndOpenSocket(const net::HostPortPair& address, ResolveHostAndOpenSocket(const net::HostPortPair& address,
const AdbClientSocket::SocketCallback& callback) const AndroidDeviceManager::SocketCallback& callback)
: callback_(callback) { : callback_(callback) {
mojo::Remote<network::mojom::HostResolver> resolver; mojo::Remote<network::mojom::HostResolver> resolver;
content::GetUIThreadTaskRunner({})->PostTask( content::GetUIThreadTaskRunner({})->PostTask(
...@@ -92,7 +91,7 @@ class ResolveHostAndOpenSocket final : public network::ResolveHostClientBase { ...@@ -92,7 +91,7 @@ class ResolveHostAndOpenSocket final : public network::ResolveHostClientBase {
delete this; delete this;
} }
AdbClientSocket::SocketCallback callback_; AndroidDeviceManager::SocketCallback callback_;
mojo::Receiver<network::mojom::ResolveHostClient> receiver_{this}; mojo::Receiver<network::mojom::ResolveHostClient> receiver_{this};
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment