Mholloway has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/358138 )
Change subject: Update okhttp to 3.8.0 ...................................................................... Update okhttp to 3.8.0 N.B. Involves a change to a modified bit of CacheDelegateInterceptor! Please review carefully and test well! Here's the relevant okhttp commit: Invalidate the cache even if the response has no body. https://github.com/square/okhttp/commit/c9496d350c0c3bb4b9d9571c3ab97181726561e2 Also of note: Version 3.8.0 New: The response message is now non-null. This is the "Not Found" in the status line "HTTP 404 Not Found". If you are building responses programma- tically (with new Response.Builder()) you must now always supply a message. An empty string "" is permitted. This value was never null on responses returned by OkHttp itself, and it was an old mistake to permit application code to omit a message. Version 3.7.0 New: Connection coalescing. OkHttp may reuse HTTP/2 connections across calls that share an IP address and HTTPS certificate, even if their domain names are different. New: MockWebServer's RecordedRequest exposes the requested HttpUrl with getRequestUrl(). Change-Id: Ie2cc3bf806b7a6c45bc31a068fa4c64cecad51de --- M app/build.gradle M app/src/main/java/okhttp3/internal/cache/CacheDelegateInterceptor.java 2 files changed, 29 insertions(+), 36 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/38/358138/1 diff --git a/app/build.gradle b/app/build.gradle index 98e1948..ccc4796 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -162,7 +162,7 @@ // use http://gradleplease.appspot.com/ or http://search.maven.org/. // Debug with ./gradlew -q app:dependencies --configuration compile - String okHttpVersion = '3.6.0' // When updating this version, resync file copies under + String okHttpVersion = '3.8.0' // When updating this version, resync file copies under // app/src/main/java/okhttp3 String retrofitVersion = '2.2.0' String supportVersion = '25.3.1' diff --git a/app/src/main/java/okhttp3/internal/cache/CacheDelegateInterceptor.java b/app/src/main/java/okhttp3/internal/cache/CacheDelegateInterceptor.java index 2e70b70..df27cdd 100644 --- a/app/src/main/java/okhttp3/internal/cache/CacheDelegateInterceptor.java +++ b/app/src/main/java/okhttp3/internal/cache/CacheDelegateInterceptor.java @@ -44,9 +44,15 @@ import static okhttp3.internal.Util.closeQuietly; import static okhttp3.internal.Util.discard; -/** Serves requests from the cache and writes responses to the cache. Copied from - https://github.com/square/okhttp/blob/a27afaf/okhttp/src/main/java/okhttp3/internal/cache/CacheInterceptor.java - to allow a custom cache strategy. Deviations are marked with "Change:". */ +/** Serves requests from the cache and writes responses to the cache. Copied from the OkHttp + repository (https://github.com/square/okhttp) to allow a custom cache strategy. + + Last synchronized with OkHttp at the "parent-3.8.0" tag (last change: "Invalidate the cache even if + the response has no body." (c9496d3)) + + https://github.com/square/okhttp/blob/parent-3.8.0/okhttp/src/main/java/okhttp3/internal/cache/CacheInterceptor.java + + Deviations are marked with "Change:". */ public final class CacheDelegateInterceptor implements Interceptor { final InternalCache cache; // Change: add secondaryCache member variable @@ -152,10 +158,23 @@ .networkResponse(stripBody(networkResponse)) .build(); - if (HttpHeaders.hasBody(response)) { - // Change: add cacheCandidate parameter - CacheRequest cacheRequest = maybeCache(cacheCandidate, response, networkResponse.request(), cache); - response = cacheWritingResponse(cacheRequest, response); + if (cache != null) { + // Change: do not permit cache writes unless the page has been cached previously or the + // request is cacheable + if (HttpHeaders.hasBody(response) && CacheStrategy.isCacheable(response, networkRequest) + && !(cacheCandidate == null && !CacheDelegateStrategy.isCacheable(networkRequest))) { + // Offer this request to the cache. + CacheRequest cacheRequest = cache.put(response); + return cacheWritingResponse(cacheRequest, response); + } + + if (HttpMethod.invalidatesCache(networkRequest.method())) { + try { + cache.remove(networkRequest); + } catch (IOException ignored) { + // The cache cannot be written. + } + } } return response; @@ -163,35 +182,9 @@ private static Response stripBody(Response response) { return response != null && response.body() != null - ? response.newBuilder().body(null).build() - : response; - } + ? response.newBuilder().body(null).build() + : response; - // Change: add cacheCandidate parameter - private CacheRequest maybeCache(Response cacheCandidate, Response userResponse, Request networkRequest, - InternalCache responseCache) throws IOException { - if (responseCache == null) return null; - - // Should we cache this response for this request? - if (!CacheStrategy.isCacheable(userResponse, networkRequest)) { - if (HttpMethod.invalidatesCache(networkRequest.method())) { - try { - responseCache.remove(networkRequest); - } catch (IOException ignored) { - // The cache cannot be written. - } - } - return null; - } - - // Change: do not permit cache writes unless the page has been cached previously or the request - // is cacheable - if (cacheCandidate == null && !CacheDelegateStrategy.isCacheable(networkRequest)) { - return null; - } - - // Offer this request to the cache. - return responseCache.put(userResponse); } /** -- To view, visit https://gerrit.wikimedia.org/r/358138 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie2cc3bf806b7a6c45bc31a068fa4c64cecad51de Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Mholloway <mhollo...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits