Index: chrome/browser/ui/cocoa/browser/avatar_base_controller.mm |
diff --git a/chrome/browser/ui/cocoa/browser/avatar_base_controller.mm b/chrome/browser/ui/cocoa/browser/avatar_base_controller.mm |
deleted file mode 100644 |
index 7f43092bee953cef01550bb5ea601de5e99a4d05..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/browser/avatar_base_controller.mm |
+++ /dev/null |
@@ -1,173 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#import "chrome/browser/ui/cocoa/browser/avatar_base_controller.h" |
- |
-#include "chrome/app/chrome_command_ids.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/profiles/profile_info_cache_observer.h" |
-#include "chrome/browser/profiles/profile_info_util.h" |
-#include "chrome/browser/profiles/profile_manager.h" |
-#include "chrome/browser/profiles/profile_metrics.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/browser_commands.h" |
-#include "chrome/browser/ui/browser_window.h" |
-#import "chrome/browser/ui/cocoa/base_bubble_controller.h" |
-#import "chrome/browser/ui/cocoa/browser/avatar_menu_bubble_controller.h" |
-#import "chrome/browser/ui/cocoa/browser/profile_chooser_controller.h" |
-#import "chrome/browser/ui/cocoa/browser_window_controller.h" |
-#include "chrome/common/profile_management_switches.h" |
-#include "ui/base/resource/resource_bundle.h" |
- |
-// Space between the avatar icon and the avatar menu bubble. |
-const CGFloat kMenuYOffsetAdjust = 1.0; |
- |
-@interface AvatarBaseController (Private) |
-// Shows the avatar bubble. |
-- (IBAction)buttonClicked:(id)sender; |
-- (void)bubbleWillClose:(NSNotification*)notif; |
-// Updates the profile name displayed by the avatar button. If |layoutParent| is |
-// yes, then the BrowserWindowController is notified to relayout the subviews, |
-// as the button needs to be repositioned. |
-- (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent; |
-@end |
- |
-class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver { |
- public: |
- ProfileInfoUpdateObserver(AvatarBaseController* avatarButton) |
- : avatarButton_(avatarButton) { |
- g_browser_process->profile_manager()-> |
- GetProfileInfoCache().AddObserver(this); |
- } |
- |
- virtual ~ProfileInfoUpdateObserver() { |
- g_browser_process->profile_manager()-> |
- GetProfileInfoCache().RemoveObserver(this); |
- } |
- |
- // ProfileInfoCacheObserver: |
- virtual void OnProfileAdded(const base::FilePath& profile_path) OVERRIDE { |
- [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
- } |
- |
- virtual void OnProfileWasRemoved( |
- const base::FilePath& profile_path, |
- const base::string16& profile_name) OVERRIDE { |
- [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
- } |
- |
- virtual void OnProfileNameChanged( |
- const base::FilePath& profile_path, |
- const base::string16& old_profile_name) OVERRIDE { |
- [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
- } |
- |
- virtual void OnProfileAvatarChanged( |
- const base::FilePath& profile_path) OVERRIDE { |
- [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
- } |
- |
- private: |
- AvatarBaseController* avatarButton_; // Weak; owns this. |
- |
- DISALLOW_COPY_AND_ASSIGN(ProfileInfoUpdateObserver); |
-}; |
- |
-@implementation AvatarBaseController |
- |
-- (id)initWithBrowser:(Browser*)browser { |
- if ((self = [super init])) { |
- browser_ = browser; |
- profileInfoObserver_.reset(new ProfileInfoUpdateObserver(self)); |
- } |
- return self; |
-} |
- |
-- (void)dealloc { |
- [[NSNotificationCenter defaultCenter] |
- removeObserver:self |
- name:NSWindowWillCloseNotification |
- object:[menuController_ window]]; |
- [super dealloc]; |
-} |
- |
-- (NSButton*)buttonView { |
- CHECK(button_.get()); // Subclasses must set this. |
- return button_.get(); |
-} |
- |
-- (void)showAvatarBubble:(NSView*)anchor |
- withMode:(BrowserWindow::AvatarBubbleMode)mode { |
- if (menuController_) |
- return; |
- |
- DCHECK(chrome::IsCommandEnabled(browser_, IDC_SHOW_AVATAR_MENU)); |
- |
- NSWindowController* wc = |
- [browser_->window()->GetNativeWindow() windowController]; |
- if ([wc isKindOfClass:[BrowserWindowController class]]) { |
- [static_cast<BrowserWindowController*>(wc) |
- lockBarVisibilityForOwner:self withAnimation:NO delay:NO]; |
- } |
- |
- // The new avatar bubble does not have an arrow, and it should be anchored |
- // to the edge of the avatar button. |
- int anchorX = switches::IsNewProfileManagement() ? NSMaxX([anchor bounds]) : |
- NSMidX([anchor bounds]); |
- NSPoint point = NSMakePoint(anchorX, |
- NSMaxY([anchor bounds]) - kMenuYOffsetAdjust); |
- point = [anchor convertPoint:point toView:nil]; |
- point = [[anchor window] convertBaseToScreen:point]; |
- |
- // |menuController_| will automatically release itself on close. |
- if (switches::IsNewProfileManagement()) { |
- BubbleViewMode viewMode = |
- mode == BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT ? |
- BUBBLE_VIEW_MODE_PROFILE_CHOOSER : |
- BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; |
- menuController_ = |
- [[ProfileChooserController alloc] initWithBrowser:browser_ |
- anchoredAt:point |
- withMode:viewMode]; |
- } else { |
- menuController_ = |
- [[AvatarMenuBubbleController alloc] initWithBrowser:browser_ |
- anchoredAt:point]; |
- } |
- |
- [[NSNotificationCenter defaultCenter] |
- addObserver:self |
- selector:@selector(bubbleWillClose:) |
- name:NSWindowWillCloseNotification |
- object:[menuController_ window]]; |
- [menuController_ showWindow:self]; |
- |
- ProfileMetrics::LogProfileOpenMethod(ProfileMetrics::ICON_AVATAR_BUBBLE); |
-} |
- |
-- (IBAction)buttonClicked:(id)sender { |
- DCHECK_EQ(sender, button_.get()); |
- [self showAvatarBubble:button_ |
- withMode:BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT]; |
-} |
- |
-- (void)bubbleWillClose:(NSNotification*)notif { |
- NSWindowController* wc = |
- [browser_->window()->GetNativeWindow() windowController]; |
- if ([wc isKindOfClass:[BrowserWindowController class]]) { |
- [static_cast<BrowserWindowController*>(wc) |
- releaseBarVisibilityForOwner:self withAnimation:YES delay:NO]; |
- } |
- menuController_ = nil; |
-} |
- |
-- (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent { |
- NOTREACHED(); |
-} |
- |
-- (BaseBubbleController*)menuController { |
- return menuController_; |
-} |
- |
-@end |