LayoutTests:
[WebKit-https.git] / WebKit / WebCoreSupport / WebFrameLoaderClient.h
1 /*
2  * Copyright (C) 2006 Apple Computer, 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 #import <WebCore/FrameLoaderClient.h>
30 #import <WebCore/RetainPtr.h>
31 #import <WebCore/Timer.h>
32 #import <wtf/Forward.h>
33 #import <wtf/HashMap.h>
34
35 @class WebFrame;
36 @class WebFramePolicyListener;
37 @class WebHistoryItem;
38 @class WebResource;
39
40 namespace WebCore {
41     class AuthenticationChallenge;
42     class HistoryItem;
43     class PageCache;
44     class String;
45     class ResourceLoader;
46     class ResourceRequest;
47 }
48
49 typedef HashMap<RefPtr<WebCore::ResourceLoader>, WebCore::RetainPtr<WebResource> > ResourceMap;
50
51 class WebFrameLoaderClient : public WebCore::FrameLoaderClient {
52 public:
53     WebFrameLoaderClient(WebFrame*);
54
55     WebFrame* webFrame() const { return m_webFrame.get(); }
56
57     virtual void frameLoaderDestroyed();
58     void receivedPolicyDecison(WebCore::PolicyAction);
59
60 private:
61     virtual bool hasWebView() const; // mainly for assertions
62     virtual bool hasFrameView() const; // ditto
63
64     virtual bool privateBrowsingEnabled() const;
65
66     virtual void makeDocumentView();
67     virtual void makeRepresentation(WebCore::DocumentLoader*);
68     virtual void setDocumentViewFromPageCache(WebCore::PageCache*);
69     virtual void forceLayout();
70     virtual void forceLayoutForNonHTML();
71
72     virtual void setCopiesOnScroll();
73
74     virtual void detachedFromParent2();
75     virtual void detachedFromParent3();
76     virtual void detachedFromParent4();
77
78     virtual void loadedFromPageCache();
79
80     virtual void download(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
81
82     virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
83
84     virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
85     virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
86     virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
87     virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);
88     virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int lengthReceived);
89     virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier);
90     virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&);
91
92     virtual void dispatchDidHandleOnloadEvents();
93     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
94     virtual void dispatchDidCancelClientRedirect();
95     virtual void dispatchWillPerformClientRedirect(const WebCore::KURL&, double interval, double fireDate);
96     virtual void dispatchDidChangeLocationWithinPage();
97     virtual void dispatchWillClose();
98     virtual void dispatchDidReceiveIcon();
99     virtual void dispatchDidStartProvisionalLoad();
100     virtual void dispatchDidReceiveTitle(const WebCore::String& title);
101     virtual void dispatchDidCommitLoad();
102     virtual void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&);
103     virtual void dispatchDidFailLoad(const WebCore::ResourceError&);
104     virtual void dispatchDidFinishDocumentLoad();
105     virtual void dispatchDidFinishLoad();
106     virtual void dispatchDidFirstLayout();
107
108     virtual WebCore::Frame* dispatchCreatePage();
109     virtual void dispatchShow();
110
111     virtual void dispatchDecidePolicyForMIMEType(WebCore::FramePolicyFunction,
112         const WebCore::String& MIMEType, const WebCore::ResourceRequest&);
113     virtual void dispatchDecidePolicyForNewWindowAction(WebCore::FramePolicyFunction,
114         const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::String& frameName);
115     virtual void dispatchDecidePolicyForNavigationAction(WebCore::FramePolicyFunction,
116         const WebCore::NavigationAction&, const WebCore::ResourceRequest&);
117     virtual void cancelPolicyCheck();
118
119     virtual void dispatchUnableToImplementPolicy(const WebCore::ResourceError&);
120
121     virtual void dispatchWillSubmitForm(WebCore::FramePolicyFunction, PassRefPtr<WebCore::FormState>);
122
123     virtual void dispatchDidLoadMainResource(WebCore::DocumentLoader*);
124     virtual void revertToProvisionalState(WebCore::DocumentLoader*);
125     virtual void setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&);
126     virtual void clearUnarchivingState(WebCore::DocumentLoader*);
127     virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length);
128
129     virtual void willChangeEstimatedProgress();
130     virtual void didChangeEstimatedProgress();
131     virtual void postProgressStartedNotification();
132     virtual void postProgressEstimateChangedNotification();
133     virtual void postProgressFinishedNotification();
134     
135     virtual void setMainFrameDocumentReady(bool);
136
137     virtual void startDownload(const WebCore::ResourceRequest&);
138
139     virtual void willChangeTitle(WebCore::DocumentLoader*);
140     virtual void didChangeTitle(WebCore::DocumentLoader*);
141
142     virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
143     virtual void finishedLoading(WebCore::DocumentLoader*);
144     virtual void finalSetupForReplace(WebCore::DocumentLoader*);
145     virtual void updateGlobalHistoryForStandardLoad(const WebCore::KURL&);
146     virtual void updateGlobalHistoryForReload(const WebCore::KURL&);
147     virtual bool shouldGoToHistoryItem(WebCore::HistoryItem*) const;
148
149     virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
150     virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
151     virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
152     virtual WebCore::ResourceError interruptForPolicyChangeError(const WebCore::ResourceRequest&);
153
154     virtual WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&);
155     virtual WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&);
156
157     virtual bool shouldFallBack(const WebCore::ResourceError&);
158
159     virtual void setDefersLoading(bool);
160
161     virtual WebCore::String userAgent(const WebCore::KURL&);
162
163     virtual bool willUseArchive(WebCore::ResourceLoader*, const WebCore::ResourceRequest&, const WebCore::KURL& originalURL) const;
164     virtual bool isArchiveLoadPending(WebCore::ResourceLoader*) const;
165     virtual void cancelPendingArchiveLoad(WebCore::ResourceLoader*);
166     virtual void clearArchivedResources();
167
168     virtual bool canHandleRequest(const WebCore::ResourceRequest&) const;
169     virtual bool canShowMIMEType(const WebCore::String& MIMEType) const;
170     virtual bool representationExistsForURLScheme(const WebCore::String& URLScheme) const;
171     virtual WebCore::String generatedMIMETypeForURLScheme(const WebCore::String& URLScheme) const;
172
173     virtual void frameLoadCompleted();
174     virtual void saveViewStateToItem(WebCore::HistoryItem*);
175     virtual void restoreViewState();
176     virtual void provisionalLoadStarted();
177     virtual void didFinishLoad();
178     virtual void prepareForDataSourceReplacement();
179     virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
180
181     virtual void setTitle(const WebCore::String& title, const WebCore::KURL&);
182
183     virtual WebCore::Frame* createFrame(const WebCore::KURL& url, const WebCore::String& name, WebCore::HTMLFrameOwnerElement*,
184                                         const WebCore::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
185     virtual WebCore::Widget* createPlugin(WebCore::Element*, const WebCore::KURL&, const Vector<WebCore::String>&,
186                                           const Vector<WebCore::String>&, const WebCore::String&, bool);
187     virtual void redirectDataToPlugin(WebCore::Widget* pluginWidget);
188     
189     virtual WebCore::Widget* createJavaAppletWidget(const WebCore::IntSize&, WebCore::Element*, const WebCore::KURL& baseURL,
190                                                     const Vector<WebCore::String>& paramNames, const Vector<WebCore::String>& paramValues);
191     
192     virtual WebCore::ObjectContentType objectContentType(const WebCore::KURL& url, const WebCore::String& mimeType);
193     virtual WebCore::String overrideMediaType() const;
194     
195     virtual void windowObjectCleared() const;
196
197     void deliverArchivedResourcesAfterDelay() const;
198     bool canUseArchivedResource(NSURLRequest *) const;
199     bool canUseArchivedResource(NSURLResponse *) const;
200     void deliverArchivedResources(WebCore::Timer<WebFrameLoaderClient>*);
201
202     WebCore::RetainPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction);
203
204     NSDictionary *actionDictionary(const WebCore::NavigationAction&) const;
205
206     void saveDocumentViewToPageCache(WebCore::PageCache* pageCache);
207     
208     virtual bool canCachePage() const;
209
210     WebCore::RetainPtr<WebFrame> m_webFrame;
211
212     WebCore::RetainPtr<WebFramePolicyListener> m_policyListener;
213     WebCore::FramePolicyFunction m_policyFunction;
214
215     mutable ResourceMap m_pendingArchivedResources;
216     mutable WebCore::Timer<WebFrameLoaderClient> m_archivedResourcesDeliveryTimer;
217 };