| 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 |