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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/containers/scoped_ptr_hash_map.h" | 7 #include "base/containers/scoped_ptr_hash_map.h" |
| 8 #include "base/location.h" |
| 9 #include "base/single_thread_task_runner.h" |
8 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "base/thread_task_runner_handle.h" |
9 #include "chrome/browser/devtools/device/adb/mock_adb_server.h" | 12 #include "chrome/browser/devtools/device/adb/mock_adb_server.h" |
10 #include "chrome/browser/devtools/device/devtools_android_bridge.h" | 13 #include "chrome/browser/devtools/device/devtools_android_bridge.h" |
11 #include "chrome/browser/devtools/device/usb/android_usb_device.h" | 14 #include "chrome/browser/devtools/device/usb/android_usb_device.h" |
12 #include "chrome/browser/devtools/device/usb/usb_device_provider.h" | 15 #include "chrome/browser/devtools/device/usb/usb_device_provider.h" |
13 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
14 #include "chrome/test/base/in_process_browser_test.h" | 17 #include "chrome/test/base/in_process_browser_test.h" |
15 #include "content/public/browser/browser_thread.h" | 18 #include "content/public/browser/browser_thread.h" |
16 #include "content/public/test/test_utils.h" | 19 #include "content/public/test/test_utils.h" |
17 #include "device/usb/usb_descriptors.h" | 20 #include "device/usb/usb_descriptors.h" |
18 #include "device/usb/usb_device.h" | 21 #include "device/usb/usb_device.h" |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 | 136 |
134 void ClaimInterface(int interface_number, | 137 void ClaimInterface(int interface_number, |
135 const ResultCallback& callback) override { | 138 const ResultCallback& callback) override { |
136 bool success = false; | 139 bool success = false; |
137 if (device_->claimed_interfaces_.find(interface_number) == | 140 if (device_->claimed_interfaces_.find(interface_number) == |
138 device_->claimed_interfaces_.end()) { | 141 device_->claimed_interfaces_.end()) { |
139 device_->claimed_interfaces_.insert(interface_number); | 142 device_->claimed_interfaces_.insert(interface_number); |
140 success = true; | 143 success = true; |
141 } | 144 } |
142 | 145 |
143 base::MessageLoop::current()->PostTask(FROM_HERE, | 146 base::ThreadTaskRunnerHandle::Get()->PostTask( |
144 base::Bind(callback, success)); | 147 FROM_HERE, base::Bind(callback, success)); |
145 } | 148 } |
146 | 149 |
147 bool ReleaseInterface(int interface_number) override { | 150 bool ReleaseInterface(int interface_number) override { |
148 if (device_->claimed_interfaces_.find(interface_number) == | 151 if (device_->claimed_interfaces_.find(interface_number) == |
149 device_->claimed_interfaces_.end()) | 152 device_->claimed_interfaces_.end()) |
150 return false; | 153 return false; |
151 | 154 |
152 device_->claimed_interfaces_.erase(interface_number); | 155 device_->claimed_interfaces_.erase(interface_number); |
153 return true; | 156 return true; |
154 } | 157 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 current_message_->body += std::string(buffer->data(), length); | 201 current_message_->body += std::string(buffer->data(), length); |
199 remaining_body_length_ -= length; | 202 remaining_body_length_ -= length; |
200 } | 203 } |
201 | 204 |
202 if (remaining_body_length_ == 0) { | 205 if (remaining_body_length_ == 0) { |
203 ProcessIncoming(); | 206 ProcessIncoming(); |
204 } | 207 } |
205 | 208 |
206 device::UsbTransferStatus status = | 209 device::UsbTransferStatus status = |
207 broken_ ? device::USB_TRANSFER_ERROR : device::USB_TRANSFER_COMPLETED; | 210 broken_ ? device::USB_TRANSFER_ERROR : device::USB_TRANSFER_COMPLETED; |
208 base::MessageLoop::current()->PostTask( | 211 base::ThreadTaskRunnerHandle::Get()->PostTask( |
209 FROM_HERE, base::Bind(callback, status, nullptr, 0)); | 212 FROM_HERE, base::Bind(callback, status, nullptr, 0)); |
210 ProcessQueries(); | 213 ProcessQueries(); |
211 } else if (direction == device::USB_DIRECTION_INBOUND) { | 214 } else if (direction == device::USB_DIRECTION_INBOUND) { |
212 queries_.push(Query(callback, buffer, length)); | 215 queries_.push(Query(callback, buffer, length)); |
213 ProcessQueries(); | 216 ProcessQueries(); |
214 } | 217 } |
215 } | 218 } |
216 | 219 |
217 template <class D> | 220 template <class D> |
218 void append(D data) { | 221 void append(D data) { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 output_buffer_.push_back(0); | 310 output_buffer_.push_back(0); |
308 } | 311 } |
309 ProcessQueries(); | 312 ProcessQueries(); |
310 } | 313 } |
311 | 314 |
312 void ProcessQueries() { | 315 void ProcessQueries() { |
313 if (!queries_.size()) | 316 if (!queries_.size()) |
314 return; | 317 return; |
315 Query query = queries_.front(); | 318 Query query = queries_.front(); |
316 if (broken_) { | 319 if (broken_) { |
317 base::MessageLoop::current()->PostTask( | 320 base::ThreadTaskRunnerHandle::Get()->PostTask( |
318 FROM_HERE, | 321 FROM_HERE, |
319 base::Bind(query.callback, | 322 base::Bind(query.callback, device::USB_TRANSFER_ERROR, nullptr, 0)); |
320 device::USB_TRANSFER_ERROR, | |
321 nullptr, | |
322 0)); | |
323 } | 323 } |
324 | 324 |
325 if (query.size > output_buffer_.size()) | 325 if (query.size > output_buffer_.size()) |
326 return; | 326 return; |
327 | 327 |
328 queries_.pop(); | 328 queries_.pop(); |
329 std::copy(output_buffer_.begin(), | 329 std::copy(output_buffer_.begin(), |
330 output_buffer_.begin() + query.size, | 330 output_buffer_.begin() + query.size, |
331 query.buffer->data()); | 331 query.buffer->data()); |
332 output_buffer_.erase(output_buffer_.begin(), | 332 output_buffer_.erase(output_buffer_.begin(), |
333 output_buffer_.begin() + query.size); | 333 output_buffer_.begin() + query.size); |
334 base::MessageLoop::current()->PostTask( | 334 base::ThreadTaskRunnerHandle::Get()->PostTask( |
335 FROM_HERE, | 335 FROM_HERE, base::Bind(query.callback, device::USB_TRANSFER_COMPLETED, |
336 base::Bind(query.callback, | 336 query.buffer, query.size)); |
337 device::USB_TRANSFER_COMPLETED, | |
338 query.buffer, | |
339 query.size)); | |
340 | |
341 } | 337 } |
342 | 338 |
343 void InterruptTransfer(UsbEndpointDirection direction, | 339 void InterruptTransfer(UsbEndpointDirection direction, |
344 uint8 endpoint, | 340 uint8 endpoint, |
345 scoped_refptr<net::IOBuffer> buffer, | 341 scoped_refptr<net::IOBuffer> buffer, |
346 size_t length, | 342 size_t length, |
347 unsigned int timeout, | 343 unsigned int timeout, |
348 const TransferCallback& callback) override {} | 344 const TransferCallback& callback) override {} |
349 | 345 |
350 void IsochronousTransfer(UsbEndpointDirection direction, | 346 void IsochronousTransfer(UsbEndpointDirection direction, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 interface_desc.interface_class = T::kClass; | 403 interface_desc.interface_class = T::kClass; |
408 interface_desc.interface_subclass = T::kSubclass; | 404 interface_desc.interface_subclass = T::kSubclass; |
409 interface_desc.interface_protocol = T::kProtocol; | 405 interface_desc.interface_protocol = T::kProtocol; |
410 interface_desc.endpoints.push_back(bulk_in); | 406 interface_desc.endpoints.push_back(bulk_in); |
411 interface_desc.endpoints.push_back(bulk_out); | 407 interface_desc.endpoints.push_back(bulk_out); |
412 | 408 |
413 config_desc_.interfaces.push_back(interface_desc); | 409 config_desc_.interfaces.push_back(interface_desc); |
414 } | 410 } |
415 | 411 |
416 void Open(const OpenCallback& callback) override { | 412 void Open(const OpenCallback& callback) override { |
417 base::MessageLoop::current()->PostTask( | 413 base::ThreadTaskRunnerHandle::Get()->PostTask( |
418 FROM_HERE, base::Bind(callback, make_scoped_refptr( | 414 FROM_HERE, base::Bind(callback, make_scoped_refptr( |
419 new MockUsbDeviceHandle<T>(this)))); | 415 new MockUsbDeviceHandle<T>(this)))); |
420 } | 416 } |
421 | 417 |
422 const UsbConfigDescriptor* GetConfiguration() override { | 418 const UsbConfigDescriptor* GetConfiguration() override { |
423 return T::kConfigured ? &config_desc_ : nullptr; | 419 return T::kConfigured ? &config_desc_ : nullptr; |
424 } | 420 } |
425 | 421 |
426 bool Close(scoped_refptr<UsbDeviceHandle> handle) override { | 422 bool Close(scoped_refptr<UsbDeviceHandle> handle) override { |
427 return true; | 423 return true; |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
661 MockCountListenerWithReAddWhileQueued( | 657 MockCountListenerWithReAddWhileQueued( |
662 DevToolsAndroidBridge* adb_bridge) | 658 DevToolsAndroidBridge* adb_bridge) |
663 : MockCountListener(adb_bridge), | 659 : MockCountListener(adb_bridge), |
664 readded_(false) { | 660 readded_(false) { |
665 } | 661 } |
666 | 662 |
667 void DeviceCountChanged(int count) override { | 663 void DeviceCountChanged(int count) override { |
668 ++invoked_; | 664 ++invoked_; |
669 if (!readded_) { | 665 if (!readded_) { |
670 readded_ = true; | 666 readded_ = true; |
671 base::MessageLoop::current()->PostTask( | 667 base::ThreadTaskRunnerHandle::Get()->PostTask( |
672 FROM_HERE, | 668 FROM_HERE, base::Bind(&MockCountListenerWithReAddWhileQueued::ReAdd, |
673 base::Bind(&MockCountListenerWithReAddWhileQueued::ReAdd, | 669 base::Unretained(this))); |
674 base::Unretained(this))); | |
675 } else { | 670 } else { |
676 adb_bridge_->RemoveDeviceCountListener(this); | 671 adb_bridge_->RemoveDeviceCountListener(this); |
677 Shutdown(); | 672 Shutdown(); |
678 } | 673 } |
679 } | 674 } |
680 | 675 |
681 void ReAdd() { | 676 void ReAdd() { |
682 adb_bridge_->RemoveDeviceCountListener(this); | 677 adb_bridge_->RemoveDeviceCountListener(this); |
683 adb_bridge_->AddDeviceCountListener(this); | 678 adb_bridge_->AddDeviceCountListener(this); |
684 } | 679 } |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 EXPECT_EQ(2, listener.invoked_); | 777 EXPECT_EQ(2, listener.invoked_); |
783 EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); | 778 EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); |
784 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); | 779 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
785 } | 780 } |
786 | 781 |
787 IN_PROC_BROWSER_TEST_F(AndroidUsbTraitsTest, TestDeviceCounting) { | 782 IN_PROC_BROWSER_TEST_F(AndroidUsbTraitsTest, TestDeviceCounting) { |
788 MockCountListenerForCheckingTraits listener(adb_bridge_); | 783 MockCountListenerForCheckingTraits listener(adb_bridge_); |
789 adb_bridge_->AddDeviceCountListener(&listener); | 784 adb_bridge_->AddDeviceCountListener(&listener); |
790 runner_->Run(); | 785 runner_->Run(); |
791 } | 786 } |
OLD | NEW |