// Copyright 2013 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. #ifndef CHROME_BROWSER_UI_COCOA_BROWSER_PROFILE_CHOOSER_CONTROLLER_H_ #define CHROME_BROWSER_UI_COCOA_BROWSER_PROFILE_CHOOSER_CONTROLLER_H_ #import <Cocoa/Cocoa.h> #include <map> #include <string> #include "base/memory/scoped_ptr.h" #import "chrome/browser/ui/cocoa/base_bubble_controller.h" class AvatarMenu; class ActiveProfileObserverBridge; class Browser; class ProfileOAuth2TokenService; namespace content { class WebContents; } // This window controller manages the bubble that displays a "menu" of profiles. // It is brought open by clicking on the avatar icon in the window frame. @interface ProfileChooserController : BaseBubbleController { @public // Different views that can be displayed in the bubble. enum BubbleViewMode { // Shows a "fast profile switcher" view. BUBBLE_VIEW_MODE_PROFILE_CHOOSER, // Shows a list of accounts for the active user. BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, // Shows a web view for primary sign in. BUBBLE_VIEW_MODE_GAIA_SIGNIN, // Shows a web view for adding secondary accounts. BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, // Shows a view for confirming account removal. BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL }; @private // The menu that contains the data from the backend. scoped_ptr<AvatarMenu> avatarMenu_; // An observer to be notified when the OAuth2 tokens change or the avatar // menu model updates for the active profile. scoped_ptr<ActiveProfileObserverBridge> observer_; // The browser that launched the bubble. Not owned. Browser* browser_; // The id for the account that the user has requested to remove from the // current profile. It is set in |showAccountRemovalView| and used in // |removeAccountAndRelaunch|. std::string accountIdToRemove_; // Active view mode. BubbleViewMode viewMode_; // Whether the tutorial card is showing in the last active view. BOOL tutorialShowing_; // List of the full, un-elided accounts for the active profile. The keys are // generated used to tag the UI buttons, and the values are the original // emails displayed by the buttons. std::map<int, std::string> currentProfileAccounts_; // Web contents used by the inline signin view. scoped_ptr<content::WebContents> webContents_; // Whether the bubble is displayed for an active guest profile. BOOL isGuestSession_; } - (id)initWithBrowser:(Browser*)browser anchoredAt:(NSPoint)point withMode:(BubbleViewMode)mode; // Creates all the subviews of the avatar bubble for |viewToDisplay|. - (void)initMenuContentsWithView:(BubbleViewMode)viewToDisplay; // Returns the view currently displayed by the bubble. - (BubbleViewMode)viewMode; // Switches to a given profile. |sender| is an ProfileChooserItemController. - (IBAction)switchToProfile:(id)sender; // Shows the User Manager. - (IBAction)showUserManager:(id)sender; // Shows the account management view. - (IBAction)showAccountManagement:(id)sender; // Locks the active profile. - (IBAction)lockProfile:(id)sender; // Shows the signin page. - (IBAction)showSigninPage:(id)sender; // Adds an account to the active profile. - (IBAction)addAccount:(id)sender; // Shows the account removal view to confirm removing the currently selected // account from the active profile if possible. - (IBAction)showAccountRemovalView:(id)sender; // Removes the current account |accountIdToRemove_| and relaunches the browser. - (IBAction)removeAccountAndRelaunch:(id)sender; // Reset the WebContents used by the Gaia embedded view. - (void)cleanUpEmbeddedViewContents; @end // Testing API ///////////////////////////////////////////////////////////////// @interface ProfileChooserController (ExposedForTesting) - (id)initWithBrowser:(Browser*)browser anchoredAt:(NSPoint)point withMode:(BubbleViewMode)mode; @end #endif // CHROME_BROWSER_UI_COCOA_BROWSER_PROFILE_CHOOSER_CONTROLLER_H_