blob: f05a8799932370dbf6ea7b511ea8dc8fde275121 [file] [log] [blame]
// Copyright 2018 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 "chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.h"
#include <stddef.h>
#include "base/bind.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "chrome/browser/ui/autofill/local_card_migration_dialog.h"
#include "chrome/browser/ui/autofill/local_card_migration_dialog_state.h"
#include "chrome/browser/ui/browser.h"
#include "components/autofill/core/browser/autofill_metrics.h"
#include "components/autofill/core/browser/local_card_migration_manager.h"
#include "components/autofill/core/browser/payments/payments_service_url.h"
#include "components/autofill/core/browser/validation.h"
#include "components/autofill/core/common/autofill_clock.h"
#include "components/autofill/core/common/autofill_prefs.h"
#include "components/prefs/pref_service.h"
#include "components/user_prefs/user_prefs.h"
#include "content/public/browser/browser_context.h"
namespace autofill {
LocalCardMigrationDialogControllerImpl::LocalCardMigrationDialogControllerImpl(
content::WebContents* web_contents)
: web_contents_(web_contents),
local_card_migration_dialog_(nullptr),
pref_service_(
user_prefs::UserPrefs::Get(web_contents->GetBrowserContext())) {}
LocalCardMigrationDialogControllerImpl::
~LocalCardMigrationDialogControllerImpl() {
if (local_card_migration_dialog_)
local_card_migration_dialog_->CloseDialog();
}
void LocalCardMigrationDialogControllerImpl::ShowDialog(
std::unique_ptr<base::DictionaryValue> legal_message,
LocalCardMigrationDialog* local_card_migration_dialog,
const std::vector<MigratableCreditCard>& migratable_credit_cards,
AutofillClient::LocalCardMigrationCallback start_migrating_cards_callback) {
if (local_card_migration_dialog_)
local_card_migration_dialog_->CloseDialog();
if (!LegalMessageLine::Parse(*legal_message, &legal_message_lines_,
/*escape_apostrophes=*/true)) {
AutofillMetrics::LogLocalCardMigrationDialogOfferMetric(
AutofillMetrics::
LOCAL_CARD_MIGRATION_DIALOG_NOT_SHOWN_INVALID_LEGAL_MESSAGE);
return;
}
local_card_migration_dialog_ = local_card_migration_dialog;
start_migrating_cards_callback_ = std::move(start_migrating_cards_callback);
migratable_credit_cards_ = migratable_credit_cards;
view_state_ = LocalCardMigrationDialogState::kOffered;
local_card_migration_dialog_->ShowDialog();
dialog_is_visible_duration_timer_ = base::ElapsedTimer();
AutofillMetrics::LogLocalCardMigrationDialogOfferMetric(
AutofillMetrics::LOCAL_CARD_MIGRATION_DIALOG_SHOWN);
}
LocalCardMigrationDialogState
LocalCardMigrationDialogControllerImpl::GetViewState() const {
return view_state_;
}
const std::vector<MigratableCreditCard>&
LocalCardMigrationDialogControllerImpl::GetCardList() const {
return migratable_credit_cards_;
}
const LegalMessageLines&
LocalCardMigrationDialogControllerImpl::GetLegalMessageLines() const {
return legal_message_lines_;
}
void LocalCardMigrationDialogControllerImpl::OnSaveButtonClicked(
const std::vector<std::string>& selected_cards_guids) {
AutofillMetrics::LogLocalCardMigrationDialogUserInteractionMetric(
dialog_is_visible_duration_timer_.Elapsed(), selected_cards_guids.size(),
migratable_credit_cards_.size(),
AutofillMetrics::LOCAL_CARD_MIGRATION_DIALOG_CLOSED_SAVE_BUTTON_CLICKED);
std::move(start_migrating_cards_callback_).Run(selected_cards_guids);
}
void LocalCardMigrationDialogControllerImpl::OnCancelButtonClicked() {
AutofillMetrics::LogLocalCardMigrationDialogUserInteractionMetric(
dialog_is_visible_duration_timer_.Elapsed(), 0,
migratable_credit_cards_.size(),
AutofillMetrics::
LOCAL_CARD_MIGRATION_DIALOG_CLOSED_CANCEL_BUTTON_CLICKED);
prefs::SetLocalCardMigrationPromptPreviouslyCancelled(pref_service_, true);
start_migrating_cards_callback_.Reset();
}
void LocalCardMigrationDialogControllerImpl::OnViewCardsButtonClicked() {
// TODO(crbug.com/867194): Add metrics.
constexpr int kPaymentsProfileUserIndex = 0;
web_contents_->OpenURL(content::OpenURLParams(
payments::GetManageInstrumentsUrl(kPaymentsProfileUserIndex),
content::Referrer(), WindowOpenDisposition::NEW_FOREGROUND_TAB,
ui::PAGE_TRANSITION_LINK, /*is_renderer_initiated=*/false));
}
void LocalCardMigrationDialogControllerImpl::OnLegalMessageLinkClicked() {
AutofillMetrics::LogLocalCardMigrationDialogUserInteractionMetric(
dialog_is_visible_duration_timer_.Elapsed(), 0,
migratable_credit_cards_.size(),
AutofillMetrics::LOCAL_CARD_MIGRATION_DIALOG_LEGAL_MESSAGE_CLICKED);
}
void LocalCardMigrationDialogControllerImpl::OnDialogClosed() {
if (local_card_migration_dialog_)
local_card_migration_dialog_ = nullptr;
}
} // namespace autofill