Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Extensions refactor] Use DialogModel in SettingsOverriddenDialog
No functionality / ui changed. Bug: 1330637 Change-Id: I707deb0df7a48223bd5ea16fecbefd9f142cd95e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3812161 Reviewed-by: Caroline Rising <corising@chromium.org> Commit-Queue: Emilia Paz <emiliapaz@chromium.org> Cr-Commit-Position: refs/heads/main@{#1033174}
- Loading branch information
1 parent
bc666ca
commit 744dbf4
Showing
11 changed files
with
283 additions
and
350 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
115 changes: 115 additions & 0 deletions
115
chrome/browser/ui/views/extensions/settings_overridden_dialog.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
// Copyright 2022 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/extensions/settings_overridden_dialog.h" | ||
|
||
#include "chrome/browser/ui/browser.h" | ||
#include "chrome/browser/ui/browser_window.h" | ||
#include "chrome/browser/ui/extensions/settings_overridden_dialog_controller.h" | ||
#include "chrome/browser/ui/views/chrome_layout_provider.h" | ||
#include "chrome/grit/generated_resources.h" | ||
#include "components/constrained_window/constrained_window_views.h" | ||
#include "ui/base/l10n/l10n_util.h" | ||
#include "ui/base/models/dialog_model.h" | ||
#include "ui/base/models/image_model.h" | ||
#include "ui/color/color_id.h" | ||
#include "ui/gfx/paint_vector_icon.h" | ||
|
||
using DialogResult = SettingsOverriddenDialogController::DialogResult; | ||
|
||
namespace { | ||
|
||
// Model delegate that notifies the `controller_` when a click event occurs in | ||
// the settings overriden dialog. | ||
class SettingsOverriddenDialogDelegate : public ui::DialogModelDelegate { | ||
public: | ||
explicit SettingsOverriddenDialogDelegate( | ||
std::unique_ptr<SettingsOverriddenDialogController> controller) | ||
: controller_(std::move(controller)) {} | ||
|
||
void OnDialogAccepted() { | ||
HandleDialogResult(DialogResult::kChangeSettingsBack); | ||
} | ||
void OnDialogCancelled() { | ||
HandleDialogResult(DialogResult::kKeepNewSettings); | ||
} | ||
void OnDialogClosed() { HandleDialogResult(DialogResult::kDialogDismissed); } | ||
void OnDialogDestroyed() { | ||
if (!result_) { | ||
// The dialog may close without firing any of the [accept | cancel | | ||
// close] callbacks if e.g. the parent window closes. In this case, notify | ||
// the controller that the dialog closed without user action. | ||
HandleDialogResult(DialogResult::kDialogClosedWithoutUserAction); | ||
} | ||
} | ||
|
||
SettingsOverriddenDialogController* controller() { return controller_.get(); } | ||
|
||
private: | ||
void HandleDialogResult(DialogResult result) { | ||
DCHECK(!result_) | ||
<< "Trying to re-notify controller of result. Previous result: " | ||
<< static_cast<int>(*result_) | ||
<< ", new result: " << static_cast<int>(result); | ||
result_ = result; | ||
controller_->HandleDialogResult(result); | ||
} | ||
std::unique_ptr<SettingsOverriddenDialogController> controller_; | ||
absl::optional<DialogResult> result_; | ||
}; | ||
|
||
} // namespace | ||
|
||
namespace extensions { | ||
|
||
void ShowSettingsOverriddenDialog( | ||
std::unique_ptr<SettingsOverriddenDialogController> controller, | ||
Browser* browser) { | ||
SettingsOverriddenDialogController::ShowParams show_params = | ||
controller->GetShowParams(); | ||
|
||
auto dialog_delegate_unique = | ||
std::make_unique<SettingsOverriddenDialogDelegate>(std::move(controller)); | ||
SettingsOverriddenDialogDelegate* dialog_delegate = | ||
dialog_delegate_unique.get(); | ||
|
||
ui::DialogModel::Builder dialog_builder = | ||
ui::DialogModel::Builder(std::move(dialog_delegate_unique)); | ||
dialog_builder.SetInternalName(kExtensionSettingsOverridenDialogName) | ||
.SetTitle(show_params.dialog_title) | ||
.AddBodyText(ui::DialogModelLabel(show_params.message)) | ||
.AddOkButton( | ||
base::BindOnce(&SettingsOverriddenDialogDelegate::OnDialogAccepted, | ||
base::Unretained(dialog_delegate)), | ||
l10n_util::GetStringUTF16( | ||
IDS_EXTENSION_SETTINGS_OVERRIDDEN_DIALOG_CHANGE_IT_BACK)) | ||
.AddCancelButton( | ||
base::BindOnce(&SettingsOverriddenDialogDelegate::OnDialogCancelled, | ||
base::Unretained(dialog_delegate)), | ||
l10n_util::GetStringUTF16( | ||
IDS_EXTENSION_SETTINGS_OVERRIDDEN_DIALOG_KEEP_IT)) | ||
.SetCloseActionCallback( | ||
base::BindOnce(&SettingsOverriddenDialogDelegate::OnDialogClosed, | ||
base::Unretained(dialog_delegate))) | ||
.SetDialogDestroyingCallback( | ||
base::BindOnce(&SettingsOverriddenDialogDelegate::OnDialogDestroyed, | ||
base::Unretained(dialog_delegate))) | ||
.OverrideShowCloseButton(false); | ||
|
||
if (show_params.icon) { | ||
gfx::ImageSkia icon = | ||
gfx::CreateVectorIcon(*show_params.icon, | ||
ChromeLayoutProvider::Get()->GetDistanceMetric( | ||
DISTANCE_BUBBLE_HEADER_VECTOR_ICON_SIZE), | ||
ui::kColorIcon); | ||
|
||
dialog_builder.SetIcon(ui::ImageModel::FromImageSkia(icon)); | ||
} | ||
|
||
constrained_window::ShowBrowserModal(dialog_builder.Build(), | ||
browser->window()->GetNativeWindow()); | ||
dialog_delegate->controller()->OnDialogShown(); | ||
} | ||
|
||
} // namespace extensions |
11 changes: 11 additions & 0 deletions
11
chrome/browser/ui/views/extensions/settings_overridden_dialog.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
// Copyright 2022 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. | ||
|
||
#ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_SETTINGS_OVERRIDDEN_DIALOG_H_ | ||
#define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_SETTINGS_OVERRIDDEN_DIALOG_H_ | ||
|
||
static constexpr char kExtensionSettingsOverridenDialogName[] = | ||
"ExtensionSettingsOverridenDialog"; | ||
|
||
#endif // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_SETTINGS_OVERRIDDEN_DIALOG_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.