Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: components/domain_reliability/context_manager.cc

Issue 2132563003: Implement origin-based deletion for the domain reliability service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated DomainReliabilityMonitorTest Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « components/domain_reliability/context_manager.h ('k') | components/domain_reliability/monitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698