summaryrefslogtreecommitdiffstats
path: root/WebCore/loader/MainResourceLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/loader/MainResourceLoader.cpp')
-rw-r--r--WebCore/loader/MainResourceLoader.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/WebCore/loader/MainResourceLoader.cpp b/WebCore/loader/MainResourceLoader.cpp
index d976841..af30a11 100644
--- a/WebCore/loader/MainResourceLoader.cpp
+++ b/WebCore/loader/MainResourceLoader.cpp
@@ -123,10 +123,17 @@ void MainResourceLoader::callContinueAfterNavigationPolicy(void* argument, const
static_cast<MainResourceLoader*>(argument)->continueAfterNavigationPolicy(request, shouldContinue);
}
-void MainResourceLoader::continueAfterNavigationPolicy(const ResourceRequest&, bool shouldContinue)
+void MainResourceLoader::continueAfterNavigationPolicy(const ResourceRequest& request, bool shouldContinue)
{
if (!shouldContinue)
stopLoadingForPolicyChange();
+ else if (m_substituteData.isValid()) {
+ // A redirect resulted in loading substitute data.
+ ASSERT(documentLoader()->timing()->redirectCount);
+ handle()->cancel();
+ handleDataLoadSoon(request);
+ }
+
deref(); // balances ref in willSendRequest
}
@@ -192,6 +199,15 @@ void MainResourceLoader::willSendRequest(ResourceRequest& newRequest, const Reso
if (top != m_frame)
frameLoader()->checkIfDisplayInsecureContent(top->document()->securityOrigin(), newRequest.url());
+#if ENABLE(OFFLINE_WEB_APPLICATIONS)
+ if (!redirectResponse.isNull()) {
+ // We checked application cache for initial URL, now we need to check it for redirected one.
+ ASSERT(documentLoader()->applicationCacheHost()->status() == ApplicationCacheHost::UNCACHED);
+ ASSERT(!m_substituteData.isValid());
+ documentLoader()->applicationCacheHost()->maybeLoadMainResource(newRequest, m_substituteData);
+ }
+#endif
+
// FIXME: Ideally we'd stop the I/O until we hear back from the navigation policy delegate
// listener. But there's no way to do that in practice. So instead we cancel later if the
// listener tells us to. In practice that means the navigation policy needs to be decided
@@ -437,7 +453,7 @@ void MainResourceLoader::didFinishLoading(double finishTime)
#endif
ASSERT(!documentLoader()->timing()->responseEnd);
- documentLoader()->timing()->responseEnd = m_timeOfLastDataReceived;
+ documentLoader()->timing()->responseEnd = finishTime ? finishTime : m_timeOfLastDataReceived;
frameLoader()->finishedLoading();
ResourceLoader::didFinishLoading(finishTime);
@@ -500,7 +516,7 @@ void MainResourceLoader::startDataLoadTimer()
#endif
}
-void MainResourceLoader::handleDataLoadSoon(ResourceRequest& r)
+void MainResourceLoader::handleDataLoadSoon(const ResourceRequest& r)
{
m_initialRequest = r;