Home | History | Annotate | Download | only in webkit
      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          */
     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 }
    342