chromium/ios/chrome/browser/browsing_data/model/browsing_data_counter_wrapper.h

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_BROWSER_BROWSING_DATA_MODEL_BROWSING_DATA_COUNTER_WRAPPER_H_
#define IOS_CHROME_BROWSER_BROWSING_DATA_MODEL_BROWSING_DATA_COUNTER_WRAPPER_H_

#import <memory>
#import <string_view>

#import "base/functional/callback_forward.h"
#import "components/browsing_data/core/counters/browsing_data_counter.h"
#import "ios/chrome/browser/shared/model/profile/profile_ios_forward.h"

class PrefService;

// Wrapper around a browsing data volume counter that bridges the update counter
// UI callback to the UI.
class BrowsingDataCounterWrapper {
 public:
  using UpdateUICallback = base::RepeatingCallback<void(
      const browsing_data::BrowsingDataCounter::Result&)>;

  // This method returns the counter corresponding to the data type specified by
  // `pref_name` or null if there is no such counter.
  static std::unique_ptr<BrowsingDataCounterWrapper> CreateCounterWrapper(
      std::string_view pref_name,
      ChromeBrowserState* browser_state,
      PrefService* pref_service,
      UpdateUICallback update_ui_callback);

  BrowsingDataCounterWrapper(const BrowsingDataCounterWrapper&) = delete;
  BrowsingDataCounterWrapper& operator=(const BrowsingDataCounterWrapper&) =
      delete;

  ~BrowsingDataCounterWrapper();

  void RestartCounter();

 private:
  BrowsingDataCounterWrapper(
      std::unique_ptr<browsing_data::BrowsingDataCounter> counter,
      PrefService* pref_service,
      UpdateUICallback update_ui_callback);

  // Method to be passed as callback to the counter. This will be invoked when
  // the result is ready.
  void UpdateWithResult(
      std::unique_ptr<browsing_data::BrowsingDataCounter::Result> result);

  // The counter for which the interaction is managed by this wrapper.
  std::unique_ptr<browsing_data::BrowsingDataCounter> counter_;

  // Callback that updates the UI once the counter result is ready. This is
  // invoked by UpdateWithResult.
  UpdateUICallback update_ui_callback_;
};

#endif  // IOS_CHROME_BROWSER_BROWSING_DATA_MODEL_BROWSING_DATA_COUNTER_WRAPPER_H_