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 "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h" | 5 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
72 | 72 |
73 // This is a pseudo-scientifically chosen maximum amount we want a fronting | 73 // This is a pseudo-scientifically chosen maximum amount we want a fronting |
74 // (proxy) card to be able to charge. The current actual max is $2000. Using | 74 // (proxy) card to be able to charge. The current actual max is $2000. Using |
75 // only $1850 leaves some room for tax and shipping, etc. TODO(dbeam): send a | 75 // only $1850 leaves some room for tax and shipping, etc. TODO(dbeam): send a |
76 // special value to the server to just ask for the maximum so we don't need to | 76 // special value to the server to just ask for the maximum so we don't need to |
77 // hardcode it here (http://crbug.com/180731). TODO(dbeam): also maybe allow | 77 // hardcode it here (http://crbug.com/180731). TODO(dbeam): also maybe allow |
78 // users to give us this number via an <input> (http://crbug.com/180733). | 78 // users to give us this number via an <input> (http://crbug.com/180733). |
79 const int kCartMax = 1850; | 79 const int kCartMax = 1850; |
80 const char kCartCurrency[] = "USD"; | 80 const char kCartCurrency[] = "USD"; |
81 | 81 |
| 82 const char kAddNewItemKey[] = "add-new-item"; |
| 83 const char kManageItemsKey[] = "manage-items"; |
| 84 const char kSameAsBillingKey[] = "same-as-billing"; |
| 85 |
82 // Returns true if |input| should be shown when |field| has been requested. | 86 // Returns true if |input| should be shown when |field| has been requested. |
83 bool InputTypeMatchesFieldType(const DetailInput& input, | 87 bool InputTypeMatchesFieldType(const DetailInput& input, |
84 const AutofillField& field) { | 88 const AutofillField& field) { |
85 // If any credit card expiration info is asked for, show both month and year | 89 // If any credit card expiration info is asked for, show both month and year |
86 // inputs. | 90 // inputs. |
87 if (field.type() == CREDIT_CARD_EXP_4_DIGIT_YEAR || | 91 if (field.type() == CREDIT_CARD_EXP_4_DIGIT_YEAR || |
88 field.type() == CREDIT_CARD_EXP_2_DIGIT_YEAR || | 92 field.type() == CREDIT_CARD_EXP_2_DIGIT_YEAR || |
89 field.type() == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR || | 93 field.type() == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR || |
90 field.type() == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || | 94 field.type() == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || |
91 field.type() == CREDIT_CARD_EXP_MONTH) { | 95 field.type() == CREDIT_CARD_EXP_MONTH) { |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 // AutofillDialogController implementation. | 406 // AutofillDialogController implementation. |
403 | 407 |
404 string16 AutofillDialogControllerImpl::DialogTitle() const { | 408 string16 AutofillDialogControllerImpl::DialogTitle() const { |
405 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_TITLE); | 409 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_TITLE); |
406 } | 410 } |
407 | 411 |
408 string16 AutofillDialogControllerImpl::EditSuggestionText() const { | 412 string16 AutofillDialogControllerImpl::EditSuggestionText() const { |
409 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_EDIT); | 413 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_EDIT); |
410 } | 414 } |
411 | 415 |
412 string16 AutofillDialogControllerImpl::UseBillingForShippingText() const { | |
413 return l10n_util::GetStringUTF16( | |
414 IDS_AUTOFILL_DIALOG_USE_BILLING_FOR_SHIPPING); | |
415 } | |
416 | |
417 string16 AutofillDialogControllerImpl::CancelButtonText() const { | 416 string16 AutofillDialogControllerImpl::CancelButtonText() const { |
418 return l10n_util::GetStringUTF16(IDS_CANCEL); | 417 return l10n_util::GetStringUTF16(IDS_CANCEL); |
419 } | 418 } |
420 | 419 |
421 string16 AutofillDialogControllerImpl::ConfirmButtonText() const { | 420 string16 AutofillDialogControllerImpl::ConfirmButtonText() const { |
422 return l10n_util::GetStringUTF16(IsSubmitPausedOn(wallet::VERIFY_CVV) ? | 421 return l10n_util::GetStringUTF16(IsSubmitPausedOn(wallet::VERIFY_CVV) ? |
423 IDS_AUTOFILL_DIALOG_VERIFY_BUTTON : IDS_AUTOFILL_DIALOG_SUBMIT_BUTTON); | 422 IDS_AUTOFILL_DIALOG_VERIFY_BUTTON : IDS_AUTOFILL_DIALOG_SUBMIT_BUTTON); |
424 } | 423 } |
425 | 424 |
426 string16 AutofillDialogControllerImpl::CancelSignInText() const { | 425 string16 AutofillDialogControllerImpl::CancelSignInText() const { |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SECTION_SHIPPING); | 703 return l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_SECTION_SHIPPING); |
705 default: | 704 default: |
706 NOTREACHED(); | 705 NOTREACHED(); |
707 return string16(); | 706 return string16(); |
708 } | 707 } |
709 } | 708 } |
710 | 709 |
711 SuggestionState AutofillDialogControllerImpl::SuggestionStateForSection( | 710 SuggestionState AutofillDialogControllerImpl::SuggestionStateForSection( |
712 DialogSection section) { | 711 DialogSection section) { |
713 return SuggestionState(SuggestionTextForSection(section), | 712 return SuggestionState(SuggestionTextForSection(section), |
| 713 SuggestionTextStyleForSection(section), |
714 SuggestionIconForSection(section), | 714 SuggestionIconForSection(section), |
715 ExtraSuggestionTextForSection(section), | 715 ExtraSuggestionTextForSection(section), |
716 ExtraSuggestionIconForSection(section), | 716 ExtraSuggestionIconForSection(section), |
717 EditEnabledForSection(section)); | 717 EditEnabledForSection(section)); |
718 } | 718 } |
719 | 719 |
720 string16 AutofillDialogControllerImpl::SuggestionTextForSection( | 720 string16 AutofillDialogControllerImpl::SuggestionTextForSection( |
721 DialogSection section) { | 721 DialogSection section) { |
722 string16 action_text = RequiredActionTextForSection(section); | 722 string16 action_text = RequiredActionTextForSection(section); |
723 if (!action_text.empty()) | 723 if (!action_text.empty()) |
724 return action_text; | 724 return action_text; |
725 | 725 |
726 // When the user has clicked 'edit', don't show a suggestion (even though | 726 // When the user has clicked 'edit', don't show a suggestion (even though |
727 // there is a profile selected in the model). | 727 // there is a profile selected in the model). |
728 if (section_editing_state_[section]) | 728 if (section_editing_state_[section]) |
729 return string16(); | 729 return string16(); |
730 | 730 |
731 SuggestionsMenuModel* model = SuggestionsMenuModelForSection(section); | 731 SuggestionsMenuModel* model = SuggestionsMenuModelForSection(section); |
732 std::string item_key = model->GetItemKeyForCheckedItem(); | 732 std::string item_key = model->GetItemKeyForCheckedItem(); |
733 if (item_key.empty()) | 733 if (item_key == kSameAsBillingKey) { |
| 734 return l10n_util::GetStringUTF16( |
| 735 IDS_AUTOFILL_DIALOG_USING_BILLING_FOR_SHIPPING); |
| 736 } |
| 737 |
| 738 if (!IsASuggestionItemKey(item_key)) |
734 return string16(); | 739 return string16(); |
735 | 740 |
736 if (section == SECTION_EMAIL) | 741 if (section == SECTION_EMAIL) |
737 return model->GetLabelAt(model->checked_item()); | 742 return model->GetLabelAt(model->checked_item()); |
738 | 743 |
739 scoped_ptr<DataModelWrapper> wrapper = CreateWrapper(section); | 744 scoped_ptr<DataModelWrapper> wrapper = CreateWrapper(section); |
740 return wrapper->GetDisplayText(); | 745 return wrapper->GetDisplayText(); |
741 } | 746 } |
742 | 747 |
| 748 gfx::Font::FontStyle |
| 749 AutofillDialogControllerImpl::SuggestionTextStyleForSection( |
| 750 DialogSection section) const { |
| 751 const SuggestionsMenuModel* model = SuggestionsMenuModelForSection(section); |
| 752 if (model->GetItemKeyForCheckedItem() == kSameAsBillingKey) |
| 753 return gfx::Font::ITALIC; |
| 754 |
| 755 return gfx::Font::NORMAL; |
| 756 } |
| 757 |
743 string16 AutofillDialogControllerImpl::RequiredActionTextForSection( | 758 string16 AutofillDialogControllerImpl::RequiredActionTextForSection( |
744 DialogSection section) const { | 759 DialogSection section) const { |
745 if (section == SECTION_CC_BILLING && IsSubmitPausedOn(wallet::VERIFY_CVV)) { | 760 if (section == SECTION_CC_BILLING && IsSubmitPausedOn(wallet::VERIFY_CVV)) { |
746 const wallet::WalletItems::MaskedInstrument* current_instrument = | 761 const wallet::WalletItems::MaskedInstrument* current_instrument = |
747 wallet_items_->GetInstrumentById(active_instrument_id_); | 762 wallet_items_->GetInstrumentById(active_instrument_id_); |
748 if (current_instrument) | 763 if (current_instrument) |
749 return current_instrument->TypeAndLastFourDigits(); | 764 return current_instrument->TypeAndLastFourDigits(); |
750 | 765 |
751 DetailOutputMap output; | 766 DetailOutputMap output; |
752 view_->GetUserInput(section, &output); | 767 view_->GetUserInput(section, &output); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 gfx::Image AutofillDialogControllerImpl::ExtraSuggestionIconForSection( | 851 gfx::Image AutofillDialogControllerImpl::ExtraSuggestionIconForSection( |
837 DialogSection section) const { | 852 DialogSection section) const { |
838 if (section == SECTION_CC || section == SECTION_CC_BILLING) | 853 if (section == SECTION_CC || section == SECTION_CC_BILLING) |
839 return IconForField(CREDIT_CARD_VERIFICATION_CODE, string16()); | 854 return IconForField(CREDIT_CARD_VERIFICATION_CODE, string16()); |
840 | 855 |
841 return gfx::Image(); | 856 return gfx::Image(); |
842 } | 857 } |
843 | 858 |
844 bool AutofillDialogControllerImpl::EditEnabledForSection( | 859 bool AutofillDialogControllerImpl::EditEnabledForSection( |
845 DialogSection section) const { | 860 DialogSection section) const { |
846 return section != SECTION_CC_BILLING || !IsSubmitPausedOn(wallet::VERIFY_CVV); | 861 if (SuggestionsMenuModelForSection(section)->GetItemKeyForCheckedItem() == |
| 862 kSameAsBillingKey) { |
| 863 return false; |
| 864 } |
| 865 |
| 866 if (section == SECTION_CC_BILLING && IsSubmitPausedOn(wallet::VERIFY_CVV)) |
| 867 return false; |
| 868 |
| 869 return true; |
847 } | 870 } |
848 | 871 |
849 void AutofillDialogControllerImpl::EditClickedForSection( | 872 void AutofillDialogControllerImpl::EditClickedForSection( |
850 DialogSection section) { | 873 DialogSection section) { |
851 DetailInputs* inputs = MutableRequestedFieldsForSection(section); | 874 DetailInputs* inputs = MutableRequestedFieldsForSection(section); |
852 scoped_ptr<DataModelWrapper> model = CreateWrapper(section); | 875 scoped_ptr<DataModelWrapper> model = CreateWrapper(section); |
853 model->FillInputs(inputs); | 876 model->FillInputs(inputs); |
854 section_editing_state_[section] = true; | 877 section_editing_state_[section] = true; |
855 view_->UpdateSection(section, CLEAR_USER_INPUT); | 878 view_->UpdateSection(section, CLEAR_USER_INPUT); |
856 } | 879 } |
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1320 EndSignInFlow(); | 1343 EndSignInFlow(); |
1321 if (account_chooser_model_.WalletIsSelected()) | 1344 if (account_chooser_model_.WalletIsSelected()) |
1322 GetWalletItems(); | 1345 GetWalletItems(); |
1323 } | 1346 } |
1324 } | 1347 } |
1325 | 1348 |
1326 //////////////////////////////////////////////////////////////////////////////// | 1349 //////////////////////////////////////////////////////////////////////////////// |
1327 // SuggestionsMenuModelDelegate implementation. | 1350 // SuggestionsMenuModelDelegate implementation. |
1328 | 1351 |
1329 void AutofillDialogControllerImpl::SuggestionItemSelected( | 1352 void AutofillDialogControllerImpl::SuggestionItemSelected( |
1330 const SuggestionsMenuModel& model) { | 1353 SuggestionsMenuModel* model, |
1331 const DialogSection section = SectionForSuggestionsMenuModel(model); | 1354 const std::string& item_key) { |
1332 EditCancelledForSection(section); | 1355 if (item_key == kManageItemsKey) { |
| 1356 // TODO(estade): show chrome://settings or a wallet URL. |
| 1357 return; |
| 1358 } |
| 1359 |
| 1360 model->SetCheckedItem(item_key); |
| 1361 EditCancelledForSection(SectionForSuggestionsMenuModel(*model)); |
1333 } | 1362 } |
1334 | 1363 |
1335 //////////////////////////////////////////////////////////////////////////////// | 1364 //////////////////////////////////////////////////////////////////////////////// |
1336 // wallet::WalletClientDelegate implementation. | 1365 // wallet::WalletClientDelegate implementation. |
1337 | 1366 |
1338 const AutofillMetrics& AutofillDialogControllerImpl::GetMetricLogger() const { | 1367 const AutofillMetrics& AutofillDialogControllerImpl::GetMetricLogger() const { |
1339 return metric_logger_; | 1368 return metric_logger_; |
1340 } | 1369 } |
1341 | 1370 |
1342 DialogType AutofillDialogControllerImpl::GetDialogType() const { | 1371 DialogType AutofillDialogControllerImpl::GetDialogType() const { |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1618 } | 1647 } |
1619 | 1648 |
1620 void AutofillDialogControllerImpl::SuggestionsUpdated() { | 1649 void AutofillDialogControllerImpl::SuggestionsUpdated() { |
1621 suggested_email_.Reset(); | 1650 suggested_email_.Reset(); |
1622 suggested_cc_.Reset(); | 1651 suggested_cc_.Reset(); |
1623 suggested_billing_.Reset(); | 1652 suggested_billing_.Reset(); |
1624 suggested_cc_billing_.Reset(); | 1653 suggested_cc_billing_.Reset(); |
1625 suggested_shipping_.Reset(); | 1654 suggested_shipping_.Reset(); |
1626 HidePopup(); | 1655 HidePopup(); |
1627 | 1656 |
| 1657 suggested_shipping_.AddKeyedItem( |
| 1658 kSameAsBillingKey, |
| 1659 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_USE_BILLING_FOR_SHIPPING)); |
| 1660 |
1628 if (IsPayingWithWallet()) { | 1661 if (IsPayingWithWallet()) { |
1629 // TODO(estade): fill in the email address. | 1662 // TODO(estade): fill in the email address. |
1630 | 1663 |
1631 const std::vector<wallet::Address*>& addresses = | 1664 const std::vector<wallet::Address*>& addresses = |
1632 wallet_items_->addresses(); | 1665 wallet_items_->addresses(); |
1633 for (size_t i = 0; i < addresses.size(); ++i) { | 1666 for (size_t i = 0; i < addresses.size(); ++i) { |
1634 // TODO(dbeam): respect wallet_items_->default_instrument_id(). | 1667 // TODO(dbeam): respect wallet_items_->default_instrument_id(). |
1635 suggested_shipping_.AddKeyedItemWithSublabel( | 1668 suggested_shipping_.AddKeyedItemWithSublabel( |
1636 base::IntToString(i), | 1669 base::IntToString(i), |
1637 addresses[i]->DisplayName(), | 1670 addresses[i]->DisplayName(), |
1638 addresses[i]->DisplayNameDetail()); | 1671 addresses[i]->DisplayNameDetail()); |
1639 } | 1672 } |
1640 | 1673 |
1641 if (!IsSubmitPausedOn(wallet::VERIFY_CVV)) { | 1674 if (!IsSubmitPausedOn(wallet::VERIFY_CVV)) { |
1642 const std::vector<wallet::WalletItems::MaskedInstrument*>& instruments = | 1675 const std::vector<wallet::WalletItems::MaskedInstrument*>& instruments = |
1643 wallet_items_->instruments(); | 1676 wallet_items_->instruments(); |
1644 for (size_t i = 0; i < instruments.size(); ++i) { | 1677 for (size_t i = 0; i < instruments.size(); ++i) { |
1645 // TODO(dbeam): respect wallet_items_->default_address_id(). | 1678 // TODO(dbeam): respect wallet_items_->default_address_id(). |
1646 suggested_cc_billing_.AddKeyedItemWithSublabelAndIcon( | 1679 suggested_cc_billing_.AddKeyedItemWithSublabelAndIcon( |
1647 base::IntToString(i), | 1680 base::IntToString(i), |
1648 instruments[i]->DisplayName(), | 1681 instruments[i]->DisplayName(), |
1649 instruments[i]->DisplayNameDetail(), | 1682 instruments[i]->DisplayNameDetail(), |
1650 instruments[i]->CardIcon()); | 1683 instruments[i]->CardIcon()); |
1651 } | 1684 } |
1652 | 1685 |
| 1686 // TODO(estade): this should have a URL sublabel. |
1653 suggested_cc_billing_.AddKeyedItem( | 1687 suggested_cc_billing_.AddKeyedItem( |
1654 std::string(), | 1688 kAddNewItemKey, |
1655 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_BILLING_DETAILS)); | 1689 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_BILLING_DETAILS)); |
| 1690 suggested_cc_billing_.AddKeyedItem( |
| 1691 kManageItemsKey, |
| 1692 l10n_util::GetStringUTF16( |
| 1693 IDS_AUTOFILL_DIALOG_MANAGE_BILLING_DETAILS)); |
1656 } | 1694 } |
1657 } else { | 1695 } else { |
1658 PersonalDataManager* manager = GetManager(); | 1696 PersonalDataManager* manager = GetManager(); |
1659 const std::vector<CreditCard*>& cards = manager->credit_cards(); | 1697 const std::vector<CreditCard*>& cards = manager->credit_cards(); |
1660 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 1698 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
1661 for (size_t i = 0; i < cards.size(); ++i) { | 1699 for (size_t i = 0; i < cards.size(); ++i) { |
1662 suggested_cc_.AddKeyedItemWithIcon( | 1700 suggested_cc_.AddKeyedItemWithIcon( |
1663 cards[i]->guid(), | 1701 cards[i]->guid(), |
1664 cards[i]->Label(), | 1702 cards[i]->Label(), |
1665 rb.GetImageNamed(cards[i]->IconResourceId())); | 1703 rb.GetImageNamed(cards[i]->IconResourceId())); |
(...skipping 16 matching lines...) Expand all Loading... |
1682 // Don't add variants for addresses: the email variants are handled above, | 1720 // Don't add variants for addresses: the email variants are handled above, |
1683 // name is part of credit card and we'll just ignore phone number | 1721 // name is part of credit card and we'll just ignore phone number |
1684 // variants. | 1722 // variants. |
1685 suggested_billing_.AddKeyedItem(profiles[i]->guid(), | 1723 suggested_billing_.AddKeyedItem(profiles[i]->guid(), |
1686 profiles[i]->Label()); | 1724 profiles[i]->Label()); |
1687 suggested_shipping_.AddKeyedItem(profiles[i]->guid(), | 1725 suggested_shipping_.AddKeyedItem(profiles[i]->guid(), |
1688 profiles[i]->Label()); | 1726 profiles[i]->Label()); |
1689 } | 1727 } |
1690 | 1728 |
1691 suggested_cc_.AddKeyedItem( | 1729 suggested_cc_.AddKeyedItem( |
1692 std::string(), | 1730 kAddNewItemKey, |
| 1731 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_CREDIT_CARD)); |
| 1732 suggested_cc_.AddKeyedItem( |
| 1733 kManageItemsKey, |
1693 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_CREDIT_CARD)); | 1734 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_CREDIT_CARD)); |
1694 suggested_billing_.AddKeyedItem( | 1735 suggested_billing_.AddKeyedItem( |
1695 std::string(), | 1736 kAddNewItemKey, |
1696 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_BILLING_ADDRESS)); | 1737 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_BILLING_ADDRESS)); |
| 1738 suggested_billing_.AddKeyedItem( |
| 1739 kManageItemsKey, |
| 1740 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_MANAGE_BILLING_ADDRESS)); |
1697 } | 1741 } |
1698 | 1742 |
1699 suggested_email_.AddKeyedItem( | 1743 suggested_email_.AddKeyedItem( |
1700 std::string(), | 1744 kAddNewItemKey, |
1701 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_EMAIL_ADDRESS)); | 1745 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_EMAIL_ADDRESS)); |
| 1746 if (!IsPayingWithWallet()) { |
| 1747 suggested_email_.AddKeyedItem( |
| 1748 kManageItemsKey, |
| 1749 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_MANAGE_EMAIL_ADDRESS)); |
| 1750 } |
| 1751 |
1702 suggested_shipping_.AddKeyedItem( | 1752 suggested_shipping_.AddKeyedItem( |
1703 std::string(), | 1753 kAddNewItemKey, |
1704 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_SHIPPING_ADDRESS)); | 1754 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_ADD_SHIPPING_ADDRESS)); |
| 1755 suggested_shipping_.AddKeyedItem( |
| 1756 kManageItemsKey, |
| 1757 l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_MANAGE_SHIPPING_ADDRESS)); |
1705 | 1758 |
1706 if (view_) | 1759 if (view_) |
1707 view_->ModelChanged(); | 1760 view_->ModelChanged(); |
1708 } | 1761 } |
1709 | 1762 |
1710 bool AutofillDialogControllerImpl::IsCompleteProfile( | 1763 bool AutofillDialogControllerImpl::IsCompleteProfile( |
1711 const AutofillProfile& profile) { | 1764 const AutofillProfile& profile) { |
1712 const std::string app_locale = g_browser_process->GetApplicationLocale(); | 1765 const std::string app_locale = g_browser_process->GetApplicationLocale(); |
1713 for (size_t i = 0; i < requested_shipping_fields_.size(); ++i) { | 1766 for (size_t i = 0; i < requested_shipping_fields_.size(); ++i) { |
1714 AutofillFieldType type = requested_shipping_fields_[i].type; | 1767 AutofillFieldType type = requested_shipping_fields_[i].type; |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1813 case SECTION_SHIPPING: | 1866 case SECTION_SHIPPING: |
1814 return &suggested_shipping_; | 1867 return &suggested_shipping_; |
1815 case SECTION_CC_BILLING: | 1868 case SECTION_CC_BILLING: |
1816 return &suggested_cc_billing_; | 1869 return &suggested_cc_billing_; |
1817 } | 1870 } |
1818 | 1871 |
1819 NOTREACHED(); | 1872 NOTREACHED(); |
1820 return NULL; | 1873 return NULL; |
1821 } | 1874 } |
1822 | 1875 |
| 1876 const SuggestionsMenuModel* AutofillDialogControllerImpl:: |
| 1877 SuggestionsMenuModelForSection(DialogSection section) const { |
| 1878 return const_cast<AutofillDialogControllerImpl*>(this)-> |
| 1879 SuggestionsMenuModelForSection(section); |
| 1880 } |
| 1881 |
1823 DialogSection AutofillDialogControllerImpl::SectionForSuggestionsMenuModel( | 1882 DialogSection AutofillDialogControllerImpl::SectionForSuggestionsMenuModel( |
1824 const SuggestionsMenuModel& model) { | 1883 const SuggestionsMenuModel& model) { |
1825 if (&model == &suggested_email_) | 1884 if (&model == &suggested_email_) |
1826 return SECTION_EMAIL; | 1885 return SECTION_EMAIL; |
1827 | 1886 |
1828 if (&model == &suggested_cc_) | 1887 if (&model == &suggested_cc_) |
1829 return SECTION_CC; | 1888 return SECTION_CC; |
1830 | 1889 |
1831 if (&model == &suggested_billing_) | 1890 if (&model == &suggested_billing_) |
1832 return SECTION_BILLING; | 1891 return SECTION_BILLING; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1879 | 1938 |
1880 void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData( | 1939 void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData( |
1881 scoped_ptr<risk::Fingerprint> fingerprint) { | 1940 scoped_ptr<risk::Fingerprint> fingerprint) { |
1882 NOTIMPLEMENTED(); | 1941 NOTIMPLEMENTED(); |
1883 } | 1942 } |
1884 | 1943 |
1885 bool AutofillDialogControllerImpl::IsManuallyEditingSection( | 1944 bool AutofillDialogControllerImpl::IsManuallyEditingSection( |
1886 DialogSection section) { | 1945 DialogSection section) { |
1887 return section_editing_state_[section] || | 1946 return section_editing_state_[section] || |
1888 SuggestionsMenuModelForSection(section)-> | 1947 SuggestionsMenuModelForSection(section)-> |
1889 GetItemKeyForCheckedItem().empty(); | 1948 GetItemKeyForCheckedItem() == kAddNewItemKey; |
| 1949 } |
| 1950 |
| 1951 bool AutofillDialogControllerImpl::IsASuggestionItemKey( |
| 1952 const std::string& key) { |
| 1953 return !key.empty() && |
| 1954 key != kAddNewItemKey && |
| 1955 key != kManageItemsKey && |
| 1956 key != kSameAsBillingKey; |
1890 } | 1957 } |
1891 | 1958 |
1892 bool AutofillDialogControllerImpl::ShouldUseBillingForShipping() { | 1959 bool AutofillDialogControllerImpl::ShouldUseBillingForShipping() { |
1893 // If the user is editing or inputting data, ask the view. | 1960 return suggested_shipping_.GetItemKeyForCheckedItem() == kSameAsBillingKey; |
1894 if (IsManuallyEditingSection(SECTION_SHIPPING)) | |
1895 return view_->UseBillingForShipping(); | |
1896 | |
1897 // Otherwise, the checkbox should be hidden so its state is irrelevant. | |
1898 // Always use the shipping suggestion model. | |
1899 return false; | |
1900 } | 1961 } |
1901 | 1962 |
1902 bool AutofillDialogControllerImpl::ShouldSaveDetailsLocally() { | 1963 bool AutofillDialogControllerImpl::ShouldSaveDetailsLocally() { |
1903 // It's possible that the user checked [X] Save details locally before | 1964 // It's possible that the user checked [X] Save details locally before |
1904 // switching payment methods, so only ask the view whether to save details | 1965 // switching payment methods, so only ask the view whether to save details |
1905 // locally if that checkbox is showing (currently if not paying with wallet). | 1966 // locally if that checkbox is showing (currently if not paying with wallet). |
1906 return !IsPayingWithWallet() && view_->SaveDetailsLocally(); | 1967 return !IsPayingWithWallet() && view_->SaveDetailsLocally(); |
1907 } | 1968 } |
1908 | 1969 |
1909 void AutofillDialogControllerImpl::SetIsSubmitting(bool submitting) { | 1970 void AutofillDialogControllerImpl::SetIsSubmitting(bool submitting) { |
(...skipping 11 matching lines...) Expand all Loading... |
1921 void AutofillDialogControllerImpl::SubmitWithWallet() { | 1982 void AutofillDialogControllerImpl::SubmitWithWallet() { |
1922 // TODO(dbeam): disallow interacting with the dialog while submitting. | 1983 // TODO(dbeam): disallow interacting with the dialog while submitting. |
1923 | 1984 |
1924 active_instrument_id_.clear(); | 1985 active_instrument_id_.clear(); |
1925 active_address_id_.clear(); | 1986 active_address_id_.clear(); |
1926 full_wallet_.reset(); | 1987 full_wallet_.reset(); |
1927 | 1988 |
1928 if (!section_editing_state_[SECTION_CC_BILLING]) { | 1989 if (!section_editing_state_[SECTION_CC_BILLING]) { |
1929 SuggestionsMenuModel* billing = | 1990 SuggestionsMenuModel* billing = |
1930 SuggestionsMenuModelForSection(SECTION_CC_BILLING); | 1991 SuggestionsMenuModelForSection(SECTION_CC_BILLING); |
1931 if (!billing->GetItemKeyForCheckedItem().empty() && | 1992 if (IsASuggestionItemKey(billing->GetItemKeyForCheckedItem()) && |
1932 billing->checked_item() < | 1993 billing->checked_item() < |
1933 static_cast<int>(wallet_items_->instruments().size())) { | 1994 static_cast<int>(wallet_items_->instruments().size())) { |
1934 const wallet::WalletItems::MaskedInstrument* active_instrument = | 1995 const wallet::WalletItems::MaskedInstrument* active_instrument = |
1935 wallet_items_->instruments()[billing->checked_item()]; | 1996 wallet_items_->instruments()[billing->checked_item()]; |
1936 active_instrument_id_ = active_instrument->object_id(); | 1997 active_instrument_id_ = active_instrument->object_id(); |
1937 | 1998 |
1938 // TODO(dbeam): does re-using instrument address IDs work? | 1999 // TODO(dbeam): does re-using instrument address IDs work? |
1939 if (ShouldUseBillingForShipping()) | 2000 if (ShouldUseBillingForShipping()) |
1940 active_address_id_ = active_instrument->address().object_id(); | 2001 active_address_id_ = active_instrument->address().object_id(); |
1941 } | 2002 } |
1942 } | 2003 } |
1943 | 2004 |
1944 if (!section_editing_state_[SECTION_SHIPPING] && active_address_id_.empty()) { | 2005 if (!section_editing_state_[SECTION_SHIPPING] && active_address_id_.empty()) { |
1945 SuggestionsMenuModel* shipping = | 2006 SuggestionsMenuModel* shipping = |
1946 SuggestionsMenuModelForSection(SECTION_SHIPPING); | 2007 SuggestionsMenuModelForSection(SECTION_SHIPPING); |
1947 if (!shipping->GetItemKeyForCheckedItem().empty() && | 2008 if (IsASuggestionItemKey(shipping->GetItemKeyForCheckedItem()) && |
1948 shipping->checked_item() < | 2009 shipping->checked_item() < |
1949 static_cast<int>(wallet_items_->addresses().size())) { | 2010 static_cast<int>(wallet_items_->addresses().size())) { |
1950 active_address_id_ = | 2011 active_address_id_ = |
1951 wallet_items_->addresses()[shipping->checked_item()]->object_id(); | 2012 wallet_items_->addresses()[shipping->checked_item()]->object_id(); |
1952 } | 2013 } |
1953 } | 2014 } |
1954 | 2015 |
1955 GetWalletClient()->AcceptLegalDocuments( | 2016 GetWalletClient()->AcceptLegalDocuments( |
1956 wallet_items_->legal_documents(), | 2017 wallet_items_->legal_documents(), |
1957 wallet_items_->google_transaction_id(), | 2018 wallet_items_->google_transaction_id(), |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2085 AutofillMetrics::DIALOG_USER_SIGNED_IN_NO_WALLET_NO_AUTOFILL; | 2146 AutofillMetrics::DIALOG_USER_SIGNED_IN_NO_WALLET_NO_AUTOFILL; |
2086 } | 2147 } |
2087 | 2148 |
2088 // Has Wallet items. | 2149 // Has Wallet items. |
2089 return has_autofill_profiles ? | 2150 return has_autofill_profiles ? |
2090 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_HAS_AUTOFILL : | 2151 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_HAS_AUTOFILL : |
2091 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_NO_AUTOFILL; | 2152 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_NO_AUTOFILL; |
2092 } | 2153 } |
2093 | 2154 |
2094 } // namespace autofill | 2155 } // namespace autofill |
OLD | NEW |