16292af000afd8fdf115f35ece13c5fc63276050
[WebKit-https.git] / WebKit / win / WebFrame.h
1 /*
2  * Copyright (C) 2006, 2007 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 COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef WebFrame_H
27 #define WebFrame_H
28
29 #include "DOMCore.h"
30 #include "IWebFormDelegate.h"
31 #include "IWebFrame.h"
32 #include "IWebFramePrivate.h"
33 #include "WebDataSource.h"
34
35 #pragma warning(push, 0)
36 #include <WebCore/FrameLoaderClient.h>
37 #include <WebCore/FrameWin.h>
38 #include <WebCore/KURL.h>
39 #include <WebCore/PlatformString.h>
40 #include <WebCore/ResourceHandleClient.h>
41 #pragma warning(pop)
42
43 #include <WTF/RefPtr.h>
44 #include <WTF/HashMap.h>
45
46 namespace WebCore {
47     class AuthenticationChallenge;
48     class DocumentLoader;
49     class Element;
50     class Frame;
51     class HTMLFrameOwnerElement;
52     class IntRect;
53     class Page;
54     class ResourceError;
55     class SharedBuffer;
56 }
57
58 typedef const struct OpaqueJSContext* JSContextRef;
59 typedef struct OpaqueJSValue* JSObjectRef;
60
61 class WebFrame;
62 class WebFramePolicyListener;
63 class WebHistory;
64 class WebView;
65
66 interface IWebHistoryItemPrivate;
67
68 WebFrame* kit(WebCore::Frame*);
69 WebCore::Frame* core(WebFrame*);
70
71 extern const GUID IID_WebFrame;
72
73 class WebFrame : public IWebFrame, IWebFramePrivate
74     , public WebCore::FrameLoaderClient
75 {
76 public:
77     static WebFrame* createInstance();
78 protected:
79     WebFrame();
80     ~WebFrame();
81
82 public:
83     // IUnknown
84     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
85     virtual ULONG STDMETHODCALLTYPE AddRef(void);
86     virtual ULONG STDMETHODCALLTYPE Release(void);
87
88     //IWebFrame
89     virtual HRESULT STDMETHODCALLTYPE name( 
90         /* [retval][out] */ BSTR *frameName);
91     
92     virtual HRESULT STDMETHODCALLTYPE webView( 
93         /* [retval][out] */ IWebView **view);
94     
95     virtual HRESULT STDMETHODCALLTYPE frameView( 
96         /* [retval][out] */ IWebFrameView **view);
97     
98     virtual HRESULT STDMETHODCALLTYPE DOMDocument( 
99         /* [retval][out] */ IDOMDocument** document);
100     
101     virtual HRESULT STDMETHODCALLTYPE frameElement( 
102         /* [retval][out] */ IDOMHTMLElement **frameElement);
103     
104     virtual HRESULT STDMETHODCALLTYPE loadRequest( 
105         /* [in] */ IWebURLRequest *request);
106     
107     virtual HRESULT STDMETHODCALLTYPE loadData( 
108         /* [in] */ IStream *data,
109         /* [in] */ BSTR mimeType,
110         /* [in] */ BSTR textEncodingName,
111         /* [in] */ BSTR url);
112     
113     virtual HRESULT STDMETHODCALLTYPE loadHTMLString( 
114         /* [in] */ BSTR string,
115         /* [in] */ BSTR baseURL);
116     
117     virtual HRESULT STDMETHODCALLTYPE loadAlternateHTMLString( 
118         /* [in] */ BSTR str,
119         /* [in] */ BSTR baseURL,
120         /* [in] */ BSTR unreachableURL);
121     
122     virtual HRESULT STDMETHODCALLTYPE loadArchive( 
123         /* [in] */ IWebArchive *archive);
124     
125     virtual HRESULT STDMETHODCALLTYPE dataSource( 
126         /* [retval][out] */ IWebDataSource **source);
127     
128     virtual HRESULT STDMETHODCALLTYPE provisionalDataSource( 
129         /* [retval][out] */ IWebDataSource **source);
130     
131     virtual HRESULT STDMETHODCALLTYPE stopLoading( void);
132     
133     virtual HRESULT STDMETHODCALLTYPE reload( void);
134     
135     virtual HRESULT STDMETHODCALLTYPE findFrameNamed( 
136         /* [in] */ BSTR name,
137         /* [retval][out] */ IWebFrame **frame);
138     
139     virtual HRESULT STDMETHODCALLTYPE parentFrame( 
140         /* [retval][out] */ IWebFrame **frame);
141     
142     virtual HRESULT STDMETHODCALLTYPE childFrames( 
143         /* [retval][out] */ IEnumVARIANT **enumFrames);
144
145     virtual HRESULT STDMETHODCALLTYPE currentForm( 
146         /* [retval][out] */ IDOMElement **formElement);
147
148     // IWebFramePrivate
149     virtual HRESULT STDMETHODCALLTYPE renderTreeAsExternalRepresentation(
150         /* [retval][out] */ BSTR *result);
151
152     virtual HRESULT STDMETHODCALLTYPE scrollOffset(
153         /* [retval][out] */ SIZE* offset);
154
155     virtual HRESULT STDMETHODCALLTYPE layout();
156
157     virtual HRESULT STDMETHODCALLTYPE firstLayoutDone(
158         /* [retval][out] */ BOOL* result);
159
160     virtual HRESULT STDMETHODCALLTYPE loadType( 
161         /* [retval][out] */ WebFrameLoadType* type);
162
163     virtual HRESULT STDMETHODCALLTYPE setInPrintingMode( 
164         /* [in] */ BOOL value,
165         /* [in] */ HDC printDC);
166         
167     virtual HRESULT STDMETHODCALLTYPE getPrintedPageCount( 
168         /* [in] */ HDC printDC,
169         /* [retval][out] */ UINT *pageCount);
170     
171     virtual HRESULT STDMETHODCALLTYPE spoolPages( 
172         /* [in] */ HDC printDC,
173         /* [in] */ UINT startPage,
174         /* [in] */ UINT endPage,
175         /* [retval][out] */ void* ctx);
176
177     virtual HRESULT STDMETHODCALLTYPE isFrameSet( 
178         /* [retval][out] */ BOOL* result);
179
180     virtual HRESULT STDMETHODCALLTYPE string( 
181         /* [retval][out] */ BSTR* result);
182
183     virtual HRESULT STDMETHODCALLTYPE size( 
184         /* [retval][out] */ SIZE *size);
185
186     virtual HRESULT STDMETHODCALLTYPE hasScrollBars( 
187         /* [retval][out] */ BOOL *result);
188     
189     virtual HRESULT STDMETHODCALLTYPE contentBounds( 
190         /* [retval][out] */ RECT *result);
191     
192     virtual HRESULT STDMETHODCALLTYPE frameBounds( 
193         /* [retval][out] */ RECT *result);
194
195     virtual HRESULT STDMETHODCALLTYPE isDescendantOfFrame( 
196         /* [in] */ IWebFrame *ancestor,
197         /* [retval][out] */ BOOL *result);
198
199     // FrameWinClient
200     virtual void ref();
201     virtual void deref();
202
203     virtual WebCore::Frame* createFrame(const WebCore::KURL&, const WebCore::String& name, WebCore::HTMLFrameOwnerElement*, const WebCore::String& referrer);
204     virtual void openURL(const WebCore::String& URL, const WebCore::Event* triggeringEvent, bool newWindow, bool lockHistory);
205     virtual void windowScriptObjectAvailable(JSContextRef context, JSObjectRef windowObject);
206     
207     // FrameLoaderClient
208     virtual void frameLoaderDestroyed();
209     virtual bool hasWebView() const;
210     virtual bool hasFrameView() const;
211     virtual bool privateBrowsingEnabled() const;
212     virtual void makeDocumentView();
213     virtual void makeRepresentation(WebCore::DocumentLoader*);
214     virtual void forceLayout();
215     virtual void forceLayoutForNonHTML();
216     virtual void setCopiesOnScroll();
217     virtual void detachedFromParent1();
218     virtual void detachedFromParent2();
219     virtual void detachedFromParent3();
220     virtual void detachedFromParent4();
221     virtual void loadedFromCachedPage();
222     virtual void dispatchDidHandleOnloadEvents();
223     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
224     virtual void dispatchDidCancelClientRedirect();
225     virtual void dispatchWillPerformClientRedirect(const WebCore::KURL&, double interval, double fireDate);
226     virtual void dispatchDidChangeLocationWithinPage();
227     virtual void dispatchWillClose();
228     virtual void dispatchDidReceiveIcon();
229     virtual void dispatchDidStartProvisionalLoad();
230     virtual void dispatchDidReceiveTitle(const WebCore::String& title);
231     virtual void dispatchDidCommitLoad();
232     virtual void dispatchDidFinishDocumentLoad();
233     virtual void dispatchDidFinishLoad();
234     virtual void dispatchDidFirstLayout();
235     virtual void dispatchShow();
236     virtual void cancelPolicyCheck();
237     virtual void dispatchWillSubmitForm(WebCore::FramePolicyFunction, PassRefPtr<WebCore::FormState>);
238     virtual void dispatchDidLoadMainResource(WebCore::DocumentLoader*);
239     virtual void revertToProvisionalState(WebCore::DocumentLoader*);
240     virtual void clearUnarchivingState(WebCore::DocumentLoader*);
241     virtual void setMainFrameDocumentReady(bool);
242     virtual void willChangeTitle(WebCore::DocumentLoader*);
243     virtual void didChangeTitle(WebCore::DocumentLoader*);
244     virtual void finishedLoading(WebCore::DocumentLoader*);
245     virtual void finalSetupForReplace(WebCore::DocumentLoader*);
246     virtual void setDefersLoading(bool);
247     virtual bool isArchiveLoadPending(WebCore::ResourceLoader*) const;
248     virtual void cancelPendingArchiveLoad(WebCore::ResourceLoader*);
249     virtual void clearArchivedResources();
250     virtual bool canHandleRequest(const WebCore::ResourceRequest&) const;
251     virtual bool canShowMIMEType(const WebCore::String& MIMEType) const;
252     virtual bool representationExistsForURLScheme(const WebCore::String& URLScheme) const;
253     virtual WebCore::String generatedMIMETypeForURLScheme(const WebCore::String& URLScheme) const;
254     virtual void frameLoadCompleted();
255     virtual void restoreViewState();
256     virtual void provisionalLoadStarted();
257     virtual bool shouldTreatURLAsSameAsCurrent(const WebCore::KURL&) const;
258     virtual void addHistoryItemForFragmentScroll();
259     virtual void didFinishLoad();
260     virtual void prepareForDataSourceReplacement();
261     virtual void setTitle(const WebCore::String& title, const WebCore::KURL&);
262     virtual WebCore::String userAgent(const WebCore::KURL&);
263     virtual void setDocumentViewFromCachedPage(WebCore::CachedPage *);
264     virtual void updateGlobalHistoryForStandardLoad(const WebCore::KURL &);
265     virtual void updateGlobalHistoryForReload(const WebCore::KURL &);
266     virtual bool shouldGoToHistoryItem(WebCore::HistoryItem *) const;
267     virtual void saveViewStateToItem(WebCore::HistoryItem *);
268     virtual void saveDocumentViewToCachedPage(WebCore::CachedPage *);
269     virtual bool canCachePage(void) const;
270     virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
271     virtual void setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&);
272     virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
273     virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
274     virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
275     virtual WebCore::ResourceError interruptForPolicyChangeError(const WebCore::ResourceRequest&);
276     virtual WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&);
277     virtual WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&);
278     virtual bool shouldFallBack(const WebCore::ResourceError&);
279     virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
280     virtual void dispatchDecidePolicyForMIMEType(WebCore::FramePolicyFunction, const WebCore::String& MIMEType, const WebCore::ResourceRequest&);
281     virtual void dispatchDecidePolicyForNewWindowAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::String& frameName);
282     virtual void dispatchDecidePolicyForNavigationAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&);
283     virtual void dispatchUnableToImplementPolicy(const WebCore::ResourceError&);
284     virtual bool willUseArchive(WebCore::ResourceLoader*, const WebCore::ResourceRequest&, const WebCore::KURL& originalURL) const;
285     virtual void download(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
286
287     virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
288     virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
289     virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);
290     virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int lengthReceived);
291     virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier);
292     virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&);
293     virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length);
294     virtual void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&);
295     virtual void dispatchDidFailLoad(const WebCore::ResourceError&);
296     virtual WebCore::Frame* dispatchCreatePage();
297     virtual void startDownload(const WebCore::ResourceRequest&);
298     virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
299     virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
300
301     virtual void postProgressStartedNotification();
302     virtual void postProgressEstimateChangedNotification();
303     virtual void postProgressFinishedNotification();
304
305     virtual WebCore::Frame* createFrame(const WebCore::KURL& url, const WebCore::String& name, WebCore::HTMLFrameOwnerElement* ownerElement,
306                                const WebCore::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
307     virtual WebCore::Widget* createPlugin(const WebCore::IntSize&, WebCore::Element*, const WebCore::KURL&, const Vector<WebCore::String>&, const Vector<WebCore::String>&, const WebCore::String&, bool loadManually);
308     virtual void redirectDataToPlugin(WebCore::Widget* pluginWidget);
309         
310     virtual WebCore::Widget* createJavaAppletWidget(const WebCore::IntSize&, WebCore::Element*, const WebCore::KURL& baseURL, const Vector<WebCore::String>& paramNames, const Vector<WebCore::String>& paramValues);
311
312     virtual WebCore::ObjectContentType objectContentType(const WebCore::KURL& url, const WebCore::String& mimeType);
313     virtual WebCore::String overrideMediaType() const;
314
315     virtual void windowObjectCleared() const;
316
317     // WebFrame
318     void initWithWebFrameView(IWebFrameView*, IWebView*, WebCore::Page*, WebCore::HTMLFrameOwnerElement*);
319     void layoutIfNeededRecursive(WebCore::FrameView* frameView);
320     WebCore::Frame* impl();
321     void invalidate();
322     void receivedData(const char*, int, const WebCore::String&);
323     void unmarkAllMisspellings();
324     void unmarkAllBadGrammar();
325
326     // WebFrame (matching WebCoreFrameBridge)
327     void setTextSizeMultiplier(float multiplier);
328     HRESULT inViewSourceMode(BOOL *flag);
329     HRESULT setInViewSourceMode(BOOL flag);
330     HRESULT elementWithName(BSTR name, IDOMElement* form, IDOMElement** element);
331     HRESULT formForElement(IDOMElement* element, IDOMElement** form);
332     HRESULT elementDoesAutoComplete(IDOMElement* element, bool* result);
333     HRESULT controlsInForm(IDOMElement* form, IDOMElement** controls, int* cControls);
334     HRESULT elementIsPassword(IDOMElement* element, bool* result);
335     HRESULT searchForLabelsBeforeElement(const BSTR* labels, int cLabels, IDOMElement* beforeElement, BSTR* result);
336     HRESULT matchLabelsAgainstElement(const BSTR* labels, int cLabels, IDOMElement* againstElement, BSTR* result);
337     HRESULT canProvideDocumentSource(bool* result);
338     WebHistory* webHistory();
339
340     COMPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction function);
341     void receivedPolicyDecision(WebCore::PolicyAction);
342
343 protected:
344     void loadHTMLString(BSTR string, BSTR baseURL, BSTR unreachableURL);
345     void loadData(PassRefPtr<WebCore::SharedBuffer>, BSTR mimeType, BSTR textEncodingName, BSTR baseURL, BSTR failingURL);
346     void loadURLIntoChild(const WebCore::KURL&, const WebCore::String& referrer, WebFrame* childFrame);
347     const Vector<WebCore::IntRect>& computePageRects(HDC printDC);
348     void setPrinting(bool printing, float minPageWidth, float maxPageWidth, bool adjustViewSize);
349     void headerAndFooterHeights(float*, float*);
350
351 protected:
352     ULONG               m_refCount;
353     class WebFramePrivate;
354     WebFramePrivate*    d;
355     bool                m_quickRedirectComing;
356     WebCore::KURL       m_originalRequestURL;
357     bool                m_inPrintingMode;
358     Vector<WebCore::IntRect> m_pageRects;
359 };
360
361 #endif