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

Side by Side Diff: chrome/browser/notifications/platform_notification_service_browsertest.cc

Issue 661643002: Adds a context message of the security origin for web notifications. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge Created 5 years, 10 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
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 <string> 5 #include <string>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/path_service.h"
11 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/infobars/infobar_service.h" 12 #include "chrome/browser/infobars/infobar_service.h"
13 #include "chrome/browser/notifications/desktop_notification_service.h"
14 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
11 #include "chrome/browser/notifications/notification_test_util.h" 15 #include "chrome/browser/notifications/notification_test_util.h"
12 #include "chrome/browser/notifications/platform_notification_service_impl.h" 16 #include "chrome/browser/notifications/platform_notification_service_impl.h"
13 #include "chrome/browser/ui/browser.h" 17 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/tabs/tab_strip_model.h" 18 #include "chrome/browser/ui/tabs/tab_strip_model.h"
15 #include "chrome/test/base/in_process_browser_test.h" 19 #include "chrome/test/base/in_process_browser_test.h"
16 #include "chrome/test/base/ui_test_utils.h" 20 #include "chrome/test/base/ui_test_utils.h"
17 #include "components/infobars/core/confirm_infobar_delegate.h" 21 #include "components/infobars/core/confirm_infobar_delegate.h"
18 #include "components/infobars/core/infobar.h" 22 #include "components/infobars/core/infobar.h"
19 #include "components/infobars/core/infobar_manager.h" 23 #include "components/infobars/core/infobar_manager.h"
20 #include "content/public/common/content_switches.h" 24 #include "content/public/common/content_switches.h"
21 #include "content/public/test/browser_test_utils.h" 25 #include "content/public/test/browser_test_utils.h"
26 #include "net/base/filename_util.h"
22 #include "net/test/spawned_test_server/spawned_test_server.h" 27 #include "net/test/spawned_test_server/spawned_test_server.h"
23 28
24 // ----------------------------------------------------------------------------- 29 // -----------------------------------------------------------------------------
25 30
26 // Accept or rejects the first shown confirm infobar. The infobar will be 31 // Accept or rejects the first shown confirm infobar. The infobar will be
27 // responsed to asynchronously, to imitate the behavior of a user. 32 // responsed to asynchronously, to imitate the behavior of a user.
28 // TODO(peter): Generalize this class, as it's commonly useful. 33 // TODO(peter): Generalize this class, as it's commonly useful.
29 class InfoBarResponder : public infobars::InfoBarManager::Observer { 34 class InfoBarResponder : public infobars::InfoBarManager::Observer {
30 public: 35 public:
31 InfoBarResponder(Browser* browser, bool accept); 36 InfoBarResponder(Browser* browser, bool accept);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 if (accept_) 79 if (accept_)
75 delegate->Accept(); 80 delegate->Accept();
76 else 81 else
77 delegate->Cancel(); 82 delegate->Cancel();
78 } 83 }
79 84
80 // ----------------------------------------------------------------------------- 85 // -----------------------------------------------------------------------------
81 86
82 class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest { 87 class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest {
83 public: 88 public:
89 PlatformNotificationServiceBrowserTest();
84 ~PlatformNotificationServiceBrowserTest() override {} 90 ~PlatformNotificationServiceBrowserTest() override {}
85 91
86 // InProcessBrowserTest overrides. 92 // InProcessBrowserTest overrides.
87 void SetUpCommandLine(base::CommandLine* command_line) override; 93 void SetUpCommandLine(base::CommandLine* command_line) override;
88 void SetUp() override; 94 void SetUp() override;
89 void SetUpOnMainThread() override; 95 void SetUpOnMainThread() override;
90 void TearDown() override; 96 void TearDown() override;
91 97
92 protected: 98 protected:
93 // Returns the Platform Notification Service these unit tests are for. 99 // Returns the Platform Notification Service these unit tests are for.
94 PlatformNotificationServiceImpl* service() const { 100 PlatformNotificationServiceImpl* service() const {
95 return PlatformNotificationServiceImpl::GetInstance(); 101 return PlatformNotificationServiceImpl::GetInstance();
96 } 102 }
97 103
98 // Returns the UI Manager on which notifications will be displayed. 104 // Returns the UI Manager on which notifications will be displayed.
99 StubNotificationUIManager* ui_manager() const { return ui_manager_.get(); } 105 StubNotificationUIManager* ui_manager() const { return ui_manager_.get(); }
100 106
107 const base::FilePath& server_root() const { return server_root_; }
108
101 // Navigates the browser to the test page indicated by |path|. 109 // Navigates the browser to the test page indicated by |path|.
102 void NavigateToTestPage(const std::string& path) const; 110 void NavigateToTestPage(const std::string& path) const;
103 111
104 // Executes |script| and stores the result as a string in |result|. A boolean 112 // Executes |script| and stores the result as a string in |result|. A boolean
105 // will be returned, indicating whether the script was executed successfully. 113 // will be returned, indicating whether the script was executed successfully.
106 bool RunScript(const std::string& script, std::string* result) const; 114 bool RunScript(const std::string& script, std::string* result) const;
107 115
116 net::HostPortPair ServerHostPort() const;
117 GURL TestPageUrl() const;
118
108 private: 119 private:
120 const base::FilePath server_root_;
121 const std::string test_page_url_;
109 scoped_ptr<StubNotificationUIManager> ui_manager_; 122 scoped_ptr<StubNotificationUIManager> ui_manager_;
110 scoped_ptr<net::SpawnedTestServer> https_server_; 123 scoped_ptr<net::SpawnedTestServer> https_server_;
111 }; 124 };
112 125
113 // ----------------------------------------------------------------------------- 126 // -----------------------------------------------------------------------------
114 127
115 namespace { 128 namespace {
129 const char kTestFileName[] = "notifications/platform_notification_service.html";
130 }
116 131
117 const char kTestPageUrl[] = 132 PlatformNotificationServiceBrowserTest::PlatformNotificationServiceBrowserTest()
118 "files/notifications/platform_notification_service.html"; 133 : server_root_(FILE_PATH_LITERAL("chrome/test/data")),
119 134 // The test server has a base directory that doesn't exist in the
120 } // namespace 135 // filesystem.
136 test_page_url_(std::string("files/") + kTestFileName) {
137 }
121 138
122 void PlatformNotificationServiceBrowserTest::SetUpCommandLine( 139 void PlatformNotificationServiceBrowserTest::SetUpCommandLine(
123 base::CommandLine* command_line) { 140 base::CommandLine* command_line) {
124 command_line->AppendSwitch( 141 command_line->AppendSwitch(
125 switches::kEnableExperimentalWebPlatformFeatures); 142 switches::kEnableExperimentalWebPlatformFeatures);
126 143
127 InProcessBrowserTest::SetUpCommandLine(command_line); 144 InProcessBrowserTest::SetUpCommandLine(command_line);
128 } 145 }
129 146
130 void PlatformNotificationServiceBrowserTest::SetUp() { 147 void PlatformNotificationServiceBrowserTest::SetUp() {
131 ui_manager_.reset(new StubNotificationUIManager); 148 ui_manager_.reset(new StubNotificationUIManager);
132 https_server_.reset(new net::SpawnedTestServer( 149 https_server_.reset(new net::SpawnedTestServer(
133 net::SpawnedTestServer::TYPE_HTTPS, 150 net::SpawnedTestServer::TYPE_HTTPS,
134 net::BaseTestServer::SSLOptions( 151 net::BaseTestServer::SSLOptions(net::BaseTestServer::SSLOptions::CERT_OK),
135 net::BaseTestServer::SSLOptions::CERT_OK), 152 server_root_));
136 base::FilePath(FILE_PATH_LITERAL("chrome/test/data/"))));
137 ASSERT_TRUE(https_server_->Start()); 153 ASSERT_TRUE(https_server_->Start());
138 154
139 service()->SetNotificationUIManagerForTesting(ui_manager_.get()); 155 service()->SetNotificationUIManagerForTesting(ui_manager_.get());
140 156
141 InProcessBrowserTest::SetUp(); 157 InProcessBrowserTest::SetUp();
142 } 158 }
143 159
144 void PlatformNotificationServiceBrowserTest::SetUpOnMainThread() { 160 void PlatformNotificationServiceBrowserTest::SetUpOnMainThread() {
145 NavigateToTestPage(kTestPageUrl); 161 NavigateToTestPage(test_page_url_);
146 162
147 InProcessBrowserTest::SetUpOnMainThread(); 163 InProcessBrowserTest::SetUpOnMainThread();
148 } 164 }
149 165
150 void PlatformNotificationServiceBrowserTest::TearDown() { 166 void PlatformNotificationServiceBrowserTest::TearDown() {
151 service()->SetNotificationUIManagerForTesting(nullptr); 167 service()->SetNotificationUIManagerForTesting(nullptr);
152 } 168 }
153 169
154 void PlatformNotificationServiceBrowserTest::NavigateToTestPage( 170 void PlatformNotificationServiceBrowserTest::NavigateToTestPage(
155 const std::string& path) const { 171 const std::string& path) const {
156 ui_test_utils::NavigateToURL(browser(), https_server_->GetURL(path)); 172 ui_test_utils::NavigateToURL(browser(), https_server_->GetURL(path));
157 } 173 }
158 174
159 bool PlatformNotificationServiceBrowserTest::RunScript( 175 bool PlatformNotificationServiceBrowserTest::RunScript(
160 const std::string& script, std::string* result) const { 176 const std::string& script, std::string* result) const {
161 return content::ExecuteScriptAndExtractString( 177 return content::ExecuteScriptAndExtractString(
162 browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame(), 178 browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame(),
163 script, 179 script,
164 result); 180 result);
165 } 181 }
166 182
183 net::HostPortPair PlatformNotificationServiceBrowserTest::ServerHostPort()
184 const {
185 return https_server_->host_port_pair();
186 }
187
188 GURL PlatformNotificationServiceBrowserTest::TestPageUrl() const {
189 return https_server_->GetURL(test_page_url_);
190 }
191
167 // ----------------------------------------------------------------------------- 192 // -----------------------------------------------------------------------------
168 193
169 // TODO(peter): Move PlatformNotificationService-related tests over from 194 // TODO(peter): Move PlatformNotificationService-related tests over from
170 // notification_browsertest.cc to this file. 195 // notification_browsertest.cc to this file.
171 196
172 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, 197 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
173 DisplayPersistentNotificationWithoutPermission) { 198 DisplayPersistentNotificationWithoutPermission) {
174 std::string script_result; 199 std::string script_result;
175 200
176 InfoBarResponder accepting_responder(browser(), false); 201 InfoBarResponder accepting_responder(browser(), false);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); 248 ASSERT_EQ(1u, ui_manager()->GetNotificationCount());
224 249
225 const Notification& notification = ui_manager()->GetNotificationAt(0); 250 const Notification& notification = ui_manager()->GetNotificationAt(0);
226 notification.delegate()->Click(); 251 notification.delegate()->Click();
227 252
228 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); 253 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result));
229 EXPECT_EQ("action_close", script_result); 254 EXPECT_EQ("action_close", script_result);
230 255
231 ASSERT_EQ(0u, ui_manager()->GetNotificationCount()); 256 ASSERT_EQ(0u, ui_manager()->GetNotificationCount());
232 } 257 }
258
259 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
260 TestDisplayOriginContextMessage) {
261 std::string script_result;
262
263 // Creates a simple notification.
264 InfoBarResponder accepting_responder(browser(), true);
265 ASSERT_TRUE(RunScript("RequestPermission()", &script_result));
266 ASSERT_EQ("granted", script_result);
267 ASSERT_TRUE(RunScript("DisplayPersistentNotification()", &script_result));
268
269 net::HostPortPair host_port = ServerHostPort();
270
271 const Notification& notification = ui_manager()->GetNotificationAt(0);
272
273 EXPECT_EQ(base::UTF8ToUTF16(host_port.ToString()),
274 notification.context_message());
275 }
276
277 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest,
278 CheckFilePermissionNotGranted) {
279 // TODO(dewittj): This test verifies that a bug exists in Chrome; the test
280 // will fail if the bug is fixed. The
281 // |PlatformNotificationServiceImpl::WebOriginDisplayName| function needs
282 // to be updated to properly display file:// URL origins.
283 // See crbug.com/402191.
284 std::string script_result;
285
286 InfoBarResponder accepting_responder_web(browser(), true);
287
288 DesktopNotificationService* notification_service =
289 DesktopNotificationServiceFactory::GetForProfile(browser()->profile());
290 ASSERT_TRUE(notification_service);
291 message_center::NotifierId web_notifier(TestPageUrl());
292 EXPECT_FALSE(notification_service->IsNotifierEnabled(web_notifier));
293 ASSERT_TRUE(RunScript("RequestPermission()", &script_result));
294 EXPECT_EQ("granted", script_result);
295
296 EXPECT_TRUE(notification_service->IsNotifierEnabled(web_notifier));
297
298 base::FilePath dir_source_root;
299 EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &dir_source_root));
300 base::FilePath full_file_path =
301 dir_source_root.Append(server_root()).AppendASCII(kTestFileName);
302 GURL file_url(net::FilePathToFileURL(full_file_path));
303 ui_test_utils::NavigateToURL(browser(), file_url);
304
305 message_center::NotifierId file_notifier(file_url);
306 EXPECT_FALSE(notification_service->IsNotifierEnabled(file_notifier));
307
308 InfoBarResponder accepting_responder_file(browser(), true);
309 ASSERT_TRUE(RunScript("RequestPermission()", &script_result));
310 EXPECT_EQ("granted", script_result);
311
312 EXPECT_FALSE(notification_service->IsNotifierEnabled(file_notifier))
313 << "If this test fails, you may have fixed a bug preventing file origins "
314 << "from sending their origin from Blink; if so you need to update the "
315 << "display function for notification origins to show the file path.";
316 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698