| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/weak_ptr.h" | 5 #include "base/memory/weak_ptr.h" |
| 6 #include "base/message_loop/message_loop.h" | 6 #include "base/message_loop/message_loop.h" |
| 7 #include "base/rand_util.h" | 7 #include "base/rand_util.h" |
| 8 #include "chrome/browser/devtools/device/android_device_manager.h" | 8 #include "chrome/browser/devtools/device/android_device_manager.h" |
| 9 #include "content/public/browser/browser_thread.h" | 9 #include "content/public/browser/browser_thread.h" |
| 10 #include "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 std::string request_buffer_; | 125 std::string request_buffer_; |
| 126 base::ThreadChecker thread_checker_; | 126 base::ThreadChecker thread_checker_; |
| 127 DISALLOW_COPY_AND_ASSIGN(WebSocketImpl); | 127 DISALLOW_COPY_AND_ASSIGN(WebSocketImpl); |
| 128 }; | 128 }; |
| 129 | 129 |
| 130 AndroidDeviceManager::AndroidWebSocket::AndroidWebSocket( | 130 AndroidDeviceManager::AndroidWebSocket::AndroidWebSocket( |
| 131 scoped_refptr<Device> device, | 131 scoped_refptr<Device> device, |
| 132 const std::string& socket_name, | 132 const std::string& socket_name, |
| 133 const std::string& url, | 133 const std::string& url, |
| 134 Delegate* delegate) | 134 Delegate* delegate) |
| 135 : device_(device), | 135 : device_(device.get()), |
| 136 socket_impl_(nullptr), | 136 socket_impl_(nullptr), |
| 137 delegate_(delegate), | 137 delegate_(delegate), |
| 138 weak_factory_(this) { | 138 weak_factory_(this) { |
| 139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 140 DCHECK(delegate_); | 140 DCHECK(delegate_); |
| 141 DCHECK(device_); |
| 142 device_->sockets_.insert(this); |
| 141 device_->HttpUpgrade( | 143 device_->HttpUpgrade( |
| 142 socket_name, url, | 144 socket_name, url, |
| 143 base::Bind(&AndroidWebSocket::Connected, weak_factory_.GetWeakPtr())); | 145 base::Bind(&AndroidWebSocket::Connected, weak_factory_.GetWeakPtr())); |
| 144 } | 146 } |
| 145 | 147 |
| 146 AndroidDeviceManager::AndroidWebSocket::~AndroidWebSocket() { | 148 AndroidDeviceManager::AndroidWebSocket::~AndroidWebSocket() { |
| 147 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 148 if (socket_impl_) | 150 Terminate(); |
| 149 device_->device_message_loop_->DeleteSoon(FROM_HERE, socket_impl_); | |
| 150 } | 151 } |
| 151 | 152 |
| 152 void AndroidDeviceManager::AndroidWebSocket::SendFrame( | 153 void AndroidDeviceManager::AndroidWebSocket::SendFrame( |
| 153 const std::string& message) { | 154 const std::string& message) { |
| 154 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 155 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 155 DCHECK(socket_impl_); | 156 DCHECK(socket_impl_); |
| 156 device_->device_message_loop_->PostTask( | 157 DCHECK(device_); |
| 158 device_->message_loop_proxy_->PostTask( |
| 157 FROM_HERE, | 159 FROM_HERE, |
| 158 base::Bind(&WebSocketImpl::SendFrame, | 160 base::Bind(&WebSocketImpl::SendFrame, |
| 159 base::Unretained(socket_impl_), message)); | 161 base::Unretained(socket_impl_), message)); |
| 160 } | 162 } |
| 161 | 163 |
| 162 void AndroidDeviceManager::AndroidWebSocket::Connected( | 164 void AndroidDeviceManager::AndroidWebSocket::Connected( |
| 163 int result, | 165 int result, |
| 164 scoped_ptr<net::StreamSocket> socket) { | 166 scoped_ptr<net::StreamSocket> socket) { |
| 165 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 167 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 166 if (result != net::OK || !socket.get()) { | 168 if (result != net::OK || !socket.get()) { |
| 167 OnSocketClosed(); | 169 OnSocketClosed(); |
| 168 return; | 170 return; |
| 169 } | 171 } |
| 170 socket_impl_ = new WebSocketImpl(base::MessageLoopProxy::current(), | 172 socket_impl_ = new WebSocketImpl(base::MessageLoopProxy::current(), |
| 171 weak_factory_.GetWeakPtr(), | 173 weak_factory_.GetWeakPtr(), |
| 172 socket.Pass()); | 174 socket.Pass()); |
| 173 device_->device_message_loop_->PostTask( | 175 device_->message_loop_proxy_->PostTask( |
| 174 FROM_HERE, | 176 FROM_HERE, |
| 175 base::Bind(&WebSocketImpl::StartListening, | 177 base::Bind(&WebSocketImpl::StartListening, |
| 176 base::Unretained(socket_impl_))); | 178 base::Unretained(socket_impl_))); |
| 177 delegate_->OnSocketOpened(); | 179 delegate_->OnSocketOpened(); |
| 178 } | 180 } |
| 179 | 181 |
| 180 void AndroidDeviceManager::AndroidWebSocket::OnFrameRead( | 182 void AndroidDeviceManager::AndroidWebSocket::OnFrameRead( |
| 181 const std::string& message) { | 183 const std::string& message) { |
| 182 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 184 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 183 delegate_->OnFrameRead(message); | 185 delegate_->OnFrameRead(message); |
| 184 } | 186 } |
| 185 | 187 |
| 186 void AndroidDeviceManager::AndroidWebSocket::OnSocketClosed() { | 188 void AndroidDeviceManager::AndroidWebSocket::OnSocketClosed() { |
| 187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 189 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 190 Terminate(); |
| 188 delegate_->OnSocketClosed(); | 191 delegate_->OnSocketClosed(); |
| 189 } | 192 } |
| 190 | 193 |
| 194 void AndroidDeviceManager::AndroidWebSocket::Terminate() { |
| 195 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 196 if (socket_impl_) { |
| 197 DCHECK(device_); |
| 198 device_->message_loop_proxy_->DeleteSoon(FROM_HERE, socket_impl_); |
| 199 socket_impl_ = nullptr; |
| 200 } |
| 201 if (device_) { |
| 202 device_->sockets_.erase(this); |
| 203 device_ = nullptr; |
| 204 } |
| 205 } |
| 206 |
| 191 AndroidDeviceManager::AndroidWebSocket* | 207 AndroidDeviceManager::AndroidWebSocket* |
| 192 AndroidDeviceManager::Device::CreateWebSocket( | 208 AndroidDeviceManager::Device::CreateWebSocket( |
| 193 const std::string& socket, | 209 const std::string& socket_name, |
| 194 const std::string& url, | 210 const std::string& url, |
| 195 AndroidWebSocket::Delegate* delegate) { | 211 AndroidWebSocket::Delegate* delegate) { |
| 196 return new AndroidWebSocket(this, socket, url, delegate); | 212 return new AndroidWebSocket(this, socket_name, url, delegate); |
| 197 } | 213 } |
| OLD | NEW |