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

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: fix Android link error Created 7 years, 10 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..b5371b4dd8bdfdb81af7389cd3b51ce44841d292
--- /dev/null
+++ b/chrome/browser/ui/views/web_contents_modal_dialog_manager_views.cc
@@ -0,0 +1,112 @@
+// 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/native_web_contents_modal_dialog_manager.h"
+#include "chrome/browser/ui/views/constrained_window_views.h"
+#include "chrome/browser/ui/web_contents_modal_dialog_manager.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 NativeWebContentsModalDialogManagerViews
+ : public NativeWebContentsModalDialogManager,
+ public views::WidgetObserver {
+ public:
+ NativeWebContentsModalDialogManagerViews(
+ WebContentsModalDialogManager* manager)
+ : manager_(manager) {
+ }
+
+ virtual ~NativeWebContentsModalDialogManagerViews() {
+ for (std::set<views::Widget*>::iterator it = observed_widgets_.begin();
+ it != observed_widgets_.end();
+ ++it) {
+ (*it)->RemoveObserver(this);
+ }
+ }
+
+ // NativeWebContentsModalDialogManager overrides
+ 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)
+ // TODO(wittman): remove once the new visual style is complete
+ widget->GetNativeWindow()->SetProperty(aura::client::kConstrainedWindowKey,
+ 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);
+ }
+
+ // TODO(wittman): remove once the new visual style is complete
+ widget->GetNativeWindow()->SetProperty(ash::kConstrainedWindowKey, true);
+ 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(NativeWebContentsModalDialogManagerViews);
+};
+
+} // namespace
+
+NativeWebContentsModalDialogManager* WebContentsModalDialogManager::
+CreateNativeManager(WebContentsModalDialogManager* manager) {
+ return new NativeWebContentsModalDialogManagerViews(manager);
+}
« no previous file with comments | « chrome/browser/ui/views/tab_modal_confirm_dialog_views.cc ('k') | chrome/browser/ui/views/web_intent_picker_views.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698