1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/offline_items_collection/core/filtered_offline_item_observer.h" 6 #include <utility> 7 8 namespace offline_items_collection { 9 FilteredOfflineItemObserver(OfflineContentProvider * provider)10FilteredOfflineItemObserver::FilteredOfflineItemObserver( 11 OfflineContentProvider* provider) 12 : provider_(provider) { 13 provider_->AddObserver(this); 14 } 15 ~FilteredOfflineItemObserver()16FilteredOfflineItemObserver::~FilteredOfflineItemObserver() { 17 provider_->RemoveObserver(this); 18 } 19 AddObserver(const ContentId & id,Observer * observer)20void FilteredOfflineItemObserver::AddObserver(const ContentId& id, 21 Observer* observer) { 22 if (observers_.find(id) == observers_.end()) 23 observers_.insert(std::make_pair(id, std::make_unique<ObserverValue>())); 24 25 observers_[id]->AddObserver(observer); 26 } 27 RemoveObserver(const ContentId & id,Observer * observer)28void FilteredOfflineItemObserver::RemoveObserver(const ContentId& id, 29 Observer* observer) { 30 auto it = observers_.find(id); 31 if (it == observers_.end()) 32 return; 33 34 it->second->RemoveObserver(observer); 35 36 if (!it->second->might_have_observers()) 37 observers_.erase(it); 38 } 39 OnItemsAdded(const OfflineContentProvider::OfflineItemList & items)40void FilteredOfflineItemObserver::OnItemsAdded( 41 const OfflineContentProvider::OfflineItemList& items) {} 42 OnItemRemoved(const ContentId & id)43void FilteredOfflineItemObserver::OnItemRemoved(const ContentId& id) { 44 auto it = observers_.find(id); 45 if (it == observers_.end()) 46 return; 47 48 for (auto& observer : *(it->second)) 49 observer.OnItemRemoved(id); 50 } 51 OnItemUpdated(const OfflineItem & item,const base::Optional<UpdateDelta> & update_delta)52void FilteredOfflineItemObserver::OnItemUpdated( 53 const OfflineItem& item, 54 const base::Optional<UpdateDelta>& update_delta) { 55 auto it = observers_.find(item.id); 56 if (it == observers_.end()) 57 return; 58 59 for (auto& observer : *(it->second)) 60 observer.OnItemUpdated(item, update_delta); 61 } 62 63 } // namespace offline_items_collection 64