@@ -3,7 +3,6 @@ package dev.hotwire.turbo.http
3
3
import android.webkit.CookieManager
4
4
import android.webkit.WebResourceRequest
5
5
import android.webkit.WebResourceResponse
6
- import dev.hotwire.turbo.util.TurboLog
7
6
import dev.hotwire.turbo.util.dispatcherProvider
8
7
import dev.hotwire.turbo.util.logError
9
8
import kotlinx.coroutines.CoroutineScope
@@ -75,15 +74,22 @@ internal class TurboHttpRepository(private val coroutineScope: CoroutineScope) {
75
74
76
75
return try {
77
76
val response = issueRequest(resourceRequest)
78
-
79
- // Cache based on the response's request url, which may have been a redirect
80
77
val responseUrl = response?.request?.url.toString()
81
78
val isRedirect = url != responseUrl
79
+ val resourceResponse = resourceResponse(response)
80
+
81
+ // If the response is a document, cache based on the final response's request url, so
82
+ // that Turbo HTTP location redirects are not masked. Otherwise, cached based on the
83
+ // original request url, so redirected images, resources, etc are available offline.
84
+ val cacheUrl = if (resourceResponse?.mimeType == " text/html" ) {
85
+ responseUrl
86
+ } else {
87
+ url
88
+ }
82
89
83
90
// Let the app cache the response
84
- val resourceResponse = resourceResponse(response)
85
91
val cachedResponse = resourceResponse?.let {
86
- requestHandler.cacheResponse(responseUrl , it)
92
+ requestHandler.cacheResponse(cacheUrl , it)
87
93
}
88
94
89
95
Result (
0 commit comments