Chromium Code Reviews| 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); |
| } |