FrameLoaderClientQt.h revision 65f03d4f644ce73618e5f4f50dd694b26f55ae12
1/*
2 * Copyright (C) 2006 Zack Rusin <zack@kde.org>
3 * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
4 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
5 * Copyright (C) 2008 Collabora Ltd. All rights reserved.
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30#ifndef FrameLoaderClientQt_h
31#define FrameLoaderClientQt_h
32
33
34#include "Frame.h"
35#include "FrameLoader.h"
36#include "FrameLoaderClient.h"
37#include "KURL.h"
38#include <wtf/OwnPtr.h>
39#include "PluginView.h"
40#include "RefCounted.h"
41#include "ResourceError.h"
42#include "ResourceResponse.h"
43#include <QUrl>
44#include <qobject.h>
45#include <wtf/Forward.h>
46class QWebFrame;
47
48namespace WebCore {
49
50class AuthenticationChallenge;
51class DocumentLoader;
52class Element;
53class FormState;
54class NavigationAction;
55class FrameNetworkingContext;
56class ResourceLoader;
57
58struct LoadErrorResetToken;
59
60class FrameLoaderClientQt : public QObject, public FrameLoaderClient {
61    Q_OBJECT
62
63    friend class ::QWebFrame;
64    void callPolicyFunction(FramePolicyFunction function, PolicyAction action);
65    void callErrorPageExtension(const ResourceError&);
66signals:
67    void loadStarted();
68    void loadProgress(int d);
69    void loadFinished(bool);
70    void titleChanged(const QString& title);
71
72public:
73    FrameLoaderClientQt();
74    ~FrameLoaderClientQt();
75    virtual void frameLoaderDestroyed();
76
77    void setFrame(QWebFrame* webFrame, Frame* frame);
78
79    virtual bool hasWebView() const; // mainly for assertions
80
81    virtual void makeRepresentation(DocumentLoader*);
82    virtual void forceLayout();
83    virtual void forceLayoutForNonHTML();
84
85    virtual void setCopiesOnScroll();
86
87    virtual void detachedFromParent2();
88    virtual void detachedFromParent3();
89
90    virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
91
92    virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long, WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
93    virtual bool shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier);
94    virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
95    virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&);
96    virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long, const WebCore::ResourceResponse&);
97    virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long, int);
98    virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long);
99    virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long, const WebCore::ResourceError&);
100    virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int);
101
102    virtual void dispatchDidHandleOnloadEvents();
103    virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
104    virtual void dispatchDidCancelClientRedirect();
105    virtual void dispatchWillPerformClientRedirect(const KURL&, double interval, double fireDate);
106    virtual void dispatchDidChangeLocationWithinPage();
107    virtual void dispatchDidPushStateWithinPage();
108    virtual void dispatchDidReplaceStateWithinPage();
109    virtual void dispatchDidPopStateWithinPage();
110    virtual void dispatchWillClose();
111    virtual void dispatchDidReceiveIcon();
112    virtual void dispatchDidStartProvisionalLoad();
113    virtual void dispatchDidReceiveTitle(const String& title);
114    virtual void dispatchDidChangeIcons();
115    virtual void dispatchDidCommitLoad();
116    virtual void dispatchDidFailProvisionalLoad(const ResourceError&);
117    virtual void dispatchDidFailLoad(const WebCore::ResourceError&);
118    virtual void dispatchDidFinishDocumentLoad();
119    virtual void dispatchDidFinishLoad();
120    virtual void dispatchDidFirstLayout();
121    virtual void dispatchDidFirstVisuallyNonEmptyLayout();
122
123    virtual WebCore::Frame* dispatchCreatePage(const WebCore::NavigationAction&);
124    virtual void dispatchShow();
125
126    virtual void dispatchDecidePolicyForMIMEType(FramePolicyFunction function, const WTF::String&, const WebCore::ResourceRequest&);
127    virtual void dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<FormState>, const WTF::String&);
128    virtual void dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<FormState>);
129    virtual void cancelPolicyCheck();
130
131    virtual void dispatchUnableToImplementPolicy(const WebCore::ResourceError&);
132
133    virtual void dispatchWillSendSubmitEvent(HTMLFormElement*) { }
134    virtual void dispatchWillSubmitForm(FramePolicyFunction, PassRefPtr<FormState>);
135
136    virtual void dispatchDidLoadMainResource(DocumentLoader*);
137    virtual void revertToProvisionalState(DocumentLoader*);
138    virtual void setMainDocumentError(DocumentLoader*, const ResourceError&);
139
140    virtual void postProgressStartedNotification();
141    virtual void postProgressEstimateChangedNotification();
142    virtual void postProgressFinishedNotification();
143
144    virtual void setMainFrameDocumentReady(bool);
145
146    virtual void startDownload(const WebCore::ResourceRequest&);
147
148    virtual void willChangeTitle(DocumentLoader*);
149    virtual void didChangeTitle(DocumentLoader*);
150
151    virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
152    virtual void finishedLoading(DocumentLoader*);
153
154    virtual void updateGlobalHistory();
155    virtual void updateGlobalHistoryRedirectLinks();
156    virtual bool shouldGoToHistoryItem(HistoryItem*) const;
157    virtual void dispatchDidAddBackForwardItem(HistoryItem*) const;
158    virtual void dispatchDidRemoveBackForwardItem(HistoryItem*) const;
159    virtual void dispatchDidChangeBackForwardIndex() const;
160    virtual void didDisplayInsecureContent();
161    virtual void didRunInsecureContent(SecurityOrigin*);
162
163    virtual ResourceError cancelledError(const ResourceRequest&);
164    virtual ResourceError blockedError(const ResourceRequest&);
165    virtual ResourceError cannotShowURLError(const ResourceRequest&);
166    virtual ResourceError interruptForPolicyChangeError(const ResourceRequest&);
167
168    virtual ResourceError cannotShowMIMETypeError(const ResourceResponse&);
169    virtual ResourceError fileDoesNotExistError(const ResourceResponse&);
170    virtual ResourceError pluginWillHandleLoadError(const ResourceResponse&);
171
172    virtual bool shouldFallBack(const ResourceError&);
173
174    virtual bool canHandleRequest(const WebCore::ResourceRequest&) const;
175    virtual bool canShowMIMEType(const String& MIMEType) const;
176    virtual bool canShowMIMETypeAsHTML(const String& MIMEType) const;
177    virtual bool representationExistsForURLScheme(const String& URLScheme) const;
178    virtual String generatedMIMETypeForURLScheme(const String& URLScheme) const;
179
180    virtual void frameLoadCompleted();
181    virtual void saveViewStateToItem(WebCore::HistoryItem*);
182    virtual void restoreViewState();
183    virtual void provisionalLoadStarted();
184    virtual void didFinishLoad();
185    virtual void prepareForDataSourceReplacement();
186
187    virtual WTF::PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
188    virtual void setTitle(const String& title, const KURL&);
189
190    virtual String userAgent(const WebCore::KURL&);
191
192    virtual void savePlatformDataToCachedFrame(WebCore::CachedFrame*);
193    virtual void transitionToCommittedFromCachedFrame(WebCore::CachedFrame*);
194    virtual void transitionToCommittedForNewPage();
195
196    virtual void didSaveToPageCache();
197    virtual void didRestoreFromPageCache();
198
199    virtual void dispatchDidBecomeFrameset(bool);
200
201    virtual bool canCachePage() const;
202    virtual void download(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
203
204    virtual PassRefPtr<Frame> createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
205                               const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
206    virtual void didTransferChildFrameToNewDocument(WebCore::Page*);
207    virtual void transferLoadingResourceFromPage(unsigned long, WebCore::DocumentLoader*, const WebCore::ResourceRequest&, WebCore::Page*);
208    virtual PassRefPtr<Widget> createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool);
209    virtual void redirectDataToPlugin(Widget* pluginWidget);
210
211    virtual PassRefPtr<Widget> createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues);
212
213    virtual ObjectContentType objectContentType(const KURL& url, const String& mimeType);
214    virtual String overrideMediaType() const;
215
216    virtual void dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*);
217    virtual void documentElementAvailable();
218    virtual void didPerformFirstNavigation() const;
219
220#if USE(V8)
221    // A frame's V8 context was created or destroyed.
222    virtual void didCreateScriptContextForFrame();
223    virtual void didDestroyScriptContextForFrame();
224
225    // A context untied to a frame was created (through evaluateInIsolatedWorld).
226    // This context is not tied to the lifetime of its frame, and is destroyed
227    // in garbage collection.
228    virtual void didCreateIsolatedScriptContext();
229
230    // Returns true if we should allow the given V8 extension to be added to
231    // the script context at the currently loading page and given extension group.
232    virtual bool allowScriptExtension(const String& extensionName, int extensionGroup) { return false; }
233#endif
234
235    virtual void registerForIconNotification(bool);
236
237    QString chooseFile(const QString& oldFile);
238
239    virtual PassRefPtr<FrameNetworkingContext> createNetworkingContext();
240
241    static bool dumpFrameLoaderCallbacks;
242    static bool dumpUserGestureInFrameLoaderCallbacks;
243    static bool dumpResourceLoadCallbacks;
244    static bool dumpResourceResponseMIMETypes;
245    static QString dumpResourceLoadCallbacksPath;
246    static bool sendRequestReturnsNullOnRedirect;
247    static bool sendRequestReturnsNull;
248    static QStringList sendRequestClearHeaders;
249    static bool policyDelegateEnabled;
250    static bool policyDelegatePermissive;
251    static bool deferMainResourceDataLoad;
252    static bool dumpHistoryCallbacks;
253
254private:
255    Frame *m_frame;
256    QWebFrame *m_webFrame;
257    ResourceResponse m_response;
258
259    // Plugin view to redirect data to
260    WebCore::PluginView* m_pluginView;
261    bool m_hasSentResponseToPlugin;
262
263    // True if makeRepresentation was called.  We don't actually have a concept
264    // of a "representation", but we need to know when we're expected to have one.
265    // See finishedLoading().
266    bool m_hasRepresentation;
267
268    ResourceError m_loadError;
269};
270
271}
272
273#endif
274