| // Copyright 2015 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/cocoa/web_contents_modal_dialog_host_cocoa.h" |
| |
| #include "chrome/browser/ui/browser_finder.h" |
| #include "chrome/browser/ui/tab_dialogs.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_controller.h" |
| #include "ui/gfx/geometry/point.h" |
| #include "ui/gfx/geometry/size.h" |
| |
| WebContentsModalDialogHostCocoa::WebContentsModalDialogHostCocoa( |
| ConstrainedWindowSheetController* sheet_controller) |
| : sheet_controller_(sheet_controller) { |
| } |
| |
| WebContentsModalDialogHostCocoa::~WebContentsModalDialogHostCocoa() { |
| // Toolkit-Views calls OnHostDestroying on observers here, but the Cocoa host |
| // doesn't need to be observed. |
| } |
| |
| gfx::NativeView WebContentsModalDialogHostCocoa::GetHostView() const { |
| // To avoid the constrained window controller having to know about the browser |
| // view layout, use the active tab in the parent window. |
| NSWindow* parent_window = [sheet_controller_ parentWindow]; |
| Browser* browser = chrome::FindBrowserWithWindow(parent_window); |
| // This could be null for packaged app windows, but this dialog host is |
| // currently only used for browsers. |
| DCHECK(browser); |
| content::WebContents* web_contents = |
| browser->tab_strip_model()->GetActiveWebContents(); |
| DCHECK(web_contents); |
| TabDialogs* tab_dialogs = TabDialogs::FromWebContents(web_contents); |
| DCHECK(tab_dialogs); |
| |
| // Note this returns the WebContents' superview, so it doesn't really matter |
| // which WebContents inside the browser we actually chose above. |
| return tab_dialogs->GetDialogParentView(); |
| } |
| |
| gfx::Point WebContentsModalDialogHostCocoa::GetDialogPosition( |
| const gfx::Size& size) { |
| // Dialogs are always re-positioned by the constrained window sheet controller |
| // so nothing interesting to return yet. |
| return gfx::Point(); |
| } |
| |
| void WebContentsModalDialogHostCocoa::AddObserver( |
| web_modal::ModalDialogHostObserver* observer) { |
| NOTREACHED(); |
| } |
| void WebContentsModalDialogHostCocoa::RemoveObserver( |
| web_modal::ModalDialogHostObserver* observer) { |
| NOTREACHED(); |
| } |
| |
| gfx::Size WebContentsModalDialogHostCocoa::GetMaximumDialogSize() { |
| // The dialog should try to fit within the overlay for the web contents. |
| // Note that, for things like print preview, this is just a suggested maximum. |
| return gfx::Size( |
| [sheet_controller_ overlayWindowSizeForParentView:GetHostView()]); |
| } |