OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file declares a HttpTransactionFactory implementation that can be | 5 // This file declares a HttpTransactionFactory implementation that can be |
6 // layered on top of another HttpTransactionFactory to add HTTP caching. The | 6 // layered on top of another HttpTransactionFactory to add HTTP caching. The |
7 // caching logic follows RFC 2616 (any exceptions are called out in the code). | 7 // caching logic follows RFC 2616 (any exceptions are called out in the code). |
8 // | 8 // |
9 // The HttpCache takes a disk_cache::Backend as a parameter, and uses that for | 9 // The HttpCache takes a disk_cache::Backend as a parameter, and uses that for |
10 // the cache storage. | 10 // the cache storage. |
11 // | 11 // |
12 // See HttpTransactionFactory and HttpTransaction for more details. | 12 // See HttpTransactionFactory and HttpTransaction for more details. |
13 | 13 |
14 #ifndef NET_HTTP_HTTP_CACHE_H_ | 14 #ifndef NET_HTTP_HTTP_CACHE_H_ |
15 #define NET_HTTP_HTTP_CACHE_H_ | 15 #define NET_HTTP_HTTP_CACHE_H_ |
16 | 16 |
17 #include <list> | 17 #include <list> |
18 #include <set> | 18 #include <set> |
19 | 19 |
20 #include "base/basictypes.h" | 20 #include "base/basictypes.h" |
21 #include "base/hash_tables.h" | 21 #include "base/hash_tables.h" |
22 #include "base/scoped_ptr.h" | 22 #include "base/scoped_ptr.h" |
23 #include "base/task.h" | 23 #include "base/task.h" |
| 24 #include "net/base/cache_type.h" |
24 #include "net/http/http_transaction_factory.h" | 25 #include "net/http/http_transaction_factory.h" |
25 | 26 |
26 namespace disk_cache { | 27 namespace disk_cache { |
27 class Backend; | 28 class Backend; |
28 class Entry; | 29 class Entry; |
29 } | 30 } |
30 | 31 |
31 namespace net { | 32 namespace net { |
32 | 33 |
33 class HttpNetworkSession; | 34 class HttpNetworkSession; |
34 class HttpRequestInfo; | 35 class HttpRequestInfo; |
35 class HttpResponseInfo; | 36 class HttpResponseInfo; |
36 class ProxyService; | 37 class ProxyService; |
37 | 38 |
38 class HttpCache : public HttpTransactionFactory { | 39 class HttpCache : public HttpTransactionFactory { |
39 public: | 40 public: |
40 ~HttpCache(); | 41 ~HttpCache(); |
41 | 42 |
42 // The cache mode of operation. | 43 // The cache mode of operation. |
43 enum Mode { | 44 enum Mode { |
44 // Normal mode just behaves like a standard web cache. | 45 // Normal mode just behaves like a standard web cache. |
45 NORMAL = 0, | 46 NORMAL = 0, |
46 // Record mode caches everything for purposes of offline playback. | 47 // Record mode caches everything for purposes of offline playback. |
47 RECORD, | 48 RECORD, |
48 // Playback mode replays from a cache without considering any | 49 // Playback mode replays from a cache without considering any |
49 // standard invalidations. | 50 // standard invalidations. |
50 PLAYBACK | 51 PLAYBACK |
51 }; | 52 }; |
52 | 53 |
53 // The type of an HttpCache object, essentially describe what an HttpCache | |
54 // object is for. | |
55 enum Type { | |
56 // An HttpCache object for common objects, e.g. html pages, images, fonts, | |
57 // css files, js files and other common web resources. | |
58 COMMON = 0, | |
59 // A cache system for media file, e.g. video and audio files. These files | |
60 // are huge and has special requirement for access. | |
61 MEDIA | |
62 }; | |
63 | |
64 // Initialize the cache from the directory where its data is stored. The | 54 // Initialize the cache from the directory where its data is stored. The |
65 // disk cache is initialized lazily (by CreateTransaction) in this case. If | 55 // disk cache is initialized lazily (by CreateTransaction) in this case. If |
66 // |cache_size| is zero, a default value will be calculated automatically. | 56 // |cache_size| is zero, a default value will be calculated automatically. |
67 HttpCache(ProxyService* proxy_service, | 57 HttpCache(ProxyService* proxy_service, |
68 const std::wstring& cache_dir, | 58 const std::wstring& cache_dir, |
69 int cache_size); | 59 int cache_size); |
70 | 60 |
71 // Initialize the cache from the directory where its data is stored. The | 61 // Initialize the cache from the directory where its data is stored. The |
72 // disk cache is initialized lazily (by CreateTransaction) in this case. If | 62 // disk cache is initialized lazily (by CreateTransaction) in this case. If |
73 // |cache_size| is zero, a default value will be calculated automatically. | 63 // |cache_size| is zero, a default value will be calculated automatically. |
(...skipping 29 matching lines...) Expand all Loading... |
103 | 93 |
104 // Helper function for writing response info into the disk cache. | 94 // Helper function for writing response info into the disk cache. |
105 static bool WriteResponseInfo(disk_cache::Entry* disk_entry, | 95 static bool WriteResponseInfo(disk_cache::Entry* disk_entry, |
106 const HttpResponseInfo* response_info, | 96 const HttpResponseInfo* response_info, |
107 bool skip_transient_headers); | 97 bool skip_transient_headers); |
108 | 98 |
109 // Get/Set the cache's mode. | 99 // Get/Set the cache's mode. |
110 void set_mode(Mode value) { mode_ = value; } | 100 void set_mode(Mode value) { mode_ = value; } |
111 Mode mode() { return mode_; } | 101 Mode mode() { return mode_; } |
112 | 102 |
113 void set_type(Type type) { type_ = type; } | 103 void set_type(CacheType type) { type_ = type; } |
114 Type type() { return type_; } | 104 CacheType type() { return type_; } |
115 | 105 |
116 private: | 106 private: |
117 | 107 |
118 // Types -------------------------------------------------------------------- | 108 // Types -------------------------------------------------------------------- |
119 | 109 |
120 class Transaction; | 110 class Transaction; |
121 friend class Transaction; | 111 friend class Transaction; |
122 | 112 |
123 typedef std::list<Transaction*> TransactionList; | 113 typedef std::list<Transaction*> TransactionList; |
124 | 114 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 | 152 |
163 void OnProcessPendingQueue(ActiveEntry* entry); | 153 void OnProcessPendingQueue(ActiveEntry* entry); |
164 | 154 |
165 | 155 |
166 // Variables ---------------------------------------------------------------- | 156 // Variables ---------------------------------------------------------------- |
167 | 157 |
168 // used when lazily constructing the disk_cache_ | 158 // used when lazily constructing the disk_cache_ |
169 std::wstring disk_cache_dir_; | 159 std::wstring disk_cache_dir_; |
170 | 160 |
171 Mode mode_; | 161 Mode mode_; |
172 Type type_; | 162 CacheType type_; |
173 | 163 |
174 scoped_ptr<HttpTransactionFactory> network_layer_; | 164 scoped_ptr<HttpTransactionFactory> network_layer_; |
175 scoped_ptr<disk_cache::Backend> disk_cache_; | 165 scoped_ptr<disk_cache::Backend> disk_cache_; |
176 | 166 |
177 // The set of active entries indexed by cache key | 167 // The set of active entries indexed by cache key |
178 ActiveEntriesMap active_entries_; | 168 ActiveEntriesMap active_entries_; |
179 | 169 |
180 // The set of doomed entries | 170 // The set of doomed entries |
181 ActiveEntriesSet doomed_entries_; | 171 ActiveEntriesSet doomed_entries_; |
182 | 172 |
183 ScopedRunnableMethodFactory<HttpCache> task_factory_; | 173 ScopedRunnableMethodFactory<HttpCache> task_factory_; |
184 | 174 |
185 bool in_memory_cache_; | 175 bool in_memory_cache_; |
186 int cache_size_; | 176 int cache_size_; |
187 | 177 |
188 typedef base::hash_map<std::string, int> PlaybackCacheMap; | 178 typedef base::hash_map<std::string, int> PlaybackCacheMap; |
189 scoped_ptr<PlaybackCacheMap> playback_cache_map_; | 179 scoped_ptr<PlaybackCacheMap> playback_cache_map_; |
190 | 180 |
191 RevocableStore transactions_; | 181 RevocableStore transactions_; |
192 | 182 |
193 DISALLOW_COPY_AND_ASSIGN(HttpCache); | 183 DISALLOW_COPY_AND_ASSIGN(HttpCache); |
194 }; | 184 }; |
195 | 185 |
196 } // namespace net | 186 } // namespace net |
197 | 187 |
198 #endif // NET_HTTP_HTTP_CACHE_H_ | 188 #endif // NET_HTTP_HTTP_CACHE_H_ |
OLD | NEW |