4656c0d3ff3e5d93aa1609ca4214c7f1e6502f3d
[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, IWebDocumentText
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     virtual HRESULT STDMETHODCALLTYPE globalContext( 
149         /* [retval][out] */ JSGlobalContextRef* context);
150
151     // IWebFramePrivate
152     virtual HRESULT STDMETHODCALLTYPE renderTreeAsExternalRepresentation(
153         /* [retval][out] */ BSTR *result);
154
155     virtual HRESULT STDMETHODCALLTYPE scrollOffset(
156         /* [retval][out] */ SIZE* offset);
157
158     virtual HRESULT STDMETHODCALLTYPE layout();
159
160     virtual HRESULT STDMETHODCALLTYPE firstLayoutDone(
161         /* [retval][out] */ BOOL* result);
162
163     virtual HRESULT STDMETHODCALLTYPE loadType( 
164         /* [retval][out] */ WebFrameLoadType* type);
165
166     virtual HRESULT STDMETHODCALLTYPE setInPrintingMode( 
167         /* [in] */ BOOL value,
168         /* [in] */ HDC printDC);
169         
170     virtual HRESULT STDMETHODCALLTYPE getPrintedPageCount( 
171         /* [in] */ HDC printDC,
172         /* [retval][out] */ UINT *pageCount);
173     
174     virtual HRESULT STDMETHODCALLTYPE spoolPages( 
175         /* [in] */ HDC printDC,
176         /* [in] */ UINT startPage,
177         /* [in] */ UINT endPage,
178         /* [retval][out] */ void* ctx);
179
180     virtual HRESULT STDMETHODCALLTYPE isFrameSet( 
181         /* [retval][out] */ BOOL* result);
182
183     virtual HRESULT STDMETHODCALLTYPE string( 
184         /* [retval][out] */ BSTR* result);
185
186     virtual HRESULT STDMETHODCALLTYPE size( 
187         /* [retval][out] */ SIZE *size);
188
189     virtual HRESULT STDMETHODCALLTYPE hasScrollBars( 
190         /* [retval][out] */ BOOL *result);
191     
192     virtual HRESULT STDMETHODCALLTYPE contentBounds( 
193         /* [retval][out] */ RECT *result);
194     
195     virtual HRESULT STDMETHODCALLTYPE frameBounds( 
196         /* [retval][out] */ RECT *result);
197
198     virtual HRESULT STDMETHODCALLTYPE isDescendantOfFrame( 
199         /* [in] */ IWebFrame *ancestor,
200         /* [retval][out] */ BOOL *result);
201
202     virtual HRESULT STDMETHODCALLTYPE setAllowsScrolling(
203         /* [in] */ BOOL flag);
204
205     virtual HRESULT STDMETHODCALLTYPE allowsScrolling(
206         /* [retval][out] */ BOOL *flag);
207
208     // IWebDocumentText
209     virtual HRESULT STDMETHODCALLTYPE supportsTextEncoding( 
210         /* [retval][out] */ BOOL* result);
211     
212     virtual HRESULT STDMETHODCALLTYPE selectedString( 
213         /* [retval][out] */ BSTR* result);
214     
215     virtual HRESULT STDMETHODCALLTYPE selectAll();
216     
217     virtual HRESULT STDMETHODCALLTYPE deselectAll();
218
219     // FrameWinClient
220     virtual void ref();
221     virtual void deref();
222
223     virtual PassRefPtr<WebCore::Frame> createFrame(const WebCore::KURL&, const WebCore::String& name, WebCore::HTMLFrameOwnerElement*, const WebCore::String& referrer);
224     virtual void openURL(const WebCore::String& URL, const WebCore::Event* triggeringEvent, bool newWindow, bool lockHistory);
225     virtual void windowScriptObjectAvailable(JSContextRef context, JSObjectRef windowObject);
226     
227     // FrameLoaderClient
228     virtual void frameLoaderDestroyed();
229     virtual bool hasWebView() const;
230     virtual bool hasFrameView() const;
231     virtual bool privateBrowsingEnabled() const;
232     virtual void makeDocumentView();
233     virtual void makeRepresentation(WebCore::DocumentLoader*);
234     virtual void forceLayout();
235     virtual void forceLayoutForNonHTML();
236     virtual void setCopiesOnScroll();
237     virtual void detachedFromParent1();
238     virtual void detachedFromParent2();
239     virtual void detachedFromParent3();
240     virtual void detachedFromParent4();
241     virtual void loadedFromCachedPage();
242     virtual void dispatchDidHandleOnloadEvents();
243     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
244     virtual void dispatchDidCancelClientRedirect();
245     virtual void dispatchWillPerformClientRedirect(const WebCore::KURL&, double interval, double fireDate);
246     virtual void dispatchDidChangeLocationWithinPage();
247     virtual void dispatchWillClose();
248     virtual void dispatchDidReceiveIcon();
249     virtual void dispatchDidStartProvisionalLoad();
250     virtual void dispatchDidReceiveTitle(const WebCore::String& title);
251     virtual void dispatchDidCommitLoad();
252     virtual void dispatchDidFinishDocumentLoad();
253     virtual void dispatchDidFinishLoad();
254     virtual void dispatchDidFirstLayout();
255     virtual void dispatchShow();
256     virtual void cancelPolicyCheck();
257     virtual void dispatchWillSubmitForm(WebCore::FramePolicyFunction, PassRefPtr<WebCore::FormState>);
258     virtual void dispatchDidLoadMainResource(WebCore::DocumentLoader*);
259     virtual void revertToProvisionalState(WebCore::DocumentLoader*);
260     virtual void clearUnarchivingState(WebCore::DocumentLoader*);
261     virtual void setMainFrameDocumentReady(bool);
262     virtual void willChangeTitle(WebCore::DocumentLoader*);
263     virtual void didChangeTitle(WebCore::DocumentLoader*);
264     virtual void finishedLoading(WebCore::DocumentLoader*);
265     virtual void finalSetupForReplace(WebCore::DocumentLoader*);
266     virtual void setDefersLoading(bool);
267     virtual bool isArchiveLoadPending(WebCore::ResourceLoader*) const;
268     virtual void cancelPendingArchiveLoad(WebCore::ResourceLoader*);
269     virtual void clearArchivedResources();
270     virtual bool canHandleRequest(const WebCore::ResourceRequest&) const;
271     virtual bool canShowMIMEType(const WebCore::String& MIMEType) const;
272     virtual bool representationExistsForURLScheme(const WebCore::String& URLScheme) const;
273     virtual WebCore::String generatedMIMETypeForURLScheme(const WebCore::String& URLScheme) const;
274     virtual void frameLoadCompleted();
275     virtual void restoreViewState();
276     virtual void provisionalLoadStarted();
277     virtual bool shouldTreatURLAsSameAsCurrent(const WebCore::KURL&) const;
278     virtual void addHistoryItemForFragmentScroll();
279     virtual void didFinishLoad();
280     virtual void prepareForDataSourceReplacement();
281     virtual void setTitle(const WebCore::String& title, const WebCore::KURL&);
282     virtual WebCore::String userAgent(const WebCore::KURL&);
283     virtual void setDocumentViewFromCachedPage(WebCore::CachedPage *);
284     virtual void updateGlobalHistoryForStandardLoad(const WebCore::KURL &);
285     virtual void updateGlobalHistoryForReload(const WebCore::KURL &);
286     virtual bool shouldGoToHistoryItem(WebCore::HistoryItem *) const;
287     virtual void saveViewStateToItem(WebCore::HistoryItem *);
288     virtual void saveDocumentViewToCachedPage(WebCore::CachedPage *);
289     virtual bool canCachePage(void) const;
290     virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
291     virtual void setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&);
292     virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
293     virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
294     virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
295     virtual WebCore::ResourceError interruptForPolicyChangeError(const WebCore::ResourceRequest&);
296     virtual WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&);
297     virtual WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&);
298     virtual bool shouldFallBack(const WebCore::ResourceError&);
299     virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
300     virtual void dispatchDecidePolicyForMIMEType(WebCore::FramePolicyFunction, const WebCore::String& MIMEType, const WebCore::ResourceRequest&);
301     virtual void dispatchDecidePolicyForNewWindowAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::String& frameName);
302     virtual void dispatchDecidePolicyForNavigationAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&);
303     virtual void dispatchUnableToImplementPolicy(const WebCore::ResourceError&);
304     virtual bool willUseArchive(WebCore::ResourceLoader*, const WebCore::ResourceRequest&, const WebCore::KURL& originalURL) const;
305     virtual void download(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
306
307     virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
308     virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
309     virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);
310     virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int lengthReceived);
311     virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier);
312     virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&);
313     virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length);
314     virtual void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&);
315     virtual void dispatchDidFailLoad(const WebCore::ResourceError&);
316     virtual WebCore::Frame* dispatchCreatePage();
317     virtual void startDownload(const WebCore::ResourceRequest&);
318     virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
319     virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
320
321     virtual void postProgressStartedNotification();
322     virtual void postProgressEstimateChangedNotification();
323     virtual void postProgressFinishedNotification();
324
325     virtual PassRefPtr<WebCore::Frame> createFrame(const WebCore::KURL& url, const WebCore::String& name, WebCore::HTMLFrameOwnerElement* ownerElement,
326                                const WebCore::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
327     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);
328     virtual void redirectDataToPlugin(WebCore::Widget* pluginWidget);
329         
330     virtual WebCore::Widget* createJavaAppletWidget(const WebCore::IntSize&, WebCore::Element*, const WebCore::KURL& baseURL, const Vector<WebCore::String>& paramNames, const Vector<WebCore::String>& paramValues);
331
332     virtual WebCore::ObjectContentType objectContentType(const WebCore::KURL& url, const WebCore::String& mimeType);
333     virtual WebCore::String overrideMediaType() const;
334
335     virtual void windowObjectCleared() const;
336     virtual void didPerformFirstNavigation() const;
337     
338     virtual void registerForIconNotification(bool listen);
339
340     // WebFrame
341     void initWithWebFrameView(IWebFrameView*, IWebView*, WebCore::Page*, WebCore::HTMLFrameOwnerElement*);
342     WebCore::Frame* impl();
343     void invalidate();
344     void receivedData(const char*, int, const WebCore::String&);
345     void unmarkAllMisspellings();
346     void unmarkAllBadGrammar();
347
348     // WebFrame (matching WebCoreFrameBridge)
349     void setTextSizeMultiplier(float multiplier);
350     HRESULT inViewSourceMode(BOOL *flag);
351     HRESULT setInViewSourceMode(BOOL flag);
352     HRESULT elementWithName(BSTR name, IDOMElement* form, IDOMElement** element);
353     HRESULT formForElement(IDOMElement* element, IDOMElement** form);
354     HRESULT elementDoesAutoComplete(IDOMElement* element, bool* result);
355     HRESULT controlsInForm(IDOMElement* form, IDOMElement** controls, int* cControls);
356     HRESULT elementIsPassword(IDOMElement* element, bool* result);
357     HRESULT searchForLabelsBeforeElement(const BSTR* labels, int cLabels, IDOMElement* beforeElement, BSTR* result);
358     HRESULT matchLabelsAgainstElement(const BSTR* labels, int cLabels, IDOMElement* againstElement, BSTR* result);
359     HRESULT canProvideDocumentSource(bool* result);
360     WebHistory* webHistory();
361
362     COMPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction function);
363     void receivedPolicyDecision(WebCore::PolicyAction);
364
365     WebCore::KURL url() const;
366 protected:
367     void loadHTMLString(BSTR string, BSTR baseURL, BSTR unreachableURL);
368     void loadData(PassRefPtr<WebCore::SharedBuffer>, BSTR mimeType, BSTR textEncodingName, BSTR baseURL, BSTR failingURL);
369     void loadURLIntoChild(const WebCore::KURL&, const WebCore::String& referrer, WebFrame* childFrame);
370     const Vector<WebCore::IntRect>& computePageRects(HDC printDC);
371     void setPrinting(bool printing, float minPageWidth, float maxPageWidth, bool adjustViewSize);
372     void headerAndFooterHeights(float*, float*);
373     WebCore::IntRect printerMarginRect(HDC);
374
375 protected:
376     ULONG               m_refCount;
377     class WebFramePrivate;
378     WebFramePrivate*    d;
379     bool                m_quickRedirectComing;
380     WebCore::KURL       m_originalRequestURL;
381     bool                m_inPrintingMode;
382     Vector<WebCore::IntRect> m_pageRects;
383     int m_pageHeight;   // height of the page adjusted by margins
384 };
385
386 #endif