| // 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/digital_credentials/digital_credentials_keyed_service.h" |
| |
| #include "base/feature_list.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 "components/keyed_service/content/browser_context_dependency_manager.h" |
| #include "components/optimization_guide/core/optimization_guide_features.h" |
| #include "components/optimization_guide/proto/hints.pb.h" |
| #include "url/gurl.h" |
| |
| namespace digital_credentials { |
| |
| namespace { |
| BASE_FEATURE(kEnableDigitalCredentialsCreationWithBrowserContext, |
| base::FEATURE_ENABLED_BY_DEFAULT); |
| } // namespace |
| |
| DigitalCredentialsKeyedService::DigitalCredentialsKeyedService( |
| OptimizationGuideKeyedService& optimization_guide_service) |
| : optimization_guide_service_(optimization_guide_service) { |
| optimization_guide_service_->RegisterOptimizationTypes( |
| {optimization_guide::proto::OptimizationType:: |
| DIGITAL_CREDENTIALS_LOW_FRICTION}); |
| } |
| |
| DigitalCredentialsKeyedService::~DigitalCredentialsKeyedService() = default; |
| |
| bool DigitalCredentialsKeyedService::IsLowFrictionUrl( |
| const GURL& to_check) const { |
| switch (optimization_guide_service_->CanApplyOptimization( |
| to_check, |
| optimization_guide::proto::OptimizationType:: |
| DIGITAL_CREDENTIALS_LOW_FRICTION, |
| nullptr)) { |
| case optimization_guide::OptimizationGuideDecision::kTrue: |
| return true; |
| case optimization_guide::OptimizationGuideDecision::kFalse: |
| return false; |
| case optimization_guide::OptimizationGuideDecision::kUnknown: |
| return false; |
| } |
| } |
| |
| // --- Factory --- |
| |
| DigitalCredentialsKeyedService* |
| DigitalCredentialsKeyedServiceFactory::GetForProfile(Profile* profile) { |
| return static_cast<DigitalCredentialsKeyedService*>( |
| GetInstance()->GetServiceForBrowserContext(profile, /*create=*/true)); |
| } |
| |
| DigitalCredentialsKeyedServiceFactory* |
| DigitalCredentialsKeyedServiceFactory::GetInstance() { |
| static base::NoDestructor<DigitalCredentialsKeyedServiceFactory> instance; |
| return instance.get(); |
| } |
| |
| DigitalCredentialsKeyedServiceFactory::DigitalCredentialsKeyedServiceFactory() |
| : ProfileKeyedServiceFactory( |
| "DigitalCredentialsKeyedService", |
| ProfileSelections::Builder() |
| .WithRegular(ProfileSelection::kOwnInstance) |
| .Build()) { |
| DependsOn(OptimizationGuideKeyedServiceFactory::GetInstance()); |
| } |
| |
| DigitalCredentialsKeyedServiceFactory:: |
| ~DigitalCredentialsKeyedServiceFactory() = default; |
| |
| std::unique_ptr<KeyedService> |
| DigitalCredentialsKeyedServiceFactory::BuildServiceInstanceForBrowserContext( |
| content::BrowserContext* context) const { |
| OptimizationGuideKeyedService* optimization_guide_service = |
| OptimizationGuideKeyedServiceFactory::GetForProfile( |
| Profile::FromBrowserContext(context)); |
| if (!optimization_guide_service) { |
| return nullptr; |
| } |
| return std::make_unique<DigitalCredentialsKeyedService>( |
| *optimization_guide_service); |
| } |
| |
| bool DigitalCredentialsKeyedServiceFactory::ServiceIsCreatedWithBrowserContext() |
| const { |
| return base::FeatureList::IsEnabled( |
| kEnableDigitalCredentialsCreationWithBrowserContext); |
| } |
| |
| } // namespace digital_credentials |