Chromium Code Reviews| 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..8c85f129354ac44afdf8f1ab85ac65723fe3e26b 100644 |
| --- a/chrome/browser/usb/web_usb_detector_unittest.cc |
| +++ b/chrome/browser/usb/web_usb_detector_unittest.cc |
| @@ -7,7 +7,13 @@ |
| #include "base/macros.h" |
| #include "base/strings/string16.h" |
| #include "base/strings/utf_string_conversions.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" |
| @@ -35,18 +41,41 @@ 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("test@example.com"); |
| + } |
| + |
| + // Since the profile is owned by profile_manager_, we do not need to destroy |
| + // it. |
| + void DestroyProfile(TestingProfile* profile) override {} |
| + |
| void SetUp() override { |
| message_center::MessageCenter::Initialize(); |
| message_center_ = message_center::MessageCenter::Get(); |
| ASSERT_TRUE(message_center_ != nullptr); |
| + |
| + ASSERT_TRUE(profile_manager_.SetUp()); |
| + BrowserWithTestWindowTest::SetUp(); |
| + profile_manager_.UpdateLastUser(profile()); |
| + BrowserList::SetLastActive(browser()); |
| + |
| + web_usb_detector_.reset(new WebUsbDetector()); |
| } |
| - void TearDown() override { message_center::MessageCenter::Shutdown(); } |
| + void TearDown() override { |
| + BrowserWithTestWindowTest::TearDown(); |
| + message_center::MessageCenter::Shutdown(); |
| + web_usb_detector_.reset(nullptr); |
| + } |
| + |
| + void Initialize() { web_usb_detector_->Initialize(); } |
| protected: |
| device::MockDeviceClient device_client_; |
| @@ -54,6 +83,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 +94,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 = |
| @@ -91,8 +121,7 @@ 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. |
| @@ -108,8 +137,7 @@ 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. |
| @@ -129,8 +157,7 @@ TEST_F(WebUsbDetectorTest, UsbDeviceWasThereBeforeAndThenRemoved) { |
| device_client_.usb_service()->AddDevice(device); |
| EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid)); |
| - WebUsbDetector web_usb_detector; |
| - web_usb_detector.Initialize(); |
| + Initialize(); |
| device_client_.usb_service()->RemoveDevice(device); |
| EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid)); |
| @@ -206,8 +233,7 @@ TEST_F( |
| device_client_.usb_service()->AddDevice(device_3); |
| EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3)); |
| - WebUsbDetector web_usb_detector; |
| - web_usb_detector.Initialize(); |
| + Initialize(); |
| device_client_.usb_service()->RemoveDevice(device_1); |
| EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1)); |
| @@ -243,8 +269,7 @@ TEST_F(WebUsbDetectorTest, |
| device_client_.usb_service()->AddDevice(device_3); |
| EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3)); |
| - WebUsbDetector web_usb_detector; |
| - web_usb_detector.Initialize(); |
| + Initialize(); |
| device_client_.usb_service()->RemoveDevice(device_1); |
| EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1)); |
| @@ -287,8 +312,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 = |
| @@ -355,8 +379,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 = |
| @@ -403,4 +426,86 @@ TEST_F(WebUsbDetectorTest, ThreeUsbDeviceAddedAndRemovedDifferentOrder) { |
| device_client_.usb_service()->RemoveDevice(device_3); |
| EXPECT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_3)); |
| } |
| + |
| +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_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1)); |
|
Reilly Grant (use Gerrit)
2017/04/27 20:25:43
Can you use ASSERT_FALSE(...) and ASSERT_TRUE(...)
cco3
2017/04/27 21:31:16
Done.
|
| +} |
| + |
| +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(); |
| + |
| + Initialize(); |
| + |
| + device_client_.usb_service()->AddDevice(device_1); |
| + ASSERT_NE(nullptr, message_center_->FindVisibleNotificationById(guid_1)); |
| + |
| + AddTab(browser(), landing_page_1); |
| + ASSERT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_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(); |
| + |
| + 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_NE(nullptr, notification_1); |
| + ASSERT_EQ(2, tab_strip_model->count()); |
| + |
| + notification_1->Click(); |
| + ASSERT_EQ(2, tab_strip_model->count()); |
| + content::WebContents* web_contents = |
| + tab_strip_model->GetWebContentsAt(tab_strip_model->active_index()); |
| + ASSERT_EQ(landing_page_1, web_contents->GetURL()); |
| + ASSERT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_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(); |
| + |
| + Initialize(); |
| + |
| + device_client_.usb_service()->AddDevice(device_1); |
| + message_center::Notification* notification_1 = |
| + message_center_->FindVisibleNotificationById(guid_1); |
| + ASSERT_NE(nullptr, notification_1); |
| + ASSERT_EQ(0, tab_strip_model->count()); |
| + |
| + notification_1->Click(); |
| + ASSERT_EQ(1, tab_strip_model->count()); |
| + content::WebContents* web_contents = |
| + tab_strip_model->GetWebContentsAt(tab_strip_model->active_index()); |
| + ASSERT_EQ(landing_page_1, web_contents->GetURL()); |
| + ASSERT_EQ(nullptr, message_center_->FindVisibleNotificationById(guid_1)); |
| +} |
| + |
| #endif // !OS_WIN |