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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_COCOA_PROFILES_AVATAR_BASE_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_COCOA_PROFILES_AVATAR_BASE_CONTROLLER_H_ 7 8 #import <AppKit/AppKit.h> 9 10 #import "base/mac/scoped_nsobject.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "chrome/browser/ui/browser_window.h" 13 14 @class BaseBubbleController; 15 class Browser; 16 class ProfileInfoUpdateObserver; 17 18 // This view controller manages the button that sits in the top of the 19 // window frame when using multi-profiles, and shows information about the 20 // current profile. Clicking the button will open the profile menu. 21 @interface AvatarBaseController : NSViewController { 22 @protected 23 Browser* browser_; 24 25 // The avatar button. Child classes are responsible for implementing it. 26 base::scoped_nsobject<NSButton> button_; 27 28 @private 29 // The menu controller, if the menu is open. 30 BaseBubbleController* menuController_; 31 32 // Observer that listens for updates to the ProfileInfoCache. 33 scoped_ptr<ProfileInfoUpdateObserver> profileInfoObserver_; 34 } 35 36 // The avatar button view. 37 @property(readonly, nonatomic) NSButton* buttonView; 38 39 // Designated initializer. 40 - (id)initWithBrowser:(Browser*)browser; 41 42 // Shows the avatar bubble in the given mode. 43 - (void)showAvatarBubble:(NSView*)anchor 44 withMode:(BrowserWindow::AvatarBubbleMode)mode 45 withServiceType:(signin::GAIAServiceType)serviceType; 46 47 @end 48 49 @interface AvatarBaseController (ExposedForTesting) 50 - (BaseBubbleController*)menuController; 51 @end 52 53 #endif // CHROME_BROWSER_UI_COCOA_PROFILES_AVATAR_BASE_CONTROLLER_H_ 54