| Index: chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc
|
| diff --git a/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc b/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc
|
| index de8ef012e172b6ff4c8387c266011bfab0f08ab4..f822bd7fa82c48ef1d834bbae21f014bfce6d319 100644
|
| --- a/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc
|
| +++ b/chrome/browser/ui/views/constrained_web_dialog_delegate_views.cc
|
| @@ -23,6 +23,10 @@
|
| #include "ui/web_dialogs/web_dialog_delegate.h"
|
| #include "ui/web_dialogs/web_dialog_ui.h"
|
|
|
| +#if defined(OS_WIN)
|
| +#include "ui/base/win/shell.h"
|
| +#endif
|
| +
|
| namespace {
|
|
|
| // WebContentsObserver that tracks the lifetime of the WebContents to avoid
|
| @@ -144,14 +148,16 @@ class ConstrainedWebDialogDelegateViewViews
|
| ui::WebDialogDelegate* delegate,
|
| content::WebContents* web_contents,
|
| const gfx::Size& min_size,
|
| - const gfx::Size& max_size)
|
| + const gfx::Size& max_size,
|
| + bool independent_bounds)
|
| : views::WebView(browser_context),
|
| initiator_observer_(web_contents),
|
| impl_(new ConstrainedWebDialogDelegateViews(browser_context, delegate,
|
| &initiator_observer_,
|
| this)),
|
| min_size_(min_size),
|
| - max_size_(max_size) {
|
| + max_size_(max_size),
|
| + independent_bounds_(independent_bounds){
|
| SetWebContents(GetWebContents());
|
| AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE));
|
| if (!max_size_.IsEmpty())
|
| @@ -227,6 +233,9 @@ class ConstrainedWebDialogDelegateViewViews
|
| gfx::Size GetMaximumSize() const override {
|
| return !max_size_.IsEmpty() ? max_size_ : WebView::GetMaximumSize();
|
| }
|
| + bool * GetIndependentBounds() {
|
| + return &independent_bounds_;
|
| + }
|
| void RenderViewCreated(content::RenderViewHost* render_view_host) override {
|
| if (!max_size_.IsEmpty())
|
| EnableAutoResize();
|
| @@ -240,7 +249,9 @@ class ConstrainedWebDialogDelegateViewViews
|
| if (!max_size_.IsEmpty() && initiator_observer_.web_contents()) {
|
| web_modal::WebContentsModalDialogManager::FromWebContents(
|
| initiator_observer_.web_contents())
|
| - ->ShowModalDialog(GetWidget()->GetNativeWindow());
|
| + ->ShowModalDialog(GetWidget()->GetNativeWindow(),
|
| + GetIndependentBounds(),
|
| + constrained_window::kHasIndependentBoundsKey);
|
| }
|
| }
|
|
|
| @@ -258,6 +269,7 @@ class ConstrainedWebDialogDelegateViewViews
|
| // Minimum and maximum sizes to determine dialog bounds for auto-resizing.
|
| const gfx::Size min_size_;
|
| const gfx::Size max_size_;
|
| + bool independent_bounds_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ConstrainedWebDialogDelegateViewViews);
|
| };
|
| @@ -271,11 +283,32 @@ ConstrainedWebDialogDelegate* ShowConstrainedWebDialog(
|
| ConstrainedWebDialogDelegateViewViews* dialog =
|
| new ConstrainedWebDialogDelegateViewViews(
|
| browser_context, delegate, web_contents,
|
| - gfx::Size(), gfx::Size());
|
| + gfx::Size(), gfx::Size(), false);
|
| constrained_window::ShowWebModalDialogViews(dialog, web_contents);
|
| return dialog;
|
| }
|
|
|
| +ConstrainedWebDialogDelegate* ShowTopLevelConstrainedWebDialog(
|
| + content::BrowserContext* browser_context,
|
| + ui::WebDialogDelegate* delegate,
|
| + content::WebContents* web_contents) {
|
| +// This doesn't work on Linux desktop or windows classic themes.
|
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
|
| + return ShowConstrainedWebDialog(browser_context, delegate, web_contents);
|
| +#elif defined(OS_WIN)
|
| + if (!ui::win::IsAeroGlassEnabled())
|
| + return ShowConstrainedWebDialog(browser_context, delegate, web_contents);
|
| +#endif
|
| +
|
| + ConstrainedWebDialogDelegateViewViews* dialog =
|
| + new ConstrainedWebDialogDelegateViewViews(
|
| + browser_context, delegate, web_contents,
|
| + gfx::Size(), gfx::Size(), true);
|
| + constrained_window::ShowWebModalDialogWithIndBoundsViews(dialog,
|
| + web_contents, dialog->GetIndependentBounds());
|
| + return dialog;
|
| +}
|
| +
|
| ConstrainedWebDialogDelegate* ShowConstrainedWebDialogWithAutoResize(
|
| content::BrowserContext* browser_context,
|
| ui::WebDialogDelegate* delegate,
|
| @@ -287,7 +320,7 @@ ConstrainedWebDialogDelegate* ShowConstrainedWebDialogWithAutoResize(
|
| ConstrainedWebDialogDelegateViewViews* dialog =
|
| new ConstrainedWebDialogDelegateViewViews(
|
| browser_context, delegate, web_contents,
|
| - min_size, max_size);
|
| + min_size, max_size, false);
|
| constrained_window::CreateWebModalDialogViews(dialog, web_contents);
|
| return dialog;
|
| }
|
|
|