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

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: 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 ba1ea9383a8257e2ea56a6ef90bcdf5ce4cd105c..d28e2eb330fe4b73b5e1303c44fb26fd9b7159fb 100644
--- a/chrome/browser/devtools/device/android_web_socket.cc
+++ b/chrome/browser/devtools/device/android_web_socket.cc
@@ -131,13 +131,15 @@ AndroidDeviceManager::AndroidWebSocket::AndroidWebSocket(
const std::string& socket_name,
const std::string& url,
Delegate* delegate)
- : device_(device),
+ : device_(device.get()),
url_(url),
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,14 +147,14 @@ 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_);
+ DCHECK(device_);
device_->device_message_loop_->PostTask(
FROM_HERE,
base::Bind(&WebSocketImpl::SendFrame,
@@ -185,13 +187,28 @@ 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_->device_message_loop_->DeleteSoon(FROM_HERE, socket_impl_);
dgozman 2014/10/21 11:54:02 I was about to ask whether this message loop could
vkuzkokov 2014/10/21 13:00:54 Done.
+ 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);
}

Powered by Google App Engine
This is Rietveld 408576698