| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * | 9 * |
| 10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 #include "XMLHttpRequest.h" | 91 #include "XMLHttpRequest.h" |
| 92 #include "XMLTokenizer.h" | 92 #include "XMLTokenizer.h" |
| 93 #include <wtf/CurrentTime.h> | 93 #include <wtf/CurrentTime.h> |
| 94 #include <wtf/StdLibExtras.h> | 94 #include <wtf/StdLibExtras.h> |
| 95 | 95 |
| 96 #if ENABLE(OFFLINE_WEB_APPLICATIONS) | 96 #if ENABLE(OFFLINE_WEB_APPLICATIONS) |
| 97 #include "ApplicationCache.h" | 97 #include "ApplicationCache.h" |
| 98 #include "ApplicationCacheResource.h" | 98 #include "ApplicationCacheResource.h" |
| 99 #endif | 99 #endif |
| 100 | 100 |
| 101 #if ENABLE(APPLICATION_CACHE) |
| 102 #include "ApplicationCacheFrontend.h" |
| 103 #endif |
| 104 |
| 101 #if ENABLE(SVG) | 105 #if ENABLE(SVG) |
| 102 #include "SVGDocument.h" | 106 #include "SVGDocument.h" |
| 103 #include "SVGLocatable.h" | 107 #include "SVGLocatable.h" |
| 104 #include "SVGNames.h" | 108 #include "SVGNames.h" |
| 105 #include "SVGPreserveAspectRatio.h" | 109 #include "SVGPreserveAspectRatio.h" |
| 106 #include "SVGSVGElement.h" | 110 #include "SVGSVGElement.h" |
| 107 #include "SVGViewElement.h" | 111 #include "SVGViewElement.h" |
| 108 #include "SVGViewSpec.h" | 112 #include "SVGViewSpec.h" |
| 109 #endif | 113 #endif |
| 110 | 114 |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 , m_creatingInitialEmptyDocument(false) | 299 , m_creatingInitialEmptyDocument(false) |
| 296 , m_isDisplayingInitialEmptyDocument(false) | 300 , m_isDisplayingInitialEmptyDocument(false) |
| 297 , m_committedFirstRealDocumentLoad(false) | 301 , m_committedFirstRealDocumentLoad(false) |
| 298 , m_didPerformFirstNavigation(false) | 302 , m_didPerformFirstNavigation(false) |
| 299 #ifndef NDEBUG | 303 #ifndef NDEBUG |
| 300 , m_didDispatchDidCommitLoad(false) | 304 , m_didDispatchDidCommitLoad(false) |
| 301 #endif | 305 #endif |
| 302 #if ENABLE(WML) | 306 #if ENABLE(WML) |
| 303 , m_forceReloadWmlDeck(false) | 307 , m_forceReloadWmlDeck(false) |
| 304 #endif | 308 #endif |
| 309 #if ENABLE(APPLICATION_CACHE) |
| 310 , m_appcacheFrontend(new ApplicationCacheFrontend()) |
| 311 #endif |
| 305 { | 312 { |
| 306 } | 313 } |
| 307 | 314 |
| 308 FrameLoader::~FrameLoader() | 315 FrameLoader::~FrameLoader() |
| 309 { | 316 { |
| 310 setOpener(0); | 317 setOpener(0); |
| 311 | 318 |
| 312 HashSet<Frame*>::iterator end = m_openedFrames.end(); | 319 HashSet<Frame*>::iterator end = m_openedFrames.end(); |
| 313 for (HashSet<Frame*>::iterator it = m_openedFrames.begin(); it != end; ++it) | 320 for (HashSet<Frame*>::iterator it = m_openedFrames.begin(); it != end; ++it) |
| 314 (*it)->loader()->m_opener = 0; | 321 (*it)->loader()->m_opener = 0; |
| 315 | 322 |
| 316 m_client->frameLoaderDestroyed(); | 323 m_client->frameLoaderDestroyed(); |
| 317 } | 324 } |
| 318 | 325 |
| 319 void FrameLoader::init() | 326 void FrameLoader::init() |
| 320 { | 327 { |
| 321 // this somewhat odd set of steps is needed to give the frame an initial emp
ty document | 328 // this somewhat odd set of steps is needed to give the frame an initial emp
ty document |
| 322 m_isDisplayingInitialEmptyDocument = false; | 329 m_isDisplayingInitialEmptyDocument = false; |
| 323 m_creatingInitialEmptyDocument = true; | 330 m_creatingInitialEmptyDocument = true; |
| 324 setPolicyDocumentLoader(m_client->createDocumentLoader(ResourceRequest(KURL(
"")), SubstituteData()).get()); | 331 setPolicyDocumentLoader(m_client->createDocumentLoader(ResourceRequest(KURL(
"")), SubstituteData()).get()); |
| 325 setProvisionalDocumentLoader(m_policyDocumentLoader.get()); | 332 setProvisionalDocumentLoader(m_policyDocumentLoader.get()); |
| 326 setState(FrameStateProvisional); | 333 setState(FrameStateProvisional); |
| 327 m_provisionalDocumentLoader->setResponse(ResourceResponse(KURL(), "text/html
", 0, String(), String())); | 334 m_provisionalDocumentLoader->setResponse(ResourceResponse(KURL(), "text/html
", 0, String(), String())); |
| 328 m_provisionalDocumentLoader->finishedLoading(); | 335 m_provisionalDocumentLoader->finishedLoading(); |
| 329 begin(KURL(), false); | 336 begin(KURL(), false); |
| 330 end(); | 337 end(); |
| 331 m_frame->document()->cancelParsing(); | 338 m_frame->document()->cancelParsing(); |
| 332 m_creatingInitialEmptyDocument = false; | 339 m_creatingInitialEmptyDocument = false; |
| 333 m_didCallImplicitClose = true; | 340 m_didCallImplicitClose = true; |
| 341 |
| 342 #if ENABLE(APPLICATION_CACHE) |
| 343 appcacheFrontend()->initializeForFrame(m_frame); |
| 344 #endif |
| 334 } | 345 } |
| 335 | 346 |
| 336 void FrameLoader::setDefersLoading(bool defers) | 347 void FrameLoader::setDefersLoading(bool defers) |
| 337 { | 348 { |
| 338 if (m_documentLoader) | 349 if (m_documentLoader) |
| 339 m_documentLoader->setDefersLoading(defers); | 350 m_documentLoader->setDefersLoading(defers); |
| 340 if (m_provisionalDocumentLoader) | 351 if (m_provisionalDocumentLoader) |
| 341 m_provisionalDocumentLoader->setDefersLoading(defers); | 352 m_provisionalDocumentLoader->setDefersLoading(defers); |
| 342 if (m_policyDocumentLoader) | 353 if (m_policyDocumentLoader) |
| 343 m_policyDocumentLoader->setDefersLoading(defers); | 354 m_policyDocumentLoader->setDefersLoading(defers); |
| (...skipping 1493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1837 && !m_quickRedirectComing | 1848 && !m_quickRedirectComing |
| 1838 && !m_documentLoader->isLoadingInAPISense() | 1849 && !m_documentLoader->isLoadingInAPISense() |
| 1839 && !m_documentLoader->isStopping() | 1850 && !m_documentLoader->isStopping() |
| 1840 && m_frame->document()->canSuspendActiveDOMObjects() | 1851 && m_frame->document()->canSuspendActiveDOMObjects() |
| 1841 #if ENABLE(OFFLINE_WEB_APPLICATIONS) | 1852 #if ENABLE(OFFLINE_WEB_APPLICATIONS) |
| 1842 // FIXME: We should investigating caching frames that have an associated | 1853 // FIXME: We should investigating caching frames that have an associated |
| 1843 // application cache. <rdar://problem/5917899> tracks that work. | 1854 // application cache. <rdar://problem/5917899> tracks that work. |
| 1844 && !m_documentLoader->applicationCache() | 1855 && !m_documentLoader->applicationCache() |
| 1845 && !m_documentLoader->candidateApplicationCacheGroup() | 1856 && !m_documentLoader->candidateApplicationCacheGroup() |
| 1846 #endif | 1857 #endif |
| 1858 #if ENABLE(APPLICATION_CACHE) |
| 1859 // FIXME: We should investigating caching frames that have an associated |
| 1860 // application cache. <rdar://problem/5917899> tracks that work. |
| 1861 && appcacheFrontend()->canCacheCurrentDocumentInPageCache() |
| 1862 #endif |
| 1847 && m_client->canCachePage() | 1863 && m_client->canCachePage() |
| 1848 ; | 1864 ; |
| 1849 } | 1865 } |
| 1850 | 1866 |
| 1851 bool FrameLoader::canCachePage() | 1867 bool FrameLoader::canCachePage() |
| 1852 { | 1868 { |
| 1853 #ifndef NDEBUG | 1869 #ifndef NDEBUG |
| 1854 logCanCachePageDecision(); | 1870 logCanCachePageDecision(); |
| 1855 #endif | 1871 #endif |
| 1856 | 1872 |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1987 if (m_documentLoader->isStopping()) | 2003 if (m_documentLoader->isStopping()) |
| 1988 { PCLOG(" -DocumentLoader is in the middle of stopping"); cannotCa
che = true; } | 2004 { PCLOG(" -DocumentLoader is in the middle of stopping"); cannotCa
che = true; } |
| 1989 if (!m_frame->document()->canSuspendActiveDOMObjects()) | 2005 if (!m_frame->document()->canSuspendActiveDOMObjects()) |
| 1990 { PCLOG(" -The document cannot suspect its active DOM Objects"); c
annotCache = true; } | 2006 { PCLOG(" -The document cannot suspect its active DOM Objects"); c
annotCache = true; } |
| 1991 #if ENABLE(OFFLINE_WEB_APPLICATIONS) | 2007 #if ENABLE(OFFLINE_WEB_APPLICATIONS) |
| 1992 if (m_documentLoader->applicationCache()) | 2008 if (m_documentLoader->applicationCache()) |
| 1993 { PCLOG(" -The DocumentLoader has an active application cache"); c
annotCache = true; } | 2009 { PCLOG(" -The DocumentLoader has an active application cache"); c
annotCache = true; } |
| 1994 if (m_documentLoader->candidateApplicationCacheGroup()) | 2010 if (m_documentLoader->candidateApplicationCacheGroup()) |
| 1995 { PCLOG(" -The DocumentLoader has a candidateApplicationCacheGroup
"); cannotCache = true; } | 2011 { PCLOG(" -The DocumentLoader has a candidateApplicationCacheGroup
"); cannotCache = true; } |
| 1996 #endif | 2012 #endif |
| 2013 #if ENABLE(APPLICATION_CACHE) |
| 2014 if (!appcacheFrontend()->canCacheCurrentDocumentInPageCache()) |
| 2015 { PCLOG(" -Using application cache"); cannotCache = true; } |
| 2016 #endif |
| 1997 if (!m_client->canCachePage()) | 2017 if (!m_client->canCachePage()) |
| 1998 { PCLOG(" -The client says this frame cannot be cached"); cannotCa
che = true; } | 2018 { PCLOG(" -The client says this frame cannot be cached"); cannotCa
che = true; } |
| 1999 } while (false); | 2019 } while (false); |
| 2000 | 2020 |
| 2001 for (Frame* child = m_frame->tree()->firstChild(); child; child = child->tre
e()->nextSibling()) | 2021 for (Frame* child = m_frame->tree()->firstChild(); child; child = child->tre
e()->nextSibling()) |
| 2002 if (!child->loader()->logCanCacheFrameDecision(indentLevel + 1)) | 2022 if (!child->loader()->logCanCacheFrameDecision(indentLevel + 1)) |
| 2003 cannotCache = true; | 2023 cannotCache = true; |
| 2004 | 2024 |
| 2005 PCLOG(cannotCache ? " Frame CANNOT be cached" : " Frame CAN be cached"); | 2025 PCLOG(cannotCache ? " Frame CANNOT be cached" : " Frame CAN be cached"); |
| 2006 PCLOG("+---"); | 2026 PCLOG("+---"); |
| (...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2881 return; | 2901 return; |
| 2882 | 2902 |
| 2883 // Nothing else can interupt this commit - set the Provisional->Committed tr
ansition in stone | 2903 // Nothing else can interupt this commit - set the Provisional->Committed tr
ansition in stone |
| 2884 if (m_documentLoader) | 2904 if (m_documentLoader) |
| 2885 m_documentLoader->stopLoadingSubresources(); | 2905 m_documentLoader->stopLoadingSubresources(); |
| 2886 if (m_documentLoader) | 2906 if (m_documentLoader) |
| 2887 m_documentLoader->stopLoadingPlugIns(); | 2907 m_documentLoader->stopLoadingPlugIns(); |
| 2888 | 2908 |
| 2889 setDocumentLoader(m_provisionalDocumentLoader.get()); | 2909 setDocumentLoader(m_provisionalDocumentLoader.get()); |
| 2890 setProvisionalDocumentLoader(0); | 2910 setProvisionalDocumentLoader(0); |
| 2911 #if ENABLE(APPLICATION_CACHE) |
| 2912 selectInitialApplicationCache(); |
| 2913 #endif |
| 2891 setState(FrameStateCommittedPage); | 2914 setState(FrameStateCommittedPage); |
| 2892 | 2915 |
| 2893 // Handle adding the URL to the back/forward list. | 2916 // Handle adding the URL to the back/forward list. |
| 2894 DocumentLoader* dl = m_documentLoader.get(); | 2917 DocumentLoader* dl = m_documentLoader.get(); |
| 2895 String ptitle = dl->title(); | 2918 String ptitle = dl->title(); |
| 2896 | 2919 |
| 2897 switch (m_loadType) { | 2920 switch (m_loadType) { |
| 2898 case FrameLoadTypeForward: | 2921 case FrameLoadTypeForward: |
| 2899 case FrameLoadTypeBack: | 2922 case FrameLoadTypeBack: |
| 2900 case FrameLoadTypeIndexedBackForward: | 2923 case FrameLoadTypeIndexedBackForward: |
| (...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3566 void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadTyp
e loadType, bool mainResource, bool cookiePolicyURLFromRequest) | 3589 void FrameLoader::addExtraFieldsToRequest(ResourceRequest& request, FrameLoadTyp
e loadType, bool mainResource, bool cookiePolicyURLFromRequest) |
| 3567 { | 3590 { |
| 3568 // Don't set the cookie policy URL if it's already been set. | 3591 // Don't set the cookie policy URL if it's already been set. |
| 3569 // But make sure to set it on all requests, as it has significance beyond th
e cookie policy for all protocols (<rdar://problem/6616664>). | 3592 // But make sure to set it on all requests, as it has significance beyond th
e cookie policy for all protocols (<rdar://problem/6616664>). |
| 3570 if (request.firstPartyForCookies().isEmpty()) { | 3593 if (request.firstPartyForCookies().isEmpty()) { |
| 3571 if (mainResource && (isLoadingMainFrame() || cookiePolicyURLFromRequest)
) | 3594 if (mainResource && (isLoadingMainFrame() || cookiePolicyURLFromRequest)
) |
| 3572 request.setFirstPartyForCookies(request.url()); | 3595 request.setFirstPartyForCookies(request.url()); |
| 3573 else if (Document* document = m_frame->document()) | 3596 else if (Document* document = m_frame->document()) |
| 3574 request.setFirstPartyForCookies(document->firstPartyForCookies()); | 3597 request.setFirstPartyForCookies(document->firstPartyForCookies()); |
| 3575 } | 3598 } |
| 3599 |
| 3600 #if ENABLE(APPLICATION_CACHE) |
| 3601 appcacheFrontend()->addExtraFieldsToRequest(request, mainResource); |
| 3602 #endif |
| 3576 | 3603 |
| 3577 // The remaining modifications are only necessary for HTTP and HTTPS. | 3604 // The remaining modifications are only necessary for HTTP and HTTPS. |
| 3578 if (!request.url().isEmpty() && !request.url().protocolInHTTPFamily()) | 3605 if (!request.url().isEmpty() && !request.url().protocolInHTTPFamily()) |
| 3579 return; | 3606 return; |
| 3580 | 3607 |
| 3581 applyUserAgent(request); | 3608 applyUserAgent(request); |
| 3582 | 3609 |
| 3583 if (loadType == FrameLoadTypeReload) { | 3610 if (loadType == FrameLoadTypeReload) { |
| 3584 request.setCachePolicy(ReloadIgnoringCacheData); | 3611 request.setCachePolicy(ReloadIgnoringCacheData); |
| 3585 request.setHTTPHeaderField("Cache-Control", "max-age=0"); | 3612 request.setHTTPHeaderField("Cache-Control", "max-age=0"); |
| (...skipping 1688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5274 ResourceRequest request(resource->url()); | 5301 ResourceRequest request(resource->url()); |
| 5275 m_client->dispatchDidLoadResourceFromMemoryCache(m_documentLoader.get(),
request, resource->response(), resource->encodedSize()); | 5302 m_client->dispatchDidLoadResourceFromMemoryCache(m_documentLoader.get(),
request, resource->response(), resource->encodedSize()); |
| 5276 } | 5303 } |
| 5277 } | 5304 } |
| 5278 | 5305 |
| 5279 bool FrameLoaderClient::hasHTMLView() const | 5306 bool FrameLoaderClient::hasHTMLView() const |
| 5280 { | 5307 { |
| 5281 return true; | 5308 return true; |
| 5282 } | 5309 } |
| 5283 | 5310 |
| 5311 #if ENABLE(APPLICATION_CACHE) |
| 5312 |
| 5313 ApplicationCacheFrontend* FrameLoader::appcacheFrontend() const |
| 5314 { |
| 5315 return m_appcacheFrontend.get(); |
| 5316 } |
| 5317 |
| 5318 void FrameLoader::selectInitialApplicationCache() |
| 5319 { |
| 5320 const KURL& docURL = m_frame->document()->url(); |
| 5321 const ResourceResponse& docResponse = documentLoader()->response(); |
| 5322 appcacheFrontend()->selectInitialCache(docURL, |
| 5323 docResponse.applicationCacheID()); |
| 5324 } |
| 5325 |
| 5326 void FrameLoader::selectApplicationCacheWithoutManifest() |
| 5327 { |
| 5328 const KURL& docURL = m_frame->document()->url(); |
| 5329 const ResourceResponse& docResponse = documentLoader()->response(); |
| 5330 appcacheFrontend()->selectCacheWithoutManifest( |
| 5331 docURL, |
| 5332 docResponse.applicationCacheID()); |
| 5333 } |
| 5334 |
| 5335 void FrameLoader::selectApplicationCacheWithManifest(const KURL& manifestURL) |
| 5336 { |
| 5337 const KURL& docURL = m_frame->document()->url(); |
| 5338 const ResourceResponse& docResponse = documentLoader()->response(); |
| 5339 if (!appcacheFrontend()->selectCacheWithManifest( |
| 5340 docURL, |
| 5341 docResponse.applicationCacheID(), |
| 5342 docResponse.manifestURL(), |
| 5343 manifestURL)) { |
| 5344 // It's a foreign entry, restart the current navigation from the top of
the navigation algorithm. |
| 5345 // The navigation will not result in the same resource being loaded, bec
ause "foreign" entries are |
| 5346 // never picked during navigation. |
| 5347 scheduleLocationChange(docURL, referrer(), true); |
| 5348 } |
| 5349 } |
| 5350 #endif |
| 5351 |
| 5284 } // namespace WebCore | 5352 } // namespace WebCore |
| OLD | NEW |