| Index: components/constrained_window/constrained_window_views.cc
|
| diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/components/constrained_window/constrained_window_views.cc
|
| similarity index 75%
|
| rename from chrome/browser/ui/views/constrained_window_views.cc
|
| rename to components/constrained_window/constrained_window_views.cc
|
| index 12505294de9f17564b4e38751921d880bc722092..43d48307336927b8f9a16aebd5006856c265a4e6 100644
|
| --- a/chrome/browser/ui/views/constrained_window_views.cc
|
| +++ b/components/constrained_window/constrained_window_views.cc
|
| @@ -2,14 +2,13 @@
|
| // 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 "components/constrained_window/constrained_window_views.h"
|
|
|
| #include <algorithm>
|
|
|
| -#include "chrome/browser/ui/browser_finder.h"
|
| +#include "components/constrained_window/constrained_window_views_client.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"
|
| @@ -19,19 +18,22 @@ using web_modal::ModalDialogHost;
|
| using web_modal::ModalDialogHostObserver;
|
|
|
| namespace {
|
| +
|
| +ConstrainedWindowViewsClient* constrained_window_views_client = NULL;
|
| +
|
| // 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__";
|
| +// WidgetModalDialogHostObserverViews with the Widget.
|
| +const char* const kWidgetModalDialogHostObserverViewsKey =
|
| + "__WIDGET_MODAL_DIALOG_HOST_OBSERVER_VIEWS__";
|
|
|
| // Applies positioning changes from the ModalDialogHost to the Widget.
|
| -class BrowserModalDialogHostObserverViews
|
| +class WidgetModalDialogHostObserverViews
|
| : public views::WidgetObserver,
|
| public ModalDialogHostObserver {
|
| public:
|
| - BrowserModalDialogHostObserverViews(ModalDialogHost* host,
|
| - views::Widget* target_widget,
|
| - const char *const native_window_property)
|
| + WidgetModalDialogHostObserverViews(ModalDialogHost* host,
|
| + views::Widget* target_widget,
|
| + const char *const native_window_property)
|
| : host_(host),
|
| target_widget_(target_widget),
|
| native_window_property_(native_window_property) {
|
| @@ -41,7 +43,7 @@ class BrowserModalDialogHostObserverViews
|
| target_widget_->AddObserver(this);
|
| }
|
|
|
| - virtual ~BrowserModalDialogHostObserverViews() {
|
| + virtual ~WidgetModalDialogHostObserverViews() {
|
| if (host_)
|
| host_->RemoveObserver(this);
|
| target_widget_->RemoveObserver(this);
|
| @@ -55,7 +57,7 @@ class BrowserModalDialogHostObserverViews
|
|
|
| // WebContentsModalDialogHostObserver overrides
|
| virtual void OnPositionRequiresUpdate() override {
|
| - UpdateBrowserModalDialogPosition(target_widget_, host_);
|
| + UpdateWidgetModalDialogPosition(target_widget_, host_);
|
| }
|
|
|
| virtual void OnHostDestroying() override {
|
| @@ -68,7 +70,7 @@ class BrowserModalDialogHostObserverViews
|
| views::Widget* target_widget_;
|
| const char* const native_window_property_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(BrowserModalDialogHostObserverViews);
|
| + DISALLOW_COPY_AND_ASSIGN(WidgetModalDialogHostObserverViews);
|
| };
|
|
|
| void UpdateModalDialogPosition(views::Widget* widget,
|
| @@ -98,6 +100,13 @@ void UpdateModalDialogPosition(views::Widget* widget,
|
|
|
| } // namespace
|
|
|
| +// static
|
| +void SetConstrainedWindowViewsClient(
|
| + scoped_ptr<ConstrainedWindowViewsClient> new_client) {
|
| + delete constrained_window_views_client;
|
| + constrained_window_views_client = new_client.release();
|
| +}
|
| +
|
| void UpdateWebContentsModalDialogPosition(
|
| views::Widget* widget,
|
| web_modal::WebContentsModalDialogHost* dialog_host) {
|
| @@ -114,8 +123,8 @@ void UpdateWebContentsModalDialogPosition(
|
| UpdateModalDialogPosition(widget, dialog_host, size);
|
| }
|
|
|
| -void UpdateBrowserModalDialogPosition(views::Widget* widget,
|
| - web_modal::ModalDialogHost* dialog_host) {
|
| +void UpdateWidgetModalDialogPosition(views::Widget* widget,
|
| + web_modal::ModalDialogHost* dialog_host) {
|
| UpdateModalDialogPosition(widget, dialog_host,
|
| widget->GetRootView()->GetPreferredSize());
|
| }
|
| @@ -123,13 +132,11 @@ void UpdateBrowserModalDialogPosition(views::Widget* widget,
|
| views::Widget* ShowWebModalDialogViews(
|
| views::WidgetDelegate* dialog,
|
| content::WebContents* initiator_web_contents) {
|
| - extensions::GuestViewBase* guest_view =
|
| - extensions::GuestViewBase::FromWebContents(initiator_web_contents);
|
| + DCHECK(constrained_window_views_client);
|
| // 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;
|
| + content::WebContents* web_contents = constrained_window_views_client->
|
| + GetEmbedderWebContents(initiator_web_contents);
|
| views::Widget* widget = CreateWebModalDialogViews(dialog, web_contents);
|
| web_modal::PopupManager* popup_manager =
|
| web_modal::PopupManager::FromWebContents(web_contents);
|
| @@ -153,16 +160,14 @@ views::Widget* CreateBrowserModalDialogViews(views::DialogDelegate* dialog,
|
| 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(constrained_window_views_client);
|
| + ModalDialogHost* host = constrained_window_views_client->
|
| + GetModalDialogHost(parent);
|
| + if (host) {
|
| DCHECK_EQ(parent, host->GetHostView());
|
| ModalDialogHostObserver* dialog_host_observer =
|
| - new BrowserModalDialogHostObserverViews(
|
| - host, widget, kBrowserModalDialogHostObserverViewsKey);
|
| + new WidgetModalDialogHostObserverViews(
|
| + host, widget, kWidgetModalDialogHostObserverViewsKey);
|
| dialog_host_observer->OnPositionRequiresUpdate();
|
| }
|
| return widget;
|
|
|