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 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 } // namespace | 219 } // namespace |
220 | 220 |
221 AutofillDialogController::~AutofillDialogController() {} | 221 AutofillDialogController::~AutofillDialogController() {} |
222 | 222 |
223 AutofillDialogControllerImpl::AutofillDialogControllerImpl( | 223 AutofillDialogControllerImpl::AutofillDialogControllerImpl( |
224 content::WebContents* contents, | 224 content::WebContents* contents, |
225 const FormData& form, | 225 const FormData& form, |
226 const GURL& source_url, | 226 const GURL& source_url, |
227 const AutofillMetrics& metric_logger, | 227 const AutofillMetrics& metric_logger, |
228 DialogType dialog_type, | 228 DialogType dialog_type, |
229 const base::Callback<void(const FormStructure*)>& callback) | 229 const base::Callback<void(const FormStructure*, |
| 230 const std::string&)>& callback) |
230 : profile_(Profile::FromBrowserContext(contents->GetBrowserContext())), | 231 : profile_(Profile::FromBrowserContext(contents->GetBrowserContext())), |
231 contents_(contents), | 232 contents_(contents), |
232 form_structure_(form, std::string()), | 233 form_structure_(form, std::string()), |
233 invoked_from_same_origin_(true), | 234 invoked_from_same_origin_(true), |
234 source_url_(source_url), | 235 source_url_(source_url), |
235 ssl_status_(form.ssl_status), | 236 ssl_status_(form.ssl_status), |
236 callback_(callback), | 237 callback_(callback), |
237 ALLOW_THIS_IN_INITIALIZER_LIST( | 238 ALLOW_THIS_IN_INITIALIZER_LIST( |
238 account_chooser_model_(this, profile_->GetPrefs())), | 239 account_chooser_model_(this, profile_->GetPrefs())), |
239 ALLOW_THIS_IN_INITIALIZER_LIST( | 240 ALLOW_THIS_IN_INITIALIZER_LIST( |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 AutofillMetrics::SECURITY_METRIC_CROSS_ORIGIN_FRAME); | 294 AutofillMetrics::SECURITY_METRIC_CROSS_ORIGIN_FRAME); |
294 } | 295 } |
295 | 296 |
296 // Determine what field types should be included in the dialog. | 297 // Determine what field types should be included in the dialog. |
297 bool has_types = false; | 298 bool has_types = false; |
298 bool has_sections = false; | 299 bool has_sections = false; |
299 form_structure_.ParseFieldTypesFromAutocompleteAttributes(&has_types, | 300 form_structure_.ParseFieldTypesFromAutocompleteAttributes(&has_types, |
300 &has_sections); | 301 &has_sections); |
301 // Fail if the author didn't specify autocomplete types. | 302 // Fail if the author didn't specify autocomplete types. |
302 if (!has_types) { | 303 if (!has_types) { |
303 callback_.Run(NULL); | 304 callback_.Run(NULL, std::string()); |
304 delete this; | 305 delete this; |
305 return; | 306 return; |
306 } | 307 } |
307 | 308 |
308 const DetailInput kEmailInputs[] = { | 309 const DetailInput kEmailInputs[] = { |
309 { 1, EMAIL_ADDRESS, IDS_AUTOFILL_DIALOG_PLACEHOLDER_EMAIL }, | 310 { 1, EMAIL_ADDRESS, IDS_AUTOFILL_DIALOG_PLACEHOLDER_EMAIL }, |
310 }; | 311 }; |
311 | 312 |
312 const DetailInput kCCInputs[] = { | 313 const DetailInput kCCInputs[] = { |
313 { 2, CREDIT_CARD_NUMBER, IDS_AUTOFILL_DIALOG_PLACEHOLDER_CARD_NUMBER }, | 314 { 2, CREDIT_CARD_NUMBER, IDS_AUTOFILL_DIALOG_PLACEHOLDER_CARD_NUMBER }, |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1057 metric_logger_.LogDialogUiDuration( | 1058 metric_logger_.LogDialogUiDuration( |
1058 base::Time::Now() - dialog_shown_timestamp_, | 1059 base::Time::Now() - dialog_shown_timestamp_, |
1059 dialog_type_, | 1060 dialog_type_, |
1060 AutofillMetrics::DIALOG_CANCELED); | 1061 AutofillMetrics::DIALOG_CANCELED); |
1061 } | 1062 } |
1062 | 1063 |
1063 // If Autocheckout has an error, it's possible that the dialog will be | 1064 // If Autocheckout has an error, it's possible that the dialog will be |
1064 // submitted to start the flow and then cancelled to close the dialog after | 1065 // submitted to start the flow and then cancelled to close the dialog after |
1065 // the error. | 1066 // the error. |
1066 if (!callback_.is_null()) { | 1067 if (!callback_.is_null()) { |
1067 callback_.Run(NULL); | 1068 callback_.Run(NULL, std::string()); |
1068 callback_ = base::Callback<void(const FormStructure*)>(); | 1069 callback_ = base::Callback<void(const FormStructure*, |
| 1070 const std::string&)>(); |
1069 } | 1071 } |
1070 } | 1072 } |
1071 | 1073 |
1072 void AutofillDialogControllerImpl::OnSubmit() { | 1074 void AutofillDialogControllerImpl::OnSubmit() { |
1073 did_submit_ = true; | 1075 did_submit_ = true; |
1074 metric_logger_.LogDialogUiDuration( | 1076 metric_logger_.LogDialogUiDuration( |
1075 base::Time::Now() - dialog_shown_timestamp_, | 1077 base::Time::Now() - dialog_shown_timestamp_, |
1076 dialog_type_, | 1078 dialog_type_, |
1077 AutofillMetrics::DIALOG_ACCEPTED); | 1079 AutofillMetrics::DIALOG_ACCEPTED); |
1078 | 1080 |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1282 void AutofillDialogControllerImpl::OnDidSaveInstrumentAndAddress( | 1284 void AutofillDialogControllerImpl::OnDidSaveInstrumentAndAddress( |
1283 const std::string& instrument_id, | 1285 const std::string& instrument_id, |
1284 const std::string& address_id, | 1286 const std::string& address_id, |
1285 const std::vector<wallet::RequiredAction>& required_actions) { | 1287 const std::vector<wallet::RequiredAction>& required_actions) { |
1286 // TODO(dbeam): handle required actions. | 1288 // TODO(dbeam): handle required actions. |
1287 active_instrument_id_ = instrument_id; | 1289 active_instrument_id_ = instrument_id; |
1288 active_address_id_ = address_id; | 1290 active_address_id_ = address_id; |
1289 GetFullWallet(); | 1291 GetFullWallet(); |
1290 } | 1292 } |
1291 | 1293 |
1292 void AutofillDialogControllerImpl::OnDidSendAutocheckoutStatus() { | |
1293 NOTIMPLEMENTED(); | |
1294 } | |
1295 | |
1296 void AutofillDialogControllerImpl::OnDidUpdateAddress( | 1294 void AutofillDialogControllerImpl::OnDidUpdateAddress( |
1297 const std::string& address_id, | 1295 const std::string& address_id, |
1298 const std::vector<wallet::RequiredAction>& required_actions) { | 1296 const std::vector<wallet::RequiredAction>& required_actions) { |
1299 // TODO(dbeam): Handle this callback. | 1297 // TODO(dbeam): Handle this callback. |
1300 NOTIMPLEMENTED() << " address_id=" << address_id; | 1298 NOTIMPLEMENTED() << " address_id=" << address_id; |
1301 } | 1299 } |
1302 | 1300 |
1303 void AutofillDialogControllerImpl::OnDidUpdateInstrument( | 1301 void AutofillDialogControllerImpl::OnDidUpdateInstrument( |
1304 const std::string& instrument_id, | 1302 const std::string& instrument_id, |
1305 const std::vector<wallet::RequiredAction>& required_actions) { | 1303 const std::vector<wallet::RequiredAction>& required_actions) { |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1802 if (ShouldUseBillingForShipping()) { | 1800 if (ShouldUseBillingForShipping()) { |
1803 FillOutputForSectionWithComparator( | 1801 FillOutputForSectionWithComparator( |
1804 SECTION_BILLING, | 1802 SECTION_BILLING, |
1805 base::Bind(DetailInputMatchesShippingField)); | 1803 base::Bind(DetailInputMatchesShippingField)); |
1806 FillOutputForSectionWithComparator( | 1804 FillOutputForSectionWithComparator( |
1807 SECTION_CC, | 1805 SECTION_CC, |
1808 base::Bind(DetailInputMatchesShippingField)); | 1806 base::Bind(DetailInputMatchesShippingField)); |
1809 } else { | 1807 } else { |
1810 FillOutputForSection(SECTION_SHIPPING); | 1808 FillOutputForSection(SECTION_SHIPPING); |
1811 } | 1809 } |
1812 callback_.Run(&form_structure_); | 1810 if (wallet_items_) |
1813 callback_ = base::Callback<void(const FormStructure*)>(); | 1811 callback_.Run(&form_structure_, wallet_items_->google_transaction_id()); |
| 1812 else |
| 1813 callback_.Run(&form_structure_, std::string()); |
| 1814 callback_ = base::Callback<void(const FormStructure*, const std::string&)>(); |
1814 | 1815 |
1815 if (dialog_type_ == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) { | 1816 if (dialog_type_ == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) { |
1816 // This may delete us. | 1817 // This may delete us. |
1817 Hide(); | 1818 Hide(); |
1818 } | 1819 } |
1819 } | 1820 } |
1820 | 1821 |
1821 AutofillMetrics::DialogInitialUserStateMetric | 1822 AutofillMetrics::DialogInitialUserStateMetric |
1822 AutofillDialogControllerImpl::GetInitialUserState() const { | 1823 AutofillDialogControllerImpl::GetInitialUserState() const { |
1823 // Consider a user to be an Autofill user if the user has any credit cards | 1824 // Consider a user to be an Autofill user if the user has any credit cards |
(...skipping 18 matching lines...) Expand all Loading... |
1842 AutofillMetrics::DIALOG_USER_SIGNED_IN_NO_WALLET_NO_AUTOFILL; | 1843 AutofillMetrics::DIALOG_USER_SIGNED_IN_NO_WALLET_NO_AUTOFILL; |
1843 } | 1844 } |
1844 | 1845 |
1845 // Has Wallet items. | 1846 // Has Wallet items. |
1846 return has_autofill_profiles ? | 1847 return has_autofill_profiles ? |
1847 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_HAS_AUTOFILL : | 1848 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_HAS_AUTOFILL : |
1848 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_NO_AUTOFILL; | 1849 AutofillMetrics::DIALOG_USER_SIGNED_IN_HAS_WALLET_NO_AUTOFILL; |
1849 } | 1850 } |
1850 | 1851 |
1851 } // namespace autofill | 1852 } // namespace autofill |
OLD | NEW |