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 |
index 07ba0048700603bcc7a39b8c64cb9ee8e410a747..3d2b47ae9b85fa481b0931d0cd81f31aa415782d 100644 |
--- a/chrome/browser/ui/views/constrained_window_views.cc |
+++ b/chrome/browser/ui/views/constrained_window_views.cc |
@@ -570,11 +570,19 @@ void ConstrainedWindowFrameView::InitClass() { |
void UpdateWebContentsModalDialogPosition( |
views::Widget* widget, |
web_modal::WebContentsModalDialogHost* dialog_host) { |
- gfx::Size size = widget->GetWindowBoundsInScreen().size(); |
- gfx::Point position = dialog_host->GetDialogPosition(size); |
+ gfx::Size size = widget->GetRootView()->GetPreferredSize(); |
views::Border* border = |
widget->non_client_view()->frame_view()->border(); |
+ 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 in the |
+ // function. |
// Border may be null during widget initialization. |
+ if (border) |
+ max_size.Enlarge(0, border->GetInsets().top()); |
+ size.SetToMin(max_size); |
+ |
+ gfx::Point position = dialog_host->GetDialogPosition(size); |
if (border) { |
// Align the first row of pixels inside the border. This is the apparent |
// top of the dialog. |