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); |