|  | // 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 "chromeos/ash/components/scalable_iph/scalable_iph_factory.h" | 
|  |  | 
|  | #include "base/check_is_test.h" | 
|  | #include "base/logging.h" | 
|  | #include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" | 
|  | #include "components/keyed_service/content/browser_context_dependency_manager.h" | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | constexpr char kScalableIphServiceName[] = "ScalableIphKeyedService"; | 
|  |  | 
|  | ScalableIphFactory* g_scalable_iph_factory = nullptr; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | ScalableIphFactory::ScalableIphFactory() | 
|  | : BrowserContextKeyedServiceFactory( | 
|  | kScalableIphServiceName, | 
|  | BrowserContextDependencyManager::GetInstance()) { | 
|  | CHECK(!g_scalable_iph_factory); | 
|  | g_scalable_iph_factory = this; | 
|  | } | 
|  |  | 
|  | ScalableIphFactory::~ScalableIphFactory() { | 
|  | CHECK(g_scalable_iph_factory); | 
|  | g_scalable_iph_factory = nullptr; | 
|  | } | 
|  |  | 
|  | ScalableIphFactory* ScalableIphFactory::GetInstance() { | 
|  | CHECK(g_scalable_iph_factory) | 
|  | << "ScalableIphFactory instance must be instantiated by " | 
|  | "ScalableIphFactoryImpl::BuildInstance()"; | 
|  | return g_scalable_iph_factory; | 
|  | } | 
|  |  | 
|  | scalable_iph::ScalableIph* ScalableIphFactory::GetForBrowserContext( | 
|  | content::BrowserContext* browser_context) { | 
|  | return static_cast<scalable_iph::ScalableIph*>( | 
|  | // Service must be created via `InitializeServiceForBrowserContext`. | 
|  | GetInstance()->GetServiceForBrowserContext(browser_context, | 
|  | /*create=*/false)); | 
|  | } | 
|  |  | 
|  | void ScalableIphFactory::InitializeServiceForBrowserContext( | 
|  | content::BrowserContext* browser_context) { | 
|  | // TODO(b/286604737): Disables ScalableIph services if multi-user sign-in is | 
|  | // used. | 
|  |  | 
|  | if (!on_building_service_instance_for_testing_callback_.is_null()) { | 
|  | CHECK_IS_TEST(); | 
|  | on_building_service_instance_for_testing_callback_.Run(browser_context); | 
|  | } | 
|  |  | 
|  | InitializeServiceInternal(browser_context); | 
|  | } | 
|  |  | 
|  | void ScalableIphFactory::SetOnBuildingServiceInstanceForTestingCallback( | 
|  | OnBuildingServiceInstanceForTestingCallback callback) { | 
|  | CHECK_IS_TEST(); | 
|  | CHECK(on_building_service_instance_for_testing_callback_.is_null()); | 
|  | CHECK(!callback.is_null()); | 
|  | on_building_service_instance_for_testing_callback_ = std::move(callback); | 
|  | } |