#pragma once
#include "FrameLoaderTypes.h"
-#include "LayoutMilestones.h"
+#include "LayoutMilestone.h"
#include "LinkIcon.h"
#include <functional>
#include <wtf/Forward.h>
+#include <wtf/WallTime.h>
#include <wtf/text/WTFString.h>
#if ENABLE(APPLICATION_MANIFEST)
class CachedFrame;
class CachedResourceRequest;
class Color;
+class DOMWindow;
class DOMWindowExtension;
class DOMWrapperWorld;
class DocumentLoader;
class SecurityOrigin;
class SharedBuffer;
class SubstituteData;
-class URL;
class Widget;
+enum class LockBackForwardList : bool;
+enum class PolicyDecisionMode;
+
struct StringWithDirection;
-typedef WTF::Function<void (PolicyAction)> FramePolicyFunction;
+typedef WTF::Function<void (PolicyAction, PolicyCheckIdentifier)> FramePolicyFunction;
class WEBCORE_EXPORT FrameLoaderClient {
+ WTF_MAKE_FAST_ALLOCATED;
public:
// An inline function cannot be the first non-abstract virtual function declared
// in the class as it results in the vtable being generated as a weak symbol.
- // This hurts performance (in Mac OS X at least, when loadig frameworks), so we
+ // This hurts performance (in Mac OS X at least, when loading frameworks), so we
// don't want to do it in WebKit.
virtual bool hasHTMLView() const;
virtual void makeRepresentation(DocumentLoader*) = 0;
- virtual std::optional<uint64_t> pageID() const = 0;
- virtual std::optional<uint64_t> frameID() const = 0;
+ virtual Optional<uint64_t> pageID() const = 0;
+ virtual Optional<uint64_t> frameID() const = 0;
virtual PAL::SessionID sessionID() const = 0;
-#if PLATFORM(IOS)
+#if PLATFORM(IOS_FAMILY)
// Returns true if the client forced the layout.
virtual bool forceLayoutOnRestoreFromPageCache() = 0;
#endif
virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long identifier, const ProtectionSpace&) = 0;
#endif
-#if PLATFORM(IOS)
+#if PLATFORM(IOS_FAMILY)
virtual RetainPtr<CFDictionaryRef> connectionProperties(DocumentLoader*, unsigned long identifier) = 0;
#endif
virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() = 0;
virtual void dispatchDidChangeProvisionalURL() { }
virtual void dispatchDidCancelClientRedirect() = 0;
- virtual void dispatchWillPerformClientRedirect(const URL&, double interval, double fireDate) = 0;
+ virtual void dispatchWillPerformClientRedirect(const URL&, double interval, WallTime fireDate, LockBackForwardList) = 0;
virtual void dispatchDidChangeMainDocument() { }
+ virtual void dispatchWillChangeDocument(const URL&, const URL&) { }
virtual void dispatchDidNavigateWithinPage() { }
virtual void dispatchDidChangeLocationWithinPage() = 0;
virtual void dispatchDidPushStateWithinPage() = 0;
virtual void dispatchDidReceiveIcon() { }
virtual void dispatchDidStartProvisionalLoad() = 0;
virtual void dispatchDidReceiveTitle(const StringWithDirection&) = 0;
- virtual void dispatchDidCommitLoad(std::optional<HasInsecureContent>) = 0;
+ virtual void dispatchDidCommitLoad(Optional<HasInsecureContent>) = 0;
virtual void dispatchDidFailProvisionalLoad(const ResourceError&) = 0;
virtual void dispatchDidFailLoad(const ResourceError&) = 0;
virtual void dispatchDidFinishDocumentLoad() = 0;
#endif
virtual void dispatchDidLayout() { }
- virtual void dispatchDidReachLayoutMilestone(LayoutMilestones) { }
+ virtual void dispatchDidReachLayoutMilestone(OptionSet<LayoutMilestone>) { }
virtual Frame* dispatchCreatePage(const NavigationAction&) = 0;
virtual void dispatchShow() = 0;
- virtual void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, FramePolicyFunction&&) = 0;
- virtual void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, FormState*, const String& frameName, FramePolicyFunction&&) = 0;
- virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, bool didReceiveRedirectResponse, FormState*, FramePolicyFunction&&) = 0;
+ virtual void dispatchDecidePolicyForResponse(const ResourceResponse&, const ResourceRequest&, PolicyCheckIdentifier, FramePolicyFunction&&) = 0;
+ virtual void dispatchDecidePolicyForNewWindowAction(const NavigationAction&, const ResourceRequest&, FormState*, const String& frameName, PolicyCheckIdentifier, FramePolicyFunction&&) = 0;
+ virtual void dispatchDecidePolicyForNavigationAction(const NavigationAction&, const ResourceRequest&, const ResourceResponse& redirectResponse, FormState*, PolicyDecisionMode, PolicyCheckIdentifier, FramePolicyFunction&&) = 0;
virtual void cancelPolicyCheck() = 0;
virtual void dispatchUnableToImplementPolicy(const ResourceError&) = 0;
virtual void dispatchWillSendSubmitEvent(Ref<FormState>&&) = 0;
- virtual void dispatchWillSubmitForm(FormState&, WTF::Function<void(void)>&&) = 0;
+ virtual void dispatchWillSubmitForm(FormState&, CompletionHandler<void()>&&) = 0;
virtual void revertToProvisionalState(DocumentLoader*) = 0;
virtual void setMainDocumentError(DocumentLoader*, const ResourceError&) = 0;
virtual void updateGlobalHistory() = 0;
virtual void updateGlobalHistoryRedirectLinks() = 0;
- virtual bool shouldGoToHistoryItem(HistoryItem*) const = 0;
- virtual void updateGlobalHistoryItemForPage() { }
+ virtual bool shouldGoToHistoryItem(HistoryItem&) const = 0;
// This frame has set its opener to null, disowning it for the lifetime of the frame.
// See http://html.spec.whatwg.org/#dom-opener.
virtual void savePlatformDataToCachedFrame(CachedFrame*) = 0;
virtual void transitionToCommittedFromCachedFrame(CachedFrame*) = 0;
-#if PLATFORM(IOS)
+#if PLATFORM(IOS_FAMILY)
virtual void didRestoreFrameHierarchyForCachedFrame() = 0;
#endif
virtual void transitionToCommittedForNewPage() = 0;
virtual bool canCachePage() const = 0;
virtual void convertMainResourceLoadToDownload(DocumentLoader*, PAL::SessionID, const ResourceRequest&, const ResourceResponse&) = 0;
- virtual RefPtr<Frame> createFrame(const URL&, const String& name, HTMLFrameOwnerElement&, const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) = 0;
+ virtual RefPtr<Frame> createFrame(const URL&, const String& name, HTMLFrameOwnerElement&, const String& referrer) = 0;
virtual RefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement&, const URL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually) = 0;
- virtual void recreatePlugin(Widget*) = 0;
virtual void redirectDataToPlugin(Widget&) = 0;
virtual RefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement&, const URL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues) = 0;
#if PLATFORM(COCOA)
// Allow an accessibility object to retrieve a Frame parent if there's no PlatformWidget.
virtual RemoteAXObjectRef accessibilityRemoteObject() = 0;
- virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse*) const = 0;
+ virtual void willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse*, CompletionHandler<void(NSCachedURLResponse *)>&&) const = 0;
virtual NSDictionary *dataDetectionContext() { return nullptr; }
#endif
virtual void dispatchDidReconnectDOMWindowExtensionToGlobalObject(DOMWindowExtension*) { }
virtual void dispatchWillDestroyGlobalObjectForDOMWindowExtension(DOMWindowExtension*) { }
+ virtual void willInjectUserScript(DOMWrapperWorld&) { }
+
#if ENABLE(WEB_RTC)
virtual void dispatchWillStartUsingPeerConnectionHandler(RTCPeerConnectionHandler*) { }
#endif
virtual void getLoadDecisionForIcons(const Vector<std::pair<WebCore::LinkIcon&, uint64_t>>&) { }
virtual void finishedLoadingIcon(uint64_t, SharedBuffer*) { }
+ virtual void didCreateWindow(DOMWindow&) { }
+
#if ENABLE(APPLICATION_MANIFEST)
- virtual void finishedLoadingApplicationManifest(uint64_t, const std::optional<ApplicationManifest>&) { }
+ virtual void finishedLoadingApplicationManifest(uint64_t, const Optional<ApplicationManifest>&) { }
+#endif
+
+#if ENABLE(RESOURCE_LOAD_STATISTICS)
+ virtual bool hasFrameSpecificStorageAccess() { return false; }
+ virtual void setHasFrameSpecificStorageAccess(bool) { }
#endif
};