| Index: chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
|
| diff --git a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
|
| index ba25f8dc9707ad9983f9f7df06699139f67abb4d..061ba349185154333a484b098ebc4c308f7cecf7 100644
|
| --- a/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
|
| +++ b/chrome/browser/ui/views/extensions/extension_uninstall_dialog_view.cc
|
| @@ -12,6 +12,7 @@
|
| #include "chrome/grit/generated_resources.h"
|
| #include "components/constrained_window/constrained_window_views.h"
|
| #include "extensions/common/extension.h"
|
| +#include "ui/aura/window_tracker.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/compositor/compositor.h"
|
| #include "ui/compositor/layer.h"
|
| @@ -35,7 +36,7 @@ class ExtensionUninstallDialogViews
|
| public:
|
| ExtensionUninstallDialogViews(
|
| Profile* profile,
|
| - gfx::NativeWindow parent,
|
| + aura::Window* parent,
|
| extensions::ExtensionUninstallDialog::Delegate* delegate);
|
| ~ExtensionUninstallDialogViews() override;
|
|
|
| @@ -52,6 +53,12 @@ class ExtensionUninstallDialogViews
|
|
|
| ExtensionUninstallDialogDelegateView* view_;
|
|
|
| + // The dialog's parent window.
|
| + aura::Window* parent_;
|
| +
|
| + // Tracks whether |parent_| got destroyed.
|
| + aura::WindowTracker parent_window_tracker_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ExtensionUninstallDialogViews);
|
| };
|
|
|
| @@ -100,10 +107,13 @@ class ExtensionUninstallDialogDelegateView : public views::DialogDelegateView {
|
|
|
| ExtensionUninstallDialogViews::ExtensionUninstallDialogViews(
|
| Profile* profile,
|
| - gfx::NativeWindow parent,
|
| + aura::Window* parent,
|
| extensions::ExtensionUninstallDialog::Delegate* delegate)
|
| - : extensions::ExtensionUninstallDialog(profile, parent, delegate),
|
| - view_(NULL) {
|
| + : extensions::ExtensionUninstallDialog(profile, delegate),
|
| + view_(NULL),
|
| + parent_(parent) {
|
| + if (parent_)
|
| + parent_window_tracker_.Add(parent_);
|
| }
|
|
|
| ExtensionUninstallDialogViews::~ExtensionUninstallDialogViews() {
|
| @@ -115,6 +125,11 @@ ExtensionUninstallDialogViews::~ExtensionUninstallDialogViews() {
|
| }
|
|
|
| void ExtensionUninstallDialogViews::Show() {
|
| + if (parent_ && !parent_window_tracker_.Contains(parent_)) {
|
| + delegate_->ExtensionUninstallCanceled();
|
| + return;
|
| + }
|
| +
|
| view_ = new ExtensionUninstallDialogDelegateView(
|
| this, extension_, triggering_extension_, &icon_);
|
| CreateBrowserModalDialogViews(view_, parent_)->Show();
|
|
|