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