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

Side by Side Diff: chrome/browser/devtools/adb/android_usb_socket.cc

Issue 230773003: DevTools: do not retain android_usb_devices in their manager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review comments addressed. Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "chrome/browser/devtools/adb/android_usb_socket.h" 5 #include "chrome/browser/devtools/adb/android_usb_socket.h"
6 6
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 8
9 namespace { 9 namespace {
10 10
(...skipping 15 matching lines...) Expand all
26 26
27 AndroidUsbSocket::AndroidUsbSocket(scoped_refptr<AndroidUsbDevice> device, 27 AndroidUsbSocket::AndroidUsbSocket(scoped_refptr<AndroidUsbDevice> device,
28 uint32 socket_id, 28 uint32 socket_id,
29 const std::string& command, 29 const std::string& command,
30 base::Callback<void(uint32)> delete_callback) 30 base::Callback<void(uint32)> delete_callback)
31 : device_(device), 31 : device_(device),
32 command_(command), 32 command_(command),
33 delete_callback_(delete_callback), 33 delete_callback_(delete_callback),
34 local_id_(socket_id), 34 local_id_(socket_id),
35 remote_id_(0), 35 remote_id_(0),
36 is_connected_(false), 36 is_connected_(false) {
37 is_closed_(false) {
38 } 37 }
39 38
40 AndroidUsbSocket::~AndroidUsbSocket() { 39 AndroidUsbSocket::~AndroidUsbSocket() {
41 DCHECK(CalledOnValidThread()); 40 DCHECK(CalledOnValidThread());
42 if (is_connected_) 41 if (is_connected_)
43 Disconnect(); 42 Disconnect();
44 delete_callback_.Run(local_id_); 43 if (!delete_callback_.is_null())
44 delete_callback_.Run(local_id_);
45 } 45 }
46 46
47 void AndroidUsbSocket::HandleIncoming(scoped_refptr<AdbMessage> message) { 47 void AndroidUsbSocket::HandleIncoming(scoped_refptr<AdbMessage> message) {
48 if (!device_)
49 return;
50
48 CHECK_EQ(message->arg1, local_id_); 51 CHECK_EQ(message->arg1, local_id_);
49 switch (message->command) { 52 switch (message->command) {
50 case AdbMessage::kCommandOKAY: 53 case AdbMessage::kCommandOKAY:
51 if (!is_connected_) { 54 if (!is_connected_) {
52 remote_id_ = message->arg0; 55 remote_id_ = message->arg0;
53 is_connected_ = true; 56 is_connected_ = true;
54 net::CompletionCallback callback = connect_callback_; 57 net::CompletionCallback callback = connect_callback_;
55 connect_callback_.Reset(); 58 connect_callback_.Reset();
56 callback.Run(net::OK); 59 callback.Run(net::OK);
57 // "this" can be NULL. 60 // "this" can be NULL.
(...skipping 14 matching lines...) Expand all
72 callback.Run(net::OK); 75 callback.Run(net::OK);
73 // "this" can be NULL. 76 // "this" can be NULL.
74 } else { 77 } else {
75 RespondToReaders(false); 78 RespondToReaders(false);
76 // "this" can be NULL. 79 // "this" can be NULL.
77 } 80 }
78 break; 81 break;
79 case AdbMessage::kCommandCLSE: 82 case AdbMessage::kCommandCLSE:
80 if (is_connected_) 83 if (is_connected_)
81 device_->Send(AdbMessage::kCommandCLSE, local_id_, 0, ""); 84 device_->Send(AdbMessage::kCommandCLSE, local_id_, 0, "");
82 is_connected_ = false; 85 Terminated();
83 is_closed_ = true;
84 RespondToReaders(true);
85 // "this" can be NULL. 86 // "this" can be NULL.
86 break; 87 break;
87 default: 88 default:
88 break; 89 break;
89 } 90 }
90 } 91 }
91 92
92 void AndroidUsbSocket::Terminated() { 93 void AndroidUsbSocket::Terminated() {
93 is_connected_ = false; 94 is_connected_ = false;
94 is_closed_ = true; 95
96 // Break the socket -> device connection, release the device.
97 delete_callback_.Run(local_id_);
98 delete_callback_.Reset();
99 device_ = NULL;
100
101 // Respond to pending callbacks.
95 if (!connect_callback_.is_null()) { 102 if (!connect_callback_.is_null()) {
96 net::CompletionCallback callback = connect_callback_; 103 net::CompletionCallback callback = connect_callback_;
97 connect_callback_.Reset(); 104 connect_callback_.Reset();
98 callback.Run(net::ERR_FAILED); 105 callback.Run(net::ERR_FAILED);
99 // "this" can be NULL. 106 // "this" can be NULL.
100 return; 107 return;
101 } 108 }
102 RespondToReaders(true); 109 RespondToReaders(true);
103 } 110 }
104 111
105 int AndroidUsbSocket::Read(net::IOBuffer* buffer, 112 int AndroidUsbSocket::Read(net::IOBuffer* buffer,
106 int length, 113 int length,
107 const net::CompletionCallback& callback) { 114 const net::CompletionCallback& callback) {
108 if (!is_connected_) 115 if (!is_connected_)
109 return is_closed_ ? 0 : net::ERR_SOCKET_NOT_CONNECTED; 116 return device_ ? net::ERR_SOCKET_NOT_CONNECTED : 0;
110 117
111 if (read_buffer_.empty()) { 118 if (read_buffer_.empty()) {
112 read_requests_.push_back(IORequest(buffer, length, callback)); 119 read_requests_.push_back(IORequest(buffer, length, callback));
113 return net::ERR_IO_PENDING; 120 return net::ERR_IO_PENDING;
114 } 121 }
115 122
116 size_t bytes_to_copy = static_cast<size_t>(length) > read_buffer_.length() ? 123 size_t bytes_to_copy = static_cast<size_t>(length) > read_buffer_.length() ?
117 read_buffer_.length() : static_cast<size_t>(length); 124 read_buffer_.length() : static_cast<size_t>(length);
118 memcpy(buffer->data(), read_buffer_.data(), bytes_to_copy); 125 memcpy(buffer->data(), read_buffer_.data(), bytes_to_copy);
119 if (read_buffer_.length() > bytes_to_copy) 126 if (read_buffer_.length() > bytes_to_copy)
(...skipping 22 matching lines...) Expand all
142 return net::ERR_NOT_IMPLEMENTED; 149 return net::ERR_NOT_IMPLEMENTED;
143 } 150 }
144 151
145 int AndroidUsbSocket::SetSendBufferSize(int32 size) { 152 int AndroidUsbSocket::SetSendBufferSize(int32 size) {
146 NOTIMPLEMENTED(); 153 NOTIMPLEMENTED();
147 return net::ERR_NOT_IMPLEMENTED; 154 return net::ERR_NOT_IMPLEMENTED;
148 } 155 }
149 156
150 int AndroidUsbSocket::Connect(const net::CompletionCallback& callback) { 157 int AndroidUsbSocket::Connect(const net::CompletionCallback& callback) {
151 DCHECK(CalledOnValidThread()); 158 DCHECK(CalledOnValidThread());
152 if (device_->terminated()) 159 if (!device_)
153 return net::ERR_FAILED; 160 return net::ERR_FAILED;
154 connect_callback_ = callback; 161 connect_callback_ = callback;
155 device_->Send(AdbMessage::kCommandOPEN, local_id_, 0, command_); 162 device_->Send(AdbMessage::kCommandOPEN, local_id_, 0, command_);
156 return net::ERR_IO_PENDING; 163 return net::ERR_IO_PENDING;
157 } 164 }
158 165
159 void AndroidUsbSocket::Disconnect() { 166 void AndroidUsbSocket::Disconnect() {
160 is_connected_ = false; 167 if (!device_)
168 return;
161 device_->Send(AdbMessage::kCommandCLSE, local_id_, remote_id_, ""); 169 device_->Send(AdbMessage::kCommandCLSE, local_id_, remote_id_, "");
162 RespondToReaders(true); 170 Terminated();
163 } 171 }
164 172
165 bool AndroidUsbSocket::IsConnected() const { 173 bool AndroidUsbSocket::IsConnected() const {
166 DCHECK(CalledOnValidThread()); 174 DCHECK(CalledOnValidThread());
167 return is_connected_; 175 return is_connected_;
168 } 176 }
169 177
170 bool AndroidUsbSocket::IsConnectedAndIdle() const { 178 bool AndroidUsbSocket::IsConnectedAndIdle() const {
171 NOTIMPLEMENTED(); 179 NOTIMPLEMENTED();
172 return false; 180 return false;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 } 245 }
238 } 246 }
239 247
240 void AndroidUsbSocket::RespondToWriters() { 248 void AndroidUsbSocket::RespondToWriters() {
241 if (!write_requests_.empty()) { 249 if (!write_requests_.empty()) {
242 IORequest write_request = write_requests_.front(); 250 IORequest write_request = write_requests_.front();
243 write_requests_.pop_front(); 251 write_requests_.pop_front();
244 write_request.callback.Run(write_request.length); 252 write_request.callback.Run(write_request.length);
245 } 253 }
246 } 254 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/adb/android_usb_socket.h ('k') | chrome/browser/devtools/android_device.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698