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

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: Rebase. Created 6 years, 4 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..9fd0d047a642895a5993fe6c4317a435965b7e16 100644
--- a/net/http/http_cache.h
+++ b/net/http/http_cache.h
@@ -201,6 +201,15 @@ 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(bool use_stale_while_revalidate) {
yhirano 2014/08/26 07:52:01 How about adding "for_testing" suffix to this func
Adam Rice 2014/08/26 13:38:42 Done.
+ use_stale_while_revalidate_ = use_stale_while_revalidate;
+ }
+
// HttpTransactionFactory implementation:
virtual int CreateTransaction(RequestPriority priority,
scoped_ptr<HttpTransaction>* trans) OVERRIDE;
@@ -237,9 +246,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::set<AsyncValidation*> AsyncValidationSet;
struct ActiveEntry {
explicit ActiveEntry(disk_cache::Entry* entry);
@@ -374,6 +385,14 @@ 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 |async_validation| from the |async_validations_| set and delete it.
+ void DeleteAsyncValidation(AsyncValidation* async_validation);
+
// Events (called via PostTask) ---------------------------------------------
void OnProcessPendingQueue(ActiveEntry* entry);
@@ -405,6 +424,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 +449,9 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory,
scoped_ptr<PlaybackCacheMap> playback_cache_map_;
+ // The set of async validations currently in progress
+ AsyncValidationSet async_validations_;
+
base::WeakPtrFactory<HttpCache> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(HttpCache);

Powered by Google App Engine
This is Rietveld 408576698