blob: bbb00fdb3c80eb01c7ffe9da5508272e7f5f373f [file] [log] [blame]
// Copyright 2018 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_OFFLINE_ITEMS_COLLECTION_CORE_FILTERED_OFFLINE_ITEM_OBSERVER_H_
#define COMPONENTS_OFFLINE_ITEMS_COLLECTION_CORE_FILTERED_OFFLINE_ITEM_OBSERVER_H_
#include <map>
#include <memory>
#include "base/macros.h"
#include "base/observer_list.h"
#include "components/offline_items_collection/core/offline_content_provider.h"
#include "components/offline_items_collection/core/offline_item.h"
namespace offline_items_collection {
// Provides clients the ability to register observers interested only in the
// updates for a single offline item.
class FilteredOfflineItemObserver : public OfflineContentProvider::Observer {
public:
// Observer for a single offline item.
class Observer {
public:
virtual void OnItemRemoved(const ContentId& id) = 0;
virtual void OnItemUpdated(const OfflineItem& item) = 0;
protected:
virtual ~Observer() = default;
};
FilteredOfflineItemObserver(OfflineContentProvider* provider);
~FilteredOfflineItemObserver() override;
void AddObserver(const ContentId& id, Observer* observer);
void RemoveObserver(const ContentId& id, Observer* observer);
private:
using ObserverValue = base::ObserverList<Observer>::Unchecked;
using ObserversMap = std::map<ContentId, std::unique_ptr<ObserverValue>>;
// OfflineContentProvider::Observer implementation.
void OnItemsAdded(
const OfflineContentProvider::OfflineItemList& items) override;
void OnItemRemoved(const ContentId& id) override;
void OnItemUpdated(const OfflineItem& item) override;
OfflineContentProvider* provider_;
ObserversMap observers_;
DISALLOW_COPY_AND_ASSIGN(FilteredOfflineItemObserver);
};
} // namespace offline_items_collection
#endif // COMPONENTS_OFFLINE_ITEMS_COLLECTION_CORE_FILTERED_OFFLINE_ITEM_OBSERVER_H_