OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/webui/options/manage_profile_handler.h" | 5 #include "chrome/browser/ui/webui/options/manage_profile_handler.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "content/public/browser/web_ui.h" | 27 #include "content/public/browser/web_ui.h" |
28 #include "grit/generated_resources.h" | 28 #include "grit/generated_resources.h" |
29 | 29 |
30 namespace options { | 30 namespace options { |
31 | 31 |
32 namespace { | 32 namespace { |
33 | 33 |
34 const char kCreateProfileIconGridName[] = "create-profile-icon-grid"; | 34 const char kCreateProfileIconGridName[] = "create-profile-icon-grid"; |
35 const char kManageProfileIconGridName[] = "manage-profile-icon-grid"; | 35 const char kManageProfileIconGridName[] = "manage-profile-icon-grid"; |
36 | 36 |
| 37 // Given |args| from the WebUI, parses value 0 as a FilePath |profile_file_path| |
| 38 // and returns true on success. |
| 39 bool GetProfilePathFromArgs(const ListValue* args, |
| 40 FilePath* profile_file_path) { |
| 41 const Value* file_path_value; |
| 42 if (!args->Get(0, &file_path_value)) |
| 43 return false; |
| 44 return base::GetValueAsFilePath(*file_path_value, profile_file_path); |
| 45 } |
| 46 |
37 } // namespace | 47 } // namespace |
38 | 48 |
39 ManageProfileHandler::ManageProfileHandler() { | 49 ManageProfileHandler::ManageProfileHandler() |
| 50 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
40 } | 51 } |
41 | 52 |
42 ManageProfileHandler::~ManageProfileHandler() { | 53 ManageProfileHandler::~ManageProfileHandler() { |
43 } | 54 } |
44 | 55 |
45 void ManageProfileHandler::GetLocalizedValues( | 56 void ManageProfileHandler::GetLocalizedValues( |
46 DictionaryValue* localized_strings) { | 57 DictionaryValue* localized_strings) { |
47 DCHECK(localized_strings); | 58 DCHECK(localized_strings); |
48 | 59 |
49 static OptionsStringResource resources[] = { | 60 static OptionsStringResource resources[] = { |
50 { "manageProfilesNameLabel", IDS_PROFILES_MANAGE_NAME_LABEL }, | 61 { "manageProfilesNameLabel", IDS_PROFILES_MANAGE_NAME_LABEL }, |
51 { "manageProfilesDuplicateNameError", | 62 { "manageProfilesDuplicateNameError", |
52 IDS_PROFILES_MANAGE_DUPLICATE_NAME_ERROR }, | 63 IDS_PROFILES_MANAGE_DUPLICATE_NAME_ERROR }, |
53 { "manageProfilesIconLabel", IDS_PROFILES_MANAGE_ICON_LABEL }, | 64 { "manageProfilesIconLabel", IDS_PROFILES_MANAGE_ICON_LABEL }, |
54 { "manageProfilesManagedUserSettings", | 65 { "manageProfilesManagedUserSettings", |
55 IDS_PROFILES_MANAGE_MANAGED_USER_SETTINGS_BUTTON }, | 66 IDS_PROFILES_MANAGE_MANAGED_USER_SETTINGS_BUTTON }, |
56 { "manageProfilesManagedLabel", IDS_PROFILES_CREATE_MANAGED_CHECKBOX }, | 67 { "manageProfilesManagedLabel", IDS_PROFILES_CREATE_MANAGED_CHECKBOX }, |
57 { "deleteProfileTitle", IDS_PROFILES_DELETE_TITLE }, | 68 { "deleteProfileTitle", IDS_PROFILES_DELETE_TITLE }, |
58 { "deleteProfileOK", IDS_PROFILES_DELETE_OK_BUTTON_LABEL }, | 69 { "deleteProfileOK", IDS_PROFILES_DELETE_OK_BUTTON_LABEL }, |
59 { "deleteProfileMessage", IDS_PROFILES_DELETE_MESSAGE }, | 70 { "deleteProfileMessage", IDS_PROFILES_DELETE_MESSAGE }, |
60 { "createProfileTitle", IDS_PROFILES_CREATE_TITLE }, | 71 { "createProfileTitle", IDS_PROFILES_CREATE_TITLE }, |
61 { "createProfileInstructions", IDS_PROFILES_CREATE_INSTRUCTIONS }, | 72 { "createProfileInstructions", IDS_PROFILES_CREATE_INSTRUCTIONS }, |
62 { "createProfileConfirm", IDS_PROFILES_CREATE_CONFIRM }, | 73 { "createProfileConfirm", IDS_PROFILES_CREATE_CONFIRM }, |
63 { "createProfileShortcut", IDS_PROFILES_CREATE_SHORTCUT_CHKBOX }, | 74 { "createProfileShortcut", IDS_PROFILES_CREATE_SHORTCUT_CHECKBOX }, |
| 75 { "removeProfileShortcut", IDS_PROFILES_REMOVE_SHORTCUT_CHECKBOX }, |
64 }; | 76 }; |
65 | 77 |
66 RegisterStrings(localized_strings, resources, arraysize(resources)); | 78 RegisterStrings(localized_strings, resources, arraysize(resources)); |
67 RegisterTitle(localized_strings, "manageProfile", | 79 RegisterTitle(localized_strings, "manageProfile", |
68 IDS_PROFILES_MANAGE_TITLE); | 80 IDS_PROFILES_MANAGE_TITLE); |
69 RegisterTitle(localized_strings, "createProfile", | 81 RegisterTitle(localized_strings, "createProfile", |
70 IDS_PROFILES_CREATE_TITLE); | 82 IDS_PROFILES_CREATE_TITLE); |
| 83 |
| 84 localized_strings->SetBoolean("profileShortcutsEnabled", |
| 85 ProfileShortcutManager::IsFeatureEnabled()); |
71 } | 86 } |
72 | 87 |
73 void ManageProfileHandler::InitializeHandler() { | 88 void ManageProfileHandler::InitializeHandler() { |
74 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, | 89 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, |
75 content::NotificationService::AllSources()); | 90 content::NotificationService::AllSources()); |
76 } | 91 } |
77 | 92 |
78 void ManageProfileHandler::InitializePage() { | 93 void ManageProfileHandler::InitializePage() { |
79 SendProfileNames(); | 94 SendProfileNames(); |
80 } | 95 } |
81 | 96 |
82 void ManageProfileHandler::RegisterMessages() { | 97 void ManageProfileHandler::RegisterMessages() { |
83 web_ui()->RegisterMessageCallback("setProfileNameAndIcon", | 98 web_ui()->RegisterMessageCallback("setProfileNameAndIcon", |
84 base::Bind(&ManageProfileHandler::SetProfileNameAndIcon, | 99 base::Bind(&ManageProfileHandler::SetProfileNameAndIcon, |
85 base::Unretained(this))); | 100 base::Unretained(this))); |
86 web_ui()->RegisterMessageCallback("deleteProfile", | 101 web_ui()->RegisterMessageCallback("deleteProfile", |
87 base::Bind(&ManageProfileHandler::DeleteProfile, | 102 base::Bind(&ManageProfileHandler::DeleteProfile, |
88 base::Unretained(this))); | 103 base::Unretained(this))); |
89 web_ui()->RegisterMessageCallback("requestDefaultProfileIcons", | 104 web_ui()->RegisterMessageCallback("requestDefaultProfileIcons", |
90 base::Bind(&ManageProfileHandler::RequestDefaultProfileIcons, | 105 base::Bind(&ManageProfileHandler::RequestDefaultProfileIcons, |
91 base::Unretained(this))); | 106 base::Unretained(this))); |
92 web_ui()->RegisterMessageCallback("requestNewProfileDefaults", | 107 web_ui()->RegisterMessageCallback("requestNewProfileDefaults", |
93 base::Bind(&ManageProfileHandler::RequestNewProfileDefaults, | 108 base::Bind(&ManageProfileHandler::RequestNewProfileDefaults, |
94 base::Unretained(this))); | 109 base::Unretained(this))); |
| 110 web_ui()->RegisterMessageCallback("requestHasProfileShortcuts", |
| 111 base::Bind(&ManageProfileHandler::RequestHasProfileShortcuts, |
| 112 base::Unretained(this))); |
95 web_ui()->RegisterMessageCallback("profileIconSelectionChanged", | 113 web_ui()->RegisterMessageCallback("profileIconSelectionChanged", |
96 base::Bind(&ManageProfileHandler::ProfileIconSelectionChanged, | 114 base::Bind(&ManageProfileHandler::ProfileIconSelectionChanged, |
97 base::Unretained(this))); | 115 base::Unretained(this))); |
98 } | 116 } |
99 | 117 |
100 void ManageProfileHandler::Observe( | 118 void ManageProfileHandler::Observe( |
101 int type, | 119 int type, |
102 const content::NotificationSource& source, | 120 const content::NotificationSource& source, |
103 const content::NotificationDetails& details) { | 121 const content::NotificationDetails& details) { |
104 if (type == chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED) { | 122 if (type == chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED) { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 profile_name_dict.SetBoolean(UTF16ToUTF8(cache.GetNameOfProfileAtIndex(i)), | 186 profile_name_dict.SetBoolean(UTF16ToUTF8(cache.GetNameOfProfileAtIndex(i)), |
169 true); | 187 true); |
170 | 188 |
171 web_ui()->CallJavascriptFunction("ManageProfileOverlay.receiveProfileNames", | 189 web_ui()->CallJavascriptFunction("ManageProfileOverlay.receiveProfileNames", |
172 profile_name_dict); | 190 profile_name_dict); |
173 } | 191 } |
174 | 192 |
175 void ManageProfileHandler::SetProfileNameAndIcon(const ListValue* args) { | 193 void ManageProfileHandler::SetProfileNameAndIcon(const ListValue* args) { |
176 DCHECK(args); | 194 DCHECK(args); |
177 | 195 |
178 const Value* file_path_value; | |
179 FilePath profile_file_path; | 196 FilePath profile_file_path; |
180 if (!args->Get(0, &file_path_value) || | 197 if (!GetProfilePathFromArgs(args, &profile_file_path)) |
181 !base::GetValueAsFilePath(*file_path_value, &profile_file_path)) | |
182 return; | 198 return; |
183 | 199 |
184 ProfileInfoCache& cache = | 200 ProfileInfoCache& cache = |
185 g_browser_process->profile_manager()->GetProfileInfoCache(); | 201 g_browser_process->profile_manager()->GetProfileInfoCache(); |
186 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); | 202 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); |
187 if (profile_index == std::string::npos) | 203 if (profile_index == std::string::npos) |
188 return; | 204 return; |
189 | 205 |
190 Profile* profile = | 206 Profile* profile = |
191 g_browser_process->profile_manager()->GetProfile(profile_file_path); | 207 g_browser_process->profile_manager()->GetProfile(profile_file_path); |
192 if (!profile) | 208 if (!profile) |
193 return; | 209 return; |
194 | 210 |
195 bool shortcut_checked; | 211 std::string shortcut_mode; |
196 if (!args->GetBoolean(3, &shortcut_checked)) | 212 if (!args->GetString(3, &shortcut_mode)) |
197 return; | 213 return; |
198 if (shortcut_checked) { | 214 if (!shortcut_mode.empty()) { |
| 215 DCHECK(ProfileShortcutManager::IsFeatureEnabled()); |
199 ProfileShortcutManager* shortcut_manager = | 216 ProfileShortcutManager* shortcut_manager = |
200 g_browser_process->profile_manager()->profile_shortcut_manager(); | 217 g_browser_process->profile_manager()->profile_shortcut_manager(); |
201 if (shortcut_manager) { | 218 DCHECK(shortcut_manager); |
202 shortcut_manager->CreateProfileShortcut( | 219 |
203 cache.GetPathOfProfileAtIndex(profile_index)); | 220 const FilePath profile_path = cache.GetPathOfProfileAtIndex(profile_index); |
| 221 if (shortcut_mode == "create") { |
| 222 shortcut_manager->CreateProfileShortcut(profile_path); |
| 223 } else if (shortcut_mode == "remove") { |
| 224 shortcut_manager->RemoveProfileShortcuts(profile_path); |
| 225 } else { |
| 226 NOTREACHED() << shortcut_mode; |
204 } | 227 } |
205 } | 228 } |
206 | 229 |
207 string16 new_profile_name; | 230 string16 new_profile_name; |
208 if (!args->GetString(1, &new_profile_name)) | 231 if (!args->GetString(1, &new_profile_name)) |
209 return; | 232 return; |
210 if (new_profile_name == cache.GetGAIANameOfProfileAtIndex(profile_index)) { | 233 if (new_profile_name == cache.GetGAIANameOfProfileAtIndex(profile_index)) { |
211 // Set the profile to use the GAIA name as the profile name. Note, this | 234 // Set the profile to use the GAIA name as the profile name. Note, this |
212 // is a little weird if the user typed their GAIA name manually but | 235 // is a little weird if the user typed their GAIA name manually but |
213 // it's not a big deal. | 236 // it's not a big deal. |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 | 288 |
266 void ManageProfileHandler::DeleteProfile(const ListValue* args) { | 289 void ManageProfileHandler::DeleteProfile(const ListValue* args) { |
267 DCHECK(args); | 290 DCHECK(args); |
268 // This handler could have been called in managed mode, for example because | 291 // This handler could have been called in managed mode, for example because |
269 // the user fiddled with the web inspector. Silently return in this case. | 292 // the user fiddled with the web inspector. Silently return in this case. |
270 if (!ProfileManager::IsMultipleProfilesEnabled()) | 293 if (!ProfileManager::IsMultipleProfilesEnabled()) |
271 return; | 294 return; |
272 | 295 |
273 ProfileMetrics::LogProfileDeleteUser(ProfileMetrics::PROFILE_DELETED); | 296 ProfileMetrics::LogProfileDeleteUser(ProfileMetrics::PROFILE_DELETED); |
274 | 297 |
275 const Value* file_path_value; | |
276 FilePath profile_file_path; | 298 FilePath profile_file_path; |
277 if (!args->Get(0, &file_path_value) || | 299 if (!GetProfilePathFromArgs(args, &profile_file_path)) |
278 !base::GetValueAsFilePath(*file_path_value, &profile_file_path)) | |
279 return; | 300 return; |
280 | 301 |
281 Browser* browser = | 302 Browser* browser = |
282 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); | 303 chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); |
283 chrome::HostDesktopType desktop_type = chrome::HOST_DESKTOP_TYPE_NATIVE; | 304 chrome::HostDesktopType desktop_type = chrome::HOST_DESKTOP_TYPE_NATIVE; |
284 if (browser) | 305 if (browser) |
285 desktop_type = browser->host_desktop_type(); | 306 desktop_type = browser->host_desktop_type(); |
286 | 307 |
287 g_browser_process->profile_manager()->ScheduleProfileForDeletion( | 308 g_browser_process->profile_manager()->ScheduleProfileForDeletion( |
288 profile_file_path, desktop_type); | 309 profile_file_path, desktop_type); |
289 } | 310 } |
290 | 311 |
291 void ManageProfileHandler::ProfileIconSelectionChanged( | 312 void ManageProfileHandler::ProfileIconSelectionChanged( |
292 const base::ListValue* args) { | 313 const base::ListValue* args) { |
293 DCHECK(args); | 314 DCHECK(args); |
294 | 315 |
295 const Value* file_path_value; | 316 FilePath profile_file_path; |
296 FilePath file_path; | 317 if (!GetProfilePathFromArgs(args, &profile_file_path)) |
297 if (!args->Get(0, &file_path_value) || | |
298 !base::GetValueAsFilePath(*file_path_value, &file_path)) { | |
299 return; | 318 return; |
300 } | |
301 | 319 |
302 // Currently this only supports editing the current profile's info. | 320 // Currently this only supports editing the current profile's info. |
303 if (file_path != Profile::FromWebUI(web_ui())->GetPath()) | 321 if (profile_file_path != Profile::FromWebUI(web_ui())->GetPath()) |
304 return; | 322 return; |
305 | 323 |
306 std::string icon_url; | 324 std::string icon_url; |
307 if (!args->GetString(1, &icon_url)) | 325 if (!args->GetString(1, &icon_url)) |
308 return; | 326 return; |
309 | 327 |
310 if (icon_url != gaia_picture_url_) | 328 if (icon_url != gaia_picture_url_) |
311 return; | 329 return; |
312 | 330 |
313 // If the selection is the GAIA picture then also show the GAIA name in the | 331 // If the selection is the GAIA picture then also show the GAIA name in the |
314 // text field. | 332 // text field. |
315 ProfileInfoCache& cache = | 333 ProfileInfoCache& cache = |
316 g_browser_process->profile_manager()->GetProfileInfoCache(); | 334 g_browser_process->profile_manager()->GetProfileInfoCache(); |
317 size_t i = cache.GetIndexOfProfileWithPath(file_path); | 335 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); |
318 if (i == std::string::npos) | 336 if (profile_index == std::string::npos) |
319 return; | 337 return; |
320 string16 gaia_name = cache.GetGAIANameOfProfileAtIndex(i); | 338 string16 gaia_name = cache.GetGAIANameOfProfileAtIndex(profile_index); |
321 if (gaia_name.empty()) | 339 if (gaia_name.empty()) |
322 return; | 340 return; |
323 | 341 |
324 StringValue gaia_name_value(gaia_name); | 342 StringValue gaia_name_value(gaia_name); |
325 web_ui()->CallJavascriptFunction("ManageProfileOverlay.setProfileName", | 343 web_ui()->CallJavascriptFunction("ManageProfileOverlay.setProfileName", |
326 gaia_name_value); | 344 gaia_name_value); |
327 } | 345 } |
328 | 346 |
| 347 void ManageProfileHandler::RequestHasProfileShortcuts(const ListValue* args) { |
| 348 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 349 DCHECK(ProfileShortcutManager::IsFeatureEnabled()); |
| 350 |
| 351 FilePath profile_file_path; |
| 352 if (!GetProfilePathFromArgs(args, &profile_file_path)) |
| 353 return; |
| 354 |
| 355 const ProfileInfoCache& cache = |
| 356 g_browser_process->profile_manager()->GetProfileInfoCache(); |
| 357 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); |
| 358 if (profile_index == std::string::npos) |
| 359 return; |
| 360 |
| 361 const FilePath profile_path = cache.GetPathOfProfileAtIndex(profile_index); |
| 362 ProfileShortcutManager* shortcut_manager = |
| 363 g_browser_process->profile_manager()->profile_shortcut_manager(); |
| 364 shortcut_manager->HasProfileShortcuts( |
| 365 profile_path, base::Bind(&ManageProfileHandler::OnHasProfileShortcuts, |
| 366 weak_factory_.GetWeakPtr())); |
| 367 } |
| 368 |
| 369 void ManageProfileHandler::OnHasProfileShortcuts(bool has_shortcuts) { |
| 370 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 371 |
| 372 const base::FundamentalValue has_shortcuts_value(has_shortcuts); |
| 373 web_ui()->CallJavascriptFunction( |
| 374 "ManageProfileOverlay.receiveHasProfileShortcuts", has_shortcuts_value); |
| 375 } |
| 376 |
329 } // namespace options | 377 } // namespace options |
OLD | NEW |