Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18c227ba authored by Jesse Wilson's avatar Jesse Wilson
Browse files

Implement the (hidden) ExtendedResponseCache interface.

Bug: http://code.google.com/p/android/issues/detail?id=25418
Change-Id: I4b20d576bac7036f94e57db7124de44f5b8d75be
parent 71878402
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -22,8 +22,10 @@ import java.io.File;
import java.io.IOException;
import java.net.CacheRequest;
import java.net.CacheResponse;
import java.net.ExtendedResponseCache;
import java.net.HttpURLConnection;
import java.net.ResponseCache;
import java.net.ResponseSource;
import java.net.URI;
import java.net.URLConnection;
import java.util.List;
@@ -149,7 +151,8 @@ import org.apache.http.impl.client.DefaultHttpClient;
 *       } catch (Exception httpResponseCacheNotAvailable) {
 *       }}</pre>
 */
public final class HttpResponseCache extends ResponseCache implements Closeable {
public final class HttpResponseCache extends ResponseCache
        implements Closeable, ExtendedResponseCache {

    private final libcore.net.http.HttpResponseCache delegate;

@@ -260,6 +263,21 @@ public final class HttpResponseCache extends ResponseCache implements Closeable
        return delegate.getRequestCount();
    }

    /** @hide */
    @Override public void trackResponse(ResponseSource source) {
        delegate.trackResponse(source);
    }

    /** @hide */
    @Override public void trackConditionalCacheHit() {
        delegate.trackConditionalCacheHit();
    }

    /** @hide */
    @Override public void update(CacheResponse conditionalCacheHit, HttpURLConnection connection) {
        delegate.update(conditionalCacheHit, connection);
    }

    /**
     * Uninstalls the cache and releases any active resources. Stored contents
     * will remain on the filesystem.
+32 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.net.http;

import com.google.mockwebserver.MockResponse;
import com.google.mockwebserver.MockWebServer;
import java.io.File;
import java.net.CacheRequest;
import java.net.CacheResponse;
@@ -30,6 +32,7 @@ import junit.framework.TestCase;
public final class HttpResponseCacheTest extends TestCase {

    private File cacheDir;
    private MockWebServer server = new MockWebServer();

    @Override public void setUp() throws Exception {
        super.setUp();
@@ -39,6 +42,7 @@ public final class HttpResponseCacheTest extends TestCase {

    @Override protected void tearDown() throws Exception {
        ResponseCache.setDefault(null);
        server.shutdown();
        super.tearDown();
    }

@@ -100,4 +104,32 @@ public final class HttpResponseCacheTest extends TestCase {
        cache.delete();
        assertNull(ResponseCache.getDefault());
    }

    /**
     * Make sure that statistics tracking are wired all the way through the
     * wrapper class. http://code.google.com/p/android/issues/detail?id=25418
     */
    public void testStatisticsTracking() throws Exception {
        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);

        server.enqueue(new MockResponse()
                .addHeader("Cache-Control: max-age=60")
                .setBody("A"));
        server.play();

        URLConnection c1 = server.getUrl("/").openConnection();
        assertEquals('A', c1.getInputStream().read());
        assertEquals(1, cache.getRequestCount());
        assertEquals(1, cache.getNetworkCount());
        assertEquals(0, cache.getHitCount());

        URLConnection c2 = server.getUrl("/").openConnection();
        assertEquals('A', c2.getInputStream().read());

        URLConnection c3 = server.getUrl("/").openConnection();
        assertEquals('A', c3.getInputStream().read());
        assertEquals(3, cache.getRequestCount());
        assertEquals(1, cache.getNetworkCount());
        assertEquals(2, cache.getHitCount());
    }
}