OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/domain_reliability/context_manager.h" | 5 #include "components/domain_reliability/context_manager.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 namespace domain_reliability { | 9 namespace domain_reliability { |
10 | 10 |
11 DomainReliabilityContextManager::DomainReliabilityContextManager( | 11 DomainReliabilityContextManager::DomainReliabilityContextManager( |
12 DomainReliabilityContext::Factory* context_factory) | 12 DomainReliabilityContext::Factory* context_factory) |
13 : context_factory_(context_factory) { | 13 : context_factory_(context_factory) { |
14 } | 14 } |
15 | 15 |
16 DomainReliabilityContextManager::~DomainReliabilityContextManager() { | 16 DomainReliabilityContextManager::~DomainReliabilityContextManager() { |
17 RemoveAllContexts(); | 17 RemoveContexts( |
| 18 base::Callback<bool(const GURL&)>() /* no filter - delete everything */); |
18 } | 19 } |
19 | 20 |
20 void DomainReliabilityContextManager::RouteBeacon( | 21 void DomainReliabilityContextManager::RouteBeacon( |
21 std::unique_ptr<DomainReliabilityBeacon> beacon) { | 22 std::unique_ptr<DomainReliabilityBeacon> beacon) { |
22 DomainReliabilityContext* context = GetContextForHost(beacon->url.host()); | 23 DomainReliabilityContext* context = GetContextForHost(beacon->url.host()); |
23 if (!context) | 24 if (!context) |
24 return; | 25 return; |
25 | 26 |
26 context->OnBeacon(std::move(beacon)); | 27 context->OnBeacon(std::move(beacon)); |
27 } | 28 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 void DomainReliabilityContextManager::ClearConfig(const GURL& origin) { | 63 void DomainReliabilityContextManager::ClearConfig(const GURL& origin) { |
63 std::string key = origin.host(); | 64 std::string key = origin.host(); |
64 | 65 |
65 if (contexts_.count(key)) { | 66 if (contexts_.count(key)) { |
66 DVLOG(1) << "Removing context for existing origin " << origin.spec() << "."; | 67 DVLOG(1) << "Removing context for existing origin " << origin.spec() << "."; |
67 contexts_.erase(key); | 68 contexts_.erase(key); |
68 removed_contexts_.insert(key); | 69 removed_contexts_.insert(key); |
69 } | 70 } |
70 } | 71 } |
71 | 72 |
72 void DomainReliabilityContextManager::ClearBeaconsInAllContexts() { | 73 void DomainReliabilityContextManager::ClearBeacons( |
73 for (auto& context_entry : contexts_) | 74 const base::Callback<bool(const GURL&)>& origin_filter) { |
74 context_entry.second->ClearBeacons(); | 75 for (auto& context_entry : contexts_) { |
| 76 if (origin_filter.is_null() || |
| 77 origin_filter.Run(context_entry.second->config().origin)) { |
| 78 context_entry.second->ClearBeacons(); |
| 79 } |
| 80 } |
75 } | 81 } |
76 | 82 |
77 DomainReliabilityContext* DomainReliabilityContextManager::AddContextForConfig( | 83 DomainReliabilityContext* DomainReliabilityContextManager::AddContextForConfig( |
78 std::unique_ptr<const DomainReliabilityConfig> config) { | 84 std::unique_ptr<const DomainReliabilityConfig> config) { |
79 std::string key = config->origin.host(); | 85 std::string key = config->origin.host(); |
80 // TODO(juliatuttle): Convert this to actual origin. | 86 // TODO(juliatuttle): Convert this to actual origin. |
81 | 87 |
82 std::unique_ptr<DomainReliabilityContext> context = | 88 std::unique_ptr<DomainReliabilityContext> context = |
83 context_factory_->CreateContextForConfig(std::move(config)); | 89 context_factory_->CreateContextForConfig(std::move(config)); |
84 DomainReliabilityContext** entry = &contexts_[key]; | 90 DomainReliabilityContext** entry = &contexts_[key]; |
85 if (*entry) | 91 if (*entry) |
86 delete *entry; | 92 delete *entry; |
87 | 93 |
88 *entry = context.release(); | 94 *entry = context.release(); |
89 return *entry; | 95 return *entry; |
90 } | 96 } |
91 | 97 |
92 void DomainReliabilityContextManager::RemoveAllContexts() { | 98 void DomainReliabilityContextManager::RemoveContexts( |
93 STLDeleteContainerPairSecondPointers( | 99 const base::Callback<bool(const GURL&)>& origin_filter) { |
94 contexts_.begin(), contexts_.end()); | 100 for (ContextMap::iterator it = contexts_.begin(); it != contexts_.end(); ) { |
95 contexts_.clear(); | 101 if (!origin_filter.is_null() && |
| 102 !origin_filter.Run(it->second->config().origin)) { |
| 103 ++it; |
| 104 continue; |
| 105 } |
| 106 |
| 107 delete it->second; |
| 108 it = contexts_.erase(it); |
| 109 } |
96 } | 110 } |
97 | 111 |
98 std::unique_ptr<base::Value> DomainReliabilityContextManager::GetWebUIData() | 112 std::unique_ptr<base::Value> DomainReliabilityContextManager::GetWebUIData() |
99 const { | 113 const { |
100 std::unique_ptr<base::ListValue> contexts_value(new base::ListValue()); | 114 std::unique_ptr<base::ListValue> contexts_value(new base::ListValue()); |
101 for (const auto& context_entry : contexts_) | 115 for (const auto& context_entry : contexts_) |
102 contexts_value->Append(context_entry.second->GetWebUIData()); | 116 contexts_value->Append(context_entry.second->GetWebUIData()); |
103 return std::move(contexts_value); | 117 return std::move(contexts_value); |
104 } | 118 } |
105 | 119 |
(...skipping 15 matching lines...) Expand all Loading... |
121 context_it = contexts_.find(parent_host); | 135 context_it = contexts_.find(parent_host); |
122 if (context_it != contexts_.end() | 136 if (context_it != contexts_.end() |
123 && context_it->second->config().include_subdomains) { | 137 && context_it->second->config().include_subdomains) { |
124 return context_it->second; | 138 return context_it->second; |
125 } | 139 } |
126 | 140 |
127 return nullptr; | 141 return nullptr; |
128 } | 142 } |
129 | 143 |
130 } // namespace domain_reliability | 144 } // namespace domain_reliability |
OLD | NEW |