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

Side by Side Diff: components/autofill/core/browser/autofill_manager.cc

Issue 2855943002: Offer to save card locally if user manually enters same card number as (Closed)
Patch Set: Creates separate tests for duplicating masked server card and not duplicating full server card. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | components/autofill/core/browser/autofill_manager_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "components/autofill/core/browser/autofill_manager.h" 5 #include "components/autofill/core/browser/autofill_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 1160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1171 return IsAutofillEnabled() && !driver_->IsIncognito() && 1171 return IsAutofillEnabled() && !driver_->IsIncognito() &&
1172 form.ShouldBeParsed() && 1172 form.ShouldBeParsed() &&
1173 (form.active_field_count() >= kRequiredFieldsForUpload || 1173 (form.active_field_count() >= kRequiredFieldsForUpload ||
1174 (form.all_fields_are_passwords() && 1174 (form.all_fields_are_passwords() &&
1175 form.active_field_count() >= 1175 form.active_field_count() >=
1176 kRequiredFieldsForFormsWithOnlyPasswordFields)); 1176 kRequiredFieldsForFormsWithOnlyPasswordFields));
1177 } 1177 }
1178 1178
1179 void AutofillManager::ImportFormData(const FormStructure& submitted_form) { 1179 void AutofillManager::ImportFormData(const FormStructure& submitted_form) {
1180 std::unique_ptr<CreditCard> imported_credit_card; 1180 std::unique_ptr<CreditCard> imported_credit_card;
1181 bool imported_credit_card_matches_masked_server_credit_card;
1181 if (!personal_data_->ImportFormData( 1182 if (!personal_data_->ImportFormData(
1182 submitted_form, IsCreditCardUploadEnabled(), &imported_credit_card)) { 1183 submitted_form, IsCreditCardUploadEnabled(), &imported_credit_card,
1184 &imported_credit_card_matches_masked_server_credit_card))
1183 return; 1185 return;
1184 }
1185 1186
1186 #ifdef ENABLE_FORM_DEBUG_DUMP 1187 #ifdef ENABLE_FORM_DEBUG_DUMP
1187 // Debug code for research on what autofill Chrome extracts from the last few 1188 // Debug code for research on what autofill Chrome extracts from the last few
1188 // forms when submitting credit card data. See DumpAutofillData(). 1189 // forms when submitting credit card data. See DumpAutofillData().
1189 bool dump_data = base::CommandLine::ForCurrentProcess()->HasSwitch( 1190 bool dump_data = base::CommandLine::ForCurrentProcess()->HasSwitch(
1190 "dump-autofill-data"); 1191 "dump-autofill-data");
1191 1192
1192 // Save the form data for future dumping. 1193 // Save the form data for future dumping.
1193 if (dump_data) { 1194 if (dump_data) {
1194 if (recently_autofilled_forms_.size() > 5) 1195 if (recently_autofilled_forms_.size() > 5)
(...skipping 15 matching lines...) Expand all
1210 } 1211 }
1211 1212
1212 DumpAutofillData(!!imported_credit_card); 1213 DumpAutofillData(!!imported_credit_card);
1213 } 1214 }
1214 #endif // ENABLE_FORM_DEBUG_DUMP 1215 #endif // ENABLE_FORM_DEBUG_DUMP
1215 1216
1216 // No card available to offer save or upload. 1217 // No card available to offer save or upload.
1217 if (!imported_credit_card) 1218 if (!imported_credit_card)
1218 return; 1219 return;
1219 1220
1220 if (!IsCreditCardUploadEnabled()) { 1221 if (!IsCreditCardUploadEnabled() ||
1221 // This block will only be reached if we have observed a new card. In this 1222 imported_credit_card_matches_masked_server_credit_card) {
1222 // case, ImportFormData will return false if the card matches one already 1223 // This block will only be reached if we have observed a new card or a card
1223 // stored. 1224 // whose |TypeAndLastFourDigits| matches a masked server card.
1225 // |ImportFormData| will return false if the card matches a full card that
1226 // we have already stored.
1224 client_->ConfirmSaveCreditCardLocally( 1227 client_->ConfirmSaveCreditCardLocally(
1225 *imported_credit_card, 1228 *imported_credit_card,
1226 base::Bind( 1229 base::Bind(
1227 base::IgnoreResult(&PersonalDataManager::SaveImportedCreditCard), 1230 base::IgnoreResult(&PersonalDataManager::SaveImportedCreditCard),
1228 base::Unretained(personal_data_), *imported_credit_card)); 1231 base::Unretained(personal_data_), *imported_credit_card));
1229 } else { 1232 } else {
1230 // Whereas, because we pass IsCreditCardUploadEnabled() to ImportFormData, 1233 // Whereas, because we pass IsCreditCardUploadEnabled() to ImportFormData,
1231 // this block can be reached on observing either a new card or one already 1234 // this block can be reached on observing either a new card or one already
1232 // stored locally. We will offer to upload either kind. 1235 // stored locally and whose |TypeAndLastFourDigits| do not match a masked
1236 // server card. We will offer to upload either kind.
1233 upload_request_ = payments::PaymentsClient::UploadRequestDetails(); 1237 upload_request_ = payments::PaymentsClient::UploadRequestDetails();
1234 upload_request_.card = *imported_credit_card; 1238 upload_request_.card = *imported_credit_card;
1235 1239
1236 // In order to prompt the user to upload their card, we must have both: 1240 // In order to prompt the user to upload their card, we must have both:
1237 // 1) Card with CVC 1241 // 1) Card with CVC
1238 // 2) 1+ recently-used or modified addresses that meet the client-side 1242 // 2) 1+ recently-used or modified addresses that meet the client-side
1239 // validation rules 1243 // validation rules
1240 // Here we perform both checks before returning or logging anything, 1244 // Here we perform both checks before returning or logging anything,
1241 // because if only one of the two is missing, it may be fixable. 1245 // because if only one of the two is missing, it may be fixable.
1242 1246
(...skipping 1019 matching lines...) Expand 10 before | Expand all | Expand 10 after
2262 } 2266 }
2263 #endif // ENABLE_FORM_DEBUG_DUMP 2267 #endif // ENABLE_FORM_DEBUG_DUMP
2264 2268
2265 void AutofillManager::LogCardUploadDecisionUkm( 2269 void AutofillManager::LogCardUploadDecisionUkm(
2266 AutofillMetrics::CardUploadDecisionMetric upload_decision) { 2270 AutofillMetrics::CardUploadDecisionMetric upload_decision) {
2267 AutofillMetrics::LogCardUploadDecisionUkm( 2271 AutofillMetrics::LogCardUploadDecisionUkm(
2268 client_->GetUkmService(), pending_upload_request_url_, upload_decision); 2272 client_->GetUkmService(), pending_upload_request_url_, upload_decision);
2269 } 2273 }
2270 2274
2271 } // namespace autofill 2275 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | components/autofill/core/browser/autofill_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698