Chromium Code Reviews| 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" |
| 11 #include "base/strings/sys_string_conversions.h" | 11 #include "base/strings/sys_string_conversions.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
| 14 #include "chrome/browser/chrome_notification_types.h" | 14 #include "chrome/browser/chrome_notification_types.h" |
| 15 #include "chrome/browser/lifetime/application_lifetime.h" | 15 #include "chrome/browser/lifetime/application_lifetime.h" |
| 16 #include "chrome/browser/profiles/avatar_menu.h" | 16 #include "chrome/browser/profiles/avatar_menu.h" |
| 17 #include "chrome/browser/profiles/avatar_menu_observer.h" | 17 #include "chrome/browser/profiles/avatar_menu_observer.h" |
| 18 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 18 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
| 19 #include "chrome/browser/profiles/profile_info_cache.h" | 19 #include "chrome/browser/profiles/profile_info_cache.h" |
| 20 #include "chrome/browser/profiles/profile_manager.h" | 20 #include "chrome/browser/profiles/profile_manager.h" |
| 21 #include "chrome/browser/profiles/profile_metrics.h" | 21 #include "chrome/browser/profiles/profile_metrics.h" |
| 22 #include "chrome/browser/profiles/profile_window.h" | 22 #include "chrome/browser/profiles/profile_window.h" |
| 23 #include "chrome/browser/profiles/profiles_state.h" | 23 #include "chrome/browser/profiles/profiles_state.h" |
| 24 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 24 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 25 #include "chrome/browser/signin/signin_header_helper.h" | |
| 25 #include "chrome/browser/signin/signin_manager_factory.h" | 26 #include "chrome/browser/signin/signin_manager_factory.h" |
| 26 #include "chrome/browser/signin/signin_promo.h" | 27 #include "chrome/browser/signin/signin_promo.h" |
| 27 #include "chrome/browser/ui/browser.h" | 28 #include "chrome/browser/ui/browser.h" |
| 28 #include "chrome/browser/ui/browser_commands.h" | 29 #include "chrome/browser/ui/browser_commands.h" |
| 29 #include "chrome/browser/ui/browser_dialogs.h" | 30 #include "chrome/browser/ui/browser_dialogs.h" |
| 30 #include "chrome/browser/ui/browser_window.h" | 31 #include "chrome/browser/ui/browser_window.h" |
| 31 #include "chrome/browser/ui/chrome_pages.h" | 32 #include "chrome/browser/ui/chrome_pages.h" |
| 32 #include "chrome/browser/ui/chrome_style.h" | 33 #include "chrome/browser/ui/chrome_style.h" |
| 33 #import "chrome/browser/ui/cocoa/hyperlink_text_view.h" | 34 #import "chrome/browser/ui/cocoa/hyperlink_text_view.h" |
| 34 #import "chrome/browser/ui/cocoa/info_bubble_view.h" | 35 #import "chrome/browser/ui/cocoa/info_bubble_view.h" |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 423 [path addClip]; | 424 [path addClip]; |
| 424 [self.image drawAtPoint:bounds.origin | 425 [self.image drawAtPoint:bounds.origin |
| 425 fromRect:bounds | 426 fromRect:bounds |
| 426 operation:NSCompositeSourceOver | 427 operation:NSCompositeSourceOver |
| 427 fraction:1.0]; | 428 fraction:1.0]; |
| 428 | 429 |
| 429 } | 430 } |
| 430 | 431 |
| 431 - (void)editPhoto:(id)sender { | 432 - (void)editPhoto:(id)sender { |
| 432 avatarMenu_->EditProfile(avatarMenu_->GetActiveProfileIndex()); | 433 avatarMenu_->EditProfile(avatarMenu_->GetActiveProfileIndex()); |
| 434 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE]; | |
| 433 } | 435 } |
| 434 | 436 |
| 435 - (void)mouseEntered:(NSEvent*)event { | 437 - (void)mouseEntered:(NSEvent*)event { |
| 436 [changePhotoButton_ setHidden:NO]; | 438 [changePhotoButton_ setHidden:NO]; |
| 437 } | 439 } |
| 438 | 440 |
| 439 - (void)mouseExited:(NSEvent*)event { | 441 - (void)mouseExited:(NSEvent*)event { |
| 440 [changePhotoButton_ setHidden:YES]; | 442 [changePhotoButton_ setHidden:YES]; |
| 441 } | 443 } |
| 442 | 444 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 526 return self; | 528 return self; |
| 527 } | 529 } |
| 528 | 530 |
| 529 // NSTextField objects send an NSNotification to a delegate if | 531 // NSTextField objects send an NSNotification to a delegate if |
| 530 // it implements this method: | 532 // it implements this method: |
| 531 - (void)controlTextDidEndEditing:(NSNotification *)obj { | 533 - (void)controlTextDidEndEditing:(NSNotification *)obj { |
| 532 NSString* text = [profileNameTextField_ stringValue]; | 534 NSString* text = [profileNameTextField_ stringValue]; |
| 533 // Empty profile names are not allowed, and are treated as a cancel. | 535 // Empty profile names are not allowed, and are treated as a cancel. |
| 534 if ([text length] > 0) { | 536 if ([text length] > 0) { |
| 535 profiles::UpdateProfileName(profile_, base::SysNSStringToUTF16(text)); | 537 profiles::UpdateProfileName(profile_, base::SysNSStringToUTF16(text)); |
| 538 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_NAME]; | |
| 536 [self setTitle:text]; | 539 [self setTitle:text]; |
| 537 } | 540 } |
| 538 [profileNameTextField_ setHidden:YES]; | 541 [profileNameTextField_ setHidden:YES]; |
| 539 [profileNameTextField_ resignFirstResponder]; | 542 [profileNameTextField_ resignFirstResponder]; |
| 540 } | 543 } |
| 541 | 544 |
| 542 - (void)showEditableView:(id)sender { | 545 - (void)showEditableView:(id)sender { |
| 543 [profileNameTextField_ setHidden:NO]; | 546 [profileNameTextField_ setHidden:NO]; |
| 544 [profileNameTextField_ becomeFirstResponder]; | 547 [profileNameTextField_ becomeFirstResponder]; |
| 545 } | 548 } |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 731 - (NSButton*)linkButtonWithTitle:(NSString*)title | 734 - (NSButton*)linkButtonWithTitle:(NSString*)title |
| 732 frameOrigin:(NSPoint)frameOrigin | 735 frameOrigin:(NSPoint)frameOrigin |
| 733 action:(SEL)action; | 736 action:(SEL)action; |
| 734 | 737 |
| 735 // Creates an email account button with |title| and a remove icon. |tag| | 738 // Creates an email account button with |title| and a remove icon. |tag| |
| 736 // indicates which account the button refers to. | 739 // indicates which account the button refers to. |
| 737 - (NSButton*)accountButtonWithRect:(NSRect)rect | 740 - (NSButton*)accountButtonWithRect:(NSRect)rect |
| 738 title:(const std::string&)title | 741 title:(const std::string&)title |
| 739 tag:(int)tag; | 742 tag:(int)tag; |
| 740 | 743 |
| 744 // Clean-up done after an action was performed in the ProfileChooser. | |
| 745 - (void)postActionPerformed:(ProfileMetrics::ProfileDesktopMenu)action; | |
|
Scott Hess - ex-Googler
2014/05/30 04:09:27
I think it's weird to have this down here though i
Mike Lerman
2014/05/30 17:46:25
Done... I guess... since there's nothing for me to
| |
| 746 | |
| 741 @end | 747 @end |
| 742 | 748 |
| 743 @implementation ProfileChooserController | 749 @implementation ProfileChooserController |
| 744 - (profiles::BubbleViewMode) viewMode { | 750 - (profiles::BubbleViewMode) viewMode { |
| 745 return viewMode_; | 751 return viewMode_; |
| 746 } | 752 } |
| 747 | 753 |
| 748 - (IBAction)switchToProfile:(id)sender { | 754 - (IBAction)switchToProfile:(id)sender { |
| 749 // Check the event flags to see if a new window should be created. | 755 // Check the event flags to see if a new window should be created. |
| 750 bool alwaysCreate = ui::WindowOpenDispositionFromNSEvent( | 756 bool alwaysCreate = ui::WindowOpenDispositionFromNSEvent( |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 766 - (IBAction)showAccountManagement:(id)sender { | 772 - (IBAction)showAccountManagement:(id)sender { |
| 767 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT]; | 773 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT]; |
| 768 } | 774 } |
| 769 | 775 |
| 770 - (IBAction)hideAccountManagement:(id)sender { | 776 - (IBAction)hideAccountManagement:(id)sender { |
| 771 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER]; | 777 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER]; |
| 772 } | 778 } |
| 773 | 779 |
| 774 - (IBAction)lockProfile:(id)sender { | 780 - (IBAction)lockProfile:(id)sender { |
| 775 profiles::LockProfile(browser_->profile()); | 781 profiles::LockProfile(browser_->profile()); |
| 782 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_LOCK]; | |
| 776 } | 783 } |
| 777 | 784 |
| 778 - (IBAction)showInlineSigninPage:(id)sender { | 785 - (IBAction)showInlineSigninPage:(id)sender { |
| 779 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN]; | 786 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN]; |
| 780 } | 787 } |
| 781 | 788 |
| 782 - (IBAction)showTabbedSigninPage:(id)sender { | 789 - (IBAction)showTabbedSigninPage:(id)sender { |
| 783 chrome::ShowBrowserSignin(browser_, signin::SOURCE_MENU); | 790 chrome::ShowBrowserSignin(browser_, signin::SOURCE_MENU); |
| 784 } | 791 } |
| 785 | 792 |
| 786 - (IBAction)addAccount:(id)sender { | 793 - (IBAction)addAccount:(id)sender { |
| 787 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT]; | 794 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT]; |
| 795 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_ADD_ACCT]; | |
| 788 } | 796 } |
| 789 | 797 |
| 790 - (IBAction)navigateBackFromSigninPage:(id)sender { | 798 - (IBAction)navigateBackFromSigninPage:(id)sender { |
| 791 std::string primaryAccount = SigninManagerFactory::GetForProfile( | 799 std::string primaryAccount = SigninManagerFactory::GetForProfile( |
| 792 browser_->profile())->GetAuthenticatedUsername(); | 800 browser_->profile())->GetAuthenticatedUsername(); |
| 793 [self initMenuContentsWithView:primaryAccount.empty() ? | 801 [self initMenuContentsWithView:primaryAccount.empty() ? |
| 794 profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER : | 802 profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER : |
| 795 profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT]; | 803 profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT]; |
| 796 } | 804 } |
| 797 | 805 |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 809 accountIdToRemove_ = currentProfileAccounts_[tag]; | 817 accountIdToRemove_ = currentProfileAccounts_[tag]; |
| 810 } | 818 } |
| 811 | 819 |
| 812 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL]; | 820 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL]; |
| 813 } | 821 } |
| 814 | 822 |
| 815 - (IBAction)removeAccount:(id)sender { | 823 - (IBAction)removeAccount:(id)sender { |
| 816 DCHECK(!accountIdToRemove_.empty()); | 824 DCHECK(!accountIdToRemove_.empty()); |
| 817 ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile( | 825 ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile( |
| 818 browser_->profile())->RevokeCredentials(accountIdToRemove_); | 826 browser_->profile())->RevokeCredentials(accountIdToRemove_); |
| 827 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_REMOVE_ACCT]; | |
| 819 accountIdToRemove_.clear(); | 828 accountIdToRemove_.clear(); |
| 820 | 829 |
| 821 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT]; | 830 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT]; |
| 822 } | 831 } |
| 823 | 832 |
| 824 - (IBAction)openTutorialLearnMoreURL:(id)sender { | 833 - (IBAction)openTutorialLearnMoreURL:(id)sender { |
| 825 ProfileMetrics::LogProfileUpgradeEnrollment( | 834 ProfileMetrics::LogProfileUpgradeEnrollment( |
| 826 ProfileMetrics::PROFILE_ENROLLMENT_LAUNCH_LEARN_MORE); | 835 ProfileMetrics::PROFILE_ENROLLMENT_LAUNCH_LEARN_MORE); |
| 827 // TODO(guohui): update |learnMoreUrl| once it is decided. | 836 // TODO(guohui): update |learnMoreUrl| once it is decided. |
| 828 const GURL learnMoreUrl("https://support.google.com/chrome/?hl=en#to"); | 837 const GURL learnMoreUrl("https://support.google.com/chrome/?hl=en#to"); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 868 - (IBAction)endPreviewAndRelaunch:(id)sender { | 877 - (IBAction)endPreviewAndRelaunch:(id)sender { |
| 869 profiles::DisableNewProfileManagementPreview(); | 878 profiles::DisableNewProfileManagementPreview(); |
| 870 } | 879 } |
| 871 | 880 |
| 872 - (void)cleanUpEmbeddedViewContents { | 881 - (void)cleanUpEmbeddedViewContents { |
| 873 webContents_.reset(); | 882 webContents_.reset(); |
| 874 } | 883 } |
| 875 | 884 |
| 876 - (id)initWithBrowser:(Browser*)browser | 885 - (id)initWithBrowser:(Browser*)browser |
| 877 anchoredAt:(NSPoint)point | 886 anchoredAt:(NSPoint)point |
| 878 withMode:(profiles::BubbleViewMode)mode { | 887 withMode:(profiles::BubbleViewMode)mode |
| 888 withServiceType:(signin::GAIAServiceType)GAIAServiceType { | |
| 879 base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc] | 889 base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc] |
| 880 initWithContentRect:ui::kWindowSizeDeterminedLater | 890 initWithContentRect:ui::kWindowSizeDeterminedLater |
| 881 styleMask:NSBorderlessWindowMask | 891 styleMask:NSBorderlessWindowMask |
| 882 backing:NSBackingStoreBuffered | 892 backing:NSBackingStoreBuffered |
| 883 defer:NO]); | 893 defer:NO]); |
| 884 | 894 |
| 885 if ((self = [super initWithWindow:window | 895 if ((self = [super initWithWindow:window |
| 886 parentWindow:browser->window()->GetNativeWindow() | 896 parentWindow:browser->window()->GetNativeWindow() |
| 887 anchoredAt:point])) { | 897 anchoredAt:point])) { |
| 888 browser_ = browser; | 898 browser_ = browser; |
| 889 viewMode_ = mode; | 899 viewMode_ = mode; |
| 890 tutorialMode_ = profiles::TUTORIAL_MODE_NONE; | 900 tutorialMode_ = profiles::TUTORIAL_MODE_NONE; |
| 891 observer_.reset(new ActiveProfileObserverBridge(self, browser_)); | 901 observer_.reset(new ActiveProfileObserverBridge(self, browser_)); |
| 902 GAIAServiceType_ = GAIAServiceType; | |
| 892 | 903 |
| 893 avatarMenu_.reset(new AvatarMenu( | 904 avatarMenu_.reset(new AvatarMenu( |
| 894 &g_browser_process->profile_manager()->GetProfileInfoCache(), | 905 &g_browser_process->profile_manager()->GetProfileInfoCache(), |
| 895 observer_.get(), | 906 observer_.get(), |
| 896 browser_)); | 907 browser_)); |
| 897 avatarMenu_->RebuildMenu(); | 908 avatarMenu_->RebuildMenu(); |
| 898 | 909 |
| 899 // Guest profiles do not have a token service. | 910 // Guest profiles do not have a token service. |
| 900 isGuestSession_ = browser_->profile()->IsGuestSession(); | 911 isGuestSession_ = browser_->profile()->IsGuestSession(); |
| 901 | 912 |
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1712 [deleteButton setPressedImage:rb->GetNativeImageNamed( | 1723 [deleteButton setPressedImage:rb->GetNativeImageNamed( |
| 1713 IDR_CLOSE_1_P).ToNSImage()]; | 1724 IDR_CLOSE_1_P).ToNSImage()]; |
| 1714 [deleteButton setTarget:self]; | 1725 [deleteButton setTarget:self]; |
| 1715 [deleteButton setAction:@selector(showAccountRemovalView:)]; | 1726 [deleteButton setAction:@selector(showAccountRemovalView:)]; |
| 1716 [deleteButton setTag:tag]; | 1727 [deleteButton setTag:tag]; |
| 1717 | 1728 |
| 1718 [button addSubview:deleteButton]; | 1729 [button addSubview:deleteButton]; |
| 1719 return button.autorelease(); | 1730 return button.autorelease(); |
| 1720 } | 1731 } |
| 1721 | 1732 |
| 1733 - (void)postActionPerformed:(ProfileMetrics::ProfileDesktopMenu)action { | |
| 1734 ProfileMetrics::LogProfileDesktopMenu(action, GAIAServiceType_); | |
| 1735 GAIAServiceType_ = signin::GAIA_SERVICE_TYPE_NONE; | |
| 1736 } | |
| 1737 | |
| 1722 @end | 1738 @end |
| OLD | NEW |