summaryrefslogtreecommitdiff
path: root/Source/WebCore/loader/FrameLoader.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/loader/FrameLoader.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/loader/FrameLoader.h')
-rw-r--r--Source/WebCore/loader/FrameLoader.h188
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