Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Side by Side Diff: chrome/browser/chromeos/profiles/profile_helper.cc

Issue 2918203002: cros: Fix loading user profile w/o UserSessionManager (Closed)
Patch Set: rebase Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/chromeos/profiles/profile_helper.h" 5 #include "chrome/browser/chromeos/profiles/profile_helper.h"
6 6
7 #include "base/barrier_closure.h" 7 #include "base/barrier_closure.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 public: 57 public:
58 explicit UsernameHashMatcher(const std::string& h) : username_hash(h) {} 58 explicit UsernameHashMatcher(const std::string& h) : username_hash(h) {}
59 bool operator()(const user_manager::User* user) const { 59 bool operator()(const user_manager::User* user) const {
60 return user->username_hash() == username_hash; 60 return user->username_hash() == username_hash;
61 } 61 }
62 62
63 private: 63 private:
64 const std::string& username_hash; 64 const std::string& username_hash;
65 }; 65 };
66 66
67 // Internal helper to get an already-loaded user profile by user id hash. Return
68 // nullptr if the user profile is not yet loaded.
69 Profile* GetProfileByUserIdHash(const std::string& user_id_hash) {
70 return g_browser_process->profile_manager()->GetProfileByPath(
71 ProfileHelper::GetProfilePathByUserIdHash(user_id_hash));
72 }
73
67 } // anonymous namespace 74 } // anonymous namespace
68 75
69 // static 76 // static
70 bool ProfileHelper::enable_profile_to_user_testing = false; 77 bool ProfileHelper::enable_profile_to_user_testing = false;
71 bool ProfileHelper::always_return_primary_user_for_testing = false; 78 bool ProfileHelper::always_return_primary_user_for_testing = false;
72 79
73 //////////////////////////////////////////////////////////////////////////////// 80 ////////////////////////////////////////////////////////////////////////////////
74 // ProfileHelper, public 81 // ProfileHelper, public
75 82
76 ProfileHelper::ProfileHelper() 83 ProfileHelper::ProfileHelper()
77 : browsing_data_remover_(nullptr), weak_factory_(this) { 84 : browsing_data_remover_(nullptr), weak_factory_(this) {
78 } 85 }
79 86
80 ProfileHelper::~ProfileHelper() { 87 ProfileHelper::~ProfileHelper() {
81 // Checking whether UserManager is initialized covers case 88 // Checking whether UserManager is initialized covers case
82 // when ScopedTestUserManager is used. 89 // when ScopedTestUserManager is used.
83 if (user_manager::UserManager::IsInitialized()) 90 if (user_manager::UserManager::IsInitialized())
84 user_manager::UserManager::Get()->RemoveSessionStateObserver(this); 91 user_manager::UserManager::Get()->RemoveSessionStateObserver(this);
85 92
86 if (browsing_data_remover_) 93 if (browsing_data_remover_)
87 browsing_data_remover_->RemoveObserver(this); 94 browsing_data_remover_->RemoveObserver(this);
88 } 95 }
89 96
90 // static 97 // static
91 ProfileHelper* ProfileHelper::Get() { 98 ProfileHelper* ProfileHelper::Get() {
92 return g_browser_process->platform_part()->profile_helper(); 99 return g_browser_process->platform_part()->profile_helper();
93 } 100 }
94 101
95 // static 102 // static
96 Profile* ProfileHelper::GetProfileByUserIdHash( 103 Profile* ProfileHelper::GetProfileByUserIdHashForTest(
97 const std::string& user_id_hash) { 104 const std::string& user_id_hash) {
98 ProfileManager* profile_manager = g_browser_process->profile_manager(); 105 return g_browser_process->profile_manager()->GetProfile(
99 return profile_manager->GetProfile(GetProfilePathByUserIdHash(user_id_hash)); 106 ProfileHelper::GetProfilePathByUserIdHash(user_id_hash));
100 } 107 }
101 108
102 // static 109 // static
103 base::FilePath ProfileHelper::GetProfilePathByUserIdHash( 110 base::FilePath ProfileHelper::GetProfilePathByUserIdHash(
104 const std::string& user_id_hash) { 111 const std::string& user_id_hash) {
105 // Fails for KioskTest.InstallAndLaunchApp test - crbug.com/238985 112 // Fails for KioskTest.InstallAndLaunchApp test - crbug.com/238985
106 // Will probably fail for Guest session / restart after a crash - 113 // Will probably fail for Guest session / restart after a crash -
107 // crbug.com/238998 114 // crbug.com/238998
108 // TODO(nkostylev): Remove this check once these bugs are fixed. 115 // TODO(nkostylev): Remove this check once these bugs are fixed.
109 DCHECK(!user_id_hash.empty()); 116 DCHECK(!user_id_hash.empty());
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 Profile* ProfileHelper::GetProfileByUser(const user_manager::User* user) { 292 Profile* ProfileHelper::GetProfileByUser(const user_manager::User* user) {
286 // This map is non-empty only in tests. 293 // This map is non-empty only in tests.
287 if (!user_to_profile_for_testing_.empty()) { 294 if (!user_to_profile_for_testing_.empty()) {
288 std::map<const user_manager::User*, Profile*>::const_iterator it = 295 std::map<const user_manager::User*, Profile*>::const_iterator it =
289 user_to_profile_for_testing_.find(user); 296 user_to_profile_for_testing_.find(user);
290 return it == user_to_profile_for_testing_.end() ? NULL : it->second; 297 return it == user_to_profile_for_testing_.end() ? NULL : it->second;
291 } 298 }
292 299
293 if (!user->is_profile_created()) 300 if (!user->is_profile_created())
294 return NULL; 301 return NULL;
295 Profile* profile = 302 Profile* profile = GetProfileByUserIdHash(user->username_hash());
296 ProfileHelper::GetProfileByUserIdHash(user->username_hash());
297 303
298 // GetActiveUserProfile() or GetProfileByUserIdHash() returns a new instance 304 // GetActiveUserProfile() or GetProfileByUserIdHash() returns a new instance
299 // of ProfileImpl(), but actually its OffTheRecordProfile() should be used. 305 // of ProfileImpl(), but actually its OffTheRecordProfile() should be used.
300 if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) 306 if (user_manager::UserManager::Get()->IsLoggedInAsGuest())
301 profile = profile->GetOffTheRecordProfile(); 307 profile = profile->GetOffTheRecordProfile();
302 308
303 return profile; 309 return profile;
304 } 310 }
305 311
306 Profile* ProfileHelper::GetProfileByUserUnsafe(const user_manager::User* user) { 312 Profile* ProfileHelper::GetProfileByUserUnsafe(const user_manager::User* user) {
307 // This map is non-empty only in tests. 313 // This map is non-empty only in tests.
308 if (!user_to_profile_for_testing_.empty()) { 314 if (!user_to_profile_for_testing_.empty()) {
309 std::map<const user_manager::User*, Profile*>::const_iterator it = 315 std::map<const user_manager::User*, Profile*>::const_iterator it =
310 user_to_profile_for_testing_.find(user); 316 user_to_profile_for_testing_.find(user);
311 return it == user_to_profile_for_testing_.end() ? NULL : it->second; 317 return it == user_to_profile_for_testing_.end() ? NULL : it->second;
312 } 318 }
313 319
314 Profile* profile = NULL; 320 Profile* profile = NULL;
315 if (user->is_profile_created()) { 321 if (user->is_profile_created()) {
316 profile = ProfileHelper::GetProfileByUserIdHash(user->username_hash()); 322 profile = GetProfileByUserIdHash(user->username_hash());
317 } else { 323 } else {
318 LOG(ERROR) << "ProfileHelper::GetProfileByUserUnsafe is called when " 324 LOG(ERROR) << "ProfileHelper::GetProfileByUserUnsafe is called when "
319 "|user|'s profile is not created. It probably means that " 325 "|user|'s profile is not created. It probably means that "
320 "something is wrong with a calling code. Please report in " 326 "something is wrong with a calling code. Please report in "
321 "http://crbug.com/361528 if you see this message."; 327 "http://crbug.com/361528 if you see this message.";
322 profile = ProfileManager::GetActiveUserProfile(); 328 profile = ProfileManager::GetActiveUserProfile();
323 } 329 }
324 330
325 // GetActiveUserProfile() or GetProfileByUserIdHash() returns a new instance 331 // GetActiveUserProfile() or GetProfileByUserIdHash() returns a new instance
326 // of ProfileImpl(), but actually its OffTheRecordProfile() should be used. 332 // of ProfileImpl(), but actually its OffTheRecordProfile() should be used.
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 DownloadPrefs::FromBrowserContext(profile)->DownloadPath()); 503 DownloadPrefs::FromBrowserContext(profile)->DownloadPath());
498 // Let extension system handle extension files. 504 // Let extension system handle extension files.
499 excludes.push_back(base::FilePath(extensions::kInstallDirectoryName)); 505 excludes.push_back(base::FilePath(extensions::kInstallDirectoryName));
500 // Do not flush Drive cache. 506 // Do not flush Drive cache.
501 excludes.push_back(base::FilePath(chromeos::kDriveCacheDirname)); 507 excludes.push_back(base::FilePath(chromeos::kDriveCacheDirname));
502 508
503 profile_flusher_->RequestFlush(profile->GetPath(), excludes, base::Closure()); 509 profile_flusher_->RequestFlush(profile->GetPath(), excludes, base::Closure());
504 } 510 }
505 511
506 } // namespace chromeos 512 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/profiles/profile_helper.h ('k') | chrome/browser/chromeos/status/data_promo_notification_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698