1/*
2 * Copyright (C) 2006, 2007, 2008, 2013 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 Computer, 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#ifndef WebFrameLoaderClient_h
30#define WebFrameLoaderClient_h
31
32#include <WebCore/COMPtr.h>
33#include <WebCore/FrameLoaderClient.h>
34
35namespace WebCore {
36    class PluginManualLoader;
37    class PluginView;
38}
39
40class WebFrame;
41class WebFramePolicyListener;
42class WebHistory;
43
44class WebFrameLoaderClient : public WebCore::FrameLoaderClient {
45public:
46    WebFrameLoaderClient(WebFrame*);
47    ~WebFrameLoaderClient();
48
49    WebFrame* webFrame() const { return m_webFrame; }
50
51    virtual bool hasWebView() const;
52
53    virtual void forceLayout() OVERRIDE;
54
55    virtual PassRefPtr<WebCore::FrameNetworkingContext> createNetworkingContext();
56
57    virtual void frameLoaderDestroyed() OVERRIDE;
58    virtual void makeRepresentation(WebCore::DocumentLoader*) OVERRIDE;
59    virtual void forceLayoutForNonHTML() OVERRIDE;
60
61    virtual void setCopiesOnScroll() OVERRIDE;
62
63    virtual void detachedFromParent2() OVERRIDE;
64    virtual void detachedFromParent3() OVERRIDE;
65
66    virtual void convertMainResourceLoadToDownload(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&) OVERRIDE;
67    virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
68
69    virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse) OVERRIDE;
70    virtual bool shouldUseCredentialStorage(WebCore::DocumentLoader*, unsigned long identifier) OVERRIDE;
71    virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&) OVERRIDE;
72    virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&) OVERRIDE;
73    virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&) OVERRIDE;
74    virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int dataLength) OVERRIDE;
75    virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier) OVERRIDE;
76    virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&) OVERRIDE;
77    virtual bool shouldCacheResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&, const unsigned char* data, unsigned long long length);
78
79    virtual void dispatchDidHandleOnloadEvents() OVERRIDE;
80    virtual void dispatchDidReceiveServerRedirectForProvisionalLoad() OVERRIDE;
81    virtual void dispatchDidCancelClientRedirect() OVERRIDE;
82    virtual void dispatchWillPerformClientRedirect(const WebCore::KURL&, double interval, double fireDate) OVERRIDE;
83    virtual void dispatchDidChangeLocationWithinPage() OVERRIDE;
84    virtual void dispatchDidPushStateWithinPage() OVERRIDE;
85    virtual void dispatchDidReplaceStateWithinPage() OVERRIDE;
86    virtual void dispatchDidPopStateWithinPage() OVERRIDE;
87    virtual void dispatchWillClose() OVERRIDE;
88    virtual void dispatchDidReceiveIcon() OVERRIDE;
89    virtual void dispatchDidStartProvisionalLoad() OVERRIDE;
90    virtual void dispatchDidReceiveTitle(const WebCore::StringWithDirection&) OVERRIDE;
91    virtual void dispatchDidChangeIcons(WebCore::IconType) OVERRIDE;
92    virtual void dispatchDidCommitLoad() OVERRIDE;
93    virtual void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&) OVERRIDE;
94    virtual void dispatchDidFailLoad(const WebCore::ResourceError&) OVERRIDE;
95    virtual void dispatchDidFinishDocumentLoad() OVERRIDE;
96    virtual void dispatchDidFinishLoad() OVERRIDE;
97    virtual void dispatchDidLayout(WebCore::LayoutMilestones) OVERRIDE;
98
99    virtual void dispatchDecidePolicyForResponse(WebCore::FramePolicyFunction, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&);
100    virtual void dispatchDecidePolicyForNewWindowAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<WebCore::FormState>, const WTF::String& frameName) OVERRIDE;
101    virtual void dispatchDecidePolicyForNavigationAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<WebCore::FormState>) OVERRIDE;
102    virtual void cancelPolicyCheck() OVERRIDE;
103
104    virtual void dispatchUnableToImplementPolicy(const WebCore::ResourceError&) OVERRIDE;
105
106    virtual void dispatchWillSendSubmitEvent(PassRefPtr<WebCore::FormState>) OVERRIDE;
107    virtual void dispatchWillSubmitForm(WebCore::FramePolicyFunction, PassRefPtr<WebCore::FormState>) OVERRIDE;
108
109    virtual void revertToProvisionalState(WebCore::DocumentLoader*) OVERRIDE;
110    virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length) OVERRIDE;
111
112    virtual WebCore::Frame* dispatchCreatePage(const WebCore::NavigationAction&) OVERRIDE;
113    virtual void dispatchShow() OVERRIDE;
114
115    virtual void setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&) OVERRIDE;
116    virtual void setMainFrameDocumentReady(bool) OVERRIDE;
117
118    virtual void startDownload(const WebCore::ResourceRequest&, const String& suggestedName = String()) OVERRIDE;
119
120    virtual void postProgressStartedNotification();
121    virtual void postProgressEstimateChangedNotification();
122    virtual void postProgressFinishedNotification();
123
124    virtual void committedLoad(WebCore::DocumentLoader*, const char*, int) OVERRIDE;
125    virtual void finishedLoading(WebCore::DocumentLoader*) OVERRIDE;
126
127    virtual void willChangeTitle(WebCore::DocumentLoader*) OVERRIDE;
128    virtual void didChangeTitle(WebCore::DocumentLoader*) OVERRIDE;
129
130    virtual void updateGlobalHistory() OVERRIDE;
131    virtual void updateGlobalHistoryRedirectLinks() OVERRIDE;
132    virtual bool shouldGoToHistoryItem(WebCore::HistoryItem*) const OVERRIDE;
133    virtual bool shouldStopLoadingForHistoryItem(WebCore::HistoryItem*) const OVERRIDE;
134    virtual void updateGlobalHistoryItemForPage() OVERRIDE;
135
136    virtual void didDisplayInsecureContent() OVERRIDE;
137    virtual void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::KURL&) OVERRIDE;
138    virtual void didDetectXSS(const WebCore::KURL&, bool didBlockEntirePage) OVERRIDE;
139
140    virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&) OVERRIDE;
141    virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&) OVERRIDE;
142    virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&) OVERRIDE;
143    virtual WebCore::ResourceError interruptedForPolicyChangeError(const WebCore::ResourceRequest&) OVERRIDE;
144    virtual WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&) OVERRIDE;
145    virtual WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&) OVERRIDE;
146    virtual WebCore::ResourceError pluginWillHandleLoadError(const WebCore::ResourceResponse&) OVERRIDE;
147
148    virtual bool shouldFallBack(const WebCore::ResourceError&) OVERRIDE;
149
150    virtual WTF::String userAgent(const WebCore::KURL&) OVERRIDE;
151
152    virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
153    virtual void setTitle(const WebCore::StringWithDirection&, const WebCore::KURL&);
154
155    virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*) OVERRIDE;
156    virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*) OVERRIDE;
157    virtual void transitionToCommittedForNewPage() OVERRIDE;
158
159    virtual bool canHandleRequest(const WebCore::ResourceRequest&) const OVERRIDE;
160    virtual bool canShowMIMEType(const WTF::String& MIMEType) const OVERRIDE;
161    virtual bool canShowMIMETypeAsHTML(const WTF::String& MIMEType) const OVERRIDE;
162    virtual bool representationExistsForURLScheme(const WTF::String& URLScheme) const OVERRIDE;
163    virtual WTF::String generatedMIMETypeForURLScheme(const WTF::String& URLScheme) const OVERRIDE;
164
165    virtual void frameLoadCompleted() OVERRIDE;
166    virtual void saveViewStateToItem(WebCore::HistoryItem *) OVERRIDE;
167    virtual void restoreViewState() OVERRIDE;
168    virtual void provisionalLoadStarted() OVERRIDE;
169    virtual void didFinishLoad() OVERRIDE;
170    virtual void prepareForDataSourceReplacement() OVERRIDE;
171
172    virtual void didSaveToPageCache() OVERRIDE;
173    virtual void didRestoreFromPageCache() OVERRIDE;
174
175    virtual void dispatchDidBecomeFrameset(bool) OVERRIDE;
176
177    virtual bool canCachePage() const;
178
179    virtual PassRefPtr<WebCore::Frame> createFrame(const WebCore::KURL& url, const WTF::String& name, WebCore::HTMLFrameOwnerElement* ownerElement,
180        const WTF::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) OVERRIDE;
181    virtual PassRefPtr<WebCore::Widget> createPlugin(const WebCore::IntSize&, WebCore::HTMLPlugInElement*, const WebCore::KURL&, const Vector<WTF::String>&, const Vector<WTF::String>&, const WTF::String&, bool loadManually) OVERRIDE;
182    virtual void recreatePlugin(WebCore::Widget*) OVERRIDE { }
183    virtual void redirectDataToPlugin(WebCore::Widget* pluginWidget) OVERRIDE;
184
185    virtual PassRefPtr<WebCore::Widget> createJavaAppletWidget(const WebCore::IntSize&, WebCore::HTMLAppletElement*, const WebCore::KURL& baseURL, const Vector<WTF::String>& paramNames, const Vector<WTF::String>& paramValues) OVERRIDE;
186
187    virtual WebCore::ObjectContentType objectContentType(const WebCore::KURL&, const WTF::String& mimeType, bool shouldPreferPlugInsForImages) OVERRIDE;
188    virtual WTF::String overrideMediaType() const OVERRIDE;
189
190    virtual void dispatchDidClearWindowObjectInWorld(WebCore::DOMWrapperWorld*) OVERRIDE;
191    virtual void documentElementAvailable() OVERRIDE;
192    virtual void didPerformFirstNavigation() const OVERRIDE;
193
194    COMPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction);
195    void receivedPolicyDecision(WebCore::PolicyAction);
196
197    virtual 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
203protected:
204    class WebFramePolicyListenerPrivate;
205    OwnPtr<WebFramePolicyListenerPrivate> m_policyListenerPrivate;
206
207private:
208    PassRefPtr<WebCore::Frame> createFrame(const WebCore::KURL&, const WTF::String& name, WebCore::HTMLFrameOwnerElement*, const WTF::String& referrer);
209    WebHistory* webHistory() const;
210
211    WebFrame* m_webFrame;
212
213    // Points to the manual loader that data should be redirected to.
214    WebCore::PluginManualLoader* m_manualLoader;
215
216    bool m_hasSentResponseToPlugin;
217};
218
219#endif // WebFrameLoaderClient_h
220