OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/metrics/histogram_samples.h" | 8 #include "base/metrics/histogram_samples.h" |
9 #include "base/metrics/statistics_recorder.h" | 9 #include "base/metrics/statistics_recorder.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
11 #include "chrome/browser/chrome_notification_types.h" | 11 #include "chrome/browser/chrome_notification_types.h" |
12 #include "chrome/browser/infobars/infobar_service.h" | 12 #include "chrome/browser/infobars/infobar_service.h" |
| 13 #include "chrome/browser/password_manager/chrome_password_manager_client.h" |
13 #include "chrome/browser/password_manager/password_store_factory.h" | 14 #include "chrome/browser/password_manager/password_store_factory.h" |
14 #include "chrome/browser/password_manager/test_password_store_service.h" | 15 #include "chrome/browser/password_manager/test_password_store_service.h" |
15 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
| 17 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" |
16 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 18 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
17 #include "chrome/common/chrome_version_info.h" | 19 #include "chrome/common/chrome_version_info.h" |
18 #include "chrome/test/base/in_process_browser_test.h" | 20 #include "chrome/test/base/in_process_browser_test.h" |
19 #include "chrome/test/base/test_switches.h" | 21 #include "chrome/test/base/test_switches.h" |
20 #include "chrome/test/base/ui_test_utils.h" | 22 #include "chrome/test/base/ui_test_utils.h" |
21 #include "components/autofill/core/browser/autofill_test_utils.h" | 23 #include "components/autofill/core/browser/autofill_test_utils.h" |
22 #include "components/infobars/core/confirm_infobar_delegate.h" | 24 #include "components/infobars/core/confirm_infobar_delegate.h" |
23 #include "components/infobars/core/infobar.h" | 25 #include "components/infobars/core/infobar.h" |
24 #include "components/infobars/core/infobar_manager.h" | 26 #include "components/infobars/core/infobar_manager.h" |
25 #include "components/password_manager/core/browser/test_password_store.h" | 27 #include "components/password_manager/core/browser/test_password_store.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 | 152 |
151 protected: | 153 protected: |
152 content::WebContents* WebContents() { | 154 content::WebContents* WebContents() { |
153 return browser()->tab_strip_model()->GetActiveWebContents(); | 155 return browser()->tab_strip_model()->GetActiveWebContents(); |
154 } | 156 } |
155 | 157 |
156 content::RenderViewHost* RenderViewHost() { | 158 content::RenderViewHost* RenderViewHost() { |
157 return WebContents()->GetRenderViewHost(); | 159 return WebContents()->GetRenderViewHost(); |
158 } | 160 } |
159 | 161 |
| 162 ManagePasswordsUIController* controller() { |
| 163 return ManagePasswordsUIController::FromWebContents(WebContents()); |
| 164 } |
| 165 |
160 // Wrapper around ui_test_utils::NavigateToURL that waits until | 166 // Wrapper around ui_test_utils::NavigateToURL that waits until |
161 // DidFinishLoad() fires. Normally this function returns after | 167 // DidFinishLoad() fires. Normally this function returns after |
162 // DidStopLoading(), which caused flakiness as the NavigationObserver | 168 // DidStopLoading(), which caused flakiness as the NavigationObserver |
163 // would sometimes see the DidFinishLoad event from a previous navigation and | 169 // would sometimes see the DidFinishLoad event from a previous navigation and |
164 // return immediately. | 170 // return immediately. |
165 void NavigateToFile(const std::string& path) { | 171 void NavigateToFile(const std::string& path) { |
166 if (!embedded_test_server()->Started()) | 172 if (!embedded_test_server()->Started()) |
167 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 173 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
168 | 174 |
169 ASSERT_FALSE(CommandLine::ForCurrentProcess()->HasSwitch( | 175 ASSERT_FALSE(CommandLine::ForCurrentProcess()->HasSwitch( |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 | 266 |
261 // Fill a form and submit through a <input type="submit"> button. Nothing | 267 // Fill a form and submit through a <input type="submit"> button. Nothing |
262 // special. | 268 // special. |
263 NavigationObserver observer(WebContents()); | 269 NavigationObserver observer(WebContents()); |
264 std::string fill_and_submit = | 270 std::string fill_and_submit = |
265 "document.getElementById('username_field').value = 'temp';" | 271 "document.getElementById('username_field').value = 'temp';" |
266 "document.getElementById('password_field').value = 'random';" | 272 "document.getElementById('password_field').value = 'random';" |
267 "document.getElementById('input_submit_button').click()"; | 273 "document.getElementById('input_submit_button').click()"; |
268 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 274 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
269 observer.Wait(); | 275 observer.Wait(); |
270 EXPECT_TRUE(observer.infobar_shown()); | 276 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 277 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 278 } else { |
| 279 EXPECT_TRUE(observer.infobar_shown()); |
| 280 } |
271 } | 281 } |
272 | 282 |
273 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 283 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
274 PromptForSubmitWithInPageNavigation) { | 284 PromptForSubmitWithInPageNavigation) { |
275 NavigateToFile("/password/password_navigate_before_submit.html"); | 285 NavigateToFile("/password/password_navigate_before_submit.html"); |
276 | 286 |
277 // Fill a form and submit through a <input type="submit"> button. Nothing | 287 // Fill a form and submit through a <input type="submit"> button. Nothing |
278 // special. The form does an in-page navigation before submitting. | 288 // special. The form does an in-page navigation before submitting. |
279 NavigationObserver observer(WebContents()); | 289 NavigationObserver observer(WebContents()); |
280 std::string fill_and_submit = | 290 std::string fill_and_submit = |
281 "document.getElementById('username_field').value = 'temp';" | 291 "document.getElementById('username_field').value = 'temp';" |
282 "document.getElementById('password_field').value = 'random';" | 292 "document.getElementById('password_field').value = 'random';" |
283 "document.getElementById('input_submit_button').click()"; | 293 "document.getElementById('input_submit_button').click()"; |
284 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 294 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
285 observer.Wait(); | 295 observer.Wait(); |
286 EXPECT_TRUE(observer.infobar_shown()); | 296 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 297 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 298 } else { |
| 299 EXPECT_TRUE(observer.infobar_shown()); |
| 300 } |
287 } | 301 } |
288 | 302 |
289 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 303 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
290 LoginSuccessWithUnrelatedForm) { | 304 LoginSuccessWithUnrelatedForm) { |
291 // Log in, see a form on the landing page. That form is not related to the | 305 // Log in, see a form on the landing page. That form is not related to the |
292 // login form (=has a different action), so we should offer saving the | 306 // login form (=has a different action), so we should offer saving the |
293 // password. | 307 // password. |
294 NavigateToFile("/password/password_form.html"); | 308 NavigateToFile("/password/password_form.html"); |
295 | 309 |
296 NavigationObserver observer(WebContents()); | 310 NavigationObserver observer(WebContents()); |
297 std::string fill_and_submit = | 311 std::string fill_and_submit = |
298 "document.getElementById('username_unrelated').value = 'temp';" | 312 "document.getElementById('username_unrelated').value = 'temp';" |
299 "document.getElementById('password_unrelated').value = 'random';" | 313 "document.getElementById('password_unrelated').value = 'random';" |
300 "document.getElementById('submit_unrelated').click()"; | 314 "document.getElementById('submit_unrelated').click()"; |
301 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 315 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
302 observer.Wait(); | 316 observer.Wait(); |
303 EXPECT_TRUE(observer.infobar_shown()); | 317 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 318 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 319 } else { |
| 320 EXPECT_TRUE(observer.infobar_shown()); |
| 321 } |
304 } | 322 } |
305 | 323 |
306 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, LoginFailed) { | 324 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, LoginFailed) { |
307 // Log in, see a form on the landing page. That form is not related to the | 325 // Log in, see a form on the landing page. That form is not related to the |
308 // login form (=has a different action), so we should offer saving the | 326 // login form (=has a different action), so we should offer saving the |
309 // password. | 327 // password. |
310 NavigateToFile("/password/password_form.html"); | 328 NavigateToFile("/password/password_form.html"); |
311 | 329 |
312 NavigationObserver observer(WebContents()); | 330 NavigationObserver observer(WebContents()); |
313 std::string fill_and_submit = | 331 std::string fill_and_submit = |
314 "document.getElementById('username_failed').value = 'temp';" | 332 "document.getElementById('username_failed').value = 'temp';" |
315 "document.getElementById('password_failed').value = 'random';" | 333 "document.getElementById('password_failed').value = 'random';" |
316 "document.getElementById('submit_failed').click()"; | 334 "document.getElementById('submit_failed').click()"; |
317 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 335 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
318 observer.Wait(); | 336 observer.Wait(); |
319 EXPECT_FALSE(observer.infobar_shown()); | 337 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 338 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 339 } else { |
| 340 EXPECT_FALSE(observer.infobar_shown()); |
| 341 } |
320 } | 342 } |
321 | 343 |
322 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, Redirects) { | 344 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, Redirects) { |
323 NavigateToFile("/password/password_form.html"); | 345 NavigateToFile("/password/password_form.html"); |
324 | 346 |
325 // Fill a form and submit through a <input type="submit"> button. The form | 347 // Fill a form and submit through a <input type="submit"> button. The form |
326 // points to a redirection page. | 348 // points to a redirection page. |
327 NavigationObserver observer(WebContents()); | 349 NavigationObserver observer(WebContents()); |
328 std::string fill_and_submit = | 350 std::string fill_and_submit = |
329 "document.getElementById('username_redirect').value = 'temp';" | 351 "document.getElementById('username_redirect').value = 'temp';" |
330 "document.getElementById('password_redirect').value = 'random';" | 352 "document.getElementById('password_redirect').value = 'random';" |
331 "document.getElementById('submit_redirect').click()"; | 353 "document.getElementById('submit_redirect').click()"; |
332 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 354 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
333 observer.disable_should_automatically_accept_infobar(); | 355 observer.disable_should_automatically_accept_infobar(); |
334 observer.Wait(); | 356 observer.Wait(); |
335 EXPECT_TRUE(observer.infobar_shown()); | 357 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 358 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 359 } else { |
| 360 EXPECT_TRUE(observer.infobar_shown()); |
| 361 } |
336 | 362 |
337 // The redirection page now redirects via Javascript. We check that the | 363 // The redirection page now redirects via Javascript. We check that the |
338 // infobar stays. | 364 // infobar stays. |
339 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), | 365 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), |
340 "window.location.href = 'done.html';")); | 366 "window.location.href = 'done.html';")); |
341 observer.Wait(); | 367 observer.Wait(); |
342 EXPECT_FALSE(observer.infobar_removed()); | 368 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 369 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 370 } else { |
| 371 EXPECT_FALSE(observer.infobar_removed()); |
| 372 } |
343 } | 373 } |
344 | 374 |
345 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 375 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
346 PromptForSubmitUsingJavaScript) { | 376 PromptForSubmitUsingJavaScript) { |
347 NavigateToFile("/password/password_form.html"); | 377 NavigateToFile("/password/password_form.html"); |
348 | 378 |
349 // Fill a form and submit using <button> that calls submit() on the form. | 379 // Fill a form and submit using <button> that calls submit() on the form. |
350 // This should work regardless of the type of element, as long as submit() is | 380 // This should work regardless of the type of element, as long as submit() is |
351 // called. | 381 // called. |
352 NavigationObserver observer(WebContents()); | 382 NavigationObserver observer(WebContents()); |
353 std::string fill_and_submit = | 383 std::string fill_and_submit = |
354 "document.getElementById('username_field').value = 'temp';" | 384 "document.getElementById('username_field').value = 'temp';" |
355 "document.getElementById('password_field').value = 'random';" | 385 "document.getElementById('password_field').value = 'random';" |
356 "document.getElementById('submit_button').click()"; | 386 "document.getElementById('submit_button').click()"; |
357 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 387 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
358 observer.Wait(); | 388 observer.Wait(); |
359 EXPECT_TRUE(observer.infobar_shown()); | 389 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 390 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 391 } else { |
| 392 EXPECT_TRUE(observer.infobar_shown()); |
| 393 } |
360 } | 394 } |
361 | 395 |
362 // Flaky: crbug.com/301547, observed on win and mac. Probably happens on all | 396 // Flaky: crbug.com/301547, observed on win and mac. Probably happens on all |
363 // platforms. | 397 // platforms. |
364 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 398 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
365 DISABLED_PromptForDynamicForm) { | 399 DISABLED_PromptForDynamicForm) { |
366 NavigateToFile("/password/dynamic_password_form.html"); | 400 NavigateToFile("/password/dynamic_password_form.html"); |
367 | 401 |
368 // Fill the dynamic password form and submit. | 402 // Fill the dynamic password form and submit. |
369 NavigationObserver observer(WebContents()); | 403 NavigationObserver observer(WebContents()); |
370 std::string fill_and_submit = | 404 std::string fill_and_submit = |
371 "document.getElementById('create_form_button').click();" | 405 "document.getElementById('create_form_button').click();" |
372 "window.setTimeout(function() {" | 406 "window.setTimeout(function() {" |
373 " document.dynamic_form.username.value = 'tempro';" | 407 " document.dynamic_form.username.value = 'tempro';" |
374 " document.dynamic_form.password.value = 'random';" | 408 " document.dynamic_form.password.value = 'random';" |
375 " document.dynamic_form.submit();" | 409 " document.dynamic_form.submit();" |
376 "}, 0)"; | 410 "}, 0)"; |
377 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 411 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
378 observer.Wait(); | 412 observer.Wait(); |
379 EXPECT_TRUE(observer.infobar_shown()); | 413 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 414 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 415 } else { |
| 416 EXPECT_TRUE(observer.infobar_shown()); |
| 417 } |
380 } | 418 } |
381 | 419 |
382 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptForNavigation) { | 420 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptForNavigation) { |
383 NavigateToFile("/password/password_form.html"); | 421 NavigateToFile("/password/password_form.html"); |
384 | 422 |
385 // Don't fill the password form, just navigate away. Shouldn't prompt. | 423 // Don't fill the password form, just navigate away. Shouldn't prompt. |
386 NavigationObserver observer(WebContents()); | 424 NavigationObserver observer(WebContents()); |
387 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), | 425 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), |
388 "window.location.href = 'done.html';")); | 426 "window.location.href = 'done.html';")); |
389 observer.Wait(); | 427 observer.Wait(); |
390 EXPECT_FALSE(observer.infobar_shown()); | 428 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 429 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 430 } else { |
| 431 EXPECT_FALSE(observer.infobar_shown()); |
| 432 } |
391 } | 433 } |
392 | 434 |
393 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 435 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
394 NoPromptForSubFrameNavigation) { | 436 NoPromptForSubFrameNavigation) { |
395 NavigateToFile("/password/multi_frames.html"); | 437 NavigateToFile("/password/multi_frames.html"); |
396 | 438 |
397 // If you are filling out a password form in one frame and a different frame | 439 // If you are filling out a password form in one frame and a different frame |
398 // navigates, this should not trigger the infobar. | 440 // navigates, this should not trigger the infobar. |
399 NavigationObserver observer(WebContents()); | 441 NavigationObserver observer(WebContents()); |
400 observer.SetPathToWaitFor("/password/done.html"); | 442 observer.SetPathToWaitFor("/password/done.html"); |
401 std::string fill = | 443 std::string fill = |
402 "var first_frame = document.getElementById('first_frame');" | 444 "var first_frame = document.getElementById('first_frame');" |
403 "var frame_doc = first_frame.contentDocument;" | 445 "var frame_doc = first_frame.contentDocument;" |
404 "frame_doc.getElementById('username_field').value = 'temp';" | 446 "frame_doc.getElementById('username_field').value = 'temp';" |
405 "frame_doc.getElementById('password_field').value = 'random';"; | 447 "frame_doc.getElementById('password_field').value = 'random';"; |
406 std::string navigate_frame = | 448 std::string navigate_frame = |
407 "var second_iframe = document.getElementById('second_frame');" | 449 "var second_iframe = document.getElementById('second_frame');" |
408 "second_iframe.contentWindow.location.href = 'done.html';"; | 450 "second_iframe.contentWindow.location.href = 'done.html';"; |
409 | 451 |
410 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill)); | 452 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill)); |
411 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), navigate_frame)); | 453 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), navigate_frame)); |
412 observer.Wait(); | 454 observer.Wait(); |
413 EXPECT_FALSE(observer.infobar_shown()); | 455 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 456 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 457 } else { |
| 458 EXPECT_FALSE(observer.infobar_shown()); |
| 459 } |
414 } | 460 } |
415 | 461 |
416 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 462 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
417 PromptAfterSubmitWithSubFrameNavigation) { | 463 PromptAfterSubmitWithSubFrameNavigation) { |
418 NavigateToFile("/password/multi_frames.html"); | 464 NavigateToFile("/password/multi_frames.html"); |
419 | 465 |
420 // Make sure that we prompt to save password even if a sub-frame navigation | 466 // Make sure that we prompt to save password even if a sub-frame navigation |
421 // happens first. | 467 // happens first. |
422 NavigationObserver observer(WebContents()); | 468 NavigationObserver observer(WebContents()); |
423 observer.SetPathToWaitFor("/password/done.html"); | 469 observer.SetPathToWaitFor("/password/done.html"); |
424 std::string navigate_frame = | 470 std::string navigate_frame = |
425 "var second_iframe = document.getElementById('second_frame');" | 471 "var second_iframe = document.getElementById('second_frame');" |
426 "second_iframe.contentWindow.location.href = 'other.html';"; | 472 "second_iframe.contentWindow.location.href = 'other.html';"; |
427 std::string fill_and_submit = | 473 std::string fill_and_submit = |
428 "var first_frame = document.getElementById('first_frame');" | 474 "var first_frame = document.getElementById('first_frame');" |
429 "var frame_doc = first_frame.contentDocument;" | 475 "var frame_doc = first_frame.contentDocument;" |
430 "frame_doc.getElementById('username_field').value = 'temp';" | 476 "frame_doc.getElementById('username_field').value = 'temp';" |
431 "frame_doc.getElementById('password_field').value = 'random';" | 477 "frame_doc.getElementById('password_field').value = 'random';" |
432 "frame_doc.getElementById('input_submit_button').click();"; | 478 "frame_doc.getElementById('input_submit_button').click();"; |
433 | 479 |
434 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), navigate_frame)); | 480 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), navigate_frame)); |
435 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 481 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
436 observer.Wait(); | 482 observer.Wait(); |
437 EXPECT_TRUE(observer.infobar_shown()); | 483 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 484 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 485 } else { |
| 486 EXPECT_TRUE(observer.infobar_shown()); |
| 487 } |
438 } | 488 } |
439 | 489 |
440 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 490 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
441 PromptForXHRSubmit) { | 491 PromptForXHRSubmit) { |
442 #if defined(OS_WIN) && defined(USE_ASH) | 492 #if defined(OS_WIN) && defined(USE_ASH) |
443 // Disable this test in Metro+Ash for now (http://crbug.com/262796). | 493 // Disable this test in Metro+Ash for now (http://crbug.com/262796). |
444 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) | 494 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
445 return; | 495 return; |
446 #endif | 496 #endif |
447 NavigateToFile("/password/password_xhr_submit.html"); | 497 NavigateToFile("/password/password_xhr_submit.html"); |
448 | 498 |
449 // Verify that we show the save password prompt if a form returns false | 499 // Verify that we show the save password prompt if a form returns false |
450 // in its onsubmit handler but instead logs in/navigates via XHR. | 500 // in its onsubmit handler but instead logs in/navigates via XHR. |
451 // Note that calling 'submit()' on a form with javascript doesn't call | 501 // Note that calling 'submit()' on a form with javascript doesn't call |
452 // the onsubmit handler, so we click the submit button instead. | 502 // the onsubmit handler, so we click the submit button instead. |
453 NavigationObserver observer(WebContents()); | 503 NavigationObserver observer(WebContents()); |
454 std::string fill_and_submit = | 504 std::string fill_and_submit = |
455 "document.getElementById('username_field').value = 'temp';" | 505 "document.getElementById('username_field').value = 'temp';" |
456 "document.getElementById('password_field').value = 'random';" | 506 "document.getElementById('password_field').value = 'random';" |
457 "document.getElementById('submit_button').click()"; | 507 "document.getElementById('submit_button').click()"; |
458 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 508 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
459 observer.Wait(); | 509 observer.Wait(); |
460 EXPECT_TRUE(observer.infobar_shown()); | 510 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 511 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 512 } else { |
| 513 EXPECT_TRUE(observer.infobar_shown()); |
| 514 } |
461 } | 515 } |
462 | 516 |
463 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 517 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
464 PromptForXHRWithoutOnSubmit) { | 518 PromptForXHRWithoutOnSubmit) { |
465 NavigateToFile("/password/password_xhr_submit.html"); | 519 NavigateToFile("/password/password_xhr_submit.html"); |
466 | 520 |
467 // Verify that if XHR navigation occurs and the form is properly filled out, | 521 // Verify that if XHR navigation occurs and the form is properly filled out, |
468 // we try and save the password even though onsubmit hasn't been called. | 522 // we try and save the password even though onsubmit hasn't been called. |
469 NavigationObserver observer(WebContents()); | 523 NavigationObserver observer(WebContents()); |
470 std::string fill_and_navigate = | 524 std::string fill_and_navigate = |
471 "document.getElementById('username_field').value = 'temp';" | 525 "document.getElementById('username_field').value = 'temp';" |
472 "document.getElementById('password_field').value = 'random';" | 526 "document.getElementById('password_field').value = 'random';" |
473 "send_xhr()"; | 527 "send_xhr()"; |
474 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_navigate)); | 528 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_navigate)); |
475 observer.Wait(); | 529 observer.Wait(); |
476 EXPECT_TRUE(observer.infobar_shown()); | 530 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 531 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 532 } else { |
| 533 EXPECT_TRUE(observer.infobar_shown()); |
| 534 } |
477 } | 535 } |
478 | 536 |
479 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 537 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
480 NoPromptIfLinkClicked) { | 538 NoPromptIfLinkClicked) { |
481 NavigateToFile("/password/password_form.html"); | 539 NavigateToFile("/password/password_form.html"); |
482 | 540 |
483 // Verify that if the user takes a direct action to leave the page, we don't | 541 // Verify that if the user takes a direct action to leave the page, we don't |
484 // prompt to save the password even if the form is already filled out. | 542 // prompt to save the password even if the form is already filled out. |
485 NavigationObserver observer(WebContents()); | 543 NavigationObserver observer(WebContents()); |
486 std::string fill_and_click_link = | 544 std::string fill_and_click_link = |
487 "document.getElementById('username_field').value = 'temp';" | 545 "document.getElementById('username_field').value = 'temp';" |
488 "document.getElementById('password_field').value = 'random';" | 546 "document.getElementById('password_field').value = 'random';" |
489 "document.getElementById('link').click();"; | 547 "document.getElementById('link').click();"; |
490 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_click_link)); | 548 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_click_link)); |
491 observer.Wait(); | 549 observer.Wait(); |
492 EXPECT_FALSE(observer.infobar_shown()); | 550 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 551 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 552 } else { |
| 553 EXPECT_FALSE(observer.infobar_shown()); |
| 554 } |
493 } | 555 } |
494 | 556 |
495 // TODO(jam): http://crbug.com/350550 | 557 // TODO(jam): http://crbug.com/350550 |
496 #if !defined(OS_WIN) | 558 #if !defined(OS_WIN) |
497 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 559 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
498 VerifyPasswordGenerationUpload) { | 560 VerifyPasswordGenerationUpload) { |
499 // Prevent Autofill requests from actually going over the wire. | 561 // Prevent Autofill requests from actually going over the wire. |
500 net::TestURLFetcherFactory factory; | 562 net::TestURLFetcherFactory factory; |
501 // Disable Autofill requesting access to AddressBook data. This causes | 563 // Disable Autofill requesting access to AddressBook data. This causes |
502 // the test to hang on Mac. | 564 // the test to hang on Mac. |
503 autofill::test::DisableSystemServices(browser()->profile()->GetPrefs()); | 565 autofill::test::DisableSystemServices(browser()->profile()->GetPrefs()); |
504 | 566 |
505 // Visit a signup form. | 567 // Visit a signup form. |
506 NavigateToFile("/password/signup_form.html"); | 568 NavigateToFile("/password/signup_form.html"); |
507 | 569 |
508 // Enter a password and save it. | 570 // Enter a password and save it. |
509 NavigationObserver first_observer(WebContents()); | 571 NavigationObserver first_observer(WebContents()); |
510 std::string fill_and_submit = | 572 std::string fill_and_submit = |
511 "document.getElementById('other_info').value = 'stuff';" | 573 "document.getElementById('other_info').value = 'stuff';" |
512 "document.getElementById('username_field').value = 'my_username';" | 574 "document.getElementById('username_field').value = 'my_username';" |
513 "document.getElementById('password_field').value = 'password';" | 575 "document.getElementById('password_field').value = 'password';" |
514 "document.getElementById('input_submit_button').click()"; | 576 "document.getElementById('input_submit_button').click()"; |
515 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 577 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
516 | 578 |
517 first_observer.Wait(); | 579 first_observer.Wait(); |
518 ASSERT_TRUE(first_observer.infobar_shown()); | 580 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 581 ASSERT_TRUE(controller()->PasswordPendingUserDecision()); |
| 582 controller()->SavePassword(); |
| 583 } else { |
| 584 ASSERT_TRUE(first_observer.infobar_shown()); |
| 585 } |
519 | 586 |
520 // Now navigate to a login form that has similar HTML markup. | 587 // Now navigate to a login form that has similar HTML markup. |
521 NavigateToFile("/password/password_form.html"); | 588 NavigateToFile("/password/password_form.html"); |
522 | 589 |
523 // Simulate a user click to force an autofill of the form's DOM value, not | 590 // Simulate a user click to force an autofill of the form's DOM value, not |
524 // just the suggested value. | 591 // just the suggested value. |
525 content::SimulateMouseClick( | 592 content::SimulateMouseClick( |
526 WebContents(), 0, blink::WebMouseEvent::ButtonLeft); | 593 WebContents(), 0, blink::WebMouseEvent::ButtonLeft); |
527 | 594 |
528 // The form should be filled with the previously submitted username. | 595 // The form should be filled with the previously submitted username. |
529 std::string get_username = | 596 std::string get_username = |
530 "window.domAutomationController.send(" | 597 "window.domAutomationController.send(" |
531 "document.getElementById('username_field').value);"; | 598 "document.getElementById('username_field').value);"; |
532 std::string actual_username; | 599 std::string actual_username; |
533 ASSERT_TRUE(content::ExecuteScriptAndExtractString(RenderViewHost(), | 600 ASSERT_TRUE(content::ExecuteScriptAndExtractString(RenderViewHost(), |
534 get_username, | 601 get_username, |
535 &actual_username)); | 602 &actual_username)); |
536 ASSERT_EQ("my_username", actual_username); | 603 ASSERT_EQ("my_username", actual_username); |
537 | 604 |
538 // Submit the form and verify that there is no infobar (as the password | 605 // Submit the form and verify that there is no infobar (as the password |
539 // has already been saved). | 606 // has already been saved). |
540 NavigationObserver second_observer(WebContents()); | 607 NavigationObserver second_observer(WebContents()); |
541 std::string submit_form = | 608 std::string submit_form = |
542 "document.getElementById('input_submit_button').click()"; | 609 "document.getElementById('input_submit_button').click()"; |
543 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), submit_form)); | 610 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), submit_form)); |
544 second_observer.Wait(); | 611 second_observer.Wait(); |
545 EXPECT_FALSE(second_observer.infobar_shown()); | 612 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 613 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 614 } else { |
| 615 EXPECT_FALSE(second_observer.infobar_shown()); |
| 616 } |
546 | 617 |
547 // Verify that we sent a ping to Autofill saying that the original form | 618 // Verify that we sent a ping to Autofill saying that the original form |
548 // was likely an account creation form since it has more than 2 text input | 619 // was likely an account creation form since it has more than 2 text input |
549 // fields and was used for the first time on a different form. | 620 // fields and was used for the first time on a different form. |
550 base::HistogramBase* upload_histogram = | 621 base::HistogramBase* upload_histogram = |
551 base::StatisticsRecorder::FindHistogram( | 622 base::StatisticsRecorder::FindHistogram( |
552 "PasswordGeneration.UploadStarted"); | 623 "PasswordGeneration.UploadStarted"); |
553 ASSERT_TRUE(upload_histogram); | 624 ASSERT_TRUE(upload_histogram); |
554 scoped_ptr<base::HistogramSamples> snapshot = | 625 scoped_ptr<base::HistogramSamples> snapshot = |
555 upload_histogram->SnapshotSamples(); | 626 upload_histogram->SnapshotSamples(); |
(...skipping 11 matching lines...) Expand all Loading... |
567 NavigationObserver observer(WebContents()); | 638 NavigationObserver observer(WebContents()); |
568 std::string fill_and_submit = | 639 std::string fill_and_submit = |
569 "var iframe = document.getElementById('test_iframe');" | 640 "var iframe = document.getElementById('test_iframe');" |
570 "var iframe_doc = iframe.contentDocument;" | 641 "var iframe_doc = iframe.contentDocument;" |
571 "iframe_doc.getElementById('username_field').value = 'temp';" | 642 "iframe_doc.getElementById('username_field').value = 'temp';" |
572 "iframe_doc.getElementById('password_field').value = 'random';" | 643 "iframe_doc.getElementById('password_field').value = 'random';" |
573 "iframe_doc.getElementById('submit_button').click()"; | 644 "iframe_doc.getElementById('submit_button').click()"; |
574 | 645 |
575 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 646 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
576 observer.Wait(); | 647 observer.Wait(); |
577 EXPECT_TRUE(observer.infobar_shown()); | 648 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 649 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 650 } else { |
| 651 EXPECT_TRUE(observer.infobar_shown()); |
| 652 } |
578 } | 653 } |
579 | 654 |
580 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 655 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
581 PromptForInputElementWithoutName) { | 656 PromptForInputElementWithoutName) { |
582 // Check that the prompt is shown for forms where input elements lack the | 657 // Check that the prompt is shown for forms where input elements lack the |
583 // "name" attribute but the "id" is present. | 658 // "name" attribute but the "id" is present. |
584 NavigateToFile("/password/password_form.html"); | 659 NavigateToFile("/password/password_form.html"); |
585 | 660 |
586 NavigationObserver observer(WebContents()); | 661 NavigationObserver observer(WebContents()); |
587 std::string fill_and_submit = | 662 std::string fill_and_submit = |
588 "document.getElementById('username_field_no_name').value = 'temp';" | 663 "document.getElementById('username_field_no_name').value = 'temp';" |
589 "document.getElementById('password_field_no_name').value = 'random';" | 664 "document.getElementById('password_field_no_name').value = 'random';" |
590 "document.getElementById('input_submit_button_no_name').click()"; | 665 "document.getElementById('input_submit_button_no_name').click()"; |
591 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 666 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
592 observer.Wait(); | 667 observer.Wait(); |
593 EXPECT_TRUE(observer.infobar_shown()); | 668 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 669 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 670 } else { |
| 671 EXPECT_TRUE(observer.infobar_shown()); |
| 672 } |
594 } | 673 } |
595 | 674 |
596 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 675 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
597 PromptForInputElementWithoutId) { | 676 PromptForInputElementWithoutId) { |
598 // Check that the prompt is shown for forms where input elements lack the | 677 // Check that the prompt is shown for forms where input elements lack the |
599 // "id" attribute but the "name" attribute is present. | 678 // "id" attribute but the "name" attribute is present. |
600 NavigateToFile("/password/password_form.html"); | 679 NavigateToFile("/password/password_form.html"); |
601 | 680 |
602 NavigationObserver observer(WebContents()); | 681 NavigationObserver observer(WebContents()); |
603 std::string fill_and_submit = | 682 std::string fill_and_submit = |
604 "document.getElementsByName('username_field_no_id')[0].value = 'temp';" | 683 "document.getElementsByName('username_field_no_id')[0].value = 'temp';" |
605 "document.getElementsByName('password_field_no_id')[0].value = 'random';" | 684 "document.getElementsByName('password_field_no_id')[0].value = 'random';" |
606 "document.getElementsByName('input_submit_button_no_id')[0].click()"; | 685 "document.getElementsByName('input_submit_button_no_id')[0].click()"; |
607 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 686 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
608 observer.Wait(); | 687 observer.Wait(); |
609 EXPECT_TRUE(observer.infobar_shown()); | 688 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 689 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 690 } else { |
| 691 EXPECT_TRUE(observer.infobar_shown()); |
| 692 } |
610 } | 693 } |
611 | 694 |
612 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 695 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
613 NoPromptForInputElementWithoutIdAndName) { | 696 NoPromptForInputElementWithoutIdAndName) { |
614 // Check that no prompt is shown for forms where the input fields lack both | 697 // Check that no prompt is shown for forms where the input fields lack both |
615 // the "id" and the "name" attributes. | 698 // the "id" and the "name" attributes. |
616 NavigateToFile("/password/password_form.html"); | 699 NavigateToFile("/password/password_form.html"); |
617 | 700 |
618 NavigationObserver observer(WebContents()); | 701 NavigationObserver observer(WebContents()); |
619 std::string fill_and_submit = | 702 std::string fill_and_submit = |
620 "var form = document.getElementById('testform_elements_no_id_no_name');" | 703 "var form = document.getElementById('testform_elements_no_id_no_name');" |
621 "var username = form.children[0];" | 704 "var username = form.children[0];" |
622 "username.value = 'temp';" | 705 "username.value = 'temp';" |
623 "var password = form.children[1];" | 706 "var password = form.children[1];" |
624 "password.value = 'random';" | 707 "password.value = 'random';" |
625 "form.children[2].click()"; // form.children[2] is the submit button. | 708 "form.children[2].click()"; // form.children[2] is the submit button. |
626 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 709 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
627 observer.Wait(); | 710 observer.Wait(); |
628 EXPECT_FALSE(observer.infobar_shown()); | 711 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 712 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 713 } else { |
| 714 EXPECT_FALSE(observer.infobar_shown()); |
| 715 } |
629 } | 716 } |
630 | 717 |
631 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, DeleteFrameBeforeSubmit) { | 718 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, DeleteFrameBeforeSubmit) { |
632 NavigateToFile("/password/multi_frames.html"); | 719 NavigateToFile("/password/multi_frames.html"); |
633 | 720 |
634 NavigationObserver observer(WebContents()); | 721 NavigationObserver observer(WebContents()); |
635 // Make sure we save some password info from an iframe and then destroy it. | 722 // Make sure we save some password info from an iframe and then destroy it. |
636 std::string save_and_remove = | 723 std::string save_and_remove = |
637 "var first_frame = document.getElementById('first_frame');" | 724 "var first_frame = document.getElementById('first_frame');" |
638 "var frame_doc = first_frame.contentDocument;" | 725 "var frame_doc = first_frame.contentDocument;" |
(...skipping 27 matching lines...) Expand all Loading... |
666 browser()->tab_strip_model()->ActivateTabAt(0, false); | 753 browser()->tab_strip_model()->ActivateTabAt(0, false); |
667 | 754 |
668 // Fill in the credentials, and make sure they are saved. | 755 // Fill in the credentials, and make sure they are saved. |
669 NavigationObserver form_submit_observer(WebContents()); | 756 NavigationObserver form_submit_observer(WebContents()); |
670 std::string fill_and_submit = | 757 std::string fill_and_submit = |
671 "document.getElementById('username_field').value = 'temp';" | 758 "document.getElementById('username_field').value = 'temp';" |
672 "document.getElementById('password_field').value = 'random';" | 759 "document.getElementById('password_field').value = 'random';" |
673 "document.getElementById('input_submit_button').click();"; | 760 "document.getElementById('input_submit_button').click();"; |
674 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 761 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
675 form_submit_observer.Wait(); | 762 form_submit_observer.Wait(); |
676 EXPECT_TRUE(form_submit_observer.infobar_shown()); | 763 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 764 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 765 controller()->SavePassword(); |
| 766 } else { |
| 767 EXPECT_TRUE(form_submit_observer.infobar_shown()); |
| 768 } |
677 | 769 |
678 // Reload the original page to have the saved credentials autofilled. | 770 // Reload the original page to have the saved credentials autofilled. |
679 NavigationObserver reload_observer(WebContents()); | 771 NavigationObserver reload_observer(WebContents()); |
680 NavigateToFile("/password/form_and_link.html"); | 772 NavigateToFile("/password/form_and_link.html"); |
681 reload_observer.Wait(); | 773 reload_observer.Wait(); |
682 | 774 |
683 // Wait until the username is filled, to make sure autofill kicked in. | 775 // Wait until the username is filled, to make sure autofill kicked in. |
684 WaitForElementValue("username_field", "temp"); | 776 WaitForElementValue("username_field", "temp"); |
685 // Now check that the password is not accessible yet. | 777 // Now check that the password is not accessible yet. |
686 CheckElementValue("password_field", ""); | 778 CheckElementValue("password_field", ""); |
(...skipping 17 matching lines...) Expand all Loading... |
704 NavigateToFile("/password/form_and_link.html"); | 796 NavigateToFile("/password/form_and_link.html"); |
705 | 797 |
706 // Fill in the credentials, and make sure they are saved. | 798 // Fill in the credentials, and make sure they are saved. |
707 NavigationObserver form_submit_observer(WebContents()); | 799 NavigationObserver form_submit_observer(WebContents()); |
708 std::string fill_and_submit = | 800 std::string fill_and_submit = |
709 "document.getElementById('username_field').value = 'temp';" | 801 "document.getElementById('username_field').value = 'temp';" |
710 "document.getElementById('password_field').value = 'random_secret';" | 802 "document.getElementById('password_field').value = 'random_secret';" |
711 "document.getElementById('input_submit_button').click();"; | 803 "document.getElementById('input_submit_button').click();"; |
712 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 804 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
713 form_submit_observer.Wait(); | 805 form_submit_observer.Wait(); |
714 EXPECT_TRUE(form_submit_observer.infobar_shown()); | 806 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 807 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 808 controller()->SavePassword(); |
| 809 } else { |
| 810 EXPECT_TRUE(form_submit_observer.infobar_shown()); |
| 811 } |
715 | 812 |
716 // Reload the original page to have the saved credentials autofilled. | 813 // Reload the original page to have the saved credentials autofilled. |
717 NavigationObserver reload_observer(WebContents()); | 814 NavigationObserver reload_observer(WebContents()); |
718 NavigateToFile("/password/form_and_link.html"); | 815 NavigateToFile("/password/form_and_link.html"); |
719 reload_observer.Wait(); | 816 reload_observer.Wait(); |
720 | 817 |
721 NavigationObserver submit_observer(WebContents()); | 818 NavigationObserver submit_observer(WebContents()); |
722 // Submit the form via a tap on the submit button. The button is placed at 0, | 819 // Submit the form via a tap on the submit button. The button is placed at 0, |
723 // 100, and has height 300 and width 700. | 820 // 100, and has height 300 and width 700. |
724 content::SimulateTapAt(WebContents(), gfx::Point(350, 250)); | 821 content::SimulateTapAt(WebContents(), gfx::Point(350, 250)); |
725 submit_observer.Wait(); | 822 submit_observer.Wait(); |
726 std::string query = WebContents()->GetURL().query(); | 823 std::string query = WebContents()->GetURL().query(); |
727 EXPECT_NE(std::string::npos, query.find("random_secret")) << query; | 824 EXPECT_NE(std::string::npos, query.find("random_secret")) << query; |
728 } | 825 } |
729 #endif | 826 #endif |
730 | 827 |
731 // Test fix for crbug.com/338650. | 828 // Test fix for crbug.com/338650. |
732 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 829 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
733 DontPromptForPasswordFormWithDefaultValue) { | 830 DontPromptForPasswordFormWithDefaultValue) { |
734 NavigateToFile("/password/password_form_with_default_value.html"); | 831 NavigateToFile("/password/password_form_with_default_value.html"); |
735 | 832 |
736 // Don't prompt if we navigate away even if there is a password value since | 833 // Don't prompt if we navigate away even if there is a password value since |
737 // it's not coming from the user. | 834 // it's not coming from the user. |
738 NavigationObserver observer(WebContents()); | 835 NavigationObserver observer(WebContents()); |
739 NavigateToFile("/password/done.html"); | 836 NavigateToFile("/password/done.html"); |
740 observer.Wait(); | 837 observer.Wait(); |
741 EXPECT_FALSE(observer.infobar_shown()); | 838 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 839 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 840 } else { |
| 841 EXPECT_FALSE(observer.infobar_shown()); |
| 842 } |
742 } | 843 } |
743 | 844 |
744 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 845 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
745 PromptWhenEnableAutomaticPasswordSavingSwitchIsNotSet) { | 846 PromptWhenEnableAutomaticPasswordSavingSwitchIsNotSet) { |
746 NavigateToFile("/password/password_form.html"); | 847 NavigateToFile("/password/password_form.html"); |
747 | 848 |
748 // Fill a form and submit through a <input type="submit"> button. | 849 // Fill a form and submit through a <input type="submit"> button. |
749 NavigationObserver observer(WebContents()); | 850 NavigationObserver observer(WebContents()); |
750 std::string fill_and_submit = | 851 std::string fill_and_submit = |
751 "document.getElementById('username_field').value = 'temp';" | 852 "document.getElementById('username_field').value = 'temp';" |
752 "document.getElementById('password_field').value = 'random';" | 853 "document.getElementById('password_field').value = 'random';" |
753 "document.getElementById('input_submit_button').click()"; | 854 "document.getElementById('input_submit_button').click()"; |
754 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 855 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
755 observer.Wait(); | 856 observer.Wait(); |
756 EXPECT_TRUE(observer.infobar_shown()); | 857 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 858 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 859 } else { |
| 860 EXPECT_TRUE(observer.infobar_shown()); |
| 861 } |
757 } | 862 } |
758 | 863 |
759 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, | 864 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, |
760 DontPromptWhenEnableAutomaticPasswordSavingSwitchIsSet) { | 865 DontPromptWhenEnableAutomaticPasswordSavingSwitchIsSet) { |
761 password_manager::TestPasswordStore* password_store = | 866 password_manager::TestPasswordStore* password_store = |
762 static_cast<password_manager::TestPasswordStore*>( | 867 static_cast<password_manager::TestPasswordStore*>( |
763 PasswordStoreFactory::GetForProfile(browser()->profile(), | 868 PasswordStoreFactory::GetForProfile(browser()->profile(), |
764 Profile::IMPLICIT_ACCESS).get()); | 869 Profile::IMPLICIT_ACCESS).get()); |
765 | 870 |
766 EXPECT_TRUE(password_store->IsEmpty()); | 871 EXPECT_TRUE(password_store->IsEmpty()); |
767 | 872 |
768 NavigateToFile("/password/password_form.html"); | 873 NavigateToFile("/password/password_form.html"); |
769 | 874 |
770 // Add the enable-automatic-password-saving switch. | 875 // Add the enable-automatic-password-saving switch. |
771 CommandLine::ForCurrentProcess()->AppendSwitch( | 876 CommandLine::ForCurrentProcess()->AppendSwitch( |
772 password_manager::switches::kEnableAutomaticPasswordSaving); | 877 password_manager::switches::kEnableAutomaticPasswordSaving); |
773 | 878 |
774 // Fill a form and submit through a <input type="submit"> button. | 879 // Fill a form and submit through a <input type="submit"> button. |
775 NavigationObserver observer(WebContents()); | 880 NavigationObserver observer(WebContents()); |
776 // Make sure that the only passwords saved are the auto-saved ones. | 881 // Make sure that the only passwords saved are the auto-saved ones. |
777 observer.disable_should_automatically_accept_infobar(); | 882 observer.disable_should_automatically_accept_infobar(); |
778 std::string fill_and_submit = | 883 std::string fill_and_submit = |
779 "document.getElementById('username_field').value = 'temp';" | 884 "document.getElementById('username_field').value = 'temp';" |
780 "document.getElementById('password_field').value = 'random';" | 885 "document.getElementById('password_field').value = 'random';" |
781 "document.getElementById('input_submit_button').click()"; | 886 "document.getElementById('input_submit_button').click()"; |
782 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); | 887 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); |
783 observer.Wait(); | 888 observer.Wait(); |
784 if (chrome::VersionInfo::GetChannel() == | 889 if (chrome::VersionInfo::GetChannel() == |
785 chrome::VersionInfo::CHANNEL_UNKNOWN) { | 890 chrome::VersionInfo::CHANNEL_UNKNOWN) { |
786 EXPECT_FALSE(observer.infobar_shown()); | 891 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 892 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 893 } else { |
| 894 EXPECT_FALSE(observer.infobar_shown()); |
| 895 } |
787 EXPECT_FALSE(password_store->IsEmpty()); | 896 EXPECT_FALSE(password_store->IsEmpty()); |
788 } else { | 897 } else { |
789 EXPECT_TRUE(observer.infobar_shown()); | 898 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 899 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 900 } else { |
| 901 EXPECT_TRUE(observer.infobar_shown()); |
| 902 } |
790 EXPECT_TRUE(password_store->IsEmpty()); | 903 EXPECT_TRUE(password_store->IsEmpty()); |
791 } | 904 } |
792 } | 905 } |
793 | 906 |
794 // Test fix for crbug.com/368690. | 907 // Test fix for crbug.com/368690. |
795 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptWhenReloading) { | 908 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptWhenReloading) { |
796 NavigateToFile("/password/password_form.html"); | 909 NavigateToFile("/password/password_form.html"); |
797 | 910 |
798 std::string fill = | 911 std::string fill = |
799 "document.getElementById('username_redirect').value = 'temp';" | 912 "document.getElementById('username_redirect').value = 'temp';" |
800 "document.getElementById('password_redirect').value = 'random';"; | 913 "document.getElementById('password_redirect').value = 'random';"; |
801 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill)); | 914 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill)); |
802 | 915 |
803 NavigationObserver observer(WebContents()); | 916 NavigationObserver observer(WebContents()); |
804 GURL url = embedded_test_server()->GetURL("/password/password_form.html"); | 917 GURL url = embedded_test_server()->GetURL("/password/password_form.html"); |
805 chrome::NavigateParams params(browser(), url, | 918 chrome::NavigateParams params(browser(), url, |
806 content::PAGE_TRANSITION_RELOAD); | 919 content::PAGE_TRANSITION_RELOAD); |
807 ui_test_utils::NavigateToURL(¶ms); | 920 ui_test_utils::NavigateToURL(¶ms); |
808 observer.Wait(); | 921 observer.Wait(); |
809 EXPECT_FALSE(observer.infobar_shown()); | 922 if (ChromePasswordManagerClient::IsTheHotNewBubbleUIEnabled()) { |
| 923 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 924 } else { |
| 925 EXPECT_FALSE(observer.infobar_shown()); |
| 926 } |
810 } | 927 } |
OLD | NEW |