REGRESSION (r219013): OAuth flows are broken when redirecting back to application...
[WebKit.git] / Source / WebKitLegacy / win / WebCoreSupport / WebFrameLoaderClient.h
1 /*
2  * Copyright (C) 2006-2017 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     void dispatchDidFailToStartPlugin(const WebCore::PluginView*) const;
53
54     bool hasWebView() const override;
55
56     Ref<WebCore::FrameNetworkingContext> createNetworkingContext() override;
57
58     void frameLoaderDestroyed() override;
59     void makeRepresentation(WebCore::DocumentLoader*) override;
60     void forceLayoutForNonHTML() override;
61
62     void setCopiesOnScroll() override;
63
64     void detachedFromParent2() override;
65     void detachedFromParent3() override;
66
67     void convertMainResourceLoadToDownload(WebCore::DocumentLoader*, WebCore::SessionID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&) override;
68     void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&) override;
69
70     void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse) override;
71     bool shouldUseCredentialStorage(WebCore::DocumentLoader*, unsigned long identifier) override;
72     void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&) override;
73     void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&) override;
74     void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int dataLength) override;
75     void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier) override;
76     void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&) override;
77 #if USE(CFURLCONNECTION)
78     bool shouldCacheResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&, const unsigned char* data, unsigned long long length) override;
79 #endif
80
81     void dispatchDidDispatchOnloadEvents() override;
82     void dispatchDidReceiveServerRedirectForProvisionalLoad() override;
83     void dispatchDidCancelClientRedirect() override;
84     void dispatchWillPerformClientRedirect(const WebCore::URL&, double interval, double fireDate) override;
85     void dispatchDidChangeLocationWithinPage() override;
86     void dispatchDidPushStateWithinPage() override;
87     void dispatchDidReplaceStateWithinPage() override;
88     void dispatchDidPopStateWithinPage() override;
89     void dispatchWillClose() override;
90     void dispatchDidStartProvisionalLoad() override;
91     void dispatchDidReceiveTitle(const WebCore::StringWithDirection&) override;
92     void dispatchDidCommitLoad(std::optional<WebCore::HasInsecureContent>) override;
93     void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&) override;
94     void dispatchDidFailLoad(const WebCore::ResourceError&) override;
95     void dispatchDidFinishDocumentLoad() override;
96     void dispatchDidFinishLoad() override;
97     void dispatchDidReachLayoutMilestone(WebCore::LayoutMilestones) override;
98
99     void dispatchDecidePolicyForResponse(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, WebCore::FramePolicyFunction&&) override;
100     void dispatchDecidePolicyForNewWindowAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, WebCore::FormState*, const WTF::String& frameName, WebCore::FramePolicyFunction&&) override;
101     void dispatchDecidePolicyForNavigationAction(const WebCore::NavigationAction&, const WebCore::ResourceRequest&, bool didReceiveRedirectResponse, WebCore::FormState*, WebCore::FramePolicyFunction&&) override;
102     void cancelPolicyCheck() override;
103
104     void dispatchUnableToImplementPolicy(const WebCore::ResourceError&) override;
105
106     void dispatchWillSendSubmitEvent(Ref<WebCore::FormState>&&) override;
107     void dispatchWillSubmitForm(WebCore::FormState&, WebCore::FramePolicyFunction&&) override;
108
109     void revertToProvisionalState(WebCore::DocumentLoader*) override;
110     bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length) override;
111
112     WebCore::Frame* dispatchCreatePage(const WebCore::NavigationAction&) override;
113     void dispatchShow() override;
114
115     void setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&) override;
116     void setMainFrameDocumentReady(bool) override;
117
118     void startDownload(const WebCore::ResourceRequest&, const String& suggestedName = String()) override;
119
120     void progressStarted(WebCore::Frame&) override;
121     void progressEstimateChanged(WebCore::Frame&) override;
122     void progressFinished(WebCore::Frame&) override;
123
124     void committedLoad(WebCore::DocumentLoader*, const char*, int) override;
125     void finishedLoading(WebCore::DocumentLoader*) override;
126
127     void willChangeTitle(WebCore::DocumentLoader*) override;
128     void didChangeTitle(WebCore::DocumentLoader*) override;
129
130     void willReplaceMultipartContent() override { }
131     void didReplaceMultipartContent() override { }
132
133     void updateGlobalHistory() override;
134     void updateGlobalHistoryRedirectLinks() override;
135     bool shouldGoToHistoryItem(WebCore::HistoryItem*) const override;
136     void updateGlobalHistoryItemForPage() override;
137
138     void didDisplayInsecureContent() override;
139     void didRunInsecureContent(WebCore::SecurityOrigin&, const WebCore::URL&) override;
140     void didDetectXSS(const WebCore::URL&, bool didBlockEntirePage) override;
141
142     WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&) override;
143     WebCore::ResourceError blockedError(const WebCore::ResourceRequest&) override;
144     WebCore::ResourceError blockedByContentBlockerError(const WebCore::ResourceRequest&) override;
145     WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&) override;
146     WebCore::ResourceError interruptedForPolicyChangeError(const WebCore::ResourceRequest&) override;
147     WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&) override;
148     WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&) override;
149     WebCore::ResourceError pluginWillHandleLoadError(const WebCore::ResourceResponse&) override;
150
151     bool shouldFallBack(const WebCore::ResourceError&) override;
152
153     WTF::String userAgent(const WebCore::URL&) override;
154
155     Ref<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&) override;
156     void updateCachedDocumentLoader(WebCore::DocumentLoader&) override { }
157
158     void setTitle(const WebCore::StringWithDirection&, const WebCore::URL&) override;
159
160     void savePlatformDataToCachedFrame(WebCore::CachedFrame*) override;
161     void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*) override;
162     void transitionToCommittedForNewPage() override;
163
164     bool canHandleRequest(const WebCore::ResourceRequest&) const override;
165     bool canShowMIMEType(const WTF::String& MIMEType) const override;
166     bool canShowMIMETypeAsHTML(const WTF::String& MIMEType) const override;
167     bool representationExistsForURLScheme(const WTF::String& URLScheme) const override;
168     WTF::String generatedMIMETypeForURLScheme(const WTF::String& URLScheme) const override;
169
170     void frameLoadCompleted() override;
171     void saveViewStateToItem(WebCore::HistoryItem&) override;
172     void restoreViewState() override;
173     void provisionalLoadStarted() override;
174     void didFinishLoad() override;
175     void prepareForDataSourceReplacement() override;
176
177     void didSaveToPageCache() override;
178     void didRestoreFromPageCache() override;
179
180     void dispatchDidBecomeFrameset(bool) override;
181
182     bool canCachePage() const override;
183
184     RefPtr<WebCore::Frame> createFrame(const WebCore::URL&, const WTF::String& name, WebCore::HTMLFrameOwnerElement&,
185         const WTF::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) override;
186     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;
187     void recreatePlugin(WebCore::Widget*) override { }
188     void redirectDataToPlugin(WebCore::Widget&) override;
189
190     RefPtr<WebCore::Widget> createJavaAppletWidget(const WebCore::IntSize&, WebCore::HTMLAppletElement&, const WebCore::URL& baseURL, const Vector<WTF::String>& paramNames, const Vector<WTF::String>& paramValues) override;
191
192     WebCore::ObjectContentType objectContentType(const WebCore::URL&, const WTF::String& mimeType) override;
193     WTF::String overrideMediaType() const override;
194
195     void dispatchDidClearWindowObjectInWorld(WebCore::DOMWrapperWorld&) override;
196
197     COMPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction&&);
198     void receivedPolicyDecision(WebCore::PolicyAction);
199
200     bool shouldAlwaysUsePluginDocument(const WTF::String& mimeType) const override;
201
202     void prefetchDNS(const String&) override;
203
204 private:
205     WebHistory* webHistory() const;
206
207     class WebFramePolicyListenerPrivate;
208     std::unique_ptr<WebFramePolicyListenerPrivate> m_policyListenerPrivate;
209
210     WebFrame* m_webFrame;
211
212     // Points to the manual loader that data should be redirected to.
213     WebCore::PluginManualLoader* m_manualLoader;
214
215     bool m_hasSentResponseToPlugin;
216 };