OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
6 #include <list> | 6 #include <list> |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "chrome/browser/chrome_notification_types.h" | 11 #include "chrome/browser/chrome_notification_types.h" |
12 #include "chrome/browser/prerender/prerender_manager.h" | 12 #include "chrome/browser/prerender/prerender_manager.h" |
13 #include "chrome/browser/ssl/ssl_blocking_page.h" | 13 #include "chrome/browser/ssl/ssl_blocking_page.h" |
14 #include "chrome/browser/ui/browser.h" | 14 #include "chrome/browser/ui/browser.h" |
15 #include "chrome/browser/ui/browser_commands.h" | 15 #include "chrome/browser/ui/browser_commands.h" |
16 #include "chrome/browser/ui/login/login_interstitial_delegate.h" | 16 #include "chrome/browser/ui/login/login_interstitial_delegate.h" |
17 #include "chrome/browser/ui/login/login_prompt.h" | 17 #include "chrome/browser/ui/login/login_prompt.h" |
18 #include "chrome/browser/ui/login/login_prompt_test_utils.h" | 18 #include "chrome/browser/ui/login/login_prompt_test_utils.h" |
19 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 19 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
20 #include "chrome/test/base/in_process_browser_test.h" | 20 #include "chrome/test/base/in_process_browser_test.h" |
21 #include "chrome/test/base/ui_test_utils.h" | 21 #include "chrome/test/base/ui_test_utils.h" |
22 #include "content/public/browser/interstitial_page.h" | 22 #include "content/public/browser/interstitial_page.h" |
23 #include "content/public/browser/notification_details.h" | 23 #include "content/public/browser/notification_details.h" |
24 #include "content/public/browser/notification_source.h" | 24 #include "content/public/browser/notification_source.h" |
25 #include "content/public/browser/web_contents.h" | 25 #include "content/public/browser/web_contents.h" |
26 #include "content/public/test/browser_test_utils.h" | 26 #include "content/public/test/browser_test_utils.h" |
27 #include "content/public/test/test_navigation_observer.h" | 27 #include "content/public/test/test_navigation_observer.h" |
28 #include "net/base/auth.h" | 28 #include "net/base/auth.h" |
29 #include "net/dns/mock_host_resolver.h" | 29 #include "net/dns/mock_host_resolver.h" |
30 #include "net/test/spawned_test_server/spawned_test_server.h" | 30 #include "net/test/embedded_test_server/embedded_test_server.h" |
31 | 31 |
32 using content::NavigationController; | 32 using content::NavigationController; |
33 using content::OpenURLParams; | 33 using content::OpenURLParams; |
34 using content::Referrer; | 34 using content::Referrer; |
35 | 35 |
36 namespace { | 36 namespace { |
37 | 37 |
38 class LoginPromptBrowserTest : public InProcessBrowserTest { | 38 class LoginPromptBrowserTest : public InProcessBrowserTest { |
39 public: | 39 public: |
40 LoginPromptBrowserTest() | 40 LoginPromptBrowserTest() |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 ASSERT_TRUE(challenge); | 86 ASSERT_TRUE(challenge); |
87 AuthMap::iterator i = auth_map_.find(challenge->realm); | 87 AuthMap::iterator i = auth_map_.find(challenge->realm); |
88 EXPECT_TRUE(auth_map_.end() != i); | 88 EXPECT_TRUE(auth_map_.end() != i); |
89 if (i != auth_map_.end()) { | 89 if (i != auth_map_.end()) { |
90 const AuthInfo& info = i->second; | 90 const AuthInfo& info = i->second; |
91 handler->SetAuth(base::UTF8ToUTF16(info.username_), | 91 handler->SetAuth(base::UTF8ToUTF16(info.username_), |
92 base::UTF8ToUTF16(info.password_)); | 92 base::UTF8ToUTF16(info.password_)); |
93 } | 93 } |
94 } | 94 } |
95 | 95 |
96 const char kPrefetchAuthPage[] = "files/login/prefetch.html"; | 96 const char kPrefetchAuthPage[] = "/login/prefetch.html"; |
97 | 97 |
98 const char kMultiRealmTestPage[] = "files/login/multi_realm.html"; | 98 const char kMultiRealmTestPage[] = "/login/multi_realm.html"; |
99 const int kMultiRealmTestRealmCount = 2; | 99 const int kMultiRealmTestRealmCount = 2; |
100 | 100 |
101 const char kSingleRealmTestPage[] = "files/login/single_realm.html"; | 101 const char kSingleRealmTestPage[] = "/login/single_realm.html"; |
102 | 102 |
103 const char* kAuthBasicPage = "auth-basic"; | 103 const char* kAuthBasicPage = "/auth-basic"; |
104 const char* kAuthDigestPage = "auth-digest"; | 104 const char* kAuthDigestPage = "/auth-digest"; |
105 | 105 |
106 base::string16 ExpectedTitleFromAuth(const base::string16& username, | 106 base::string16 ExpectedTitleFromAuth(const base::string16& username, |
107 const base::string16& password) { | 107 const base::string16& password) { |
108 // The TestServer sets the title to username/password on successful login. | 108 // The TestServer sets the title to username/password on successful login. |
109 return username + base::UTF8ToUTF16("/") + password; | 109 return username + base::UTF8ToUTF16("/") + password; |
110 } | 110 } |
111 | 111 |
112 // Confirm that <link rel="prefetch"> targetting an auth required | 112 // Confirm that <link rel="prefetch"> targetting an auth required |
113 // resource does not provide a login dialog. These types of requests | 113 // resource does not provide a login dialog. These types of requests |
114 // should instead just cancel the auth. | 114 // should instead just cancel the auth. |
115 | 115 |
116 // Unfortunately, this test doesn't assert on anything for its | 116 // Unfortunately, this test doesn't assert on anything for its |
117 // correctness. Instead, it relies on the auth dialog blocking the | 117 // correctness. Instead, it relies on the auth dialog blocking the |
118 // browser, and triggering a timeout to cause failure when the | 118 // browser, and triggering a timeout to cause failure when the |
119 // prefetch resource requires authorization. | 119 // prefetch resource requires authorization. |
120 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, PrefetchAuthCancels) { | 120 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, PrefetchAuthCancels) { |
121 ASSERT_TRUE(test_server()->Start()); | 121 ASSERT_TRUE(embedded_test_server()->Start()); |
122 | 122 |
123 GURL test_page = test_server()->GetURL(kPrefetchAuthPage); | 123 GURL test_page = embedded_test_server()->GetURL(kPrefetchAuthPage); |
124 | 124 |
125 class SetPrefetchForTest { | 125 class SetPrefetchForTest { |
126 public: | 126 public: |
127 explicit SetPrefetchForTest(bool prefetch) | 127 explicit SetPrefetchForTest(bool prefetch) |
128 : old_prerender_mode_(prerender::PrerenderManager::GetMode()) { | 128 : old_prerender_mode_(prerender::PrerenderManager::GetMode()) { |
129 std::string exp_group = prefetch ? "ExperimentYes" : "ExperimentNo"; | 129 std::string exp_group = prefetch ? "ExperimentYes" : "ExperimentNo"; |
130 base::FieldTrialList::CreateFieldTrial("Prefetch", exp_group); | 130 base::FieldTrialList::CreateFieldTrial("Prefetch", exp_group); |
131 // Disable prerender so this is just a prefetch of the top-level page. | 131 // Disable prerender so this is just a prefetch of the top-level page. |
132 prerender::PrerenderManager::SetMode( | 132 prerender::PrerenderManager::SetMode( |
133 prerender::PrerenderManager::PRERENDER_MODE_DISABLED); | 133 prerender::PrerenderManager::PRERENDER_MODE_DISABLED); |
(...skipping 14 matching lines...) Expand all Loading... |
148 | 148 |
149 observer.Register(content::Source<NavigationController>(controller)); | 149 observer.Register(content::Source<NavigationController>(controller)); |
150 | 150 |
151 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 151 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
152 browser()->OpenURL(OpenURLParams( | 152 browser()->OpenURL(OpenURLParams( |
153 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 153 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
154 false)); | 154 false)); |
155 | 155 |
156 load_stop_waiter.Wait(); | 156 load_stop_waiter.Wait(); |
157 EXPECT_TRUE(observer.handlers().empty()); | 157 EXPECT_TRUE(observer.handlers().empty()); |
158 EXPECT_TRUE(test_server()->Stop()); | |
159 } | 158 } |
160 | 159 |
161 // Test that "Basic" HTTP authentication works. | 160 // Test that "Basic" HTTP authentication works. |
162 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, TestBasicAuth) { | 161 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, TestBasicAuth) { |
163 ASSERT_TRUE(test_server()->Start()); | 162 ASSERT_TRUE(embedded_test_server()->Start()); |
164 GURL test_page = test_server()->GetURL(kAuthBasicPage); | 163 GURL test_page = embedded_test_server()->GetURL(kAuthBasicPage); |
165 | 164 |
166 content::WebContents* contents = | 165 content::WebContents* contents = |
167 browser()->tab_strip_model()->GetActiveWebContents(); | 166 browser()->tab_strip_model()->GetActiveWebContents(); |
168 NavigationController* controller = &contents->GetController(); | 167 NavigationController* controller = &contents->GetController(); |
169 LoginPromptBrowserTestObserver observer; | 168 LoginPromptBrowserTestObserver observer; |
170 | 169 |
171 observer.Register(content::Source<NavigationController>(controller)); | 170 observer.Register(content::Source<NavigationController>(controller)); |
172 | 171 |
173 { | 172 { |
174 WindowedAuthNeededObserver auth_needed_waiter(controller); | 173 WindowedAuthNeededObserver auth_needed_waiter(controller); |
(...skipping 28 matching lines...) Expand all Loading... |
203 | 202 |
204 base::string16 expected_title = | 203 base::string16 expected_title = |
205 ExpectedTitleFromAuth(base::ASCIIToUTF16("basicuser"), | 204 ExpectedTitleFromAuth(base::ASCIIToUTF16("basicuser"), |
206 base::ASCIIToUTF16("secret")); | 205 base::ASCIIToUTF16("secret")); |
207 content::TitleWatcher title_watcher(contents, expected_title); | 206 content::TitleWatcher title_watcher(contents, expected_title); |
208 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 207 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
209 } | 208 } |
210 | 209 |
211 // Test that "Digest" HTTP authentication works. | 210 // Test that "Digest" HTTP authentication works. |
212 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, TestDigestAuth) { | 211 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, TestDigestAuth) { |
213 ASSERT_TRUE(test_server()->Start()); | 212 ASSERT_TRUE(embedded_test_server()->Start()); |
214 GURL test_page = test_server()->GetURL(kAuthDigestPage); | 213 GURL test_page = embedded_test_server()->GetURL(kAuthDigestPage); |
215 | 214 |
216 content::WebContents* contents = | 215 content::WebContents* contents = |
217 browser()->tab_strip_model()->GetActiveWebContents(); | 216 browser()->tab_strip_model()->GetActiveWebContents(); |
218 NavigationController* controller = &contents->GetController(); | 217 NavigationController* controller = &contents->GetController(); |
219 LoginPromptBrowserTestObserver observer; | 218 LoginPromptBrowserTestObserver observer; |
220 | 219 |
221 observer.Register(content::Source<NavigationController>(controller)); | 220 observer.Register(content::Source<NavigationController>(controller)); |
222 | 221 |
223 { | 222 { |
224 WindowedAuthNeededObserver auth_needed_waiter(controller); | 223 WindowedAuthNeededObserver auth_needed_waiter(controller); |
(...skipping 28 matching lines...) Expand all Loading... |
253 base::string16 password(base::UTF8ToUTF16(password_)); | 252 base::string16 password(base::UTF8ToUTF16(password_)); |
254 handler->SetAuth(username, password); | 253 handler->SetAuth(username, password); |
255 auth_supplied_waiter.Wait(); | 254 auth_supplied_waiter.Wait(); |
256 | 255 |
257 base::string16 expected_title = ExpectedTitleFromAuth(username, password); | 256 base::string16 expected_title = ExpectedTitleFromAuth(username, password); |
258 content::TitleWatcher title_watcher(contents, expected_title); | 257 content::TitleWatcher title_watcher(contents, expected_title); |
259 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 258 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
260 } | 259 } |
261 | 260 |
262 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, TestTwoAuths) { | 261 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, TestTwoAuths) { |
263 ASSERT_TRUE(test_server()->Start()); | 262 ASSERT_TRUE(embedded_test_server()->Start()); |
264 | 263 |
265 content::WebContents* contents1 = | 264 content::WebContents* contents1 = |
266 browser()->tab_strip_model()->GetActiveWebContents(); | 265 browser()->tab_strip_model()->GetActiveWebContents(); |
267 NavigationController* controller1 = &contents1->GetController(); | 266 NavigationController* controller1 = &contents1->GetController(); |
268 LoginPromptBrowserTestObserver observer; | 267 LoginPromptBrowserTestObserver observer; |
269 | 268 |
270 observer.Register(content::Source<NavigationController>(controller1)); | 269 observer.Register(content::Source<NavigationController>(controller1)); |
271 | 270 |
272 // Open a new tab. | 271 // Open a new tab. |
273 ui_test_utils::NavigateToURLWithDisposition( | 272 ui_test_utils::NavigateToURLWithDisposition( |
274 browser(), | 273 browser(), |
275 GURL("about:blank"), | 274 GURL("about:blank"), |
276 NEW_FOREGROUND_TAB, | 275 NEW_FOREGROUND_TAB, |
277 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); | 276 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
278 | 277 |
279 content::WebContents* contents2 = | 278 content::WebContents* contents2 = |
280 browser()->tab_strip_model()->GetActiveWebContents(); | 279 browser()->tab_strip_model()->GetActiveWebContents(); |
281 ASSERT_NE(contents1, contents2); | 280 ASSERT_NE(contents1, contents2); |
282 NavigationController* controller2 = &contents2->GetController(); | 281 NavigationController* controller2 = &contents2->GetController(); |
283 observer.Register(content::Source<NavigationController>(controller2)); | 282 observer.Register(content::Source<NavigationController>(controller2)); |
284 | 283 |
285 { | 284 { |
286 WindowedAuthNeededObserver auth_needed_waiter(controller1); | 285 WindowedAuthNeededObserver auth_needed_waiter(controller1); |
287 contents1->OpenURL(OpenURLParams( | 286 contents1->OpenURL(OpenURLParams( |
288 test_server()->GetURL(kAuthBasicPage), Referrer(), | 287 embedded_test_server()->GetURL(kAuthBasicPage), Referrer(), CURRENT_TAB, |
289 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); | 288 ui::PAGE_TRANSITION_TYPED, false)); |
290 auth_needed_waiter.Wait(); | 289 auth_needed_waiter.Wait(); |
291 } | 290 } |
292 | 291 |
293 { | 292 { |
294 WindowedAuthNeededObserver auth_needed_waiter(controller2); | 293 WindowedAuthNeededObserver auth_needed_waiter(controller2); |
295 contents2->OpenURL(OpenURLParams( | 294 contents2->OpenURL(OpenURLParams( |
296 test_server()->GetURL(kAuthDigestPage), Referrer(), | 295 embedded_test_server()->GetURL(kAuthDigestPage), Referrer(), |
297 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); | 296 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
298 auth_needed_waiter.Wait(); | 297 auth_needed_waiter.Wait(); |
299 } | 298 } |
300 | 299 |
301 ASSERT_EQ(2u, observer.handlers().size()); | 300 ASSERT_EQ(2u, observer.handlers().size()); |
302 | 301 |
303 LoginHandler* handler1 = *observer.handlers().begin(); | 302 LoginHandler* handler1 = *observer.handlers().begin(); |
304 LoginHandler* handler2 = *(++(observer.handlers().begin())); | 303 LoginHandler* handler2 = *(++(observer.handlers().begin())); |
305 | 304 |
306 base::string16 expected_title1 = ExpectedTitleFromAuth( | 305 base::string16 expected_title1 = ExpectedTitleFromAuth( |
307 base::UTF8ToUTF16(username_basic_), base::UTF8ToUTF16(password_)); | 306 base::UTF8ToUTF16(username_basic_), base::UTF8ToUTF16(password_)); |
308 base::string16 expected_title2 = ExpectedTitleFromAuth( | 307 base::string16 expected_title2 = ExpectedTitleFromAuth( |
309 base::UTF8ToUTF16(username_digest_), base::UTF8ToUTF16(password_)); | 308 base::UTF8ToUTF16(username_digest_), base::UTF8ToUTF16(password_)); |
310 content::TitleWatcher title_watcher1(contents1, expected_title1); | 309 content::TitleWatcher title_watcher1(contents1, expected_title1); |
311 content::TitleWatcher title_watcher2(contents2, expected_title2); | 310 content::TitleWatcher title_watcher2(contents2, expected_title2); |
312 | 311 |
313 handler1->SetAuth(base::UTF8ToUTF16(username_basic_), | 312 handler1->SetAuth(base::UTF8ToUTF16(username_basic_), |
314 base::UTF8ToUTF16(password_)); | 313 base::UTF8ToUTF16(password_)); |
315 handler2->SetAuth(base::UTF8ToUTF16(username_digest_), | 314 handler2->SetAuth(base::UTF8ToUTF16(username_digest_), |
316 base::UTF8ToUTF16(password_)); | 315 base::UTF8ToUTF16(password_)); |
317 | 316 |
318 EXPECT_EQ(expected_title1, title_watcher1.WaitAndGetTitle()); | 317 EXPECT_EQ(expected_title1, title_watcher1.WaitAndGetTitle()); |
319 EXPECT_EQ(expected_title2, title_watcher2.WaitAndGetTitle()); | 318 EXPECT_EQ(expected_title2, title_watcher2.WaitAndGetTitle()); |
320 } | 319 } |
321 | 320 |
322 // Test login prompt cancellation. | 321 // Test login prompt cancellation. |
323 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, TestCancelAuth) { | 322 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, TestCancelAuth) { |
324 ASSERT_TRUE(test_server()->Start()); | 323 ASSERT_TRUE(embedded_test_server()->Start()); |
325 GURL auth_page = test_server()->GetURL(kAuthBasicPage); | 324 GURL auth_page = embedded_test_server()->GetURL(kAuthBasicPage); |
326 GURL no_auth_page_1 = test_server()->GetURL("a"); | 325 GURL no_auth_page_1 = embedded_test_server()->GetURL("/a"); |
327 GURL no_auth_page_2 = test_server()->GetURL("b"); | 326 GURL no_auth_page_2 = embedded_test_server()->GetURL("/b"); |
328 GURL no_auth_page_3 = test_server()->GetURL("c"); | 327 GURL no_auth_page_3 = embedded_test_server()->GetURL("/c"); |
329 | 328 |
330 content::WebContents* contents = | 329 content::WebContents* contents = |
331 browser()->tab_strip_model()->GetActiveWebContents(); | 330 browser()->tab_strip_model()->GetActiveWebContents(); |
332 NavigationController* controller = &contents->GetController(); | 331 NavigationController* controller = &contents->GetController(); |
333 | 332 |
334 LoginPromptBrowserTestObserver observer; | 333 LoginPromptBrowserTestObserver observer; |
335 observer.Register(content::Source<NavigationController>(controller)); | 334 observer.Register(content::Source<NavigationController>(controller)); |
336 | 335 |
337 // First navigate to an unauthenticated page so we have something to | 336 // First navigate to an unauthenticated page so we have something to |
338 // go back to. | 337 // go back to. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 EXPECT_TRUE(observer.handlers().empty()); | 414 EXPECT_TRUE(observer.handlers().empty()); |
416 } | 415 } |
417 } | 416 } |
418 | 417 |
419 // Test handling of resources that require authentication even though | 418 // Test handling of resources that require authentication even though |
420 // the page they are included on doesn't. In this case we should only | 419 // the page they are included on doesn't. In this case we should only |
421 // present the minimal number of prompts necessary for successfully | 420 // present the minimal number of prompts necessary for successfully |
422 // displaying the page. First we check whether cancelling works as | 421 // displaying the page. First we check whether cancelling works as |
423 // expected. | 422 // expected. |
424 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, MultipleRealmCancellation) { | 423 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, MultipleRealmCancellation) { |
425 ASSERT_TRUE(test_server()->Start()); | 424 ASSERT_TRUE(embedded_test_server()->Start()); |
426 GURL test_page = test_server()->GetURL(kMultiRealmTestPage); | 425 GURL test_page = embedded_test_server()->GetURL(kMultiRealmTestPage); |
427 | 426 |
428 content::WebContents* contents = | 427 content::WebContents* contents = |
429 browser()->tab_strip_model()->GetActiveWebContents(); | 428 browser()->tab_strip_model()->GetActiveWebContents(); |
430 NavigationController* controller = &contents->GetController(); | 429 NavigationController* controller = &contents->GetController(); |
431 LoginPromptBrowserTestObserver observer; | 430 LoginPromptBrowserTestObserver observer; |
432 | 431 |
433 observer.Register(content::Source<NavigationController>(controller)); | 432 observer.Register(content::Source<NavigationController>(controller)); |
434 | 433 |
435 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 434 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
436 | 435 |
(...skipping 23 matching lines...) Expand all Loading... |
460 if (n_handlers < kMultiRealmTestRealmCount) | 459 if (n_handlers < kMultiRealmTestRealmCount) |
461 auth_needed_waiter.Wait(); | 460 auth_needed_waiter.Wait(); |
462 } | 461 } |
463 | 462 |
464 load_stop_waiter.Wait(); | 463 load_stop_waiter.Wait(); |
465 | 464 |
466 EXPECT_EQ(kMultiRealmTestRealmCount, n_handlers); | 465 EXPECT_EQ(kMultiRealmTestRealmCount, n_handlers); |
467 EXPECT_EQ(0, observer.auth_supplied_count()); | 466 EXPECT_EQ(0, observer.auth_supplied_count()); |
468 EXPECT_LT(0, observer.auth_needed_count()); | 467 EXPECT_LT(0, observer.auth_needed_count()); |
469 EXPECT_LT(0, observer.auth_cancelled_count()); | 468 EXPECT_LT(0, observer.auth_cancelled_count()); |
470 EXPECT_TRUE(test_server()->Stop()); | |
471 } | 469 } |
472 | 470 |
473 // Similar to the MultipleRealmCancellation test above, but tests | 471 // Similar to the MultipleRealmCancellation test above, but tests |
474 // whether supplying credentials work as exepcted. | 472 // whether supplying credentials work as exepcted. |
475 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, MultipleRealmConfirmation) { | 473 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, MultipleRealmConfirmation) { |
476 ASSERT_TRUE(test_server()->Start()); | 474 ASSERT_TRUE(embedded_test_server()->Start()); |
477 GURL test_page = test_server()->GetURL(kMultiRealmTestPage); | 475 GURL test_page = embedded_test_server()->GetURL(kMultiRealmTestPage); |
478 | 476 |
479 content::WebContents* contents = | 477 content::WebContents* contents = |
480 browser()->tab_strip_model()->GetActiveWebContents(); | 478 browser()->tab_strip_model()->GetActiveWebContents(); |
481 NavigationController* controller = &contents->GetController(); | 479 NavigationController* controller = &contents->GetController(); |
482 LoginPromptBrowserTestObserver observer; | 480 LoginPromptBrowserTestObserver observer; |
483 | 481 |
484 observer.Register(content::Source<NavigationController>(controller)); | 482 observer.Register(content::Source<NavigationController>(controller)); |
485 | 483 |
486 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 484 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
487 int n_handlers = 0; | 485 int n_handlers = 0; |
(...skipping 23 matching lines...) Expand all Loading... |
511 if (n_handlers < kMultiRealmTestRealmCount) | 509 if (n_handlers < kMultiRealmTestRealmCount) |
512 auth_needed_waiter.Wait(); | 510 auth_needed_waiter.Wait(); |
513 } | 511 } |
514 | 512 |
515 load_stop_waiter.Wait(); | 513 load_stop_waiter.Wait(); |
516 | 514 |
517 EXPECT_EQ(kMultiRealmTestRealmCount, n_handlers); | 515 EXPECT_EQ(kMultiRealmTestRealmCount, n_handlers); |
518 EXPECT_LT(0, observer.auth_needed_count()); | 516 EXPECT_LT(0, observer.auth_needed_count()); |
519 EXPECT_LT(0, observer.auth_supplied_count()); | 517 EXPECT_LT(0, observer.auth_supplied_count()); |
520 EXPECT_EQ(0, observer.auth_cancelled_count()); | 518 EXPECT_EQ(0, observer.auth_cancelled_count()); |
521 EXPECT_TRUE(test_server()->Stop()); | |
522 } | 519 } |
523 | 520 |
524 // Testing for recovery from an incorrect password for the case where | 521 // Testing for recovery from an incorrect password for the case where |
525 // there are multiple authenticated resources. | 522 // there are multiple authenticated resources. |
526 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, IncorrectConfirmation) { | 523 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, IncorrectConfirmation) { |
527 ASSERT_TRUE(test_server()->Start()); | 524 ASSERT_TRUE(embedded_test_server()->Start()); |
528 GURL test_page = test_server()->GetURL(kSingleRealmTestPage); | 525 GURL test_page = embedded_test_server()->GetURL(kSingleRealmTestPage); |
529 | 526 |
530 content::WebContents* contents = | 527 content::WebContents* contents = |
531 browser()->tab_strip_model()->GetActiveWebContents(); | 528 browser()->tab_strip_model()->GetActiveWebContents(); |
532 NavigationController* controller = &contents->GetController(); | 529 NavigationController* controller = &contents->GetController(); |
533 LoginPromptBrowserTestObserver observer; | 530 LoginPromptBrowserTestObserver observer; |
534 | 531 |
535 observer.Register(content::Source<NavigationController>(controller)); | 532 observer.Register(content::Source<NavigationController>(controller)); |
536 | 533 |
537 { | 534 { |
538 WindowedAuthNeededObserver auth_needed_waiter(controller); | 535 WindowedAuthNeededObserver auth_needed_waiter(controller); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 if (n_handlers < 1) | 575 if (n_handlers < 1) |
579 auth_needed_waiter.Wait(); | 576 auth_needed_waiter.Wait(); |
580 } | 577 } |
581 | 578 |
582 // The single realm test has only one realm, and thus only one login | 579 // The single realm test has only one realm, and thus only one login |
583 // prompt. | 580 // prompt. |
584 EXPECT_EQ(1, n_handlers); | 581 EXPECT_EQ(1, n_handlers); |
585 EXPECT_LT(0, observer.auth_needed_count()); | 582 EXPECT_LT(0, observer.auth_needed_count()); |
586 EXPECT_EQ(0, observer.auth_cancelled_count()); | 583 EXPECT_EQ(0, observer.auth_cancelled_count()); |
587 EXPECT_EQ(observer.auth_needed_count(), observer.auth_supplied_count()); | 584 EXPECT_EQ(observer.auth_needed_count(), observer.auth_supplied_count()); |
588 EXPECT_TRUE(test_server()->Stop()); | |
589 } | 585 } |
590 | 586 |
591 // If the favicon is an authenticated resource, we shouldn't prompt | 587 // If the favicon is an authenticated resource, we shouldn't prompt |
592 // for credentials. The same URL, if requested elsewhere should | 588 // for credentials. The same URL, if requested elsewhere should |
593 // prompt for credentials. | 589 // prompt for credentials. |
594 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, NoLoginPromptForFavicon) { | 590 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, NoLoginPromptForFavicon) { |
595 const char* kFaviconTestPage = "files/login/has_favicon.html"; | 591 const char* kFaviconTestPage = "/login/has_favicon.html"; |
596 const char* kFaviconResource = "auth-basic/favicon.gif"; | 592 const char* kFaviconResource = "/auth-basic/favicon.gif"; |
597 | 593 |
598 ASSERT_TRUE(test_server()->Start()); | 594 ASSERT_TRUE(embedded_test_server()->Start()); |
599 | 595 |
600 content::WebContents* contents = | 596 content::WebContents* contents = |
601 browser()->tab_strip_model()->GetActiveWebContents(); | 597 browser()->tab_strip_model()->GetActiveWebContents(); |
602 NavigationController* controller = &contents->GetController(); | 598 NavigationController* controller = &contents->GetController(); |
603 LoginPromptBrowserTestObserver observer; | 599 LoginPromptBrowserTestObserver observer; |
604 | 600 |
605 observer.Register(content::Source<NavigationController>(controller)); | 601 observer.Register(content::Source<NavigationController>(controller)); |
606 | 602 |
607 // First load a page that has a favicon that requires | 603 // First load a page that has a favicon that requires |
608 // authentication. There should be no login prompt. | 604 // authentication. There should be no login prompt. |
609 { | 605 { |
610 GURL test_page = test_server()->GetURL(kFaviconTestPage); | 606 GURL test_page = embedded_test_server()->GetURL(kFaviconTestPage); |
611 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 607 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
612 browser()->OpenURL(OpenURLParams( | 608 browser()->OpenURL(OpenURLParams( |
613 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 609 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
614 false)); | 610 false)); |
615 load_stop_waiter.Wait(); | 611 load_stop_waiter.Wait(); |
616 } | 612 } |
617 | 613 |
618 // Now request the same favicon, but directly as the document. | 614 // Now request the same favicon, but directly as the document. |
619 // There should be one login prompt. | 615 // There should be one login prompt. |
620 { | 616 { |
621 GURL test_page = test_server()->GetURL(kFaviconResource); | 617 GURL test_page = embedded_test_server()->GetURL(kFaviconResource); |
622 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 618 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
623 WindowedAuthNeededObserver auth_needed_waiter(controller); | 619 WindowedAuthNeededObserver auth_needed_waiter(controller); |
624 browser()->OpenURL(OpenURLParams( | 620 browser()->OpenURL(OpenURLParams( |
625 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 621 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
626 false)); | 622 false)); |
627 auth_needed_waiter.Wait(); | 623 auth_needed_waiter.Wait(); |
628 ASSERT_EQ(1u, observer.handlers().size()); | 624 ASSERT_EQ(1u, observer.handlers().size()); |
629 | 625 |
630 while (!observer.handlers().empty()) { | 626 while (!observer.handlers().empty()) { |
631 WindowedAuthCancelledObserver auth_cancelled_waiter(controller); | 627 WindowedAuthCancelledObserver auth_cancelled_waiter(controller); |
632 LoginHandler* handler = *observer.handlers().begin(); | 628 LoginHandler* handler = *observer.handlers().begin(); |
633 | 629 |
634 ASSERT_TRUE(handler); | 630 ASSERT_TRUE(handler); |
635 handler->CancelAuth(); | 631 handler->CancelAuth(); |
636 auth_cancelled_waiter.Wait(); | 632 auth_cancelled_waiter.Wait(); |
637 } | 633 } |
638 | 634 |
639 load_stop_waiter.Wait(); | 635 load_stop_waiter.Wait(); |
640 } | 636 } |
641 | 637 |
642 EXPECT_EQ(0, observer.auth_supplied_count()); | 638 EXPECT_EQ(0, observer.auth_supplied_count()); |
643 EXPECT_EQ(1, observer.auth_needed_count()); | 639 EXPECT_EQ(1, observer.auth_needed_count()); |
644 EXPECT_EQ(1, observer.auth_cancelled_count()); | 640 EXPECT_EQ(1, observer.auth_cancelled_count()); |
645 EXPECT_TRUE(test_server()->Stop()); | |
646 } | 641 } |
647 | 642 |
648 // Block crossdomain image login prompting as a phishing defense. | 643 // Block crossdomain image login prompting as a phishing defense. |
649 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 644 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
650 BlockCrossdomainPromptForSubresources) { | 645 BlockCrossdomainPromptForSubresources) { |
651 const char* kTestPage = "files/login/load_img_from_b.html"; | 646 const char* kTestPage = "/login/load_img_from_b.html"; |
652 | 647 |
653 host_resolver()->AddRule("www.a.com", "127.0.0.1"); | 648 host_resolver()->AddRule("www.a.com", "127.0.0.1"); |
654 host_resolver()->AddRule("www.b.com", "127.0.0.1"); | 649 host_resolver()->AddRule("www.b.com", "127.0.0.1"); |
655 ASSERT_TRUE(test_server()->Start()); | 650 ASSERT_TRUE(embedded_test_server()->Start()); |
656 | 651 |
657 content::WebContents* contents = | 652 content::WebContents* contents = |
658 browser()->tab_strip_model()->GetActiveWebContents(); | 653 browser()->tab_strip_model()->GetActiveWebContents(); |
659 NavigationController* controller = &contents->GetController(); | 654 NavigationController* controller = &contents->GetController(); |
660 LoginPromptBrowserTestObserver observer; | 655 LoginPromptBrowserTestObserver observer; |
661 observer.Register(content::Source<NavigationController>(controller)); | 656 observer.Register(content::Source<NavigationController>(controller)); |
662 | 657 |
663 // Load a page that has a cross-domain sub-resource authentication. | 658 // Load a page that has a cross-domain sub-resource authentication. |
664 // There should be no login prompt. | 659 // There should be no login prompt. |
665 { | 660 { |
666 GURL test_page = test_server()->GetURL(kTestPage); | 661 GURL test_page = embedded_test_server()->GetURL(kTestPage); |
667 ASSERT_EQ("127.0.0.1", test_page.host()); | 662 ASSERT_EQ("127.0.0.1", test_page.host()); |
668 | 663 |
669 // Change the host from 127.0.0.1 to www.a.com so that when the | 664 // Change the host from 127.0.0.1 to www.a.com so that when the |
670 // page tries to load from b, it will be cross-origin. | 665 // page tries to load from b, it will be cross-origin. |
671 GURL::Replacements replacements; | 666 GURL::Replacements replacements; |
672 replacements.SetHostStr("www.a.com"); | 667 replacements.SetHostStr("www.a.com"); |
673 test_page = test_page.ReplaceComponents(replacements); | 668 test_page = test_page.ReplaceComponents(replacements); |
674 | 669 |
675 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 670 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
676 browser()->OpenURL(OpenURLParams( | 671 browser()->OpenURL(OpenURLParams( |
677 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 672 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
678 false)); | 673 false)); |
679 load_stop_waiter.Wait(); | 674 load_stop_waiter.Wait(); |
680 } | 675 } |
681 | 676 |
682 EXPECT_EQ(0, observer.auth_needed_count()); | 677 EXPECT_EQ(0, observer.auth_needed_count()); |
683 | 678 |
684 // Now request the same page, but from the same origin. | 679 // Now request the same page, but from the same origin. |
685 // There should be one login prompt. | 680 // There should be one login prompt. |
686 { | 681 { |
687 GURL test_page = test_server()->GetURL(kTestPage); | 682 GURL test_page = embedded_test_server()->GetURL(kTestPage); |
688 ASSERT_EQ("127.0.0.1", test_page.host()); | 683 ASSERT_EQ("127.0.0.1", test_page.host()); |
689 | 684 |
690 // Change the host from 127.0.0.1 to www.b.com so that when the | 685 // Change the host from 127.0.0.1 to www.b.com so that when the |
691 // page tries to load from b, it will be same-origin. | 686 // page tries to load from b, it will be same-origin. |
692 GURL::Replacements replacements; | 687 GURL::Replacements replacements; |
693 replacements.SetHostStr("www.b.com"); | 688 replacements.SetHostStr("www.b.com"); |
694 test_page = test_page.ReplaceComponents(replacements); | 689 test_page = test_page.ReplaceComponents(replacements); |
695 | 690 |
696 WindowedAuthNeededObserver auth_needed_waiter(controller); | 691 WindowedAuthNeededObserver auth_needed_waiter(controller); |
697 browser()->OpenURL(OpenURLParams( | 692 browser()->OpenURL(OpenURLParams( |
698 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 693 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
699 false)); | 694 false)); |
700 auth_needed_waiter.Wait(); | 695 auth_needed_waiter.Wait(); |
701 ASSERT_EQ(1u, observer.handlers().size()); | 696 ASSERT_EQ(1u, observer.handlers().size()); |
702 | 697 |
703 while (!observer.handlers().empty()) { | 698 while (!observer.handlers().empty()) { |
704 WindowedAuthCancelledObserver auth_cancelled_waiter(controller); | 699 WindowedAuthCancelledObserver auth_cancelled_waiter(controller); |
705 LoginHandler* handler = *observer.handlers().begin(); | 700 LoginHandler* handler = *observer.handlers().begin(); |
706 | 701 |
707 ASSERT_TRUE(handler); | 702 ASSERT_TRUE(handler); |
708 handler->CancelAuth(); | 703 handler->CancelAuth(); |
709 auth_cancelled_waiter.Wait(); | 704 auth_cancelled_waiter.Wait(); |
710 } | 705 } |
711 } | 706 } |
712 | 707 |
713 EXPECT_EQ(1, observer.auth_needed_count()); | 708 EXPECT_EQ(1, observer.auth_needed_count()); |
714 EXPECT_TRUE(test_server()->Stop()); | |
715 } | 709 } |
716 | 710 |
717 // Allow crossdomain iframe login prompting despite the above. | 711 // Allow crossdomain iframe login prompting despite the above. |
718 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 712 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
719 AllowCrossdomainPromptForSubframes) { | 713 AllowCrossdomainPromptForSubframes) { |
720 const char* kTestPage = "files/login/load_iframe_from_b.html"; | 714 const char* kTestPage = "/login/load_iframe_from_b.html"; |
721 | 715 |
722 host_resolver()->AddRule("www.a.com", "127.0.0.1"); | 716 host_resolver()->AddRule("www.a.com", "127.0.0.1"); |
723 host_resolver()->AddRule("www.b.com", "127.0.0.1"); | 717 host_resolver()->AddRule("www.b.com", "127.0.0.1"); |
724 ASSERT_TRUE(test_server()->Start()); | 718 ASSERT_TRUE(embedded_test_server()->Start()); |
725 | 719 |
726 content::WebContents* contents = | 720 content::WebContents* contents = |
727 browser()->tab_strip_model()->GetActiveWebContents(); | 721 browser()->tab_strip_model()->GetActiveWebContents(); |
728 NavigationController* controller = &contents->GetController(); | 722 NavigationController* controller = &contents->GetController(); |
729 LoginPromptBrowserTestObserver observer; | 723 LoginPromptBrowserTestObserver observer; |
730 observer.Register(content::Source<NavigationController>(controller)); | 724 observer.Register(content::Source<NavigationController>(controller)); |
731 | 725 |
732 // Load a page that has a cross-domain iframe authentication. | 726 // Load a page that has a cross-domain iframe authentication. |
733 { | 727 { |
734 GURL test_page = test_server()->GetURL(kTestPage); | 728 GURL test_page = embedded_test_server()->GetURL(kTestPage); |
735 ASSERT_EQ("127.0.0.1", test_page.host()); | 729 ASSERT_EQ("127.0.0.1", test_page.host()); |
736 | 730 |
737 // Change the host from 127.0.0.1 to www.a.com so that when the | 731 // Change the host from 127.0.0.1 to www.a.com so that when the |
738 // page tries to load from b, it will be cross-origin. | 732 // page tries to load from b, it will be cross-origin. |
739 static const char kNewHost[] = "www.a.com"; | 733 static const char kNewHost[] = "www.a.com"; |
740 GURL::Replacements replacements; | 734 GURL::Replacements replacements; |
741 replacements.SetHostStr(kNewHost); | 735 replacements.SetHostStr(kNewHost); |
742 test_page = test_page.ReplaceComponents(replacements); | 736 test_page = test_page.ReplaceComponents(replacements); |
743 | 737 |
744 WindowedAuthNeededObserver auth_needed_waiter(controller); | 738 WindowedAuthNeededObserver auth_needed_waiter(controller); |
(...skipping 15 matching lines...) Expand all Loading... |
760 | 754 |
761 handler->CancelAuth(); | 755 handler->CancelAuth(); |
762 auth_cancelled_waiter.Wait(); | 756 auth_cancelled_waiter.Wait(); |
763 } | 757 } |
764 } | 758 } |
765 | 759 |
766 // Should stay on the main frame's url once the prompt the iframe is closed. | 760 // Should stay on the main frame's url once the prompt the iframe is closed. |
767 EXPECT_EQ("www.a.com", contents->GetVisibleURL().host()); | 761 EXPECT_EQ("www.a.com", contents->GetVisibleURL().host()); |
768 | 762 |
769 EXPECT_EQ(1, observer.auth_needed_count()); | 763 EXPECT_EQ(1, observer.auth_needed_count()); |
770 EXPECT_TRUE(test_server()->Stop()); | |
771 } | 764 } |
772 | 765 |
773 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, SupplyRedundantAuths) { | 766 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, SupplyRedundantAuths) { |
774 ASSERT_TRUE(test_server()->Start()); | 767 ASSERT_TRUE(embedded_test_server()->Start()); |
775 | 768 |
776 // Get NavigationController for tab 1. | 769 // Get NavigationController for tab 1. |
777 content::WebContents* contents_1 = | 770 content::WebContents* contents_1 = |
778 browser()->tab_strip_model()->GetActiveWebContents(); | 771 browser()->tab_strip_model()->GetActiveWebContents(); |
779 NavigationController* controller_1 = &contents_1->GetController(); | 772 NavigationController* controller_1 = &contents_1->GetController(); |
780 | 773 |
781 // Open a new tab. | 774 // Open a new tab. |
782 ui_test_utils::NavigateToURLWithDisposition( | 775 ui_test_utils::NavigateToURLWithDisposition( |
783 browser(), | 776 browser(), |
784 GURL("about:blank"), | 777 GURL("about:blank"), |
785 NEW_FOREGROUND_TAB, | 778 NEW_FOREGROUND_TAB, |
786 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); | 779 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
787 | 780 |
788 // Get NavigationController for tab 2. | 781 // Get NavigationController for tab 2. |
789 content::WebContents* contents_2 = | 782 content::WebContents* contents_2 = |
790 browser()->tab_strip_model()->GetActiveWebContents(); | 783 browser()->tab_strip_model()->GetActiveWebContents(); |
791 ASSERT_NE(contents_1, contents_2); | 784 ASSERT_NE(contents_1, contents_2); |
792 NavigationController* controller_2 = &contents_2->GetController(); | 785 NavigationController* controller_2 = &contents_2->GetController(); |
793 | 786 |
794 LoginPromptBrowserTestObserver observer; | 787 LoginPromptBrowserTestObserver observer; |
795 observer.Register(content::Source<NavigationController>(controller_1)); | 788 observer.Register(content::Source<NavigationController>(controller_1)); |
796 observer.Register(content::Source<NavigationController>(controller_2)); | 789 observer.Register(content::Source<NavigationController>(controller_2)); |
797 | 790 |
798 { | 791 { |
799 // Open different auth urls in each tab. | 792 // Open different auth urls in each tab. |
800 WindowedAuthNeededObserver auth_needed_waiter_1(controller_1); | 793 WindowedAuthNeededObserver auth_needed_waiter_1(controller_1); |
801 WindowedAuthNeededObserver auth_needed_waiter_2(controller_2); | 794 WindowedAuthNeededObserver auth_needed_waiter_2(controller_2); |
802 contents_1->OpenURL(OpenURLParams( | 795 contents_1->OpenURL(OpenURLParams( |
803 test_server()->GetURL("auth-basic/1"), | 796 embedded_test_server()->GetURL("/auth-basic/1"), content::Referrer(), |
804 content::Referrer(), | 797 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
805 CURRENT_TAB, | |
806 ui::PAGE_TRANSITION_TYPED, | |
807 false)); | |
808 contents_2->OpenURL(OpenURLParams( | 798 contents_2->OpenURL(OpenURLParams( |
809 test_server()->GetURL("auth-basic/2"), | 799 embedded_test_server()->GetURL("/auth-basic/2"), content::Referrer(), |
810 content::Referrer(), | 800 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
811 CURRENT_TAB, | |
812 ui::PAGE_TRANSITION_TYPED, | |
813 false)); | |
814 auth_needed_waiter_1.Wait(); | 801 auth_needed_waiter_1.Wait(); |
815 auth_needed_waiter_2.Wait(); | 802 auth_needed_waiter_2.Wait(); |
816 | 803 |
817 ASSERT_EQ(2U, observer.handlers().size()); | 804 ASSERT_EQ(2U, observer.handlers().size()); |
818 | 805 |
819 // Supply auth in one of the tabs. | 806 // Supply auth in one of the tabs. |
820 WindowedAuthSuppliedObserver auth_supplied_waiter_1(controller_1); | 807 WindowedAuthSuppliedObserver auth_supplied_waiter_1(controller_1); |
821 WindowedAuthSuppliedObserver auth_supplied_waiter_2(controller_2); | 808 WindowedAuthSuppliedObserver auth_supplied_waiter_2(controller_2); |
822 LoginHandler* handler_1 = *observer.handlers().begin(); | 809 LoginHandler* handler_1 = *observer.handlers().begin(); |
823 ASSERT_TRUE(handler_1); | 810 ASSERT_TRUE(handler_1); |
824 SetAuthFor(handler_1); | 811 SetAuthFor(handler_1); |
825 | 812 |
826 // Both tabs should be authenticated. | 813 // Both tabs should be authenticated. |
827 auth_supplied_waiter_1.Wait(); | 814 auth_supplied_waiter_1.Wait(); |
828 auth_supplied_waiter_2.Wait(); | 815 auth_supplied_waiter_2.Wait(); |
829 } | 816 } |
830 | 817 |
831 EXPECT_EQ(2, observer.auth_needed_count()); | 818 EXPECT_EQ(2, observer.auth_needed_count()); |
832 EXPECT_EQ(2, observer.auth_supplied_count()); | 819 EXPECT_EQ(2, observer.auth_supplied_count()); |
833 EXPECT_EQ(0, observer.auth_cancelled_count()); | 820 EXPECT_EQ(0, observer.auth_cancelled_count()); |
834 EXPECT_TRUE(test_server()->Stop()); | |
835 } | 821 } |
836 | 822 |
837 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, CancelRedundantAuths) { | 823 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, CancelRedundantAuths) { |
838 ASSERT_TRUE(test_server()->Start()); | 824 ASSERT_TRUE(embedded_test_server()->Start()); |
839 | 825 |
840 // Get NavigationController for tab 1. | 826 // Get NavigationController for tab 1. |
841 content::WebContents* contents_1 = | 827 content::WebContents* contents_1 = |
842 browser()->tab_strip_model()->GetActiveWebContents(); | 828 browser()->tab_strip_model()->GetActiveWebContents(); |
843 NavigationController* controller_1 = &contents_1->GetController(); | 829 NavigationController* controller_1 = &contents_1->GetController(); |
844 | 830 |
845 // Open a new tab. | 831 // Open a new tab. |
846 ui_test_utils::NavigateToURLWithDisposition( | 832 ui_test_utils::NavigateToURLWithDisposition( |
847 browser(), | 833 browser(), |
848 GURL("about:blank"), | 834 GURL("about:blank"), |
849 NEW_FOREGROUND_TAB, | 835 NEW_FOREGROUND_TAB, |
850 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); | 836 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
851 | 837 |
852 // Get NavigationController for tab 2. | 838 // Get NavigationController for tab 2. |
853 content::WebContents* contents_2 = | 839 content::WebContents* contents_2 = |
854 browser()->tab_strip_model()->GetActiveWebContents(); | 840 browser()->tab_strip_model()->GetActiveWebContents(); |
855 ASSERT_NE(contents_1, contents_2); | 841 ASSERT_NE(contents_1, contents_2); |
856 NavigationController* controller_2 = &contents_2->GetController(); | 842 NavigationController* controller_2 = &contents_2->GetController(); |
857 | 843 |
858 LoginPromptBrowserTestObserver observer; | 844 LoginPromptBrowserTestObserver observer; |
859 observer.Register(content::Source<NavigationController>(controller_1)); | 845 observer.Register(content::Source<NavigationController>(controller_1)); |
860 observer.Register(content::Source<NavigationController>(controller_2)); | 846 observer.Register(content::Source<NavigationController>(controller_2)); |
861 | 847 |
862 { | 848 { |
863 // Open different auth urls in each tab. | 849 // Open different auth urls in each tab. |
864 WindowedAuthNeededObserver auth_needed_waiter_1(controller_1); | 850 WindowedAuthNeededObserver auth_needed_waiter_1(controller_1); |
865 WindowedAuthNeededObserver auth_needed_waiter_2(controller_2); | 851 WindowedAuthNeededObserver auth_needed_waiter_2(controller_2); |
866 contents_1->OpenURL(OpenURLParams( | 852 contents_1->OpenURL(OpenURLParams( |
867 test_server()->GetURL("auth-basic/1"), | 853 embedded_test_server()->GetURL("/auth-basic/1"), content::Referrer(), |
868 content::Referrer(), | 854 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
869 CURRENT_TAB, | |
870 ui::PAGE_TRANSITION_TYPED, | |
871 false)); | |
872 contents_2->OpenURL(OpenURLParams( | 855 contents_2->OpenURL(OpenURLParams( |
873 test_server()->GetURL("auth-basic/2"), | 856 embedded_test_server()->GetURL("/auth-basic/2"), content::Referrer(), |
874 content::Referrer(), | 857 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
875 CURRENT_TAB, | |
876 ui::PAGE_TRANSITION_TYPED, | |
877 false)); | |
878 auth_needed_waiter_1.Wait(); | 858 auth_needed_waiter_1.Wait(); |
879 auth_needed_waiter_2.Wait(); | 859 auth_needed_waiter_2.Wait(); |
880 | 860 |
881 ASSERT_EQ(2U, observer.handlers().size()); | 861 ASSERT_EQ(2U, observer.handlers().size()); |
882 | 862 |
883 // Cancel auth in one of the tabs. | 863 // Cancel auth in one of the tabs. |
884 WindowedAuthCancelledObserver auth_cancelled_waiter_1(controller_1); | 864 WindowedAuthCancelledObserver auth_cancelled_waiter_1(controller_1); |
885 WindowedAuthCancelledObserver auth_cancelled_waiter_2(controller_2); | 865 WindowedAuthCancelledObserver auth_cancelled_waiter_2(controller_2); |
886 LoginHandler* handler_1 = *observer.handlers().begin(); | 866 LoginHandler* handler_1 = *observer.handlers().begin(); |
887 ASSERT_TRUE(handler_1); | 867 ASSERT_TRUE(handler_1); |
888 handler_1->CancelAuth(); | 868 handler_1->CancelAuth(); |
889 | 869 |
890 // Both tabs should cancel auth. | 870 // Both tabs should cancel auth. |
891 auth_cancelled_waiter_1.Wait(); | 871 auth_cancelled_waiter_1.Wait(); |
892 auth_cancelled_waiter_2.Wait(); | 872 auth_cancelled_waiter_2.Wait(); |
893 } | 873 } |
894 | 874 |
895 EXPECT_EQ(2, observer.auth_needed_count()); | 875 EXPECT_EQ(2, observer.auth_needed_count()); |
896 EXPECT_EQ(0, observer.auth_supplied_count()); | 876 EXPECT_EQ(0, observer.auth_supplied_count()); |
897 EXPECT_EQ(2, observer.auth_cancelled_count()); | 877 EXPECT_EQ(2, observer.auth_cancelled_count()); |
898 EXPECT_TRUE(test_server()->Stop()); | |
899 } | 878 } |
900 | 879 |
901 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 880 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
902 SupplyRedundantAuthsMultiProfile) { | 881 SupplyRedundantAuthsMultiProfile) { |
903 ASSERT_TRUE(test_server()->Start()); | 882 ASSERT_TRUE(embedded_test_server()->Start()); |
904 | 883 |
905 // Get NavigationController for regular tab. | 884 // Get NavigationController for regular tab. |
906 content::WebContents* contents = | 885 content::WebContents* contents = |
907 browser()->tab_strip_model()->GetActiveWebContents(); | 886 browser()->tab_strip_model()->GetActiveWebContents(); |
908 NavigationController* controller = &contents->GetController(); | 887 NavigationController* controller = &contents->GetController(); |
909 | 888 |
910 // Open an incognito window. | 889 // Open an incognito window. |
911 Browser* browser_incognito = CreateIncognitoBrowser(); | 890 Browser* browser_incognito = CreateIncognitoBrowser(); |
912 | 891 |
913 // Get NavigationController for incognito tab. | 892 // Get NavigationController for incognito tab. |
914 content::WebContents* contents_incognito = | 893 content::WebContents* contents_incognito = |
915 browser_incognito->tab_strip_model()->GetActiveWebContents(); | 894 browser_incognito->tab_strip_model()->GetActiveWebContents(); |
916 ASSERT_NE(contents, contents_incognito); | 895 ASSERT_NE(contents, contents_incognito); |
917 NavigationController* controller_incognito = | 896 NavigationController* controller_incognito = |
918 &contents_incognito->GetController(); | 897 &contents_incognito->GetController(); |
919 | 898 |
920 LoginPromptBrowserTestObserver observer; | 899 LoginPromptBrowserTestObserver observer; |
921 observer.Register(content::Source<NavigationController>(controller)); | 900 observer.Register(content::Source<NavigationController>(controller)); |
922 LoginPromptBrowserTestObserver observer_incognito; | 901 LoginPromptBrowserTestObserver observer_incognito; |
923 observer_incognito.Register( | 902 observer_incognito.Register( |
924 content::Source<NavigationController>(controller_incognito)); | 903 content::Source<NavigationController>(controller_incognito)); |
925 | 904 |
926 { | 905 { |
927 // Open an auth url in each window. | 906 // Open an auth url in each window. |
928 WindowedAuthNeededObserver auth_needed_waiter(controller); | 907 WindowedAuthNeededObserver auth_needed_waiter(controller); |
929 WindowedAuthNeededObserver auth_needed_waiter_incognito( | 908 WindowedAuthNeededObserver auth_needed_waiter_incognito( |
930 controller_incognito); | 909 controller_incognito); |
931 contents->OpenURL(OpenURLParams( | 910 contents->OpenURL(OpenURLParams( |
932 test_server()->GetURL("auth-basic/1"), | 911 embedded_test_server()->GetURL("/auth-basic/1"), content::Referrer(), |
933 content::Referrer(), | 912 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
934 CURRENT_TAB, | |
935 ui::PAGE_TRANSITION_TYPED, | |
936 false)); | |
937 contents_incognito->OpenURL(OpenURLParams( | 913 contents_incognito->OpenURL(OpenURLParams( |
938 test_server()->GetURL("auth-basic/2"), | 914 embedded_test_server()->GetURL("/auth-basic/2"), content::Referrer(), |
939 content::Referrer(), | 915 CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
940 CURRENT_TAB, | |
941 ui::PAGE_TRANSITION_TYPED, | |
942 false)); | |
943 auth_needed_waiter.Wait(); | 916 auth_needed_waiter.Wait(); |
944 auth_needed_waiter_incognito.Wait(); | 917 auth_needed_waiter_incognito.Wait(); |
945 | 918 |
946 ASSERT_EQ(1U, observer.handlers().size()); | 919 ASSERT_EQ(1U, observer.handlers().size()); |
947 ASSERT_EQ(1U, observer_incognito.handlers().size()); | 920 ASSERT_EQ(1U, observer_incognito.handlers().size()); |
948 | 921 |
949 // Supply auth in regular tab. | 922 // Supply auth in regular tab. |
950 WindowedAuthSuppliedObserver auth_supplied_waiter(controller); | 923 WindowedAuthSuppliedObserver auth_supplied_waiter(controller); |
951 LoginHandler* handler = *observer.handlers().begin(); | 924 LoginHandler* handler = *observer.handlers().begin(); |
952 ASSERT_TRUE(handler); | 925 ASSERT_TRUE(handler); |
953 SetAuthFor(handler); | 926 SetAuthFor(handler); |
954 | 927 |
955 // Regular tab should be authenticated. | 928 // Regular tab should be authenticated. |
956 auth_supplied_waiter.Wait(); | 929 auth_supplied_waiter.Wait(); |
957 | 930 |
958 // There's not really a way to wait for the incognito window to "do | 931 // There's not really a way to wait for the incognito window to "do |
959 // nothing". Run anything pending in the message loop just to be sure. | 932 // nothing". Run anything pending in the message loop just to be sure. |
960 // (This shouldn't be necessary since notifications are synchronous, but | 933 // (This shouldn't be necessary since notifications are synchronous, but |
961 // maybe it will help avoid flake someday in the future..) | 934 // maybe it will help avoid flake someday in the future..) |
962 content::RunAllPendingInMessageLoop(); | 935 content::RunAllPendingInMessageLoop(); |
963 } | 936 } |
964 | 937 |
965 EXPECT_EQ(1, observer.auth_needed_count()); | 938 EXPECT_EQ(1, observer.auth_needed_count()); |
966 EXPECT_EQ(1, observer.auth_supplied_count()); | 939 EXPECT_EQ(1, observer.auth_supplied_count()); |
967 EXPECT_EQ(0, observer.auth_cancelled_count()); | 940 EXPECT_EQ(0, observer.auth_cancelled_count()); |
968 EXPECT_EQ(1, observer_incognito.auth_needed_count()); | 941 EXPECT_EQ(1, observer_incognito.auth_needed_count()); |
969 EXPECT_EQ(0, observer_incognito.auth_supplied_count()); | 942 EXPECT_EQ(0, observer_incognito.auth_supplied_count()); |
970 EXPECT_EQ(0, observer_incognito.auth_cancelled_count()); | 943 EXPECT_EQ(0, observer_incognito.auth_cancelled_count()); |
971 EXPECT_TRUE(test_server()->Stop()); | |
972 } | 944 } |
973 | 945 |
974 // If an XMLHttpRequest is made with incorrect credentials, there should be no | 946 // If an XMLHttpRequest is made with incorrect credentials, there should be no |
975 // login prompt; instead the 401 status should be returned to the script. | 947 // login prompt; instead the 401 status should be returned to the script. |
976 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 948 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
977 NoLoginPromptForXHRWithBadCredentials) { | 949 NoLoginPromptForXHRWithBadCredentials) { |
978 const char* kXHRTestPage = "files/login/xhr_with_credentials.html#incorrect"; | 950 const char* kXHRTestPage = "/login/xhr_with_credentials.html#incorrect"; |
979 | 951 |
980 ASSERT_TRUE(test_server()->Start()); | 952 ASSERT_TRUE(embedded_test_server()->Start()); |
981 | 953 |
982 content::WebContents* contents = | 954 content::WebContents* contents = |
983 browser()->tab_strip_model()->GetActiveWebContents(); | 955 browser()->tab_strip_model()->GetActiveWebContents(); |
984 NavigationController* controller = &contents->GetController(); | 956 NavigationController* controller = &contents->GetController(); |
985 LoginPromptBrowserTestObserver observer; | 957 LoginPromptBrowserTestObserver observer; |
986 | 958 |
987 observer.Register(content::Source<NavigationController>(controller)); | 959 observer.Register(content::Source<NavigationController>(controller)); |
988 | 960 |
989 // Load a page which makes a synchronous XMLHttpRequest for an authenticated | 961 // Load a page which makes a synchronous XMLHttpRequest for an authenticated |
990 // resource with the wrong credentials. There should be no login prompt. | 962 // resource with the wrong credentials. There should be no login prompt. |
991 { | 963 { |
992 GURL test_page = test_server()->GetURL(kXHRTestPage); | 964 GURL test_page = embedded_test_server()->GetURL(kXHRTestPage); |
993 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 965 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
994 browser()->OpenURL(OpenURLParams( | 966 browser()->OpenURL(OpenURLParams( |
995 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 967 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
996 false)); | 968 false)); |
997 load_stop_waiter.Wait(); | 969 load_stop_waiter.Wait(); |
998 } | 970 } |
999 | 971 |
1000 base::string16 expected_title(base::UTF8ToUTF16("status=401")); | 972 base::string16 expected_title(base::UTF8ToUTF16("status=401")); |
1001 | 973 |
1002 EXPECT_EQ(expected_title, contents->GetTitle()); | 974 EXPECT_EQ(expected_title, contents->GetTitle()); |
1003 EXPECT_EQ(0, observer.auth_supplied_count()); | 975 EXPECT_EQ(0, observer.auth_supplied_count()); |
1004 EXPECT_EQ(0, observer.auth_needed_count()); | 976 EXPECT_EQ(0, observer.auth_needed_count()); |
1005 EXPECT_EQ(0, observer.auth_cancelled_count()); | 977 EXPECT_EQ(0, observer.auth_cancelled_count()); |
1006 EXPECT_TRUE(test_server()->Stop()); | |
1007 } | 978 } |
1008 | 979 |
1009 // If an XMLHttpRequest is made with correct credentials, there should be no | 980 // If an XMLHttpRequest is made with correct credentials, there should be no |
1010 // login prompt either. | 981 // login prompt either. |
1011 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 982 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
1012 NoLoginPromptForXHRWithGoodCredentials) { | 983 NoLoginPromptForXHRWithGoodCredentials) { |
1013 const char* kXHRTestPage = "files/login/xhr_with_credentials.html#secret"; | 984 const char* kXHRTestPage = "/login/xhr_with_credentials.html#secret"; |
1014 | 985 |
1015 ASSERT_TRUE(test_server()->Start()); | 986 ASSERT_TRUE(embedded_test_server()->Start()); |
1016 | 987 |
1017 content::WebContents* contents = | 988 content::WebContents* contents = |
1018 browser()->tab_strip_model()->GetActiveWebContents(); | 989 browser()->tab_strip_model()->GetActiveWebContents(); |
1019 NavigationController* controller = &contents->GetController(); | 990 NavigationController* controller = &contents->GetController(); |
1020 LoginPromptBrowserTestObserver observer; | 991 LoginPromptBrowserTestObserver observer; |
1021 | 992 |
1022 observer.Register(content::Source<NavigationController>(controller)); | 993 observer.Register(content::Source<NavigationController>(controller)); |
1023 | 994 |
1024 // Load a page which makes a synchronous XMLHttpRequest for an authenticated | 995 // Load a page which makes a synchronous XMLHttpRequest for an authenticated |
1025 // resource with the wrong credentials. There should be no login prompt. | 996 // resource with the wrong credentials. There should be no login prompt. |
1026 { | 997 { |
1027 GURL test_page = test_server()->GetURL(kXHRTestPage); | 998 GURL test_page = embedded_test_server()->GetURL(kXHRTestPage); |
1028 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 999 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
1029 browser()->OpenURL(OpenURLParams( | 1000 browser()->OpenURL(OpenURLParams( |
1030 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 1001 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
1031 false)); | 1002 false)); |
1032 load_stop_waiter.Wait(); | 1003 load_stop_waiter.Wait(); |
1033 } | 1004 } |
1034 | 1005 |
1035 base::string16 expected_title(base::UTF8ToUTF16("status=200")); | 1006 base::string16 expected_title(base::UTF8ToUTF16("status=200")); |
1036 | 1007 |
1037 EXPECT_EQ(expected_title, contents->GetTitle()); | 1008 EXPECT_EQ(expected_title, contents->GetTitle()); |
1038 EXPECT_EQ(0, observer.auth_supplied_count()); | 1009 EXPECT_EQ(0, observer.auth_supplied_count()); |
1039 EXPECT_EQ(0, observer.auth_needed_count()); | 1010 EXPECT_EQ(0, observer.auth_needed_count()); |
1040 EXPECT_EQ(0, observer.auth_cancelled_count()); | 1011 EXPECT_EQ(0, observer.auth_cancelled_count()); |
1041 EXPECT_TRUE(test_server()->Stop()); | |
1042 } | 1012 } |
1043 | 1013 |
1044 // If an XMLHttpRequest is made without credentials, there should be a login | 1014 // If an XMLHttpRequest is made without credentials, there should be a login |
1045 // prompt. | 1015 // prompt. |
1046 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 1016 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
1047 LoginPromptForXHRWithoutCredentials) { | 1017 LoginPromptForXHRWithoutCredentials) { |
1048 const char* kXHRTestPage = "files/login/xhr_without_credentials.html"; | 1018 const char* kXHRTestPage = "/login/xhr_without_credentials.html"; |
1049 | 1019 |
1050 ASSERT_TRUE(test_server()->Start()); | 1020 ASSERT_TRUE(embedded_test_server()->Start()); |
1051 | 1021 |
1052 content::WebContents* contents = | 1022 content::WebContents* contents = |
1053 browser()->tab_strip_model()->GetActiveWebContents(); | 1023 browser()->tab_strip_model()->GetActiveWebContents(); |
1054 NavigationController* controller = &contents->GetController(); | 1024 NavigationController* controller = &contents->GetController(); |
1055 LoginPromptBrowserTestObserver observer; | 1025 LoginPromptBrowserTestObserver observer; |
1056 | 1026 |
1057 observer.Register(content::Source<NavigationController>(controller)); | 1027 observer.Register(content::Source<NavigationController>(controller)); |
1058 | 1028 |
1059 // Load a page which makes a synchronous XMLHttpRequest for an authenticated | 1029 // Load a page which makes a synchronous XMLHttpRequest for an authenticated |
1060 // resource with the wrong credentials. There should be no login prompt. | 1030 // resource with the wrong credentials. There should be no login prompt. |
1061 { | 1031 { |
1062 GURL test_page = test_server()->GetURL(kXHRTestPage); | 1032 GURL test_page = embedded_test_server()->GetURL(kXHRTestPage); |
1063 WindowedAuthNeededObserver auth_needed_waiter(controller); | 1033 WindowedAuthNeededObserver auth_needed_waiter(controller); |
1064 browser()->OpenURL(OpenURLParams( | 1034 browser()->OpenURL(OpenURLParams( |
1065 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 1035 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
1066 false)); | 1036 false)); |
1067 auth_needed_waiter.Wait(); | 1037 auth_needed_waiter.Wait(); |
1068 } | 1038 } |
1069 | 1039 |
1070 ASSERT_FALSE(observer.handlers().empty()); | 1040 ASSERT_FALSE(observer.handlers().empty()); |
1071 { | 1041 { |
1072 WindowedAuthNeededObserver auth_needed_waiter(controller); | 1042 WindowedAuthNeededObserver auth_needed_waiter(controller); |
(...skipping 22 matching lines...) Expand all Loading... |
1095 | 1065 |
1096 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 1066 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
1097 load_stop_waiter.Wait(); | 1067 load_stop_waiter.Wait(); |
1098 | 1068 |
1099 base::string16 expected_title(base::UTF8ToUTF16("status=200")); | 1069 base::string16 expected_title(base::UTF8ToUTF16("status=200")); |
1100 | 1070 |
1101 EXPECT_EQ(expected_title, contents->GetTitle()); | 1071 EXPECT_EQ(expected_title, contents->GetTitle()); |
1102 EXPECT_EQ(2, observer.auth_supplied_count()); | 1072 EXPECT_EQ(2, observer.auth_supplied_count()); |
1103 EXPECT_EQ(2, observer.auth_needed_count()); | 1073 EXPECT_EQ(2, observer.auth_needed_count()); |
1104 EXPECT_EQ(0, observer.auth_cancelled_count()); | 1074 EXPECT_EQ(0, observer.auth_cancelled_count()); |
1105 EXPECT_TRUE(test_server()->Stop()); | |
1106 } | 1075 } |
1107 | 1076 |
1108 // If an XMLHttpRequest is made without credentials, there should be a login | 1077 // If an XMLHttpRequest is made without credentials, there should be a login |
1109 // prompt. If it's cancelled, the script should get a 401 status. | 1078 // prompt. If it's cancelled, the script should get a 401 status. |
1110 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 1079 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
1111 LoginPromptForXHRWithoutCredentialsCancelled) { | 1080 LoginPromptForXHRWithoutCredentialsCancelled) { |
1112 const char* kXHRTestPage = "files/login/xhr_without_credentials.html"; | 1081 const char* kXHRTestPage = "/login/xhr_without_credentials.html"; |
1113 | 1082 |
1114 ASSERT_TRUE(test_server()->Start()); | 1083 ASSERT_TRUE(embedded_test_server()->Start()); |
1115 | 1084 |
1116 content::WebContents* contents = | 1085 content::WebContents* contents = |
1117 browser()->tab_strip_model()->GetActiveWebContents(); | 1086 browser()->tab_strip_model()->GetActiveWebContents(); |
1118 NavigationController* controller = &contents->GetController(); | 1087 NavigationController* controller = &contents->GetController(); |
1119 LoginPromptBrowserTestObserver observer; | 1088 LoginPromptBrowserTestObserver observer; |
1120 | 1089 |
1121 observer.Register(content::Source<NavigationController>(controller)); | 1090 observer.Register(content::Source<NavigationController>(controller)); |
1122 | 1091 |
1123 // Load a page which makes a synchronous XMLHttpRequest for an authenticated | 1092 // Load a page which makes a synchronous XMLHttpRequest for an authenticated |
1124 // resource with the wrong credentials. There should be no login prompt. | 1093 // resource with the wrong credentials. There should be no login prompt. |
1125 { | 1094 { |
1126 GURL test_page = test_server()->GetURL(kXHRTestPage); | 1095 GURL test_page = embedded_test_server()->GetURL(kXHRTestPage); |
1127 WindowedAuthNeededObserver auth_needed_waiter(controller); | 1096 WindowedAuthNeededObserver auth_needed_waiter(controller); |
1128 browser()->OpenURL(OpenURLParams( | 1097 browser()->OpenURL(OpenURLParams( |
1129 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, | 1098 test_page, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, |
1130 false)); | 1099 false)); |
1131 auth_needed_waiter.Wait(); | 1100 auth_needed_waiter.Wait(); |
1132 } | 1101 } |
1133 | 1102 |
1134 ASSERT_EQ(1u, observer.handlers().size()); | 1103 ASSERT_EQ(1u, observer.handlers().size()); |
1135 WindowedAuthCancelledObserver auth_cancelled_waiter(controller); | 1104 WindowedAuthCancelledObserver auth_cancelled_waiter(controller); |
1136 LoginHandler* handler = *observer.handlers().begin(); | 1105 LoginHandler* handler = *observer.handlers().begin(); |
1137 | 1106 |
1138 handler->CancelAuth(); | 1107 handler->CancelAuth(); |
1139 auth_cancelled_waiter.Wait(); | 1108 auth_cancelled_waiter.Wait(); |
1140 | 1109 |
1141 WindowedLoadStopObserver load_stop_waiter(controller, 1); | 1110 WindowedLoadStopObserver load_stop_waiter(controller, 1); |
1142 load_stop_waiter.Wait(); | 1111 load_stop_waiter.Wait(); |
1143 | 1112 |
1144 base::string16 expected_title(base::UTF8ToUTF16("status=401")); | 1113 base::string16 expected_title(base::UTF8ToUTF16("status=401")); |
1145 | 1114 |
1146 EXPECT_EQ(expected_title, contents->GetTitle()); | 1115 EXPECT_EQ(expected_title, contents->GetTitle()); |
1147 EXPECT_EQ(0, observer.auth_supplied_count()); | 1116 EXPECT_EQ(0, observer.auth_supplied_count()); |
1148 EXPECT_EQ(1, observer.auth_needed_count()); | 1117 EXPECT_EQ(1, observer.auth_needed_count()); |
1149 EXPECT_EQ(1, observer.auth_cancelled_count()); | 1118 EXPECT_EQ(1, observer.auth_cancelled_count()); |
1150 EXPECT_TRUE(test_server()->Stop()); | |
1151 } | 1119 } |
1152 | 1120 |
1153 // If a cross origin navigation triggers a login prompt, the destination URL | 1121 // If a cross origin navigation triggers a login prompt, the destination URL |
1154 // should be shown in the omnibox. | 1122 // should be shown in the omnibox. |
1155 void LoginPromptBrowserTest::TestCrossOriginPrompt( | 1123 void LoginPromptBrowserTest::TestCrossOriginPrompt( |
1156 const GURL& visit_url, | 1124 const GURL& visit_url, |
1157 const std::string& expected_hostname, | 1125 const std::string& expected_hostname, |
1158 bool cancel_prompt) const { | 1126 bool cancel_prompt) const { |
1159 content::WebContents* contents = | 1127 content::WebContents* contents = |
1160 browser()->tab_strip_model()->GetActiveWebContents(); | 1128 browser()->tab_strip_model()->GetActiveWebContents(); |
(...skipping 28 matching lines...) Expand all Loading... |
1189 | 1157 |
1190 EXPECT_EQ(expected_hostname, contents->GetVisibleURL().host()); | 1158 EXPECT_EQ(expected_hostname, contents->GetVisibleURL().host()); |
1191 EXPECT_FALSE(contents->ShowingInterstitialPage()); | 1159 EXPECT_FALSE(contents->ShowingInterstitialPage()); |
1192 } | 1160 } |
1193 } | 1161 } |
1194 | 1162 |
1195 // If a cross origin direct navigation triggers a login prompt, the login | 1163 // If a cross origin direct navigation triggers a login prompt, the login |
1196 // interstitial should be shown. | 1164 // interstitial should be shown. |
1197 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 1165 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
1198 ShowCorrectUrlForCrossOriginMainFrameRequests) { | 1166 ShowCorrectUrlForCrossOriginMainFrameRequests) { |
1199 ASSERT_TRUE(test_server()->Start()); | 1167 ASSERT_TRUE(embedded_test_server()->Start()); |
1200 | 1168 |
1201 GURL test_page = test_server()->GetURL(kAuthBasicPage); | 1169 GURL test_page = embedded_test_server()->GetURL(kAuthBasicPage); |
1202 ASSERT_EQ("127.0.0.1", test_page.host()); | 1170 ASSERT_EQ("127.0.0.1", test_page.host()); |
1203 std::string auth_host("127.0.0.1"); | 1171 std::string auth_host("127.0.0.1"); |
1204 TestCrossOriginPrompt(test_page, auth_host, true); | 1172 TestCrossOriginPrompt(test_page, auth_host, true); |
1205 } | 1173 } |
1206 | 1174 |
1207 // If a cross origin redirect triggers a login prompt, the destination URL | 1175 // If a cross origin redirect triggers a login prompt, the destination URL |
1208 // should be shown in the omnibox when the auth dialog is displayed. | 1176 // should be shown in the omnibox when the auth dialog is displayed. |
1209 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 1177 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
1210 ShowCorrectUrlForCrossOriginMainFrameRedirects) { | 1178 ShowCorrectUrlForCrossOriginMainFrameRedirects) { |
1211 host_resolver()->AddRule("www.a.com", "127.0.0.1"); | 1179 host_resolver()->AddRule("www.a.com", "127.0.0.1"); |
1212 ASSERT_TRUE(test_server()->Start()); | 1180 ASSERT_TRUE(embedded_test_server()->Start()); |
1213 | 1181 |
1214 const char* kTestPage = "files/login/cross_origin.html"; | 1182 const char* kTestPage = "/login/cross_origin.html"; |
1215 GURL test_page = test_server()->GetURL(kTestPage); | 1183 GURL test_page = embedded_test_server()->GetURL(kTestPage); |
1216 ASSERT_EQ("127.0.0.1", test_page.host()); | 1184 ASSERT_EQ("127.0.0.1", test_page.host()); |
1217 std::string auth_host("www.a.com"); | 1185 std::string auth_host("www.a.com"); |
1218 TestCrossOriginPrompt(test_page, auth_host, true); | 1186 TestCrossOriginPrompt(test_page, auth_host, true); |
1219 } | 1187 } |
1220 | 1188 |
1221 // Same as above, but instead of cancelling the prompt for www.a.com at the end, | 1189 // Same as above, but instead of cancelling the prompt for www.a.com at the end, |
1222 // the page redirects to another page (www.b.com) that triggers an auth dialog. | 1190 // the page redirects to another page (www.b.com) that triggers an auth dialog. |
1223 // This should cancel the login interstitial for the first page (www.a.com), | 1191 // This should cancel the login interstitial for the first page (www.a.com), |
1224 // create a blank interstitial for second page (www.b.com) and show its URL in | 1192 // create a blank interstitial for second page (www.b.com) and show its URL in |
1225 // the omnibox. | 1193 // the omnibox. |
1226 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 1194 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
1227 CancelLoginInterstitialOnRedirect) { | 1195 CancelLoginInterstitialOnRedirect) { |
1228 host_resolver()->AddRule("www.a.com", "127.0.0.1"); | 1196 host_resolver()->AddRule("www.a.com", "127.0.0.1"); |
1229 host_resolver()->AddRule("www.b.com", "127.0.0.1"); | 1197 host_resolver()->AddRule("www.b.com", "127.0.0.1"); |
1230 ASSERT_TRUE(test_server()->Start()); | 1198 ASSERT_TRUE(embedded_test_server()->Start()); |
1231 | 1199 |
1232 // The test page redirects to www.a.com which triggers an auth dialog. | 1200 // The test page redirects to www.a.com which triggers an auth dialog. |
1233 const char* kTestPage = "files/login/cross_origin.html"; | 1201 const char* kTestPage = "/login/cross_origin.html"; |
1234 GURL test_page = test_server()->GetURL(kTestPage); | 1202 GURL test_page = embedded_test_server()->GetURL(kTestPage); |
1235 ASSERT_EQ("127.0.0.1", test_page.host()); | 1203 ASSERT_EQ("127.0.0.1", test_page.host()); |
1236 | 1204 |
1237 // The page at b.com simply displays an auth dialog. | 1205 // The page at b.com simply displays an auth dialog. |
1238 GURL::Replacements replace_host2; | 1206 GURL::Replacements replace_host2; |
1239 replace_host2.SetHostStr("www.b.com"); | 1207 replace_host2.SetHostStr("www.b.com"); |
1240 GURL page2 = | 1208 GURL page2 = |
1241 test_server()->GetURL(kAuthBasicPage).ReplaceComponents(replace_host2); | 1209 embedded_test_server()->GetURL(kAuthBasicPage).ReplaceComponents( |
| 1210 replace_host2); |
1242 | 1211 |
1243 content::WebContents* contents = | 1212 content::WebContents* contents = |
1244 browser()->tab_strip_model()->GetActiveWebContents(); | 1213 browser()->tab_strip_model()->GetActiveWebContents(); |
1245 NavigationController* controller = &contents->GetController(); | 1214 NavigationController* controller = &contents->GetController(); |
1246 LoginPromptBrowserTestObserver observer; | 1215 LoginPromptBrowserTestObserver observer; |
1247 observer.Register(content::Source<NavigationController>(controller)); | 1216 observer.Register(content::Source<NavigationController>(controller)); |
1248 | 1217 |
1249 // Load the test page. It should end up on www.a.com with the auth dialog | 1218 // Load the test page. It should end up on www.a.com with the auth dialog |
1250 // open. | 1219 // open. |
1251 TestCrossOriginPrompt(test_page, "www.a.com", false); | 1220 TestCrossOriginPrompt(test_page, "www.a.com", false); |
(...skipping 29 matching lines...) Expand all Loading... |
1281 EXPECT_FALSE(contents->ShowingInterstitialPage()); | 1250 EXPECT_FALSE(contents->ShowingInterstitialPage()); |
1282 } | 1251 } |
1283 | 1252 |
1284 // Test the scenario where proceeding through a different type of interstitial | 1253 // Test the scenario where proceeding through a different type of interstitial |
1285 // that ends up with an auth URL works fine. This can happen if a URL that | 1254 // that ends up with an auth URL works fine. This can happen if a URL that |
1286 // triggers the auth dialog can also trigger an SSL interstitial (or any other | 1255 // triggers the auth dialog can also trigger an SSL interstitial (or any other |
1287 // type of interstitial). | 1256 // type of interstitial). |
1288 IN_PROC_BROWSER_TEST_F( | 1257 IN_PROC_BROWSER_TEST_F( |
1289 LoginPromptBrowserTest, | 1258 LoginPromptBrowserTest, |
1290 DISABLED_LoginInterstitialShouldReplaceExistingInterstitial) { | 1259 DISABLED_LoginInterstitialShouldReplaceExistingInterstitial) { |
1291 net::SpawnedTestServer https_server( | 1260 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
1292 net::SpawnedTestServer::TYPE_HTTPS, | 1261 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); |
1293 net::SpawnedTestServer::SSLOptions( | |
1294 net::SpawnedTestServer::SSLOptions::CERT_EXPIRED), | |
1295 base::FilePath()); | |
1296 ASSERT_TRUE(https_server.Start()); | 1262 ASSERT_TRUE(https_server.Start()); |
1297 | 1263 |
1298 content::WebContents* contents = | 1264 content::WebContents* contents = |
1299 browser()->tab_strip_model()->GetActiveWebContents(); | 1265 browser()->tab_strip_model()->GetActiveWebContents(); |
1300 NavigationController* controller = &contents->GetController(); | 1266 NavigationController* controller = &contents->GetController(); |
1301 LoginPromptBrowserTestObserver observer; | 1267 LoginPromptBrowserTestObserver observer; |
1302 | 1268 |
1303 observer.Register(content::Source<NavigationController>(controller)); | 1269 observer.Register(content::Source<NavigationController>(controller)); |
1304 | 1270 |
1305 // Load a page which triggers an SSL interstitial. Proceeding through it | 1271 // Load a page which triggers an SSL interstitial. Proceeding through it |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1355 // 3. Tab is again navigated to the same auth URL in (1). | 1321 // 3. Tab is again navigated to the same auth URL in (1). |
1356 // | 1322 // |
1357 // In this case, the last committed url is the same as the auth URL since the | 1323 // In this case, the last committed url is the same as the auth URL since the |
1358 // navigation at (1) is committed (user clicked cancel and the page loaded), but | 1324 // navigation at (1) is committed (user clicked cancel and the page loaded), but |
1359 // the navigation at (2) isn't (navigations ending up in interstitials don't | 1325 // the navigation at (2) isn't (navigations ending up in interstitials don't |
1360 // immediately commit). So just checking for cross origin navigation before | 1326 // immediately commit). So just checking for cross origin navigation before |
1361 // prompting the auth interstitial is not sufficient, must also check if there | 1327 // prompting the auth interstitial is not sufficient, must also check if there |
1362 // is any other interstitial being displayed. | 1328 // is any other interstitial being displayed. |
1363 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, | 1329 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, |
1364 ShouldReplaceExistingInterstitialWhenNavigated) { | 1330 ShouldReplaceExistingInterstitialWhenNavigated) { |
1365 ASSERT_TRUE(test_server()->Start()); | 1331 ASSERT_TRUE(embedded_test_server()->Start()); |
1366 net::SpawnedTestServer https_server( | 1332 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
1367 net::SpawnedTestServer::TYPE_HTTPS, | 1333 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED); |
1368 net::SpawnedTestServer::SSLOptions( | |
1369 net::SpawnedTestServer::SSLOptions::CERT_EXPIRED), | |
1370 base::FilePath()); | |
1371 ASSERT_TRUE(https_server.Start()); | 1334 ASSERT_TRUE(https_server.Start()); |
1372 | 1335 |
1373 content::WebContents* contents = | 1336 content::WebContents* contents = |
1374 browser()->tab_strip_model()->GetActiveWebContents(); | 1337 browser()->tab_strip_model()->GetActiveWebContents(); |
1375 NavigationController* controller = &contents->GetController(); | 1338 NavigationController* controller = &contents->GetController(); |
1376 LoginPromptBrowserTestObserver observer; | 1339 LoginPromptBrowserTestObserver observer; |
1377 | 1340 |
1378 observer.Register(content::Source<NavigationController>(controller)); | 1341 observer.Register(content::Source<NavigationController>(controller)); |
1379 | 1342 |
1380 GURL auth_url = test_server()->GetURL(kAuthBasicPage); | 1343 GURL auth_url = embedded_test_server()->GetURL(kAuthBasicPage); |
1381 GURL broken_ssl_page = https_server.GetURL("/"); | 1344 GURL broken_ssl_page = https_server.GetURL("/"); |
1382 | 1345 |
1383 // Navigate to an auth url and wait for the login prompt. | 1346 // Navigate to an auth url and wait for the login prompt. |
1384 { | 1347 { |
1385 WindowedAuthNeededObserver auth_needed_waiter(controller); | 1348 WindowedAuthNeededObserver auth_needed_waiter(controller); |
1386 browser()->OpenURL(OpenURLParams(auth_url, Referrer(), CURRENT_TAB, | 1349 browser()->OpenURL(OpenURLParams(auth_url, Referrer(), CURRENT_TAB, |
1387 ui::PAGE_TRANSITION_TYPED, false)); | 1350 ui::PAGE_TRANSITION_TYPED, false)); |
1388 ASSERT_EQ("127.0.0.1", contents->GetURL().host()); | 1351 ASSERT_EQ("127.0.0.1", contents->GetURL().host()); |
1389 ASSERT_TRUE(contents->GetURL().SchemeIs("http")); | 1352 ASSERT_TRUE(contents->GetURL().SchemeIs("http")); |
1390 auth_needed_waiter.Wait(); | 1353 auth_needed_waiter.Wait(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1437 ASSERT_EQ(1u, observer.handlers().size()); | 1400 ASSERT_EQ(1u, observer.handlers().size()); |
1438 content::WaitForInterstitialAttach(contents); | 1401 content::WaitForInterstitialAttach(contents); |
1439 EXPECT_EQ(LoginInterstitialDelegate::kTypeForTesting, | 1402 EXPECT_EQ(LoginInterstitialDelegate::kTypeForTesting, |
1440 contents->GetInterstitialPage() | 1403 contents->GetInterstitialPage() |
1441 ->GetDelegateForTesting() | 1404 ->GetDelegateForTesting() |
1442 ->GetTypeForTesting()); | 1405 ->GetTypeForTesting()); |
1443 } | 1406 } |
1444 } | 1407 } |
1445 | 1408 |
1446 } // namespace | 1409 } // namespace |
OLD | NEW |