1 // Copyright 2017 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/test_support/scoped_mock_offline_content_provider.h"
6 
7 #include "components/offline_items_collection/core/offline_content_aggregator.h"
8 #include "components/offline_items_collection/core/offline_content_provider.h"
9 
10 namespace offline_items_collection {
11 
ScopedMockObserver(OfflineContentProvider * provider)12 ScopedMockOfflineContentProvider::ScopedMockObserver::ScopedMockObserver(
13     OfflineContentProvider* provider)
14     : provider_(provider) {
15   provider_->AddObserver(this);
16 }
17 
ScopedMockObserver()18 ScopedMockOfflineContentProvider::ScopedMockObserver::ScopedMockObserver()
19     : provider_(nullptr) {}
20 
~ScopedMockObserver()21 ScopedMockOfflineContentProvider::ScopedMockObserver::~ScopedMockObserver() {
22   if (provider_)
23     provider_->RemoveObserver(this);
24 }
25 
AddProvider(OfflineContentProvider * provider)26 void ScopedMockOfflineContentProvider::ScopedMockObserver::AddProvider(
27     OfflineContentProvider* provider) {
28   DCHECK(!provider_) << "Already has a provider.";
29   provider_ = provider;
30   provider_->AddObserver(this);
31 }
32 
ScopedMockOfflineContentProvider(const std::string & name_space,OfflineContentAggregator * aggregator)33 ScopedMockOfflineContentProvider::ScopedMockOfflineContentProvider(
34     const std::string& name_space,
35     OfflineContentAggregator* aggregator)
36     : name_space_(name_space), aggregator_(aggregator) {
37   aggregator_->RegisterProvider(name_space_, this);
38 }
39 
~ScopedMockOfflineContentProvider()40 ScopedMockOfflineContentProvider::~ScopedMockOfflineContentProvider() {
41   Unregister();
42 }
43 
Unregister()44 void ScopedMockOfflineContentProvider::Unregister() {
45   if (!aggregator_)
46     return;
47 
48   aggregator_->UnregisterProvider(name_space_);
49   aggregator_ = nullptr;
50 }
51 
52 }  // namespace offline_items_collection
53