blob: bbd3f2b0b15f812cd17614c0cc77fba35f08f9c3 [file] [log] [blame]
Jonathan Dixon74fc73f2013-10-18 16:51:53 -07001/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.webkit;
18
19import android.content.Context;
20import android.net.http.Headers;
21import android.util.Log;
22
23import java.io.File;
24import java.io.FileInputStream;
25import java.io.FileNotFoundException;
26import java.io.IOException;
27import java.io.InputStream;
28import java.io.OutputStream;
29import java.util.Map;
30
31
32/**
33 * Manages the HTTP cache used by an application's {@link WebView} instances.
34 * @deprecated Access to the HTTP cache will be removed in a future release.
35 * @hide Since {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
36 */
37// The class CacheManager provides the persistent cache of content that is
38// received over the network. The component handles parsing of HTTP headers and
39// utilizes the relevant cache headers to determine if the content should be
40// stored and if so, how long it is valid for. Network requests are provided to
41// this component and if they can not be resolved by the cache, the HTTP headers
42// are attached, as appropriate, to the request for revalidation of content. The
43// class also manages the cache size.
44//
45// CacheManager may only be used if your activity contains a WebView.
46@Deprecated
47public final class CacheManager {
48 /**
49 * Represents a resource stored in the HTTP cache. Instances of this class
50 * can be obtained by calling
51 * {@link CacheManager#getCacheFile CacheManager.getCacheFile(String, Map<String, String>))}.
52 *
53 * @deprecated Access to the HTTP cache will be removed in a future release.
54 */
55 @Deprecated
56 public static class CacheResult {
57 // these fields are saved to the database
58 int httpStatusCode;
59 long contentLength;
60 long expires;
61 String expiresString;
62 String localPath;
63 String lastModified;
64 String etag;
65 String mimeType;
66 String location;
67 String encoding;
68 String contentdisposition;
69 String crossDomain;
70
71 // these fields are NOT saved to the database
72 InputStream inStream;
73 OutputStream outStream;
74 File outFile;
75
76 /**
77 * Gets the status code of this cache entry.
78 *
79 * @return the status code of this cache entry
80 */
81 public int getHttpStatusCode() {
82 return httpStatusCode;
83 }
84
85 /**
86 * Gets the content length of this cache entry.
87 *
88 * @return the content length of this cache entry
89 */
90 public long getContentLength() {
91 return contentLength;
92 }
93
94 /**
95 * Gets the path of the file used to store the content of this cache
96 * entry, relative to the base directory of the cache. See
97 * {@link CacheManager#getCacheFileBaseDir CacheManager.getCacheFileBaseDir()}.
98 *
99 * @return the path of the file used to store this cache entry
100 */
101 public String getLocalPath() {
102 return localPath;
103 }
104
105 /**
106 * Gets the expiry date of this cache entry, expressed in milliseconds
107 * since midnight, January 1, 1970 UTC.
108 *
109 * @return the expiry date of this cache entry
110 */
111 public long getExpires() {
112 return expires;
113 }
114
115 /**
116 * Gets the expiry date of this cache entry, expressed as a string.
117 *
118 * @return the expiry date of this cache entry
119 *
120 */
121 public String getExpiresString() {
122 return expiresString;
123 }
124
125 /**
126 * Gets the date at which this cache entry was last modified, expressed
127 * as a string.
128 *
129 * @return the date at which this cache entry was last modified
130 */
131 public String getLastModified() {
132 return lastModified;
133 }
134
135 /**
136 * Gets the entity tag of this cache entry.
137 *
138 * @return the entity tag of this cache entry
139 */
140 public String getETag() {
141 return etag;
142 }
143
144 /**
145 * Gets the MIME type of this cache entry.
146 *
147 * @return the MIME type of this cache entry
148 */
149 public String getMimeType() {
150 return mimeType;
151 }
152
153 /**
154 * Gets the value of the HTTP 'Location' header with which this cache
155 * entry was received.
156 *
157 * @return the HTTP 'Location' header for this cache entry
158 */
159 public String getLocation() {
160 return location;
161 }
162
163 /**
164 * Gets the encoding of this cache entry.
165 *
166 * @return the encoding of this cache entry
167 */
168 public String getEncoding() {
169 return encoding;
170 }
171
172 /**
173 * Gets the value of the HTTP 'Content-Disposition' header with which
174 * this cache entry was received.
175 *
176 * @return the HTTP 'Content-Disposition' header for this cache entry
177 *
178 */
179 public String getContentDisposition() {
180 return contentdisposition;
181 }
182
183 /**
184 * Gets the input stream to the content of this cache entry, to allow
185 * content to be read. See
186 * {@link CacheManager#getCacheFile CacheManager.getCacheFile(String, Map<String, String>)}.
187 *
188 * @return an input stream to the content of this cache entry
189 */
190 public InputStream getInputStream() {
191 return inStream;
192 }
193
194 /**
195 * Gets an output stream to the content of this cache entry, to allow
196 * content to be written. See
197 * {@link CacheManager#saveCacheFile CacheManager.saveCacheFile(String, CacheResult)}.
198 *
199 * @return an output stream to the content of this cache entry
200 */
201 // Note that this is always null for objects returned by getCacheFile()!
202 public OutputStream getOutputStream() {
203 return outStream;
204 }
205
206
207 /**
208 * Sets an input stream to the content of this cache entry.
209 *
210 * @param stream an input stream to the content of this cache entry
211 */
212 public void setInputStream(InputStream stream) {
213 this.inStream = stream;
214 }
215
216 /**
217 * Sets the encoding of this cache entry.
218 *
219 * @param encoding the encoding of this cache entry
220 */
221 public void setEncoding(String encoding) {
222 this.encoding = encoding;
223 }
224
225 /**
226 * @hide
227 */
228 public void setContentLength(long contentLength) {
229 this.contentLength = contentLength;
230 }
231 }
232
233 /**
234 * Gets the base directory in which the files used to store the contents of
235 * cache entries are placed. See
236 * {@link CacheManager.CacheResult#getLocalPath CacheManager.CacheResult.getLocalPath()}.
237 *
238 * @return the base directory of the cache
239 * @deprecated This method no longer has any effect and always returns null.
240 */
241 @Deprecated
242 public static File getCacheFileBaseDir() {
243 return null;
244 }
245
246 /**
247 * Gets whether the HTTP cache is disabled.
248 *
249 * @return true if the HTTP cache is disabled
250 * @deprecated This method no longer has any effect and always returns false.
251 */
252 @Deprecated
253 public static boolean cacheDisabled() {
254 return false;
255 }
256
257 /**
258 * Starts a cache transaction. Returns true if this is the only running
259 * transaction. Otherwise, this transaction is nested inside currently
260 * running transactions and false is returned.
261 *
262 * @return true if this is the only running transaction
263 * @deprecated This method no longer has any effect and always returns false.
264 */
265 @Deprecated
266 public static boolean startCacheTransaction() {
267 return false;
268 }
269
270 /**
271 * Ends the innermost cache transaction and returns whether this was the
272 * only running transaction.
273 *
274 * @return true if this was the only running transaction
275 * @deprecated This method no longer has any effect and always returns false.
276 */
277 @Deprecated
278 public static boolean endCacheTransaction() {
279 return false;
280 }
281
282 /**
283 * Gets the cache entry for the specified URL, or null if none is found.
284 * If a non-null value is provided for the HTTP headers map, and the cache
285 * entry needs validation, appropriate headers will be added to the map.
286 * The input stream of the CacheEntry object should be closed by the caller
287 * when access to the underlying file is no longer required.
288 *
289 * @param url the URL for which a cache entry is requested
290 * @param headers a map from HTTP header name to value, to be populated
291 * for the returned cache entry
292 * @return the cache entry for the specified URL
293 * @deprecated This method no longer has any effect and always returns null.
294 */
295 @Deprecated
296 public static CacheResult getCacheFile(String url,
297 Map<String, String> headers) {
298 return null;
299 }
300
301 /**
302 * Adds a cache entry to the HTTP cache for the specicifed URL. Also closes
303 * the cache entry's output stream.
304 *
305 * @param url the URL for which the cache entry should be added
306 * @param cacheResult the cache entry to add
307 * @deprecated Access to the HTTP cache will be removed in a future release.
308 */
309 @Deprecated
310 public static void saveCacheFile(String url, CacheResult cacheResult) {
311 saveCacheFile(url, 0, cacheResult);
312 }
313
314 static void saveCacheFile(String url, long postIdentifier,
315 CacheResult cacheRet) {
316 try {
317 cacheRet.outStream.close();
318 } catch (IOException e) {
319 return;
320 }
321
322 // This method is exposed in the public API but the API provides no
323 // way to obtain a new CacheResult object with a non-null output
324 // stream ...
325 // - CacheResult objects returned by getCacheFile() have a null
326 // output stream.
327 // - new CacheResult objects have a null output stream and no
328 // setter is provided.
329 // Since this method throws a null pointer exception in this case,
330 // it is effectively useless from the point of view of the public
331 // API.
332 //
333 // With the Chromium HTTP stack we continue to throw the same
334 // exception for 'backwards compatibility' with the Android HTTP
335 // stack.
336 //
337 // This method is not used from within this package, and for public API
338 // use, we should already have thrown an exception above.
339 assert false;
340 }
341}