| 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
|
| index 3ea3b1cb5863958d558c0afa1e33310ca4ebf38e..ba850bd4df4234ee8e154b599184d31d138e4eba 100644
|
| --- a/chrome/browser/notifications/platform_notification_service_browsertest.cc
|
| +++ b/chrome/browser/notifications/platform_notification_service_browsertest.cc
|
| @@ -7,7 +7,11 @@
|
| #include "base/command_line.h"
|
| #include "base/files/file_path.h"
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/path_service.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/infobars/infobar_service.h"
|
| +#include "chrome/browser/notifications/desktop_notification_service.h"
|
| +#include "chrome/browser/notifications/desktop_notification_service_factory.h"
|
| #include "chrome/browser/notifications/notification_test_util.h"
|
| #include "chrome/browser/notifications/platform_notification_service_impl.h"
|
| #include "chrome/browser/ui/browser.h"
|
| @@ -19,6 +23,7 @@
|
| #include "components/infobars/core/infobar_manager.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/spawned_test_server/spawned_test_server.h"
|
|
|
| // -----------------------------------------------------------------------------
|
| @@ -81,6 +86,7 @@ void InfoBarResponder::Respond(ConfirmInfoBarDelegate* delegate) {
|
|
|
| class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest {
|
| public:
|
| + PlatformNotificationServiceBrowserTest();
|
| ~PlatformNotificationServiceBrowserTest() override {}
|
|
|
| // InProcessBrowserTest overrides.
|
| @@ -98,6 +104,8 @@ class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest {
|
| // 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;
|
|
|
| @@ -105,7 +113,12 @@ class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest {
|
| // 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:
|
| + const base::FilePath server_root_;
|
| + const std::string test_page_url_;
|
| scoped_ptr<StubNotificationUIManager> ui_manager_;
|
| scoped_ptr<net::SpawnedTestServer> https_server_;
|
| };
|
| @@ -113,11 +126,15 @@ class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest {
|
| // -----------------------------------------------------------------------------
|
|
|
| namespace {
|
| +const char kTestFileName[] = "notifications/platform_notification_service.html";
|
| +}
|
|
|
| -const char kTestPageUrl[] =
|
| - "files/notifications/platform_notification_service.html";
|
| -
|
| -} // namespace
|
| +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("files/") + kTestFileName) {
|
| +}
|
|
|
| void PlatformNotificationServiceBrowserTest::SetUpCommandLine(
|
| base::CommandLine* command_line) {
|
| @@ -131,9 +148,8 @@ void PlatformNotificationServiceBrowserTest::SetUp() {
|
| ui_manager_.reset(new StubNotificationUIManager);
|
| https_server_.reset(new net::SpawnedTestServer(
|
| net::SpawnedTestServer::TYPE_HTTPS,
|
| - net::BaseTestServer::SSLOptions(
|
| - net::BaseTestServer::SSLOptions::CERT_OK),
|
| - base::FilePath(FILE_PATH_LITERAL("chrome/test/data/"))));
|
| + net::BaseTestServer::SSLOptions(net::BaseTestServer::SSLOptions::CERT_OK),
|
| + server_root_));
|
| ASSERT_TRUE(https_server_->Start());
|
|
|
| service()->SetNotificationUIManagerForTesting(ui_manager_.get());
|
| @@ -142,7 +158,7 @@ void PlatformNotificationServiceBrowserTest::SetUp() {
|
| }
|
|
|
| void PlatformNotificationServiceBrowserTest::SetUpOnMainThread() {
|
| - NavigateToTestPage(kTestPageUrl);
|
| + NavigateToTestPage(test_page_url_);
|
|
|
| InProcessBrowserTest::SetUpOnMainThread();
|
| }
|
| @@ -164,6 +180,15 @@ bool PlatformNotificationServiceBrowserTest::RunScript(
|
| result);
|
| }
|
|
|
| +net::HostPortPair PlatformNotificationServiceBrowserTest::ServerHostPort()
|
| + const {
|
| + return https_server_->host_port_pair();
|
| +}
|
| +
|
| +GURL PlatformNotificationServiceBrowserTest::TestPageUrl() const {
|
| + return https_server_->GetURL(test_page_url_);
|
| +}
|
| +
|
| // -----------------------------------------------------------------------------
|
|
|
| // TODO(peter): Move PlatformNotificationService-related tests over from
|
| @@ -230,3 +255,62 @@ IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
|
|
|
| ASSERT_EQ(0u, ui_manager()->GetNotificationCount());
|
| }
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
|
| + TestDisplayOriginContextMessage) {
|
| + std::string script_result;
|
| +
|
| + // Creates a simple notification.
|
| + InfoBarResponder accepting_responder(browser(), true);
|
| + ASSERT_TRUE(RunScript("RequestPermission()", &script_result));
|
| + ASSERT_EQ("granted", script_result);
|
| + ASSERT_TRUE(RunScript("DisplayPersistentNotification()", &script_result));
|
| +
|
| + net::HostPortPair host_port = ServerHostPort();
|
| +
|
| + const Notification& notification = ui_manager()->GetNotificationAt(0);
|
| +
|
| + EXPECT_EQ(base::UTF8ToUTF16(host_port.ToString()),
|
| + notification.context_message());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
|
| + CheckFilePermissionNotGranted) {
|
| + // TODO(dewittj): This test verifies that a bug exists in Chrome; the test
|
| + // will fail if the bug is fixed. The
|
| + // |PlatformNotificationServiceImpl::WebOriginDisplayName| function needs
|
| + // to be updated to properly display file:// URL origins.
|
| + // See crbug.com/402191.
|
| + std::string script_result;
|
| +
|
| + InfoBarResponder accepting_responder_web(browser(), true);
|
| +
|
| + DesktopNotificationService* notification_service =
|
| + DesktopNotificationServiceFactory::GetForProfile(browser()->profile());
|
| + ASSERT_TRUE(notification_service);
|
| + message_center::NotifierId web_notifier(TestPageUrl());
|
| + EXPECT_FALSE(notification_service->IsNotifierEnabled(web_notifier));
|
| + ASSERT_TRUE(RunScript("RequestPermission()", &script_result));
|
| + EXPECT_EQ("granted", script_result);
|
| +
|
| + EXPECT_TRUE(notification_service->IsNotifierEnabled(web_notifier));
|
| +
|
| + 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);
|
| +
|
| + message_center::NotifierId file_notifier(file_url);
|
| + EXPECT_FALSE(notification_service->IsNotifierEnabled(file_notifier));
|
| +
|
| + InfoBarResponder accepting_responder_file(browser(), true);
|
| + ASSERT_TRUE(RunScript("RequestPermission()", &script_result));
|
| + EXPECT_EQ("granted", script_result);
|
| +
|
| + EXPECT_FALSE(notification_service->IsNotifierEnabled(file_notifier))
|
| + << "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.";
|
| +}
|
|
|