OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #import <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
6 | 6 |
7 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" | 7 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" |
8 | 8 |
9 #include "base/mac/bundle_locations.h" | 9 #include "base/mac/bundle_locations.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 #import "ui/base/cocoa/hover_image_button.h" | 63 #import "ui/base/cocoa/hover_image_button.h" |
64 #include "ui/base/cocoa/window_size_constants.h" | 64 #include "ui/base/cocoa/window_size_constants.h" |
65 #include "ui/base/l10n/l10n_util.h" | 65 #include "ui/base/l10n/l10n_util.h" |
66 #include "ui/base/l10n/l10n_util_mac.h" | 66 #include "ui/base/l10n/l10n_util_mac.h" |
67 #include "ui/base/resource/resource_bundle.h" | 67 #include "ui/base/resource/resource_bundle.h" |
68 #include "ui/gfx/image/image.h" | 68 #include "ui/gfx/image/image.h" |
69 #include "ui/gfx/text_elider.h" | 69 #include "ui/gfx/text_elider.h" |
70 #include "ui/native_theme/common_theme.h" | 70 #include "ui/native_theme/common_theme.h" |
71 #include "ui/native_theme/native_theme.h" | 71 #include "ui/native_theme/native_theme.h" |
72 | 72 |
| 73 #include "chrome/app/chrome_command_ids.h" |
| 74 #include "content/public/browser/native_web_keyboard_event.h" |
| 75 #import "chrome/browser/ui/cocoa/browser_window_utils.h" |
| 76 |
73 namespace { | 77 namespace { |
74 | 78 |
75 // Constants taken from the Windows/Views implementation at: | 79 // Constants taken from the Windows/Views implementation at: |
76 // chrome/browser/ui/views/profile_chooser_view.cc | 80 // chrome/browser/ui/views/profile_chooser_view.cc |
77 const int kLargeImageSide = 88; | 81 const int kLargeImageSide = 88; |
78 const int kSmallImageSide = 32; | 82 const int kSmallImageSide = 32; |
79 const CGFloat kFixedMenuWidth = 250; | 83 const CGFloat kFixedMenuWidth = 250; |
80 | 84 |
81 const CGFloat kVerticalSpacing = 16.0; | 85 const CGFloat kVerticalSpacing = 16.0; |
82 const CGFloat kSmallVerticalSpacing = 10.0; | 86 const CGFloat kSmallVerticalSpacing = 10.0; |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 } | 244 } |
241 | 245 |
242 bool HasAuthError(Profile* profile) { | 246 bool HasAuthError(Profile* profile) { |
243 const SigninErrorController* error_controller = | 247 const SigninErrorController* error_controller = |
244 profiles::GetSigninErrorController(profile); | 248 profiles::GetSigninErrorController(profile); |
245 return error_controller && error_controller->HasError(); | 249 return error_controller && error_controller->HasError(); |
246 } | 250 } |
247 | 251 |
248 } // namespace | 252 } // namespace |
249 | 253 |
| 254 // Custom WebContentsDelegate that allows handling of hotkeys and suppresses |
| 255 // the context menu |
| 256 class GaiaWebContentsDelegate : public content::WebContentsDelegate { |
| 257 public: |
| 258 GaiaWebContentsDelegate() {} |
| 259 |
| 260 virtual ~GaiaWebContentsDelegate() {} |
| 261 |
| 262 private: |
| 263 // Overridden from content::WebContentsDelegate. |
| 264 bool HandleContextMenu(const content::ContextMenuParams& params) override; |
| 265 void HandleKeyboardEvent( |
| 266 content::WebContents* source, |
| 267 const content::NativeWebKeyboardEvent& event) override; |
| 268 }; |
| 269 |
| 270 bool GaiaWebContentsDelegate::HandleContextMenu( |
| 271 const content::ContextMenuParams& params) { |
| 272 #ifndef NDEBUG |
| 273 return false; |
| 274 #else |
| 275 return true; |
| 276 #endif |
| 277 } |
| 278 |
| 279 void GaiaWebContentsDelegate::HandleKeyboardEvent( |
| 280 content::WebContents* source, |
| 281 const content::NativeWebKeyboardEvent& event) { |
| 282 if (![BrowserWindowUtils shouldHandleKeyboardEvent:event]) |
| 283 return; |
| 284 |
| 285 int chromeCommandId = [BrowserWindowUtils getCommandId:event]; |
| 286 |
| 287 bool isTextEditingCommand = |
| 288 (event.modifiers & blink::WebInputEvent::MetaKey) && |
| 289 (event.windowsKeyCode == ui::VKEY_A || |
| 290 event.windowsKeyCode == ui::VKEY_V); |
| 291 |
| 292 // TODO(guohui): maybe should add accelerator for the back button. |
| 293 if (chromeCommandId == IDC_CLOSE_WINDOW || chromeCommandId == IDC_EXIT || |
| 294 isTextEditingCommand) { |
| 295 [[NSApp mainMenu] performKeyEquivalent:event.os_event]; |
| 296 } |
| 297 } |
| 298 |
250 // Class that listens to changes to the OAuth2Tokens for the active profile, | 299 // Class that listens to changes to the OAuth2Tokens for the active profile, |
251 // changes to the avatar menu model or browser close notifications. | 300 // changes to the avatar menu model or browser close notifications. |
252 class ActiveProfileObserverBridge : public AvatarMenuObserver, | 301 class ActiveProfileObserverBridge : public AvatarMenuObserver, |
253 public content::NotificationObserver, | 302 public content::NotificationObserver, |
254 public OAuth2TokenService::Observer { | 303 public OAuth2TokenService::Observer { |
255 public: | 304 public: |
256 ActiveProfileObserverBridge(ProfileChooserController* controller, | 305 ActiveProfileObserverBridge(ProfileChooserController* controller, |
257 Browser* browser) | 306 Browser* browser) |
258 : controller_(controller), | 307 : controller_(controller), |
259 browser_(browser), | 308 browser_(browser), |
(...skipping 1638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1898 errorController ? errorController->error_username() : std::string()); | 1947 errorController ? errorController->error_username() : std::string()); |
1899 messageId = IDS_PROFILES_GAIA_REAUTH_TITLE; | 1948 messageId = IDS_PROFILES_GAIA_REAUTH_TITLE; |
1900 break; | 1949 break; |
1901 default: | 1950 default: |
1902 NOTREACHED() << "Called with invalid mode=" << viewMode_; | 1951 NOTREACHED() << "Called with invalid mode=" << viewMode_; |
1903 break; | 1952 break; |
1904 } | 1953 } |
1905 | 1954 |
1906 webContents_.reset(content::WebContents::Create( | 1955 webContents_.reset(content::WebContents::Create( |
1907 content::WebContents::CreateParams(browser_->profile()))); | 1956 content::WebContents::CreateParams(browser_->profile()))); |
| 1957 |
| 1958 webContentsDelegate_.reset(new GaiaWebContentsDelegate()); |
| 1959 webContents_->SetDelegate(webContentsDelegate_.get()); |
1908 webContents_->GetController().LoadURL(url, | 1960 webContents_->GetController().LoadURL(url, |
1909 content::Referrer(), | 1961 content::Referrer(), |
1910 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, | 1962 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, |
1911 std::string()); | 1963 std::string()); |
1912 NSView* webview = webContents_->GetNativeView(); | 1964 NSView* webview = webContents_->GetNativeView(); |
1913 [webview setFrameSize:NSMakeSize(kFixedGaiaViewWidth, kFixedGaiaViewHeight)]; | 1965 [webview setFrameSize:NSMakeSize(kFixedGaiaViewWidth, kFixedGaiaViewHeight)]; |
1914 [container addSubview:webview]; | 1966 [container addSubview:webview]; |
1915 content::RenderWidgetHostView* rwhv = webContents_->GetRenderWidgetHostView(); | 1967 content::RenderWidgetHostView* rwhv = webContents_->GetRenderWidgetHostView(); |
1916 if (rwhv) | 1968 if (rwhv) |
1917 rwhv->SetBackgroundColor(profiles::kAvatarBubbleGaiaBackgroundColor); | 1969 rwhv->SetBackgroundColor(profiles::kAvatarBubbleGaiaBackgroundColor); |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2204 } | 2256 } |
2205 | 2257 |
2206 - (bool)shouldShowGoIncognito { | 2258 - (bool)shouldShowGoIncognito { |
2207 bool incognitoAvailable = | 2259 bool incognitoAvailable = |
2208 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != | 2260 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != |
2209 IncognitoModePrefs::DISABLED; | 2261 IncognitoModePrefs::DISABLED; |
2210 return incognitoAvailable && !browser_->profile()->IsGuestSession(); | 2262 return incognitoAvailable && !browser_->profile()->IsGuestSession(); |
2211 } | 2263 } |
2212 | 2264 |
2213 @end | 2265 @end |
OLD | NEW |