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 "chrome/browser/ui/cocoa/profiles/profile_menu_controller.h" | 5 #import "chrome/browser/ui/cocoa/profiles/profile_menu_controller.h" |
| 6 | 6 |
| 7 #include "base/mac/scoped_nsobject.h" | 7 #include "base/mac/scoped_nsobject.h" |
| 8 #include "base/metrics/histogram_macros.h" | |
| 8 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
| 9 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
| 10 #include "chrome/browser/profiles/avatar_menu.h" | 11 #include "chrome/browser/profiles/avatar_menu.h" |
| 11 #include "chrome/browser/profiles/avatar_menu_observer.h" | 12 #include "chrome/browser/profiles/avatar_menu_observer.h" |
| 12 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
| 13 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 14 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
| 14 #include "chrome/browser/profiles/profile_info_cache.h" | 15 #include "chrome/browser/profiles/profile_info_cache.h" |
| 15 #include "chrome/browser/profiles/profile_info_interface.h" | 16 #include "chrome/browser/profiles/profile_info_interface.h" |
| 16 #include "chrome/browser/profiles/profile_manager.h" | 17 #include "chrome/browser/profiles/profile_manager.h" |
| 17 #include "chrome/browser/profiles/profile_metrics.h" | 18 #include "chrome/browser/profiles/profile_metrics.h" |
| 18 #include "chrome/browser/profiles/profile_window.h" | 19 #include "chrome/browser/profiles/profile_window.h" |
| 19 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
| 20 #include "chrome/browser/ui/browser_list.h" | 21 #include "chrome/browser/ui/browser_list.h" |
| 21 #include "chrome/browser/ui/browser_list_observer.h" | 22 #include "chrome/browser/ui/browser_list_observer.h" |
| 22 #include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h" | 23 #include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h" |
| 23 #include "chrome/grit/generated_resources.h" | 24 #include "chrome/grit/generated_resources.h" |
| 24 #include "components/signin/core/common/profile_management_switches.h" | 25 #include "components/signin/core/common/profile_management_switches.h" |
| 25 #include "ui/base/l10n/l10n_util_mac.h" | 26 #include "ui/base/l10n/l10n_util_mac.h" |
| 26 #include "ui/gfx/image/image.h" | 27 #include "ui/gfx/image/image.h" |
| 27 | 28 |
| 29 namespace { | |
| 30 enum ValidateMenuItemSelector { | |
|
Alexei Svitkine (slow)
2015/04/22 16:55:25
Don't indent within namespace. Add a comment that
anthonyvd
2015/04/23 14:49:01
Done.
| |
| 31 UNKNOWN_SELECTOR, | |
| 32 NEW_PROFILE, | |
| 33 EDIT_PROFILE, | |
| 34 SWITCH_PROFILE_MENU, | |
| 35 SWITCH_PROFILE_DOCK, | |
| 36 MAX_VALIDATE_MENU_SELECTOR, | |
| 37 }; | |
| 38 } | |
| 39 | |
| 28 @interface ProfileMenuController (Private) | 40 @interface ProfileMenuController (Private) |
| 29 - (void)initializeMenu; | 41 - (void)initializeMenu; |
| 30 @end | 42 @end |
| 31 | 43 |
| 32 namespace ProfileMenuControllerInternal { | 44 namespace ProfileMenuControllerInternal { |
| 33 | 45 |
| 34 class Observer : public chrome::BrowserListObserver, | 46 class Observer : public chrome::BrowserListObserver, |
| 35 public AvatarMenuObserver { | 47 public AvatarMenuObserver { |
| 36 public: | 48 public: |
| 37 Observer(ProfileMenuController* controller) : controller_(controller) { | 49 Observer(ProfileMenuController* controller) : controller_(controller) { |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 | 174 |
| 163 - (BOOL)validateMenuItem:(NSMenuItem*)menuItem { | 175 - (BOOL)validateMenuItem:(NSMenuItem*)menuItem { |
| 164 // In guest mode, chrome://settings isn't available, so disallow creating | 176 // In guest mode, chrome://settings isn't available, so disallow creating |
| 165 // or editing a profile. | 177 // or editing a profile. |
| 166 Profile* activeProfile = ProfileManager::GetLastUsedProfile(); | 178 Profile* activeProfile = ProfileManager::GetLastUsedProfile(); |
| 167 if (activeProfile->IsGuestSession()) { | 179 if (activeProfile->IsGuestSession()) { |
| 168 return [menuItem action] != @selector(newProfile:) && | 180 return [menuItem action] != @selector(newProfile:) && |
| 169 [menuItem action] != @selector(editProfile:); | 181 [menuItem action] != @selector(editProfile:); |
| 170 } | 182 } |
| 171 | 183 |
| 172 const AvatarMenu::Item& itemData = avatarMenu_->GetItemAt( | 184 size_t index = avatarMenu_->GetActiveProfileIndex(); |
| 173 avatarMenu_->GetActiveProfileIndex()); | 185 if (avatarMenu_->GetNumberOfItems() <= index) { |
| 186 ValidateMenuItemSelector current_selector = UNKNOWN_SELECTOR; | |
| 187 if ([menuItem action] == @selector(newProfile:)) | |
| 188 current_selector = NEW_PROFILE; | |
| 189 else if ([menuItem action] == @selector(editProfile:)) | |
| 190 current_selector = EDIT_PROFILE; | |
| 191 else if ([menuItem action] == @selector(switchToProfileFromMenu:)) | |
| 192 current_selector = SWITCH_PROFILE_MENU; | |
| 193 else if ([menuItem action] == @selector(switchToProfileFromDock:)) | |
| 194 current_selector = SWITCH_PROFILE_DOCK; | |
| 195 UMA_HISTOGRAM_ENUMERATION("ValidateMenuItemInvalidIndexSelector", | |
|
Alexei Svitkine (slow)
2015/04/22 16:55:25
Histograms use a dotted naming notation - e.g. Foo
anthonyvd
2015/04/23 14:49:01
Done.
| |
| 196 current_selector, | |
| 197 MAX_VALIDATE_MENU_SELECTOR); | |
| 198 UMA_HISTOGRAM_CUSTOM_COUNTS("ValidateMenuItemInvalidIndexProfileCount", | |
| 199 avatarMenu_->GetNumberOfItems(), | |
| 200 1, 20, 20); | |
| 201 UMA_HISTOGRAM_BOOLEAN("ValidateMenuItemInvalidIndexIsGuest", | |
| 202 activeProfile->IsGuestSession()); | |
| 203 | |
| 204 return NO; | |
| 205 } | |
| 206 | |
| 207 const AvatarMenu::Item& itemData = avatarMenu_->GetItemAt(index); | |
| 174 if ([menuItem action] == @selector(switchToProfileFromDock:) || | 208 if ([menuItem action] == @selector(switchToProfileFromDock:) || |
| 175 [menuItem action] == @selector(switchToProfileFromMenu:)) { | 209 [menuItem action] == @selector(switchToProfileFromMenu:)) { |
| 176 if (!itemData.legacy_supervised) | 210 if (!itemData.legacy_supervised) |
| 177 return YES; | 211 return YES; |
| 178 | 212 |
| 179 return [menuItem tag] == static_cast<NSInteger>(itemData.menu_index); | 213 return [menuItem tag] == static_cast<NSInteger>(itemData.menu_index); |
| 180 } | 214 } |
| 181 | 215 |
| 182 if ([menuItem action] == @selector(newProfile:)) | 216 if ([menuItem action] == @selector(newProfile:)) |
| 183 return !itemData.legacy_supervised; | 217 return !itemData.legacy_supervised; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 263 } | 297 } |
| 264 | 298 |
| 265 - (NSMenuItem*)createItemWithTitle:(NSString*)title action:(SEL)sel { | 299 - (NSMenuItem*)createItemWithTitle:(NSString*)title action:(SEL)sel { |
| 266 base::scoped_nsobject<NSMenuItem> item( | 300 base::scoped_nsobject<NSMenuItem> item( |
| 267 [[NSMenuItem alloc] initWithTitle:title action:sel keyEquivalent:@""]); | 301 [[NSMenuItem alloc] initWithTitle:title action:sel keyEquivalent:@""]); |
| 268 [item setTarget:self]; | 302 [item setTarget:self]; |
| 269 return [item.release() autorelease]; | 303 return [item.release() autorelease]; |
| 270 } | 304 } |
| 271 | 305 |
| 272 @end | 306 @end |
| OLD | NEW |