| Index: chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
|
| diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
|
| index f043fad5a0c019634695a187d725aec839d59d58..c3b9a2c85252195b82ab12b1ba2dc4de25b2e426 100644
|
| --- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
|
| +++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
|
| @@ -9,34 +9,56 @@
|
| #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet.h"
|
| #import "chrome/browser/ui/cocoa/single_web_contents_dialog_manager_cocoa.h"
|
| #include "components/guest_view/browser/guest_view_base.h"
|
| -#include "components/web_modal/web_contents_modal_dialog_manager.h"
|
| #include "content/public/browser/browser_thread.h"
|
|
|
| using web_modal::WebContentsModalDialogManager;
|
|
|
| +ConstrainedWindowMac* CreateAndShowWebModalDialogMac(
|
| + ConstrainedWindowMacDelegate* delegate,
|
| + content::WebContents* web_contents,
|
| + id<ConstrainedWindowSheet> sheet) {
|
| + ConstrainedWindowMac* window =
|
| + new ConstrainedWindowMac(delegate, web_contents, sheet);
|
| + window->ShowWebContentsModalDialog();
|
| + return window;
|
| +}
|
| +
|
| +ConstrainedWindowMac* CreateWebModalDialogMac(
|
| + ConstrainedWindowMacDelegate* delegate,
|
| + content::WebContents* web_contents,
|
| + id<ConstrainedWindowSheet> sheet) {
|
| + return new ConstrainedWindowMac(delegate, web_contents, sheet);
|
| +}
|
| +
|
| ConstrainedWindowMac::ConstrainedWindowMac(
|
| ConstrainedWindowMacDelegate* delegate,
|
| content::WebContents* web_contents,
|
| id<ConstrainedWindowSheet> sheet)
|
| - : delegate_(delegate) {
|
| + : delegate_(delegate),
|
| + sheet_([sheet retain]) {
|
| DCHECK(sheet);
|
|
|
| // |web_contents| may be embedded within a chain of nested GuestViews. If it
|
| // is, follow the chain of embedders to the outermost WebContents and use it.
|
| - web_contents =
|
| + web_contents_ =
|
| guest_view::GuestViewBase::GetTopLevelWebContents(web_contents);
|
|
|
| - auto manager = WebContentsModalDialogManager::FromWebContents(web_contents);
|
| - scoped_ptr<SingleWebContentsDialogManagerCocoa> native_manager(
|
| - new SingleWebContentsDialogManagerCocoa(this, sheet, manager));
|
| - manager->ShowDialogWithManager([sheet sheetWindow], native_manager.Pass());
|
| + native_manager_.reset(
|
| + new SingleWebContentsDialogManagerCocoa(this, sheet_.get(),
|
| + GetDialogManager()));
|
| }
|
|
|
| ConstrainedWindowMac::~ConstrainedWindowMac() {
|
| CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + native_manager_.reset();
|
| DCHECK(!manager_);
|
| }
|
|
|
| +void ConstrainedWindowMac::ShowWebContentsModalDialog() {
|
| + GetDialogManager()->ShowDialogWithManager(
|
| + [sheet_.get() sheetWindow], native_manager_.Pass());
|
| +}
|
| +
|
| void ConstrainedWindowMac::CloseWebContentsModalDialog() {
|
| if (manager_)
|
| manager_->Close();
|
| @@ -46,3 +68,8 @@ void ConstrainedWindowMac::OnDialogClosing() {
|
| if (delegate_)
|
| delegate_->OnConstrainedWindowClosed(this);
|
| }
|
| +
|
| +WebContentsModalDialogManager* ConstrainedWindowMac::GetDialogManager() {
|
| + DCHECK(web_contents_);
|
| + return WebContentsModalDialogManager::FromWebContents(web_contents_);
|
| +}
|
|
|