blob: 593222bb12707dc6919bbb984ba887cc46c32e23 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATION_SERVICE_IMPL_H_
#define CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATION_SERVICE_IMPL_H_
#include <stdint.h>
#include <memory>
#include "base/containers/flat_map.h"
#include "base/threading/sequence_bound.h"
#include "content/browser/aggregation_service/aggregatable_report_assembler.h"
#include "content/browser/aggregation_service/aggregation_service.h"
#include "content/browser/aggregation_service/aggregation_service_key_storage.h"
#include "content/browser/aggregation_service/aggregation_service_storage_context.h"
#include "content/common/content_export.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
namespace base {
class Clock;
class FilePath;
} // namespace base
namespace content {
class AggregatableReport;
class StoragePartitionImpl;
// UI thread class that manages the lifetime of the underlying storage. Owned by
// the StoragePartitionImpl. Lifetime is bound to lifetime of the
// StoragePartitionImpl.
class CONTENT_EXPORT AggregationServiceImpl
: public AggregationService,
public AggregationServiceStorageContext {
public:
static std::unique_ptr<AggregationServiceImpl> CreateForTesting(
bool run_in_memory,
const base::FilePath& user_data_directory,
const base::Clock* clock,
std::unique_ptr<AggregatableReportAssembler> assembler);
AggregationServiceImpl(bool run_in_memory,
const base::FilePath& user_data_directory,
StoragePartitionImpl* storage_partition);
AggregationServiceImpl(const AggregationServiceImpl& other) = delete;
AggregationServiceImpl& operator=(const AggregationServiceImpl& other) =
delete;
AggregationServiceImpl(AggregationServiceImpl&& other) = delete;
AggregationServiceImpl& operator=(AggregationServiceImpl&& other) = delete;
~AggregationServiceImpl() override;
// AggregationService:
void AssembleReport(AggregatableReportRequest report_request,
AssemblyCallback callback) override;
// AggregationServiceStorageContext:
const base::SequenceBound<AggregationServiceKeyStorage>& GetKeyStorage()
override;
private:
AggregationServiceImpl(
bool run_in_memory,
const base::FilePath& user_data_directory,
const base::Clock* clock,
std::unique_ptr<AggregatableReportAssembler> assembler);
void OnAssembleReportComplete(
AssemblyCallback callback,
absl::optional<AggregatableReport> report,
AggregatableReportAssembler::AssemblyStatus status);
base::SequenceBound<AggregationServiceKeyStorage> key_storage_;
std::unique_ptr<AggregatableReportAssembler> assembler_;
};
} // namespace content
#endif // CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATION_SERVICE_IMPL_H_