Index: chrome/browser/ui/cocoa/profiles/signin_view_controller_delegate_mac.mm |
diff --git a/chrome/browser/ui/cocoa/profiles/signin_view_controller_delegate_mac.mm b/chrome/browser/ui/cocoa/profiles/signin_view_controller_delegate_mac.mm |
index 537b68bf3221a458be51c04d5f92d06083f582f5..70f9af8688b23bd2d67671ea2e08e29dd2616e3e 100644 |
--- a/chrome/browser/ui/cocoa/profiles/signin_view_controller_delegate_mac.mm |
+++ b/chrome/browser/ui/cocoa/profiles/signin_view_controller_delegate_mac.mm |
@@ -55,11 +55,13 @@ SigninViewControllerDelegateMac::SigninViewControllerDelegateMac( |
std::unique_ptr<content::WebContents> web_contents, |
content::WebContents* host_web_contents, |
NSRect frame, |
+ ui::ModalType dialog_modal_type, |
bool wait_for_size) |
: SigninViewControllerDelegate(signin_view_controller, web_contents.get()), |
web_contents_(std::move(web_contents)), |
wait_for_size_(wait_for_size), |
host_web_contents_(host_web_contents), |
+ dialog_modal_type_(dialog_modal_type), |
window_frame_(frame) { |
if (!wait_for_size_) |
DisplayModal(); |
@@ -69,8 +71,7 @@ SigninViewControllerDelegateMac::~SigninViewControllerDelegateMac() {} |
void SigninViewControllerDelegateMac::OnConstrainedWindowClosed( |
ConstrainedWindowMac* window) { |
- ResetSigninViewControllerDelegate(); |
- delete this; |
+ DeleteThis(); |
} |
// static |
@@ -145,8 +146,21 @@ SigninViewControllerDelegateMac::CreateSigninErrorWebContents( |
} |
void SigninViewControllerDelegateMac::PerformClose() { |
- if (constrained_window_.get()) |
- constrained_window_->CloseWebContentsModalDialog(); |
+ switch (dialog_modal_type_) { |
+ case ui::MODAL_TYPE_CHILD: |
+ if (constrained_window_.get()) |
+ constrained_window_->CloseWebContentsModalDialog(); |
+ break; |
+ case ui::MODAL_TYPE_WINDOW: |
+ if (window_.get()) { |
+ [host_web_contents_->GetTopLevelNativeWindow() endSheet:window_]; |
+ window_.reset(nil); |
+ DeleteThis(); |
+ } |
+ break; |
+ default: |
+ NOTREACHED() << "Unsupported dialog modal type " << dialog_modal_type_; |
+ } |
} |
void SigninViewControllerDelegateMac::ResizeNativeView(int height) { |
@@ -167,8 +181,18 @@ void SigninViewControllerDelegateMac::DisplayModal() { |
window_.get().contentView = web_contents_->GetNativeView(); |
base::scoped_nsobject<CustomConstrainedWindowSheet> sheet( |
[[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window_]); |
- constrained_window_ = |
- CreateAndShowWebModalDialogMac(this, host_web_contents_, sheet); |
+ switch (dialog_modal_type_) { |
+ case ui::MODAL_TYPE_CHILD: |
+ constrained_window_ = |
+ CreateAndShowWebModalDialogMac(this, host_web_contents_, sheet); |
+ break; |
+ case ui::MODAL_TYPE_WINDOW: |
+ [host_web_contents_->GetTopLevelNativeWindow() beginSheet:window_ |
+ completionHandler:nil]; |
+ break; |
+ default: |
+ NOTREACHED() << "Unsupported dialog modal type " << dialog_modal_type_; |
+ } |
} |
void SigninViewControllerDelegateMac::HandleKeyboardEvent( |
@@ -184,6 +208,11 @@ void SigninViewControllerDelegateMac::HandleKeyboardEvent( |
} |
} |
+void SigninViewControllerDelegateMac::DeleteThis() { |
+ ResetSigninViewControllerDelegate(); |
+ delete this; |
+} |
+ |
// static |
SigninViewControllerDelegate* |
SigninViewControllerDelegate::CreateModalSigninDelegate( |
@@ -192,12 +221,12 @@ SigninViewControllerDelegate::CreateModalSigninDelegate( |
Browser* browser, |
signin_metrics::AccessPoint access_point) { |
return new SigninViewControllerDelegateMac( |
- signin_view_controller, |
- SigninViewControllerDelegateMac::CreateGaiaWebContents( |
- nullptr, mode, browser->profile(), access_point), |
- browser->tab_strip_model()->GetActiveWebContents(), |
- NSMakeRect(0, 0, kModalDialogWidth, kFixedGaiaViewHeight), |
- false); |
+ signin_view_controller, |
+ SigninViewControllerDelegateMac::CreateGaiaWebContents( |
+ nullptr, mode, browser->profile(), access_point), |
+ browser->tab_strip_model()->GetActiveWebContents(), |
+ NSMakeRect(0, 0, kModalDialogWidth, kFixedGaiaViewHeight), |
+ ui::MODAL_TYPE_CHILD, false); |
} |
// static |
@@ -212,7 +241,7 @@ SigninViewControllerDelegate::CreateSyncConfirmationDelegate( |
browser->tab_strip_model()->GetActiveWebContents(), |
NSMakeRect(0, 0, kModalDialogWidth, |
GetSyncConfirmationDialogPreferredHeight(browser->profile())), |
- true); |
+ ui::MODAL_TYPE_WINDOW, true); |
} |
// static |
@@ -225,5 +254,6 @@ SigninViewControllerDelegate::CreateSigninErrorDelegate( |
SigninViewControllerDelegateMac::CreateSigninErrorWebContents( |
browser->profile()), |
browser->tab_strip_model()->GetActiveWebContents(), |
- NSMakeRect(0, 0, kModalDialogWidth, kSigninErrorDialogHeight), true); |
+ NSMakeRect(0, 0, kModalDialogWidth, kSigninErrorDialogHeight), |
+ ui::MODAL_TYPE_WINDOW, true); |
} |