| # Copyright 2014 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/buildflag_header.gni") |
| import("//build/config/features.gni") |
| |
| component("core") { |
| output_name = "keyed_service_core" |
| sources = [ |
| "dependency_graph.cc", |
| "dependency_graph.h", |
| "dependency_manager.cc", |
| "dependency_manager.h", |
| "dependency_node.h", |
| "keyed_service.h", |
| "keyed_service_base_factory.cc", |
| "keyed_service_base_factory.h", |
| "keyed_service_export.h", |
| "keyed_service_factory.h", |
| "keyed_service_shutdown_notifier.cc", |
| "keyed_service_shutdown_notifier.h", |
| "keyed_service_templated_factory.cc", |
| "keyed_service_templated_factory.h", |
| "refcounted_keyed_service.cc", |
| "refcounted_keyed_service.h", |
| "refcounted_keyed_service_factory.h", |
| "service_access_type.h", |
| "simple_dependency_manager.cc", |
| "simple_dependency_manager.h", |
| "simple_factory_key.cc", |
| "simple_factory_key.h", |
| "simple_key_map.cc", |
| "simple_key_map.h", |
| "simple_keyed_service_factory.cc", |
| "simple_keyed_service_factory.h", |
| ] |
| |
| defines = [ "KEYED_SERVICE_IMPLEMENTATION" ] |
| |
| public_deps = [ |
| ":features", |
| "//base", |
| ] |
| |
| deps = [ |
| "//components/pref_registry", |
| "//components/prefs", |
| "//services/tracing/public/cpp", |
| ] |
| } |
| |
| buildflag_header("features") { |
| # If this flag is set to `true`, then the `DependencyManager` will assert |
| # that no factories are registered after the creation of the first context |
| # object and the `KeyedServiceTemplatedFactory` will be allowed to depend |
| # on that assumption. |
| # |
| # TODO(crbug.com/40158018): remove this flag when set to `true` for all |
| # embedders. This will requires fixing the registration of all factories |
| # to happen before the creation of the first context (i.e. by listing all |
| # factories in the `Ensure.*KeyedServiceFactoriesBuilt` free functions). |
| has_tight_factory_registration = !use_blink |
| |
| # If this flag is set to `true`, then `KeyedServiceTemplatedFactory` will |
| # be allowed to rely on the fact that the lifetime of the context and the |
| # service will follow the order described by `MappingStage`. In addition, |
| # it will enforce that no instance of a service is created before the call |
| # to `CreateContextServices` (i.e. when the context is marked as fully |
| # initialized). |
| # |
| # TODO(crbug.com/342112724): remove this flag when set to `true` for all |
| # embedders. This will requires correctly calling the method `MarkContextLive`, |
| # `CreateContextServices`, but also `ContextShutdown` and `ContextDestroyed` |
| # in the correct order. Additionally, this requires changing the factories of |
| # services created before CreateContextServices to override the method |
| # `ServiceIsRequiredForContextInitializatio`n to return true. |
| has_tight_context_initialization = !use_blink |
| |
| # If this flag is set to `true`, then `KeyedServiceTemplatedFactory` will |
| # expose the deprecated `Associate`/`Disassociate`API. Those API can break |
| # the invariants of `KeyedServiceTemplatedFactory` as they allow to ignore |
| # the lifetime cycle, also allow to destroy a service instance without going |
| # through the two phase shutdown and allow to destroy a service that is still |
| # in use. |
| # |
| # TODO(crbug.com/351120207): remove this flag when set to `false` for all |
| # embedders. This will requires remove all explicit calls to `Associate` |
| # and `Disassociate` methods. |
| has_deprecated_associate_api = use_blink |
| |
| # has_tight_context_initialization requires has_tight_factory_registration |
| # to be true and has_deprecated_associate_api to be false. Assert this. |
| assert( |
| !has_tight_context_initialization || |
| (has_tight_factory_registration && !has_deprecated_associate_api), |
| "has_tight_context_initialization only supported if " + |
| "has_tight_factory_registration and not has_deprecated_associate_api") |
| |
| header = "features_buildflags.h" |
| flags = [ |
| "KEYED_SERVICE_HAS_TIGHT_REGISTRATION=$has_tight_factory_registration", |
| "KEYED_SERVICE_HAS_TIGHT_INITIALIZATION=$has_tight_context_initialization", |
| "KEYED_SERVICE_HAS_DEPRECATED_ASSOCIATE_API=$has_deprecated_associate_api", |
| ] |
| } |
| |
| source_set("unit_tests") { |
| testonly = true |
| sources = [ "dependency_graph_unittest.cc" ] |
| deps = [ |
| ":core", |
| "//base", |
| "//testing/gtest", |
| "//third_party/re2", |
| ] |
| } |