| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/cocoa/profiles/signin_view_controller_delegate_mac.h
" | 5 #include "chrome/browser/ui/cocoa/profiles/signin_view_controller_delegate_mac.h
" |
| 6 | 6 |
| 7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 8 | 8 |
| 9 #include "chrome/app/chrome_command_ids.h" | 9 #include "chrome/app/chrome_command_ids.h" |
| 10 #include "chrome/browser/profiles/profile.h" | 10 #include "chrome/browser/profiles/profile.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 : kSigninErrorDialogHeight; | 48 : kSigninErrorDialogHeight; |
| 49 } | 49 } |
| 50 | 50 |
| 51 } // namespace | 51 } // namespace |
| 52 | 52 |
| 53 SigninViewControllerDelegateMac::SigninViewControllerDelegateMac( | 53 SigninViewControllerDelegateMac::SigninViewControllerDelegateMac( |
| 54 SigninViewController* signin_view_controller, | 54 SigninViewController* signin_view_controller, |
| 55 std::unique_ptr<content::WebContents> web_contents, | 55 std::unique_ptr<content::WebContents> web_contents, |
| 56 Browser* browser, | 56 Browser* browser, |
| 57 NSRect frame, | 57 NSRect frame, |
| 58 ui::ModalType dialog_modal_type, |
| 58 bool wait_for_size) | 59 bool wait_for_size) |
| 59 : SigninViewControllerDelegate(signin_view_controller, web_contents.get()), | 60 : SigninViewControllerDelegate(signin_view_controller, web_contents.get()), |
| 60 web_contents_(std::move(web_contents)), | 61 web_contents_(std::move(web_contents)), |
| 61 wait_for_size_(wait_for_size), | 62 wait_for_size_(wait_for_size), |
| 62 browser_(browser), | 63 browser_(browser), |
| 64 dialog_modal_type_(dialog_modal_type), |
| 63 window_frame_(frame) { | 65 window_frame_(frame) { |
| 64 DCHECK(browser_); | 66 DCHECK(browser_); |
| 65 DCHECK(browser_->tab_strip_model()->GetActiveWebContents()) | 67 DCHECK(browser_->tab_strip_model()->GetActiveWebContents()) |
| 66 << "A tab must be active to present the sign-in modal dialog."; | 68 << "A tab must be active to present the sign-in modal dialog."; |
| 67 | 69 |
| 68 if (!wait_for_size_) | 70 if (!wait_for_size_) |
| 69 DisplayModal(); | 71 DisplayModal(); |
| 70 } | 72 } |
| 71 | 73 |
| 72 SigninViewControllerDelegateMac::~SigninViewControllerDelegateMac() {} | 74 SigninViewControllerDelegateMac::~SigninViewControllerDelegateMac() {} |
| 73 | 75 |
| 74 void SigninViewControllerDelegateMac::OnConstrainedWindowClosed( | 76 void SigninViewControllerDelegateMac::OnConstrainedWindowClosed( |
| 75 ConstrainedWindowMac* window) { | 77 ConstrainedWindowMac* window) { |
| 76 ResetSigninViewControllerDelegate(); | 78 CleanupAndDeleteThis(); |
| 77 delete this; | |
| 78 } | 79 } |
| 79 | 80 |
| 80 // static | 81 // static |
| 81 std::unique_ptr<content::WebContents> | 82 std::unique_ptr<content::WebContents> |
| 82 SigninViewControllerDelegateMac::CreateGaiaWebContents( | 83 SigninViewControllerDelegateMac::CreateGaiaWebContents( |
| 83 content::WebContentsDelegate* delegate, | 84 content::WebContentsDelegate* delegate, |
| 84 profiles::BubbleViewMode mode, | 85 profiles::BubbleViewMode mode, |
| 85 Profile* profile, | 86 Profile* profile, |
| 86 signin_metrics::AccessPoint access_point) { | 87 signin_metrics::AccessPoint access_point) { |
| 87 GURL url = | 88 GURL url = |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); | 143 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); |
| 143 | 144 |
| 144 NSView* webview = web_contents->GetNativeView(); | 145 NSView* webview = web_contents->GetNativeView(); |
| 145 [webview | 146 [webview |
| 146 setFrameSize:NSMakeSize(kModalDialogWidth, kSigninErrorDialogHeight)]; | 147 setFrameSize:NSMakeSize(kModalDialogWidth, kSigninErrorDialogHeight)]; |
| 147 | 148 |
| 148 return web_contents; | 149 return web_contents; |
| 149 } | 150 } |
| 150 | 151 |
| 151 void SigninViewControllerDelegateMac::PerformClose() { | 152 void SigninViewControllerDelegateMac::PerformClose() { |
| 152 if (constrained_window_.get()) | 153 switch (dialog_modal_type_) { |
| 153 constrained_window_->CloseWebContentsModalDialog(); | 154 case ui::MODAL_TYPE_CHILD: |
| 155 if (constrained_window_.get()) |
| 156 constrained_window_->CloseWebContentsModalDialog(); |
| 157 break; |
| 158 case ui::MODAL_TYPE_WINDOW: |
| 159 if (window_.get()) { |
| 160 [window_.get().sheetParent endSheet:window_]; |
| 161 window_.reset(nil); |
| 162 CleanupAndDeleteThis(); |
| 163 } |
| 164 break; |
| 165 default: |
| 166 NOTREACHED() << "Unsupported dialog modal type " << dialog_modal_type_; |
| 167 } |
| 154 } | 168 } |
| 155 | 169 |
| 156 void SigninViewControllerDelegateMac::ResizeNativeView(int height) { | 170 void SigninViewControllerDelegateMac::ResizeNativeView(int height) { |
| 157 if (wait_for_size_) { | 171 if (wait_for_size_) { |
| 158 [window_.get().contentView | 172 [window_.get().contentView |
| 159 setFrameSize:NSMakeSize(kModalDialogWidth, | 173 setFrameSize:NSMakeSize(kModalDialogWidth, |
| 160 height)]; | 174 height)]; |
| 161 window_frame_.size = NSMakeSize(kModalDialogWidth, height); | 175 window_frame_.size = NSMakeSize(kModalDialogWidth, height); |
| 162 DisplayModal(); | 176 DisplayModal(); |
| 163 } | 177 } |
| 164 } | 178 } |
| 165 | 179 |
| 166 void SigninViewControllerDelegateMac::DisplayModal() { | 180 void SigninViewControllerDelegateMac::DisplayModal() { |
| 167 content::WebContents* host_web_contents = | 181 content::WebContents* host_web_contents = |
| 168 browser_->tab_strip_model()->GetActiveWebContents(); | 182 browser_->tab_strip_model()->GetActiveWebContents(); |
| 169 | 183 |
| 170 // Avoid displaying the sign-in modal view if there are no active web | 184 // Avoid displaying the sign-in modal view if there are no active web |
| 171 // contents. This happens if the user closes the browser window before this | 185 // contents. This happens if the user closes the browser window before this |
| 172 // dialog has a chance to be displayed. | 186 // dialog has a chance to be displayed. |
| 173 if (!host_web_contents) | 187 if (!host_web_contents) |
| 174 return; | 188 return; |
| 175 | 189 |
| 176 window_.reset( | 190 window_.reset( |
| 177 [[ConstrainedWindowCustomWindow alloc] | 191 [[ConstrainedWindowCustomWindow alloc] |
| 178 initWithContentRect:window_frame_]); | 192 initWithContentRect:window_frame_]); |
| 179 window_.get().contentView = web_contents_->GetNativeView(); | 193 window_.get().contentView = web_contents_->GetNativeView(); |
| 180 base::scoped_nsobject<CustomConstrainedWindowSheet> sheet( | 194 base::scoped_nsobject<CustomConstrainedWindowSheet> sheet( |
| 181 [[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window_]); | 195 [[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window_]); |
| 182 constrained_window_ = | 196 switch (dialog_modal_type_) { |
| 183 CreateAndShowWebModalDialogMac(this, host_web_contents, sheet); | 197 case ui::MODAL_TYPE_CHILD: |
| 198 constrained_window_ = |
| 199 CreateAndShowWebModalDialogMac(this, host_web_contents, sheet); |
| 200 break; |
| 201 case ui::MODAL_TYPE_WINDOW: |
| 202 [host_web_contents->GetTopLevelNativeWindow() beginSheet:window_ |
| 203 completionHandler:nil]; |
| 204 break; |
| 205 default: |
| 206 NOTREACHED() << "Unsupported dialog modal type " << dialog_modal_type_; |
| 207 } |
| 184 } | 208 } |
| 185 | 209 |
| 186 void SigninViewControllerDelegateMac::HandleKeyboardEvent( | 210 void SigninViewControllerDelegateMac::HandleKeyboardEvent( |
| 187 content::WebContents* source, | 211 content::WebContents* source, |
| 188 const content::NativeWebKeyboardEvent& event) { | 212 const content::NativeWebKeyboardEvent& event) { |
| 189 int chrome_command_id = [BrowserWindowUtils getCommandId:event]; | 213 int chrome_command_id = [BrowserWindowUtils getCommandId:event]; |
| 190 bool can_handle_command = [BrowserWindowUtils isTextEditingEvent:event] || | 214 bool can_handle_command = [BrowserWindowUtils isTextEditingEvent:event] || |
| 191 chrome_command_id == IDC_CLOSE_WINDOW || | 215 chrome_command_id == IDC_CLOSE_WINDOW || |
| 192 chrome_command_id == IDC_EXIT; | 216 chrome_command_id == IDC_EXIT; |
| 193 if ([BrowserWindowUtils shouldHandleKeyboardEvent:event] && | 217 if ([BrowserWindowUtils shouldHandleKeyboardEvent:event] && |
| 194 can_handle_command) { | 218 can_handle_command) { |
| 195 [[NSApp mainMenu] performKeyEquivalent:event.os_event]; | 219 [[NSApp mainMenu] performKeyEquivalent:event.os_event]; |
| 196 } | 220 } |
| 197 } | 221 } |
| 198 | 222 |
| 223 void SigninViewControllerDelegateMac::CleanupAndDeleteThis() { |
| 224 ResetSigninViewControllerDelegate(); |
| 225 delete this; |
| 226 } |
| 227 |
| 199 // static | 228 // static |
| 200 SigninViewControllerDelegate* | 229 SigninViewControllerDelegate* |
| 201 SigninViewControllerDelegate::CreateModalSigninDelegate( | 230 SigninViewControllerDelegate::CreateModalSigninDelegate( |
| 202 SigninViewController* signin_view_controller, | 231 SigninViewController* signin_view_controller, |
| 203 profiles::BubbleViewMode mode, | 232 profiles::BubbleViewMode mode, |
| 204 Browser* browser, | 233 Browser* browser, |
| 205 signin_metrics::AccessPoint access_point) { | 234 signin_metrics::AccessPoint access_point) { |
| 206 return new SigninViewControllerDelegateMac( | 235 return new SigninViewControllerDelegateMac( |
| 207 signin_view_controller, | 236 signin_view_controller, |
| 208 SigninViewControllerDelegateMac::CreateGaiaWebContents( | 237 SigninViewControllerDelegateMac::CreateGaiaWebContents( |
| 209 nullptr, mode, browser->profile(), access_point), | 238 nullptr, mode, browser->profile(), access_point), |
| 210 browser, NSMakeRect(0, 0, kModalDialogWidth, kFixedGaiaViewHeight), | 239 browser, NSMakeRect(0, 0, kModalDialogWidth, kFixedGaiaViewHeight), |
| 211 false /* wait_for_size */); | 240 ui::MODAL_TYPE_CHILD, false /* wait_for_size */); |
| 212 } | 241 } |
| 213 | 242 |
| 214 // static | 243 // static |
| 215 SigninViewControllerDelegate* | 244 SigninViewControllerDelegate* |
| 216 SigninViewControllerDelegate::CreateSyncConfirmationDelegate( | 245 SigninViewControllerDelegate::CreateSyncConfirmationDelegate( |
| 217 SigninViewController* signin_view_controller, | 246 SigninViewController* signin_view_controller, |
| 218 Browser* browser) { | 247 Browser* browser) { |
| 219 return new SigninViewControllerDelegateMac( | 248 return new SigninViewControllerDelegateMac( |
| 220 signin_view_controller, | 249 signin_view_controller, |
| 221 SigninViewControllerDelegateMac::CreateSyncConfirmationWebContents( | 250 SigninViewControllerDelegateMac::CreateSyncConfirmationWebContents( |
| 222 browser->profile()), | 251 browser->profile()), |
| 223 browser, | 252 browser, |
| 224 NSMakeRect(0, 0, kModalDialogWidth, | 253 NSMakeRect(0, 0, kModalDialogWidth, |
| 225 GetSyncConfirmationDialogPreferredHeight(browser->profile())), | 254 GetSyncConfirmationDialogPreferredHeight(browser->profile())), |
| 226 true /* wait_for_size */); | 255 ui::MODAL_TYPE_WINDOW, true /* wait_for_size */); |
| 227 } | 256 } |
| 228 | 257 |
| 229 // static | 258 // static |
| 230 SigninViewControllerDelegate* | 259 SigninViewControllerDelegate* |
| 231 SigninViewControllerDelegate::CreateSigninErrorDelegate( | 260 SigninViewControllerDelegate::CreateSigninErrorDelegate( |
| 232 SigninViewController* signin_view_controller, | 261 SigninViewController* signin_view_controller, |
| 233 Browser* browser) { | 262 Browser* browser) { |
| 234 return new SigninViewControllerDelegateMac( | 263 return new SigninViewControllerDelegateMac( |
| 235 signin_view_controller, | 264 signin_view_controller, |
| 236 SigninViewControllerDelegateMac::CreateSigninErrorWebContents( | 265 SigninViewControllerDelegateMac::CreateSigninErrorWebContents( |
| 237 browser->profile()), | 266 browser->profile()), |
| 238 browser, NSMakeRect(0, 0, kModalDialogWidth, kSigninErrorDialogHeight), | 267 browser, NSMakeRect(0, 0, kModalDialogWidth, kSigninErrorDialogHeight), |
| 239 true /* wait_for_size */); | 268 ui::MODAL_TYPE_WINDOW, true /* wait_for_size */); |
| 240 } | 269 } |
| OLD | NEW |