| Index: chrome/browser/ui/views/constrained_window_views.cc
|
| diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/chrome/browser/ui/views/constrained_window_views.cc
|
| deleted file mode 100644
|
| index 12505294de9f17564b4e38751921d880bc722092..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/views/constrained_window_views.cc
|
| +++ /dev/null
|
| @@ -1,169 +0,0 @@
|
| -// 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 "chrome/browser/ui/views/constrained_window_views.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "chrome/browser/ui/browser_finder.h"
|
| -#include "components/web_modal/popup_manager.h"
|
| -#include "components/web_modal/web_contents_modal_dialog_host.h"
|
| -#include "extensions/browser/guest_view/guest_view_base.h"
|
| -#include "ui/views/border.h"
|
| -#include "ui/views/widget/widget.h"
|
| -#include "ui/views/widget/widget_observer.h"
|
| -#include "ui/views/window/dialog_delegate.h"
|
| -
|
| -using web_modal::ModalDialogHost;
|
| -using web_modal::ModalDialogHostObserver;
|
| -
|
| -namespace {
|
| -// The name of a key to store on the window handle to associate
|
| -// BrowserModalDialogHostObserverViews with the Widget.
|
| -const char* const kBrowserModalDialogHostObserverViewsKey =
|
| - "__BROWSER_MODAL_DIALOG_HOST_OBSERVER_VIEWS__";
|
| -
|
| -// Applies positioning changes from the ModalDialogHost to the Widget.
|
| -class BrowserModalDialogHostObserverViews
|
| - : public views::WidgetObserver,
|
| - public ModalDialogHostObserver {
|
| - public:
|
| - BrowserModalDialogHostObserverViews(ModalDialogHost* host,
|
| - views::Widget* target_widget,
|
| - const char *const native_window_property)
|
| - : host_(host),
|
| - target_widget_(target_widget),
|
| - native_window_property_(native_window_property) {
|
| - DCHECK(host_);
|
| - DCHECK(target_widget_);
|
| - host_->AddObserver(this);
|
| - target_widget_->AddObserver(this);
|
| - }
|
| -
|
| - virtual ~BrowserModalDialogHostObserverViews() {
|
| - if (host_)
|
| - host_->RemoveObserver(this);
|
| - target_widget_->RemoveObserver(this);
|
| - target_widget_->SetNativeWindowProperty(native_window_property_, NULL);
|
| - }
|
| -
|
| - // WidgetObserver overrides
|
| - virtual void OnWidgetClosing(views::Widget* widget) override {
|
| - delete this;
|
| - }
|
| -
|
| - // WebContentsModalDialogHostObserver overrides
|
| - virtual void OnPositionRequiresUpdate() override {
|
| - UpdateBrowserModalDialogPosition(target_widget_, host_);
|
| - }
|
| -
|
| - virtual void OnHostDestroying() override {
|
| - host_->RemoveObserver(this);
|
| - host_ = NULL;
|
| - }
|
| -
|
| - private:
|
| - ModalDialogHost* host_;
|
| - views::Widget* target_widget_;
|
| - const char* const native_window_property_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BrowserModalDialogHostObserverViews);
|
| -};
|
| -
|
| -void UpdateModalDialogPosition(views::Widget* widget,
|
| - web_modal::ModalDialogHost* dialog_host,
|
| - const gfx::Size& size) {
|
| - // Do not forcibly update the dialog widget position if it is being dragged.
|
| - if (widget->HasCapture())
|
| - return;
|
| -
|
| - gfx::Point position = dialog_host->GetDialogPosition(size);
|
| - views::Border* border = widget->non_client_view()->frame_view()->border();
|
| - // Border may be null during widget initialization.
|
| - if (border) {
|
| - // Align the first row of pixels inside the border. This is the apparent
|
| - // top of the dialog.
|
| - position.set_y(position.y() - border->GetInsets().top());
|
| - }
|
| -
|
| - if (widget->is_top_level()) {
|
| - position +=
|
| - views::Widget::GetWidgetForNativeView(dialog_host->GetHostView())->
|
| - GetClientAreaBoundsInScreen().OffsetFromOrigin();
|
| - }
|
| -
|
| - widget->SetBounds(gfx::Rect(position, size));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void UpdateWebContentsModalDialogPosition(
|
| - views::Widget* widget,
|
| - web_modal::WebContentsModalDialogHost* dialog_host) {
|
| - gfx::Size size = widget->GetRootView()->GetPreferredSize();
|
| - gfx::Size max_size = dialog_host->GetMaximumDialogSize();
|
| - // Enlarge the max size by the top border, as the dialog will be shifted
|
| - // outside the area specified by the dialog host by this amount later.
|
| - views::Border* border =
|
| - widget->non_client_view()->frame_view()->border();
|
| - // Border may be null during widget initialization.
|
| - if (border)
|
| - max_size.Enlarge(0, border->GetInsets().top());
|
| - size.SetToMin(max_size);
|
| - UpdateModalDialogPosition(widget, dialog_host, size);
|
| -}
|
| -
|
| -void UpdateBrowserModalDialogPosition(views::Widget* widget,
|
| - web_modal::ModalDialogHost* dialog_host) {
|
| - UpdateModalDialogPosition(widget, dialog_host,
|
| - widget->GetRootView()->GetPreferredSize());
|
| -}
|
| -
|
| -views::Widget* ShowWebModalDialogViews(
|
| - views::WidgetDelegate* dialog,
|
| - content::WebContents* initiator_web_contents) {
|
| - extensions::GuestViewBase* guest_view =
|
| - extensions::GuestViewBase::FromWebContents(initiator_web_contents);
|
| - // For embedded WebContents, use the embedder's WebContents for constrained
|
| - // window.
|
| - content::WebContents* web_contents =
|
| - guest_view && guest_view->embedder_web_contents() ?
|
| - guest_view->embedder_web_contents() : initiator_web_contents;
|
| - views::Widget* widget = CreateWebModalDialogViews(dialog, web_contents);
|
| - web_modal::PopupManager* popup_manager =
|
| - web_modal::PopupManager::FromWebContents(web_contents);
|
| - popup_manager->ShowModalDialog(widget->GetNativeWindow(), web_contents);
|
| - return widget;
|
| -}
|
| -
|
| -views::Widget* CreateWebModalDialogViews(views::WidgetDelegate* dialog,
|
| - content::WebContents* web_contents) {
|
| - DCHECK_EQ(ui::MODAL_TYPE_CHILD, dialog->GetModalType());
|
| - web_modal::PopupManager* popup_manager =
|
| - web_modal::PopupManager::FromWebContents(web_contents);
|
| - const gfx::NativeWindow parent = popup_manager->GetHostView();
|
| - return views::DialogDelegate::CreateDialogWidget(dialog, NULL, parent);
|
| -}
|
| -
|
| -// TODO(gbillock): Replace this with PopupManager calls.
|
| -views::Widget* CreateBrowserModalDialogViews(views::DialogDelegate* dialog,
|
| - gfx::NativeWindow parent) {
|
| - views::Widget* widget =
|
| - views::DialogDelegate::CreateDialogWidget(dialog, NULL, parent);
|
| - if (!dialog->UseNewStyleForThisDialog())
|
| - return widget;
|
| -
|
| - // Get the browser dialog management and hosting components from |parent|.
|
| - Browser* browser = chrome::FindBrowserWithWindow(parent);
|
| - if (browser) {
|
| - ChromeWebModalDialogManagerDelegate* manager = browser;
|
| - ModalDialogHost* host = manager->GetWebContentsModalDialogHost();
|
| - DCHECK_EQ(parent, host->GetHostView());
|
| - ModalDialogHostObserver* dialog_host_observer =
|
| - new BrowserModalDialogHostObserverViews(
|
| - host, widget, kBrowserModalDialogHostObserverViewsKey);
|
| - dialog_host_observer->OnPositionRequiresUpdate();
|
| - }
|
| - return widget;
|
| -}
|
|
|