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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
124 std::string request_buffer_; | 124 std::string request_buffer_; |
125 base::ThreadChecker thread_checker_; | 125 base::ThreadChecker thread_checker_; |
126 DISALLOW_COPY_AND_ASSIGN(WebSocketImpl); | 126 DISALLOW_COPY_AND_ASSIGN(WebSocketImpl); |
127 }; | 127 }; |
128 | 128 |
129 AndroidDeviceManager::AndroidWebSocket::AndroidWebSocket( | 129 AndroidDeviceManager::AndroidWebSocket::AndroidWebSocket( |
130 scoped_refptr<Device> device, | 130 scoped_refptr<Device> device, |
131 const std::string& socket_name, | 131 const std::string& socket_name, |
132 const std::string& url, | 132 const std::string& url, |
133 Delegate* delegate) | 133 Delegate* delegate) |
134 : device_(device), | 134 : device_(device.get()), |
135 url_(url), | 135 url_(url), |
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_); |
157 DCHECK(device_); | |
156 device_->device_message_loop_->PostTask( | 158 device_->device_message_loop_->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)); |
(...skipping 12 matching lines...) Expand all Loading... | |
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_->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.
| |
199 socket_impl_ = nullptr; | |
200 } | |
201 if (device_) { | |
202 device_->sockets_.erase(this); | |
203 device_ = nullptr; | |
204 } | |
205 } | |
206 | |
207 | |
191 AndroidDeviceManager::AndroidWebSocket* | 208 AndroidDeviceManager::AndroidWebSocket* |
192 AndroidDeviceManager::Device::CreateWebSocket( | 209 AndroidDeviceManager::Device::CreateWebSocket( |
193 const std::string& socket, | 210 const std::string& socket_name, |
194 const std::string& url, | 211 const std::string& url, |
195 AndroidWebSocket::Delegate* delegate) { | 212 AndroidWebSocket::Delegate* delegate) { |
196 return new AndroidWebSocket(this, socket, url, delegate); | 213 return new AndroidWebSocket(this, socket_name, url, delegate); |
197 } | 214 } |
OLD | NEW |