WebCore:
[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/Shared.h>
32 #import <WebCore/Timer.h>
33 #import <wtf/Forward.h>
34 #import <wtf/HashMap.h>
35
36 @class WebFrame;
37 @class WebFramePolicyListener;
38 @class WebHistoryItem;
39 @class WebResource;
40
41 namespace WebCore {
42     class String;
43     class ResourceLoader;
44 }
45
46 typedef HashMap<RefPtr<WebCore::ResourceLoader>, WebCore::RetainPtr<WebResource> > ResourceMap;
47
48 class WebFrameLoaderClient : public WebCore::FrameLoaderClient, public WebCore::Shared<WebFrameLoaderClient> {
49 public:
50     static PassRefPtr<WebFrameLoaderClient> create(WebFrame*);
51
52     virtual void ref();
53     virtual void deref();
54
55     WebFrame* webFrame() const { return m_webFrame.get(); }
56
57     void receivedPolicyDecison(WebCore::PolicyAction);
58
59 private:
60     WebFrameLoaderClient(WebFrame*);
61
62     virtual bool hasWebView() const; // mainly for assertions
63     virtual bool hasFrameView() const; // ditto
64
65     virtual bool hasBackForwardList() const;
66     virtual void resetBackForwardList();
67
68     virtual bool provisionalItemIsTarget() const;
69     virtual bool loadProvisionalItemFromPageCache();
70     virtual void invalidateCurrentItemPageCache();
71
72     virtual bool privateBrowsingEnabled() const;
73
74     virtual void makeDocumentView();
75     virtual void makeRepresentation(WebCore::DocumentLoader*);
76     virtual void setDocumentViewFromPageCache(NSDictionary *);
77     virtual void forceLayout();
78     virtual void forceLayoutForNonHTML();
79
80     virtual void updateHistoryForCommit();
81
82     virtual void updateHistoryForBackForwardNavigation();
83     virtual void updateHistoryForReload();
84     virtual void updateHistoryForStandardLoad();
85     virtual void updateHistoryForInternalLoad();
86
87     virtual void updateHistoryAfterClientRedirect();
88
89     virtual void setCopiesOnScroll();
90
91     virtual WebCore::LoadErrorResetToken* tokenForLoadErrorReset();
92     virtual void resetAfterLoadError(WebCore::LoadErrorResetToken*);
93     virtual void doNotResetAfterLoadError(WebCore::LoadErrorResetToken*);
94
95     virtual void willCloseDocument();
96
97     virtual void detachedFromParent1();
98     virtual void detachedFromParent2();
99     virtual void detachedFromParent3();
100     virtual void detachedFromParent4();
101
102     virtual void loadedFromPageCache();
103
104     virtual void download(NSURLConnection *, NSURLRequest *, NSURLResponse *, id proxy);
105
106     virtual id dispatchIdentifierForInitialRequest(WebCore::DocumentLoader*, NSURLRequest *);
107     virtual NSURLRequest *dispatchWillSendRequest(WebCore::DocumentLoader*, id identifier, NSURLRequest *, NSURLResponse *redirectResponse);
108     virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, id identifier, NSURLAuthenticationChallenge *);
109     virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, id identifier, NSURLAuthenticationChallenge *);
110     virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, id identifier, NSURLResponse *);
111     virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, id identifier, int lengthReceived);
112     virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, id identifier);
113     virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, id identifier, NSError *);
114
115     virtual void dispatchDidHandleOnloadEvents();
116     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
117     virtual void dispatchDidCancelClientRedirect();
118     virtual void dispatchWillPerformClientRedirect(const WebCore::KURL&, double interval, double fireDate);
119     virtual void dispatchDidChangeLocationWithinPage();
120     virtual void dispatchWillClose();
121     virtual void dispatchDidReceiveIcon();
122     virtual void dispatchDidStartProvisionalLoad();
123     virtual void dispatchDidReceiveTitle(const WebCore::String& title);
124     virtual void dispatchDidCommitLoad();
125     virtual void dispatchDidFailProvisionalLoad(NSError *);
126     virtual void dispatchDidFailLoad(NSError *);
127     virtual void dispatchDidFinishLoad();
128     virtual void dispatchDidFirstLayout();
129
130     virtual WebCore::Frame* dispatchCreatePage(NSURLRequest *);
131     virtual void dispatchShow();
132
133     virtual void dispatchDecidePolicyForMIMEType(WebCore::FramePolicyFunction,
134         const WebCore::String& MIMEType, NSURLRequest *);
135     virtual void dispatchDecidePolicyForNewWindowAction(WebCore::FramePolicyFunction,
136         const WebCore::NavigationAction&, NSURLRequest *, const WebCore::String& frameName);
137     virtual void dispatchDecidePolicyForNavigationAction(WebCore::FramePolicyFunction,
138         const WebCore::NavigationAction&, NSURLRequest *);
139     virtual void cancelPolicyCheck();
140
141     virtual void dispatchUnableToImplementPolicy(NSError *);
142
143     virtual void dispatchWillSubmitForm(WebCore::FramePolicyFunction, PassRefPtr<WebCore::FormState>);
144
145     virtual void dispatchDidLoadMainResource(WebCore::DocumentLoader*);
146     virtual void clearLoadingFromPageCache(WebCore::DocumentLoader*);
147     virtual bool isLoadingFromPageCache(WebCore::DocumentLoader*);
148     virtual void revertToProvisionalState(WebCore::DocumentLoader*);
149     virtual void setMainDocumentError(WebCore::DocumentLoader*, NSError *);
150     virtual void clearUnarchivingState(WebCore::DocumentLoader*);
151     virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, NSURLRequest *, NSURLResponse *, int length);
152
153     virtual void progressStarted();
154     virtual void progressCompleted();
155
156     virtual void incrementProgress(id identifier, NSURLResponse *);
157     virtual void incrementProgress(id identifier, NSData *);
158     virtual void completeProgress(id identifier);
159
160     virtual void setMainFrameDocumentReady(bool);
161
162     virtual void startDownload(NSURLRequest *);
163
164     virtual void willChangeTitle(WebCore::DocumentLoader*);
165     virtual void didChangeTitle(WebCore::DocumentLoader*);
166
167     virtual void committedLoad(WebCore::DocumentLoader*, NSData *);
168     virtual void finishedLoading(WebCore::DocumentLoader*);
169     virtual void finalSetupForReplace(WebCore::DocumentLoader*);
170
171     virtual NSError *cancelledError(NSURLRequest *);
172     virtual NSError *cannotShowURLError(NSURLRequest *);
173     virtual NSError *interruptForPolicyChangeError(NSURLRequest *);
174
175     virtual NSError *cannotShowMIMETypeError(NSURLResponse *);
176     virtual NSError *fileDoesNotExistError(NSURLResponse *);
177
178     virtual bool shouldFallBack(NSError *);
179
180     virtual void setDefersLoading(bool);
181
182     virtual WebCore::String userAgent();
183
184     virtual bool willUseArchive(WebCore::ResourceLoader*, NSURLRequest *, NSURL *originalURL) const;
185     virtual bool isArchiveLoadPending(WebCore::ResourceLoader*) const;
186     virtual void cancelPendingArchiveLoad(WebCore::ResourceLoader*);
187     virtual void clearArchivedResources();
188
189     virtual bool canHandleRequest(NSURLRequest *) const;
190     virtual bool canShowMIMEType(const WebCore::String& MIMEType) const;
191     virtual bool representationExistsForURLScheme(const WebCore::String& URLScheme) const;
192     virtual WebCore::String generatedMIMETypeForURLScheme(const WebCore::String& URLScheme) const;
193
194     virtual void frameLoadCompleted();
195     virtual void restoreScrollPositionAndViewState();
196     virtual void provisionalLoadStarted();
197     virtual bool shouldTreatURLAsSameAsCurrent(const WebCore::KURL&) const;
198     virtual void addHistoryItemForFragmentScroll();
199     virtual void didFinishLoad();
200     virtual void prepareForDataSourceReplacement();
201     virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(NSURLRequest *);
202     virtual void setTitle(const WebCore::String& title, const WebCore::KURL&);
203
204     void deliverArchivedResourcesAfterDelay() const;
205     bool canUseArchivedResource(NSURLRequest *) const;
206     bool canUseArchivedResource(NSURLResponse *) const;
207     void deliverArchivedResources(WebCore::Timer<WebFrameLoaderClient>*);
208
209     WebCore::RetainPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction);
210
211     NSDictionary *actionDictionary(const WebCore::NavigationAction&) const;
212
213     bool createPageCache(WebHistoryItem *);
214
215     WebCore::RetainPtr<WebFrame> m_webFrame;
216
217     WebCore::RetainPtr<WebFramePolicyListener> m_policyListener;
218     WebCore::FramePolicyFunction m_policyFunction;
219
220     mutable ResourceMap m_pendingArchivedResources;
221     mutable WebCore::Timer<WebFrameLoaderClient> m_archivedResourcesDeliveryTimer;
222 };