blob: 7b352d59acad31609907fe6ec77c3e08f78ffa8e [file] [log] [blame]
// 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 COMPONENTS_PREVIEWS_CORE_PREVIEWS_OPT_OUT_STORE_H_
#define COMPONENTS_PREVIEWS_CORE_PREVIEWS_OPT_OUT_STORE_H_
#include <stdint.h>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "base/callback.h"
#include "base/time/time.h"
#include "components/previews/core/previews_black_list_item.h"
#include "components/previews/core/previews_experiments.h"
namespace previews {
typedef std::unordered_map<std::string, std::unique_ptr<PreviewsBlackListItem>>
BlackListItemMap;
typedef base::Callback<void(std::unique_ptr<BlackListItemMap>,
std::unique_ptr<PreviewsBlackListItem>)>
LoadBlackListCallback;
// PreviewsOptOutStore keeps opt out information for the previews.
// Ability to create multiple instances of the store as well as behavior of
// asynchronous operations when the object is being destroyed, before such
// operation finishes will depend on implementation. It is possible to issue
// multiple asynchronous operations in parallel and maintain ordering.
class PreviewsOptOutStore {
public:
virtual ~PreviewsOptOutStore() {}
// Adds a new navigation to the store. |opt_out| is whether the user opted out
// of the preview.
virtual void AddPreviewNavigation(bool opt_out,
const std::string& host_name,
PreviewsType type,
base::Time now) = 0;
// Asynchronously loads a map of host names to PreviewsBlackListItem for that
// host from the store. And runs |callback| once loading is finished.
virtual void LoadBlackList(LoadBlackListCallback callback) = 0;
// Deletes all history in the store between |begin_time| and |end_time|.
virtual void ClearBlackList(base::Time begin_time, base::Time end_time) = 0;
};
} // namespace previews
#endif // COMPONENTS_PREVIEWS_CORE_PREVIEWS_OPT_OUT_STORE_H_