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

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

Issue 644963003: [DevTools] Port forwarding doesn't keep USB connection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git/+/websocket
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
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 35ddf13ec5d392ff7d1d096a42afdbb7178a1334..7f9f5b7b80683030f9a69da0bef6bf928e3facac 100644
--- a/chrome/browser/devtools/device/android_web_socket.cc
+++ b/chrome/browser/devtools/device/android_web_socket.cc
@@ -132,12 +132,14 @@ AndroidDeviceManager::AndroidWebSocket::AndroidWebSocket(
const std::string& socket_name,
const std::string& url,
Delegate* delegate)
- : device_(device),
+ : device_(device.get()),
socket_impl_(nullptr),
delegate_(delegate),
weak_factory_(this) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(delegate_);
+ DCHECK(device_);
+ device_->sockets_.insert(this);
device_->HttpUpgrade(
socket_name, url,
base::Bind(&AndroidWebSocket::Connected, weak_factory_.GetWeakPtr()));
@@ -145,15 +147,15 @@ AndroidDeviceManager::AndroidWebSocket::AndroidWebSocket(
AndroidDeviceManager::AndroidWebSocket::~AndroidWebSocket() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (socket_impl_)
- device_->device_message_loop_->DeleteSoon(FROM_HERE, socket_impl_);
+ Terminate();
}
void AndroidDeviceManager::AndroidWebSocket::SendFrame(
const std::string& message) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(socket_impl_);
- device_->device_message_loop_->PostTask(
+ DCHECK(device_);
+ device_->message_loop_proxy_->PostTask(
FROM_HERE,
base::Bind(&WebSocketImpl::SendFrame,
base::Unretained(socket_impl_), message));
@@ -170,7 +172,7 @@ void AndroidDeviceManager::AndroidWebSocket::Connected(
socket_impl_ = new WebSocketImpl(base::MessageLoopProxy::current(),
weak_factory_.GetWeakPtr(),
socket.Pass());
- device_->device_message_loop_->PostTask(
+ device_->message_loop_proxy_->PostTask(
FROM_HERE,
base::Bind(&WebSocketImpl::StartListening,
base::Unretained(socket_impl_)));
@@ -185,13 +187,27 @@ void AndroidDeviceManager::AndroidWebSocket::OnFrameRead(
void AndroidDeviceManager::AndroidWebSocket::OnSocketClosed() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ Terminate();
delegate_->OnSocketClosed();
}
+void AndroidDeviceManager::AndroidWebSocket::Terminate() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (socket_impl_) {
+ DCHECK(device_);
+ device_->message_loop_proxy_->DeleteSoon(FROM_HERE, socket_impl_);
+ socket_impl_ = nullptr;
+ }
+ if (device_) {
+ device_->sockets_.erase(this);
+ device_ = nullptr;
+ }
+}
+
AndroidDeviceManager::AndroidWebSocket*
AndroidDeviceManager::Device::CreateWebSocket(
- const std::string& socket,
+ const std::string& socket_name,
const std::string& url,
AndroidWebSocket::Delegate* delegate) {
- return new AndroidWebSocket(this, socket, url, delegate);
+ return new AndroidWebSocket(this, socket_name, url, delegate);
}
« no previous file with comments | « chrome/browser/devtools/device/android_device_manager.cc ('k') | chrome/browser/devtools/device/devtools_android_bridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698