• 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.content.Context;
20 import android.net.http.Headers;
21 import android.util.Log;
22 
23 import java.io.File;
24 import java.io.FileInputStream;
25 import java.io.FileNotFoundException;
26 import java.io.IOException;
27 import java.io.InputStream;
28 import java.io.OutputStream;
29 import 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
47 public 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          */
getHttpStatusCode()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          */
getContentLength()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          */
getLocalPath()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          */
getExpires()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          */
getExpiresString()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          */
getLastModified()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          */
getETag()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          */
getMimeType()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          */
getLocation()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          */
getEncoding()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          */
getContentDisposition()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          */
getInputStream()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()!
getOutputStream()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          */
setInputStream(InputStream stream)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          */
setEncoding(String encoding)221         public void setEncoding(String encoding) {
222             this.encoding = encoding;
223         }
224 
225         /**
226          * @hide
227          */
setContentLength(long contentLength)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
getCacheFileBaseDir()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
cacheDisabled()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
startCacheTransaction()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
endCacheTransaction()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
getCacheFile(String url, Map<String, String> headers)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
saveCacheFile(String url, CacheResult cacheResult)310     public static void saveCacheFile(String url, CacheResult cacheResult) {
311         saveCacheFile(url, 0, cacheResult);
312     }
313 
saveCacheFile(String url, long postIdentifier, CacheResult cacheRet)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 }
342