blob: 05a6637589f675baddc33c3b6d96ff70c6bcd553 [file] [log] [blame]
// Copyright 2019 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_assistant/browser/self_delete_full_card_requester.h"
#include <memory>
#include <utility>
#include "components/autofill/content/browser/content_autofill_driver.h"
#include "components/autofill/content/browser/content_autofill_driver_factory.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/credit_card.h"
#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/browser/payments/full_card_request.h"
#include "components/autofill/core/browser/personal_data_manager.h"
#include "content/public/browser/web_contents.h"
namespace autofill_assistant {
SelfDeleteFullCardRequester::SelfDeleteFullCardRequester()
: weak_ptr_factory_(this) {}
void SelfDeleteFullCardRequester::GetFullCard(
content::WebContents* web_contents,
const autofill::CreditCard* card,
ActionDelegate::GetFullCardCallback callback) {
DCHECK(card);
callback_ = std::move(callback);
autofill::ContentAutofillDriverFactory* factory =
autofill::ContentAutofillDriverFactory::FromWebContents(web_contents);
if (!factory) {
OnFullCardRequestFailed();
return;
}
autofill::ContentAutofillDriver* driver =
factory->DriverForFrame(web_contents->GetMainFrame());
if (!driver) {
OnFullCardRequestFailed();
return;
}
driver->autofill_manager()->GetOrCreateFullCardRequest()->GetFullCard(
*card, autofill::AutofillClient::UNMASK_FOR_AUTOFILL,
weak_ptr_factory_.GetWeakPtr(),
driver->autofill_manager()->GetAsFullCardRequestUIDelegate());
}
SelfDeleteFullCardRequester::~SelfDeleteFullCardRequester() = default;
void SelfDeleteFullCardRequester::OnFullCardRequestSucceeded(
const autofill::payments::FullCardRequest& /* full_card_request */,
const autofill::CreditCard& card,
const base::string16& cvc) {
std::move(callback_).Run(std::make_unique<autofill::CreditCard>(card), cvc);
delete this;
}
void SelfDeleteFullCardRequester::OnFullCardRequestFailed() {
// Failed might because of cancel, so return nullptr to notice caller.
//
// TODO(crbug.com/806868): Split the fail notification so that "cancel" and
// "wrong cvc" states can be handled differently. One should prompt a retry,
// the other a graceful shutdown - the current behavior.
std::move(callback_).Run(nullptr, base::string16());
delete this;
}
} // namespace autofill_assistant