Index: components/autofill/core/browser/autofill_assistant.cc |
diff --git a/components/autofill/core/browser/autofill_assistant.cc b/components/autofill/core/browser/autofill_assistant.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c74776f99ffc8235952f31cd27c0831c6c84c952 |
--- /dev/null |
+++ b/components/autofill/core/browser/autofill_assistant.cc |
@@ -0,0 +1,60 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/autofill/core/browser/autofill_assistant.h" |
+ |
+#include "base/containers/adapters.h" |
+#include "base/strings/string16.h" |
+#include "components/autofill/core/browser/autofill_experiments.h" |
+#include "components/autofill/core/browser/autofill_manager.h" |
+#include "components/autofill/core/browser/credit_card.h" |
+#include "components/autofill/core/browser/form_structure.h" |
+#include "components/autofill/core/common/autofill_constants.h" |
+ |
+namespace autofill { |
+ |
+AutofillAssistant::AutofillAssistant(AutofillManager* autofill_manager) |
+ : credit_card_form_data_(nullptr), |
+ autofill_manager_(autofill_manager), |
+ weak_ptr_factory_(this) {} |
+ |
+AutofillAssistant::~AutofillAssistant() {} |
+ |
+void AutofillAssistant::Reset() { |
+ credit_card_form_data_.reset(); |
+} |
+ |
+bool AutofillAssistant::CanShowCreditCardAssist( |
+ const std::vector<FormStructure*>& form_structures) { |
+#if !defined(OS_ANDROID) |
+ return false; |
+#else |
+ if (!IsAutofillCreditCardAssistEnabled() || credit_card_form_data_) |
+ return false; |
+ |
+ for (FormStructure* cur_form : base::Reversed(form_structures)) { |
+ if (cur_form->IsCompleteCreditCardForm()) { |
+ credit_card_form_data_.reset(new FormData(cur_form->ToFormData())); |
+ break; |
+ } |
+ } |
+ return !!credit_card_form_data_; |
+#endif |
+} |
+ |
+void AutofillAssistant::ShowAssistForCreditCard(const CreditCard& card) { |
+ DCHECK(credit_card_form_data_); |
+ autofill_manager_->client()->ConfirmCreditCardFillAssist( |
+ card, base::Bind(&AutofillAssistant::OnUserDidAcceptCreditCardFill, |
+ weak_ptr_factory_.GetWeakPtr(), card)); |
+} |
+ |
+void AutofillAssistant::OnUserDidAcceptCreditCardFill(const CreditCard& card) { |
+ // TODO(crbug.com/630656): Trigger CVC dialog flow for card filling. |
+ autofill_manager_->FillCreditCardForm(kNoQueryId, *credit_card_form_data_, |
+ credit_card_form_data_->fields[0], card, |
+ base::string16()); |
+} |
+ |
+} // namespace autofill |