1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
// Copyright 2021 The Chromium Authors
// 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/edit_address_profile_dialog_controller_impl.h"
#include <string>
#include "chrome/browser/ui/autofill/autofill_bubble_base.h"
#include "chrome/browser/ui/autofill/edit_address_profile_view.h"
#include "components/autofill/core/browser/data_model/addresses/autofill_profile.h"
#include "components/autofill/core/browser/foundations/autofill_client.h"
#include "components/autofill/core/common/autofill_features.h"
#include "components/strings/grit/components_strings.h"
#include "ui/base/l10n/l10n_util.h"
namespace autofill {
EditAddressProfileDialogControllerImpl::EditAddressProfileDialogControllerImpl(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
content::WebContentsUserData<EditAddressProfileDialogControllerImpl>(
*web_contents) {}
EditAddressProfileDialogControllerImpl::
~EditAddressProfileDialogControllerImpl() {
HideDialog();
}
void EditAddressProfileDialogControllerImpl::OfferEdit(
const AutofillProfile& profile,
const std::u16string& title_override,
const std::u16string& footer_message,
bool is_editing_existing_address,
bool is_migration_to_account,
AutofillClient::AddressProfileSavePromptCallback
on_user_decision_callback) {
// Don't show the editor if it's already visible, and inform the backend.
if (dialog_view_) {
std::move(on_user_decision_callback)
.Run(AutofillClient::AddressPromptUserDecision::kAutoDeclined, profile);
return;
}
address_profile_to_edit_ = profile;
title_override_ = title_override;
footer_message_ = footer_message;
on_user_decision_callback_ = std::move(on_user_decision_callback);
is_editing_existing_address_ = is_editing_existing_address;
is_migration_to_account_ = is_migration_to_account;
if (view_factory_for_test_) {
dialog_view_ = view_factory_for_test_.Run(web_contents(), this);
return;
}
dialog_view_ = ShowEditAddressProfileDialogView(web_contents(), this);
}
std::u16string EditAddressProfileDialogControllerImpl::GetWindowTitle() const {
return title_override_.empty()
? l10n_util::GetStringUTF16(IDS_AUTOFILL_EDIT_ADDRESS_DIALOG_TITLE)
: title_override_;
}
const std::u16string& EditAddressProfileDialogControllerImpl::GetFooterMessage()
const {
return footer_message_;
}
std::u16string EditAddressProfileDialogControllerImpl::GetOkButtonLabel()
const {
return l10n_util::GetStringUTF16(
is_editing_existing_address_
? IDS_AUTOFILL_EDIT_ADDRESS_DIALOG_OK_BUTTON_LABEL_UPDATE
: IDS_AUTOFILL_EDIT_ADDRESS_DIALOG_OK_BUTTON_LABEL_SAVE);
}
const AutofillProfile&
EditAddressProfileDialogControllerImpl::GetProfileToEdit() const {
DCHECK(address_profile_to_edit_);
return *address_profile_to_edit_;
}
bool EditAddressProfileDialogControllerImpl::GetIsValidatable() const {
// Only account address profiles should be validated, i.e. the ones already
// stored in account (the source property) and those that are currently
// migrating.
return address_profile_to_edit_->IsAccountProfile() ||
is_migration_to_account_;
}
void EditAddressProfileDialogControllerImpl::OnDialogClosed(
AutofillClient::AddressPromptUserDecision decision,
base::optional_ref<const AutofillProfile> profile_with_edits) {
std::move(on_user_decision_callback_).Run(decision, profile_with_edits);
dialog_view_.reset();
}
void EditAddressProfileDialogControllerImpl::WebContentsDestroyed() {
HideDialog();
}
void EditAddressProfileDialogControllerImpl::SetViewFactoryForTest(
EditAddressProfileViewTestingFactory factory) {
view_factory_for_test_ = std::move(factory);
}
void EditAddressProfileDialogControllerImpl::HideDialog() {
if (dialog_view_) {
dialog_view_->Hide();
}
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(EditAddressProfileDialogControllerImpl);
} // namespace autofill
|