Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3738)

Unified Diff: chrome/browser/ui/cocoa/profiles/signin_view_controller_delegate_mac.mm

Issue 2617583006: Using native sheet to display modal dialogs for sign in (Closed)
Patch Set: Rebase Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 7cf223f19960399d89af08fc9b9b832c714180dd..c680b316430ce81bfe8c2e1bdf87ac9b52b3531b 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,
Browser* browser,
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),
browser_(browser),
+ dialog_modal_type_(dialog_modal_type),
window_frame_(frame) {
DCHECK(browser_);
DCHECK(browser_->tab_strip_model()->GetActiveWebContents())
@@ -73,8 +75,7 @@ SigninViewControllerDelegateMac::~SigninViewControllerDelegateMac() {}
void SigninViewControllerDelegateMac::OnConstrainedWindowClosed(
ConstrainedWindowMac* window) {
- ResetSigninViewControllerDelegate();
- delete this;
+ CleanupAndDeleteThis();
}
// static
@@ -149,8 +150,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()) {
+ [window_.get().sheetParent endSheet:window_];
+ window_.reset(nil);
+ CleanupAndDeleteThis();
+ }
+ break;
+ default:
+ NOTREACHED() << "Unsupported dialog modal type " << dialog_modal_type_;
+ }
}
void SigninViewControllerDelegateMac::ResizeNativeView(int height) {
@@ -179,8 +193,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(
@@ -196,6 +220,11 @@ void SigninViewControllerDelegateMac::HandleKeyboardEvent(
}
}
+void SigninViewControllerDelegateMac::CleanupAndDeleteThis() {
+ ResetSigninViewControllerDelegate();
+ delete this;
+}
+
// static
SigninViewControllerDelegate*
SigninViewControllerDelegate::CreateModalSigninDelegate(
@@ -208,7 +237,7 @@ SigninViewControllerDelegate::CreateModalSigninDelegate(
SigninViewControllerDelegateMac::CreateGaiaWebContents(
nullptr, mode, browser->profile(), access_point),
browser, NSMakeRect(0, 0, kModalDialogWidth, kFixedGaiaViewHeight),
- false /* wait_for_size */);
+ ui::MODAL_TYPE_CHILD, false /* wait_for_size */);
}
// static
@@ -223,7 +252,7 @@ SigninViewControllerDelegate::CreateSyncConfirmationDelegate(
browser,
NSMakeRect(0, 0, kModalDialogWidth,
GetSyncConfirmationDialogPreferredHeight(browser->profile())),
- true /* wait_for_size */);
+ ui::MODAL_TYPE_WINDOW, true /* wait_for_size */);
}
// static
@@ -236,5 +265,5 @@ SigninViewControllerDelegate::CreateSigninErrorDelegate(
SigninViewControllerDelegateMac::CreateSigninErrorWebContents(
browser->profile()),
browser, NSMakeRect(0, 0, kModalDialogWidth, kSigninErrorDialogHeight),
- true /* wait_for_size */);
+ ui::MODAL_TYPE_WINDOW, true /* wait_for_size */);
}

Powered by Google App Engine
This is Rietveld 408576698