diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/loader/FrameLoader.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/loader/FrameLoader.h')
-rw-r--r-- | Source/WebCore/loader/FrameLoader.h | 188 |
1 files changed, 99 insertions, 89 deletions
diff --git a/Source/WebCore/loader/FrameLoader.h b/Source/WebCore/loader/FrameLoader.h index 4244bf30a..f956e1687 100644 --- a/Source/WebCore/loader/FrameLoader.h +++ b/Source/WebCore/loader/FrameLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006, 2007, 2008, 2009, 2011, 2013 Apple Inc. All rights reserved. + * Copyright (C) 2006-2016 Apple Inc. All rights reserved. * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) * Copyright (C) Research In Motion Limited 2009. All rights reserved. * Copyright (C) 2011 Google Inc. All rights reserved. @@ -13,7 +13,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * 3. Neither the name of Apple Inc. ("Apple") nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * @@ -29,25 +29,27 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef FrameLoader_h -#define FrameLoader_h +#pragma once #include "CachePolicy.h" #include "FrameLoaderStateMachine.h" #include "FrameLoaderTypes.h" -#include "IconURL.h" #include "LayoutMilestones.h" #include "MixedContentChecker.h" #include "ResourceHandleTypes.h" #include "ResourceLoadNotifier.h" +#include "ResourceLoaderOptions.h" +#include "ResourceRequestBase.h" #include "SecurityContext.h" #include "Timer.h" #include <wtf/Forward.h> #include <wtf/HashSet.h> +#include <wtf/Optional.h> namespace WebCore { class Archive; +class CachedFrame; class CachedFrameBase; class CachedPage; class CachedResource; @@ -66,21 +68,19 @@ class IconController; class NavigationAction; class NetworkingContext; class Page; -class PageActivityAssertionToken; class PolicyChecker; class ResourceError; class ResourceRequest; class ResourceResponse; -class SecurityOrigin; class SerializedScriptValue; -class StringWithDirection; +class SharedBuffer; class SubframeLoader; class SubstituteData; struct FrameLoadRequest; struct WindowFeatures; -bool isBackForwardLoadType(FrameLoadType); +WEBCORE_EXPORT bool isBackForwardLoadType(FrameLoadType); class FrameLoader { WTF_MAKE_NONCOPYABLE(FrameLoader); @@ -88,7 +88,7 @@ public: FrameLoader(Frame&, FrameLoaderClient&); ~FrameLoader(); - void init(); + WEBCORE_EXPORT void init(); #if PLATFORM(IOS) void initForSynthesizedDocument(const URL&); #endif @@ -102,40 +102,38 @@ public: IconController& icon() const { return *m_icon; } MixedContentChecker& mixedContentChecker() const { return m_mixedContentChecker; } - void prepareForHistoryNavigation(); void setupForReplace(); // FIXME: These are all functions which start loads. We have too many. - void loadURLIntoChildFrame(const URL&, const String& referer, Frame*); - void loadFrameRequest(const FrameLoadRequest&, bool lockHistory, bool lockBackForwardList, // Called by submitForm, calls loadPostRequest and loadURL. - PassRefPtr<Event>, PassRefPtr<FormState>, ShouldSendReferrer); + WEBCORE_EXPORT void loadURLIntoChildFrame(const URL&, const String& referer, Frame*); + WEBCORE_EXPORT void loadFrameRequest(const FrameLoadRequest&, Event*, FormState*); // Called by submitForm, calls loadPostRequest and loadURL. - void load(const FrameLoadRequest&); + WEBCORE_EXPORT void load(const FrameLoadRequest&); #if ENABLE(WEB_ARCHIVE) || ENABLE(MHTML) - void loadArchive(PassRefPtr<Archive>); + WEBCORE_EXPORT void loadArchive(Ref<Archive>&&); #endif - unsigned long loadResourceSynchronously(const ResourceRequest&, StoredCredentials, ClientCredentialPolicy, ResourceError&, ResourceResponse&, Vector<char>& data); + unsigned long loadResourceSynchronously(const ResourceRequest&, StoredCredentials, ClientCredentialPolicy, ResourceError&, ResourceResponse&, RefPtr<SharedBuffer>& data); - void changeLocation(SecurityOrigin*, const URL&, const String& referrer, bool lockHistory = true, bool lockBackForwardList = true, bool refresh = false); - void urlSelected(const URL&, const String& target, PassRefPtr<Event>, bool lockHistory, bool lockBackForwardList, ShouldSendReferrer); - void submitForm(PassRefPtr<FormSubmission>); + void changeLocation(const FrameLoadRequest&); + WEBCORE_EXPORT void urlSelected(const URL&, const String& target, Event*, LockHistory, LockBackForwardList, ShouldSendReferrer, ShouldOpenExternalURLsPolicy, std::optional<NewFrameOpenerPolicy> = std::nullopt, const AtomicString& downloadAttribute = nullAtom); + void submitForm(Ref<FormSubmission>&&); - void reload(bool endToEndReload = false); - void reloadWithOverrideEncoding(const String& overrideEncoding); - void reloadWithOverrideURL(const URL& overrideUrl, bool endToEndReload = false); + WEBCORE_EXPORT void reload(bool endToEndReload = false, bool contentBlockersEnabled = true); + WEBCORE_EXPORT void reloadWithOverrideEncoding(const String& overrideEncoding); void open(CachedFrameBase&); - void loadItem(HistoryItem*, FrameLoadType); + void loadItem(HistoryItem&, FrameLoadType); HistoryItem* requestedHistoryItem() const { return m_requestedHistoryItem.get(); } void retryAfterFailedCacheOnlyMainResourceLoad(); static void reportLocalLoadFailed(Frame*, const String& url); + static void reportBlockedPortFailed(Frame*, const String& url); // FIXME: These are all functions which stop loads. We have too many. - void stopAllLoaders(ClearProvisionalItemPolicy = ShouldClearProvisionalItem); - void stopForUserCancel(bool deferCheckLoadComplete = false); + WEBCORE_EXPORT void stopAllLoaders(ClearProvisionalItemPolicy = ShouldClearProvisionalItem); + WEBCORE_EXPORT void stopForUserCancel(bool deferCheckLoadComplete = false); void stop(); void stopLoading(UnloadEventPolicy); bool closeURL(); @@ -144,14 +142,14 @@ public: void clear(Document* newDocument, bool clearWindowProperties = true, bool clearScriptObjects = true, bool clearFrameView = true); bool isLoading() const; - bool frameHasLoaded() const; + WEBCORE_EXPORT bool frameHasLoaded() const; - int numPendingOrLoadingRequests(bool recurse) const; + WEBCORE_EXPORT int numPendingOrLoadingRequests(bool recurse) const; String referrer() const; - String outgoingReferrer() const; + WEBCORE_EXPORT String outgoingReferrer() const; String outgoingOrigin() const; - DocumentLoader* activeDocumentLoader() const; + WEBCORE_EXPORT DocumentLoader* activeDocumentLoader() const; DocumentLoader* documentLoader() const { return m_documentLoader.get(); } DocumentLoader* policyDocumentLoader() const { return m_policyDocumentLoader.get(); } DocumentLoader* provisionalDocumentLoader() const { return m_provisionalDocumentLoader.get(); } @@ -168,7 +166,12 @@ public: void handleFallbackContent(); - ResourceError cancelledError(const ResourceRequest&) const; + WEBCORE_EXPORT ResourceError cancelledError(const ResourceRequest&) const; + WEBCORE_EXPORT ResourceError blockedByContentBlockerError(const ResourceRequest&) const; + ResourceError blockedError(const ResourceRequest&) const; +#if ENABLE(CONTENT_FILTERING) + ResourceError blockedByContentFilterError(const ResourceRequest&) const; +#endif bool isHostedByObjectElement() const; @@ -177,28 +180,28 @@ public: bool subframeIsLoading() const; void willChangeTitle(DocumentLoader*); void didChangeTitle(DocumentLoader*); - void didChangeIcons(IconType); bool shouldTreatURLAsSrcdocDocument(const URL&) const; - FrameLoadType loadType() const; + WEBCORE_EXPORT FrameLoadType loadType() const; CachePolicy subresourceCachePolicy() const; - void didLayout(LayoutMilestones); + void didReachLayoutMilestone(LayoutMilestones); void didFirstLayout(); void loadedResourceFromMemoryCache(CachedResource*, ResourceRequest& newRequest); void tellClientAboutPastMemoryCacheLoads(); void checkLoadComplete(); - void detachFromParent(); + WEBCORE_EXPORT void detachFromParent(); void detachViewsAndDocumentLoader(); void addExtraFieldsToSubresourceRequest(ResourceRequest&); void addExtraFieldsToMainResourceRequest(ResourceRequest&); static void addHTTPOriginIfNeeded(ResourceRequest&, const String& origin); + static void addHTTPUpgradeInsecureRequestsIfNeeded(ResourceRequest&); FrameLoaderClient& client() const { return m_client; } @@ -211,7 +214,7 @@ public: void receivedFirstData(); - void handledOnloadEvents(); + void dispatchOnloadEvents(); String userAgent(const URL&) const; void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld&); @@ -222,10 +225,10 @@ public: void forceSandboxFlags(SandboxFlags flags) { m_forcedSandboxFlags |= flags; } SandboxFlags effectiveSandboxFlags() const; - bool checkIfFormActionAllowedByCSP(const URL&) const; + bool checkIfFormActionAllowedByCSP(const URL&, bool didReceiveRedirectResponse) const; - Frame* opener(); - void setOpener(Frame*); + WEBCORE_EXPORT Frame* opener(); + WEBCORE_EXPORT void setOpener(Frame*); void resetMultipleFormSubmissionProtection(); @@ -239,16 +242,16 @@ public: void finishedParsing(); void checkCompleted(); - bool isComplete() const; + WEBCORE_EXPORT bool isComplete() const; void commitProvisionalLoad(); void setLoadsSynchronously(bool loadsSynchronously) { m_loadsSynchronously = loadsSynchronously; } bool loadsSynchronously() const { return m_loadsSynchronously; } - FrameLoaderStateMachine* stateMachine() const { return &m_stateMachine; } + FrameLoaderStateMachine& stateMachine() { return m_stateMachine; } - Frame* findFrameForNavigation(const AtomicString& name, Document* activeDocument = 0); + WEBCORE_EXPORT Frame* findFrameForNavigation(const AtomicString& name, Document* activeDocument = nullptr); void applyUserAgent(ResourceRequest&); @@ -256,7 +259,7 @@ public: void completed(); bool allAncestorsAreComplete() const; // including this - void clientRedirected(const URL&, double delay, double fireDate, bool lockBackForwardList); + void clientRedirected(const URL&, double delay, double fireDate, LockBackForwardList); void clientRedirectCancelledOrFinished(bool cancelWithLoadInProgress); // FIXME: This is public because this asynchronous callback from the FrameLoaderClient @@ -264,27 +267,18 @@ public: // introduce a proper callback type for this function, we should make it private again. void continueLoadAfterWillSubmitForm(); - void setOriginalURLForDownloadRequest(ResourceRequest&); - - bool suppressOpenerInNewFrame() const { return m_suppressOpenerInNewFrame; } - - static ObjectContentType defaultObjectContentType(const URL&, const String& mimeType, bool shouldPreferPlugInsForImages); + WEBCORE_EXPORT void setOriginalURLForDownloadRequest(ResourceRequest&); bool quickRedirectComing() const { return m_quickRedirectComing; } - bool shouldClose(); + WEBCORE_EXPORT bool shouldClose(); void started(); - enum PageDismissalType { - NoDismissal = 0, - BeforeUnloadDismissal = 1, - PageHideDismissal = 2, - UnloadDismissal = 3 - }; + enum class PageDismissalType { None, BeforeUnload, PageHide, Unload }; PageDismissalType pageDismissalEventBeingDispatched() const { return m_pageDismissalEventBeingDispatched; } - NetworkingContext* networkingContext() const; + WEBCORE_EXPORT NetworkingContext* networkingContext() const; void loadProgressingStatusChanged(); @@ -292,6 +286,19 @@ public: void forcePageTransitionIfNeeded(); + void setOverrideCachePolicyForTesting(ResourceRequestCachePolicy policy) { m_overrideCachePolicyForTesting = policy; } + void setOverrideResourceLoadPriorityForTesting(ResourceLoadPriority priority) { m_overrideResourceLoadPriorityForTesting = priority; } + void setStrictRawResourceValidationPolicyDisabledForTesting(bool disabled) { m_isStrictRawResourceValidationPolicyDisabledForTesting = disabled; } + bool isStrictRawResourceValidationPolicyDisabledForTesting() { return m_isStrictRawResourceValidationPolicyDisabledForTesting; } + + WEBCORE_EXPORT void clearTestingOverrides(); + + const URL& provisionalLoadErrorBeingHandledURL() const { return m_provisionalLoadErrorBeingHandledURL; } + void setProvisionalLoadErrorBeingHandledURL(const URL& url) { m_provisionalLoadErrorBeingHandledURL = url; } + + bool isAlwaysOnLoggingAllowed() const; + bool shouldSuppressKeyboardInput() const; + private: enum FormSubmissionCacheLoadPolicy { MayAttemptCacheOnlyLoadForFormSubmissionItem, @@ -300,17 +307,18 @@ private: bool allChildrenAreComplete() const; // immediate children, not all descendants - void checkTimerFired(Timer<FrameLoader>&); - - void loadSameDocumentItem(HistoryItem*); - void loadDifferentDocumentItem(HistoryItem*, FrameLoadType, FormSubmissionCacheLoadPolicy); - + void checkTimerFired(); + + void loadSameDocumentItem(HistoryItem&); + void loadDifferentDocumentItem(HistoryItem&, FrameLoadType, FormSubmissionCacheLoadPolicy); + void loadProvisionalItemFromCachedPage(); void updateFirstPartyForCookies(); void setFirstPartyForCookies(const URL&); - + void addExtraFieldsToRequest(ResourceRequest&, FrameLoadType, bool isMainResource); + ResourceRequestCachePolicy defaultRequestCachingPolicy(const ResourceRequest&, FrameLoadType, bool isMainResource); void clearProvisionalLoad(); void transitionToCommitted(CachedPage*); @@ -318,10 +326,11 @@ private: SubstituteData defaultSubstituteDataForURL(const URL&); - bool handleBeforeUnloadEvent(Chrome&, FrameLoader* frameLoaderBeingNavigated); + bool dispatchBeforeUnloadEvent(Chrome&, FrameLoader* frameLoaderBeingNavigated); + void dispatchUnloadEvents(UnloadEventPolicy); - void continueLoadAfterNavigationPolicy(const ResourceRequest&, PassRefPtr<FormState>, bool shouldContinue); - void continueLoadAfterNewWindowPolicy(const ResourceRequest&, PassRefPtr<FormState>, const String& frameName, const NavigationAction&, bool shouldContinue); + void continueLoadAfterNavigationPolicy(const ResourceRequest&, FormState*, bool shouldContinue, AllowNavigationToInvalidURL); + void continueLoadAfterNewWindowPolicy(const ResourceRequest&, FormState*, const String& frameName, const NavigationAction&, bool shouldContinue, AllowNavigationToInvalidURL, NewFrameOpenerPolicy); void continueFragmentScrollAfterNavigationPolicy(const ResourceRequest&, bool shouldContinue); bool shouldPerformFragmentNavigation(bool isFormSubmission, const String& httpMethod, FrameLoadType, const URL&); @@ -336,35 +345,31 @@ private: void setState(FrameState); void closeOldDataSources(); - void prepareForCachedPageRestore(); + void willRestoreFromCachedPage(); + void didRestoreFromCachedPage(); bool shouldReloadToHandleUnreachableURL(DocumentLoader*); - void dispatchDidCommitLoad(); - - void urlSelected(const FrameLoadRequest&, PassRefPtr<Event>, bool lockHistory, bool lockBackForwardList, ShouldSendReferrer, ShouldReplaceDocumentIfJavaScriptURL); + void dispatchDidCommitLoad(std::optional<HasInsecureContent> initialHasInsecureContent); - void loadWithDocumentLoader(DocumentLoader*, FrameLoadType, PassRefPtr<FormState>); // Calls continueLoadAfterNavigationPolicy - void load(DocumentLoader*); // Calls loadWithDocumentLoader + void urlSelected(const FrameLoadRequest&, Event*); - void loadWithNavigationAction(const ResourceRequest&, const NavigationAction&, // Calls loadWithDocumentLoader - bool lockHistory, FrameLoadType, PassRefPtr<FormState>); + void loadWithDocumentLoader(DocumentLoader*, FrameLoadType, FormState*, AllowNavigationToInvalidURL); // Calls continueLoadAfterNavigationPolicy + void load(DocumentLoader*); // Calls loadWithDocumentLoader - void loadPostRequest(const ResourceRequest&, const String& referrer, // Called by loadFrameRequest, calls loadWithNavigationAction - const String& frameName, bool lockHistory, FrameLoadType, PassRefPtr<Event>, PassRefPtr<FormState>); - void loadURL(const URL&, const String& referrer, const String& frameName, // Called by loadFrameRequest, calls loadWithNavigationAction or dispatches to navigation policy delegate - bool lockHistory, FrameLoadType, PassRefPtr<Event>, PassRefPtr<FormState>); + void loadWithNavigationAction(const ResourceRequest&, const NavigationAction&, LockHistory, FrameLoadType, FormState*, AllowNavigationToInvalidURL); // Calls loadWithDocumentLoader - void reloadWithRequest(const ResourceRequest&, bool endToEndReload); + void loadPostRequest(const FrameLoadRequest&, const String& referrer, FrameLoadType, Event*, FormState*); + void loadURL(const FrameLoadRequest&, const String& referrer, FrameLoadType, Event*, FormState*); bool shouldReload(const URL& currentURL, const URL& destinationURL); void requestFromDelegate(ResourceRequest&, unsigned long& identifier, ResourceError&); - void detachChildren(); - void closeAndRemoveChild(Frame*); + WEBCORE_EXPORT void detachChildren(); + void closeAndRemoveChild(Frame&); - void loadInSameDocument(const URL&, PassRefPtr<SerializedScriptValue> stateObject, bool isNewNavigation); + void loadInSameDocument(const URL&, SerializedScriptValue* stateObject, bool isNewNavigation); void prepareForLoadStart(); void provisionalLoadStarted(); @@ -380,6 +385,10 @@ private: void dispatchGlobalObjectAvailableInAllWorlds(); + void applyShouldOpenExternalURLsPolicyToNewDocumentLoader(DocumentLoader&, ShouldOpenExternalURLsPolicy propagatedPolicy); + + bool isNavigationAllowed() const; + Frame& m_frame; FrameLoaderClient& m_client; @@ -405,7 +414,7 @@ private: RefPtr<DocumentLoader> m_provisionalDocumentLoader; RefPtr<DocumentLoader> m_policyDocumentLoader; - bool m_delegateIsHandlingProvisionalLoadError; + URL m_provisionalLoadErrorBeingHandledURL; bool m_quickRedirectComing; bool m_sentRedirectNotification; @@ -417,7 +426,8 @@ private: bool m_didCallImplicitClose; bool m_wasUnloadEventEmitted; - PageDismissalType m_pageDismissalEventBeingDispatched; + + PageDismissalType m_pageDismissalEventBeingDispatched { PageDismissalType::None }; bool m_isComplete; RefPtr<SerializedScriptValue> m_pendingStateObject; @@ -426,7 +436,7 @@ private: URL m_submittedFormURL; - Timer<FrameLoader> m_checkTimer; + Timer m_checkTimer; bool m_shouldCallCheckCompleted; bool m_shouldCallCheckLoadComplete; @@ -434,7 +444,6 @@ private: HashSet<Frame*> m_openedFrames; bool m_loadingFromCachedPage; - bool m_suppressOpenerInNewFrame; bool m_currentNavigationHasShownBeforeUnloadConfirmPanel; @@ -444,9 +453,12 @@ private: RefPtr<FrameNetworkingContext> m_networkingContext; + std::optional<ResourceRequestCachePolicy> m_overrideCachePolicyForTesting; + std::optional<ResourceLoadPriority> m_overrideResourceLoadPriorityForTesting; + bool m_isStrictRawResourceValidationPolicyDisabledForTesting { false }; + URL m_previousURL; RefPtr<HistoryItem> m_requestedHistoryItem; - std::unique_ptr<PageActivityAssertionToken> m_activityAssertion; }; // This function is called by createWindow() in JSDOMWindowBase.cpp, for example, for @@ -456,8 +468,6 @@ private: // // FIXME: Consider making this function part of an appropriate class (not FrameLoader) // and moving it to a more appropriate location. -PassRefPtr<Frame> createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadRequest&, const WindowFeatures&, bool& created); +RefPtr<Frame> createWindow(Frame& openerFrame, Frame& lookupFrame, const FrameLoadRequest&, const WindowFeatures&, bool& created); } // namespace WebCore - -#endif // FrameLoader_h |