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

Side by Side 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: Rebased 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 unified diff | Download patch
OLDNEW
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/device/android_device_manager.cc ('k') | chrome/browser/devtools/device/devtools_android_bridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698