blob: 1e2fb2665a557322355b698f206b6aa03ab16088 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_CROSAPI_CROSAPI_DEPENDENCY_REGISTRY_H_
#define CHROME_BROWSER_ASH_CROSAPI_CROSAPI_DEPENDENCY_REGISTRY_H_
#include <memory>
namespace metrics {
class MetricsService;
} // namespace metrics
namespace crosapi {
class MetricsReportingAsh;
// A registry which knows how to provide dependencies for crosapi. Because
// crosapi depends on many services, there may be instances where testing is
// difficult due to a lack of test doubles or implicit assumptions which do not
// hold true in test. This registry provides an indirection which allows users
// to swap out unfriendly dependencies.
class CrosapiDependencyRegistry {
public:
CrosapiDependencyRegistry() = default;
CrosapiDependencyRegistry(const CrosapiDependencyRegistry&) = delete;
CrosapiDependencyRegistry& operator=(const CrosapiDependencyRegistry&) =
delete;
virtual ~CrosapiDependencyRegistry() = default;
virtual std::unique_ptr<MetricsReportingAsh> CreateMetricsReportingAsh(
metrics::MetricsService* metrics_service);
};
} // namespace crosapi
#endif // CHROME_BROWSER_ASH_CROSAPI_CROSAPI_DEPENDENCY_REGISTRY_H_