Home | History | Annotate | Download | only in profiles
      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_PROFILE_CHOOSER_CONTROLLER_H_
      6 #define CHROME_BROWSER_UI_COCOA_PROFILES_PROFILE_CHOOSER_CONTROLLER_H_
      7 
      8 #import <Cocoa/Cocoa.h>
      9 #include <map>
     10 #include <string>
     11 
     12 #include "base/memory/scoped_ptr.h"
     13 #include "chrome/browser/profiles/profile_metrics.h"
     14 #include "chrome/browser/signin/signin_header_helper.h"
     15 #include "chrome/browser/ui/profile_chooser_constants.h"
     16 #import "chrome/browser/ui/cocoa/base_bubble_controller.h"
     17 
     18 class AvatarMenu;
     19 class ActiveProfileObserverBridge;
     20 class Browser;
     21 class ProfileOAuth2TokenService;
     22 
     23 namespace content {
     24 class WebContents;
     25 }
     26 
     27 // This window controller manages the bubble that displays a "menu" of profiles.
     28 // It is brought open by clicking on the avatar icon in the window frame.
     29 @interface ProfileChooserController : BaseBubbleController<NSTextViewDelegate> {
     30  @private
     31   // The menu that contains the data from the backend.
     32   scoped_ptr<AvatarMenu> avatarMenu_;
     33 
     34   // An observer to be notified when the OAuth2 tokens change or the avatar
     35   // menu model updates for the active profile.
     36   scoped_ptr<ActiveProfileObserverBridge> observer_;
     37 
     38   // The browser that launched the bubble. Not owned.
     39   Browser* browser_;
     40 
     41   // The id for the account that the user has requested to remove from the
     42   // current profile. It is set in |showAccountRemovalView| and used in
     43   // |removeAccount|.
     44   std::string accountIdToRemove_;
     45 
     46   // Active view mode.
     47   profiles::BubbleViewMode viewMode_;
     48 
     49   // The current tutorial mode.
     50   profiles::TutorialMode tutorialMode_;
     51 
     52   // List of the full, un-elided accounts for the active profile. The keys are
     53   // generated used to tag the UI buttons, and the values are the original
     54   // emails displayed by the buttons.
     55   std::map<int, std::string> currentProfileAccounts_;
     56 
     57   // Web contents used by the inline signin view.
     58   scoped_ptr<content::WebContents> webContents_;
     59 
     60   // Whether the bubble is displayed for an active guest profile.
     61   BOOL isGuestSession_;
     62 
     63   // The GAIA service type that caused this menu to open.
     64   signin::GAIAServiceType serviceType_;
     65 }
     66 
     67 - (id)initWithBrowser:(Browser*)browser
     68            anchoredAt:(NSPoint)point
     69              viewMode:(profiles::BubbleViewMode)viewMode
     70          tutorialMode:(profiles::TutorialMode)tutorialMode
     71           serviceType:(signin::GAIAServiceType)GAIAServiceType;
     72 
     73 // Creates all the subviews of the avatar bubble for |viewToDisplay|.
     74 - (void)initMenuContentsWithView:(profiles::BubbleViewMode)viewToDisplay;
     75 
     76 // Returns the view currently displayed by the bubble.
     77 - (profiles::BubbleViewMode)viewMode;
     78 
     79 // Sets the tutorial mode of the bubble.
     80 - (void)setTutorialMode:(profiles::TutorialMode)tutorialMode;
     81 
     82 // Switches to a given profile. |sender| is an ProfileChooserItemController.
     83 - (IBAction)switchToProfile:(id)sender;
     84 
     85 // Shows the User Manager.
     86 - (IBAction)showUserManager:(id)sender;
     87 
     88 // Closes all guest browsers and shows the User Manager.
     89 - (IBAction)exitGuest:(id)sender;
     90 
     91 // Shows the account management view.
     92 - (IBAction)showAccountManagement:(id)sender;
     93 
     94 // Hides the account management view and shows the default view.
     95 - (IBAction)hideAccountManagement:(id)sender;
     96 
     97 // Locks the active profile.
     98 - (IBAction)lockProfile:(id)sender;
     99 
    100 // Shows the inline signin page.
    101 - (IBAction)showInlineSigninPage:(id)sender;
    102 
    103 // Adds an account to the active profile.
    104 - (IBAction)addAccount:(id)sender;
    105 
    106 // Shows the account removal view to confirm removing the currently selected
    107 // account from the active profile if possible.
    108 - (IBAction)showAccountRemovalView:(id)sender;
    109 
    110 // Shows the account reauthentication view to re-sign in the currently selected
    111 // account from the active profile if possible.
    112 - (IBAction)showAccountReauthenticationView:(id)sender;
    113 
    114 // Removes the current account |accountIdToRemove_|.
    115 - (IBAction)removeAccount:(id)sender;
    116 
    117 // Reset the WebContents used by the Gaia embedded view.
    118 - (void)cleanUpEmbeddedViewContents;
    119 
    120 // Clean-up done after an action was performed in the ProfileChooser.
    121 - (void)postActionPerformed:(ProfileMetrics::ProfileDesktopMenu)action;
    122 @end
    123 
    124 // Testing API /////////////////////////////////////////////////////////////////
    125 
    126 @interface ProfileChooserController (ExposedForTesting)
    127 - (id)initWithBrowser:(Browser*)browser
    128            anchoredAt:(NSPoint)point
    129              viewMode:(profiles::BubbleViewMode)viewMode
    130          tutorialMode:(profiles::TutorialMode)tutorialMode
    131           serviceType:(signin::GAIAServiceType)GAIAServiceType;
    132 @end
    133 
    134 #endif  // CHROME_BROWSER_UI_COCOA_PROFILES_PROFILE_CHOOSER_CONTROLLER_H_
    135