1// Copyright 2013 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_PROFILES_PROFILE_WINDOW_H_
6#define CHROME_BROWSER_PROFILES_PROFILE_WINDOW_H_
7
8#include "base/callback_forward.h"
9#include "chrome/browser/profiles/profile_manager.h"
10#include "chrome/browser/profiles/profile_metrics.h"
11#include "chrome/browser/ui/browser_window.h"
12#include "chrome/browser/ui/host_desktop.h"
13#include "chrome/browser/ui/profile_chooser_constants.h"
14#include "chrome/browser/ui/startup/startup_types.h"
15
16class Profile;
17namespace base { class FilePath; }
18
19namespace profiles {
20
21// Different tutorials that can be displayed in the user manager.
22enum UserManagerTutorialMode {
23  USER_MANAGER_NO_TUTORIAL,        // Does not display a tutorial.
24  USER_MANAGER_TUTORIAL_OVERVIEW,  // Basic overview of new features.
25  USER_MANAGER_TUTORIAL_LOCK,      // TODO(noms): To be implemented.
26};
27
28// Different actions to perform after the user manager selects a profile.
29enum UserManagerProfileSelected {
30  USER_MANAGER_SELECT_PROFILE_NO_ACTION,
31  USER_MANAGER_SELECT_PROFILE_TASK_MANAGER,
32  USER_MANAGER_SELECT_PROFILE_ABOUT_CHROME,
33};
34
35extern const char kUserManagerDisplayTutorial[];
36extern const char kUserManagerSelectProfileTaskManager[];
37extern const char kUserManagerSelectProfileAboutChrome[];
38
39// Activates a window for |profile| on the desktop specified by
40// |desktop_type|. If no such window yet exists, or if |always_create| is
41// true, this first creates a new window, then activates
42// that. If activating an exiting window and multiple windows exists then the
43// window that was most recently active is activated. This is used for
44// creation of a window from the multi-profile dropdown menu.
45void FindOrCreateNewWindowForProfile(
46    Profile* profile,
47    chrome::startup::IsProcessStartup process_startup,
48    chrome::startup::IsFirstRun is_first_run,
49    chrome::HostDesktopType desktop_type,
50    bool always_create);
51
52// Opens a Browser with the specified profile given by |path|.
53// If |always_create| is true then a new window is created
54// even if a window for that profile already exists. When the browser is
55// opened, |callback| will be run if it isn't null.
56
57void SwitchToProfile(const base::FilePath& path,
58                     chrome::HostDesktopType desktop_type,
59                     bool always_create,
60                     ProfileManager::CreateCallback callback,
61                     ProfileMetrics::ProfileOpen metric);
62
63// Opens a Browser for the guest profile and runs |callback| if it isn't null.
64void SwitchToGuestProfile(chrome::HostDesktopType desktop_type,
65                          ProfileManager::CreateCallback callback);
66
67// Creates a new profile from the next available profile directory, and
68// opens a new browser window for the profile once it is ready. When the browser
69// is opened, |callback| will be run if it isn't null.
70void CreateAndSwitchToNewProfile(chrome::HostDesktopType desktop_type,
71                                 ProfileManager::CreateCallback callback,
72                                 ProfileMetrics::ProfileAdd metric);
73
74// Closes all browser windows that belong to the guest profile.
75void CloseGuestProfileWindows();
76
77// Closes all the browser windows for |profile| and opens the user manager.
78void LockProfile(Profile* profile);
79
80// Creates or reuses the guest profile needed by the user manager. Based on
81// the value of |tutorial_mode|, the user manager can show a specific
82// tutorial, or no tutorial at all. If a tutorial is not shown, then
83// |profile_path_to_focus| could be used to specify which user should be
84// focused. After a profile is opened from the user manager, perform
85// |profile_open_action|. |callback| is run with the custom url to be displayed,
86// as well as a pointer to the guest profile.
87void CreateGuestProfileForUserManager(
88    const base::FilePath& profile_path_to_focus,
89    profiles::UserManagerTutorialMode tutorial_mode,
90    profiles::UserManagerProfileSelected profile_open_action,
91    const base::Callback<void(Profile*, const std::string&)>& callback);
92
93// Based on the |profile| preferences, determines whether a user manager
94// tutorial needs to be shown, and displays the user manager with or without
95// the tutorial.
96void ShowUserManagerMaybeWithTutorial(Profile* profile);
97
98// Enables new profile management preview and shows the user manager tutorial.
99void EnableNewProfileManagementPreview(Profile* profile);
100
101// Disables new profile management preview and attempts to relaunch Chrome.
102void DisableNewProfileManagementPreview(Profile* profile);
103
104// Converts from modes in the avatar menu to modes understood by
105// ProfileChooserView.
106void BubbleViewModeFromAvatarBubbleMode(
107    BrowserWindow::AvatarBubbleMode mode,
108    BubbleViewMode* bubble_view_mode,
109    TutorialMode* tutorial_mode);
110
111}  // namespace profiles
112
113#endif  // CHROME_BROWSER_PROFILES_PROFILE_WINDOW_H_
114