Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6433)

Unified Diff: chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc

Issue 12045037: Refactor modality-specific behavior from ConstrainedWindowViews to WebContentsModalDialogManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc
diff --git a/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc b/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6a06f01fc114d4bb3c319ac7d12218c97d41c4ca
--- /dev/null
+++ b/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc
@@ -0,0 +1,111 @@
+// Copyright (c) 2012 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 <set>
+
+#include "chrome/browser/platform_util.h"
+#include "chrome/browser/ui/views/constrained_window_views.h"
+#include "chrome/browser/ui/web_contents_modal_dialog_manager.h"
+#include "chrome/browser/ui/web_contents_modal_dialog_manager_ui_delegate.h"
+#include "ui/views/widget/widget.h"
+#include "ui/views/widget/widget_observer.h"
+
+#if defined(USE_AURA)
+#include "ui/aura/client/aura_constants.h"
+#include "ui/aura/window.h"
+#include "ui/views/corewm/visibility_controller.h"
+#include "ui/views/corewm/window_animations.h"
+#include "ui/views/corewm/window_modality_controller.h"
+#endif
+
+#if defined(USE_ASH)
+#include "ash/ash_constants.h"
+#include "ash/shell.h"
+#include "ash/wm/custom_frame_view_ash.h"
+#endif
+
+namespace {
+
+class WebContentsModalDialogManagerUIDelegateViews
+ : public WebContentsModalDialogManagerUIDelegate,
+ public views::WidgetObserver {
+ public:
+ WebContentsModalDialogManagerUIDelegateViews(
+ WebContentsModalDialogManager* manager)
+ : manager_(manager) {
+ }
+
+ virtual ~WebContentsModalDialogManagerUIDelegateViews() {
+ for (std::set<views::Widget*>::iterator it = observed_widgets_.begin();
+ it != observed_widgets_.end();
+ ++it) {
+ (*it)->RemoveObserver(this);
+ }
+ }
+
+ // WebContentsModalDialogManagerUIDelegateViews overrides
+
Ben Goodger (Google) 2013/01/23 19:10:46 nit: remove line
Mike Wittman 2013/01/23 21:52:31 Done.
+ virtual void ManageDialog(gfx::NativeWindow window) OVERRIDE {
+ views::Widget* widget = GetWidget(window);
+ widget->AddObserver(this);
+ observed_widgets_.insert(widget);
+ widget->set_movement_disabled(true);
+
+#if defined(USE_AURA)
+ widget->GetNativeWindow()->SetProperty(aura::client::kConstrainedWindowKey,
Ben Goodger (Google) 2013/01/23 19:10:46 Add a // TODO: remove once the new visual style
Mike Wittman 2013/01/23 21:52:31 Done.
+ true);
+#endif
+
+#if defined(USE_ASH)
+ gfx::NativeView parent = platform_util::GetParent(widget->GetNativeView());
+ views::corewm::SetChildWindowVisibilityChangesAnimated(parent);
+ // No animations should get performed on the window since that will re-order
+ // the window stack which will then cause many problems.
+ if (parent && parent->parent()) {
+ parent->parent()->SetProperty(aura::client::kAnimationsDisabledKey, true);
+ }
+
+ widget->GetNativeWindow()->SetProperty(ash::kConstrainedWindowKey, true);
Ben Goodger (Google) 2013/01/23 19:10:46 this line seems redundant with above?
Mike Wittman 2013/01/23 21:52:31 For whatever reason, there are separate keys for A
+ views::corewm::SetModalParent(
+ widget->GetNativeWindow(),
+ platform_util::GetParent(widget->GetNativeView()));
+#endif
+ }
+
+ virtual void CloseDialog(gfx::NativeWindow window) OVERRIDE {
+ views::Widget* widget = GetWidget(window);
+#if defined(USE_ASH)
+ gfx::NativeView view = platform_util::GetParent(widget->GetNativeView());
+ // Allow the parent to animate again.
+ if (view && view->parent())
+ view->parent()->ClearProperty(aura::client::kAnimationsDisabledKey);
+#endif
+ widget->Close();
+ }
+
+ // views::WidgetObserver overrides
+ virtual void OnWidgetClosing(views::Widget* widget) OVERRIDE {
+ manager_->WillClose(static_cast<ConstrainedWindowViews*>(widget));
+ observed_widgets_.erase(widget);
+ }
+
+ private:
+ static views::Widget* GetWidget(gfx::NativeWindow window) {
+ views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
+ DCHECK(widget);
+ return widget;
+ }
+
+ WebContentsModalDialogManager* manager_;
+ std::set<views::Widget*> observed_widgets_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebContentsModalDialogManagerUIDelegateViews);
+};
+
+} // namespace
+
+WebContentsModalDialogManagerUIDelegate* WebContentsModalDialogManager::
+CreateUIDelegate(WebContentsModalDialogManager* manager) {
+ return new WebContentsModalDialogManagerUIDelegateViews(manager);
+}

Powered by Google App Engine
This is Rietveld 408576698