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

Side by Side Diff: chrome/browser/password_manager/credential_manager_browsertest.cc

Issue 2915763003: [Password Manager] Show omnibox icon and anchored prompt once user start typing password (Closed)
Patch Set: Introduced |has_generated_password| argument Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/macros.h" 5 #include "base/macros.h"
6 #include "base/stl_util.h" 6 #include "base/stl_util.h"
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/password_manager/chrome_password_manager_client.h" 9 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
10 #include "chrome/browser/password_manager/password_manager_test_base.h" 10 #include "chrome/browser/password_manager/password_manager_test_base.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 // 151 //
152 // The CredentialManager Mojo interface is Channel-associated, so message 152 // The CredentialManager Mojo interface is Channel-associated, so message
153 // ordering with legacy IPC messages is preserved. Therefore, servicing the 153 // ordering with legacy IPC messages is preserved. Therefore, servicing the
154 // store() called from the `unload` handler, triggered from 154 // store() called from the `unload` handler, triggered from
155 // FrameLoader::PrepareForCommit, will be serviced before 155 // FrameLoader::PrepareForCommit, will be serviced before
156 // FrameHostMsg_DidCommitProvisionalLoad, thus before DidFinishNavigation, 156 // FrameHostMsg_DidCommitProvisionalLoad, thus before DidFinishNavigation,
157 ASSERT_TRUE(client->was_store_ever_called()); 157 ASSERT_TRUE(client->was_store_ever_called());
158 158
159 BubbleObserver prompt_observer(WebContents()); 159 BubbleObserver prompt_observer(WebContents());
160 prompt_observer.WaitForSavePrompt(); 160 prompt_observer.WaitForSavePrompt();
161 ASSERT_TRUE(prompt_observer.IsShowingSavePrompt()); 161 ASSERT_TRUE(prompt_observer.WasSavePromptShown());
162 prompt_observer.AcceptSavePrompt(); 162 prompt_observer.AcceptSavePrompt();
163 163
164 WaitForPasswordStore(); 164 WaitForPasswordStore();
165 165
166 password_manager::TestPasswordStore* test_password_store = 166 password_manager::TestPasswordStore* test_password_store =
167 static_cast<password_manager::TestPasswordStore*>( 167 static_cast<password_manager::TestPasswordStore*>(
168 PasswordStoreFactory::GetForProfile( 168 PasswordStoreFactory::GetForProfile(
169 browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS) 169 browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS)
170 .get()); 170 .get());
171 171
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); 322 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD);
323 323
324 NavigationObserver observer(WebContents()); 324 NavigationObserver observer(WebContents());
325 observer.SetPathToWaitFor("/password/done.html"); 325 observer.SetPathToWaitFor("/password/done.html");
326 observer.Wait(); 326 observer.Wait();
327 327
328 // Wait for the password store before checking the prompt because it pops up 328 // Wait for the password store before checking the prompt because it pops up
329 // after the store replies. 329 // after the store replies.
330 WaitForPasswordStore(); 330 WaitForPasswordStore();
331 BubbleObserver prompt_observer(WebContents()); 331 BubbleObserver prompt_observer(WebContents());
332 EXPECT_FALSE(prompt_observer.IsShowingSavePrompt()); 332 EXPECT_FALSE(prompt_observer.WasSavePromptShown());
333 EXPECT_FALSE(prompt_observer.IsShowingUpdatePrompt()); 333 EXPECT_FALSE(prompt_observer.WasUpdatePromptShown());
334 334
335 // There should be an entry for both psl.example.com and www.example.com. 335 // There should be an entry for both psl.example.com and www.example.com.
336 password_manager::TestPasswordStore::PasswordMap passwords = 336 password_manager::TestPasswordStore::PasswordMap passwords =
337 password_store->stored_passwords(); 337 password_store->stored_passwords();
338 GURL www_url = https_test_server().GetURL("www.example.com", "/"); 338 GURL www_url = https_test_server().GetURL("www.example.com", "/");
339 EXPECT_EQ(2U, passwords.size()); 339 EXPECT_EQ(2U, passwords.size());
340 EXPECT_TRUE(base::ContainsKey(passwords, psl_url.spec())); 340 EXPECT_TRUE(base::ContainsKey(passwords, psl_url.spec()));
341 EXPECT_TRUE(base::ContainsKey(passwords, www_url.spec())); 341 EXPECT_TRUE(base::ContainsKey(passwords, www_url.spec()));
342 } 342 }
343 343
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 "navigator.credentials.get({password: true})" 414 "navigator.credentials.get({password: true})"
415 ".then(cred => window.location = '/password/done.html');")); 415 ".then(cred => window.location = '/password/done.html');"));
416 416
417 NavigationObserver observer(WebContents()); 417 NavigationObserver observer(WebContents());
418 observer.SetPathToWaitFor("/password/done.html"); 418 observer.SetPathToWaitFor("/password/done.html");
419 observer.Wait(); 419 observer.Wait();
420 420
421 BubbleObserver prompt_observer(WebContents()); 421 BubbleObserver prompt_observer(WebContents());
422 // The autofill password manager shouldn't react to the successful login 422 // The autofill password manager shouldn't react to the successful login
423 // because it was suppressed when the site got the credential back. 423 // because it was suppressed when the site got the credential back.
424 EXPECT_FALSE(prompt_observer.IsShowingSavePrompt()); 424 EXPECT_FALSE(prompt_observer.WasSavePromptShown());
425 } 425 }
426 426
427 // Regression test for https://crbug.com/736357. 427 // Regression test for https://crbug.com/736357.
428 IN_PROC_BROWSER_TEST_F(CredentialManagerBrowserTest, 428 IN_PROC_BROWSER_TEST_F(CredentialManagerBrowserTest,
429 StoreInUnloadHandler_SameSite_OnDemandMojoPipe) { 429 StoreInUnloadHandler_SameSite_OnDemandMojoPipe) {
430 TestStoreInUnloadHandlerForSameSiteNavigation( 430 TestStoreInUnloadHandlerForSameSiteNavigation(
431 false /* preestablish_mojo_pipe */); 431 false /* preestablish_mojo_pipe */);
432 } 432 }
433 433
434 // Regression test for https://crbug.com/736357. 434 // Regression test for https://crbug.com/736357.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 EXPECT_FALSE(client->has_binding_for_credential_manager()); 473 EXPECT_FALSE(client->has_binding_for_credential_manager());
474 EXPECT_FALSE(client->was_store_ever_called()); 474 EXPECT_FALSE(client->was_store_ever_called());
475 475
476 ASSERT_TRUE(content::ExecuteScript( 476 ASSERT_TRUE(content::ExecuteScript(
477 WebContents(), 477 WebContents(),
478 "var c = new PasswordCredential({ id: 'user', password: 'hunter2' });" 478 "var c = new PasswordCredential({ id: 'user', password: 'hunter2' });"
479 "navigator.credentials.store(c);")); 479 "navigator.credentials.store(c);"));
480 480
481 BubbleObserver prompt_observer(WebContents()); 481 BubbleObserver prompt_observer(WebContents());
482 prompt_observer.WaitForSavePrompt(); 482 prompt_observer.WaitForSavePrompt();
483 ASSERT_TRUE(prompt_observer.IsShowingSavePrompt()); 483 ASSERT_TRUE(prompt_observer.WasSavePromptShown());
484 prompt_observer.AcceptSavePrompt(); 484 prompt_observer.AcceptSavePrompt();
485 WaitForPasswordStore(); 485 WaitForPasswordStore();
486 486
487 EXPECT_TRUE(client->has_binding_for_credential_manager()); 487 EXPECT_TRUE(client->has_binding_for_credential_manager());
488 EXPECT_TRUE(client->was_store_ever_called()); 488 EXPECT_TRUE(client->was_store_ever_called());
489 489
490 // Trigger a same-site navigation. 490 // Trigger a same-site navigation.
491 content::RenderFrameHost* old_rfh = WebContents()->GetMainFrame(); 491 content::RenderFrameHost* old_rfh = WebContents()->GetMainFrame();
492 ui_test_utils::NavigateToURL(browser(), a_url2); 492 ui_test_utils::NavigateToURL(browser(), a_url2);
493 ASSERT_EQ(old_rfh, WebContents()->GetMainFrame()); 493 ASSERT_EQ(old_rfh, WebContents()->GetMainFrame());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 NavigationObserver form_submit_observer(WebContents()); 539 NavigationObserver form_submit_observer(WebContents());
540 ASSERT_TRUE(content::ExecuteScript( 540 ASSERT_TRUE(content::ExecuteScript(
541 RenderViewHost(), 541 RenderViewHost(),
542 "document.getElementById('username_field').value = 'user';" 542 "document.getElementById('username_field').value = 'user';"
543 "document.getElementById('password_field').value = 'autofill';" 543 "document.getElementById('password_field').value = 'autofill';"
544 "document.getElementById('input_submit_button').click();")); 544 "document.getElementById('input_submit_button').click();"));
545 form_submit_observer.Wait(); 545 form_submit_observer.Wait();
546 546
547 WaitForPasswordStore(); 547 WaitForPasswordStore();
548 BubbleObserver prompt_observer(WebContents()); 548 BubbleObserver prompt_observer(WebContents());
549 ASSERT_TRUE(prompt_observer.IsShowingSavePrompt()); 549 ASSERT_TRUE(prompt_observer.WasSavePromptShown());
550 prompt_observer.AcceptSavePrompt(); 550 prompt_observer.AcceptSavePrompt();
551 551
552 WaitForPasswordStore(); 552 WaitForPasswordStore();
553 password_manager::TestPasswordStore::PasswordMap stored = 553 password_manager::TestPasswordStore::PasswordMap stored =
554 static_cast<password_manager::TestPasswordStore*>( 554 static_cast<password_manager::TestPasswordStore*>(
555 PasswordStoreFactory::GetForProfile( 555 PasswordStoreFactory::GetForProfile(
556 browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS) 556 browser()->profile(), ServiceAccessType::IMPLICIT_ACCESS)
557 .get())->stored_passwords(); 557 .get())->stored_passwords();
558 ASSERT_EQ(1u, stored.size()); 558 ASSERT_EQ(1u, stored.size());
559 autofill::PasswordForm signin_form = stored.begin()->second[0]; 559 autofill::PasswordForm signin_form = stored.begin()->second[0];
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 RenderViewHost(), 597 RenderViewHost(),
598 "document.getElementById('username_field').value = 'user';" 598 "document.getElementById('username_field').value = 'user';"
599 "document.getElementById('password_field').value = 'autofill';" 599 "document.getElementById('password_field').value = 'autofill';"
600 "document.getElementById('input_submit_button').click();")); 600 "document.getElementById('input_submit_button').click();"));
601 form_submit_observer.Wait(); 601 form_submit_observer.Wait();
602 602
603 // Wait for the password store before checking the prompt because it pops up 603 // Wait for the password store before checking the prompt because it pops up
604 // after the store replies. 604 // after the store replies.
605 WaitForPasswordStore(); 605 WaitForPasswordStore();
606 BubbleObserver prompt_observer(WebContents()); 606 BubbleObserver prompt_observer(WebContents());
607 EXPECT_FALSE(prompt_observer.IsShowingSavePrompt()); 607 EXPECT_FALSE(prompt_observer.WasSavePromptShown());
608 EXPECT_FALSE(prompt_observer.IsShowingUpdatePrompt()); 608 EXPECT_FALSE(prompt_observer.WasUpdatePromptShown());
609 signin_form.skip_zero_click = false; 609 signin_form.skip_zero_click = false;
610 signin_form.times_used = 1; 610 signin_form.times_used = 1;
611 signin_form.password_value = base::ASCIIToUTF16("API"); 611 signin_form.password_value = base::ASCIIToUTF16("API");
612 password_manager::TestPasswordStore::PasswordMap stored = 612 password_manager::TestPasswordStore::PasswordMap stored =
613 password_store->stored_passwords(); 613 password_store->stored_passwords();
614 ASSERT_EQ(1u, stored.size()); 614 ASSERT_EQ(1u, stored.size());
615 EXPECT_EQ(signin_form, stored[signin_form.signon_realm][0]); 615 EXPECT_EQ(signin_form, stored[signin_form.signon_realm][0]);
616 } 616 }
617 617
618 IN_PROC_BROWSER_TEST_F(CredentialManagerBrowserTest, CredentialsAutofilled) { 618 IN_PROC_BROWSER_TEST_F(CredentialManagerBrowserTest, CredentialsAutofilled) {
619 NavigateToFile("/password/password_form.html"); 619 NavigateToFile("/password/password_form.html");
620 620
621 ASSERT_TRUE(content::ExecuteScript( 621 ASSERT_TRUE(content::ExecuteScript(
622 RenderFrameHost(), 622 RenderFrameHost(),
623 "var c = new PasswordCredential({ id: 'user', password: '12345' });" 623 "var c = new PasswordCredential({ id: 'user', password: '12345' });"
624 "navigator.credentials.store(c);")); 624 "navigator.credentials.store(c);"));
625 BubbleObserver bubble_observer(WebContents()); 625 BubbleObserver bubble_observer(WebContents());
626 bubble_observer.WaitForSavePrompt(); 626 bubble_observer.WaitForSavePrompt();
627 bubble_observer.AcceptSavePrompt(); 627 bubble_observer.AcceptSavePrompt();
628 628
629 // Reload the page and make sure it's autofilled. 629 // Reload the page and make sure it's autofilled.
630 NavigateToFile("/password/password_form.html"); 630 NavigateToFile("/password/password_form.html");
631 WaitForElementValue("username_field", "user"); 631 WaitForElementValue("username_field", "user");
632 content::SimulateMouseClickAt( 632 content::SimulateMouseClickAt(
633 WebContents(), 0, blink::WebMouseEvent::Button::kLeft, gfx::Point(1, 1)); 633 WebContents(), 0, blink::WebMouseEvent::Button::kLeft, gfx::Point(1, 1));
634 WaitForElementValue("password_field", "12345"); 634 WaitForElementValue("password_field", "12345");
635 } 635 }
636 636
637 } // namespace 637 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698