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