| // Copyright 2025 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/drive/drive_integration_service_factory.h" |
| |
| #include <memory> |
| #include <string> |
| #include <utility> |
| |
| #include "base/files/file_path.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/memory/singleton.h" |
| #include "chrome/browser/ash/drive/drive_integration_service.h" |
| #include "chrome/browser/ash/drive/drive_integration_service_factory.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/download/download_core_service_factory.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/profiles/profile_selections.h" |
| #include "chrome/browser/signin/identity_manager_factory.h" |
| |
| namespace drive { |
| |
| DriveIntegrationServiceFactory::FactoryCallback* |
| DriveIntegrationServiceFactory::factory_for_test_ = nullptr; |
| |
| DriveIntegrationServiceFactory::ScopedFactoryForTest::ScopedFactoryForTest( |
| FactoryCallback* factory_for_test) { |
| factory_for_test_ = factory_for_test; |
| } |
| |
| DriveIntegrationServiceFactory::ScopedFactoryForTest::~ScopedFactoryForTest() { |
| factory_for_test_ = nullptr; |
| } |
| |
| // static |
| DriveIntegrationService* DriveIntegrationServiceFactory::GetForProfile( |
| Profile* profile) { |
| return static_cast<DriveIntegrationService*>( |
| GetInstance()->GetServiceForBrowserContext(profile, true)); |
| } |
| |
| // static |
| DriveIntegrationService* DriveIntegrationServiceFactory::FindForProfile( |
| Profile* profile) { |
| if (!profile) { // crbug.com/1254581 |
| return nullptr; |
| } |
| return static_cast<DriveIntegrationService*>( |
| GetInstance()->GetServiceForBrowserContext(profile, false)); |
| } |
| |
| // static |
| DriveIntegrationServiceFactory* DriveIntegrationServiceFactory::GetInstance() { |
| return base::Singleton<DriveIntegrationServiceFactory>::get(); |
| } |
| |
| DriveIntegrationServiceFactory::DriveIntegrationServiceFactory() |
| : ProfileKeyedServiceFactory( |
| "DriveIntegrationService", |
| ProfileSelections::Builder() |
| .WithRegular(ProfileSelection::kRedirectedToOriginal) |
| // TODO(crbug.com/40257657): Check if this service is needed in |
| // Guest mode. |
| .WithGuest(ProfileSelection::kRedirectedToOriginal) |
| // TODO(crbug.com/41488885): Check if this service is needed for |
| // Ash Internals. |
| .WithAshInternals(ProfileSelection::kRedirectedToOriginal) |
| .Build()) { |
| DependsOn(IdentityManagerFactory::GetInstance()); |
| DependsOn(DownloadCoreServiceFactory::GetInstance()); |
| } |
| |
| DriveIntegrationServiceFactory::~DriveIntegrationServiceFactory() = default; |
| |
| std::unique_ptr<KeyedService> |
| DriveIntegrationServiceFactory::BuildServiceInstanceForBrowserContext( |
| content::BrowserContext* context) const { |
| Profile* profile = Profile::FromBrowserContext(context); |
| |
| if (!factory_for_test_) { |
| return std::make_unique<DriveIntegrationService>( |
| g_browser_process->local_state(), profile, std::string(), |
| base::FilePath()); |
| } else { |
| return base::WrapUnique(factory_for_test_->Run(profile)); |
| } |
| } |
| |
| } // namespace drive |