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