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

Side by Side Diff: chrome/browser/devtools/device/usb/android_usb_browsertest.cc

Issue 1314273002: Manage UsbService lifetime in DeviceClient implementations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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
« no previous file with comments | « chrome/browser/chrome_device_client.cc ('k') | device/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/chrome_device_client.cc ('k') | device/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698