1// Copyright (c) 2012 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_WEBUI_OPTIONS_MANAGE_PROFILE_HANDLER_H_
6#define CHROME_BROWSER_UI_WEBUI_OPTIONS_MANAGE_PROFILE_HANDLER_H_
7
8#include <string>
9
10#include "base/memory/weak_ptr.h"
11#include "base/prefs/pref_change_registrar.h"
12#include "chrome/browser/sync/profile_sync_service_observer.h"
13#include "chrome/browser/ui/webui/options/options_ui.h"
14#include "content/public/browser/notification_observer.h"
15
16namespace base {
17class StringValue;
18}
19
20namespace options {
21
22// Chrome personal stuff profiles manage overlay UI handler.
23class ManageProfileHandler : public OptionsPageUIHandler,
24                             public content::NotificationObserver,
25                             public ProfileSyncServiceObserver {
26 public:
27  ManageProfileHandler();
28  virtual ~ManageProfileHandler();
29
30  // OptionsPageUIHandler:
31  virtual void GetLocalizedValues(
32      base::DictionaryValue* localized_strings) OVERRIDE;
33  virtual void InitializeHandler() OVERRIDE;
34  virtual void InitializePage() OVERRIDE;
35  virtual void Uninitialize() OVERRIDE;
36
37  // WebUIMessageHandler:
38  virtual void RegisterMessages() OVERRIDE;
39
40  // content::NotificationObserver:
41  virtual void Observe(int type,
42                       const content::NotificationSource& source,
43                       const content::NotificationDetails& details) OVERRIDE;
44
45  // ProfileSyncServiceObserver:
46  virtual void OnStateChanged() OVERRIDE;
47
48 private:
49  // This function creates signed in user specific strings in loadTimeData.
50  void GenerateSignedinUserSpecificStrings(base::DictionaryValue* dictionary);
51
52  // Callback for the "requestDefaultProfileIcons" message.
53  // Sends the array of default profile icon URLs and profile names to WebUI.
54  // First item of |args| is the dialog mode, i.e. "create" or "manage".
55  void RequestDefaultProfileIcons(const base::ListValue* args);
56
57  // Callback for the "requestNewProfileDefaults" message.
58  // Sends an object to WebUI of the form:
59  //   { "name": profileName, "iconURL": iconURL }
60  void RequestNewProfileDefaults(const base::ListValue* args);
61
62  // Send all profile icons and their default names to the overlay.
63  // |mode| is the dialog mode, i.e. "create" or "manage".
64  void SendProfileIconsAndNames(const base::StringValue& mode);
65
66  // Sends an object to WebUI of the form:
67  //   profileNames = {
68  //     "Profile Name 1": true,
69  //     "Profile Name 2": true,
70  //     ...
71  //   };
72  // This is used to detect duplicate profile names.
73  void SendExistingProfileNames();
74
75  // Show disconnect managed profile dialog after generating domain and user
76  // specific strings.
77  void ShowDisconnectManagedProfileDialog(const base::ListValue* args);
78
79  // Callback for the "setProfileIconAndName" message. Sets the name and icon
80  // of a given profile.
81  // |args| is of the form: [
82  //   /*string*/ profileFilePath,
83  //   /*string*/ newProfileIconURL
84  //   /*string*/ newProfileName,
85  // ]
86  void SetProfileIconAndName(const base::ListValue* args);
87
88#if defined(ENABLE_SETTINGS_APP)
89  // Callback for the "switchAppListProfile" message. Asks the
90  // app_list_controller to change the profile registered for the AppList.
91  // |args| is of the form: [ {string} profileFilePath ]
92  void SwitchAppListProfile(const base::ListValue* args);
93#endif
94
95  // Callback for the 'profileIconSelectionChanged' message. Used to update the
96  // name in the manager profile dialog based on the selected icon.
97  void ProfileIconSelectionChanged(const base::ListValue* args);
98
99  // Callback for the "requestHasProfileShortcuts" message, which is called
100  // when editing an existing profile. Asks the profile shortcut manager whether
101  // the profile has shortcuts and gets the result in |OnHasProfileShortcuts()|.
102  // |args| is of the form: [ {string} profileFilePath ]
103  void RequestHasProfileShortcuts(const base::ListValue* args);
104
105  // Callback for the "RequestCreateProfileUpdate" message.
106  // Sends the email address of the signed-in user, or an empty string if the
107  // user is not signed in. Also sends information about whether supervised
108  // users may be created.
109  void RequestCreateProfileUpdate(const base::ListValue* args);
110
111  // When the pref allowing supervised-user creation changes, sends the new
112  // value to the UI.
113  void OnCreateSupervisedUserPrefChange();
114
115  // Callback invoked from the profile manager indicating whether the profile
116  // being edited has any desktop shortcuts.
117  void OnHasProfileShortcuts(bool has_shortcuts);
118
119  // Callback for the "addProfileShortcut" message, which is called when editing
120  // an existing profile and the user clicks the "Add desktop shortcut" button.
121  // Adds a desktop shortcut for the profile.
122  void AddProfileShortcut(const base::ListValue* args);
123
124  // Callback for the "removeProfileShortcut" message, which is called when
125  // editing an existing profile and the user clicks the "Remove desktop
126  // shortcut" button. Removes the desktop shortcut for the profile.
127  void RemoveProfileShortcut(const base::ListValue* args);
128
129  // Callback for the "refreshGaiaPicture" message, which is called when the
130  // user is editing an existing profile.
131  void RefreshGaiaPicture(const base::ListValue* args);
132
133  // URL for the current profile's GAIA picture.
134  std::string gaia_picture_url_;
135
136  // Used to observe the preference that allows creating supervised users, which
137  // can be changed by policy.
138  PrefChangeRegistrar pref_change_registrar_;
139
140  // For generating weak pointers to itself for callbacks.
141  base::WeakPtrFactory<ManageProfileHandler> weak_factory_;
142
143  DISALLOW_COPY_AND_ASSIGN(ManageProfileHandler);
144};
145
146}  // namespace options
147
148#endif  // CHROME_BROWSER_UI_WEBUI_OPTIONS_MANAGE_PROFILE_HANDLER_H_
149