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 "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 Profile* profile_; | 112 Profile* profile_; |
113 ProfileManager::CreateCallback callback_; | 113 ProfileManager::CreateCallback callback_; |
114 | 114 |
115 DISALLOW_COPY_AND_ASSIGN(BrowserAddedForProfileObserver); | 115 DISALLOW_COPY_AND_ASSIGN(BrowserAddedForProfileObserver); |
116 }; | 116 }; |
117 | 117 |
118 void OpenBrowserWindowForProfile( | 118 void OpenBrowserWindowForProfile( |
119 ProfileManager::CreateCallback callback, | 119 ProfileManager::CreateCallback callback, |
120 bool always_create, | 120 bool always_create, |
121 bool is_new_profile, | 121 bool is_new_profile, |
122 chrome::HostDesktopType desktop_type, | |
123 Profile* profile, | 122 Profile* profile, |
124 Profile::CreateStatus status) { | 123 Profile::CreateStatus status) { |
125 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 124 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
126 | 125 |
127 if (status != Profile::CREATE_STATUS_INITIALIZED) | 126 if (status != Profile::CREATE_STATUS_INITIALIZED) |
128 return; | 127 return; |
129 | 128 |
130 chrome::startup::IsProcessStartup is_process_startup = | 129 chrome::startup::IsProcessStartup is_process_startup = |
131 chrome::startup::IS_NOT_PROCESS_STARTUP; | 130 chrome::startup::IS_NOT_PROCESS_STARTUP; |
132 chrome::startup::IsFirstRun is_first_run = chrome::startup::IS_NOT_FIRST_RUN; | 131 chrome::startup::IsFirstRun is_first_run = chrome::startup::IS_NOT_FIRST_RUN; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 // up calling LaunchBrowser and opens a new window. If for whatever reason | 171 // up calling LaunchBrowser and opens a new window. If for whatever reason |
173 // that fails, either something has crashed, or the observer will be cleaned | 172 // that fails, either something has crashed, or the observer will be cleaned |
174 // up when a different browser for this profile is opened. | 173 // up when a different browser for this profile is opened. |
175 if (!callback.is_null()) | 174 if (!callback.is_null()) |
176 new BrowserAddedForProfileObserver(profile, callback); | 175 new BrowserAddedForProfileObserver(profile, callback); |
177 | 176 |
178 // We already dealt with the case when |always_create| was false and a browser | 177 // We already dealt with the case when |always_create| was false and a browser |
179 // existed, which means that here a browser definitely needs to be created. | 178 // existed, which means that here a browser definitely needs to be created. |
180 // Passing true for |always_create| means we won't duplicate the code that | 179 // Passing true for |always_create| means we won't duplicate the code that |
181 // tries to find a browser. | 180 // tries to find a browser. |
182 profiles::FindOrCreateNewWindowForProfile( | 181 profiles::FindOrCreateNewWindowForProfile(profile, is_process_startup, |
183 profile, | 182 is_first_run, true); |
184 is_process_startup, | |
185 is_first_run, | |
186 desktop_type, | |
187 true); | |
188 } | 183 } |
189 | 184 |
190 // Called after a |system_profile| is available to be used by the user manager. | 185 // Called after a |system_profile| is available to be used by the user manager. |
191 // Based on the value of |tutorial_mode| we determine a url to be displayed | 186 // Based on the value of |tutorial_mode| we determine a url to be displayed |
192 // by the webui and run the |callback|, if it exists. After opening a profile, | 187 // by the webui and run the |callback|, if it exists. After opening a profile, |
193 // perform |profile_open_action|. | 188 // perform |profile_open_action|. |
194 void OnUserManagerSystemProfileCreated( | 189 void OnUserManagerSystemProfileCreated( |
195 const base::FilePath& profile_path_to_focus, | 190 const base::FilePath& profile_path_to_focus, |
196 profiles::UserManagerTutorialMode tutorial_mode, | 191 profiles::UserManagerTutorialMode tutorial_mode, |
197 profiles::UserManagerProfileSelected profile_open_action, | 192 profiles::UserManagerProfileSelected profile_open_action, |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 if (entry->GetUserName() == profile_email) | 258 if (entry->GetUserName() == profile_email) |
264 return entry->GetPath(); | 259 return entry->GetPath(); |
265 } | 260 } |
266 return base::FilePath(); | 261 return base::FilePath(); |
267 } | 262 } |
268 | 263 |
269 void FindOrCreateNewWindowForProfile( | 264 void FindOrCreateNewWindowForProfile( |
270 Profile* profile, | 265 Profile* profile, |
271 chrome::startup::IsProcessStartup process_startup, | 266 chrome::startup::IsProcessStartup process_startup, |
272 chrome::startup::IsFirstRun is_first_run, | 267 chrome::startup::IsFirstRun is_first_run, |
273 chrome::HostDesktopType desktop_type, | |
274 bool always_create) { | 268 bool always_create) { |
275 DCHECK(profile); | 269 DCHECK(profile); |
276 | 270 |
277 if (!always_create) { | 271 if (!always_create) { |
278 Browser* browser = chrome::FindTabbedBrowser(profile, false); | 272 Browser* browser = chrome::FindTabbedBrowser(profile, false); |
279 if (browser) { | 273 if (browser) { |
280 browser->window()->Activate(); | 274 browser->window()->Activate(); |
281 return; | 275 return; |
282 } | 276 } |
283 } | 277 } |
284 | 278 |
285 content::RecordAction(UserMetricsAction("NewWindow")); | 279 content::RecordAction(UserMetricsAction("NewWindow")); |
286 base::CommandLine command_line(base::CommandLine::NO_PROGRAM); | 280 base::CommandLine command_line(base::CommandLine::NO_PROGRAM); |
287 StartupBrowserCreator browser_creator; | 281 StartupBrowserCreator browser_creator; |
288 browser_creator.LaunchBrowser( | 282 browser_creator.LaunchBrowser( |
289 command_line, profile, base::FilePath(), process_startup, is_first_run); | 283 command_line, profile, base::FilePath(), process_startup, is_first_run); |
290 } | 284 } |
291 | 285 |
292 #if !defined(OS_ANDROID) | 286 #if !defined(OS_ANDROID) |
293 void SwitchToProfile(const base::FilePath& path, | 287 void SwitchToProfile(const base::FilePath& path, |
294 chrome::HostDesktopType desktop_type, | |
295 bool always_create, | 288 bool always_create, |
296 ProfileManager::CreateCallback callback, | 289 ProfileManager::CreateCallback callback, |
297 ProfileMetrics::ProfileOpen metric) { | 290 ProfileMetrics::ProfileOpen metric) { |
298 ProfileMetrics::LogProfileSwitch(metric, | 291 ProfileMetrics::LogProfileSwitch(metric, |
299 g_browser_process->profile_manager(), | 292 g_browser_process->profile_manager(), |
300 path); | 293 path); |
301 g_browser_process->profile_manager()->CreateProfileAsync( | 294 g_browser_process->profile_manager()->CreateProfileAsync( |
302 path, | 295 path, |
303 base::Bind(&OpenBrowserWindowForProfile, | 296 base::Bind(&OpenBrowserWindowForProfile, callback, always_create, false), |
304 callback, | 297 base::string16(), std::string(), std::string()); |
305 always_create, | |
306 false, | |
307 desktop_type), | |
308 base::string16(), | |
309 std::string(), | |
310 std::string()); | |
311 } | 298 } |
312 | 299 |
313 void SwitchToGuestProfile(chrome::HostDesktopType desktop_type, | 300 void SwitchToGuestProfile(ProfileManager::CreateCallback callback) { |
314 ProfileManager::CreateCallback callback) { | |
315 const base::FilePath& path = ProfileManager::GetGuestProfilePath(); | 301 const base::FilePath& path = ProfileManager::GetGuestProfilePath(); |
316 ProfileMetrics::LogProfileSwitch(ProfileMetrics::SWITCH_PROFILE_GUEST, | 302 ProfileMetrics::LogProfileSwitch(ProfileMetrics::SWITCH_PROFILE_GUEST, |
317 g_browser_process->profile_manager(), | 303 g_browser_process->profile_manager(), |
318 path); | 304 path); |
319 g_browser_process->profile_manager()->CreateProfileAsync( | 305 g_browser_process->profile_manager()->CreateProfileAsync( |
320 path, | 306 path, base::Bind(&OpenBrowserWindowForProfile, callback, false, false), |
321 base::Bind(&OpenBrowserWindowForProfile, | 307 base::string16(), std::string(), std::string()); |
322 callback, | |
323 false, | |
324 false, | |
325 desktop_type), | |
326 base::string16(), | |
327 std::string(), | |
328 std::string()); | |
329 } | 308 } |
330 #endif | 309 #endif |
331 | 310 |
332 bool HasProfileSwitchTargets(Profile* profile) { | 311 bool HasProfileSwitchTargets(Profile* profile) { |
333 size_t min_profiles = profile->IsGuestSession() ? 1 : 2; | 312 size_t min_profiles = profile->IsGuestSession() ? 1 : 2; |
334 size_t number_of_profiles = | 313 size_t number_of_profiles = |
335 g_browser_process->profile_manager()->GetNumberOfProfiles(); | 314 g_browser_process->profile_manager()->GetNumberOfProfiles(); |
336 return number_of_profiles >= min_profiles; | 315 return number_of_profiles >= min_profiles; |
337 } | 316 } |
338 | 317 |
339 void CreateAndSwitchToNewProfile(chrome::HostDesktopType desktop_type, | 318 void CreateAndSwitchToNewProfile(ProfileManager::CreateCallback callback, |
340 ProfileManager::CreateCallback callback, | |
341 ProfileMetrics::ProfileAdd metric) { | 319 ProfileMetrics::ProfileAdd metric) { |
342 ProfileInfoCache& cache = | 320 ProfileInfoCache& cache = |
343 g_browser_process->profile_manager()->GetProfileInfoCache(); | 321 g_browser_process->profile_manager()->GetProfileInfoCache(); |
344 | 322 |
345 int placeholder_avatar_index = profiles::GetPlaceholderAvatarIndex(); | 323 int placeholder_avatar_index = profiles::GetPlaceholderAvatarIndex(); |
346 ProfileManager::CreateMultiProfileAsync( | 324 ProfileManager::CreateMultiProfileAsync( |
347 cache.ChooseNameForNewProfile(placeholder_avatar_index), | 325 cache.ChooseNameForNewProfile(placeholder_avatar_index), |
348 profiles::GetDefaultAvatarIconUrl(placeholder_avatar_index), | 326 profiles::GetDefaultAvatarIconUrl(placeholder_avatar_index), |
349 base::Bind(&OpenBrowserWindowForProfile, | 327 base::Bind(&OpenBrowserWindowForProfile, callback, true, true), |
350 callback, | |
351 true, | |
352 true, | |
353 desktop_type), | |
354 std::string()); | 328 std::string()); |
355 ProfileMetrics::LogProfileAddNewUser(metric); | 329 ProfileMetrics::LogProfileAddNewUser(metric); |
356 } | 330 } |
357 | 331 |
358 void GuestBrowserCloseSuccess(const base::FilePath& profile_path) { | 332 void GuestBrowserCloseSuccess(const base::FilePath& profile_path) { |
359 UserManager::Show(base::FilePath(), | 333 UserManager::Show(base::FilePath(), |
360 profiles::USER_MANAGER_NO_TUTORIAL, | 334 profiles::USER_MANAGER_NO_TUTORIAL, |
361 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | 335 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); |
362 } | 336 } |
363 | 337 |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 PrefService* local_state = g_browser_process->local_state(); | 533 PrefService* local_state = g_browser_process->local_state(); |
560 const bool dismissed = local_state->GetBoolean( | 534 const bool dismissed = local_state->GetBoolean( |
561 prefs::kProfileAvatarRightClickTutorialDismissed); | 535 prefs::kProfileAvatarRightClickTutorialDismissed); |
562 | 536 |
563 // Don't show the tutorial if it's already been dismissed or if right-clicking | 537 // Don't show the tutorial if it's already been dismissed or if right-clicking |
564 // wouldn't show any targets. | 538 // wouldn't show any targets. |
565 return !dismissed && HasProfileSwitchTargets(profile); | 539 return !dismissed && HasProfileSwitchTargets(profile); |
566 } | 540 } |
567 | 541 |
568 } // namespace profiles | 542 } // namespace profiles |
OLD | NEW |