WebCore:
[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 #include <WTF/OwnPtr.h>
46
47 namespace WebCore {
48     class AuthenticationChallenge;
49     class DocumentLoader;
50     class Element;
51     class Frame;
52     class HTMLFrameOwnerElement;
53     class IntRect;
54     class Page;
55     class ResourceError;
56     class SharedBuffer;
57 }
58
59 typedef const struct OpaqueJSContext* JSContextRef;
60 typedef struct OpaqueJSValue* JSObjectRef;
61
62 class WebFrame;
63 class WebFramePolicyListener;
64 class WebHistory;
65 class WebScriptDebugger;
66 class WebView;
67
68 interface IWebHistoryItemPrivate;
69
70 WebFrame* kit(WebCore::Frame*);
71 WebCore::Frame* core(WebFrame*);
72
73 extern const GUID IID_WebFrame;
74
75 class WebFrame : public IWebFrame, IWebFramePrivate, IWebDocumentText
76     , public WebCore::FrameLoaderClient
77 {
78 public:
79     static WebFrame* createInstance();
80 protected:
81     WebFrame();
82     ~WebFrame();
83
84 public:
85     // IUnknown
86     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
87     virtual ULONG STDMETHODCALLTYPE AddRef(void);
88     virtual ULONG STDMETHODCALLTYPE Release(void);
89
90     //IWebFrame
91     virtual HRESULT STDMETHODCALLTYPE name( 
92         /* [retval][out] */ BSTR *frameName);
93     
94     virtual HRESULT STDMETHODCALLTYPE webView( 
95         /* [retval][out] */ IWebView **view);
96
97     virtual HRESULT STDMETHODCALLTYPE frameView(
98         /* [retval][out] */ IWebFrameView **view);
99
100     virtual HRESULT STDMETHODCALLTYPE DOMDocument( 
101         /* [retval][out] */ IDOMDocument** document);
102     
103     virtual HRESULT STDMETHODCALLTYPE frameElement( 
104         /* [retval][out] */ IDOMHTMLElement **frameElement);
105     
106     virtual HRESULT STDMETHODCALLTYPE loadRequest( 
107         /* [in] */ IWebURLRequest *request);
108     
109     virtual HRESULT STDMETHODCALLTYPE loadData( 
110         /* [in] */ IStream *data,
111         /* [in] */ BSTR mimeType,
112         /* [in] */ BSTR textEncodingName,
113         /* [in] */ BSTR url);
114     
115     virtual HRESULT STDMETHODCALLTYPE loadHTMLString( 
116         /* [in] */ BSTR string,
117         /* [in] */ BSTR baseURL);
118     
119     virtual HRESULT STDMETHODCALLTYPE loadAlternateHTMLString( 
120         /* [in] */ BSTR str,
121         /* [in] */ BSTR baseURL,
122         /* [in] */ BSTR unreachableURL);
123     
124     virtual HRESULT STDMETHODCALLTYPE loadArchive( 
125         /* [in] */ IWebArchive *archive);
126     
127     virtual HRESULT STDMETHODCALLTYPE dataSource( 
128         /* [retval][out] */ IWebDataSource **source);
129     
130     virtual HRESULT STDMETHODCALLTYPE provisionalDataSource( 
131         /* [retval][out] */ IWebDataSource **source);
132     
133     virtual HRESULT STDMETHODCALLTYPE stopLoading( void);
134     
135     virtual HRESULT STDMETHODCALLTYPE reload( void);
136     
137     virtual HRESULT STDMETHODCALLTYPE findFrameNamed( 
138         /* [in] */ BSTR name,
139         /* [retval][out] */ IWebFrame **frame);
140     
141     virtual HRESULT STDMETHODCALLTYPE parentFrame( 
142         /* [retval][out] */ IWebFrame **frame);
143     
144     virtual HRESULT STDMETHODCALLTYPE childFrames( 
145         /* [retval][out] */ IEnumVARIANT **enumFrames);
146
147     virtual HRESULT STDMETHODCALLTYPE currentForm( 
148         /* [retval][out] */ IDOMElement **formElement);
149
150     virtual /* [local] */ JSGlobalContextRef STDMETHODCALLTYPE globalContext();
151
152     // IWebFramePrivate
153     virtual HRESULT STDMETHODCALLTYPE renderTreeAsExternalRepresentation(
154         /* [retval][out] */ BSTR *result);
155
156     virtual HRESULT STDMETHODCALLTYPE scrollOffset(
157         /* [retval][out] */ SIZE* offset);
158
159     virtual HRESULT STDMETHODCALLTYPE layout();
160
161     virtual HRESULT STDMETHODCALLTYPE firstLayoutDone(
162         /* [retval][out] */ BOOL* result);
163
164     virtual HRESULT STDMETHODCALLTYPE loadType( 
165         /* [retval][out] */ WebFrameLoadType* type);
166
167     virtual HRESULT STDMETHODCALLTYPE setInPrintingMode( 
168         /* [in] */ BOOL value,
169         /* [in] */ HDC printDC);
170         
171     virtual HRESULT STDMETHODCALLTYPE getPrintedPageCount( 
172         /* [in] */ HDC printDC,
173         /* [retval][out] */ UINT *pageCount);
174     
175     virtual HRESULT STDMETHODCALLTYPE spoolPages( 
176         /* [in] */ HDC printDC,
177         /* [in] */ UINT startPage,
178         /* [in] */ UINT endPage,
179         /* [retval][out] */ void* ctx);
180
181     virtual HRESULT STDMETHODCALLTYPE isFrameSet( 
182         /* [retval][out] */ BOOL* result);
183
184     virtual HRESULT STDMETHODCALLTYPE string( 
185         /* [retval][out] */ BSTR* result);
186
187     virtual HRESULT STDMETHODCALLTYPE size( 
188         /* [retval][out] */ SIZE *size);
189
190     virtual HRESULT STDMETHODCALLTYPE hasScrollBars( 
191         /* [retval][out] */ BOOL *result);
192     
193     virtual HRESULT STDMETHODCALLTYPE contentBounds( 
194         /* [retval][out] */ RECT *result);
195     
196     virtual HRESULT STDMETHODCALLTYPE frameBounds( 
197         /* [retval][out] */ RECT *result);
198
199     virtual HRESULT STDMETHODCALLTYPE isDescendantOfFrame( 
200         /* [in] */ IWebFrame *ancestor,
201         /* [retval][out] */ BOOL *result);
202
203     virtual HRESULT STDMETHODCALLTYPE setAllowsScrolling(
204         /* [in] */ BOOL flag);
205
206     virtual HRESULT STDMETHODCALLTYPE allowsScrolling(
207         /* [retval][out] */ BOOL *flag);
208
209     // IWebDocumentText
210     virtual HRESULT STDMETHODCALLTYPE supportsTextEncoding( 
211         /* [retval][out] */ BOOL* result);
212     
213     virtual HRESULT STDMETHODCALLTYPE selectedString( 
214         /* [retval][out] */ BSTR* result);
215     
216     virtual HRESULT STDMETHODCALLTYPE selectAll();
217     
218     virtual HRESULT STDMETHODCALLTYPE deselectAll();
219
220     // FrameWinClient
221     virtual void ref();
222     virtual void deref();
223
224     virtual PassRefPtr<WebCore::Frame> createFrame(const WebCore::KURL&, const WebCore::String& name, WebCore::HTMLFrameOwnerElement*, const WebCore::String& referrer);
225     virtual void openURL(const WebCore::String& URL, const WebCore::Event* triggeringEvent, bool newWindow, bool lockHistory);
226     virtual void windowScriptObjectAvailable(JSContextRef context, JSObjectRef windowObject);
227     
228     // FrameLoaderClient
229     virtual void frameLoaderDestroyed();
230     virtual bool hasWebView() const;
231     virtual bool hasFrameView() const;
232     virtual bool privateBrowsingEnabled() const;
233     virtual void makeDocumentView();
234     virtual void makeRepresentation(WebCore::DocumentLoader*);
235     virtual void forceLayout();
236     virtual void forceLayoutForNonHTML();
237     virtual void setCopiesOnScroll();
238     virtual void detachedFromParent1();
239     virtual void detachedFromParent2();
240     virtual void detachedFromParent3();
241     virtual void detachedFromParent4();
242     virtual void loadedFromCachedPage();
243     virtual void dispatchDidHandleOnloadEvents();
244     virtual void dispatchDidReceiveServerRedirectForProvisionalLoad();
245     virtual void dispatchDidCancelClientRedirect();
246     virtual void dispatchWillPerformClientRedirect(const WebCore::KURL&, double interval, double fireDate);
247     virtual void dispatchDidChangeLocationWithinPage();
248     virtual void dispatchWillClose();
249     virtual void dispatchDidReceiveIcon();
250     virtual void dispatchDidStartProvisionalLoad();
251     virtual void dispatchDidReceiveTitle(const WebCore::String& title);
252     virtual void dispatchDidCommitLoad();
253     virtual void dispatchDidFinishDocumentLoad();
254     virtual void dispatchDidFinishLoad();
255     virtual void dispatchDidFirstLayout();
256     virtual void dispatchShow();
257     virtual void cancelPolicyCheck();
258     virtual void dispatchWillSubmitForm(WebCore::FramePolicyFunction, PassRefPtr<WebCore::FormState>);
259     virtual void dispatchDidLoadMainResource(WebCore::DocumentLoader*);
260     virtual void revertToProvisionalState(WebCore::DocumentLoader*);
261     virtual void clearUnarchivingState(WebCore::DocumentLoader*);
262     virtual void setMainFrameDocumentReady(bool);
263     virtual void willChangeTitle(WebCore::DocumentLoader*);
264     virtual void didChangeTitle(WebCore::DocumentLoader*);
265     virtual void finishedLoading(WebCore::DocumentLoader*);
266     virtual void finalSetupForReplace(WebCore::DocumentLoader*);
267     virtual void setDefersLoading(bool);
268     virtual bool isArchiveLoadPending(WebCore::ResourceLoader*) const;
269     virtual void cancelPendingArchiveLoad(WebCore::ResourceLoader*);
270     virtual void clearArchivedResources();
271     virtual bool canHandleRequest(const WebCore::ResourceRequest&) const;
272     virtual bool canShowMIMEType(const WebCore::String& MIMEType) const;
273     virtual bool representationExistsForURLScheme(const WebCore::String& URLScheme) const;
274     virtual WebCore::String generatedMIMETypeForURLScheme(const WebCore::String& URLScheme) const;
275     virtual void frameLoadCompleted();
276     virtual void restoreViewState();
277     virtual void provisionalLoadStarted();
278     virtual bool shouldTreatURLAsSameAsCurrent(const WebCore::KURL&) const;
279     virtual void addHistoryItemForFragmentScroll();
280     virtual void didFinishLoad();
281     virtual void prepareForDataSourceReplacement();
282     virtual void setTitle(const WebCore::String& title, const WebCore::KURL&);
283     virtual WebCore::String userAgent(const WebCore::KURL&);
284     virtual void setDocumentViewFromCachedPage(WebCore::CachedPage *);
285     virtual void updateGlobalHistoryForStandardLoad(const WebCore::KURL &);
286     virtual void updateGlobalHistoryForReload(const WebCore::KURL &);
287     virtual bool shouldGoToHistoryItem(WebCore::HistoryItem *) const;
288     virtual void saveViewStateToItem(WebCore::HistoryItem *);
289     virtual void saveDocumentViewToCachedPage(WebCore::CachedPage *);
290     virtual bool canCachePage(void) const;
291     virtual PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
292     virtual void setMainDocumentError(WebCore::DocumentLoader*, const WebCore::ResourceError&);
293     virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
294     virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
295     virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
296     virtual WebCore::ResourceError interruptForPolicyChangeError(const WebCore::ResourceRequest&);
297     virtual WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&);
298     virtual WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&);
299     virtual bool shouldFallBack(const WebCore::ResourceError&);
300     virtual void committedLoad(WebCore::DocumentLoader*, const char*, int);
301     virtual void dispatchDecidePolicyForMIMEType(WebCore::FramePolicyFunction, const WebCore::String& MIMEType, const WebCore::ResourceRequest&);
302     virtual void dispatchDecidePolicyForNewWindowAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, const WebCore::String& frameName);
303     virtual void dispatchDecidePolicyForNavigationAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&);
304     virtual void dispatchUnableToImplementPolicy(const WebCore::ResourceError&);
305     virtual bool willUseArchive(WebCore::ResourceLoader*, const WebCore::ResourceRequest&, const WebCore::KURL& originalURL) const;
306     virtual void download(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
307
308     virtual void assignIdentifierToInitialRequest(unsigned long identifier, WebCore::DocumentLoader*, const WebCore::ResourceRequest&);
309     virtual void dispatchWillSendRequest(WebCore::DocumentLoader*, unsigned long identifier, WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse);
310     virtual void dispatchDidReceiveResponse(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceResponse&);
311     virtual void dispatchDidReceiveContentLength(WebCore::DocumentLoader*, unsigned long identifier, int lengthReceived);
312     virtual void dispatchDidFinishLoading(WebCore::DocumentLoader*, unsigned long identifier);
313     virtual void dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::ResourceError&);
314     virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length);
315     virtual void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&);
316     virtual void dispatchDidFailLoad(const WebCore::ResourceError&);
317     virtual WebCore::Frame* dispatchCreatePage();
318     virtual void startDownload(const WebCore::ResourceRequest&);
319     virtual void dispatchDidReceiveAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
320     virtual void dispatchDidCancelAuthenticationChallenge(WebCore::DocumentLoader*, unsigned long identifier, const WebCore::AuthenticationChallenge&);
321
322     virtual void postProgressStartedNotification();
323     virtual void postProgressEstimateChangedNotification();
324     virtual void postProgressFinishedNotification();
325
326     virtual PassRefPtr<WebCore::Frame> createFrame(const WebCore::KURL& url, const WebCore::String& name, WebCore::HTMLFrameOwnerElement* ownerElement,
327                                const WebCore::String& referrer, bool allowsScrolling, int marginWidth, int marginHeight);
328     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);
329     virtual void redirectDataToPlugin(WebCore::Widget* pluginWidget);
330         
331     virtual WebCore::Widget* createJavaAppletWidget(const WebCore::IntSize&, WebCore::Element*, const WebCore::KURL& baseURL, const Vector<WebCore::String>& paramNames, const Vector<WebCore::String>& paramValues);
332
333     virtual WebCore::ObjectContentType objectContentType(const WebCore::KURL& url, const WebCore::String& mimeType);
334     virtual WebCore::String overrideMediaType() const;
335
336     virtual void windowObjectCleared();
337     virtual void didPerformFirstNavigation() const;
338
339     virtual void registerForIconNotification(bool listen);
340
341     // WebFrame
342     void initWithWebFrameView(IWebFrameView*, IWebView*, WebCore::Page*, WebCore::HTMLFrameOwnerElement*);
343     WebCore::Frame* impl();
344     void invalidate();
345     void receivedData(const char*, int, const WebCore::String&);
346     void unmarkAllMisspellings();
347     void unmarkAllBadGrammar();
348
349     // WebFrame (matching WebCoreFrameBridge)
350     void setTextSizeMultiplier(float multiplier);
351     HRESULT inViewSourceMode(BOOL *flag);
352     HRESULT setInViewSourceMode(BOOL flag);
353     HRESULT elementWithName(BSTR name, IDOMElement* form, IDOMElement** element);
354     HRESULT formForElement(IDOMElement* element, IDOMElement** form);
355     HRESULT elementDoesAutoComplete(IDOMElement* element, bool* result);
356     HRESULT controlsInForm(IDOMElement* form, IDOMElement** controls, int* cControls);
357     HRESULT elementIsPassword(IDOMElement* element, bool* result);
358     HRESULT searchForLabelsBeforeElement(const BSTR* labels, int cLabels, IDOMElement* beforeElement, BSTR* result);
359     HRESULT matchLabelsAgainstElement(const BSTR* labels, int cLabels, IDOMElement* againstElement, BSTR* result);
360     HRESULT canProvideDocumentSource(bool* result);
361     WebHistory* webHistory();
362
363     COMPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction function);
364     void receivedPolicyDecision(WebCore::PolicyAction);
365
366     WebCore::KURL url() const;
367
368     virtual void attachScriptDebugger();
369     virtual void detachScriptDebugger();
370
371 protected:
372     void loadHTMLString(BSTR string, BSTR baseURL, BSTR unreachableURL);
373     void loadData(PassRefPtr<WebCore::SharedBuffer>, BSTR mimeType, BSTR textEncodingName, BSTR baseURL, BSTR failingURL);
374     void loadURLIntoChild(const WebCore::KURL&, const WebCore::String& referrer, WebFrame* childFrame);
375     const Vector<WebCore::IntRect>& computePageRects(HDC printDC);
376     void setPrinting(bool printing, float minPageWidth, float maxPageWidth, bool adjustViewSize);
377     void headerAndFooterHeights(float*, float*);
378     WebCore::IntRect printerMarginRect(HDC);
379
380 protected:
381     ULONG               m_refCount;
382     class WebFramePrivate;
383     WebFramePrivate*    d;
384     bool                m_quickRedirectComing;
385     WebCore::KURL       m_originalRequestURL;
386     bool                m_inPrintingMode;
387     Vector<WebCore::IntRect> m_pageRects;
388     int m_pageHeight;   // height of the page adjusted by margins
389
390 private:
391     OwnPtr<WebScriptDebugger> m_scriptDebugger;
392 };
393
394 #endif