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/base64.h" | |
10 #include "base/bind.h" | 11 #include "base/bind.h" |
11 #include "base/logging.h" | 12 #include "base/logging.h" |
12 #include "base/prefs/pref_service.h" | 13 #include "base/prefs/pref_service.h" |
13 #include "base/string_util.h" | 14 #include "base/string_util.h" |
14 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
15 #include "base/strings/string_split.h" | 16 #include "base/strings/string_split.h" |
16 #include "base/time.h" | 17 #include "base/time.h" |
17 #include "base/utf_string_conversions.h" | 18 #include "base/utf_string_conversions.h" |
18 #include "chrome/browser/autofill/personal_data_manager_factory.h" | 19 #include "chrome/browser/autofill/personal_data_manager_factory.h" |
19 #include "chrome/browser/browser_process.h" | 20 #include "chrome/browser/browser_process.h" |
(...skipping 1473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1493 | 1494 |
1494 const AutofillMetrics& AutofillDialogControllerImpl::GetMetricLogger() const { | 1495 const AutofillMetrics& AutofillDialogControllerImpl::GetMetricLogger() const { |
1495 return metric_logger_; | 1496 return metric_logger_; |
1496 } | 1497 } |
1497 | 1498 |
1498 DialogType AutofillDialogControllerImpl::GetDialogType() const { | 1499 DialogType AutofillDialogControllerImpl::GetDialogType() const { |
1499 return dialog_type_; | 1500 return dialog_type_; |
1500 } | 1501 } |
1501 | 1502 |
1502 std::string AutofillDialogControllerImpl::GetRiskData() const { | 1503 std::string AutofillDialogControllerImpl::GetRiskData() const { |
1503 // TODO(dbeam): Implement this. | 1504 // TODO(dbeam): remove the server restriction that this must not be empty. |
Ilya Sherman
2013/05/22 22:34:24
Could you file a tracking bug for the specific cha
Ilya Sherman
2013/05/22 23:53:59
^^^
Dan Beam
2013/05/23 00:30:40
omitting risk params works now, I've updated the c
| |
1504 return "risky business"; | 1505 return risk_data_.empty() ? "risky business" : risk_data_; |
1505 } | 1506 } |
1506 | 1507 |
1507 void AutofillDialogControllerImpl::OnDidAcceptLegalDocuments() { | 1508 void AutofillDialogControllerImpl::OnDidAcceptLegalDocuments() { |
1508 // TODO(dbeam): Don't send risk params until legal documents are accepted: | 1509 accepted_legal_documents_ = true; |
1509 // http://crbug.com/173505 | 1510 LoadRiskFingerprintData(); |
Ilya Sherman
2013/05/22 22:34:24
Is this method guaranteed to only be called after
Dan Beam
2013/05/22 23:25:20
Done.
| |
1510 } | 1511 } |
1511 | 1512 |
1512 void AutofillDialogControllerImpl::OnDidAuthenticateInstrument(bool success) { | 1513 void AutofillDialogControllerImpl::OnDidAuthenticateInstrument(bool success) { |
1513 DCHECK(is_submitting_ && IsPayingWithWallet()); | 1514 DCHECK(is_submitting_ && IsPayingWithWallet()); |
1514 | 1515 |
1515 // TODO(dbeam): use the returned full wallet. b/8332329 | 1516 // TODO(dbeam): use the returned full wallet. b/8332329 |
1516 if (success) | 1517 if (success) |
1517 GetFullWallet(); | 1518 GetFullWallet(); |
1518 else | 1519 else |
1519 DisableWallet(); | 1520 DisableWallet(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1574 const GoogleServiceAuthError& error) { | 1575 const GoogleServiceAuthError& error) { |
1575 // TODO(aruslan): report an error. | 1576 // TODO(aruslan): report an error. |
1576 LOG(ERROR) << "failed to automatically sign in: " << error.ToString(); | 1577 LOG(ERROR) << "failed to automatically sign in: " << error.ToString(); |
1577 OnWalletSigninError(); | 1578 OnWalletSigninError(); |
1578 } | 1579 } |
1579 | 1580 |
1580 void AutofillDialogControllerImpl::OnDidGetWalletItems( | 1581 void AutofillDialogControllerImpl::OnDidGetWalletItems( |
1581 scoped_ptr<wallet::WalletItems> wallet_items) { | 1582 scoped_ptr<wallet::WalletItems> wallet_items) { |
1582 legal_documents_text_.clear(); | 1583 legal_documents_text_.clear(); |
1583 legal_document_link_ranges_.clear(); | 1584 legal_document_link_ranges_.clear(); |
1585 accepted_legal_documents_ = false; | |
1584 | 1586 |
1585 // TODO(dbeam): verify items support kCartCurrency? http://crbug.com/232952 | 1587 // TODO(dbeam): verify items support kCartCurrency? http://crbug.com/232952 |
1586 wallet_items_ = wallet_items.Pass(); | 1588 wallet_items_ = wallet_items.Pass(); |
1587 OnWalletOrSigninUpdate(); | 1589 OnWalletOrSigninUpdate(); |
1588 } | 1590 } |
1589 | 1591 |
1590 void AutofillDialogControllerImpl::OnDidSaveAddress( | 1592 void AutofillDialogControllerImpl::OnDidSaveAddress( |
1591 const std::string& address_id, | 1593 const std::string& address_id, |
1592 const std::vector<wallet::RequiredAction>& required_actions) { | 1594 const std::vector<wallet::RequiredAction>& required_actions) { |
1593 DCHECK(is_submitting_ && IsPayingWithWallet()); | 1595 DCHECK(is_submitting_ && IsPayingWithWallet()); |
Dan Beam
2013/05/22 23:25:20
^ this DCHECK()
| |
1594 | 1596 |
1595 if (required_actions.empty()) { | 1597 if (required_actions.empty()) { |
1596 active_address_id_ = address_id; | 1598 active_address_id_ = address_id; |
1597 if (!active_instrument_id_.empty()) | 1599 GetFullWalletIfReady(); |
1598 GetFullWallet(); | |
1599 } else { | 1600 } else { |
1600 HandleSaveOrUpdateRequiredActions(required_actions); | 1601 HandleSaveOrUpdateRequiredActions(required_actions); |
1601 } | 1602 } |
1602 } | 1603 } |
1603 | 1604 |
1604 void AutofillDialogControllerImpl::OnDidSaveInstrument( | 1605 void AutofillDialogControllerImpl::OnDidSaveInstrument( |
1605 const std::string& instrument_id, | 1606 const std::string& instrument_id, |
1606 const std::vector<wallet::RequiredAction>& required_actions) { | 1607 const std::vector<wallet::RequiredAction>& required_actions) { |
1607 DCHECK(is_submitting_ && IsPayingWithWallet()); | 1608 DCHECK(is_submitting_ && IsPayingWithWallet()); |
1608 | 1609 |
1609 if (required_actions.empty()) { | 1610 if (required_actions.empty()) { |
1610 active_instrument_id_ = instrument_id; | 1611 active_instrument_id_ = instrument_id; |
1611 if (!active_address_id_.empty()) | 1612 GetFullWalletIfReady(); |
1612 GetFullWallet(); | |
1613 } else { | 1613 } else { |
1614 HandleSaveOrUpdateRequiredActions(required_actions); | 1614 HandleSaveOrUpdateRequiredActions(required_actions); |
1615 } | 1615 } |
1616 } | 1616 } |
1617 | 1617 |
1618 void AutofillDialogControllerImpl::OnDidSaveInstrumentAndAddress( | 1618 void AutofillDialogControllerImpl::OnDidSaveInstrumentAndAddress( |
1619 const std::string& instrument_id, | 1619 const std::string& instrument_id, |
1620 const std::string& address_id, | 1620 const std::string& address_id, |
1621 const std::vector<wallet::RequiredAction>& required_actions) { | 1621 const std::vector<wallet::RequiredAction>& required_actions) { |
1622 OnDidSaveInstrument(instrument_id, required_actions); | 1622 OnDidSaveInstrument(instrument_id, required_actions); |
1623 OnDidSaveAddress(address_id, required_actions); | 1623 if (is_submitting_) |
1624 OnDidSaveAddress(address_id, required_actions); | |
Ilya Sherman
2013/05/22 22:34:24
Why is the address treated differently than the pa
Dan Beam
2013/05/22 23:25:20
OnDidSaveInstrument() can set is_submitting_ to fa
Ilya Sherman
2013/05/22 23:53:59
Ah, ok. Please add a comment to this effect so th
Dan Beam
2013/05/23 00:30:40
Done.
| |
1624 } | 1625 } |
1625 | 1626 |
1626 void AutofillDialogControllerImpl::OnDidUpdateAddress( | 1627 void AutofillDialogControllerImpl::OnDidUpdateAddress( |
1627 const std::string& address_id, | 1628 const std::string& address_id, |
1628 const std::vector<wallet::RequiredAction>& required_actions) { | 1629 const std::vector<wallet::RequiredAction>& required_actions) { |
1629 OnDidSaveAddress(address_id, required_actions); | 1630 OnDidSaveAddress(address_id, required_actions); |
1630 } | 1631 } |
1631 | 1632 |
1632 void AutofillDialogControllerImpl::OnDidUpdateInstrument( | 1633 void AutofillDialogControllerImpl::OnDidUpdateInstrument( |
1633 const std::string& instrument_id, | 1634 const std::string& instrument_id, |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1724 wallet_client_(profile_->GetRequestContext(), this), | 1725 wallet_client_(profile_->GetRequestContext(), this), |
1725 suggested_email_(this), | 1726 suggested_email_(this), |
1726 suggested_cc_(this), | 1727 suggested_cc_(this), |
1727 suggested_billing_(this), | 1728 suggested_billing_(this), |
1728 suggested_cc_billing_(this), | 1729 suggested_cc_billing_(this), |
1729 suggested_shipping_(this), | 1730 suggested_shipping_(this), |
1730 input_showing_popup_(NULL), | 1731 input_showing_popup_(NULL), |
1731 weak_ptr_factory_(this), | 1732 weak_ptr_factory_(this), |
1732 is_first_run_(!profile_->GetPrefs()->HasPrefPath( | 1733 is_first_run_(!profile_->GetPrefs()->HasPrefPath( |
1733 ::prefs::kAutofillDialogPayWithoutWallet)), | 1734 ::prefs::kAutofillDialogPayWithoutWallet)), |
1735 accepted_legal_documents_(false), | |
1734 is_submitting_(false), | 1736 is_submitting_(false), |
1735 wallet_server_validation_error_(false), | 1737 wallet_server_validation_error_(false), |
1736 autocheckout_state_(AUTOCHECKOUT_NOT_STARTED), | 1738 autocheckout_state_(AUTOCHECKOUT_NOT_STARTED), |
1737 was_ui_latency_logged_(false) { | 1739 was_ui_latency_logged_(false) { |
1738 // TODO(estade): remove duplicates from |form_structure|? | 1740 // TODO(estade): remove duplicates from |form_structure|? |
1739 DCHECK(!callback_.is_null()); | 1741 DCHECK(!callback_.is_null()); |
1740 } | 1742 } |
1741 | 1743 |
1742 AutofillDialogView* AutofillDialogControllerImpl::CreateView() { | 1744 AutofillDialogView* AutofillDialogControllerImpl::CreateView() { |
1743 return AutofillDialogView::Create(this); | 1745 return AutofillDialogView::Create(this); |
1744 } | 1746 } |
1745 | 1747 |
1746 PersonalDataManager* AutofillDialogControllerImpl::GetManager() { | 1748 PersonalDataManager* AutofillDialogControllerImpl::GetManager() { |
1747 return PersonalDataManagerFactory::GetForProfile(profile_); | 1749 return PersonalDataManagerFactory::GetForProfile(profile_); |
1748 } | 1750 } |
1749 | 1751 |
1750 wallet::WalletClient* AutofillDialogControllerImpl::GetWalletClient() { | 1752 wallet::WalletClient* AutofillDialogControllerImpl::GetWalletClient() { |
1751 return &wallet_client_; | 1753 return &wallet_client_; |
1752 } | 1754 } |
1753 | 1755 |
1754 bool AutofillDialogControllerImpl::IsPayingWithWallet() const { | 1756 bool AutofillDialogControllerImpl::IsPayingWithWallet() const { |
1755 return account_chooser_model_.WalletIsSelected() && | 1757 return account_chooser_model_.WalletIsSelected() && |
1756 SignedInState() == SIGNED_IN; | 1758 SignedInState() == SIGNED_IN; |
1757 } | 1759 } |
1758 | 1760 |
1759 bool AutofillDialogControllerImpl::IsFirstRun() const { | 1761 bool AutofillDialogControllerImpl::IsFirstRun() const { |
1760 return is_first_run_; | 1762 return is_first_run_; |
1761 } | 1763 } |
1762 | 1764 |
1765 void AutofillDialogControllerImpl::LoadRiskFingerprintData() { | |
1766 DCHECK(LegalDocumentsAreCurrent()); | |
1767 | |
1768 // Clear potential stale data to ensure |GetFullWalletIfReady()| triggers only | |
1769 // when a new fingerprint is loaded. | |
1770 risk_data_.clear(); | |
1771 | |
1772 uint64 obfuscated_gaia_id = 0; | |
1773 bool success = base::StringToUint64(wallet_items_->obfuscated_gaia_id(), | |
1774 &obfuscated_gaia_id); | |
1775 DCHECK(success); | |
1776 | |
1777 gfx::Rect window_bounds; | |
1778 #if !defined(OS_ANDROID) | |
1779 window_bounds = GetBaseWindowForWebContents(web_contents())->GetBounds(); | |
1780 #else | |
1781 // TODO(dbeam): figure out the correct browser window size to pass along for | |
1782 // android. | |
1783 #endif | |
1784 | |
1785 PrefService* user_prefs = profile_->GetPrefs(); | |
1786 std::string charset = user_prefs->GetString(::prefs::kDefaultCharset); | |
1787 std::string accept_languages = | |
1788 user_prefs->GetString(::prefs::kAcceptLanguages); | |
1789 base::Time install_time = base::Time::FromTimeT( | |
1790 g_browser_process->local_state()->GetInt64(::prefs::kInstallDate)); | |
1791 | |
1792 risk::GetFingerprint( | |
1793 obfuscated_gaia_id, window_bounds, *web_contents(), | |
1794 chrome::VersionInfo().Version(), charset, accept_languages, install_time, | |
1795 dialog_type_, g_browser_process->GetApplicationLocale(), | |
1796 base::Bind(&AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData, | |
1797 weak_ptr_factory_.GetWeakPtr())); | |
1798 } | |
1799 | |
1763 void AutofillDialogControllerImpl::OpenTabWithUrl(const GURL& url) { | 1800 void AutofillDialogControllerImpl::OpenTabWithUrl(const GURL& url) { |
1764 #if !defined(OS_ANDROID) | 1801 #if !defined(OS_ANDROID) |
1765 chrome::NavigateParams params( | 1802 chrome::NavigateParams params( |
1766 chrome::FindBrowserWithWebContents(web_contents()), | 1803 chrome::FindBrowserWithWebContents(web_contents()), |
1767 url, | 1804 url, |
1768 content::PAGE_TRANSITION_AUTO_BOOKMARK); | 1805 content::PAGE_TRANSITION_AUTO_BOOKMARK); |
1769 params.disposition = NEW_FOREGROUND_TAB; | 1806 params.disposition = NEW_FOREGROUND_TAB; |
1770 chrome::Navigate(¶ms); | 1807 chrome::Navigate(¶ms); |
1771 #else | 1808 #else |
1772 // TODO(estade): use TabModelList? | 1809 // TODO(estade): use TabModelList? |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2094 DialogSection section) { | 2131 DialogSection section) { |
2095 return const_cast<DetailInputs*>(&RequestedFieldsForSection(section)); | 2132 return const_cast<DetailInputs*>(&RequestedFieldsForSection(section)); |
2096 } | 2133 } |
2097 | 2134 |
2098 void AutofillDialogControllerImpl::HidePopup() { | 2135 void AutofillDialogControllerImpl::HidePopup() { |
2099 if (popup_controller_) | 2136 if (popup_controller_) |
2100 popup_controller_->Hide(); | 2137 popup_controller_->Hide(); |
2101 input_showing_popup_ = NULL; | 2138 input_showing_popup_ = NULL; |
2102 } | 2139 } |
2103 | 2140 |
2104 void AutofillDialogControllerImpl::LoadRiskFingerprintData() { | |
2105 // TODO(dbeam): Add a CHECK or otherwise strong guarantee that the ToS have | |
2106 // been accepted prior to calling into this method. Also, ensure that the UI | |
2107 // contains a clear indication to the user as to what data will be collected. | |
2108 // Until then, this code should not be called. http://crbug.com/173505 | |
2109 | |
2110 int64 gaia_id = 0; | |
2111 bool success = | |
2112 base::StringToInt64(wallet_items_->obfuscated_gaia_id(), &gaia_id); | |
2113 DCHECK(success); | |
2114 | |
2115 gfx::Rect window_bounds = | |
2116 GetBaseWindowForWebContents(web_contents())->GetBounds(); | |
2117 | |
2118 PrefService* user_prefs = profile_->GetPrefs(); | |
2119 std::string charset = user_prefs->GetString(::prefs::kDefaultCharset); | |
2120 std::string accept_languages = | |
2121 user_prefs->GetString(::prefs::kAcceptLanguages); | |
2122 base::Time install_time = base::Time::FromTimeT( | |
2123 g_browser_process->local_state()->GetInt64(::prefs::kInstallDate)); | |
2124 | |
2125 risk::GetFingerprint( | |
2126 gaia_id, window_bounds, *web_contents(), chrome::VersionInfo().Version(), | |
2127 charset, accept_languages, install_time, GetDialogType(), | |
2128 g_browser_process->GetApplicationLocale(), | |
2129 base::Bind(&AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData, | |
2130 weak_ptr_factory_.GetWeakPtr())); | |
2131 } | |
2132 | |
2133 void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData( | 2141 void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData( |
2134 scoped_ptr<risk::Fingerprint> fingerprint) { | 2142 scoped_ptr<risk::Fingerprint> fingerprint) { |
2135 NOTIMPLEMENTED(); | 2143 DCHECK(LegalDocumentsAreCurrent()); |
2144 | |
2145 std::string proto_data; | |
2146 fingerprint->SerializeToString(&proto_data); | |
2147 bool success = base::Base64Encode(proto_data, &risk_data_); | |
2148 DCHECK(success); | |
2149 | |
2150 GetFullWalletIfReady(); | |
2136 } | 2151 } |
2137 | 2152 |
2138 bool AutofillDialogControllerImpl::IsManuallyEditingSection( | 2153 bool AutofillDialogControllerImpl::IsManuallyEditingSection( |
2139 DialogSection section) const { | 2154 DialogSection section) const { |
2140 std::map<DialogSection, bool>::const_iterator it = | 2155 std::map<DialogSection, bool>::const_iterator it = |
2141 section_editing_state_.find(section); | 2156 section_editing_state_.find(section); |
2142 return (it != section_editing_state_.end() && it->second) || | 2157 return (it != section_editing_state_.end() && it->second) || |
2143 SuggestionsMenuModelForSection(section)-> | 2158 SuggestionsMenuModelForSection(section)-> |
2144 GetItemKeyForCheckedItem() == kAddNewItemKey; | 2159 GetItemKeyForCheckedItem() == kAddNewItemKey; |
2145 } | 2160 } |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2233 | 2248 |
2234 void AutofillDialogControllerImpl::SetIsSubmitting(bool submitting) { | 2249 void AutofillDialogControllerImpl::SetIsSubmitting(bool submitting) { |
2235 is_submitting_ = submitting; | 2250 is_submitting_ = submitting; |
2236 | 2251 |
2237 if (view_) { | 2252 if (view_) { |
2238 view_->UpdateButtonStrip(); | 2253 view_->UpdateButtonStrip(); |
2239 view_->UpdateNotificationArea(); | 2254 view_->UpdateNotificationArea(); |
2240 } | 2255 } |
2241 } | 2256 } |
2242 | 2257 |
2258 bool AutofillDialogControllerImpl::LegalDocumentsAreCurrent() const { | |
2259 return accepted_legal_documents_ || | |
2260 (wallet_items_ && wallet_items_->legal_documents().empty()); | |
2261 } | |
2262 | |
2243 void AutofillDialogControllerImpl::SubmitWithWallet() { | 2263 void AutofillDialogControllerImpl::SubmitWithWallet() { |
2244 // TODO(dbeam): disallow interacting with the dialog while submitting. | 2264 // TODO(dbeam): disallow interacting with the dialog while submitting. |
2245 // http://crbug.com/230932 | 2265 // http://crbug.com/230932 |
2246 | 2266 |
2247 active_instrument_id_.clear(); | 2267 active_instrument_id_.clear(); |
2248 active_address_id_.clear(); | 2268 active_address_id_.clear(); |
2249 full_wallet_.reset(); | 2269 full_wallet_.reset(); |
2250 | 2270 |
2251 content::BrowserThread::PostTask( | 2271 content::BrowserThread::PostTask( |
2252 content::BrowserThread::IO, FROM_HERE, | 2272 content::BrowserThread::IO, FROM_HERE, |
2253 base::Bind(&UserDidOptIntoLocationServices)); | 2273 base::Bind(&UserDidOptIntoLocationServices)); |
2254 | 2274 |
2255 GetWalletClient()->AcceptLegalDocuments( | 2275 GetWalletClient()->AcceptLegalDocuments( |
2256 wallet_items_->legal_documents(), | 2276 wallet_items_->legal_documents(), |
2257 wallet_items_->google_transaction_id(), | 2277 wallet_items_->google_transaction_id(), |
2258 source_url_); | 2278 source_url_); |
2259 | 2279 |
2280 if (LegalDocumentsAreCurrent()) | |
2281 LoadRiskFingerprintData(); | |
2282 | |
2260 SuggestionsMenuModel* billing = | 2283 SuggestionsMenuModel* billing = |
2261 SuggestionsMenuModelForSection(SECTION_CC_BILLING); | 2284 SuggestionsMenuModelForSection(SECTION_CC_BILLING); |
2262 int instrument_index = -1; | 2285 int instrument_index = -1; |
2263 base::StringToInt(billing->GetItemKeyForCheckedItem(), &instrument_index); | 2286 base::StringToInt(billing->GetItemKeyForCheckedItem(), &instrument_index); |
2264 | 2287 |
2265 if (!IsManuallyEditingSection(SECTION_CC_BILLING)) { | 2288 if (!IsManuallyEditingSection(SECTION_CC_BILLING)) { |
2266 active_instrument_id_ = | 2289 active_instrument_id_ = |
2267 wallet_items_->instruments()[instrument_index]->object_id(); | 2290 wallet_items_->instruments()[instrument_index]->object_id(); |
2268 DCHECK(!active_instrument_id_.empty()); | 2291 DCHECK(!active_instrument_id_.empty()); |
2269 } | 2292 } |
2270 | 2293 |
2271 SuggestionsMenuModel* shipping = | 2294 SuggestionsMenuModel* shipping = |
2272 SuggestionsMenuModelForSection(SECTION_SHIPPING); | 2295 SuggestionsMenuModelForSection(SECTION_SHIPPING); |
2273 int address_index = -1; | 2296 int address_index = -1; |
2274 base::StringToInt(shipping->GetItemKeyForCheckedItem(), &address_index); | 2297 base::StringToInt(shipping->GetItemKeyForCheckedItem(), &address_index); |
2275 | 2298 |
2276 if (!IsManuallyEditingSection(SECTION_SHIPPING) && | 2299 if (!IsManuallyEditingSection(SECTION_SHIPPING) && |
2277 shipping->GetItemKeyForCheckedItem() != kSameAsBillingKey) { | 2300 shipping->GetItemKeyForCheckedItem() != kSameAsBillingKey) { |
2278 active_address_id_ = | 2301 active_address_id_ = |
2279 wallet_items_->addresses()[address_index]->object_id(); | 2302 wallet_items_->addresses()[address_index]->object_id(); |
2280 DCHECK(!active_address_id_.empty()); | 2303 DCHECK(!active_address_id_.empty()); |
2281 } | 2304 } |
2282 | 2305 |
2283 if (!active_instrument_id_.empty() && !active_address_id_.empty()) { | 2306 if (!active_instrument_id_.empty() && !active_address_id_.empty()) |
Ilya Sherman
2013/05/22 22:34:24
This block could use a comment now. Seems like it
Dan Beam
2013/05/22 23:25:20
Done.
| |
2284 GetFullWallet(); | |
2285 return; | 2307 return; |
2286 } | |
2287 | 2308 |
2288 scoped_ptr<wallet::Instrument> inputted_instrument = | 2309 scoped_ptr<wallet::Instrument> inputted_instrument = |
2289 CreateTransientInstrument(); | 2310 CreateTransientInstrument(); |
2290 scoped_ptr<wallet::WalletClient::UpdateInstrumentRequest> update_request = | 2311 scoped_ptr<wallet::WalletClient::UpdateInstrumentRequest> update_request = |
2291 CreateUpdateInstrumentRequest( | 2312 CreateUpdateInstrumentRequest( |
2292 inputted_instrument.get(), | 2313 inputted_instrument.get(), |
2293 !section_editing_state_[SECTION_CC_BILLING] ? std::string() : | 2314 !section_editing_state_[SECTION_CC_BILLING] ? std::string() : |
2294 wallet_items_->instruments()[instrument_index]->object_id()); | 2315 wallet_items_->instruments()[instrument_index]->object_id()); |
2295 | 2316 |
2296 scoped_ptr<wallet::Address> inputted_address; | 2317 scoped_ptr<wallet::Address> inputted_address; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2383 DetailOutputMap output; | 2404 DetailOutputMap output; |
2384 view_->GetUserInput(SECTION_SHIPPING, &output); | 2405 view_->GetUserInput(SECTION_SHIPPING, &output); |
2385 | 2406 |
2386 AutofillProfile profile; | 2407 AutofillProfile profile; |
2387 FillFormGroupFromOutputs(output, &profile); | 2408 FillFormGroupFromOutputs(output, &profile); |
2388 | 2409 |
2389 return scoped_ptr<wallet::Address>(new wallet::Address(profile)); | 2410 return scoped_ptr<wallet::Address>(new wallet::Address(profile)); |
2390 } | 2411 } |
2391 | 2412 |
2392 void AutofillDialogControllerImpl::GetFullWallet() { | 2413 void AutofillDialogControllerImpl::GetFullWallet() { |
2393 DCHECK(is_submitting_); | 2414 DCHECK(is_submitting_ && IsPayingWithWallet()); |
Ilya Sherman
2013/05/22 22:34:24
nit: Better to have these as separate DCHECKs, so
Dan Beam
2013/05/22 23:25:20
Done.
| |
2394 DCHECK(IsPayingWithWallet()); | |
2395 DCHECK(wallet_items_); | |
2396 DCHECK(!active_instrument_id_.empty()); | |
2397 DCHECK(!active_address_id_.empty()); | |
Ilya Sherman
2013/05/22 22:34:24
Why did you remove these DCHECKs?
Dan Beam
2013/05/22 23:25:20
I made this function GetFullWalletIfReady(), but d
| |
2398 | 2415 |
2399 std::vector<wallet::WalletClient::RiskCapability> capabilities; | 2416 std::vector<wallet::WalletClient::RiskCapability> capabilities; |
2400 capabilities.push_back(wallet::WalletClient::VERIFY_CVC); | 2417 capabilities.push_back(wallet::WalletClient::VERIFY_CVC); |
2401 | 2418 |
2402 GetWalletClient()->GetFullWallet(wallet::WalletClient::FullWalletRequest( | 2419 GetWalletClient()->GetFullWallet(wallet::WalletClient::FullWalletRequest( |
2403 active_instrument_id_, | 2420 active_instrument_id_, |
2404 active_address_id_, | 2421 active_address_id_, |
2405 source_url_, | 2422 source_url_, |
2406 wallet::Cart(base::IntToString(kCartMax), kCartCurrency), | 2423 wallet::Cart(base::IntToString(kCartMax), kCartCurrency), |
2407 wallet_items_->google_transaction_id(), | 2424 wallet_items_->google_transaction_id(), |
2408 capabilities)); | 2425 capabilities)); |
2409 } | 2426 } |
2410 | 2427 |
2428 void AutofillDialogControllerImpl::GetFullWalletIfReady() { | |
2429 DCHECK(is_submitting_ && IsPayingWithWallet()); | |
2430 | |
2431 if (!active_instrument_id_.empty() && !active_address_id_.empty() && | |
2432 !risk_data_.empty()) { | |
2433 GetFullWallet(); | |
2434 } | |
2435 } | |
2436 | |
2411 void AutofillDialogControllerImpl::HandleSaveOrUpdateRequiredActions( | 2437 void AutofillDialogControllerImpl::HandleSaveOrUpdateRequiredActions( |
2412 const std::vector<wallet::RequiredAction>& required_actions) { | 2438 const std::vector<wallet::RequiredAction>& required_actions) { |
2413 DCHECK(!required_actions.empty()); | 2439 DCHECK(!required_actions.empty()); |
2414 | 2440 |
2415 for (std::vector<wallet::RequiredAction>::const_iterator iter = | 2441 for (std::vector<wallet::RequiredAction>::const_iterator iter = |
2416 required_actions.begin(); | 2442 required_actions.begin(); |
2417 iter != required_actions.end(); ++iter) { | 2443 iter != required_actions.end(); ++iter) { |
2418 if (*iter == wallet::INVALID_FORM_FIELD) { | 2444 if (*iter == wallet::INVALID_FORM_FIELD) { |
2419 wallet_server_validation_error_ = true; | 2445 wallet_server_validation_error_ = true; |
2420 } else { | 2446 } else { |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2576 AutofillMetrics::DIALOG_USER_SIGNED_IN_NO_WALLET_NO_AUTOFILL; | 2602 AutofillMetrics::DIALOG_USER_SIGNED_IN_NO_WALLET_NO_AUTOFILL; |
2577 } | 2603 } |
2578 | 2604 |
2579 // Has Wallet items. | 2605 // Has Wallet items. |
2580 return has_autofill_profiles ? | 2606 return has_autofill_profiles ? |
2581 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_HAS_AUTOFILL : | 2607 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_HAS_AUTOFILL : |
2582 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_NO_AUTOFILL; | 2608 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_NO_AUTOFILL; |
2583 } | 2609 } |
2584 | 2610 |
2585 } // namespace autofill | 2611 } // namespace autofill |
OLD | NEW |