Index: components/domain_reliability/context_manager.cc |
diff --git a/components/domain_reliability/context_manager.cc b/components/domain_reliability/context_manager.cc |
index 54d5eaa176e7f978770bec4df59c9f2b2565d3d0..bcdb530de64d7b639438cf5a11e4fec6af57598c 100644 |
--- a/components/domain_reliability/context_manager.cc |
+++ b/components/domain_reliability/context_manager.cc |
@@ -14,7 +14,8 @@ DomainReliabilityContextManager::DomainReliabilityContextManager( |
} |
DomainReliabilityContextManager::~DomainReliabilityContextManager() { |
- RemoveAllContexts(); |
+ RemoveContexts( |
+ base::Callback<bool(const GURL&)>() /* no filter - delete everything */); |
} |
void DomainReliabilityContextManager::RouteBeacon( |
@@ -69,9 +70,14 @@ void DomainReliabilityContextManager::ClearConfig(const GURL& origin) { |
} |
} |
-void DomainReliabilityContextManager::ClearBeaconsInAllContexts() { |
- for (auto& context_entry : contexts_) |
- context_entry.second->ClearBeacons(); |
+void DomainReliabilityContextManager::ClearBeacons( |
+ const base::Callback<bool(const GURL&)>& origin_filter) { |
+ for (auto& context_entry : contexts_) { |
+ if (origin_filter.is_null() || |
+ origin_filter.Run(context_entry.second->config().origin)) { |
+ context_entry.second->ClearBeacons(); |
+ } |
+ } |
} |
DomainReliabilityContext* DomainReliabilityContextManager::AddContextForConfig( |
@@ -89,10 +95,18 @@ DomainReliabilityContext* DomainReliabilityContextManager::AddContextForConfig( |
return *entry; |
} |
-void DomainReliabilityContextManager::RemoveAllContexts() { |
- STLDeleteContainerPairSecondPointers( |
- contexts_.begin(), contexts_.end()); |
- contexts_.clear(); |
+void DomainReliabilityContextManager::RemoveContexts( |
+ const base::Callback<bool(const GURL&)>& origin_filter) { |
+ for (ContextMap::iterator it = contexts_.begin(); it != contexts_.end(); ) { |
+ if (!origin_filter.is_null() && |
+ !origin_filter.Run(it->second->config().origin)) { |
+ ++it; |
+ continue; |
+ } |
+ |
+ delete it->second; |
+ it = contexts_.erase(it); |
+ } |
} |
std::unique_ptr<base::Value> DomainReliabilityContextManager::GetWebUIData() |