OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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/profiles/profile_window.h" | 5 #include "chrome/browser/profiles/profile_window.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 } | 116 } |
117 | 117 |
118 // Profile for which the browser should be opened. | 118 // Profile for which the browser should be opened. |
119 Profile* profile_; | 119 Profile* profile_; |
120 ProfileManager::CreateCallback callback_; | 120 ProfileManager::CreateCallback callback_; |
121 | 121 |
122 DISALLOW_COPY_AND_ASSIGN(BrowserAddedForProfileObserver); | 122 DISALLOW_COPY_AND_ASSIGN(BrowserAddedForProfileObserver); |
123 }; | 123 }; |
124 | 124 |
125 // Called after a |system_profile| is available to be used by the user manager. | 125 // Called after a |system_profile| is available to be used by the user manager. |
126 // Based on the value of |tutorial_mode| we determine a url to be displayed | 126 // Runs |callback|, if it exists. Depending on the value of |
127 // by the webui and run the |callback|, if it exists. Depending on the value of | |
128 // |user_manager_action|, executes an action once the user manager displays or | 127 // |user_manager_action|, executes an action once the user manager displays or |
129 // after a profile is opened. | 128 // after a profile is opened. |
130 void OnUserManagerSystemProfileCreated( | 129 void OnUserManagerSystemProfileCreated( |
131 const base::FilePath& profile_path_to_focus, | 130 const base::FilePath& profile_path_to_focus, |
132 profiles::UserManagerTutorialMode tutorial_mode, | |
133 profiles::UserManagerAction user_manager_action, | 131 profiles::UserManagerAction user_manager_action, |
134 const base::Callback<void(Profile*, const std::string&)>& callback, | 132 const base::Callback<void(Profile*, const std::string&)>& callback, |
135 Profile* system_profile, | 133 Profile* system_profile, |
136 Profile::CreateStatus status) { | 134 Profile::CreateStatus status) { |
137 if (status != Profile::CREATE_STATUS_INITIALIZED || callback.is_null()) | 135 if (status != Profile::CREATE_STATUS_INITIALIZED || callback.is_null()) |
138 return; | 136 return; |
139 | 137 |
140 // Tell the webui which user should be focused. | 138 // Tell the webui which user should be focused. |
141 std::string page = chrome::kChromeUIMdUserManagerUrl; | 139 std::string page = chrome::kChromeUIMdUserManagerUrl; |
142 | 140 |
143 if (tutorial_mode == profiles::USER_MANAGER_TUTORIAL_OVERVIEW) { | 141 if (!profile_path_to_focus.empty()) { |
144 page += profiles::kUserManagerDisplayTutorial; | |
145 } else if (!profile_path_to_focus.empty()) { | |
146 // The file path is processed in the same way as base::CreateFilePathValue | 142 // The file path is processed in the same way as base::CreateFilePathValue |
147 // (i.e. convert to std::string with AsUTF8Unsafe()), and then URI encoded. | 143 // (i.e. convert to std::string with AsUTF8Unsafe()), and then URI encoded. |
148 page += "#"; | 144 page += "#"; |
149 page += net::EscapeUrlEncodedData(profile_path_to_focus.AsUTF8Unsafe(), | 145 page += net::EscapeUrlEncodedData(profile_path_to_focus.AsUTF8Unsafe(), |
150 false); | 146 false); |
151 } else if (user_manager_action == | 147 } else if (user_manager_action == |
152 profiles::USER_MANAGER_OPEN_CREATE_USER_PAGE) { | 148 profiles::USER_MANAGER_OPEN_CREATE_USER_PAGE) { |
153 page += profiles::kUserManagerOpenCreateUserPage; | 149 page += profiles::kUserManagerOpenCreateUserPage; |
154 } else if (user_manager_action == | 150 } else if (user_manager_action == |
155 profiles::USER_MANAGER_SELECT_PROFILE_TASK_MANAGER) { | 151 profiles::USER_MANAGER_SELECT_PROFILE_TASK_MANAGER) { |
(...skipping 23 matching lines...) Expand all Loading... |
179 | 175 |
180 if (!callback.is_null()) | 176 if (!callback.is_null()) |
181 callback.Run(profile, Profile::CREATE_STATUS_INITIALIZED); | 177 callback.Run(profile, Profile::CREATE_STATUS_INITIALIZED); |
182 } | 178 } |
183 | 179 |
184 } // namespace | 180 } // namespace |
185 | 181 |
186 namespace profiles { | 182 namespace profiles { |
187 | 183 |
188 // User Manager parameters are prefixed with hash. | 184 // User Manager parameters are prefixed with hash. |
189 const char kUserManagerDisplayTutorial[] = "#tutorial"; | |
190 const char kUserManagerOpenCreateUserPage[] = "#create-user"; | 185 const char kUserManagerOpenCreateUserPage[] = "#create-user"; |
191 const char kUserManagerSelectProfileTaskManager[] = "#task-manager"; | 186 const char kUserManagerSelectProfileTaskManager[] = "#task-manager"; |
192 const char kUserManagerSelectProfileAboutChrome[] = "#about-chrome"; | 187 const char kUserManagerSelectProfileAboutChrome[] = "#about-chrome"; |
193 const char kUserManagerSelectProfileChromeSettings[] = "#chrome-settings"; | 188 const char kUserManagerSelectProfileChromeSettings[] = "#chrome-settings"; |
194 const char kUserManagerSelectProfileAppLauncher[] = "#app-launcher"; | 189 const char kUserManagerSelectProfileAppLauncher[] = "#app-launcher"; |
195 | 190 |
196 base::FilePath GetPathOfProfileWithEmail(ProfileManager* profile_manager, | 191 base::FilePath GetPathOfProfileWithEmail(ProfileManager* profile_manager, |
197 const std::string& email) { | 192 const std::string& email) { |
198 base::string16 profile_email = base::UTF8ToUTF16(email); | 193 base::string16 profile_email = base::UTF8ToUTF16(email); |
199 std::vector<ProfileAttributesEntry*> entries = | 194 std::vector<ProfileAttributesEntry*> entries = |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 base::Bind(&profiles::OpenBrowserWindowForProfile, | 348 base::Bind(&profiles::OpenBrowserWindowForProfile, |
354 callback, | 349 callback, |
355 true, | 350 true, |
356 true), | 351 true), |
357 std::string()); | 352 std::string()); |
358 ProfileMetrics::LogProfileAddNewUser(metric); | 353 ProfileMetrics::LogProfileAddNewUser(metric); |
359 } | 354 } |
360 | 355 |
361 void ProfileBrowserCloseSuccess(const base::FilePath& profile_path) { | 356 void ProfileBrowserCloseSuccess(const base::FilePath& profile_path) { |
362 UserManager::Show(base::FilePath(), | 357 UserManager::Show(base::FilePath(), |
363 profiles::USER_MANAGER_NO_TUTORIAL, | |
364 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | 358 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); |
365 } | 359 } |
366 | 360 |
367 void CloseGuestProfileWindows() { | 361 void CloseGuestProfileWindows() { |
368 ProfileManager* profile_manager = g_browser_process->profile_manager(); | 362 ProfileManager* profile_manager = g_browser_process->profile_manager(); |
369 Profile* profile = profile_manager->GetProfileByPath( | 363 Profile* profile = profile_manager->GetProfileByPath( |
370 ProfileManager::GetGuestProfilePath()); | 364 ProfileManager::GetGuestProfilePath()); |
371 | 365 |
372 if (profile) { | 366 if (profile) { |
373 BrowserList::CloseAllBrowsersWithProfile( | 367 BrowserList::CloseAllBrowsersWithProfile( |
(...skipping 10 matching lines...) Expand all Loading... |
384 DCHECK(has_entry); | 378 DCHECK(has_entry); |
385 entry->SetIsSigninRequired(true); | 379 entry->SetIsSigninRequired(true); |
386 | 380 |
387 #if BUILDFLAG(ENABLE_EXTENSIONS) | 381 #if BUILDFLAG(ENABLE_EXTENSIONS) |
388 // Profile guaranteed to exist for it to have been locked. | 382 // Profile guaranteed to exist for it to have been locked. |
389 BlockExtensions(profile_manager->GetProfileByPath(profile_path)); | 383 BlockExtensions(profile_manager->GetProfileByPath(profile_path)); |
390 #endif // BUILDFLAG(ENABLE_EXTENSIONS) | 384 #endif // BUILDFLAG(ENABLE_EXTENSIONS) |
391 | 385 |
392 chrome::HideTaskManager(); | 386 chrome::HideTaskManager(); |
393 UserManager::Show(profile_path, | 387 UserManager::Show(profile_path, |
394 profiles::USER_MANAGER_NO_TUTORIAL, | |
395 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | 388 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); |
396 } | 389 } |
397 | 390 |
398 void LockProfile(Profile* profile) { | 391 void LockProfile(Profile* profile) { |
399 DCHECK(profile); | 392 DCHECK(profile); |
400 if (profile) { | 393 if (profile) { |
401 BrowserList::CloseAllBrowsersWithProfile( | 394 BrowserList::CloseAllBrowsersWithProfile( |
402 profile, base::Bind(&LockBrowserCloseSuccess), | 395 profile, base::Bind(&LockBrowserCloseSuccess), |
403 BrowserList::CloseCallback(), false); | 396 BrowserList::CloseCallback(), false); |
404 } | 397 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 | 433 |
441 void CloseProfileWindows(Profile* profile) { | 434 void CloseProfileWindows(Profile* profile) { |
442 DCHECK(profile); | 435 DCHECK(profile); |
443 BrowserList::CloseAllBrowsersWithProfile( | 436 BrowserList::CloseAllBrowsersWithProfile( |
444 profile, base::Bind(&ProfileBrowserCloseSuccess), | 437 profile, base::Bind(&ProfileBrowserCloseSuccess), |
445 BrowserList::CloseCallback(), false); | 438 BrowserList::CloseCallback(), false); |
446 } | 439 } |
447 | 440 |
448 void CreateSystemProfileForUserManager( | 441 void CreateSystemProfileForUserManager( |
449 const base::FilePath& profile_path_to_focus, | 442 const base::FilePath& profile_path_to_focus, |
450 profiles::UserManagerTutorialMode tutorial_mode, | |
451 profiles::UserManagerAction user_manager_action, | 443 profiles::UserManagerAction user_manager_action, |
452 const base::Callback<void(Profile*, const std::string&)>& callback) { | 444 const base::Callback<void(Profile*, const std::string&)>& callback) { |
453 // Create the system profile, if necessary, and open the User Manager | 445 // Create the system profile, if necessary, and open the User Manager |
454 // from the system profile. | 446 // from the system profile. |
455 g_browser_process->profile_manager()->CreateProfileAsync( | 447 g_browser_process->profile_manager()->CreateProfileAsync( |
456 ProfileManager::GetSystemProfilePath(), | 448 ProfileManager::GetSystemProfilePath(), |
457 base::Bind(&OnUserManagerSystemProfileCreated, | 449 base::Bind(&OnUserManagerSystemProfileCreated, |
458 profile_path_to_focus, | 450 profile_path_to_focus, |
459 tutorial_mode, | |
460 user_manager_action, | 451 user_manager_action, |
461 callback), | 452 callback), |
462 base::string16(), | 453 base::string16(), |
463 std::string(), | 454 std::string(), |
464 std::string()); | 455 std::string()); |
465 } | 456 } |
466 | 457 |
467 void ShowUserManagerMaybeWithTutorial(Profile* profile) { | 458 void BubbleViewModeFromAvatarBubbleMode(BrowserWindow::AvatarBubbleMode mode, |
468 // Guest users cannot appear in the User Manager, nor display a tutorial. | 459 BubbleViewMode* bubble_view_mode) { |
469 if (!profile || profile->IsGuestSession()) { | |
470 UserManager::Show(base::FilePath(), | |
471 profiles::USER_MANAGER_NO_TUTORIAL, | |
472 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | |
473 return; | |
474 } | |
475 UserManager::Show(base::FilePath(), | |
476 profiles::USER_MANAGER_TUTORIAL_OVERVIEW, | |
477 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | |
478 } | |
479 | |
480 void BubbleViewModeFromAvatarBubbleMode( | |
481 BrowserWindow::AvatarBubbleMode mode, | |
482 BubbleViewMode* bubble_view_mode, | |
483 TutorialMode* tutorial_mode) { | |
484 *tutorial_mode = TUTORIAL_MODE_NONE; | |
485 switch (mode) { | 460 switch (mode) { |
486 case BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT: | 461 case BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT: |
487 *bubble_view_mode = BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; | 462 *bubble_view_mode = BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; |
488 return; | 463 return; |
489 case BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN: | 464 case BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN: |
490 *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_SIGNIN; | 465 *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_SIGNIN; |
491 return; | 466 return; |
492 case BrowserWindow::AVATAR_BUBBLE_MODE_ADD_ACCOUNT: | 467 case BrowserWindow::AVATAR_BUBBLE_MODE_ADD_ACCOUNT: |
493 *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT; | 468 *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT; |
494 return; | 469 return; |
495 case BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH: | 470 case BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH: |
496 *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_REAUTH; | 471 *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_REAUTH; |
497 return; | 472 return; |
498 case BrowserWindow::AVATAR_BUBBLE_MODE_CONFIRM_SIGNIN: | 473 case BrowserWindow::AVATAR_BUBBLE_MODE_CONFIRM_SIGNIN: |
499 *bubble_view_mode = BUBBLE_VIEW_MODE_PROFILE_CHOOSER; | 474 *bubble_view_mode = BUBBLE_VIEW_MODE_PROFILE_CHOOSER; |
500 *tutorial_mode = TUTORIAL_MODE_CONFIRM_SIGNIN; | |
501 return; | 475 return; |
502 case BrowserWindow::AVATAR_BUBBLE_MODE_SHOW_ERROR: | 476 case BrowserWindow::AVATAR_BUBBLE_MODE_SHOW_ERROR: |
503 *bubble_view_mode = BUBBLE_VIEW_MODE_PROFILE_CHOOSER; | 477 *bubble_view_mode = BUBBLE_VIEW_MODE_PROFILE_CHOOSER; |
504 *tutorial_mode = TUTORIAL_MODE_SHOW_ERROR; | |
505 return; | 478 return; |
506 default: | 479 default: |
507 *bubble_view_mode = profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER; | 480 *bubble_view_mode = profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER; |
508 } | 481 } |
509 } | 482 } |
510 | 483 |
511 bool ShouldShowWelcomeUpgradeTutorial( | |
512 Profile* profile, TutorialMode tutorial_mode) { | |
513 const int show_count = profile->GetPrefs()->GetInteger( | |
514 prefs::kProfileAvatarTutorialShown); | |
515 // Do not show the tutorial if user has dismissed it. | |
516 if (show_count > signin_ui_util::kUpgradeWelcomeTutorialShowMax) | |
517 return false; | |
518 | |
519 return tutorial_mode == TUTORIAL_MODE_WELCOME_UPGRADE || | |
520 show_count != signin_ui_util::kUpgradeWelcomeTutorialShowMax; | |
521 } | |
522 | |
523 } // namespace profiles | 484 } // namespace profiles |
OLD | NEW |