1/*
2 * Copyright (C) 2010, 2011 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 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef WebFrameLoaderClient_h
27#define WebFrameLoaderClient_h
28
29#include <WebCore/FrameLoaderClient.h>
30
31namespace WebKit {
32
33class PluginView;
34class WebFrame;
35
36class WebFrameLoaderClient : public WebCore::FrameLoaderClient {
37public:
38    WebFrameLoaderClient(WebFrame*);
39    ~WebFrameLoaderClient();
40
41    WebFrame* webFrame() const { return m_frame; }
42
43    bool frameHasCustomRepresentation() const { return m_frameHasCustomRepresentation; }
44
45private:
46    virtual void frameLoaderDestroyed();
47
48    virtual bool hasHTMLView() const;
49    virtual bool hasWebView() const;
50
51    virtual void makeRepresentation(WebCore::DocumentLoader*);
52    virtual void forceLayout();
53    virtual void forceLayoutForNonHTML();
54
55    virtual void setCopiesOnScroll();
56
57    virtual void detachedFromParent2();
58    virtual void detachedFromParent3();
59
60    virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
61
62    virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
63    virtual bool shouldUseCredentialStorage(WebCore::DocumentLoader*, unsigned long identifier);
64    virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
65    virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
66#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
67    virtual bool canAuthenticateAgainstProtectionSpace(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ProtectionSpace&);
68#endif
69    virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);
70    virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int dataLength);
71    virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier);
72    virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&);
73    virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length);
74    virtual void dispatchDidLoadResourceByXMLHttpRequest(unsigned long identifier, const WTF::String&);
75
76    virtual void dispatchDidHandleOnloadEvents();
77    virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
78    virtual void dispatchDidCancelClientRedirect();
79    virtual void dispatchWillPerformClientRedirect(const WebCore::KURL&, double interval, double fireDate);
80    virtual void dispatchDidChangeLocationWithinPage();
81    virtual void dispatchDidPushStateWithinPage();
82    virtual void dispatchDidReplaceStateWithinPage();
83    virtual void dispatchDidPopStateWithinPage();
84    virtual void dispatchWillClose();
85    virtual void dispatchDidReceiveIcon();
86    virtual void dispatchDidStartProvisionalLoad();
87    virtual void dispatchDidReceiveTitle(const WebCore::StringWithDirection&);
88    virtual void dispatchDidChangeIcons();
89    virtual void dispatchDidCommitLoad();
90    virtual void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&);
91    virtual void dispatchDidFailLoad(const WebCore::ResourceError&);
92    virtual void dispatchDidFinishDocumentLoad();
93    virtual void dispatchDidFinishLoad();
94    virtual void dispatchDidFirstLayout();
95    virtual void dispatchDidFirstVisuallyNonEmptyLayout();
96
97    virtual WebCore::Frame* dispatchCreatePage(const WebCore::NavigationAction&);
98    virtual void dispatchShow();
99
100    virtual void dispatchDecidePolicyForResponse(WebCore::FramePolicyFunction, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&);
101    virtual void dispatchDecidePolicyForNewWindowAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<WebCore::FormState>, const String& frameName);
102    virtual void dispatchDecidePolicyForNavigationAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<WebCore::FormState>);
103    virtual void cancelPolicyCheck();
104
105    virtual void dispatchUnableToImplementPolicy(const WebCore::ResourceError&);
106
107    virtual void dispatchWillSendSubmitEvent(WebCore::HTMLFormElement*) { }
108    virtual void dispatchWillSubmitForm(WebCore::FramePolicyFunction, PassRefPtr<WebCore::FormState>);
109
110    virtual void dispatchDidLoadMainResource(WebCore::DocumentLoader*);
111    virtual void revertToProvisionalState(WebCore::DocumentLoader*);
112    virtual void setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&);
113
114    // Maybe these should go into a ProgressTrackerClient some day
115    virtual void willChangeEstimatedProgress();
116    virtual void didChangeEstimatedProgress();
117    virtual void postProgressStartedNotification();
118    virtual void postProgressEstimateChangedNotification();
119    virtual void postProgressFinishedNotification();
120
121    virtual void setMainFrameDocumentReady(bool);
122
123    virtual void startDownload(const WebCore::ResourceRequest&);
124
125    virtual void willChangeTitle(WebCore::DocumentLoader*);
126    virtual void didChangeTitle(WebCore::DocumentLoader*);
127
128    virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
129    virtual void finishedLoading(WebCore::DocumentLoader*);
130
131    virtual void updateGlobalHistory();
132    virtual void updateGlobalHistoryRedirectLinks();
133
134    virtual bool shouldGoToHistoryItem(WebCore::HistoryItem*) const;
135    virtual bool shouldStopLoadingForHistoryItem(WebCore::HistoryItem*) const;
136    virtual void dispatchDidAddBackForwardItem(WebCore::HistoryItem*) const;
137    virtual void dispatchDidRemoveBackForwardItem(WebCore::HistoryItem*) const;
138    virtual void dispatchDidChangeBackForwardIndex() const;
139
140    virtual void didDisplayInsecureContent();
141    virtual void didRunInsecureContent(WebCore::SecurityOrigin*, const WebCore::KURL&);
142
143    virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
144    virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
145    virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
146    virtual WebCore::ResourceError interruptForPolicyChangeError(const WebCore::ResourceRequest&);
147
148    virtual WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&);
149    virtual WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&);
150    virtual WebCore::ResourceError pluginWillHandleLoadError(const WebCore::ResourceResponse&);
151
152    virtual bool shouldFallBack(const WebCore::ResourceError&);
153
154    virtual bool canHandleRequest(const WebCore::ResourceRequest&) const;
155    virtual bool canShowMIMEType(const String& MIMEType) const;
156    virtual bool canShowMIMETypeAsHTML(const String& MIMEType) const;
157    virtual bool representationExistsForURLScheme(const String& URLScheme) const;
158    virtual String generatedMIMETypeForURLScheme(const String& URLScheme) const;
159
160    virtual void frameLoadCompleted();
161    virtual void saveViewStateToItem(WebCore::HistoryItem*);
162    virtual void restoreViewState();
163    virtual void provisionalLoadStarted();
164    virtual void didFinishLoad();
165    virtual void prepareForDataSourceReplacement();
166
167    virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
168    virtual void setTitle(const WebCore::StringWithDirection&, const WebCore::KURL&);
169
170    virtual String userAgent(const WebCore::KURL&);
171
172    virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
173    virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
174    virtual void transitionToCommittedForNewPage();
175
176    virtual void didSaveToPageCache();
177    virtual void didRestoreFromPageCache();
178
179    virtual void dispatchDidBecomeFrameset(bool);
180
181    virtual bool canCachePage() const;
182    virtual void download(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
183
184    virtual PassRefPtr<WebCore::Frame> createFrame(const WebCore::KURL& url, const String& name, WebCore::HTMLFrameOwnerElement* ownerElement,
185                                          const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
186    virtual void didTransferChildFrameToNewDocument(WebCore::Page*);
187    virtual void transferLoadingResourceFromPage(unsigned long, WebCore::DocumentLoader*, const WebCore::ResourceRequest&, WebCore::Page*);
188
189    virtual PassRefPtr<WebCore::Widget> createPlugin(const WebCore::IntSize&, WebCore::HTMLPlugInElement*, const WebCore::KURL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually);
190    virtual void redirectDataToPlugin(WebCore::Widget* pluginWidget);
191
192    virtual PassRefPtr<WebCore::Widget> createJavaAppletWidget(const WebCore::IntSize&, WebCore::HTMLAppletElement*, const WebCore::KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues);
193
194    virtual WebCore::ObjectContentType objectContentType(const WebCore::KURL&, const String& mimeType, bool shouldPreferPlugInsForImages);
195    virtual String overrideMediaType() const;
196
197    virtual void dispatchDidClearWindowObjectInWorld(WebCore::DOMWrapperWorld*);
198
199    virtual void documentElementAvailable();
200    virtual void didPerformFirstNavigation() const; // "Navigation" here means a transition from one page to another that ends up in the back/forward list.
201
202    virtual void registerForIconNotification(bool listen = true);
203
204#if PLATFORM(MAC)
205    virtual RemoteAXObjectRef accessibilityRemoteObject();
206
207#if ENABLE(MAC_JAVA_BRIDGE)
208    virtual jobject javaApplet(NSView*);
209#endif
210    virtual NSCachedURLResponse* willCacheResponse(WebCore::DocumentLoader*, unsigned long identifier, NSCachedURLResponse*) const;
211#endif
212#if USE(CFNETWORK)
213    virtual bool shouldCacheResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&, const unsigned char* data, unsigned long long length);
214#endif
215
216    virtual bool shouldUsePluginDocument(const String& /*mimeType*/) const;
217
218    virtual void didChangeScrollOffset();
219
220    virtual PassRefPtr<WebCore::FrameNetworkingContext> createNetworkingContext();
221
222    WebFrame* m_frame;
223    RefPtr<PluginView> m_pluginView;
224    bool m_hasSentResponseToPluginView;
225    bool m_frameHasCustomRepresentation;
226};
227
228} // namespace WebKit
229
230#endif // WebFrameLoaderClient_h
231