19ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 29ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 39ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch// found in the LICENSE file. 49ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profile_window.h" 69ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/command_line.h" 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/files/file_path.h" 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/prefs/pref_service.h" 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/strings/utf_string_conversions.h" 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/about_flags.h" 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/browser_process.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/lifetime/application_lifetime.h" 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/pref_service_flags_storage.h" 169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profile.h" 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/profiles/profile_avatar_icon_util.h" 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/profiles/profile_manager.h" 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/signin/account_reconcilor_factory.h" 209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/ui/browser.h" 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/profile_chooser_constants.h" 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/user_manager.h" 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/common/chrome_switches.h" 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/common/pref_names.h" 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/common/url_constants.h" 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/signin/core/browser/account_reconcilor.h" 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/signin/core/common/profile_management_switches.h" 29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/browser/browser_thread.h" 309ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "content/public/browser/user_metrics.h" 319ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 329ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#if !defined(OS_IOS) 339ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/ui/browser_finder.h" 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/ui/browser_list_observer.h" 369ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/ui/browser_window.h" 379ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/ui/startup/startup_browser_creator.h" 389ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#endif // !defined (OS_IOS) 399ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction; 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing content::BrowserThread; 429ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace { 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst char kNewProfileManagementExperimentInternalName[] = 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "enable-new-profile-management"; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Handles running a callback when a new Browser for the given profile 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// has been completely created. 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BrowserAddedForProfileObserver : public chrome::BrowserListObserver { 510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) public: 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserAddedForProfileObserver( 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileManager::CreateCallback callback) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : profile_(profile), 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) callback_(callback) { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(!callback_.is_null()); 580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) BrowserList::AddObserver(this); 590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~BrowserAddedForProfileObserver() { 610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private: 640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Overridden from BrowserListObserver: 650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) virtual void OnBrowserAdded(Browser* browser) OVERRIDE { 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (browser->profile() == profile_) { 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserList::RemoveObserver(this); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback_.Run(profile_, Profile::CREATE_STATUS_INITIALIZED); 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Profile for which the browser should be opened. 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile* profile_; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileManager::CreateCallback callback_; 760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BrowserAddedForProfileObserver); 780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}; 790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void OpenBrowserWindowForProfile( 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileManager::CreateCallback callback, 820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool always_create, 830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool is_new_profile, 840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chrome::HostDesktopType desktop_type, 850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Profile* profile, 860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Profile::CreateStatus status) { 87ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 88ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (status != Profile::CREATE_STATUS_INITIALIZED) 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return; 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chrome::startup::IsProcessStartup is_process_startup = 930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chrome::startup::IS_NOT_PROCESS_STARTUP; 940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) chrome::startup::IsFirstRun is_first_run = chrome::startup::IS_NOT_FIRST_RUN; 950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // If this is a brand new profile, then start a first run window. 970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (is_new_profile) { 980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) is_process_startup = chrome::startup::IS_PROCESS_STARTUP; 990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) is_first_run = chrome::startup::IS_FIRST_RUN; 1000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 1010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If |always_create| is false, and we have a |callback| to run, check 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // whether a browser already exists so that we can run the callback. We don't 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // want to rely on the observer listening to OnBrowserSetLastActive in this 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // case, as you could manually activate an incorrect browser and trigger 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // a false positive. 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!always_create) { 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Browser* browser = chrome::FindTabbedBrowser(profile, false, desktop_type); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (browser) { 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser->window()->Activate(); 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!callback.is_null()) 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci callback.Run(profile, Profile::CREATE_STATUS_INITIALIZED); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 1170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // If there is a callback, create an observer to make sure it is only 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // run when the browser has been completely created. This observer will 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // delete itself once that happens. This should not leak, because we are 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // passing |always_create| = true to FindOrCreateNewWindow below, which ends 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // up calling LaunchBrowser and opens a new window. If for whatever reason 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // that fails, either something has crashed, or the observer will be cleaned 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // up when a different browser for this profile is opened. 1240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (!callback.is_null()) 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new BrowserAddedForProfileObserver(profile, callback); 1260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // We already dealt with the case when |always_create| was false and a browser 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // existed, which means that here a browser definitely needs to be created. 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Passing true for |always_create| means we won't duplicate the code that 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // tries to find a browser. 1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profiles::FindOrCreateNewWindowForProfile( 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) profile, 1330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) is_process_startup, 1340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) is_first_run, 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) desktop_type, 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true); 137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 13923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Called after a |guest_profile| is available to be used by the user manager. 14023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Based on the value of |tutorial_mode| we determine a url to be displayed 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// by the webui and run the |callback|, if it exists. After opening a profile, 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// perform |profile_open_action|. 14323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void OnUserManagerGuestProfileCreated( 14423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const base::FilePath& profile_path_to_focus, 14523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) profiles::UserManagerTutorialMode tutorial_mode, 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::UserManagerProfileSelected profile_open_action, 14723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const base::Callback<void(Profile*, const std::string&)>& callback, 14823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) Profile* guest_profile, 14923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) Profile::CreateStatus status) { 15023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (status != Profile::CREATE_STATUS_INITIALIZED || callback.is_null()) 15123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return; 15223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 15323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Tell the webui which user should be focused. 15423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string page = chrome::kChromeUIUserManagerURL; 15523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 15623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (tutorial_mode == profiles::USER_MANAGER_TUTORIAL_OVERVIEW) { 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci page += profiles::kUserManagerDisplayTutorial; 15823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } else if (!profile_path_to_focus.empty()) { 15923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const ProfileInfoCache& cache = 16023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) g_browser_process->profile_manager()->GetProfileInfoCache(); 16123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) size_t index = cache.GetIndexOfProfileWithPath(profile_path_to_focus); 16223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) if (index != std::string::npos) { 16323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) page += "#"; 16423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) page += base::IntToString(index); 16523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (profile_open_action == 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_SELECT_PROFILE_TASK_MANAGER) { 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci page += profiles::kUserManagerSelectProfileTaskManager; 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (profile_open_action == 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_SELECT_PROFILE_ABOUT_CHROME) { 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci page += profiles::kUserManagerSelectProfileAboutChrome; 17223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 17323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) callback.Run(guest_profile, page); 17423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 17523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Updates Chrome services that require notification when 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// the new_profile_management's status changes. 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void UpdateServicesWithNewProfileManagementFlag(Profile* profile, 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool new_flag_status) { 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilor* account_reconcilor = 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AccountReconcilorFactory::GetForProfile(profile); 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) account_reconcilor->OnNewProfileManagementFlagChanged(new_flag_status); 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 185ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace 186ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1879ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochnamespace profiles { 1889ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// User Manager parameters are prefixed with hash. 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kUserManagerDisplayTutorial[] = "#tutorial"; 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kUserManagerSelectProfileTaskManager[] = "#task-manager"; 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kUserManagerSelectProfileAboutChrome[] = "#about-chrome"; 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1949ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdochvoid FindOrCreateNewWindowForProfile( 1959ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Profile* profile, 1969ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch chrome::startup::IsProcessStartup process_startup, 1979ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch chrome::startup::IsFirstRun is_first_run, 1989ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch chrome::HostDesktopType desktop_type, 1999ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch bool always_create) { 2009ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#if defined(OS_IOS) 2019ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch NOTREACHED(); 2029ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#else 2039ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch DCHECK(profile); 2049ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 2059ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (!always_create) { 2069ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch Browser* browser = chrome::FindTabbedBrowser(profile, false, desktop_type); 2079ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch if (browser) { 2089ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch browser->window()->Activate(); 2099ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch return; 2109ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } 2119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch } 2129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 2139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch content::RecordAction(UserMetricsAction("NewWindow")); 2149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch CommandLine command_line(CommandLine::NO_PROGRAM); 2159ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch int return_code; 2169ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch StartupBrowserCreator browser_creator; 2179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch browser_creator.LaunchBrowser(command_line, profile, base::FilePath(), 2189ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch process_startup, is_first_run, &return_code); 2199ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#endif // defined(OS_IOS) 2209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} 2219ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void SwitchToProfile(const base::FilePath& path, 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome::HostDesktopType desktop_type, 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool always_create, 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileManager::CreateCallback callback, 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileMetrics::ProfileOpen metric) { 227ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch g_browser_process->profile_manager()->CreateProfileAsync( 228ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch path, 229ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::Bind(&OpenBrowserWindowForProfile, 2300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) callback, 231ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch always_create, 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) false, 233ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch desktop_type), 234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 2362385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch std::string()); 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileMetrics::LogProfileSwitchUser(metric); 238ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 239ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 2400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void SwitchToGuestProfile(chrome::HostDesktopType desktop_type, 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileManager::CreateCallback callback) { 2420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) g_browser_process->profile_manager()->CreateProfileAsync( 2430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ProfileManager::GetGuestProfilePath(), 2440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Bind(&OpenBrowserWindowForProfile, 2450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) callback, 2460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) false, 2470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) false, 2480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) desktop_type), 249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 2510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string()); 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileMetrics::LogProfileSwitchUser(ProfileMetrics::SWITCH_PROFILE_GUEST); 2530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 2540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void CreateAndSwitchToNewProfile(chrome::HostDesktopType desktop_type, 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileManager::CreateCallback callback, 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileMetrics::ProfileAdd metric) { 2580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ProfileInfoCache& cache = 2590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch g_browser_process->profile_manager()->GetProfileInfoCache(); 2600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int placeholder_avatar_index = profiles::GetPlaceholderAvatarIndex(); 2624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ProfileManager::CreateMultiProfileAsync( 2630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch cache.ChooseNameForNewProfile(placeholder_avatar_index), 2640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::UTF8ToUTF16(profiles::GetDefaultAvatarIconUrl( 2650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch placeholder_avatar_index)), 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&OpenBrowserWindowForProfile, 2670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) callback, 2684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) desktop_type), 2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string()); 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileMetrics::LogProfileAddNewUser(metric); 27368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 27468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GuestBrowserCloseSuccess(const base::FilePath& profile_path) { 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserManager::Show(profile_path, 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_NO_TUTORIAL, 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 281d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void CloseGuestProfileWindows() { 282d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 283d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Profile* profile = profile_manager->GetProfileByPath( 284d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ProfileManager::GetGuestProfilePath()); 285d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 286d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (profile) { 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BrowserList::CloseAllBrowsersWithProfile( 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile, base::Bind(&GuestBrowserCloseSuccess)); 289d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 290d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 291d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid LockBrowserCloseSuccess(const base::FilePath& profile_path) { 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileInfoCache* cache = 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &g_browser_process->profile_manager()->GetProfileInfoCache(); 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cache->SetProfileSigninRequiredAtIndex( 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cache->GetIndexOfProfileWithPath(profile_path), true); 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserManager::Show(profile_path, 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_NO_TUTORIAL, 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void LockProfile(Profile* profile) { 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(profile); 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (profile) { 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BrowserList::CloseAllBrowsersWithProfile( 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile, base::Bind(&LockBrowserCloseSuccess)); 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 31123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void CreateGuestProfileForUserManager( 31223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const base::FilePath& profile_path_to_focus, 31323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) profiles::UserManagerTutorialMode tutorial_mode, 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::UserManagerProfileSelected profile_open_action, 31523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const base::Callback<void(Profile*, const std::string&)>& callback) { 31623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Create the guest profile, if necessary, and open the User Manager 31723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // from the guest profile. 31823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) g_browser_process->profile_manager()->CreateProfileAsync( 31923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ProfileManager::GetGuestProfilePath(), 32023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::Bind(&OnUserManagerGuestProfileCreated, 32123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) profile_path_to_focus, 32223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) tutorial_mode, 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_open_action, 32423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) callback), 32523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::string16(), 32623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::string16(), 32723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::string()); 32823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 32923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 33023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void ShowUserManagerMaybeWithTutorial(Profile* profile) { 331c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Guest users cannot appear in the User Manager, nor display a tutorial. 332c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!profile || profile->IsGuestSession()) { 3331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserManager::Show(base::FilePath(), 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_NO_TUTORIAL, 3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); 33623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return; 33723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserManager::Show(base::FilePath(), 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_TUTORIAL_OVERVIEW, 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); 34123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 34223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void EnableNewProfileManagementPreview(Profile* profile) { 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_ANDROID) 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTREACHED(); 346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 3476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // TODO(rogerta): instead of setting experiment flags and command line 3486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // args, we should set a profile preference. 3496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const about_flags::Experiment experiment = { 3506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) kNewProfileManagementExperimentInternalName, 3516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0, // string id for title of experiment 3526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0, // string id for description of experiment 3536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 0, // supported platforms 3546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) about_flags::Experiment::ENABLE_DISABLE_VALUE, 3556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) switches::kEnableNewProfileManagement, 3566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "", // not used with ENABLE_DISABLE_VALUE type 3576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) switches::kDisableNewProfileManagement, 3586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) "", // not used with ENABLE_DISABLE_VALUE type 3596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) NULL, // not used with ENABLE_DISABLE_VALUE type 3606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 3 3616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) }; 3620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch about_flags::PrefServiceFlagsStorage flags_storage( 3630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch g_browser_process->local_state()); 3640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch about_flags::SetExperimentEnabled( 3650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch &flags_storage, 3666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) experiment.NameForChoice(1), 3670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch true); 3680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 369f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switches::EnableNewProfileManagementForTesting( 370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandLine::ForCurrentProcess()); 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserManager::Show(base::FilePath(), 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_TUTORIAL_OVERVIEW, 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); 374f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UpdateServicesWithNewProfileManagementFlag(profile, true); 375f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 3760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 3770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 378f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void DisableNewProfileManagementPreview(Profile* profile) { 3795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu about_flags::PrefServiceFlagsStorage flags_storage( 3805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu g_browser_process->local_state()); 3815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu about_flags::SetExperimentEnabled( 3825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu &flags_storage, 3835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kNewProfileManagementExperimentInternalName, 3845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu false); 3855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu chrome::AttemptRestart(); 386f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UpdateServicesWithNewProfileManagementFlag(profile, false); 3875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 3885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void BubbleViewModeFromAvatarBubbleMode( 3906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BrowserWindow::AvatarBubbleMode mode, 3916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BubbleViewMode* bubble_view_mode, 3926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TutorialMode* tutorial_mode) { 3936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *tutorial_mode = TUTORIAL_MODE_NONE; 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switch (mode) { 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT: 3966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *bubble_view_mode = BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; 3976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case BrowserWindow::AVATAR_BUBBLE_MODE_SIGNIN: 3996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_SIGNIN; 4006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case BrowserWindow::AVATAR_BUBBLE_MODE_ADD_ACCOUNT: 4026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT; 4036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case BrowserWindow::AVATAR_BUBBLE_MODE_REAUTH: 4056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *bubble_view_mode = BUBBLE_VIEW_MODE_GAIA_REAUTH; 4066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 4076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case BrowserWindow::AVATAR_BUBBLE_MODE_CONFIRM_SIGNIN: 4086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *bubble_view_mode = BUBBLE_VIEW_MODE_PROFILE_CHOOSER; 4096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *tutorial_mode = TUTORIAL_MODE_CONFIRM_SIGNIN; 4106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 41103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) case BrowserWindow::AVATAR_BUBBLE_MODE_SHOW_ERROR: 41203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) *bubble_view_mode = BUBBLE_VIEW_MODE_PROFILE_CHOOSER; 41303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) *tutorial_mode = TUTORIAL_MODE_SHOW_ERROR; 41403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return; 4156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) default: 4166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) *bubble_view_mode = profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER; 417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4209ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch} // namespace profiles 421