• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006, 2007, 2011 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 "WebFrameLoaderClient.h"
30 
31 #include "WebKit.h"
32 #include "WebDataSource.h"
33 
34 #include "AccessibleDocument.h"
35 
36 #include <WebCore/FrameWin.h>
37 #include <WebCore/GraphicsContext.h>
38 #include <WebCore/KURL.h>
39 #include <WebCore/PlatformString.h>
40 #include <WebCore/ResourceHandleClient.h>
41 
42 #include <WTF/RefPtr.h>
43 #include <WTF/HashMap.h>
44 #include <WTF/OwnPtr.h>
45 
46 namespace WebCore {
47     class AuthenticationChallenge;
48     class DocumentLoader;
49     class Element;
50     class Frame;
51     class GraphicsContext;
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 #if USE(CG)
63 typedef struct CGContext PlatformGraphicsContext;
64 #elif USE(CAIRO)
65 namespace WebCore {
66 class PlatformContextCairo;
67 }
68 typedef class WebCore::PlatformContextCairo PlatformGraphicsContext;
69 #endif
70 
71 class WebFrame;
72 class WebFramePolicyListener;
73 class WebHistory;
74 class WebView;
75 
76 interface IWebHistoryItemPrivate;
77 
78 WebFrame* kit(WebCore::Frame*);
79 WebCore::Frame* core(WebFrame*);
80 
81 class DECLSPEC_UUID("{A3676398-4485-4a9d-87DC-CB5A40E6351D}") WebFrame : public IWebFrame, IWebFramePrivate, IWebDocumentText
82     , public WebFrameLoaderClient
83 {
84 public:
85     static WebFrame* createInstance();
86 protected:
87     WebFrame();
88     ~WebFrame();
89 
90 public:
91     // IUnknown
92     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
93     virtual ULONG STDMETHODCALLTYPE AddRef(void);
94     virtual ULONG STDMETHODCALLTYPE Release(void);
95 
96     //IWebFrame
97     virtual HRESULT STDMETHODCALLTYPE name(
98         /* [retval][out] */ BSTR *frameName);
99 
100     virtual HRESULT STDMETHODCALLTYPE webView(
101         /* [retval][out] */ IWebView **view);
102 
103     virtual HRESULT STDMETHODCALLTYPE frameView(
104         /* [retval][out] */ IWebFrameView **view);
105 
106     virtual HRESULT STDMETHODCALLTYPE DOMDocument(
107         /* [retval][out] */ IDOMDocument** document);
108 
109     virtual HRESULT STDMETHODCALLTYPE frameElement(
110         /* [retval][out] */ IDOMHTMLElement **frameElement);
111 
112     virtual HRESULT STDMETHODCALLTYPE loadRequest(
113         /* [in] */ IWebURLRequest *request);
114 
115     virtual HRESULT STDMETHODCALLTYPE loadData(
116         /* [in] */ IStream *data,
117         /* [in] */ BSTR mimeType,
118         /* [in] */ BSTR textEncodingName,
119         /* [in] */ BSTR url);
120 
121     virtual HRESULT STDMETHODCALLTYPE loadHTMLString(
122         /* [in] */ BSTR string,
123         /* [in] */ BSTR baseURL);
124 
125     virtual HRESULT STDMETHODCALLTYPE loadAlternateHTMLString(
126         /* [in] */ BSTR str,
127         /* [in] */ BSTR baseURL,
128         /* [in] */ BSTR unreachableURL);
129 
130     virtual HRESULT STDMETHODCALLTYPE loadArchive(
131         /* [in] */ IWebArchive *archive);
132 
133     virtual HRESULT STDMETHODCALLTYPE dataSource(
134         /* [retval][out] */ IWebDataSource **source);
135 
136     virtual HRESULT STDMETHODCALLTYPE provisionalDataSource(
137         /* [retval][out] */ IWebDataSource **source);
138 
139     virtual HRESULT STDMETHODCALLTYPE stopLoading( void);
140 
141     virtual HRESULT STDMETHODCALLTYPE reload( void);
142 
143     virtual HRESULT STDMETHODCALLTYPE findFrameNamed(
144         /* [in] */ BSTR name,
145         /* [retval][out] */ IWebFrame **frame);
146 
147     virtual HRESULT STDMETHODCALLTYPE parentFrame(
148         /* [retval][out] */ IWebFrame **frame);
149 
150     virtual HRESULT STDMETHODCALLTYPE childFrames(
151         /* [retval][out] */ IEnumVARIANT **enumFrames);
152 
153     virtual HRESULT STDMETHODCALLTYPE currentForm(
154         /* [retval][out] */ IDOMElement **formElement);
155 
156     virtual /* [local] */ JSGlobalContextRef STDMETHODCALLTYPE globalContext();
157 
158     // IWebFramePrivate
unused1(BSTR *)159     virtual HRESULT STDMETHODCALLTYPE unused1(BSTR*) { return E_NOTIMPL; }
160     virtual HRESULT STDMETHODCALLTYPE renderTreeAsExternalRepresentation(BOOL forPrinting, BSTR *result);
161 
162     virtual HRESULT STDMETHODCALLTYPE counterValueForElementById(
163         /* [in] */ BSTR id,
164         /* [retval][out] */ BSTR *result);
165 
166     virtual HRESULT STDMETHODCALLTYPE pageNumberForElementById(
167         /* [in] */ BSTR id,
168         /* [in] */ float pageWidthInPixels,
169         /* [in] */ float pageHeightInPixels,
170         /* [retval][out] */ int* result);
171 
172     virtual HRESULT STDMETHODCALLTYPE numberOfPages(
173         /* [in] */ float pageWidthInPixels,
174         /* [in] */ float pageHeightInPixels,
175         /* [retval][out] */ int* result);
176 
177     virtual HRESULT STDMETHODCALLTYPE scrollOffset(
178         /* [retval][out] */ SIZE* offset);
179 
180     virtual HRESULT STDMETHODCALLTYPE layout();
181 
182     virtual HRESULT STDMETHODCALLTYPE firstLayoutDone(
183         /* [retval][out] */ BOOL* result);
184 
185     virtual HRESULT STDMETHODCALLTYPE loadType(
186         /* [retval][out] */ WebFrameLoadType* type);
187 
188     virtual HRESULT STDMETHODCALLTYPE pendingFrameUnloadEventCount(
189         /* [retval][out] */ UINT* result);
190 
191     virtual HRESULT STDMETHODCALLTYPE unused2();
192 
193     virtual HRESULT STDMETHODCALLTYPE setInPrintingMode(
194         /* [in] */ BOOL value,
195         /* [in] */ HDC printDC);
196 
197     virtual HRESULT STDMETHODCALLTYPE getPrintedPageCount(
198         /* [in] */ HDC printDC,
199         /* [retval][out] */ UINT *pageCount);
200 
201     virtual HRESULT STDMETHODCALLTYPE spoolPages(
202         /* [in] */ HDC printDC,
203         /* [in] */ UINT startPage,
204         /* [in] */ UINT endPage,
205         /* [retval][out] */ void* ctx);
206 
207     virtual HRESULT STDMETHODCALLTYPE isFrameSet(
208         /* [retval][out] */ BOOL* result);
209 
210     virtual HRESULT STDMETHODCALLTYPE string(
211         /* [retval][out] */ BSTR* result);
212 
213     virtual HRESULT STDMETHODCALLTYPE size(
214         /* [retval][out] */ SIZE *size);
215 
216     virtual HRESULT STDMETHODCALLTYPE hasScrollBars(
217         /* [retval][out] */ BOOL *result);
218 
219     virtual HRESULT STDMETHODCALLTYPE contentBounds(
220         /* [retval][out] */ RECT *result);
221 
222     virtual HRESULT STDMETHODCALLTYPE frameBounds(
223         /* [retval][out] */ RECT *result);
224 
225     virtual HRESULT STDMETHODCALLTYPE isDescendantOfFrame(
226         /* [in] */ IWebFrame *ancestor,
227         /* [retval][out] */ BOOL *result);
228 
229     virtual HRESULT STDMETHODCALLTYPE setAllowsScrolling(
230         /* [in] */ BOOL flag);
231 
232     virtual HRESULT STDMETHODCALLTYPE allowsScrolling(
233         /* [retval][out] */ BOOL *flag);
234 
235     virtual HRESULT STDMETHODCALLTYPE setIsDisconnected(
236         /* [in] */ BOOL flag);
237 
238     virtual HRESULT STDMETHODCALLTYPE setExcludeFromTextSearch(
239         /* [in] */ BOOL flag);
240 
241     virtual HRESULT STDMETHODCALLTYPE reloadFromOrigin();
242 
243     virtual HRESULT STDMETHODCALLTYPE paintDocumentRectToContext(
244         /* [in] */ RECT rect,
245         /* [in] */ OLE_HANDLE deviceContext);
246 
247     virtual HRESULT STDMETHODCALLTYPE paintScrollViewRectToContextAtPoint(
248         /* [in] */ RECT rect,
249         /* [in] */ POINT pt,
250         /* [in] */ OLE_HANDLE deviceContext);
251 
252     virtual HRESULT STDMETHODCALLTYPE elementDoesAutoComplete(
253         /* [in] */ IDOMElement* element,
254         /* [retval][out] */ BOOL* result);
255 
256     virtual HRESULT STDMETHODCALLTYPE pauseAnimation(BSTR animationName, IDOMNode*, double secondsFromNow, BOOL* animationWasRunning);
257     virtual HRESULT STDMETHODCALLTYPE pauseTransition(BSTR propertyName, IDOMNode*, double secondsFromNow, BOOL* transitionWasRunning);
258     virtual HRESULT STDMETHODCALLTYPE pauseSVGAnimation(BSTR elementId, IDOMNode*, double secondsFromNow, BOOL* animationWasRunning);
259     virtual HRESULT STDMETHODCALLTYPE numberOfActiveAnimations(UINT*);
260     virtual HRESULT STDMETHODCALLTYPE suspendAnimations();
261     virtual HRESULT STDMETHODCALLTYPE resumeAnimations();
262     virtual HRESULT STDMETHODCALLTYPE loadPlainTextString(BSTR string, BSTR url);
263 
264     virtual HRESULT STDMETHODCALLTYPE isDisplayingStandaloneImage(BOOL*);
265 
266     virtual HRESULT STDMETHODCALLTYPE allowsFollowingLink(
267         /* [in] */ BSTR url,
268         /* [retval][out] */ BOOL* result);
269 
270     virtual HRESULT STDMETHODCALLTYPE stringByEvaluatingJavaScriptInScriptWorld(IWebScriptWorld*, JSObjectRef globalObjectRef, BSTR script, BSTR* evaluationResult);
271     virtual JSGlobalContextRef STDMETHODCALLTYPE globalContextForScriptWorld(IWebScriptWorld*);
272 
273     virtual HRESULT STDMETHODCALLTYPE visibleContentRect(RECT*);
274 
275     virtual HRESULT STDMETHODCALLTYPE layerTreeAsText(BSTR*);
276 
277     virtual HRESULT STDMETHODCALLTYPE hasSpellingMarker(
278         /* [in] */ UINT from,
279         /* [in] */ UINT length,
280         /* [retval][out] */ BOOL *result);
281 
282     virtual HRESULT STDMETHODCALLTYPE clearOpener();
283 
284     // IWebDocumentText
285     virtual HRESULT STDMETHODCALLTYPE supportsTextEncoding(
286         /* [retval][out] */ BOOL* result);
287 
288     virtual HRESULT STDMETHODCALLTYPE selectedString(
289         /* [retval][out] */ BSTR* result);
290 
291     virtual HRESULT STDMETHODCALLTYPE selectAll();
292 
293     virtual HRESULT STDMETHODCALLTYPE deselectAll();
294 
295     // FrameLoaderClient
296     virtual void frameLoaderDestroyed();
297     virtual void makeRepresentation(WebCore::DocumentLoader*);
298     virtual void forceLayoutForNonHTML();
299     virtual void setCopiesOnScroll();
300     virtual void detachedFromParent2();
301     virtual void detachedFromParent3();
302     virtual void cancelPolicyCheck();
dispatchWillSendSubmitEvent(WebCore::HTMLFormElement *)303     virtual void dispatchWillSendSubmitEvent(WebCore::HTMLFormElement*) { }
304     virtual void dispatchWillSubmitForm(WebCore::FramePolicyFunction, PassRefPtr<WebCore::FormState>);
305     virtual void revertToProvisionalState(WebCore::DocumentLoader*);
306     virtual void setMainFrameDocumentReady(bool);
307     virtual void willChangeTitle(WebCore::DocumentLoader*);
308     virtual void didChangeTitle(WebCore::DocumentLoader*);
309     virtual void didChangeIcons(WebCore::DocumentLoader*);
310     virtual bool canHandleRequest(const WebCore::ResourceRequest&) const;
311     virtual bool canShowMIMEType(const WTF::String& MIMEType) const;
312     virtual bool canShowMIMETypeAsHTML(const WTF::String& MIMEType) const;
313     virtual bool representationExistsForURLScheme(const WTF::String& URLScheme) const;
314     virtual WTF::String generatedMIMETypeForURLScheme(const WTF::String& URLScheme) const;
315     virtual void frameLoadCompleted();
316     virtual void restoreViewState();
317     virtual void provisionalLoadStarted();
318     virtual bool shouldTreatURLAsSameAsCurrent(const WebCore::KURL&) const;
319     virtual void addHistoryItemForFragmentScroll();
320     virtual void didFinishLoad();
321     virtual void prepareForDataSourceReplacement();
322     virtual WTF::String userAgent(const WebCore::KURL&);
323     virtual void saveViewStateToItem(WebCore::HistoryItem *);
324     virtual WebCore::ResourceError cancelledError(const WebCore::ResourceRequest&);
325     virtual WebCore::ResourceError blockedError(const WebCore::ResourceRequest&);
326     virtual WebCore::ResourceError cannotShowURLError(const WebCore::ResourceRequest&);
327     virtual WebCore::ResourceError interruptForPolicyChangeError(const WebCore::ResourceRequest&);
328     virtual WebCore::ResourceError cannotShowMIMETypeError(const WebCore::ResourceResponse&);
329     virtual WebCore::ResourceError fileDoesNotExistError(const WebCore::ResourceResponse&);
330     virtual WebCore::ResourceError pluginWillHandleLoadError(const WebCore::ResourceResponse&);
331     virtual bool shouldFallBack(const WebCore::ResourceError&);
332     virtual void dispatchDecidePolicyForResponse(WebCore::FramePolicyFunction, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&);
333     virtual void dispatchDecidePolicyForNewWindowAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<WebCore::FormState>, const WTF::String& frameName);
334     virtual void dispatchDecidePolicyForNavigationAction(WebCore::FramePolicyFunction, const WebCore::NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<WebCore::FormState>);
335     virtual void dispatchUnableToImplementPolicy(const WebCore::ResourceError&);
336     virtual void download(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
337 
338     virtual bool dispatchDidLoadResourceFromMemoryCache(WebCore::DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int length);
339     virtual void dispatchDidFailProvisionalLoad(const WebCore::ResourceError&);
340     virtual void dispatchDidFailLoad(const WebCore::ResourceError&);
341     virtual void startDownload(const WebCore::ResourceRequest&);
342 
343     virtual PassRefPtr<WebCore::Widget> createJavaAppletWidget(const WebCore::IntSize&, WebCore::HTMLAppletElement*, const WebCore::KURL& baseURL, const Vector<WTF::String>& paramNames, const Vector<WTF::String>& paramValues);
344 
345     virtual WebCore::ObjectContentType objectContentType(const WebCore::KURL&, const WTF::String& mimeType, bool shouldPreferPlugInsForImages);
346     virtual WTF::String overrideMediaType() const;
347 
348     virtual void dispatchDidClearWindowObjectInWorld(WebCore::DOMWrapperWorld*);
349     virtual void documentElementAvailable();
350     virtual void didPerformFirstNavigation() const;
351 
352     virtual void registerForIconNotification(bool listen);
353 
354     virtual PassRefPtr<WebCore::FrameNetworkingContext> createNetworkingContext();
355 
356     // WebFrame
357     PassRefPtr<WebCore::Frame> init(IWebView*, WebCore::Page*, WebCore::HTMLFrameOwnerElement*);
358     WebCore::Frame* impl();
359     void invalidate();
360     void unmarkAllMisspellings();
361     void unmarkAllBadGrammar();
362 
363     void updateBackground();
364 
365     // WebFrame (matching WebCoreFrameBridge)
366     HRESULT inViewSourceMode(BOOL *flag);
367     HRESULT setInViewSourceMode(BOOL flag);
368     HRESULT elementWithName(BSTR name, IDOMElement* form, IDOMElement** element);
369     HRESULT formForElement(IDOMElement* element, IDOMElement** form);
370     HRESULT controlsInForm(IDOMElement* form, IDOMElement** controls, int* cControls);
371     HRESULT elementIsPassword(IDOMElement* element, bool* result);
372     HRESULT searchForLabelsBeforeElement(const BSTR* labels, unsigned cLabels, IDOMElement* beforeElement, unsigned* resultDistance, BOOL* resultIsInCellAbove, BSTR* result);
373     HRESULT matchLabelsAgainstElement(const BSTR* labels, int cLabels, IDOMElement* againstElement, BSTR* result);
374     HRESULT canProvideDocumentSource(bool* result);
375 
376     COMPtr<WebFramePolicyListener> setUpPolicyListener(WebCore::FramePolicyFunction function);
377     void receivedPolicyDecision(WebCore::PolicyAction);
378 
379     WebCore::KURL url() const;
380 
381     WebView* webView() const;
382     void setWebView(WebView*);
383 
384     COMPtr<IAccessible> accessible() const;
385 
386 protected:
387     void loadHTMLString(BSTR string, BSTR baseURL, BSTR unreachableURL);
388     void loadData(PassRefPtr<WebCore::SharedBuffer>, BSTR mimeType, BSTR textEncodingName, BSTR baseURL, BSTR failingURL);
389     const Vector<WebCore::IntRect>& computePageRects(HDC printDC);
390     void setPrinting(bool printing, float minPageWidth, float maxPageWidth, float minPageHeight, bool adjustViewSize);
391     void headerAndFooterHeights(float*, float*);
392     WebCore::IntRect printerMarginRect(HDC);
393     void spoolPage (PlatformGraphicsContext* pctx, WebCore::GraphicsContext* spoolCtx, HDC printDC, IWebUIDelegate*, float headerHeight, float footerHeight, UINT page, UINT pageCount);
394     void drawHeader(PlatformGraphicsContext* pctx, IWebUIDelegate*, const WebCore::IntRect& pageRect, float headerHeight);
395     void drawFooter(PlatformGraphicsContext* pctx, IWebUIDelegate*, const WebCore::IntRect& pageRect, UINT page, UINT pageCount, float headerHeight, float footerHeight);
396 
397 protected:
398     ULONG               m_refCount;
399     class WebFramePrivate;
400     WebFramePrivate*    d;
401     bool                m_quickRedirectComing;
402     WebCore::KURL       m_originalRequestURL;
403     bool                m_inPrintingMode;
404     Vector<WebCore::IntRect> m_pageRects;
405     int m_pageHeight;   // height of the page adjusted by margins
406     mutable COMPtr<AccessibleDocument> m_accessible;
407 };
408 
409 #endif
410