| 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
| 9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 14 #include "chrome/browser/autofill/personal_data_manager_factory.h" | 14 #include "chrome/browser/autofill/personal_data_manager_factory.h" |
| 15 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
| 16 #include "chrome/browser/ui/autofill/account_chooser_model.h" | 16 #include "chrome/browser/ui/autofill/account_chooser_model.h" |
| 17 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h" | 17 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h" |
| 18 #include "chrome/browser/ui/autofill/autofill_dialog_i18n_input.h" |
| 18 #include "chrome/browser/ui/autofill/autofill_dialog_view.h" | 19 #include "chrome/browser/ui/autofill/autofill_dialog_view.h" |
| 19 #include "chrome/browser/ui/autofill/data_model_wrapper.h" | 20 #include "chrome/browser/ui/autofill/data_model_wrapper.h" |
| 20 #include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h" | 21 #include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h" |
| 21 #include "chrome/browser/ui/autofill/test_generated_credit_card_bubble_controlle
r.h" | 22 #include "chrome/browser/ui/autofill/test_generated_credit_card_bubble_controlle
r.h" |
| 22 #include "chrome/browser/ui/autofill/testable_autofill_dialog_view.h" | 23 #include "chrome/browser/ui/autofill/testable_autofill_dialog_view.h" |
| 23 #include "chrome/browser/ui/browser.h" | 24 #include "chrome/browser/ui/browser.h" |
| 24 #include "chrome/browser/ui/browser_tabstrip.h" | 25 #include "chrome/browser/ui/browser_tabstrip.h" |
| 25 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 26 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 27 #include "chrome/common/chrome_switches.h" |
| 26 #include "chrome/common/pref_names.h" | 28 #include "chrome/common/pref_names.h" |
| 27 #include "chrome/common/url_constants.h" | 29 #include "chrome/common/url_constants.h" |
| 28 #include "chrome/test/base/in_process_browser_test.h" | 30 #include "chrome/test/base/in_process_browser_test.h" |
| 29 #include "chrome/test/base/ui_test_utils.h" | 31 #include "chrome/test/base/ui_test_utils.h" |
| 30 #include "components/autofill/content/browser/risk/proto/fingerprint.pb.h" | 32 #include "components/autofill/content/browser/risk/proto/fingerprint.pb.h" |
| 33 #include "components/autofill/content/browser/wallet/gaia_account.h" |
| 31 #include "components/autofill/content/browser/wallet/mock_wallet_client.h" | 34 #include "components/autofill/content/browser/wallet/mock_wallet_client.h" |
| 32 #include "components/autofill/content/browser/wallet/wallet_service_url.h" | 35 #include "components/autofill/content/browser/wallet/wallet_service_url.h" |
| 33 #include "components/autofill/content/browser/wallet/wallet_test_util.h" | 36 #include "components/autofill/content/browser/wallet/wallet_test_util.h" |
| 34 #include "components/autofill/core/browser/autofill_metrics.h" | 37 #include "components/autofill/core/browser/autofill_metrics.h" |
| 35 #include "components/autofill/core/browser/autofill_test_utils.h" | 38 #include "components/autofill/core/browser/autofill_test_utils.h" |
| 36 #include "components/autofill/core/browser/test_personal_data_manager.h" | 39 #include "components/autofill/core/browser/test_personal_data_manager.h" |
| 37 #include "components/autofill/core/browser/validation.h" | 40 #include "components/autofill/core/browser/validation.h" |
| 38 #include "components/autofill/core/common/autofill_switches.h" | 41 #include "components/autofill/core/common/autofill_switches.h" |
| 39 #include "components/autofill/core/common/form_data.h" | 42 #include "components/autofill/core/common/form_data.h" |
| 40 #include "components/autofill/core/common/form_field_data.h" | 43 #include "components/autofill/core/common/form_field_data.h" |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 | 181 |
| 179 void set_notifications(const std::vector<DialogNotification>& notifications) { | 182 void set_notifications(const std::vector<DialogNotification>& notifications) { |
| 180 notifications_ = notifications; | 183 notifications_ = notifications; |
| 181 } | 184 } |
| 182 | 185 |
| 183 TestPersonalDataManager* GetTestingManager() { | 186 TestPersonalDataManager* GetTestingManager() { |
| 184 return &test_manager_; | 187 return &test_manager_; |
| 185 } | 188 } |
| 186 | 189 |
| 187 using AutofillDialogControllerImpl::IsEditingExistingData; | 190 using AutofillDialogControllerImpl::IsEditingExistingData; |
| 191 using AutofillDialogControllerImpl::IsManuallyEditingSection; |
| 188 using AutofillDialogControllerImpl::IsPayingWithWallet; | 192 using AutofillDialogControllerImpl::IsPayingWithWallet; |
| 189 using AutofillDialogControllerImpl::IsSubmitPausedOn; | 193 using AutofillDialogControllerImpl::IsSubmitPausedOn; |
| 190 using AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData; | 194 using AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData; |
| 191 using AutofillDialogControllerImpl::AccountChooserModelForTesting; | 195 using AutofillDialogControllerImpl::AccountChooserModelForTesting; |
| 192 using AutofillDialogControllerImpl:: | 196 using AutofillDialogControllerImpl:: |
| 193 ClearLastWalletItemsFetchTimestampForTesting; | 197 ClearLastWalletItemsFetchTimestampForTesting; |
| 194 | 198 |
| 195 void set_use_validation(bool use_validation) { | 199 void set_use_validation(bool use_validation) { |
| 196 use_validation_ = use_validation; | 200 use_validation_ = use_validation; |
| 197 } | 201 } |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 RunMessageLoop(); | 553 RunMessageLoop(); |
| 550 | 554 |
| 551 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, | 555 EXPECT_EQ(AutofillMetrics::DIALOG_CANCELED, |
| 552 metric_logger().dialog_dismissal_action()); | 556 metric_logger().dialog_dismissal_action()); |
| 553 } | 557 } |
| 554 | 558 |
| 555 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, FillInputFromAutofill) { | 559 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, FillInputFromAutofill) { |
| 556 AutofillProfile full_profile(test::GetFullProfile()); | 560 AutofillProfile full_profile(test::GetFullProfile()); |
| 557 controller()->GetTestingManager()->AddTestingProfile(&full_profile); | 561 controller()->GetTestingManager()->AddTestingProfile(&full_profile); |
| 558 | 562 |
| 563 // Select "Add new shipping address...". |
| 564 ui::MenuModel* model = controller()->MenuModelForSection(SECTION_SHIPPING); |
| 565 model->ActivatedAt(model->GetItemCount() - 2); |
| 566 ASSERT_TRUE(controller()->IsManuallyEditingSection(SECTION_SHIPPING)); |
| 567 |
| 559 const DetailInputs& inputs = | 568 const DetailInputs& inputs = |
| 560 controller()->RequestedFieldsForSection(SECTION_SHIPPING); | 569 controller()->RequestedFieldsForSection(SECTION_SHIPPING); |
| 561 const ServerFieldType triggering_type = inputs[0].type; | 570 const ServerFieldType triggering_type = inputs[0].type; |
| 562 base::string16 value = full_profile.GetRawInfo(triggering_type); | 571 base::string16 value = full_profile.GetRawInfo(triggering_type); |
| 563 TestableAutofillDialogView* view = controller()->GetTestableView(); | 572 TestableAutofillDialogView* view = controller()->GetTestableView(); |
| 564 view->SetTextContentsOfInput(triggering_type, | 573 view->SetTextContentsOfInput(triggering_type, |
| 565 value.substr(0, value.size() / 2)); | 574 value.substr(0, value.size() / 2)); |
| 566 view->ActivateInput(triggering_type); | 575 view->ActivateInput(triggering_type); |
| 567 | 576 |
| 568 ASSERT_EQ(triggering_type, controller()->popup_input_type()); | 577 ASSERT_EQ(triggering_type, controller()->popup_input_type()); |
| 569 controller()->DidAcceptSuggestion(base::string16(), 0); | 578 controller()->DidAcceptSuggestion(base::string16(), 0); |
| 570 | 579 |
| 571 // All inputs should be filled. | 580 // All inputs should be filled. |
| 572 AutofillProfileWrapper wrapper(&full_profile); | 581 AutofillProfileWrapper wrapper(&full_profile); |
| 573 for (size_t i = 0; i < inputs.size(); ++i) { | 582 for (size_t i = 0; i < inputs.size(); ++i) { |
| 574 EXPECT_EQ(wrapper.GetInfo(AutofillType(inputs[i].type)), | 583 EXPECT_EQ(wrapper.GetInfo(AutofillType(inputs[i].type)), |
| 575 view->GetTextContentsOfInput(inputs[i].type)); | 584 view->GetTextContentsOfInput(inputs[i].type)); |
| 576 } | 585 } |
| 577 | 586 |
| 578 // Now simulate some user edits and try again. | 587 // Now simulate some user edits and try again. |
| 579 std::vector<base::string16> expectations; | 588 std::vector<base::string16> expectations; |
| 580 for (size_t i = 0; i < inputs.size(); ++i) { | 589 for (size_t i = 0; i < inputs.size(); ++i) { |
| 590 if (controller()->ComboboxModelForAutofillType(inputs[i].type)) { |
| 591 expectations.push_back(base::string16()); |
| 592 continue; |
| 593 } |
| 581 base::string16 users_input = i % 2 == 0 ? base::string16() | 594 base::string16 users_input = i % 2 == 0 ? base::string16() |
| 582 : ASCIIToUTF16("dummy"); | 595 : ASCIIToUTF16("dummy"); |
| 583 view->SetTextContentsOfInput(inputs[i].type, users_input); | 596 view->SetTextContentsOfInput(inputs[i].type, users_input); |
| 584 // Empty inputs should be filled, others should be left alone. | 597 // Empty inputs should be filled, others should be left alone. |
| 585 base::string16 expectation = | 598 base::string16 expectation = |
| 586 inputs[i].type == triggering_type || users_input.empty() ? | 599 inputs[i].type == triggering_type || users_input.empty() ? |
| 587 wrapper.GetInfo(AutofillType(inputs[i].type)) : | 600 wrapper.GetInfo(AutofillType(inputs[i].type)) : |
| 588 users_input; | 601 users_input; |
| 589 expectations.push_back(expectation); | 602 expectations.push_back(expectation); |
| 590 } | 603 } |
| 591 | 604 |
| 592 view->SetTextContentsOfInput(triggering_type, | 605 view->SetTextContentsOfInput(triggering_type, |
| 593 value.substr(0, value.size() / 2)); | 606 value.substr(0, value.size() / 2)); |
| 594 view->ActivateInput(triggering_type); | 607 view->ActivateInput(triggering_type); |
| 595 ASSERT_EQ(triggering_type, controller()->popup_input_type()); | 608 ASSERT_EQ(triggering_type, controller()->popup_input_type()); |
| 596 controller()->DidAcceptSuggestion(base::string16(), 0); | 609 controller()->DidAcceptSuggestion(base::string16(), 0); |
| 597 | 610 |
| 598 for (size_t i = 0; i < inputs.size(); ++i) { | 611 for (size_t i = 0; i < inputs.size(); ++i) { |
| 612 if (controller()->ComboboxModelForAutofillType(inputs[i].type)) |
| 613 continue; |
| 599 EXPECT_EQ(expectations[i], view->GetTextContentsOfInput(inputs[i].type)); | 614 EXPECT_EQ(expectations[i], view->GetTextContentsOfInput(inputs[i].type)); |
| 600 } | 615 } |
| 601 } | 616 } |
| 602 | 617 |
| 603 // For now, no matter what, the country must always be US. See | 618 // For now, no matter what, the country must always be US. See |
| 604 // http://crbug.com/247518 | 619 // http://crbug.com/247518 |
| 605 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, | 620 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, |
| 606 FillInputFromForeignProfile) { | 621 FillInputFromForeignProfile) { |
| 607 AutofillProfile full_profile(test::GetFullProfile()); | 622 AutofillProfile full_profile(test::GetFullProfile()); |
| 608 full_profile.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), | 623 full_profile.SetInfo(AutofillType(ADDRESS_HOME_COUNTRY), |
| 609 ASCIIToUTF16("France"), "en-US"); | 624 ASCIIToUTF16("France"), "en-US"); |
| 610 controller()->GetTestingManager()->AddTestingProfile(&full_profile); | 625 controller()->GetTestingManager()->AddTestingProfile(&full_profile); |
| 611 | 626 |
| 627 // Select "Add new shipping address...". |
| 628 ui::MenuModel* model = controller()->MenuModelForSection(SECTION_SHIPPING); |
| 629 model->ActivatedAt(model->GetItemCount() - 2); |
| 630 ASSERT_TRUE(controller()->IsManuallyEditingSection(SECTION_SHIPPING)); |
| 631 |
| 612 const DetailInputs& inputs = | 632 const DetailInputs& inputs = |
| 613 controller()->RequestedFieldsForSection(SECTION_SHIPPING); | 633 controller()->RequestedFieldsForSection(SECTION_SHIPPING); |
| 614 const ServerFieldType triggering_type = inputs[0].type; | 634 const ServerFieldType triggering_type = inputs[0].type; |
| 615 base::string16 value = full_profile.GetRawInfo(triggering_type); | 635 base::string16 value = full_profile.GetRawInfo(triggering_type); |
| 616 TestableAutofillDialogView* view = controller()->GetTestableView(); | 636 TestableAutofillDialogView* view = controller()->GetTestableView(); |
| 617 view->SetTextContentsOfInput(triggering_type, | 637 view->SetTextContentsOfInput(triggering_type, |
| 618 value.substr(0, value.size() / 2)); | 638 value.substr(0, value.size() / 2)); |
| 619 view->ActivateInput(triggering_type); | 639 view->ActivateInput(triggering_type); |
| 620 | 640 |
| 621 ASSERT_EQ(triggering_type, controller()->popup_input_type()); | 641 ASSERT_EQ(triggering_type, controller()->popup_input_type()); |
| 622 controller()->DidAcceptSuggestion(base::string16(), 0); | 642 controller()->DidAcceptSuggestion(base::string16(), 0); |
| 623 | 643 |
| 624 // All inputs should be filled. | 644 // All inputs should be filled. |
| 625 AutofillProfileWrapper wrapper(&full_profile); | 645 AutofillProfileWrapper wrapper(&full_profile); |
| 626 for (size_t i = 0; i < inputs.size(); ++i) { | 646 for (size_t i = 0; i < inputs.size(); ++i) { |
| 627 const ServerFieldType type = inputs[i].type; | 647 const ServerFieldType type = inputs[i].type; |
| 628 base::string16 expectation = | 648 base::string16 expectation = |
| 629 AutofillType(type).GetStorableType() == ADDRESS_HOME_COUNTRY ? | 649 AutofillType(type).GetStorableType() == ADDRESS_HOME_COUNTRY ? |
| 630 ASCIIToUTF16("United States") : wrapper.GetInfo(AutofillType(type)); | 650 ASCIIToUTF16("United States") : wrapper.GetInfo(AutofillType(type)); |
| 631 EXPECT_EQ(expectation, view->GetTextContentsOfInput(type)); | 651 EXPECT_EQ(expectation, view->GetTextContentsOfInput(type)); |
| 632 } | 652 } |
| 633 | 653 |
| 634 // Now simulate some user edits and try again. | 654 // Now simulate some user edits and try again. |
| 635 std::vector<base::string16> expectations; | 655 std::vector<base::string16> expectations; |
| 636 for (size_t i = 0; i < inputs.size(); ++i) { | 656 for (size_t i = 0; i < inputs.size(); ++i) { |
| 657 if (controller()->ComboboxModelForAutofillType(inputs[i].type)) { |
| 658 expectations.push_back(base::string16()); |
| 659 continue; |
| 660 } |
| 637 base::string16 users_input = i % 2 == 0 ? base::string16() | 661 base::string16 users_input = i % 2 == 0 ? base::string16() |
| 638 : ASCIIToUTF16("dummy"); | 662 : ASCIIToUTF16("dummy"); |
| 639 view->SetTextContentsOfInput(inputs[i].type, users_input); | 663 view->SetTextContentsOfInput(inputs[i].type, users_input); |
| 640 // Empty inputs should be filled, others should be left alone. | 664 // Empty inputs should be filled, others should be left alone. |
| 641 base::string16 expectation = | 665 base::string16 expectation = |
| 642 inputs[i].type == triggering_type || users_input.empty() ? | 666 inputs[i].type == triggering_type || users_input.empty() ? |
| 643 wrapper.GetInfo(AutofillType(inputs[i].type)) : | 667 wrapper.GetInfo(AutofillType(inputs[i].type)) : |
| 644 users_input; | 668 users_input; |
| 645 if (AutofillType(inputs[i].type).GetStorableType() == ADDRESS_HOME_COUNTRY) | 669 if (AutofillType(inputs[i].type).GetStorableType() == ADDRESS_HOME_COUNTRY) |
| 646 expectation = ASCIIToUTF16("United States"); | 670 expectation = ASCIIToUTF16("United States"); |
| 647 | 671 |
| 648 expectations.push_back(expectation); | 672 expectations.push_back(expectation); |
| 649 } | 673 } |
| 650 | 674 |
| 651 view->SetTextContentsOfInput(triggering_type, | 675 view->SetTextContentsOfInput(triggering_type, |
| 652 value.substr(0, value.size() / 2)); | 676 value.substr(0, value.size() / 2)); |
| 653 view->ActivateInput(triggering_type); | 677 view->ActivateInput(triggering_type); |
| 654 ASSERT_EQ(triggering_type, controller()->popup_input_type()); | 678 ASSERT_EQ(triggering_type, controller()->popup_input_type()); |
| 655 controller()->DidAcceptSuggestion(base::string16(), 0); | 679 controller()->DidAcceptSuggestion(base::string16(), 0); |
| 656 | 680 |
| 657 for (size_t i = 0; i < inputs.size(); ++i) { | 681 for (size_t i = 0; i < inputs.size(); ++i) { |
| 682 if (controller()->ComboboxModelForAutofillType(inputs[i].type)) |
| 683 continue; |
| 658 EXPECT_EQ(expectations[i], view->GetTextContentsOfInput(inputs[i].type)); | 684 EXPECT_EQ(expectations[i], view->GetTextContentsOfInput(inputs[i].type)); |
| 659 } | 685 } |
| 660 } | 686 } |
| 661 | 687 |
| 662 // This test makes sure that picking a profile variant in the Autofill | 688 // This test makes sure that picking a profile variant in the Autofill |
| 663 // popup works as expected. | 689 // popup works as expected. |
| 664 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, | 690 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, |
| 665 FillInputFromAutofillVariant) { | 691 FillInputFromAutofillVariant) { |
| 666 AutofillProfile full_profile(test::GetFullProfile()); | 692 AutofillProfile full_profile(test::GetFullProfile()); |
| 667 | 693 |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 // happen if the WebContents is deleted while proccessing a nav entry commit). | 1121 // happen if the WebContents is deleted while proccessing a nav entry commit). |
| 1096 EXPECT_TRUE(account_chooser_model->WalletIsSelected()); | 1122 EXPECT_TRUE(account_chooser_model->WalletIsSelected()); |
| 1097 } | 1123 } |
| 1098 | 1124 |
| 1099 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AddAccount) { | 1125 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerTest, AddAccount) { |
| 1100 #if defined(OS_WIN) | 1126 #if defined(OS_WIN) |
| 1101 // TODO(msw): Fix potential flakiness on Windows XP; http://crbug.com/333641 | 1127 // TODO(msw): Fix potential flakiness on Windows XP; http://crbug.com/333641 |
| 1102 if (base::win::GetVersion() <= base::win::VERSION_XP) | 1128 if (base::win::GetVersion() <= base::win::VERSION_XP) |
| 1103 return; | 1129 return; |
| 1104 #endif | 1130 #endif |
| 1105 InitializeController(); | |
| 1106 | 1131 |
| 1107 controller()->OnDidFetchWalletCookieValue(std::string()); | 1132 controller()->OnDidFetchWalletCookieValue(std::string()); |
| 1108 std::vector<std::string> usernames; | 1133 std::vector<std::string> usernames; |
| 1109 usernames.push_back("user_0@example.com"); | 1134 usernames.push_back("user_0@example.com"); |
| 1110 controller()->OnDidGetWalletItems( | 1135 controller()->OnDidGetWalletItems( |
| 1111 wallet::GetTestWalletItemsWithUsers(usernames, 0)); | 1136 wallet::GetTestWalletItemsWithUsers(usernames, 0)); |
| 1112 | 1137 |
| 1113 // Switch to Autofill. | 1138 // Switch to Autofill. |
| 1114 AccountChooserModel* account_chooser_model = | 1139 AccountChooserModel* account_chooser_model = |
| 1115 controller()->AccountChooserModelForTesting(); | 1140 controller()->AccountChooserModelForTesting(); |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1401 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerSecurityTest, | 1426 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerSecurityTest, |
| 1402 MAYBE_DoesntWorkOnBrokenHttps) { | 1427 MAYBE_DoesntWorkOnBrokenHttps) { |
| 1403 net::SpawnedTestServer https_server( | 1428 net::SpawnedTestServer https_server( |
| 1404 net::SpawnedTestServer::TYPE_HTTPS, | 1429 net::SpawnedTestServer::TYPE_HTTPS, |
| 1405 SSLOptions(SSLOptions::CERT_EXPIRED), | 1430 SSLOptions(SSLOptions::CERT_EXPIRED), |
| 1406 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | 1431 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); |
| 1407 ASSERT_TRUE(https_server.Start()); | 1432 ASSERT_TRUE(https_server.Start()); |
| 1408 EXPECT_FALSE(RunTestPage(https_server)); | 1433 EXPECT_FALSE(RunTestPage(https_server)); |
| 1409 } | 1434 } |
| 1410 | 1435 |
| 1436 class AutofillDialogControllerI18nTest : public AutofillDialogControllerTest { |
| 1437 public: |
| 1438 AutofillDialogControllerI18nTest() {} |
| 1439 virtual ~AutofillDialogControllerI18nTest() {} |
| 1440 |
| 1441 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 1442 command_line->AppendSwitch(::switches::kEnableAutofillAddressI18n); |
| 1443 CHECK(i18ninput::Enabled()); |
| 1444 } |
| 1445 }; |
| 1446 |
| 1447 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerI18nTest, |
| 1448 CountryChangeRebuildsSection) { |
| 1449 const DetailInputs& us_billing_inputs = |
| 1450 controller()->RequestedFieldsForSection(SECTION_BILLING); |
| 1451 const DetailInputs& us_shipping_inputs = |
| 1452 controller()->RequestedFieldsForSection(SECTION_SHIPPING); |
| 1453 |
| 1454 // Check that there's no dependent locality for the US layout. |
| 1455 for (size_t i = 0; i < us_billing_inputs.size(); ++i) { |
| 1456 EXPECT_NE(us_billing_inputs[i].type, ADDRESS_BILLING_DEPENDENT_LOCALITY); |
| 1457 } |
| 1458 for (size_t i = 0; i < us_shipping_inputs.size(); ++i) { |
| 1459 EXPECT_NE(us_shipping_inputs[i].type, ADDRESS_HOME_DEPENDENT_LOCALITY); |
| 1460 } |
| 1461 |
| 1462 // Select "Add new shipping address...". |
| 1463 controller()->MenuModelForSection(SECTION_SHIPPING)->ActivatedAt(1); |
| 1464 |
| 1465 // Add some valid user input that should be preserved when country changes. |
| 1466 TestableAutofillDialogView* view = controller()->GetTestableView(); |
| 1467 view->SetTextContentsOfInput(NAME_FULL, ASCIIToUTF16("B. Loblaw")); |
| 1468 |
| 1469 // Change both sections' countries. |
| 1470 view->SetTextContentsOfInput(ADDRESS_BILLING_COUNTRY, ASCIIToUTF16("China")); |
| 1471 view->ActivateInput(ADDRESS_BILLING_COUNTRY); |
| 1472 view->SetTextContentsOfInput(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("France")); |
| 1473 view->ActivateInput(ADDRESS_HOME_COUNTRY); |
| 1474 |
| 1475 // Verify the name is still there. |
| 1476 EXPECT_EQ(ASCIIToUTF16("B. Loblaw"), view->GetTextContentsOfInput(NAME_FULL)); |
| 1477 |
| 1478 const DetailInputs& cn_billing_inputs = |
| 1479 controller()->RequestedFieldsForSection(SECTION_BILLING); |
| 1480 const DetailInputs& fr_shipping_inputs = |
| 1481 controller()->RequestedFieldsForSection(SECTION_SHIPPING); |
| 1482 |
| 1483 // Check that there is dependent locality for the Chinese layout. |
| 1484 size_t i = 0; |
| 1485 for (; i < cn_billing_inputs.size(); ++i) { |
| 1486 if (cn_billing_inputs[i].type == ADDRESS_BILLING_DEPENDENT_LOCALITY) |
| 1487 break; |
| 1488 } |
| 1489 EXPECT_LT(i, cn_billing_inputs.size()); |
| 1490 |
| 1491 // Check that there's a sorting code (CEDEX) for French layout. |
| 1492 for (i = 0; i < fr_shipping_inputs.size(); ++i) { |
| 1493 if (fr_shipping_inputs[i].type == ADDRESS_HOME_SORTING_CODE) |
| 1494 break; |
| 1495 } |
| 1496 EXPECT_LT(i, fr_shipping_inputs.size()); |
| 1497 } |
| 1498 |
| 1499 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerI18nTest, |
| 1500 ChangingDataSourcePreservesCountry) { |
| 1501 AutofillProfile verified_profile(test::GetVerifiedProfile()); |
| 1502 controller()->GetTestingManager()->AddTestingProfile(&verified_profile); |
| 1503 |
| 1504 CreditCard verified_card(test::GetVerifiedCreditCard()); |
| 1505 controller()->GetTestingManager()->AddTestingCreditCard(&verified_card); |
| 1506 |
| 1507 controller()->OnDidFetchWalletCookieValue(std::string()); |
| 1508 scoped_ptr<wallet::WalletItems> items = |
| 1509 wallet::GetTestWalletItems(wallet::AMEX_DISALLOWED); |
| 1510 items->AddAccount(wallet::GetTestGaiaAccount()); |
| 1511 items->AddInstrument(wallet::GetTestMaskedInstrument()); |
| 1512 items->AddAddress(wallet::GetTestShippingAddress()); |
| 1513 controller()->OnDidGetWalletItems(items.Pass()); |
| 1514 |
| 1515 EXPECT_TRUE(controller()->IsPayingWithWallet()); |
| 1516 |
| 1517 // Select "Add new billing/shipping address...". |
| 1518 controller()->MenuModelForSection(SECTION_CC_BILLING)->ActivatedAt(1); |
| 1519 controller()->MenuModelForSection(SECTION_SHIPPING)->ActivatedAt(2); |
| 1520 |
| 1521 TestableAutofillDialogView* view = controller()->GetTestableView(); |
| 1522 ASSERT_EQ(ASCIIToUTF16("United States"), |
| 1523 view->GetTextContentsOfInput(ADDRESS_BILLING_COUNTRY)); |
| 1524 ASSERT_EQ(ASCIIToUTF16("United States"), |
| 1525 view->GetTextContentsOfInput(ADDRESS_HOME_COUNTRY)); |
| 1526 |
| 1527 // Switch both billing and shipping countries. |
| 1528 view->SetTextContentsOfInput(ADDRESS_BILLING_COUNTRY, ASCIIToUTF16("China")); |
| 1529 view->ActivateInput(ADDRESS_BILLING_COUNTRY); |
| 1530 view->SetTextContentsOfInput(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("France")); |
| 1531 view->ActivateInput(ADDRESS_HOME_COUNTRY); |
| 1532 |
| 1533 // Switch to using Autofill instead of Wallet. |
| 1534 ui::MenuModel* account_chooser = controller()->MenuModelForAccountChooser(); |
| 1535 account_chooser->ActivatedAt(account_chooser->GetItemCount() - 1); |
| 1536 |
| 1537 EXPECT_FALSE(controller()->IsPayingWithWallet()); |
| 1538 |
| 1539 // Countries should have stayed the same. |
| 1540 EXPECT_EQ(ASCIIToUTF16("China"), |
| 1541 view->GetTextContentsOfInput(ADDRESS_BILLING_COUNTRY)); |
| 1542 EXPECT_EQ(ASCIIToUTF16("France"), |
| 1543 view->GetTextContentsOfInput(ADDRESS_HOME_COUNTRY)); |
| 1544 } |
| 1545 |
| 1546 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerI18nTest, AddNewResetsCountry) { |
| 1547 AutofillProfile verified_profile(test::GetVerifiedProfile()); |
| 1548 controller()->GetTestingManager()->AddTestingProfile(&verified_profile); |
| 1549 |
| 1550 // Select "Add new billing/shipping address...". |
| 1551 controller()->MenuModelForSection(SECTION_BILLING)->ActivatedAt(1); |
| 1552 controller()->MenuModelForSection(SECTION_SHIPPING)->ActivatedAt(2); |
| 1553 |
| 1554 TestableAutofillDialogView* view = controller()->GetTestableView(); |
| 1555 ASSERT_EQ(ASCIIToUTF16("United States"), |
| 1556 view->GetTextContentsOfInput(ADDRESS_BILLING_COUNTRY)); |
| 1557 ASSERT_EQ(ASCIIToUTF16("United States"), |
| 1558 view->GetTextContentsOfInput(ADDRESS_HOME_COUNTRY)); |
| 1559 |
| 1560 // Switch both billing and shipping countries. |
| 1561 view->SetTextContentsOfInput(ADDRESS_BILLING_COUNTRY, ASCIIToUTF16("China")); |
| 1562 view->ActivateInput(ADDRESS_BILLING_COUNTRY); |
| 1563 view->SetTextContentsOfInput(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("France")); |
| 1564 view->ActivateInput(ADDRESS_HOME_COUNTRY); |
| 1565 |
| 1566 // Select "Add new billing/shipping address...". |
| 1567 controller()->MenuModelForSection(SECTION_BILLING)->ActivatedAt(1); |
| 1568 controller()->MenuModelForSection(SECTION_SHIPPING)->ActivatedAt(2); |
| 1569 |
| 1570 EXPECT_EQ(ASCIIToUTF16("United States"), |
| 1571 view->GetTextContentsOfInput(ADDRESS_BILLING_COUNTRY)); |
| 1572 EXPECT_EQ(ASCIIToUTF16("United States"), |
| 1573 view->GetTextContentsOfInput(ADDRESS_HOME_COUNTRY)); |
| 1574 } |
| 1575 |
| 1576 IN_PROC_BROWSER_TEST_F(AutofillDialogControllerI18nTest, |
| 1577 FillingFormRebuildsInputs) { |
| 1578 AutofillProfile full_profile(test::GetFullProfile()); |
| 1579 full_profile.SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("CN")); |
| 1580 controller()->GetTestingManager()->AddTestingProfile(&full_profile); |
| 1581 |
| 1582 // Select "Add new shipping address...". |
| 1583 controller()->MenuModelForSection(SECTION_SHIPPING)->ActivatedAt(1); |
| 1584 |
| 1585 TestableAutofillDialogView* view = controller()->GetTestableView(); |
| 1586 ASSERT_EQ(ASCIIToUTF16("United States"), |
| 1587 view->GetTextContentsOfInput(ADDRESS_BILLING_COUNTRY)); |
| 1588 ASSERT_EQ(ASCIIToUTF16("United States"), |
| 1589 view->GetTextContentsOfInput(ADDRESS_HOME_COUNTRY)); |
| 1590 |
| 1591 base::string16 name = full_profile.GetRawInfo(NAME_FULL); |
| 1592 view->SetTextContentsOfInput(NAME_FULL, name.substr(0, name.size() / 2)); |
| 1593 view->ActivateInput(NAME_FULL); |
| 1594 ASSERT_EQ(NAME_FULL, controller()->popup_input_type()); |
| 1595 controller()->DidAcceptSuggestion(base::string16(), 0); |
| 1596 |
| 1597 EXPECT_EQ(ASCIIToUTF16("China"), |
| 1598 view->GetTextContentsOfInput(ADDRESS_BILLING_COUNTRY)); |
| 1599 EXPECT_EQ(ASCIIToUTF16("China"), |
| 1600 view->GetTextContentsOfInput(ADDRESS_HOME_COUNTRY)); |
| 1601 } |
| 1602 |
| 1411 } // namespace autofill | 1603 } // namespace autofill |
| OLD | NEW |