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

Unified Diff: net/http/broken_alternative_services.cc

Issue 2917913002: Add getters and setters for BrokenAlternativeService's list of broken and recently-broken alt svcs (Closed)
Patch Set: Rebase, Changed AddBrokenAndRecentlyBrokenAlternativeServices() to take unique_ptrs to clarify ownership Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: net/http/broken_alternative_services.cc
diff --git a/net/http/broken_alternative_services.cc b/net/http/broken_alternative_services.cc
index d660f25c06d860ea26586dda5c3811b4a7b6568c..b26a08321a134b6179eb1914a982947b2a38bf73 100644
--- a/net/http/broken_alternative_services.cc
+++ b/net/http/broken_alternative_services.cc
@@ -114,6 +114,75 @@ void BrokenAlternativeServices::ConfirmAlternativeService(
}
}
+const BrokenAlternativeServiceList&
+BrokenAlternativeServices::broken_alternative_service_list() const {
+ return broken_alternative_service_list_;
+}
+
+const RecentlyBrokenAlternativeServices&
+BrokenAlternativeServices::recently_broken_alternative_services() const {
+ return recently_broken_alternative_services_;
+}
+
+void BrokenAlternativeServices::AddBrokenAndRecentlyBrokenAlternativeServices(
+ std::unique_ptr<BrokenAlternativeServiceList>
+ broken_alternative_service_list,
+ std::unique_ptr<RecentlyBrokenAlternativeServices>
+ recently_broken_alternative_services) {
+ // Make sure all alt svcs in |broken_alternative_service_list| has an entry
+ // in |recently_broken_alternative_services|
+ for (const auto& pair : *broken_alternative_service_list) {
+ DCHECK(recently_broken_alternative_services->Peek(pair.first) !=
+ recently_broken_alternative_services->end());
+ }
Zhongyi Shi 2017/06/02 18:19:44 |recently_broken_alternative_services| is an MRUCa
wangyix1 2017/06/05 19:16:25 No, Peek() does not modify the recency list, unlik
Zhongyi Shi 2017/06/06 22:17:49 I miss-read the code, yeah, Peek() should be fine.
wangyix1 2017/06/09 19:26:40 Acknowledged.
+
+ recently_broken_alternative_services_.Swap(
+ *recently_broken_alternative_services);
+ // Add back all existing recently broken alt svcs to cache so they're at
+ // front of recency list.
Zhongyi Shi 2017/06/02 18:19:44 I might lose some context but why those existing r
wangyix1 2017/06/05 19:16:24 It's not clear from the name, but this method will
+ for (auto it = recently_broken_alternative_services->rbegin();
+ it != recently_broken_alternative_services->rend(); ++it) {
+ if (recently_broken_alternative_services_.Get(it->first) ==
+ recently_broken_alternative_services_.end()) {
+ recently_broken_alternative_services_.Put(it->first, it->second);
+ }
+ }
+
+ // Add broken alt svcs to |broken_alternative_service_map_|. Remove all
+ // that already exist in the map.
+ auto it = broken_alternative_service_list->begin();
+ while (it != broken_alternative_service_list->end()) {
+ const AlternativeService& alternative_service = it->first;
+ if (broken_alternative_service_map_.find(alternative_service) ==
+ broken_alternative_service_map_.end()) {
+ broken_alternative_service_map_.insert(
+ std::make_pair(alternative_service, it));
+ ++it;
+ } else {
+ broken_alternative_service_list->erase(it++);
+ }
+ }
+
+ // Merge |broken_alternative_service_list| with
+ // |broken_alternative_service_list_|. Both should already be sorted by
+ // expiration time.
+ bool schedule_expiration =
+ (!broken_alternative_service_list->empty() &&
+ (broken_alternative_service_list_.empty() ||
+ broken_alternative_service_list->front().second <
+ broken_alternative_service_list_.front().second));
+
+ broken_alternative_service_list_.merge(
+ *broken_alternative_service_list,
+ [](const std::pair<AlternativeService, base::TimeTicks>& lhs,
+ const std::pair<AlternativeService, base::TimeTicks>& rhs) -> bool {
+ return lhs.second < rhs.second;
+ });
+
+ if (schedule_expiration)
+ ScheduleBrokenAlternateProtocolMappingsExpiration();
+}
+
bool BrokenAlternativeServices::AddToBrokenAlternativeServiceListAndMap(
const AlternativeService& alternative_service,
base::TimeTicks expiration,
@@ -129,7 +198,7 @@ bool BrokenAlternativeServices::AddToBrokenAlternativeServiceListAndMap(
auto list_it = broken_alternative_service_list_.end();
while (list_it != broken_alternative_service_list_.begin()) {
--list_it;
- if (list_it->expiration <= expiration) {
+ if (list_it->second <= expiration) {
++list_it;
break;
}
@@ -137,7 +206,7 @@ bool BrokenAlternativeServices::AddToBrokenAlternativeServiceListAndMap(
// Insert |alternative_service| into the list and the map
list_it = broken_alternative_service_list_.insert(
- list_it, BrokenAltSvcExpireInfo(alternative_service, expiration));
+ list_it, std::make_pair(alternative_service, expiration));
broken_alternative_service_map_.insert(
std::make_pair(alternative_service, list_it));
@@ -150,13 +219,13 @@ void BrokenAlternativeServices::ExpireBrokenAlternateProtocolMappings() {
while (!broken_alternative_service_list_.empty()) {
auto it = broken_alternative_service_list_.begin();
- if (now < it->expiration) {
+ if (now < it->second) {
break;
}
- delegate_->OnExpireBrokenAlternativeService(it->alternative_service);
+ delegate_->OnExpireBrokenAlternativeService(it->first);
- broken_alternative_service_map_.erase(it->alternative_service);
+ broken_alternative_service_map_.erase(it->first);
broken_alternative_service_list_.erase(it);
}
@@ -168,7 +237,7 @@ void BrokenAlternativeServices ::
ScheduleBrokenAlternateProtocolMappingsExpiration() {
DCHECK(!broken_alternative_service_list_.empty());
base::TimeTicks now = clock_->NowTicks();
- base::TimeTicks when = broken_alternative_service_list_.front().expiration;
+ base::TimeTicks when = broken_alternative_service_list_.front().second;
base::TimeDelta delay = when > now ? when - now : base::TimeDelta();
expiration_timer_.Stop();
expiration_timer_.Start(

Powered by Google App Engine
This is Rietveld 408576698