Implement the (hidden) ExtendedResponseCache interface.
Bug: http://code.google.com/p/android/issues/detail?id=25418
Change-Id: I4b20d576bac7036f94e57db7124de44f5b8d75be
diff --git a/core/java/android/net/http/HttpResponseCache.java b/core/java/android/net/http/HttpResponseCache.java
index 21736aa..73f3d7c 100644
--- a/core/java/android/net/http/HttpResponseCache.java
+++ b/core/java/android/net/http/HttpResponseCache.java
@@ -22,8 +22,10 @@
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 @@
* } 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 @@
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.
diff --git a/core/tests/coretests/src/android/net/http/HttpResponseCacheTest.java b/core/tests/coretests/src/android/net/http/HttpResponseCacheTest.java
index 4d65588..9015a6f 100644
--- a/core/tests/coretests/src/android/net/http/HttpResponseCacheTest.java
+++ b/core/tests/coretests/src/android/net/http/HttpResponseCacheTest.java
@@ -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 @@
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 @@
@Override protected void tearDown() throws Exception {
ResponseCache.setDefault(null);
+ server.shutdown();
super.tearDown();
}
@@ -100,4 +104,32 @@
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());
+ }
}