| 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_); | 
| +} | 
|  |