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); |
} |