Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1285)

Unified Diff: chrome/browser/devtools/device/android_web_socket.cc

Issue 620183002: DevTools: Merged AndroidWebSocket and AndroidWebSocketImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@page
Patch Set: Rebased Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/devtools/device/android_device_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/devtools/device/android_web_socket.cc
diff --git a/chrome/browser/devtools/device/android_web_socket.cc b/chrome/browser/devtools/device/android_web_socket.cc
index 0e45830a86443387c138116a8ff35c3bd3bbb493..35ddf13ec5d392ff7d1d096a42afdbb7178a1334 100644
--- a/chrome/browser/devtools/device/android_web_socket.cc
+++ b/chrome/browser/devtools/device/android_web_socket.cc
@@ -19,262 +19,179 @@ namespace {
const int kBufferSize = 16 * 1024;
-class WebSocketImpl {
- public:
- typedef AndroidDeviceManager::AndroidWebSocket::Delegate Delegate;
-
- WebSocketImpl(Delegate* delegate,
- scoped_ptr<net::StreamSocket> socket);
- void StartListening();
- void SendFrame(const std::string& message);
-
- private:
- void OnBytesRead(scoped_refptr<net::IOBuffer> response_buffer, int result);
- void SendPendingRequests(int result);
- void Disconnect();
-
- Delegate* delegate_;
- scoped_ptr<net::StreamSocket> socket_;
- std::string response_buffer_;
- std::string request_buffer_;
- base::ThreadChecker thread_checker_;
- DISALLOW_COPY_AND_ASSIGN(WebSocketImpl);
-};
+} // namespace
-class DelegateWrapper
- : public AndroidDeviceManager::AndroidWebSocket::Delegate {
+class AndroidDeviceManager::AndroidWebSocket::WebSocketImpl {
public:
- DelegateWrapper(base::WeakPtr<Delegate> weak_delegate,
- scoped_refptr<base::MessageLoopProxy> message_loop)
- : weak_delegate_(weak_delegate),
- message_loop_(message_loop) {
- }
-
- ~DelegateWrapper() override {}
-
- // AndroidWebSocket::Delegate implementation
- void OnSocketOpened() override {
- message_loop_->PostTask(FROM_HERE,
- base::Bind(&Delegate::OnSocketOpened, weak_delegate_));
+ WebSocketImpl(scoped_refptr<base::MessageLoopProxy> response_message_loop,
+ base::WeakPtr<AndroidWebSocket> weak_socket,
+ scoped_ptr<net::StreamSocket> socket)
+ : response_message_loop_(response_message_loop),
+ weak_socket_(weak_socket),
+ socket_(socket.Pass()) {
+ thread_checker_.DetachFromThread();
}
- void OnFrameRead(const std::string& message) override {
- message_loop_->PostTask(FROM_HERE,
- base::Bind(&Delegate::OnFrameRead, weak_delegate_, message));
+ void StartListening() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(socket_);
+ scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize));
+ Read(buffer);
}
- void OnSocketClosed() override {
- message_loop_->PostTask(FROM_HERE,
- base::Bind(&Delegate::OnSocketClosed, weak_delegate_));
+ void SendFrame(const std::string& message) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ if (!socket_)
+ return;
+ int mask = base::RandInt(0, 0x7FFFFFFF);
+ std::string encoded_frame = WebSocket::EncodeFrameHybi17(message, mask);
+ request_buffer_ += encoded_frame;
+ if (request_buffer_.length() == encoded_frame.length())
+ SendPendingRequests(0);
}
private:
- base::WeakPtr<Delegate> weak_delegate_;
- scoped_refptr<base::MessageLoopProxy> message_loop_;
-};
-
-class AndroidWebSocketImpl
- : public AndroidDeviceManager::AndroidWebSocket,
- public AndroidDeviceManager::AndroidWebSocket::Delegate {
- public:
- typedef AndroidDeviceManager::Device Device;
- AndroidWebSocketImpl(
- scoped_refptr<base::MessageLoopProxy> device_message_loop,
- scoped_refptr<Device> device,
- const std::string& socket_name,
- const std::string& url,
- AndroidWebSocket::Delegate* delegate);
+ void Read(scoped_refptr<net::IOBuffer> response_buffer) {
+ int result = socket_->Read(
+ response_buffer.get(),
+ kBufferSize,
+ base::Bind(&WebSocketImpl::OnBytesRead,
+ base::Unretained(this), response_buffer));
+ if (result != net::ERR_IO_PENDING)
+ OnBytesRead(response_buffer, result);
+ }
- ~AndroidWebSocketImpl() override;
+ void OnBytesRead(scoped_refptr<net::IOBuffer> response_buffer, int result) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ if (result <= 0) {
+ Disconnect();
+ return;
+ }
+ response_buffer_.append(response_buffer->data(), result);
+
+ int bytes_consumed;
+ std::string output;
+ WebSocket::ParseResult parse_result = WebSocket::DecodeFrameHybi17(
+ response_buffer_, false, &bytes_consumed, &output);
- // AndroidWebSocket implementation
- void SendFrame(const std::string& message) override;
+ while (parse_result == WebSocket::FRAME_OK) {
+ response_buffer_ = response_buffer_.substr(bytes_consumed);
+ response_message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&AndroidWebSocket::OnFrameRead, weak_socket_, output));
+ parse_result = WebSocket::DecodeFrameHybi17(
+ response_buffer_, false, &bytes_consumed, &output);
+ }
+
+ if (parse_result == WebSocket::FRAME_ERROR ||
+ parse_result == WebSocket::FRAME_CLOSE) {
+ Disconnect();
+ return;
+ }
+ Read(response_buffer);
+ }
- // AndroidWebSocket::Delegate implementation
- void OnSocketOpened() override;
- void OnFrameRead(const std::string& message) override;
- void OnSocketClosed() override;
+ void SendPendingRequests(int result) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ if (result < 0) {
+ Disconnect();
+ return;
+ }
+ request_buffer_ = request_buffer_.substr(result);
+ if (request_buffer_.empty())
+ return;
+
+ scoped_refptr<net::StringIOBuffer> buffer =
+ new net::StringIOBuffer(request_buffer_);
+ result = socket_->Write(buffer.get(), buffer->size(),
+ base::Bind(&WebSocketImpl::SendPendingRequests,
+ base::Unretained(this)));
+ if (result != net::ERR_IO_PENDING)
+ SendPendingRequests(result);
+ }
- private:
- void Connected(int result, scoped_ptr<net::StreamSocket> socket);
+ void Disconnect() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ socket_.reset();
+ response_message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&AndroidWebSocket::OnSocketClosed, weak_socket_));
+ }
- scoped_refptr<base::MessageLoopProxy> device_message_loop_;
- scoped_refptr<Device> device_;
- std::string socket_name_;
- std::string url_;
- WebSocketImpl* connection_;
- DelegateWrapper* delegate_wrapper_;
- AndroidWebSocket::Delegate* delegate_;
- base::WeakPtrFactory<AndroidWebSocketImpl> weak_factory_;
- DISALLOW_COPY_AND_ASSIGN(AndroidWebSocketImpl);
+ scoped_refptr<base::MessageLoopProxy> response_message_loop_;
+ base::WeakPtr<AndroidWebSocket> weak_socket_;
+ scoped_ptr<net::StreamSocket> socket_;
+ std::string response_buffer_;
+ std::string request_buffer_;
+ base::ThreadChecker thread_checker_;
+ DISALLOW_COPY_AND_ASSIGN(WebSocketImpl);
};
-AndroidWebSocketImpl::AndroidWebSocketImpl(
- scoped_refptr<base::MessageLoopProxy> device_message_loop,
+AndroidDeviceManager::AndroidWebSocket::AndroidWebSocket(
scoped_refptr<Device> device,
const std::string& socket_name,
const std::string& url,
- AndroidWebSocket::Delegate* delegate)
- : device_message_loop_(device_message_loop),
- device_(device),
- socket_name_(socket_name),
- url_(url),
+ Delegate* delegate)
+ : device_(device),
+ socket_impl_(nullptr),
delegate_(delegate),
weak_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(delegate_);
device_->HttpUpgrade(
- socket_name_, url_,
- base::Bind(&AndroidWebSocketImpl::Connected, weak_factory_.GetWeakPtr()));
+ socket_name, url,
+ base::Bind(&AndroidWebSocket::Connected, weak_factory_.GetWeakPtr()));
}
-void AndroidWebSocketImpl::SendFrame(const std::string& message) {
+AndroidDeviceManager::AndroidWebSocket::~AndroidWebSocket() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- device_message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&WebSocketImpl::SendFrame,
- base::Unretained(connection_), message));
-}
-
-void WebSocketImpl::SendFrame(const std::string& message) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (!socket_)
- return;
- int mask = base::RandInt(0, 0x7FFFFFFF);
- std::string encoded_frame = WebSocket::EncodeFrameHybi17(message, mask);
- request_buffer_ += encoded_frame;
- if (request_buffer_.length() == encoded_frame.length())
- SendPendingRequests(0);
+ if (socket_impl_)
+ device_->device_message_loop_->DeleteSoon(FROM_HERE, socket_impl_);
}
-AndroidWebSocketImpl::~AndroidWebSocketImpl() {
+void AndroidDeviceManager::AndroidWebSocket::SendFrame(
+ const std::string& message) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- device_message_loop_->DeleteSoon(FROM_HERE, connection_);
- device_message_loop_->DeleteSoon(FROM_HERE, delegate_wrapper_);
-}
-
-WebSocketImpl::WebSocketImpl(Delegate* delegate,
- scoped_ptr<net::StreamSocket> socket)
- : delegate_(delegate),
- socket_(socket.Pass()) {
- thread_checker_.DetachFromThread();
+ DCHECK(socket_impl_);
+ device_->device_message_loop_->PostTask(
+ FROM_HERE,
+ base::Bind(&WebSocketImpl::SendFrame,
+ base::Unretained(socket_impl_), message));
}
-void AndroidWebSocketImpl::Connected(int result,
- scoped_ptr<net::StreamSocket> socket) {
+void AndroidDeviceManager::AndroidWebSocket::Connected(
+ int result,
+ scoped_ptr<net::StreamSocket> socket) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (result != net::OK || socket == NULL) {
+ if (result != net::OK || !socket.get()) {
OnSocketClosed();
return;
}
- delegate_wrapper_ = new DelegateWrapper(weak_factory_.GetWeakPtr(),
- base::MessageLoopProxy::current());
- connection_ = new WebSocketImpl(delegate_wrapper_, socket.Pass());
- device_message_loop_->PostTask(
+ socket_impl_ = new WebSocketImpl(base::MessageLoopProxy::current(),
+ weak_factory_.GetWeakPtr(),
+ socket.Pass());
+ device_->device_message_loop_->PostTask(
FROM_HERE,
base::Bind(&WebSocketImpl::StartListening,
- base::Unretained(connection_)));
- OnSocketOpened();
-}
-
-void WebSocketImpl::StartListening() {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(socket_);
- scoped_refptr<net::IOBuffer> response_buffer =
- new net::IOBuffer(kBufferSize);
- int result = socket_->Read(
- response_buffer.get(),
- kBufferSize,
- base::Bind(&WebSocketImpl::OnBytesRead,
- base::Unretained(this), response_buffer));
- if (result != net::ERR_IO_PENDING)
- OnBytesRead(response_buffer, result);
-}
-
-void WebSocketImpl::OnBytesRead(scoped_refptr<net::IOBuffer> response_buffer,
- int result) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (result <= 0) {
- Disconnect();
- return;
- }
-
- response_buffer_.append(response_buffer->data(), result);
-
- int bytes_consumed;
- std::string output;
- WebSocket::ParseResult parse_result = WebSocket::DecodeFrameHybi17(
- response_buffer_, false, &bytes_consumed, &output);
-
- while (parse_result == WebSocket::FRAME_OK) {
- response_buffer_ = response_buffer_.substr(bytes_consumed);
- delegate_->OnFrameRead(output);
- parse_result = WebSocket::DecodeFrameHybi17(
- response_buffer_, false, &bytes_consumed, &output);
- }
-
- if (parse_result == WebSocket::FRAME_ERROR ||
- parse_result == WebSocket::FRAME_CLOSE) {
- Disconnect();
- return;
- }
-
- result = socket_->Read(
- response_buffer.get(),
- kBufferSize,
- base::Bind(&WebSocketImpl::OnBytesRead,
- base::Unretained(this), response_buffer));
- if (result != net::ERR_IO_PENDING)
- OnBytesRead(response_buffer, result);
-}
-
-void WebSocketImpl::SendPendingRequests(int result) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (result < 0) {
- Disconnect();
- return;
- }
- request_buffer_ = request_buffer_.substr(result);
- if (request_buffer_.empty())
- return;
-
- scoped_refptr<net::StringIOBuffer> buffer =
- new net::StringIOBuffer(request_buffer_);
- result = socket_->Write(buffer.get(), buffer->size(),
- base::Bind(&WebSocketImpl::SendPendingRequests,
- base::Unretained(this)));
- if (result != net::ERR_IO_PENDING)
- SendPendingRequests(result);
-}
-
-void WebSocketImpl::Disconnect() {
- DCHECK(thread_checker_.CalledOnValidThread());
- socket_.reset();
- delegate_->OnSocketClosed();
-}
-
-void AndroidWebSocketImpl::OnSocketOpened() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ base::Unretained(socket_impl_)));
delegate_->OnSocketOpened();
}
-void AndroidWebSocketImpl::OnFrameRead(const std::string& message) {
+void AndroidDeviceManager::AndroidWebSocket::OnFrameRead(
+ const std::string& message) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
delegate_->OnFrameRead(message);
}
-void AndroidWebSocketImpl::OnSocketClosed() {
+void AndroidDeviceManager::AndroidWebSocket::OnSocketClosed() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
delegate_->OnSocketClosed();
}
-} // namespace
-
AndroidDeviceManager::AndroidWebSocket*
AndroidDeviceManager::Device::CreateWebSocket(
const std::string& socket,
const std::string& url,
- AndroidDeviceManager::AndroidWebSocket::Delegate* delegate) {
- return new AndroidWebSocketImpl(
- device_message_loop_, this, socket, url, delegate);
+ AndroidWebSocket::Delegate* delegate) {
+ return new AndroidWebSocket(this, socket, url, delegate);
}
« no previous file with comments | « chrome/browser/devtools/device/android_device_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698