// Copyright 2016 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 CHROME_BROWSER_STORAGE_STORAGE_INFO_FETCHER_H_
#define CHROME_BROWSER_STORAGE_STORAGE_INFO_FETCHER_H_

#include "base/memory/ref_counted.h"
#include "storage/browser/quota/quota_callbacks.h"
#include "third_party/blink/public/mojom/quota/quota_types.mojom-forward.h"

namespace storage {
class QuotaManager;
}

class Profile;

// Asynchronously fetches the amount of storage used by websites.
class StorageInfoFetcher :
    public base::RefCountedThreadSafe<StorageInfoFetcher> {
 public:
  using FetchCallback =
      base::Callback<void(const storage::UsageInfoEntries&)>;
  using ClearCallback =
      base::Callback<void(blink::mojom::QuotaStatusCode code)>;

  explicit StorageInfoFetcher(Profile* profile);

  // Asynchronously fetches the StorageInfo.
  void FetchStorageInfo(const FetchCallback& fetch_callback);

  // Asynchronously clears storage for the given host.
  void ClearStorage(const std::string& host,
                    blink::mojom::StorageType type,
                    const ClearCallback& clear_callback);

 private:
  virtual ~StorageInfoFetcher();

  friend class base::RefCountedThreadSafe<StorageInfoFetcher>;

  // Fetches the usage information.
  void GetUsageInfo(storage::GetUsageInfoCallback callback);

  // Called when usage information is available.
  void OnGetUsageInfoInternal(storage::UsageInfoEntries entries);

  // Reports back to all observers that information is available.
  void OnFetchCompleted();

  // Called when usage has been cleared.
  void OnUsageClearedInternal(blink::mojom::QuotaStatusCode code);

  // Reports back to all observers that storage has been deleted.
  void OnClearCompleted(blink::mojom::QuotaStatusCode code);

  // The quota manager to use to calculate the storage usage.
  storage::QuotaManager* quota_manager_;

  // Hosts and their usage.
  storage::UsageInfoEntries entries_;

  // The storage type to delete.
  blink::mojom::StorageType type_to_delete_;

  // The callback to use when fetching is complete.
  FetchCallback fetch_callback_;

  // The callback to use when storage has been cleared.
  ClearCallback clear_callback_;

  DISALLOW_COPY_AND_ASSIGN(StorageInfoFetcher);
};

#endif  // CHROME_BROWSER_STORAGE_STORAGE_INFO_FETCHER_H_
