[WTF] Import std::optional reference implementation as WTF::Optional
[WebKit-https.git] / Source / WebKit / win / WebCoreSupport / WebFrameLoaderClient.h
1 /*
2  * Copyright (C) 2006-2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #pragma once
30
31 #include <WebCore/COMPtr.h>
32 #include <WebCore/FrameLoaderClient.h>
33 #include <WebCore/ProgressTrackerClient.h>
34
35 namespace WebCore {
36     class PluginManualLoader;
37     class PluginView;
38 }
39
40 class WebFrame;
41 class WebFramePolicyListener;
42 class WebHistory;
43
44 class WebFrameLoaderClient : public WebCore::FrameLoaderClient, public WebCore::ProgressTrackerClient {
45 public:
46     WebFrameLoaderClient(WebFrame* = 0);
47     ~WebFrameLoaderClient();
48
49     void setWebFrame(WebFrame* webFrame) { m_webFrame = webFrame; }
50     WebFrame* webFrame() const { return m_webFrame; }
51
52     virtual bool hasWebView() const;
53
54     virtual PassRefPtr<WebCore::FrameNetworkingContext> createNetworkingContext();
55
56     void frameLoaderDestroyed() override;
57     void makeRepresentation(WebCore::DocumentLoader*) override;
58     void forceLayoutForNonHTML() override;
59
60     void setCopiesOnScroll() override;
61
62     void detachedFromParent2() override;
63     void detachedFromParent3() override;
64
65     void convertMainResourceLoadToDownload(WebCore::DocumentLoader*, WebCore::SessionID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&) override;
66     virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
67
68     void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse) override;
69     bool shouldUseCredentialStorage(WebCore::DocumentLoader*, unsigned long identifier) override;
70     void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&) override;
71     void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&) override;
72     void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int dataLength) override;
73     void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier) override;
74     void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&) override;
75     virtual bool shouldCacheResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&, const unsigned char* data, unsigned long long length);
76
77     void dispatchDidDispatchOnloadEvents() override;
78     void dispatchDidReceiveServerRedirectForProvisionalLoad() override;
79     void dispatchDidCancelClientRedirect() override;
80     void dispatchWillPerformClientRedirect(const WebCore::URL&, double interval, double fireDate) override;
81     void dispatchDidChangeLocationWithinPage() override;
82     void dispatchDidPushStateWithinPage() override;
83     void dispatchDidReplaceStateWithinPage() override;
84     void dispatchDidPopStateWithinPage() override;
85     void dispatchWillClose() override;
86     void dispatchDidReceiveIcon() override;
87     void dispatchDidStartProvisionalLoad() override;
88     void dispatchDidReceiveTitle(const WebCore::StringWithDirection&) override;
89     void dispatchDidCommitLoad(std::optional<WebCore::HasInsecureContent>) override;
90     void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&) override;
91     void dispatchDidFailLoad(const WebCore::ResourceError&) override;
92     void dispatchDidFinishDocumentLoad() override;
93     void dispatchDidFinishLoad() override;
94     void dispatchDidReachLayoutMilestone(WebCore::LayoutMilestones) override;
95
96     void dispatchDecidePolicyForResponse(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, WebCore::FramePolicyFunction) override;
97     void dispatchDecidePolicyForNewWindowAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<WebCore::FormState>, const WTF::String& frameName, WebCore::FramePolicyFunction) override;
98     void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<WebCore::FormState>, WebCore::FramePolicyFunction) override;
99     void cancelPolicyCheck() override;
100
101     void dispatchUnableToImplementPolicy(const WebCore::ResourceError&) override;
102
103     void dispatchWillSendSubmitEvent(PassRefPtr<WebCore::FormState>) override;
104     void dispatchWillSubmitForm(PassRefPtr<WebCore::FormState>, WebCore::FramePolicyFunction) override;
105
106     void revertToProvisionalState(WebCore::DocumentLoader*) override;
107     bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length) override;
108
109     WebCore::Frame* dispatchCreatePage(const WebCore::NavigationAction&) override;
110     void dispatchShow() override;
111
112     void setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&) override;
113     void setMainFrameDocumentReady(bool) override;
114
115     void startDownload(const WebCore::ResourceRequest&, const String& suggestedName = String()) override;
116
117     virtual void progressStarted(WebCore::Frame&);
118     virtual void progressEstimateChanged(WebCore::Frame&);
119     virtual void progressFinished(WebCore::Frame&);
120
121     void committedLoad(WebCore::DocumentLoader*, const char*, int) override;
122     void finishedLoading(WebCore::DocumentLoader*) override;
123
124     void willChangeTitle(WebCore::DocumentLoader*) override;
125     void didChangeTitle(WebCore::DocumentLoader*) override;
126
127     void willReplaceMultipartContent() override { }
128     void didReplaceMultipartContent() override { }
129
130     void updateGlobalHistory() override;
131     void updateGlobalHistoryRedirectLinks() override;
132     bool shouldGoToHistoryItem(WebCore::HistoryItem*) const override;
133     void updateGlobalHistoryItemForPage() override;
134
135     void didDisplayInsecureContent() override;
136     void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::URL&) override;
137     void didDetectXSS(const WebCore::URL&, bool didBlockEntirePage) override;
138
139     WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&) override;
140     WebCore::ResourceError blockedError(const WebCore::ResourceRequest&) override;
141     WebCore::ResourceError blockedByContentBlockerError(const WebCore::ResourceRequest&) override;
142     WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&) override;
143     WebCore::ResourceError interruptedForPolicyChangeError(const WebCore::ResourceRequest&) override;
144     WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&) override;
145     WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&) override;
146     WebCore::ResourceError pluginWillHandleLoadError(const WebCore::ResourceResponse&) override;
147
148     bool shouldFallBack(const WebCore::ResourceError&) override;
149
150     WTF::String userAgent(const WebCore::URL&) override;
151
152     virtual Ref<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
153     void updateCachedDocumentLoader(WebCore::DocumentLoader&) override { }
154
155     virtual void setTitle(const WebCore::StringWithDirection&, const WebCore::URL&);
156
157     void savePlatformDataToCachedFrame(WebCore::CachedFrame*) override;
158     void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*) override;
159     void transitionToCommittedForNewPage() override;
160
161     bool canHandleRequest(const WebCore::ResourceRequest&) const override;
162     bool canShowMIMEType(const WTF::String& MIMEType) const override;
163     bool canShowMIMETypeAsHTML(const WTF::String& MIMEType) const override;
164     bool representationExistsForURLScheme(const WTF::String& URLScheme) const override;
165     WTF::String generatedMIMETypeForURLScheme(const WTF::String& URLScheme) const override;
166
167     void frameLoadCompleted() override;
168     void saveViewStateToItem(WebCore::HistoryItem&) override;
169     void restoreViewState() override;
170     void provisionalLoadStarted() override;
171     void didFinishLoad() override;
172     void prepareForDataSourceReplacement() override;
173
174     void didSaveToPageCache() override;
175     void didRestoreFromPageCache() override;
176
177     void dispatchDidBecomeFrameset(bool) override;
178
179     virtual bool canCachePage() const;
180
181     RefPtr<WebCore::Frame> createFrame(const WebCore::URL&, const WTF::String& name, WebCore::HTMLFrameOwnerElement*,
182         const WTF::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) override;
183     RefPtr<WebCore::Widget> createPlugin(const WebCore::IntSize&, WebCore::HTMLPlugInElement*, const WebCore::URL&, const Vector<WTF::String>&, const Vector<WTF::String>&, const WTF::String&, bool loadManually) override;
184     void recreatePlugin(WebCore::Widget*) override { }
185     void redirectDataToPlugin(WebCore::Widget* pluginWidget) override;
186
187     PassRefPtr<WebCore::Widget> createJavaAppletWidget(const WebCore::IntSize&, WebCore::HTMLAppletElement*, const WebCore::URL& baseURL, const Vector<WTF::String>& paramNames, const Vector<WTF::String>& paramValues) override;
188
189     WebCore::ObjectContentType objectContentType(const WebCore::URL&, const WTF::String& mimeType) override;
190     WTF::String overrideMediaType() const override;
191
192     void dispatchDidClearWindowObjectInWorld(WebCore::DOMWrapperWorld&) override;
193
194     COMPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction);
195     void receivedPolicyDecision(WebCore::PolicyAction);
196
197     void registerForIconNotification(bool listen) override;
198
199     virtual bool shouldAlwaysUsePluginDocument(const WTF::String& mimeType) const;
200
201     virtual void dispatchDidFailToStartPlugin(const WebCore::PluginView*) const;
202
203     void prefetchDNS(const String&) override;
204
205 protected:
206     class WebFramePolicyListenerPrivate;
207     std::unique_ptr<WebFramePolicyListenerPrivate> m_policyListenerPrivate;
208
209 private:
210     RefPtr<WebCore::Frame> createFrame(const WebCore::URL&, const WTF::String& name, WebCore::HTMLFrameOwnerElement*, const WTF::String& referrer);
211     WebHistory* webHistory() const;
212
213     WebFrame* m_webFrame;
214
215     // Points to the manual loader that data should be redirected to.
216     WebCore::PluginManualLoader* m_manualLoader;
217
218     bool m_hasSentResponseToPlugin;
219 };