blob: 62bd2563ec9e48b346d318afd584e6d68c61ab51 [file]
// Copyright 2026 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/accessibility_annotator/accessibility_query_service_factory.h"
#include <memory>
#include <vector>
#include "base/no_destructor.h"
#include "chrome/browser/accessibility_annotator/accessibility_annotator_backend_factory.h"
#include "chrome/browser/accessibility_annotator/accessibility_query_service_delegate_impl.h"
#include "chrome/browser/autofill/autofill_entity_data_manager_factory.h"
#include "chrome/browser/autofill/personal_data_manager_factory.h"
#include "chrome/browser/optimization_guide/optimization_guide_keyed_service.h"
#include "chrome/browser/optimization_guide/optimization_guide_keyed_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/signin/identity_manager_factory.h"
#include "components/accessibility_annotator/core/accessibility_annotator_features.h"
#include "components/accessibility_annotator/core/accessibility_query_service.h"
#include "components/accessibility_annotator/core/annotation_reducer/one_p_resolver_impl.h"
#include "components/accessibility_annotator/core/annotation_reducer/sync_bridge_data_provider.h"
#include "components/autofill/core/browser/at_memory/autofill_data_provider_impl.h"
#include "components/autofill/core/common/autofill_features.h"
#include "content/public/browser/storage_partition.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
// static
AccessibilityQueryServiceFactory*
AccessibilityQueryServiceFactory::GetInstance() {
static base::NoDestructor<AccessibilityQueryServiceFactory> instance;
return instance.get();
}
// static
accessibility_annotator::AccessibilityQueryService*
AccessibilityQueryServiceFactory::GetForProfile(Profile* profile) {
return static_cast<accessibility_annotator::AccessibilityQueryService*>(
GetInstance()->GetServiceForBrowserContext(profile, /*create=*/true));
}
AccessibilityQueryServiceFactory::AccessibilityQueryServiceFactory()
: ProfileKeyedServiceFactory("AccessibilityQueryService",
ProfileSelections::BuildForRegularProfile()) {
DependsOn(autofill::PersonalDataManagerFactory::GetInstance());
DependsOn(autofill::AutofillEntityDataManagerFactory::GetInstance());
DependsOn(AccessibilityAnnotatorBackendFactory::GetInstance());
DependsOn(OptimizationGuideKeyedServiceFactory::GetInstance());
DependsOn(IdentityManagerFactory::GetInstance());
}
AccessibilityQueryServiceFactory::~AccessibilityQueryServiceFactory() = default;
std::unique_ptr<KeyedService>
AccessibilityQueryServiceFactory::BuildServiceInstanceForBrowserContext(
content::BrowserContext* context) const {
if (!base::FeatureList::IsEnabled(autofill::features::kAutofillAtMemory)) {
return nullptr;
}
Profile* profile = Profile::FromBrowserContext(context);
std::vector<std::unique_ptr<accessibility_annotator::MemoryDataProvider>>
data_providers;
data_providers.push_back(std::make_unique<autofill::AutofillDataProviderImpl>(
autofill::PersonalDataManagerFactory::GetForBrowserContext(context),
autofill::AutofillEntityDataManagerFactory::GetForProfile(profile)));
if (auto* backend =
AccessibilityAnnotatorBackendFactory::GetForProfile(profile)) {
data_providers.push_back(
std::make_unique<accessibility_annotator::SyncBridgeDataProvider>(
*backend));
}
auto* optimization_guide_service =
OptimizationGuideKeyedServiceFactory::GetForProfile(profile);
std::unique_ptr<accessibility_annotator::OnePResolver> one_p_resolver;
if (base::FeatureList::IsEnabled(
accessibility_annotator::features::
kAccessibilityAnnotationReducerOnePResolver)) {
one_p_resolver =
std::make_unique<accessibility_annotator::OnePResolverImpl>(
profile->GetDefaultStoragePartition()
->GetURLLoaderFactoryForBrowserProcess(),
IdentityManagerFactory::GetForProfile(profile),
optimization_guide_service);
}
return std::make_unique<accessibility_annotator::AccessibilityQueryService>(
std::make_unique<
accessibility_annotator::AccessibilityQueryServiceDelegateImpl>(
profile),
std::move(data_providers), std::move(one_p_resolver),
optimization_guide_service);
}
bool AccessibilityQueryServiceFactory::ServiceIsCreatedWithBrowserContext()
const {
return false;
}