Index: chrome/browser/notifications/platform_notification_service_browsertest.cc |
diff --git a/chrome/browser/notifications/platform_notification_service_browsertest.cc b/chrome/browser/notifications/platform_notification_service_browsertest.cc |
deleted file mode 100644 |
index 0b0997956018b08a46f52887036866fab9a1adcb..0000000000000000000000000000000000000000 |
--- a/chrome/browser/notifications/platform_notification_service_browsertest.cc |
+++ /dev/null |
@@ -1,500 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <memory> |
-#include <string> |
-#include <vector> |
- |
-#include "base/command_line.h" |
-#include "base/files/file_path.h" |
-#include "base/path_service.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/time/time.h" |
-#include "chrome/browser/notifications/desktop_notification_profile_util.h" |
-#include "chrome/browser/notifications/message_center_display_service.h" |
-#include "chrome/browser/notifications/notification.h" |
-#include "chrome/browser/notifications/notification_test_util.h" |
-#include "chrome/browser/notifications/platform_notification_service_impl.h" |
-#include "chrome/browser/permissions/permission_manager.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/tabs/tab_strip_model.h" |
-#include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
-#include "chrome/grit/generated_resources.h" |
-#include "chrome/test/base/in_process_browser_test.h" |
-#include "chrome/test/base/ui_test_utils.h" |
-#include "content/public/browser/permission_type.h" |
-#include "content/public/common/content_switches.h" |
-#include "content/public/test/browser_test_utils.h" |
-#include "net/base/filename_util.h" |
-#include "net/test/embedded_test_server/embedded_test_server.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "third_party/WebKit/public/platform/modules/permissions/permission_status.mojom.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-// ----------------------------------------------------------------------------- |
- |
-// Dimensions of the icon.png resource in the notification test data directory. |
-const int kIconWidth = 100; |
-const int kIconHeight = 100; |
- |
-// The maximum width and height of badges. Oversized images are scaled down to |
-// these values. |
-const int kMaxBadgeSize = 96; |
- |
-const int kNotificationVibrationPattern[] = { 100, 200, 300 }; |
-const double kNotificationTimestamp = 621046800000.; |
- |
-class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest { |
- public: |
- PlatformNotificationServiceBrowserTest(); |
- ~PlatformNotificationServiceBrowserTest() override {} |
- |
- // InProcessBrowserTest overrides. |
- void SetUpCommandLine(base::CommandLine* command_line) override; |
- void SetUp() override; |
- void SetUpOnMainThread() override; |
- void TearDown() override; |
- |
- protected: |
- // Returns the Platform Notification Service these unit tests are for. |
- PlatformNotificationServiceImpl* service() const { |
- return PlatformNotificationServiceImpl::GetInstance(); |
- } |
- |
- // Grants permission to display Web Notifications for origin of the test |
- // page that's being used in this browser test. |
- void GrantNotificationPermissionForTest() const; |
- |
- bool RequestAndAcceptPermission(); |
- bool RequestAndDenyPermission(); |
- |
- // Returns the UI Manager on which notifications will be displayed. |
- StubNotificationUIManager* ui_manager() const { return ui_manager_.get(); } |
- |
- const base::FilePath& server_root() const { return server_root_; } |
- |
- // Navigates the browser to the test page indicated by |path|. |
- void NavigateToTestPage(const std::string& path) const; |
- |
- // Executes |script| and stores the result as a string in |result|. A boolean |
- // will be returned, indicating whether the script was executed successfully. |
- bool RunScript(const std::string& script, std::string* result) const; |
- |
- net::HostPortPair ServerHostPort() const; |
- GURL TestPageUrl() const; |
- |
- private: |
- std::string RequestAndRespondToPermission( |
- PermissionBubbleManager::AutoResponseType bubble_response); |
- |
- content::WebContents* GetActiveWebContents(Browser* browser) { |
- return browser->tab_strip_model()->GetActiveWebContents(); |
- } |
- |
- const base::FilePath server_root_; |
- const std::string test_page_url_; |
- std::unique_ptr<StubNotificationUIManager> ui_manager_; |
- std::unique_ptr<MessageCenterDisplayService> display_service_; |
- std::unique_ptr<net::EmbeddedTestServer> https_server_; |
-}; |
- |
-// ----------------------------------------------------------------------------- |
- |
-namespace { |
-const char kTestFileName[] = "notifications/platform_notification_service.html"; |
-} |
- |
-PlatformNotificationServiceBrowserTest::PlatformNotificationServiceBrowserTest() |
- : server_root_(FILE_PATH_LITERAL("chrome/test/data")), |
- // The test server has a base directory that doesn't exist in the |
- // filesystem. |
- test_page_url_(std::string("/") + kTestFileName) {} |
- |
-void PlatformNotificationServiceBrowserTest::SetUpCommandLine( |
- base::CommandLine* command_line) { |
- command_line->AppendSwitch(switches::kEnableExperimentalWebPlatformFeatures); |
- |
- InProcessBrowserTest::SetUpCommandLine(command_line); |
-} |
- |
-void PlatformNotificationServiceBrowserTest::SetUp() { |
- ui_manager_.reset(new StubNotificationUIManager); |
- https_server_.reset( |
- new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS)); |
- https_server_->ServeFilesFromSourceDirectory(server_root_); |
- ASSERT_TRUE(https_server_->Start()); |
- InProcessBrowserTest::SetUp(); |
-} |
- |
-void PlatformNotificationServiceBrowserTest::SetUpOnMainThread() { |
- NavigateToTestPage(test_page_url_); |
- display_service_.reset( |
- new MessageCenterDisplayService(browser()->profile(), ui_manager_.get())); |
- service()->SetNotificationDisplayServiceForTesting(display_service_.get()); |
- InProcessBrowserTest::SetUpOnMainThread(); |
-} |
- |
-void PlatformNotificationServiceBrowserTest::TearDown() { |
- service()->SetNotificationDisplayServiceForTesting(nullptr); |
-} |
- |
-void PlatformNotificationServiceBrowserTest:: |
- GrantNotificationPermissionForTest() const { |
- GURL origin = TestPageUrl().GetOrigin(); |
- |
- DesktopNotificationProfileUtil::GrantPermission(browser()->profile(), origin); |
- ASSERT_EQ(CONTENT_SETTING_ALLOW, |
- DesktopNotificationProfileUtil::GetContentSetting( |
- browser()->profile(), origin)); |
-} |
- |
-void PlatformNotificationServiceBrowserTest::NavigateToTestPage( |
- const std::string& path) const { |
- ui_test_utils::NavigateToURL(browser(), https_server_->GetURL(path)); |
-} |
- |
-bool PlatformNotificationServiceBrowserTest::RunScript( |
- const std::string& script, std::string* result) const { |
- return content::ExecuteScriptAndExtractString( |
- browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame(), |
- script, |
- result); |
-} |
- |
-net::HostPortPair PlatformNotificationServiceBrowserTest::ServerHostPort() |
- const { |
- return https_server_->host_port_pair(); |
-} |
- |
-GURL PlatformNotificationServiceBrowserTest::TestPageUrl() const { |
- return https_server_->GetURL(test_page_url_); |
-} |
- |
-std::string |
-PlatformNotificationServiceBrowserTest::RequestAndRespondToPermission( |
- PermissionBubbleManager::AutoResponseType bubble_response) { |
- std::string result; |
- content::WebContents* web_contents = GetActiveWebContents(browser()); |
- PermissionBubbleManager::FromWebContents(web_contents) |
- ->set_auto_response_for_test(bubble_response); |
- EXPECT_TRUE(RunScript("RequestPermission();", &result)); |
- return result; |
-} |
- |
-bool PlatformNotificationServiceBrowserTest::RequestAndAcceptPermission() { |
- std::string result = |
- RequestAndRespondToPermission(PermissionBubbleManager::ACCEPT_ALL); |
- return "granted" == result; |
-} |
- |
-bool PlatformNotificationServiceBrowserTest::RequestAndDenyPermission() { |
- std::string result = |
- RequestAndRespondToPermission(PermissionBubbleManager::DENY_ALL); |
- return "denied" == result; |
-} |
- |
-// ----------------------------------------------------------------------------- |
- |
-// TODO(peter): Move PlatformNotificationService-related tests over from |
-// notification_browsertest.cc to this file. |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- DisplayPersistentNotificationWithoutPermission) { |
- RequestAndDenyPermission(); |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotification()", &script_result)); |
- EXPECT_EQ( |
- "TypeError: No notification permission has been granted for this origin.", |
- script_result); |
- |
- ASSERT_EQ(0u, ui_manager()->GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- DisplayPersistentNotificationWithPermission) { |
- RequestAndAcceptPermission(); |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotification('action_none')", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- notification.delegate()->Click(); |
- |
- ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); |
- EXPECT_EQ("action_none", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- WebNotificationOptionsReflection) { |
- ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
- |
- // First, test the default values. |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotification('Some title', {})", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- |
- // We don't use or check the notification's direction and language. |
- const Notification& default_notification = ui_manager()->GetNotificationAt(0); |
- EXPECT_EQ("Some title", base::UTF16ToUTF8(default_notification.title())); |
- EXPECT_EQ("", base::UTF16ToUTF8(default_notification.message())); |
- EXPECT_EQ("", default_notification.tag()); |
- EXPECT_TRUE(default_notification.icon().IsEmpty()); |
- EXPECT_TRUE(default_notification.small_image().IsEmpty()); |
- EXPECT_FALSE(default_notification.renotify()); |
- EXPECT_FALSE(default_notification.silent()); |
- EXPECT_FALSE(default_notification.never_timeout()); |
- EXPECT_EQ(0u, default_notification.buttons().size()); |
- |
- // Verifies that the notification's default timestamp is set in the last 30 |
- // seconds. This number has no significance, but it needs to be significantly |
- // high to avoid flakiness in the test. |
- EXPECT_NEAR(default_notification.timestamp().ToJsTime(), |
- base::Time::Now().ToJsTime(), 30 * 1000); |
- |
- // Now, test the non-default values. |
- |
- ASSERT_TRUE(RunScript("DisplayPersistentAllOptionsNotification()", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(2u, ui_manager()->GetNotificationCount()); |
- |
- // We don't use or check the notification's direction and language. |
- const Notification& all_options_notification = |
- ui_manager()->GetNotificationAt(1); |
- EXPECT_EQ("Title", base::UTF16ToUTF8(all_options_notification.title())); |
- EXPECT_EQ("Contents", base::UTF16ToUTF8(all_options_notification.message())); |
- EXPECT_EQ("replace-id", all_options_notification.tag()); |
- EXPECT_FALSE(all_options_notification.icon().IsEmpty()); |
- EXPECT_EQ(kIconWidth, all_options_notification.icon().Width()); |
- EXPECT_EQ(kIconHeight, all_options_notification.icon().Height()); |
- EXPECT_FALSE(all_options_notification.small_image().IsEmpty()); |
- EXPECT_EQ(kMaxBadgeSize, all_options_notification.small_image().Width()); |
- EXPECT_EQ(kMaxBadgeSize, all_options_notification.small_image().Height()); |
- EXPECT_TRUE(all_options_notification.renotify()); |
- EXPECT_TRUE(all_options_notification.silent()); |
- EXPECT_TRUE(all_options_notification.never_timeout()); |
- EXPECT_DOUBLE_EQ(kNotificationTimestamp, |
- all_options_notification.timestamp().ToJsTime()); |
- EXPECT_EQ(1u, all_options_notification.buttons().size()); |
- EXPECT_EQ("actionTitle", |
- base::UTF16ToUTF8(all_options_notification.buttons()[0].title)); |
- EXPECT_FALSE(all_options_notification.buttons()[0].icon.IsEmpty()); |
- EXPECT_EQ(kIconWidth, all_options_notification.buttons()[0].icon.Width()); |
- EXPECT_EQ(kIconHeight, all_options_notification.buttons()[0].icon.Height()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- WebNotificationSiteSettingsButton) { |
- ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotification('Some title', {})", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- const std::vector<message_center::ButtonInfo>& buttons = |
- notification.buttons(); |
- EXPECT_EQ(0u, buttons.size()); |
- |
- notification.delegate()->SettingsClick(); |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- content::WebContents* web_contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- ASSERT_TRUE(content::WaitForLoadStop(web_contents)); |
- ASSERT_EQ("chrome://settings/contentExceptions#notifications", |
- web_contents->GetLastCommittedURL().spec()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- WebNotificationOptionsVibrationPattern) { |
- ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotificationVibrate()", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- EXPECT_EQ("Title", base::UTF16ToUTF8(notification.title())); |
- EXPECT_EQ("Contents", base::UTF16ToUTF8(notification.message())); |
- |
- EXPECT_THAT(notification.vibration_pattern(), |
- testing::ElementsAreArray(kNotificationVibrationPattern)); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- CloseDisplayedPersistentNotification) { |
- ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotification('action_close')", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- notification.delegate()->Click(); |
- |
- ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); |
- EXPECT_EQ("action_close", script_result); |
- |
- ASSERT_EQ(0u, ui_manager()->GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- UserClosesPersistentNotification) { |
- ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
- |
- std::string script_result; |
- ASSERT_TRUE( |
- RunScript("DisplayPersistentNotification('close_test')", &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- notification.delegate()->Close(true /* by_user */); |
- |
- ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); |
- EXPECT_EQ("closing notification: close_test", script_result); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- TestDisplayOriginContextMessage) { |
- RequestAndAcceptPermission(); |
- |
- // Creates a simple notification. |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotification()", &script_result)); |
- |
- net::HostPortPair host_port = ServerHostPort(); |
- |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- |
- EXPECT_TRUE(notification.context_message().empty()); |
- EXPECT_EQ("https://" + host_port.ToString() + "/", |
- notification.origin_url().spec()); |
-} |
- |
-// TODO(felt): This DCHECKs when bubbles are enabled, when the file_url is |
-// persisted. crbug.com/502057 |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- DISABLED_CheckFilePermissionNotGranted) { |
- // This case should succeed because a normal page URL is used. |
- std::string script_result; |
- |
- PermissionManager* permission_manager = |
- PermissionManager::Get(browser()->profile()); |
- |
- EXPECT_EQ(blink::mojom::PermissionStatus::ASK, |
- permission_manager->GetPermissionStatus( |
- content::PermissionType::NOTIFICATIONS, TestPageUrl(), |
- TestPageUrl())); |
- |
- RequestAndAcceptPermission(); |
- EXPECT_EQ(blink::mojom::PermissionStatus::GRANTED, |
- permission_manager->GetPermissionStatus( |
- content::PermissionType::NOTIFICATIONS, TestPageUrl(), |
- TestPageUrl())); |
- |
- // This case should fail because a file URL is used. |
- base::FilePath dir_source_root; |
- EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &dir_source_root)); |
- base::FilePath full_file_path = |
- dir_source_root.Append(server_root()).AppendASCII(kTestFileName); |
- GURL file_url(net::FilePathToFileURL(full_file_path)); |
- |
- ui_test_utils::NavigateToURL(browser(), file_url); |
- |
- EXPECT_EQ(blink::mojom::PermissionStatus::ASK, |
- permission_manager->GetPermissionStatus( |
- content::PermissionType::NOTIFICATIONS, file_url, file_url)); |
- |
- RequestAndAcceptPermission(); |
- EXPECT_EQ(blink::mojom::PermissionStatus::ASK, |
- permission_manager->GetPermissionStatus( |
- content::PermissionType::NOTIFICATIONS, file_url, file_url)) |
- << "If this test fails, you may have fixed a bug preventing file origins " |
- << "from sending their origin from Blink; if so you need to update the " |
- << "display function for notification origins to show the file path."; |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- DataUrlAsNotificationImage) { |
- ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotificationDataUrlImage()", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- EXPECT_FALSE(notification.icon().IsEmpty()); |
- |
- EXPECT_EQ("Data URL Title", base::UTF16ToUTF8(notification.title())); |
- EXPECT_EQ(kIconWidth, notification.icon().Width()); |
- EXPECT_EQ(kIconHeight, notification.icon().Height()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- BlobAsNotificationImage) { |
- ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotificationBlobImage()", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- EXPECT_FALSE(notification.icon().IsEmpty()); |
- |
- EXPECT_EQ("Blob Title", base::UTF16ToUTF8(notification.title())); |
- EXPECT_EQ(kIconWidth, notification.icon().Width()); |
- EXPECT_EQ(kIconHeight, notification.icon().Height()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
- DisplayPersistentNotificationWithActionButtons) { |
- ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
- |
- std::string script_result; |
- ASSERT_TRUE(RunScript("DisplayPersistentNotificationWithActionButtons()", |
- &script_result)); |
- EXPECT_EQ("ok", script_result); |
- ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
- |
- const Notification& notification = ui_manager()->GetNotificationAt(0); |
- ASSERT_EQ(2u, notification.buttons().size()); |
- EXPECT_EQ("actionTitle1", base::UTF16ToUTF8(notification.buttons()[0].title)); |
- EXPECT_EQ("actionTitle2", base::UTF16ToUTF8(notification.buttons()[1].title)); |
- |
- notification.delegate()->ButtonClick(0); |
- ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); |
- EXPECT_EQ("action_button_click actionId1", script_result); |
- |
- notification.delegate()->ButtonClick(1); |
- ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); |
- EXPECT_EQ("action_button_click actionId2", script_result); |
-} |