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 |