diff options
Diffstat (limited to 'WebCore/loader')
-rw-r--r-- | WebCore/loader/Cache.cpp | 16 | ||||
-rw-r--r-- | WebCore/loader/CachedFont.cpp | 6 | ||||
-rw-r--r-- | WebCore/loader/CachedFont.h | 3 | ||||
-rw-r--r-- | WebCore/loader/CachedImage.cpp | 2 | ||||
-rw-r--r-- | WebCore/loader/DocumentLoader.cpp | 21 | ||||
-rw-r--r-- | WebCore/loader/DocumentLoader.h | 5 | ||||
-rw-r--r-- | WebCore/loader/EmptyClients.h | 7 | ||||
-rw-r--r-- | WebCore/loader/FrameLoader.cpp | 23 | ||||
-rw-r--r-- | WebCore/loader/FrameLoader.h | 6 | ||||
-rw-r--r-- | WebCore/loader/FrameLoaderClient.h | 5 | ||||
-rw-r--r-- | WebCore/loader/MainResourceLoader.cpp | 3 | ||||
-rw-r--r-- | WebCore/loader/PolicyCallback.cpp | 7 | ||||
-rw-r--r-- | WebCore/loader/PolicyCallback.h | 8 | ||||
-rw-r--r-- | WebCore/loader/PolicyChecker.cpp | 2 | ||||
-rw-r--r-- | WebCore/loader/ThreadableLoaderClient.h | 2 | ||||
-rw-r--r-- | WebCore/loader/appcache/ApplicationCacheHost.cpp | 6 | ||||
-rw-r--r-- | WebCore/loader/appcache/ApplicationCacheHost.h | 1 |
17 files changed, 89 insertions, 34 deletions
diff --git a/WebCore/loader/Cache.cpp b/WebCore/loader/Cache.cpp index 6ef65c0..7dc8a32 100644 --- a/WebCore/loader/Cache.cpp +++ b/WebCore/loader/Cache.cpp @@ -754,16 +754,16 @@ void Cache::setDisabled(bool disabled) void Cache::dumpStats() { Statistics s = getStatistics(); - printf("%-11s %-11s %-11s %-11s %-11s %-11s %-11s\n", "", "Count", "Size", "LiveSize", "DecodedSize", "PurgeableSize", "PurgedSize"); - printf("%-11s %-11s %-11s %-11s %-11s %-11s %-11s\n", "-----------", "-----------", "-----------", "-----------", "-----------", "-----------", "-----------"); - printf("%-11s %11d %11d %11d %11d %11d %11d\n", "Images", s.images.count, s.images.size, s.images.liveSize, s.images.decodedSize, s.images.purgeableSize, s.images.purgedSize); - printf("%-11s %11d %11d %11d %11d %11d %11d\n", "CSS", s.cssStyleSheets.count, s.cssStyleSheets.size, s.cssStyleSheets.liveSize, s.cssStyleSheets.decodedSize, s.cssStyleSheets.purgeableSize, s.cssStyleSheets.purgedSize); + printf("%-13s %-13s %-13s %-13s %-13s %-13s %-13s\n", "", "Count", "Size", "LiveSize", "DecodedSize", "PurgeableSize", "PurgedSize"); + printf("%-13s %-13s %-13s %-13s %-13s %-13s %-13s\n", "-------------", "-------------", "-------------", "-------------", "-------------", "-------------", "-------------"); + printf("%-13s %13d %13d %13d %13d %13d %13d\n", "Images", s.images.count, s.images.size, s.images.liveSize, s.images.decodedSize, s.images.purgeableSize, s.images.purgedSize); + printf("%-13s %13d %13d %13d %13d %13d %13d\n", "CSS", s.cssStyleSheets.count, s.cssStyleSheets.size, s.cssStyleSheets.liveSize, s.cssStyleSheets.decodedSize, s.cssStyleSheets.purgeableSize, s.cssStyleSheets.purgedSize); #if ENABLE(XSLT) - printf("%-11s %11d %11d %11d %11d %11d %11d\n", "XSL", s.xslStyleSheets.count, s.xslStyleSheets.size, s.xslStyleSheets.liveSize, s.xslStyleSheets.decodedSize, s.xslStyleSheets.purgeableSize, s.xslStyleSheets.purgedSize); + printf("%-13s %13d %13d %13d %13d %13d %13d\n", "XSL", s.xslStyleSheets.count, s.xslStyleSheets.size, s.xslStyleSheets.liveSize, s.xslStyleSheets.decodedSize, s.xslStyleSheets.purgeableSize, s.xslStyleSheets.purgedSize); #endif - printf("%-11s %11d %11d %11d %11d %11d %11d\n", "JavaScript", s.scripts.count, s.scripts.size, s.scripts.liveSize, s.scripts.decodedSize, s.scripts.purgeableSize, s.scripts.purgedSize); - printf("%-11s %11d %11d %11d %11d %11d %11d\n", "Fonts", s.fonts.count, s.fonts.size, s.fonts.liveSize, s.fonts.decodedSize, s.fonts.purgeableSize, s.fonts.purgedSize); - printf("%-11s %-11s %-11s %-11s %-11s %-11s %-11s\n\n", "-----------", "-----------", "-----------", "-----------", "-----------", "-----------", "-----------"); + printf("%-13s %13d %13d %13d %13d %13d %13d\n", "JavaScript", s.scripts.count, s.scripts.size, s.scripts.liveSize, s.scripts.decodedSize, s.scripts.purgeableSize, s.scripts.purgedSize); + printf("%-13s %13d %13d %13d %13d %13d %13d\n", "Fonts", s.fonts.count, s.fonts.size, s.fonts.liveSize, s.fonts.decodedSize, s.fonts.purgeableSize, s.fonts.purgedSize); + printf("%-13s %-13s %-13s %-13s %-13s %-13s %-13s\n\n", "-------------", "-------------", "-------------", "-------------", "-------------", "-------------", "-------------"); } void Cache::dumpLRULists(bool includeLive) const diff --git a/WebCore/loader/CachedFont.cpp b/WebCore/loader/CachedFont.cpp index ef88af8..e8db6c6 100644 --- a/WebCore/loader/CachedFont.cpp +++ b/WebCore/loader/CachedFont.cpp @@ -27,7 +27,7 @@ #include "config.h" #include "CachedFont.h" -#if PLATFORM(CG) || PLATFORM(QT) || PLATFORM(GTK) || (PLATFORM(CHROMIUM) && (OS(WINDOWS) || OS(LINUX) || OS(FREEBSD))) || PLATFORM(HAIKU) || OS(WINCE) || PLATFORM(ANDROID) +#if PLATFORM(CG) || PLATFORM(QT) || PLATFORM(GTK) || (PLATFORM(CHROMIUM) && (OS(WINDOWS) || OS(LINUX) || OS(FREEBSD))) || PLATFORM(HAIKU) || OS(WINCE) || PLATFORM(ANDROID) || PLATFORM(BREWMP) #define STORE_FONT_CUSTOM_PLATFORM_DATA #endif @@ -117,7 +117,7 @@ bool CachedFont::ensureCustomFontData() return m_fontData; } -FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, bool italic, FontRenderingMode renderingMode) +FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation orientation, FontRenderingMode renderingMode) { #if ENABLE(SVG_FONTS) if (m_externalSVGDocument) @@ -125,7 +125,7 @@ FontPlatformData CachedFont::platformDataFromCustomData(float size, bool bold, b #endif #ifdef STORE_FONT_CUSTOM_PLATFORM_DATA ASSERT(m_fontData); - return m_fontData->fontPlatformData(static_cast<int>(size), bold, italic, renderingMode); + return m_fontData->fontPlatformData(static_cast<int>(size), bold, italic, orientation, renderingMode); #else return FontPlatformData(); #endif diff --git a/WebCore/loader/CachedFont.h b/WebCore/loader/CachedFont.h index 95c2423..8dc8874 100644 --- a/WebCore/loader/CachedFont.h +++ b/WebCore/loader/CachedFont.h @@ -27,6 +27,7 @@ #define CachedFont_h #include "CachedResource.h" +#include "FontOrientation.h" #include "FontRenderingMode.h" #include <wtf/Vector.h> @@ -62,7 +63,7 @@ public: void beginLoadIfNeeded(CachedResourceLoader* dl); bool ensureCustomFontData(); - FontPlatformData platformDataFromCustomData(float size, bool bold, bool italic, FontRenderingMode = NormalRenderingMode); + FontPlatformData platformDataFromCustomData(float size, bool bold, bool italic, FontOrientation = Horizontal, FontRenderingMode = NormalRenderingMode); #if ENABLE(SVG_FONTS) bool isSVGFont() const { return m_isSVGFont; } diff --git a/WebCore/loader/CachedImage.cpp b/WebCore/loader/CachedImage.cpp index 641ce94..30eaf9d 100644 --- a/WebCore/loader/CachedImage.cpp +++ b/WebCore/loader/CachedImage.cpp @@ -241,7 +241,7 @@ inline void CachedImage::createImage() // Create the image if it doesn't yet exist. if (m_image) return; -#if PLATFORM(CG) +#if PLATFORM(CG) && !USE(WEBKIT_IMAGE_DECODERS) if (m_response.mimeType() == "application/pdf") { m_image = PDFDocumentImage::create(); return; diff --git a/WebCore/loader/DocumentLoader.cpp b/WebCore/loader/DocumentLoader.cpp index 2c113c3..5707530 100644 --- a/WebCore/loader/DocumentLoader.cpp +++ b/WebCore/loader/DocumentLoader.cpp @@ -799,6 +799,27 @@ void DocumentLoader::subresourceLoaderFinishedLoadingOnePart(ResourceLoader* loa frame->loader()->checkLoadComplete(); } +void DocumentLoader::transferLoadingResourcesFromPage(Page* oldPage) +{ + ASSERT(oldPage != m_frame->page()); + + FrameLoaderClient* frameLoaderClient = frameLoader()->client(); + const ResourceRequest& request = originalRequest(); + if (isLoadingMainResource()) { + frameLoaderClient->transferLoadingResourceFromPage( + m_mainResourceLoader->identifier(), this, request, oldPage); + } + + if (isLoadingSubresources()) { + ResourceLoaderSet::const_iterator it = m_subresourceLoaders.begin(); + ResourceLoaderSet::const_iterator end = m_subresourceLoaders.end(); + for (; it != end; ++it) { + frameLoaderClient->transferLoadingResourceFromPage( + (*it)->identifier(), this, request, oldPage); + } + } +} + void DocumentLoader::iconLoadDecisionAvailable() { if (m_frame) diff --git a/WebCore/loader/DocumentLoader.h b/WebCore/loader/DocumentLoader.h index ebb6525..2328160 100644 --- a/WebCore/loader/DocumentLoader.h +++ b/WebCore/loader/DocumentLoader.h @@ -48,6 +48,7 @@ namespace WebCore { class Frame; class FrameLoader; class MainResourceLoader; + class Page; class ResourceLoader; class SchedulePair; class SharedBuffer; @@ -199,7 +200,9 @@ namespace WebCore { void removePlugInStreamLoader(ResourceLoader*); void subresourceLoaderFinishedLoadingOnePart(ResourceLoader*); - + + void transferLoadingResourcesFromPage(Page*); + void setDeferMainResourceDataLoad(bool defer) { m_deferMainResourceDataLoad = defer; } bool deferMainResourceDataLoad() const { return m_deferMainResourceDataLoad; } diff --git a/WebCore/loader/EmptyClients.h b/WebCore/loader/EmptyClients.h index 6fb003e..59be8b1 100644 --- a/WebCore/loader/EmptyClients.h +++ b/WebCore/loader/EmptyClients.h @@ -107,7 +107,7 @@ public: virtual void focusedNodeChanged(Node*) { } - virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&) { return 0; } + virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) { return 0; } virtual void show() { } virtual bool canRunModal() { return false; } @@ -263,7 +263,7 @@ public: virtual void dispatchDidFirstLayout() { } virtual void dispatchDidFirstVisuallyNonEmptyLayout() { } - virtual Frame* dispatchCreatePage() { return 0; } + virtual Frame* dispatchCreatePage(const NavigationAction&) { return 0; } virtual void dispatchShow() { } virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String&, const ResourceRequest&) { } @@ -329,6 +329,8 @@ public: virtual void transitionToCommittedFromCachedFrame(CachedFrame*) { } virtual void transitionToCommittedForNewPage() { } + virtual void dispatchDidBecomeFrameset(bool) { } + virtual void updateGlobalHistory() { } virtual void updateGlobalHistoryRedirectLinks() { } virtual bool shouldGoToHistoryItem(HistoryItem*) const { return false; } @@ -341,6 +343,7 @@ public: virtual void didRunInsecureContent(SecurityOrigin*) { } virtual PassRefPtr<Frame> createFrame(const KURL&, const String&, HTMLFrameOwnerElement*, const String&, bool, int, int) { return 0; } virtual void didTransferChildFrameToNewDocument(Page*) { } + virtual void transferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*) { } virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool) { return 0; } virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&) { return 0; } #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp index 03b6ab1..8a2adee 100644 --- a/WebCore/loader/FrameLoader.cpp +++ b/WebCore/loader/FrameLoader.cpp @@ -1453,6 +1453,9 @@ void FrameLoader::load(DocumentLoader* newDocumentLoader) void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType type, PassRefPtr<FormState> prpFormState) { + // Retain because dispatchBeforeLoadEvent may release the last reference to it. + RefPtr<Frame> protect(m_frame); + ASSERT(m_client->hasWebView()); // Unfortunately the view must be non-nil, this is ultimately due @@ -1761,6 +1764,13 @@ bool FrameLoader::frameHasLoaded() const return m_stateMachine.committedFirstRealDocumentLoad() || (m_provisionalDocumentLoader && !m_stateMachine.creatingInitialEmptyDocument()); } +void FrameLoader::transferLoadingResourcesFromPage(Page* oldPage) +{ + ASSERT(oldPage != m_frame->page()); + if (isLoading()) + activeDocumentLoader()->transferLoadingResourcesFromPage(oldPage); +} + void FrameLoader::setDocumentLoader(DocumentLoader* loader) { if (!loader && !m_documentLoader) @@ -2994,20 +3004,20 @@ void FrameLoader::continueLoadAfterNavigationPolicy(const ResourceRequest&, Pass } void FrameLoader::callContinueLoadAfterNewWindowPolicy(void* argument, - const ResourceRequest& request, PassRefPtr<FormState> formState, const String& frameName, bool shouldContinue) + const ResourceRequest& request, PassRefPtr<FormState> formState, const String& frameName, const NavigationAction& action, bool shouldContinue) { FrameLoader* loader = static_cast<FrameLoader*>(argument); - loader->continueLoadAfterNewWindowPolicy(request, formState, frameName, shouldContinue); + loader->continueLoadAfterNewWindowPolicy(request, formState, frameName, action, shouldContinue); } void FrameLoader::continueLoadAfterNewWindowPolicy(const ResourceRequest& request, - PassRefPtr<FormState> formState, const String& frameName, bool shouldContinue) + PassRefPtr<FormState> formState, const String& frameName, const NavigationAction& action, bool shouldContinue) { if (!shouldContinue) return; RefPtr<Frame> frame = m_frame; - RefPtr<Frame> mainFrame = m_client->dispatchCreatePage(); + RefPtr<Frame> mainFrame = m_client->dispatchCreatePage(action); if (!mainFrame) return; @@ -3134,7 +3144,7 @@ void FrameLoader::checkDidPerformFirstNavigation() if (!page) return; - if (!m_didPerformFirstNavigation && page->backForwardList()->entries().size() == 1) { + if (!m_didPerformFirstNavigation && page->backForwardList()->currentItem() && !page->backForwardList()->backItem() && !page->backForwardList()->forwardItem()) { m_didPerformFirstNavigation = true; m_client->didPerformFirstNavigation(); } @@ -3506,7 +3516,8 @@ Frame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadReque if (!oldPage) return 0; - Page* page = oldPage->chrome()->createWindow(openerFrame, requestWithReferrer, features); + NavigationAction action; + Page* page = oldPage->chrome()->createWindow(openerFrame, requestWithReferrer, features, action); if (!page) return 0; diff --git a/WebCore/loader/FrameLoader.h b/WebCore/loader/FrameLoader.h index 63730bf..b07ed27 100644 --- a/WebCore/loader/FrameLoader.h +++ b/WebCore/loader/FrameLoader.h @@ -70,6 +70,7 @@ class HTMLFormElement; class IconLoader; class NavigationAction; class NetworkingContext; +class Page; class ProtectionSpace; class ResourceError; class ResourceLoader; @@ -136,6 +137,7 @@ public: bool isLoadingMainResource() const { return m_isLoadingMainResource; } bool isLoading() const; bool frameHasLoaded() const; + void transferLoadingResourcesFromPage(Page*); int numPendingOrLoadingRequests(bool recurse) const; String referrer() const; @@ -368,11 +370,11 @@ private: void setLoadType(FrameLoadType); static void callContinueLoadAfterNavigationPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue); - static void callContinueLoadAfterNewWindowPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, bool shouldContinue); + static void callContinueLoadAfterNewWindowPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, bool shouldContinue); static void callContinueFragmentScrollAfterNavigationPolicy(void*, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue); void continueLoadAfterNavigationPolicy(const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue); - void continueLoadAfterNewWindowPolicy(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, bool shouldContinue); + void continueLoadAfterNewWindowPolicy(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, bool shouldContinue); void continueFragmentScrollAfterNavigationPolicy(const ResourceRequest&, bool shouldContinue); bool shouldScrollToAnchor(bool isFormSubmission, FrameLoadType, const KURL&); diff --git a/WebCore/loader/FrameLoaderClient.h b/WebCore/loader/FrameLoaderClient.h index 1855d5a..7348293 100644 --- a/WebCore/loader/FrameLoaderClient.h +++ b/WebCore/loader/FrameLoaderClient.h @@ -140,7 +140,7 @@ namespace WebCore { virtual void dispatchDidFirstLayout() = 0; virtual void dispatchDidFirstVisuallyNonEmptyLayout() = 0; - virtual Frame* dispatchCreatePage() = 0; + virtual Frame* dispatchCreatePage(const NavigationAction&) = 0; virtual void dispatchShow() = 0; virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction, const String& MIMEType, const ResourceRequest&) = 0; @@ -224,12 +224,15 @@ namespace WebCore { virtual void transitionToCommittedFromCachedFrame(CachedFrame*) = 0; virtual void transitionToCommittedForNewPage() = 0; + virtual void dispatchDidBecomeFrameset(bool) = 0; // Can change due to navigation or DOM modification. + virtual bool canCachePage() const = 0; virtual void download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&) = 0; virtual PassRefPtr<Frame> createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement, const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) = 0; virtual void didTransferChildFrameToNewDocument(Page* oldPage) = 0; + virtual void transferLoadingResourceFromPage(unsigned long identifier, DocumentLoader*, const ResourceRequest&, Page* oldPage) = 0; virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually) = 0; virtual void redirectDataToPlugin(Widget* pluginWidget) = 0; diff --git a/WebCore/loader/MainResourceLoader.cpp b/WebCore/loader/MainResourceLoader.cpp index af30a11..7e5eb90 100644 --- a/WebCore/loader/MainResourceLoader.cpp +++ b/WebCore/loader/MainResourceLoader.cpp @@ -202,9 +202,8 @@ void MainResourceLoader::willSendRequest(ResourceRequest& newRequest, const Reso #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); + documentLoader()->applicationCacheHost()->maybeLoadMainResourceForRedirect(newRequest, m_substituteData); } #endif diff --git a/WebCore/loader/PolicyCallback.cpp b/WebCore/loader/PolicyCallback.cpp index 14799cf..4ec2c84 100644 --- a/WebCore/loader/PolicyCallback.cpp +++ b/WebCore/loader/PolicyCallback.cpp @@ -71,11 +71,12 @@ void PolicyCallback::set(const ResourceRequest& request, PassRefPtr<FormState> f } void PolicyCallback::set(const ResourceRequest& request, PassRefPtr<FormState> formState, - const String& frameName, NewWindowPolicyDecisionFunction function, void* argument) + const String& frameName, const NavigationAction& navigationAction, NewWindowPolicyDecisionFunction function, void* argument) { m_request = request; m_formState = formState; m_frameName = frameName; + m_navigationAction = navigationAction; m_navigationFunction = 0; m_newWindowFunction = function; @@ -100,7 +101,7 @@ void PolicyCallback::call(bool shouldContinue) if (m_navigationFunction) m_navigationFunction(m_argument, m_request, m_formState.get(), shouldContinue); if (m_newWindowFunction) - m_newWindowFunction(m_argument, m_request, m_formState.get(), m_frameName, shouldContinue); + m_newWindowFunction(m_argument, m_request, m_formState.get(), m_frameName, m_navigationAction, shouldContinue); ASSERT(!m_contentFunction); } @@ -125,7 +126,7 @@ void PolicyCallback::cancel() if (m_navigationFunction) m_navigationFunction(m_argument, m_request, m_formState.get(), false); if (m_newWindowFunction) - m_newWindowFunction(m_argument, m_request, m_formState.get(), m_frameName, false); + m_newWindowFunction(m_argument, m_request, m_formState.get(), m_frameName, m_navigationAction, false); if (m_contentFunction) m_contentFunction(m_argument, PolicyIgnore); } diff --git a/WebCore/loader/PolicyCallback.h b/WebCore/loader/PolicyCallback.h index 757fff8..415a3e3 100644 --- a/WebCore/loader/PolicyCallback.h +++ b/WebCore/loader/PolicyCallback.h @@ -31,9 +31,10 @@ #define PolicyCallback_h #include "FrameLoaderTypes.h" -#include "PlatformString.h" +#include "NavigationAction.h" #include "ResourceRequest.h" #include <wtf/RefPtr.h> +#include <wtf/text/WTFString.h> namespace WebCore { @@ -42,7 +43,7 @@ class FormState; typedef void (*NavigationPolicyDecisionFunction)(void* argument, const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue); typedef void (*NewWindowPolicyDecisionFunction)(void* argument, - const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, bool shouldContinue); + const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, bool shouldContinue); typedef void (*ContentPolicyDecisionFunction)(void* argument, PolicyAction); class PolicyCallback { @@ -53,7 +54,7 @@ public: void clear(); void set(const ResourceRequest&, PassRefPtr<FormState>, NavigationPolicyDecisionFunction, void* argument); - void set(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, + void set(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, NewWindowPolicyDecisionFunction, void* argument); void set(ContentPolicyDecisionFunction, void* argument); @@ -68,6 +69,7 @@ private: ResourceRequest m_request; RefPtr<FormState> m_formState; String m_frameName; + NavigationAction m_navigationAction; NavigationPolicyDecisionFunction m_navigationFunction; NewWindowPolicyDecisionFunction m_newWindowFunction; diff --git a/WebCore/loader/PolicyChecker.cpp b/WebCore/loader/PolicyChecker.cpp index 196ab4f..2680386 100644 --- a/WebCore/loader/PolicyChecker.cpp +++ b/WebCore/loader/PolicyChecker.cpp @@ -92,7 +92,7 @@ void PolicyChecker::checkNavigationPolicy(const ResourceRequest& request, Docume void PolicyChecker::checkNewWindowPolicy(const NavigationAction& action, NewWindowPolicyDecisionFunction function, const ResourceRequest& request, PassRefPtr<FormState> formState, const String& frameName, void* argument) { - m_callback.set(request, formState, frameName, function, argument); + m_callback.set(request, formState, frameName, action, function, argument); m_frame->loader()->client()->dispatchDecidePolicyForNewWindowAction(&PolicyChecker::continueAfterNewWindowPolicy, action, request, formState, frameName); } diff --git a/WebCore/loader/ThreadableLoaderClient.h b/WebCore/loader/ThreadableLoaderClient.h index b8a6584..bcf68be 100644 --- a/WebCore/loader/ThreadableLoaderClient.h +++ b/WebCore/loader/ThreadableLoaderClient.h @@ -31,6 +31,8 @@ #ifndef ThreadableLoaderClient_h #define ThreadableLoaderClient_h +#include <wtf/Noncopyable.h> + namespace WebCore { class ResourceError; diff --git a/WebCore/loader/appcache/ApplicationCacheHost.cpp b/WebCore/loader/appcache/ApplicationCacheHost.cpp index f613729..d5707cf 100644 --- a/WebCore/loader/appcache/ApplicationCacheHost.cpp +++ b/WebCore/loader/appcache/ApplicationCacheHost.cpp @@ -91,6 +91,12 @@ void ApplicationCacheHost::maybeLoadMainResource(ResourceRequest& request, Subst } } +void ApplicationCacheHost::maybeLoadMainResourceForRedirect(ResourceRequest& request, SubstituteData& substituteData) +{ + ASSERT(status() == UNCACHED); + maybeLoadMainResource(request, substituteData); +} + bool ApplicationCacheHost::maybeLoadFallbackForMainResponse(const ResourceRequest& request, const ResourceResponse& r) { if (r.httpStatusCode() / 100 == 4 || r.httpStatusCode() / 100 == 5) { diff --git a/WebCore/loader/appcache/ApplicationCacheHost.h b/WebCore/loader/appcache/ApplicationCacheHost.h index 667205d..8ac5357 100644 --- a/WebCore/loader/appcache/ApplicationCacheHost.h +++ b/WebCore/loader/appcache/ApplicationCacheHost.h @@ -122,6 +122,7 @@ namespace WebCore { void selectCacheWithManifest(const KURL& manifestURL); void maybeLoadMainResource(ResourceRequest&, SubstituteData&); + void maybeLoadMainResourceForRedirect(ResourceRequest&, SubstituteData&); bool maybeLoadFallbackForMainResponse(const ResourceRequest&, const ResourceResponse&); bool maybeLoadFallbackForMainError(const ResourceRequest&, const ResourceError&); void mainResourceDataReceived(const char* data, int length, long long lengthReceived, bool allAtOnce); |