| Index: net/http/infinite_cache.h | 
| =================================================================== | 
| --- net/http/infinite_cache.h	(revision 0) | 
| +++ net/http/infinite_cache.h	(revision 0) | 
| @@ -0,0 +1,120 @@ | 
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +// This is the interface of a simulated infinite cache. The purpose of this | 
| +// code is to evaluate the performance of an HTTP cache that is not constrained | 
| +// to evict resources. | 
| + | 
| +#ifndef NET_HTTP_INFINITE_CACHE_H_ | 
| +#define NET_HTTP_INFINITE_CACHE_H_ | 
| + | 
| +#include <string> | 
| + | 
| +#include "base/basictypes.h" | 
| +#include "base/memory/scoped_ptr.h" | 
| +#include "base/memory/weak_ptr.h" | 
| +#include "base/timer.h" | 
| +#include "net/base/completion_callback.h" | 
| +#include "net/base/net_export.h" | 
| + | 
| +class FilePath; | 
| + | 
| +namespace base { | 
| +class SequencedTaskRunner; | 
| +class SequencedWorkerPool; | 
| +} | 
| + | 
| +namespace net { | 
| + | 
| +class HttpCache; | 
| +class HttpResponseInfo; | 
| +class InfiniteCache; | 
| +struct HttpRequestInfo; | 
| + | 
| +// An InfiniteCacheTransaction is paired with an HttpCache::Transaction to track | 
| +// every request that goes through the HttpCache. This object is notified when | 
| +// relevant steps are reached while processing the request. | 
| +class NET_EXPORT_PRIVATE InfiniteCacheTransaction { | 
| + public: | 
| +  explicit InfiniteCacheTransaction(InfiniteCache* cache); | 
| +  ~InfiniteCacheTransaction(); | 
| + | 
| +  // Called when a new HttpTransaction is started. | 
| +  void OnRequestStart(const HttpRequestInfo* request); | 
| + | 
| +  // Called when the response headers are available. | 
| +  void OnResponseReceived(const HttpResponseInfo* response); | 
| + | 
| +  // Called when the response data is received from the network. | 
| +  void OnDataRead(const char* data, int data_len); | 
| + | 
| +  // Called when the resource is marked as truncated by the HttpCache. | 
| +  void OnTruncatedResponse(); | 
| + | 
| +  // Called when the resource is served from the cache, so OnDataRead will not | 
| +  // be called for this request. | 
| +  void OnServedFromCache(); | 
| + | 
| + private: | 
| +  friend class InfiniteCache; | 
| +  struct ResourceData; | 
| +  void Finish(); | 
| + | 
| +  base::WeakPtr<InfiniteCache> cache_; | 
| +  scoped_ptr<ResourceData> resource_data_; | 
| +  bool must_doom_entry_; | 
| +  DISALLOW_COPY_AND_ASSIGN(InfiniteCacheTransaction); | 
| +}; | 
| + | 
| +// An InfiniteCache is paired with an HttpCache instance to simulate an infinite | 
| +// backend storage. | 
| +class NET_EXPORT_PRIVATE InfiniteCache | 
| +    : public base::SupportsWeakPtr<InfiniteCache> { | 
| + public: | 
| +  InfiniteCache(); | 
| +  ~InfiniteCache(); | 
| + | 
| +  // Initializes this object to start tracking requests. |path| is the location | 
| +  // of the file to use to store data; it can be empty, in which case the data | 
| +  // will not be persisted to disk. | 
| +  void Init(const FilePath& path); | 
| + | 
| +  InfiniteCacheTransaction* CreateInfiniteCacheTransaction(); | 
| + | 
| +  // Removes all data for this experiment. Returns a net error code. | 
| +  int DeleteData(const CompletionCallback& callback); | 
| + | 
| +  // Removes requests between |initial_time| and |end_time|. | 
| +  int DeleteDataBetween(base::Time initial_time, | 
| +                        base::Time end_time, | 
| +                        const CompletionCallback& callback); | 
| + | 
| +  // Returns the number of elements currently tracked. | 
| +  int QueryItemsForTest(const CompletionCallback& callback); | 
| + | 
| +  // Flush the data to disk, preventing flushing when the destructor runs. Any | 
| +  // data added to the cache after calling this method will not be written to | 
| +  // disk, unless this method is called again to do so. | 
| +  int FlushDataForTest(const CompletionCallback& callback); | 
| + | 
| + private: | 
| +  class Worker; | 
| +  friend class base::RepeatingTimer<InfiniteCache>; | 
| +  friend class InfiniteCacheTransaction; | 
| + | 
| +  std::string GenerateKey(const HttpRequestInfo* request); | 
| +  void ProcessResource(scoped_ptr<InfiniteCacheTransaction::ResourceData> data); | 
| +  void OnTimer(); | 
| + | 
| +  scoped_refptr<Worker> worker_; | 
| +  scoped_refptr<base::SequencedWorkerPool> worker_pool_; | 
| +  scoped_refptr<base::SequencedTaskRunner> task_runner_; | 
| +  base::RepeatingTimer<InfiniteCache> timer_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(InfiniteCache); | 
| +}; | 
| + | 
| +}  // namespace net | 
| + | 
| +#endif  // NET_HTTP_INFINITE_CACHE_H_ | 
|  | 
| Property changes on: net\http\infinite_cache.h | 
| ___________________________________________________________________ | 
| Added: svn:eol-style | 
| + LF | 
|  | 
|  |