Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1048)

Unified Diff: loader/FrameLoader.cpp

Issue 113554: For local review prior to sending to webkit (Closed) Base URL: http://svn.webkit.org/repository/webkit/trunk/WebCore/
Patch Set: '' Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « loader/FrameLoader.h ('k') | loader/appcache2/ApplicationCacheBridge.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: loader/FrameLoader.cpp
===================================================================
--- loader/FrameLoader.cpp (revision 44202)
+++ loader/FrameLoader.cpp (working copy)
@@ -98,6 +98,10 @@
#include "ApplicationCacheResource.h"
#endif
+#if ENABLE(APPLICATION_CACHE)
+#include "ApplicationCacheFrontend.h"
+#endif
+
#if ENABLE(SVG)
#include "SVGDocument.h"
#include "SVGLocatable.h"
@@ -302,6 +306,9 @@
#if ENABLE(WML)
, m_forceReloadWmlDeck(false)
#endif
+#if ENABLE(APPLICATION_CACHE)
+ , m_appcacheFrontend(new ApplicationCacheFrontend())
+#endif
{
}
@@ -331,6 +338,10 @@
m_frame->document()->cancelParsing();
m_creatingInitialEmptyDocument = false;
m_didCallImplicitClose = true;
+
+#if ENABLE(APPLICATION_CACHE)
+ appcacheFrontend()->initializeForFrame(m_frame);
+#endif
}
void FrameLoader::setDefersLoading(bool defers)
@@ -1844,6 +1855,11 @@
&& !m_documentLoader->applicationCache()
&& !m_documentLoader->candidateApplicationCacheGroup()
#endif
+#if ENABLE(APPLICATION_CACHE)
+ // FIXME: We should investigating caching frames that have an associated
+ // application cache. <rdar://problem/5917899> tracks that work.
+ && appcacheFrontend()->canCacheCurrentDocumentInPageCache()
+#endif
&& m_client->canCachePage()
;
}
@@ -1994,6 +2010,10 @@
if (m_documentLoader->candidateApplicationCacheGroup())
{ PCLOG(" -The DocumentLoader has a candidateApplicationCacheGroup"); cannotCache = true; }
#endif
+#if ENABLE(APPLICATION_CACHE)
+ if (!appcacheFrontend()->canCacheCurrentDocumentInPageCache())
+ { PCLOG(" -Using application cache"); cannotCache = true; }
+#endif
if (!m_client->canCachePage())
{ PCLOG(" -The client says this frame cannot be cached"); cannotCache = true; }
} while (false);
@@ -2888,6 +2908,9 @@
setDocumentLoader(m_provisionalDocumentLoader.get());
setProvisionalDocumentLoader(0);
+#if ENABLE(APPLICATION_CACHE)
+ selectInitialApplicationCache();
+#endif
setState(FrameStateCommittedPage);
// Handle adding the URL to the back/forward list.
@@ -3573,6 +3596,10 @@
else if (Document* document = m_frame->document())
request.setFirstPartyForCookies(document->firstPartyForCookies());
}
+
+#if ENABLE(APPLICATION_CACHE)
+ appcacheFrontend()->addExtraFieldsToRequest(request, mainResource);
+#endif
// The remaining modifications are only necessary for HTTP and HTTPS.
if (!request.url().isEmpty() && !request.url().protocolInHTTPFamily())
@@ -5281,4 +5308,45 @@
return true;
}
+#if ENABLE(APPLICATION_CACHE)
+
+ApplicationCacheFrontend* FrameLoader::appcacheFrontend() const
+{
+ return m_appcacheFrontend.get();
+}
+
+void FrameLoader::selectInitialApplicationCache()
+{
+ const KURL& docURL = m_frame->document()->url();
+ const ResourceResponse& docResponse = documentLoader()->response();
+ appcacheFrontend()->selectInitialCache(docURL,
+ docResponse.applicationCacheID());
+}
+
+void FrameLoader::selectApplicationCacheWithoutManifest()
+{
+ const KURL& docURL = m_frame->document()->url();
+ const ResourceResponse& docResponse = documentLoader()->response();
+ appcacheFrontend()->selectCacheWithoutManifest(
+ docURL,
+ docResponse.applicationCacheID());
+}
+
+void FrameLoader::selectApplicationCacheWithManifest(const KURL& manifestURL)
+{
+ const KURL& docURL = m_frame->document()->url();
+ const ResourceResponse& docResponse = documentLoader()->response();
+ if (!appcacheFrontend()->selectCacheWithManifest(
+ docURL,
+ docResponse.applicationCacheID(),
+ docResponse.manifestURL(),
+ manifestURL)) {
+ // It's a foreign entry, restart the current navigation from the top of the navigation algorithm.
+ // The navigation will not result in the same resource being loaded, because "foreign" entries are
+ // never picked during navigation.
+ scheduleLocationChange(docURL, referrer(), true);
+ }
+}
+#endif
+
} // namespace WebCore
« no previous file with comments | « loader/FrameLoader.h ('k') | loader/appcache2/ApplicationCacheBridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698