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