// Copyright 2013 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. #import "chrome/browser/ui/cocoa/profile_signin_confirmation_dialog_cocoa.h" #include "base/message_loop/message_loop.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.h" #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_window.h" #include "chrome/browser/ui/sync/profile_signin_confirmation_helper.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" namespace { // static void ShowDialog( Browser* browser, content::WebContents* web_contents, Profile* profile, const std::string& username, ui::ProfileSigninConfirmationDelegate* delegate, bool offer_profile_creation) { // The dialog owns itself. new ProfileSigninConfirmationDialogCocoa(browser, web_contents, profile, username, delegate, offer_profile_creation); } } // namespace namespace chrome { // Declared in browser_dialogs.h void ShowProfileSigninConfirmationDialog( Browser* browser, content::WebContents* web_contents, Profile* profile, const std::string& username, ui::ProfileSigninConfirmationDelegate* delegate) { ui::CheckShouldPromptForNewProfile( profile, base::Bind(ShowDialog, browser, web_contents, profile, username, delegate)); } } // namespace chrome ProfileSigninConfirmationDialogCocoa::ProfileSigninConfirmationDialogCocoa( Browser* browser, content::WebContents* web_contents, Profile* profile, const std::string& username, ui::ProfileSigninConfirmationDelegate* delegate, bool offer_profile_creation) { // Setup the dialog view controller. const base::Closure& closeDialogCallback = base::Bind(&ProfileSigninConfirmationDialogCocoa::Close, base::Unretained(this)); controller_.reset( [[ProfileSigninConfirmationViewController alloc] initWithBrowser:browser username:username delegate:delegate closeDialogCallback:closeDialogCallback offerProfileCreation:offer_profile_creation]); // Setup the constrained window that will show the view. base::scoped_nsobject window([[ConstrainedWindowCustomWindow alloc] initWithContentRect:[[controller_ view] bounds]]); [[window contentView] addSubview:[controller_ view]]; base::scoped_nsobject sheet( [[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window]); window_.reset(new ConstrainedWindowMac(this, web_contents, sheet)); } ProfileSigninConfirmationDialogCocoa::~ProfileSigninConfirmationDialogCocoa() { } void ProfileSigninConfirmationDialogCocoa::Close() { window_->CloseWebContentsModalDialog(); } void ProfileSigninConfirmationDialogCocoa::OnConstrainedWindowClosed( ConstrainedWindowMac* window) { base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); }