blob: ea6244a9800d3c1508ac11eaceefb568ee8f327a [file] [log] [blame]
// Copyright 2021 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/views/autofill/edit_address_profile_view.h"
#include "chrome/browser/ui/autofill/address_editor_controller.h"
#include "chrome/browser/ui/autofill/edit_address_profile_dialog_controller.h"
#include "chrome/browser/ui/views/autofill/address_editor_view.h"
#include "chrome/browser/ui/views/chrome_layout_provider.h"
#include "components/autofill/core/common/autofill_features.h"
#include "ui/views/layout/fill_layout.h"
namespace autofill {
EditAddressProfileView::EditAddressProfileView(
EditAddressProfileDialogController* controller)
: controller_(controller) {
DCHECK(controller);
DCHECK(base::FeatureList::IsEnabled(
features::kAutofillAddressProfileSavePrompt));
SetButtons(ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL);
SetModalType(ui::MODAL_TYPE_CHILD);
SetShowCloseButton(false);
set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric(
views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH));
SetAcceptCallback(base::BindOnce(
&EditAddressProfileView::OnUserDecision, base::Unretained(this),
AutofillClient::SaveAddressProfileOfferUserDecision::kAccepted));
SetCancelCallback(base::BindOnce(
&EditAddressProfileView::OnUserDecision, base::Unretained(this),
AutofillClient::SaveAddressProfileOfferUserDecision::kDeclined));
SetLayoutManager(std::make_unique<views::FillLayout>());
}
EditAddressProfileView::~EditAddressProfileView() = default;
void EditAddressProfileView::ShowForWebContents(
content::WebContents* web_contents) {
DCHECK(web_contents);
address_editor_controller_ = std::make_unique<AddressEditorController>(
controller_->GetProfileToEdit(), web_contents);
address_editor_view_ = AddChildView(
std::make_unique<AddressEditorView>(address_editor_controller_.get()));
}
void EditAddressProfileView::Hide() {
controller_ = nullptr;
GetWidget()->Close();
}
std::u16string EditAddressProfileView::GetWindowTitle() const {
// |controller_| can be nullptr when the framework calls this method after a
// button click.
return controller_ ? controller_->GetWindowTitle() : std::u16string();
}
void EditAddressProfileView::WindowClosing() {
if (controller_) {
controller_->OnDialogClosed();
controller_ = nullptr;
}
}
void EditAddressProfileView::ChildPreferredSizeChanged(views::View* child) {
const int width = fixed_width();
GetWidget()->SetSize(gfx::Size(width, GetHeightForWidth(width)));
}
AddressEditorView* EditAddressProfileView::GetAddressEditorViewForTesting() {
return address_editor_view_;
}
void EditAddressProfileView::OnUserDecision(
AutofillClient::SaveAddressProfileOfferUserDecision decision) {
if (!controller_)
return;
controller_->OnUserDecision(decision,
address_editor_view_->GetAddressProfile());
}
} // namespace autofill