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

Unified Diff: net/http/http_cache.h

Issue 455623003: stale-while-revalidate experimental implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: GetFreshnessLifetimes now returns two times. Duplicate AsyncValidations for the same URL are discar… Created 6 years, 3 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/http_cache.h
diff --git a/net/http/http_cache.h b/net/http/http_cache.h
index 35bc5b2f7aa386532d3c6923f7730df00333d9d3..3f59839b36537b7ff3eb1ecb10b269273fc1b15c 100644
--- a/net/http/http_cache.h
+++ b/net/http/http_cache.h
@@ -15,6 +15,7 @@
#define NET_HTTP_HTTP_CACHE_H_
#include <list>
+#include <map>
#include <set>
#include <string>
@@ -201,6 +202,16 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory,
bypass_lock_for_test_ = true;
}
+ bool use_stale_while_revalidate() const {
+ return use_stale_while_revalidate_;
+ }
+
+ // Enable stale_while_revalidate functionality for testing purposes.
+ void set_use_stale_while_revalidate_for_testing(
+ bool use_stale_while_revalidate) {
+ use_stale_while_revalidate_ = use_stale_while_revalidate;
+ }
+
// HttpTransactionFactory implementation:
virtual int CreateTransaction(RequestPriority priority,
scoped_ptr<HttpTransaction>* trans) OVERRIDE;
@@ -237,9 +248,11 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory,
friend class Transaction;
friend class ViewCacheHelper;
struct PendingOp; // Info for an entry under construction.
+ class AsyncValidation; // Encapsulates a single async revalidation.
typedef std::list<Transaction*> TransactionList;
typedef std::list<WorkItem*> WorkItemList;
+ typedef std::map<std::string, AsyncValidation*> AsyncValidationMap;
struct ActiveEntry {
explicit ActiveEntry(disk_cache::Entry* entry);
@@ -374,6 +387,15 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory,
// Resumes processing the pending list of |entry|.
void ProcessPendingQueue(ActiveEntry* entry);
+ // Called by Transaction to perform an asynchronous revalidation. Creates a
+ // new independent transaction as a copy of the original.
+ void PerformAsyncValidation(const HttpRequestInfo& original_request,
+ const BoundNetLog& net_log);
+
+ // Remove the AsyncValidation with url |url| from the |async_validations_| set
+ // and delete it.
+ void DeleteAsyncValidation(const std::string& url);
+
// Events (called via PostTask) ---------------------------------------------
void OnProcessPendingQueue(ActiveEntry* entry);
@@ -405,6 +427,10 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory,
bool building_backend_;
bool bypass_lock_for_test_;
+ // true if the implementation of Cache-Control: stale-while-revalidate
+ // directive is enabled (either via command-line flag or experiment).
+ bool use_stale_while_revalidate_;
+
Mode mode_;
scoped_ptr<QuicServerInfoFactoryAdaptor> quic_server_info_factory_;
@@ -426,6 +452,9 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory,
scoped_ptr<PlaybackCacheMap> playback_cache_map_;
+ // The async validations currently in progress, keyed by URL.
+ AsyncValidationMap async_validations_;
+
base::WeakPtrFactory<HttpCache> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(HttpCache);

Powered by Google App Engine
This is Rietveld 408576698