| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/early_prefs/early_prefs_export_service_factory.h" |
| |
| #include "ash/constants/ash_features.h" |
| #include "base/check_is_test.h" |
| #include "base/feature_list.h" |
| #include "base/path_service.h" |
| #include "chrome/browser/ash/profiles/profile_helper.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/common/chrome_paths.h" |
| #include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" |
| #include "chromeos/ash/components/osauth/impl/login_screen_auth_policy_connector.h" |
| #include "chromeos/ash/components/osauth/public/auth_parts.h" |
| #include "components/keyed_service/content/browser_context_dependency_manager.h" |
| #include "components/keyed_service/core/keyed_service.h" |
| #include "components/user_manager/user_manager.h" |
| #include "content/public/browser/browser_context.h" |
| |
| namespace ash { |
| |
| // static |
| EarlyPrefsExportServiceFactory* EarlyPrefsExportServiceFactory::GetInstance() { |
| return base::Singleton<EarlyPrefsExportServiceFactory>::get(); |
| } |
| |
| EarlyPrefsExportServiceFactory::EarlyPrefsExportServiceFactory() |
| : BrowserContextKeyedServiceFactory( |
| "EarlyPrefsExportService", |
| BrowserContextDependencyManager::GetInstance()) {} |
| |
| EarlyPrefsExportServiceFactory::~EarlyPrefsExportServiceFactory() = default; |
| |
| std::unique_ptr<KeyedService> |
| EarlyPrefsExportServiceFactory::BuildServiceInstanceForBrowserContext( |
| content::BrowserContext* context) const { |
| auto* profile = Profile::FromBrowserContext(context); |
| |
| PrefService* user_prefs = profile->GetPrefs(); |
| auto* primary_user = user_manager::UserManager::Get()->GetPrimaryUser(); |
| CHECK(primary_user); |
| base::FilePath early_prefs_dir; |
| bool success = base::PathService::Get(chrome::DIR_CHROMEOS_HOMEDIR_MOUNT, |
| &early_prefs_dir); |
| CHECK(success); |
| early_prefs_dir = early_prefs_dir.Append(primary_user->username_hash()); |
| |
| std::unique_ptr<KeyedService> service = |
| std::make_unique<EarlyPrefsExportService>(early_prefs_dir, user_prefs); |
| return service; |
| } |
| |
| content::BrowserContext* EarlyPrefsExportServiceFactory::GetBrowserContextToUse( |
| content::BrowserContext* context) const { |
| if (!base::FeatureList::IsEnabled(features::kEnableEarlyPrefs)) { |
| return nullptr; |
| } |
| |
| if (!context || context->IsOffTheRecord()) { |
| return nullptr; |
| } |
| |
| auto* profile = Profile::FromBrowserContext(context); |
| if (profile->AsTestingProfile() || profile->IsGuestSession() || |
| !ProfileHelper::IsUserProfile(profile)) { |
| return nullptr; |
| } |
| |
| return context; |
| } |
| |
| bool EarlyPrefsExportServiceFactory::ServiceIsCreatedWithBrowserContext() |
| const { |
| return true; |
| } |
| |
| } // namespace ash |