| Index: chrome/browser/usb/web_usb_detector_unittest.cc
|
| diff --git a/chrome/browser/usb/web_usb_detector_unittest.cc b/chrome/browser/usb/web_usb_detector_unittest.cc
|
| index dd410a289278e9dd92a7b055d1422952b548b174..d3fa3df52195fa9b71ae3b401fcdc90c2c25a398 100644
|
| --- a/chrome/browser/usb/web_usb_detector_unittest.cc
|
| +++ b/chrome/browser/usb/web_usb_detector_unittest.cc
|
| @@ -7,7 +7,15 @@
|
| #include "base/macros.h"
|
| #include "base/strings/string16.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "base/test/histogram_tester.h"
|
| +#include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| +#include "chrome/browser/profiles/profile_manager.h"
|
| +#include "chrome/browser/ui/browser_list.h"
|
| +#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/browser/usb/web_usb_detector.h"
|
| +#include "chrome/test/base/browser_with_test_window_test.h"
|
| +#include "chrome/test/base/testing_browser_process.h"
|
| +#include "chrome/test/base/testing_profile_manager.h"
|
| #include "device/base/mock_device_client.h"
|
| #include "device/usb/mock_usb_device.h"
|
| #include "device/usb/mock_usb_service.h"
|
| @@ -23,6 +31,8 @@
|
| #if !defined(OS_WIN)
|
| namespace {
|
|
|
| +const char* kProfileName = "test@example.com";
|
| +
|
| // USB device product name.
|
| const char* kProductName_1 = "Google Product A";
|
| const char* kProductName_2 = "Google Product B";
|
| @@ -35,18 +45,48 @@ const char* kLandingPage_3 = "https://www.google.com/C";
|
|
|
| } // namespace
|
|
|
| -class WebUsbDetectorTest : public testing::Test {
|
| +class WebUsbDetectorTest : public BrowserWithTestWindowTest {
|
| public:
|
| - WebUsbDetectorTest() {}
|
| + WebUsbDetectorTest() : profile_manager_(TestingBrowserProcess::GetGlobal()) {}
|
| ~WebUsbDetectorTest() override = default;
|
|
|
| + // Use the profile_manager_'s profile so that we can manage which one is most
|
| + // recently active.
|
| + TestingProfile* CreateProfile() override {
|
| + return profile_manager_.CreateTestingProfile(kProfileName);
|
| + }
|
| +
|
| + // Since the profile is owned by profile_manager_, we do not need to destroy
|
| + // it.
|
| + void DestroyProfile(TestingProfile* profile) override {}
|
| +
|
| void SetUp() override {
|
| + ASSERT_TRUE(profile_manager_.SetUp());
|
| + BrowserWithTestWindowTest::SetUp();
|
| +#if defined(OS_CHROMEOS)
|
| + profile_manager_.SetLoggedIn(true);
|
| + chromeos::ProfileHelper::Get()->SetActiveUserIdForTesting(kProfileName);
|
| +#endif
|
| + BrowserList::SetLastActive(browser());
|
| +
|
| +#if !defined(OS_CHROMEOS)
|
| message_center::MessageCenter::Initialize();
|
| +#endif
|
| message_center_ = message_center::MessageCenter::Get();
|
| ASSERT_TRUE(message_center_ != nullptr);
|
| +
|
| + web_usb_detector_.reset(new WebUsbDetector());
|
| }
|
|
|
| - void TearDown() override { message_center::MessageCenter::Shutdown(); }
|
| + void TearDown() override {
|
| + BrowserWithTestWindowTest::TearDown();
|
| +#if !defined(OS_CHROMEOS)
|
| + message_center::MessageCenter::Shutdown();
|
| +#endif
|
| + web_usb_detector_.reset(nullptr);
|
| + }
|
| +
|
| + void Initialize() { web_usb_detector_->Initialize(); }
|
|
|
| protected:
|
| device::MockDeviceClient device_client_;
|
| @@ -54,6 +94,8 @@ class WebUsbDetectorTest : public testing::Test {
|
|
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(WebUsbDetectorTest);
|
| + std::unique_ptr<WebUsbDetector> web_usb_detector_;
|
| + TestingProfileManager profile_manager_;
|
| };
|
|
|
| TEST_F(WebUsbDetectorTest, UsbDeviceAddedAndRemoved) {
|
| @@ -63,8 +105,7 @@ TEST_F(WebUsbDetectorTest, UsbDeviceAddedAndRemoved) {
|
| 0, 1, "Google", kProductName_1, "002", landing_page));
|
| std::string guid = device->guid();
|
|
|
| - WebUsbDetector web_usb_detector;
|
| - web_usb_detector.Initialize();
|
| + Initialize();
|
|
|
| device_client_.usb_service()->AddDevice(device);
|
| message_center::Notification* notification =
|
| @@ -81,7 +122,7 @@ TEST_F(WebUsbDetectorTest, UsbDeviceAddedAndRemoved) {
|
| device_client_.usb_service()->RemoveDevice(device);
|
| // Device is removed, so notification should be removed from the
|
| // message_center too.
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid) == nullptr);
|
| }
|
|
|
| TEST_F(WebUsbDetectorTest, UsbDeviceWithoutProductNameAddedAndRemoved) {
|
| @@ -91,15 +132,14 @@ TEST_F(WebUsbDetectorTest, UsbDeviceWithoutProductNameAddedAndRemoved) {
|
| 0, 1, "Google", product_name, "002", landing_page));
|
| std::string guid = device->guid();
|
|
|
| - WebUsbDetector web_usb_detector;
|
| - web_usb_detector.Initialize();
|
| + Initialize();
|
|
|
| device_client_.usb_service()->AddDevice(device);
|
| // For device without product name, no notification is generated.
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid) == nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid) == nullptr);
|
| }
|
|
|
| TEST_F(WebUsbDetectorTest, UsbDeviceWithoutLandingPageAddedAndRemoved) {
|
| @@ -108,15 +148,14 @@ TEST_F(WebUsbDetectorTest, UsbDeviceWithoutLandingPageAddedAndRemoved) {
|
| 0, 1, "Google", kProductName_1, "002", landing_page));
|
| std::string guid = device->guid();
|
|
|
| - WebUsbDetector web_usb_detector;
|
| - web_usb_detector.Initialize();
|
| + Initialize();
|
|
|
| device_client_.usb_service()->AddDevice(device);
|
| // For device without landing page, no notification is generated.
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid) == nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid) == nullptr);
|
| }
|
|
|
| TEST_F(WebUsbDetectorTest, UsbDeviceWasThereBeforeAndThenRemoved) {
|
| @@ -127,13 +166,12 @@ TEST_F(WebUsbDetectorTest, UsbDeviceWasThereBeforeAndThenRemoved) {
|
|
|
| // USB device was added before web_usb_detector was created.
|
| device_client_.usb_service()->AddDevice(device);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid) == nullptr);
|
|
|
| - WebUsbDetector web_usb_detector;
|
| - web_usb_detector.Initialize();
|
| + Initialize();
|
|
|
| device_client_.usb_service()->RemoveDevice(device);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid) == nullptr);
|
| }
|
|
|
| TEST_F(
|
| @@ -160,18 +198,18 @@ TEST_F(
|
| // Three usb devices were added and removed before web_usb_detector was
|
| // created.
|
| device_client_.usb_service()->AddDevice(device_1);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| device_client_.usb_service()->AddDevice(device_2);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_2));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_2) == nullptr);
|
| device_client_.usb_service()->AddDevice(device_3);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_3) == nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_1);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| device_client_.usb_service()->RemoveDevice(device_2);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_2));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_2) == nullptr);
|
| device_client_.usb_service()->RemoveDevice(device_3);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_3) == nullptr);
|
|
|
| WebUsbDetector web_usb_detector;
|
| web_usb_detector.Initialize();
|
| @@ -200,21 +238,20 @@ TEST_F(
|
|
|
| // Three usb devices were added before web_usb_detector was created.
|
| device_client_.usb_service()->AddDevice(device_1);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| device_client_.usb_service()->AddDevice(device_2);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_2));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_2) == nullptr);
|
| device_client_.usb_service()->AddDevice(device_3);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_3) == nullptr);
|
|
|
| - WebUsbDetector web_usb_detector;
|
| - web_usb_detector.Initialize();
|
| + Initialize();
|
|
|
| device_client_.usb_service()->RemoveDevice(device_1);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| device_client_.usb_service()->RemoveDevice(device_2);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_2));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_2) == nullptr);
|
| device_client_.usb_service()->RemoveDevice(device_3);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_3) == nullptr);
|
| }
|
|
|
| TEST_F(WebUsbDetectorTest,
|
| @@ -239,15 +276,14 @@ TEST_F(WebUsbDetectorTest,
|
|
|
| // Two usb devices were added before web_usb_detector was created.
|
| device_client_.usb_service()->AddDevice(device_1);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| device_client_.usb_service()->AddDevice(device_3);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_3) == nullptr);
|
|
|
| - WebUsbDetector web_usb_detector;
|
| - web_usb_detector.Initialize();
|
| + Initialize();
|
|
|
| device_client_.usb_service()->RemoveDevice(device_1);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
|
|
| device_client_.usb_service()->AddDevice(device_2);
|
| message_center::Notification* notification =
|
| @@ -262,10 +298,10 @@ TEST_F(WebUsbDetectorTest,
|
| EXPECT_TRUE(notification->delegate() != nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_3);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_3) == nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_2);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_2));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_2) == nullptr);
|
| }
|
|
|
| TEST_F(WebUsbDetectorTest, ThreeUsbDevicesAddedAndRemoved) {
|
| @@ -287,8 +323,7 @@ TEST_F(WebUsbDetectorTest, ThreeUsbDevicesAddedAndRemoved) {
|
| 6, 7, "Google", kProductName_3, "008", landing_page_3));
|
| std::string guid_3 = device_3->guid();
|
|
|
| - WebUsbDetector web_usb_detector;
|
| - web_usb_detector.Initialize();
|
| + Initialize();
|
|
|
| device_client_.usb_service()->AddDevice(device_1);
|
| message_center::Notification* notification_1 =
|
| @@ -303,7 +338,7 @@ TEST_F(WebUsbDetectorTest, ThreeUsbDevicesAddedAndRemoved) {
|
| EXPECT_TRUE(notification_1->delegate() != nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_1);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
|
|
| device_client_.usb_service()->AddDevice(device_2);
|
| message_center::Notification* notification_2 =
|
| @@ -318,7 +353,7 @@ TEST_F(WebUsbDetectorTest, ThreeUsbDevicesAddedAndRemoved) {
|
| EXPECT_TRUE(notification_2->delegate() != nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_2);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_2));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_2) == nullptr);
|
|
|
| device_client_.usb_service()->AddDevice(device_3);
|
| message_center::Notification* notification_3 =
|
| @@ -333,7 +368,7 @@ TEST_F(WebUsbDetectorTest, ThreeUsbDevicesAddedAndRemoved) {
|
| EXPECT_TRUE(notification_3->delegate() != nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_3);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_3) == nullptr);
|
| }
|
|
|
| TEST_F(WebUsbDetectorTest, ThreeUsbDeviceAddedAndRemovedDifferentOrder) {
|
| @@ -355,8 +390,7 @@ TEST_F(WebUsbDetectorTest, ThreeUsbDeviceAddedAndRemovedDifferentOrder) {
|
| 6, 7, "Google", kProductName_3, "008", landing_page_3));
|
| std::string guid_3 = device_3->guid();
|
|
|
| - WebUsbDetector web_usb_detector;
|
| - web_usb_detector.Initialize();
|
| + Initialize();
|
|
|
| device_client_.usb_service()->AddDevice(device_1);
|
| message_center::Notification* notification_1 =
|
| @@ -383,7 +417,7 @@ TEST_F(WebUsbDetectorTest, ThreeUsbDeviceAddedAndRemovedDifferentOrder) {
|
| EXPECT_TRUE(notification_2->delegate() != nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_2);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_2));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_2) == nullptr);
|
|
|
| device_client_.usb_service()->AddDevice(device_3);
|
| message_center::Notification* notification_3 =
|
| @@ -398,9 +432,97 @@ TEST_F(WebUsbDetectorTest, ThreeUsbDeviceAddedAndRemovedDifferentOrder) {
|
| EXPECT_TRUE(notification_3->delegate() != nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_1);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
|
|
| device_client_.usb_service()->RemoveDevice(device_3);
|
| - EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3));
|
| + EXPECT_TRUE(message_center_->FindVisibleNotificationById(guid_3) == nullptr);
|
| +}
|
| +
|
| +TEST_F(WebUsbDetectorTest, UsbDeviceAddedWhileActiveTabUrlIsLandingPage) {
|
| + GURL landing_page_1(kLandingPage_1);
|
| + scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
|
| + 0, 1, "Google", kProductName_1, "002", landing_page_1));
|
| + std::string guid_1 = device_1->guid();
|
| +
|
| + Initialize();
|
| +
|
| + AddTab(browser(), landing_page_1);
|
| +
|
| + device_client_.usb_service()->AddDevice(device_1);
|
| + ASSERT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| +}
|
| +
|
| +TEST_F(WebUsbDetectorTest, UsbDeviceAddedBeforeActiveTabUrlIsLandingPage) {
|
| + GURL landing_page_1(kLandingPage_1);
|
| + scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
|
| + 0, 1, "Google", kProductName_1, "002", landing_page_1));
|
| + std::string guid_1 = device_1->guid();
|
| +
|
| + base::HistogramTester histogram_tester;
|
| + Initialize();
|
| +
|
| + device_client_.usb_service()->AddDevice(device_1);
|
| + ASSERT_TRUE(message_center_->FindVisibleNotificationById(guid_1) != nullptr);
|
| +
|
| + AddTab(browser(), landing_page_1);
|
| + ASSERT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| + histogram_tester.ExpectUniqueSample("WebUsb.NotificationClosed", 3, 1);
|
| +}
|
| +
|
| +TEST_F(WebUsbDetectorTest,
|
| + NotificationClickedWhileInactiveTabUrlIsLandingPage) {
|
| + GURL landing_page_1(kLandingPage_1);
|
| + GURL landing_page_2(kLandingPage_2);
|
| + scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
|
| + 0, 1, "Google", kProductName_1, "002", landing_page_1));
|
| + std::string guid_1 = device_1->guid();
|
| + TabStripModel* tab_strip_model = browser()->tab_strip_model();
|
| +
|
| + base::HistogramTester histogram_tester;
|
| + Initialize();
|
| +
|
| + AddTab(browser(), landing_page_1);
|
| + AddTab(browser(), landing_page_2);
|
| +
|
| + device_client_.usb_service()->AddDevice(device_1);
|
| + message_center::Notification* notification_1 =
|
| + message_center_->FindVisibleNotificationById(guid_1);
|
| + ASSERT_TRUE(notification_1 != nullptr);
|
| + EXPECT_EQ(2, tab_strip_model->count());
|
| +
|
| + notification_1->Click();
|
| + EXPECT_EQ(2, tab_strip_model->count());
|
| + content::WebContents* web_contents =
|
| + tab_strip_model->GetWebContentsAt(tab_strip_model->active_index());
|
| + EXPECT_EQ(landing_page_1, web_contents->GetURL());
|
| + ASSERT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| + histogram_tester.ExpectUniqueSample("WebUsb.NotificationClosed", 2, 1);
|
| +}
|
| +
|
| +TEST_F(WebUsbDetectorTest, NotificationClickedWhileNoTabUrlIsLandingPage) {
|
| + GURL landing_page_1(kLandingPage_1);
|
| + GURL landing_page_2(kLandingPage_2);
|
| + scoped_refptr<device::MockUsbDevice> device_1(new device::MockUsbDevice(
|
| + 0, 1, "Google", kProductName_1, "002", landing_page_1));
|
| + std::string guid_1 = device_1->guid();
|
| + TabStripModel* tab_strip_model = browser()->tab_strip_model();
|
| +
|
| + base::HistogramTester histogram_tester;
|
| + Initialize();
|
| +
|
| + device_client_.usb_service()->AddDevice(device_1);
|
| + message_center::Notification* notification_1 =
|
| + message_center_->FindVisibleNotificationById(guid_1);
|
| + ASSERT_TRUE(notification_1 != nullptr);
|
| + EXPECT_EQ(0, tab_strip_model->count());
|
| +
|
| + notification_1->Click();
|
| + EXPECT_EQ(1, tab_strip_model->count());
|
| + content::WebContents* web_contents =
|
| + tab_strip_model->GetWebContentsAt(tab_strip_model->active_index());
|
| + EXPECT_EQ(landing_page_1, web_contents->GetURL());
|
| + ASSERT_TRUE(message_center_->FindVisibleNotificationById(guid_1) == nullptr);
|
| + histogram_tester.ExpectUniqueSample("WebUsb.NotificationClosed", 2, 1);
|
| }
|
| +
|
| #endif // !OS_WIN
|
|
|