| 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" | 8 #include "base/location.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "base/thread_task_runner_handle.h" | 11 #include "base/thread_task_runner_handle.h" |
| 12 #include "chrome/browser/devtools/device/adb/mock_adb_server.h" | 12 #include "chrome/browser/devtools/device/adb/mock_adb_server.h" |
| 13 #include "chrome/browser/devtools/device/devtools_android_bridge.h" | 13 #include "chrome/browser/devtools/device/devtools_android_bridge.h" |
| 14 #include "chrome/browser/devtools/device/usb/android_usb_device.h" | 14 #include "chrome/browser/devtools/device/usb/android_usb_device.h" |
| 15 #include "chrome/browser/devtools/device/usb/usb_device_provider.h" | 15 #include "chrome/browser/devtools/device/usb/usb_device_provider.h" |
| 16 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
| 17 #include "chrome/test/base/in_process_browser_test.h" | 17 #include "chrome/test/base/in_process_browser_test.h" |
| 18 #include "content/public/browser/browser_thread.h" | 18 #include "content/public/browser/browser_thread.h" |
| 19 #include "content/public/test/test_utils.h" | 19 #include "content/public/test/test_utils.h" |
| 20 #include "device/core/device_client.h" |
| 20 #include "device/usb/usb_descriptors.h" | 21 #include "device/usb/usb_descriptors.h" |
| 21 #include "device/usb/usb_device.h" | 22 #include "device/usb/usb_device.h" |
| 22 #include "device/usb/usb_device_handle.h" | 23 #include "device/usb/usb_device_handle.h" |
| 23 #include "device/usb/usb_service.h" | 24 #include "device/usb/usb_service.h" |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
| 25 | 26 |
| 26 using content::BrowserThread; | 27 using content::BrowserThread; |
| 28 using device::DeviceClient; |
| 27 using device::UsbConfigDescriptor; | 29 using device::UsbConfigDescriptor; |
| 28 using device::UsbDevice; | 30 using device::UsbDevice; |
| 29 using device::UsbDeviceHandle; | 31 using device::UsbDeviceHandle; |
| 30 using device::UsbEndpointDescriptor; | 32 using device::UsbEndpointDescriptor; |
| 31 using device::UsbEndpointDirection; | 33 using device::UsbEndpointDirection; |
| 32 using device::UsbInterfaceDescriptor; | 34 using device::UsbInterfaceDescriptor; |
| 33 using device::UsbService; | 35 using device::UsbService; |
| 34 using device::UsbSynchronizationType; | 36 using device::UsbSynchronizationType; |
| 35 using device::UsbTransferType; | 37 using device::UsbTransferType; |
| 36 using device::UsbUsageType; | 38 using device::UsbUsageType; |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 break; | 498 break; |
| 497 } | 499 } |
| 498 step_++; | 500 step_++; |
| 499 callback.Run(devices); | 501 callback.Run(devices); |
| 500 } | 502 } |
| 501 | 503 |
| 502 private: | 504 private: |
| 503 int step_; | 505 int step_; |
| 504 }; | 506 }; |
| 505 | 507 |
| 508 class TestDeviceClient : public DeviceClient { |
| 509 public: |
| 510 explicit TestDeviceClient(scoped_ptr<UsbService> service) |
| 511 : DeviceClient(), usb_service_(service.Pass()) {} |
| 512 ~TestDeviceClient() override {} |
| 513 |
| 514 private: |
| 515 UsbService* GetUsbService() override { return usb_service_.get(); } |
| 516 |
| 517 scoped_ptr<UsbService> usb_service_; |
| 518 }; |
| 519 |
| 506 class DevToolsAndroidBridgeWarmUp | 520 class DevToolsAndroidBridgeWarmUp |
| 507 : public DevToolsAndroidBridge::DeviceCountListener { | 521 : public DevToolsAndroidBridge::DeviceCountListener { |
| 508 public: | 522 public: |
| 509 DevToolsAndroidBridgeWarmUp(base::Closure closure, | 523 DevToolsAndroidBridgeWarmUp(base::Closure closure, |
| 510 DevToolsAndroidBridge* adb_bridge) | 524 DevToolsAndroidBridge* adb_bridge) |
| 511 : closure_(closure), adb_bridge_(adb_bridge) {} | 525 : closure_(closure), adb_bridge_(adb_bridge) {} |
| 512 | 526 |
| 513 void DeviceCountChanged(int count) override { | 527 void DeviceCountChanged(int count) override { |
| 514 adb_bridge_->RemoveDeviceCountListener(this); | 528 adb_bridge_->RemoveDeviceCountListener(this); |
| 515 closure_.Run(); | 529 closure_.Run(); |
| 516 } | 530 } |
| 517 | 531 |
| 518 base::Closure closure_; | 532 base::Closure closure_; |
| 519 DevToolsAndroidBridge* adb_bridge_; | 533 DevToolsAndroidBridge* adb_bridge_; |
| 520 }; | 534 }; |
| 521 | 535 |
| 522 class AndroidUsbDiscoveryTest : public InProcessBrowserTest { | 536 class AndroidUsbDiscoveryTest : public InProcessBrowserTest { |
| 523 protected: | 537 protected: |
| 524 AndroidUsbDiscoveryTest() | 538 AndroidUsbDiscoveryTest() |
| 525 : scheduler_invoked_(0) { | 539 : scheduler_invoked_(0) { |
| 526 } | 540 } |
| 527 | 541 |
| 528 void SetUp() override { | |
| 529 // This must happen before profile creation as there are KeyedServices that | |
| 530 // may trigger the creation of a non-mock instance of UsbService. | |
| 531 mock_usb_service_.reset(CreateMockService()); | |
| 532 InProcessBrowserTest::SetUp(); | |
| 533 } | |
| 534 | |
| 535 void SetUpOnMainThread() override { | 542 void SetUpOnMainThread() override { |
| 543 device_client_.reset(new TestDeviceClient(CreateMockService())); |
| 536 adb_bridge_ = | 544 adb_bridge_ = |
| 537 DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile()); | 545 DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile()); |
| 538 DCHECK(adb_bridge_); | 546 DCHECK(adb_bridge_); |
| 539 adb_bridge_->set_task_scheduler_for_test(base::Bind( | 547 adb_bridge_->set_task_scheduler_for_test(base::Bind( |
| 540 &AndroidUsbDiscoveryTest::ScheduleDeviceCountRequest, this)); | 548 &AndroidUsbDiscoveryTest::ScheduleDeviceCountRequest, this)); |
| 541 | 549 |
| 542 scoped_refptr<UsbDeviceProvider> provider = | 550 scoped_refptr<UsbDeviceProvider> provider = |
| 543 new UsbDeviceProvider(browser()->profile()); | 551 new UsbDeviceProvider(browser()->profile()); |
| 544 | 552 |
| 545 AndroidDeviceManager::DeviceProviders providers; | 553 AndroidDeviceManager::DeviceProviders providers; |
| 546 providers.push_back(provider); | 554 providers.push_back(provider); |
| 547 adb_bridge_->set_device_providers_for_test(providers); | 555 adb_bridge_->set_device_providers_for_test(providers); |
| 548 runner_ = new content::MessageLoopRunner; | 556 runner_ = new content::MessageLoopRunner; |
| 549 } | 557 } |
| 550 | 558 |
| 551 void ScheduleDeviceCountRequest(const base::Closure& request) { | 559 void ScheduleDeviceCountRequest(const base::Closure& request) { |
| 552 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 560 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 553 scheduler_invoked_++; | 561 scheduler_invoked_++; |
| 554 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, request); | 562 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, request); |
| 555 } | 563 } |
| 556 | 564 |
| 557 virtual MockUsbService* CreateMockService() { return new MockUsbService(); } | 565 virtual scoped_ptr<MockUsbService> CreateMockService() { |
| 566 return make_scoped_ptr(new MockUsbService()); |
| 567 } |
| 558 | 568 |
| 559 scoped_refptr<content::MessageLoopRunner> runner_; | 569 scoped_refptr<content::MessageLoopRunner> runner_; |
| 560 scoped_ptr<MockUsbService> mock_usb_service_; | 570 scoped_ptr<TestDeviceClient> device_client_; |
| 561 DevToolsAndroidBridge* adb_bridge_; | 571 DevToolsAndroidBridge* adb_bridge_; |
| 562 int scheduler_invoked_; | 572 int scheduler_invoked_; |
| 563 }; | 573 }; |
| 564 | 574 |
| 565 class AndroidUsbCountTest : public AndroidUsbDiscoveryTest { | 575 class AndroidUsbCountTest : public AndroidUsbDiscoveryTest { |
| 566 protected: | 576 protected: |
| 567 void SetUpOnMainThread() override { | 577 void SetUpOnMainThread() override { |
| 568 AndroidUsbDiscoveryTest::SetUpOnMainThread(); | 578 AndroidUsbDiscoveryTest::SetUpOnMainThread(); |
| 569 DevToolsAndroidBridgeWarmUp warmup(runner_->QuitClosure(), adb_bridge_); | 579 DevToolsAndroidBridgeWarmUp warmup(runner_->QuitClosure(), adb_bridge_); |
| 570 adb_bridge_->AddDeviceCountListener(&warmup); | 580 adb_bridge_->AddDeviceCountListener(&warmup); |
| 571 runner_->Run(); | 581 runner_->Run(); |
| 572 runner_ = new content::MessageLoopRunner; | 582 runner_ = new content::MessageLoopRunner; |
| 573 } | 583 } |
| 574 }; | 584 }; |
| 575 | 585 |
| 576 class AndroidUsbTraitsTest : public AndroidUsbDiscoveryTest { | 586 class AndroidUsbTraitsTest : public AndroidUsbDiscoveryTest { |
| 577 protected: | 587 protected: |
| 578 MockUsbService* CreateMockService() override { | 588 scoped_ptr<MockUsbService> CreateMockService() override { |
| 579 return new MockUsbServiceForCheckingTraits(); | 589 return make_scoped_ptr(new MockUsbServiceForCheckingTraits()); |
| 580 } | 590 } |
| 581 }; | 591 }; |
| 582 | 592 |
| 583 class AndroidBreakingUsbTest : public AndroidUsbDiscoveryTest { | 593 class AndroidBreakingUsbTest : public AndroidUsbDiscoveryTest { |
| 584 protected: | 594 protected: |
| 585 MockUsbService* CreateMockService() override { | 595 scoped_ptr<MockUsbService> CreateMockService() override { |
| 586 return new MockBreakingUsbService(); | 596 return make_scoped_ptr(new MockBreakingUsbService()); |
| 587 } | 597 } |
| 588 }; | 598 }; |
| 589 | 599 |
| 590 class AndroidNoConfigUsbTest : public AndroidUsbDiscoveryTest { | 600 class AndroidNoConfigUsbTest : public AndroidUsbDiscoveryTest { |
| 591 protected: | 601 protected: |
| 592 MockUsbService* CreateMockService() override { | 602 scoped_ptr<MockUsbService> CreateMockService() override { |
| 593 return new MockNoConfigUsbService(); | 603 return make_scoped_ptr(new MockNoConfigUsbService()); |
| 594 } | 604 } |
| 595 }; | 605 }; |
| 596 | 606 |
| 597 class MockListListener : public DevToolsAndroidBridge::DeviceListListener { | 607 class MockListListener : public DevToolsAndroidBridge::DeviceListListener { |
| 598 public: | 608 public: |
| 599 MockListListener(DevToolsAndroidBridge* adb_bridge, | 609 MockListListener(DevToolsAndroidBridge* adb_bridge, |
| 600 const base::Closure& callback) | 610 const base::Closure& callback) |
| 601 : adb_bridge_(adb_bridge), | 611 : adb_bridge_(adb_bridge), |
| 602 callback_(callback) { | 612 callback_(callback) { |
| 603 } | 613 } |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 EXPECT_EQ(2, listener.invoked_); | 797 EXPECT_EQ(2, listener.invoked_); |
| 788 EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); | 798 EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); |
| 789 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); | 799 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
| 790 } | 800 } |
| 791 | 801 |
| 792 IN_PROC_BROWSER_TEST_F(AndroidUsbTraitsTest, TestDeviceCounting) { | 802 IN_PROC_BROWSER_TEST_F(AndroidUsbTraitsTest, TestDeviceCounting) { |
| 793 MockCountListenerForCheckingTraits listener(adb_bridge_); | 803 MockCountListenerForCheckingTraits listener(adb_bridge_); |
| 794 adb_bridge_->AddDeviceCountListener(&listener); | 804 adb_bridge_->AddDeviceCountListener(&listener); |
| 795 runner_->Run(); | 805 runner_->Run(); |
| 796 } | 806 } |
| OLD | NEW |