Implement accelerated compositing
[WebKit-https.git] / WebKit / win / WebView.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, INCfLUDING, 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 WebView_H
27 #define WebView_H
28
29 #include "COMPtr.h"
30 #include "WebKit.h"
31 #include "WebFrame.h"
32 #include "WebPreferences.h"
33
34 #include <WebCore/IntRect.h>
35 #include <WebCore/Timer.h>
36 #include <WebCore/WindowMessageListener.h>
37 #include <WebCore/WKCACFLayer.h>
38 #include <WebCore/WKCACFLayerRenderer.h>
39 #include <wtf/HashSet.h>
40 #include <wtf/OwnPtr.h>
41
42 class WebFrame;
43 class WebBackForwardList;
44 class WebInspector;
45 class WebInspectorClient;
46
47 WebView* kit(WebCore::Page*);
48 WebCore::Page* core(IWebView*);
49
50 interface IDropTargetHelper;
51
52 class WebView 
53     : public IWebView
54     , public IWebViewPrivate
55     , public IWebIBActions
56     , public IWebViewCSS
57     , public IWebViewEditing
58     , public IWebViewUndoableEditing
59     , public IWebViewEditingActions
60     , public IWebNotificationObserver
61     , public IDropTarget
62     , WebCore::WindowMessageListener
63 {
64 public:
65     static WebView* createInstance();
66 protected:
67     WebView();
68     ~WebView();
69
70 public:
71     // IUnknown
72     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
73     virtual ULONG STDMETHODCALLTYPE AddRef(void);
74     virtual ULONG STDMETHODCALLTYPE Release(void);
75
76     // IWebView
77
78     virtual HRESULT STDMETHODCALLTYPE canShowMIMEType( 
79         /* [in] */ BSTR mimeType,
80         /* [retval][out] */ BOOL *canShow);
81
82     virtual HRESULT STDMETHODCALLTYPE canShowMIMETypeAsHTML( 
83         /* [in] */ BSTR mimeType,
84         /* [retval][out] */ BOOL *canShow);
85
86     virtual HRESULT STDMETHODCALLTYPE MIMETypesShownAsHTML( 
87         /* [retval][out] */ IEnumVARIANT **enumVariant);
88     
89     virtual HRESULT STDMETHODCALLTYPE setMIMETypesShownAsHTML( 
90         /* [size_is][in] */ BSTR *mimeTypes,
91         /* [in] */ int cMimeTypes);
92     
93     virtual HRESULT STDMETHODCALLTYPE URLFromPasteboard( 
94         /* [in] */ IDataObject *pasteboard,
95         /* [retval][out] */ BSTR *url);
96     
97     virtual HRESULT STDMETHODCALLTYPE URLTitleFromPasteboard( 
98         /* [in] */ IDataObject *pasteboard,
99         /* [retval][out] */ BSTR *urlTitle);
100     
101     virtual HRESULT STDMETHODCALLTYPE initWithFrame( 
102         /* [in] */ RECT frame,
103         /* [in] */ BSTR frameName,
104         /* [in] */ BSTR groupName);
105     
106     virtual HRESULT STDMETHODCALLTYPE setUIDelegate( 
107         /* [in] */ IWebUIDelegate *d);
108     
109     virtual HRESULT STDMETHODCALLTYPE uiDelegate( 
110         /* [out][retval] */ IWebUIDelegate **d);
111     
112     virtual HRESULT STDMETHODCALLTYPE setResourceLoadDelegate( 
113         /* [in] */ IWebResourceLoadDelegate *d);
114     
115     virtual HRESULT STDMETHODCALLTYPE resourceLoadDelegate( 
116         /* [out][retval] */ IWebResourceLoadDelegate **d);
117     
118     virtual HRESULT STDMETHODCALLTYPE setDownloadDelegate( 
119         /* [in] */ IWebDownloadDelegate *d);
120     
121     virtual HRESULT STDMETHODCALLTYPE downloadDelegate( 
122         /* [out][retval] */ IWebDownloadDelegate **d);
123     
124     virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegate( 
125         /* [in] */ IWebFrameLoadDelegate *d);
126     
127     virtual HRESULT STDMETHODCALLTYPE frameLoadDelegate( 
128         /* [out][retval] */ IWebFrameLoadDelegate **d);
129     
130     virtual HRESULT STDMETHODCALLTYPE setPolicyDelegate( 
131         /* [in] */ IWebPolicyDelegate *d);
132     
133     virtual HRESULT STDMETHODCALLTYPE policyDelegate( 
134         /* [out][retval] */ IWebPolicyDelegate **d);
135     
136     virtual HRESULT STDMETHODCALLTYPE mainFrame( 
137         /* [out][retval] */ IWebFrame **frame);
138
139     virtual HRESULT STDMETHODCALLTYPE focusedFrame( 
140         /* [out][retval] */ IWebFrame **frame);
141     
142     virtual HRESULT STDMETHODCALLTYPE backForwardList( 
143         /* [out][retval] */ IWebBackForwardList **list);
144     
145     virtual HRESULT STDMETHODCALLTYPE setMaintainsBackForwardList( 
146         /* [in] */ BOOL flag);
147     
148     virtual HRESULT STDMETHODCALLTYPE goBack( 
149         /* [retval][out] */ BOOL *succeeded);
150     
151     virtual HRESULT STDMETHODCALLTYPE goForward( 
152         /* [retval][out] */ BOOL *succeeded);
153     
154     virtual HRESULT STDMETHODCALLTYPE goToBackForwardItem( 
155         /* [in] */ IWebHistoryItem *item,
156         /* [retval][out] */ BOOL *succeeded);
157     
158     virtual HRESULT STDMETHODCALLTYPE setTextSizeMultiplier( 
159         /* [in] */ float multiplier);
160     
161     virtual HRESULT STDMETHODCALLTYPE textSizeMultiplier( 
162         /* [retval][out] */ float *multiplier);
163     
164     virtual HRESULT STDMETHODCALLTYPE setApplicationNameForUserAgent( 
165         /* [in] */ BSTR applicationName);
166     
167     virtual HRESULT STDMETHODCALLTYPE applicationNameForUserAgent( 
168         /* [retval][out] */ BSTR *applicationName);
169     
170     virtual HRESULT STDMETHODCALLTYPE setCustomUserAgent( 
171         /* [in] */ BSTR userAgentString);
172     
173     virtual HRESULT STDMETHODCALLTYPE customUserAgent( 
174         /* [retval][out] */ BSTR *userAgentString);
175     
176     virtual HRESULT STDMETHODCALLTYPE userAgentForURL( 
177         /* [in] */ BSTR url,
178         /* [retval][out] */ BSTR *userAgent);
179     
180     virtual HRESULT STDMETHODCALLTYPE supportsTextEncoding( 
181         /* [retval][out] */ BOOL *supports);
182     
183     virtual HRESULT STDMETHODCALLTYPE setCustomTextEncodingName( 
184         /* [in] */ BSTR encodingName);
185     
186     virtual HRESULT STDMETHODCALLTYPE customTextEncodingName( 
187         /* [retval][out] */ BSTR *encodingName);
188     
189     virtual HRESULT STDMETHODCALLTYPE setMediaStyle( 
190         /* [in] */ BSTR media);
191     
192     virtual HRESULT STDMETHODCALLTYPE mediaStyle( 
193         /* [retval][out] */ BSTR *media);
194     
195     virtual HRESULT STDMETHODCALLTYPE stringByEvaluatingJavaScriptFromString( 
196         /* [in] */ BSTR script,
197         /* [retval][out] */ BSTR *result);
198     
199     virtual HRESULT STDMETHODCALLTYPE windowScriptObject( 
200         /* [retval][out] */ IWebScriptObject **webScriptObject);
201     
202     virtual HRESULT STDMETHODCALLTYPE setPreferences( 
203         /* [in] */ IWebPreferences *prefs);
204     
205     virtual HRESULT STDMETHODCALLTYPE preferences( 
206         /* [retval][out] */ IWebPreferences **prefs);
207     
208     virtual HRESULT STDMETHODCALLTYPE setPreferencesIdentifier( 
209         /* [in] */ BSTR anIdentifier);
210     
211     virtual HRESULT STDMETHODCALLTYPE preferencesIdentifier( 
212         /* [retval][out] */ BSTR *anIdentifier);
213     
214     virtual HRESULT STDMETHODCALLTYPE setHostWindow( 
215         /* [in] */ OLE_HANDLE window);
216     
217     virtual HRESULT STDMETHODCALLTYPE hostWindow( 
218         /* [retval][out] */ OLE_HANDLE *window);
219     
220     virtual HRESULT STDMETHODCALLTYPE searchFor( 
221         /* [in] */ BSTR str,
222         /* [in] */ BOOL forward,
223         /* [in] */ BOOL caseFlag,
224         /* [in] */ BOOL wrapFlag,
225         /* [retval][out] */ BOOL *found);
226     
227     virtual HRESULT STDMETHODCALLTYPE registerViewClass( 
228         /* [in] */ IWebDocumentView *view,
229         /* [in] */ IWebDocumentRepresentation *representation,
230         /* [in] */ BSTR forMIMEType);
231
232     virtual HRESULT STDMETHODCALLTYPE setGroupName( 
233         /* [in] */ BSTR groupName);
234     
235     virtual HRESULT STDMETHODCALLTYPE groupName( 
236         /* [retval][out] */ BSTR *groupName);
237     
238     virtual HRESULT STDMETHODCALLTYPE estimatedProgress( 
239         /* [retval][out] */ double *estimatedProgress);
240     
241     virtual HRESULT STDMETHODCALLTYPE isLoading( 
242         /* [retval][out] */ BOOL *isLoading);
243     
244     virtual HRESULT STDMETHODCALLTYPE elementAtPoint( 
245         /* [in] */ LPPOINT point,
246         /* [retval][out] */ IPropertyBag **elementDictionary);
247     
248     virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForSelection( 
249         /* [retval][out] */ IEnumVARIANT **enumVariant);
250     
251     virtual HRESULT STDMETHODCALLTYPE writeSelectionWithPasteboardTypes( 
252         /* [size_is][in] */ BSTR *types,
253         /* [in] */ int cTypes,
254         /* [in] */ IDataObject *pasteboard);
255     
256     virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForElement( 
257         /* [in] */ IPropertyBag *elementDictionary,
258         /* [retval][out] */ IEnumVARIANT **enumVariant);
259     
260     virtual HRESULT STDMETHODCALLTYPE writeElement( 
261         /* [in] */ IPropertyBag *elementDictionary,
262         /* [size_is][in] */ BSTR *withPasteboardTypes,
263         /* [in] */ int cWithPasteboardTypes,
264         /* [in] */ IDataObject *pasteboard);
265     
266     virtual HRESULT STDMETHODCALLTYPE selectedText(
267         /* [out, retval] */ BSTR* str);
268
269     virtual HRESULT STDMETHODCALLTYPE centerSelectionInVisibleArea(
270         /* [in] */ IUnknown* sender);
271
272     virtual HRESULT STDMETHODCALLTYPE moveDragCaretToPoint( 
273         /* [in] */ LPPOINT point);
274     
275     virtual HRESULT STDMETHODCALLTYPE removeDragCaret( void);
276     
277     virtual HRESULT STDMETHODCALLTYPE setDrawsBackground( 
278         /* [in] */ BOOL drawsBackground);
279     
280     virtual HRESULT STDMETHODCALLTYPE drawsBackground( 
281         /* [retval][out] */ BOOL *drawsBackground);
282     
283     virtual HRESULT STDMETHODCALLTYPE setMainFrameURL( 
284         /* [in] */ BSTR urlString);
285     
286     virtual HRESULT STDMETHODCALLTYPE mainFrameURL( 
287         /* [retval][out] */ BSTR *urlString);
288     
289     virtual HRESULT STDMETHODCALLTYPE mainFrameDocument( 
290         /* [retval][out] */ IDOMDocument **document);
291     
292     virtual HRESULT STDMETHODCALLTYPE mainFrameTitle( 
293         /* [retval][out] */ BSTR *title);
294     
295     virtual HRESULT STDMETHODCALLTYPE mainFrameIcon( 
296         /* [retval][out] */ OLE_HANDLE *hBitmap);
297
298     virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsLocal( 
299         /* [in] */ BSTR scheme);
300
301     virtual HRESULT STDMETHODCALLTYPE close();
302
303     // IWebIBActions
304
305     virtual HRESULT STDMETHODCALLTYPE takeStringURLFrom( 
306         /* [in] */ IUnknown *sender);
307     
308     virtual HRESULT STDMETHODCALLTYPE stopLoading( 
309         /* [in] */ IUnknown *sender);
310     
311     virtual HRESULT STDMETHODCALLTYPE reload( 
312         /* [in] */ IUnknown *sender);
313     
314     virtual HRESULT STDMETHODCALLTYPE canGoBack( 
315         /* [in] */ IUnknown *sender,
316         /* [retval][out] */ BOOL *result);
317     
318     virtual HRESULT STDMETHODCALLTYPE goBack( 
319         /* [in] */ IUnknown *sender);
320     
321     virtual HRESULT STDMETHODCALLTYPE canGoForward( 
322         /* [in] */ IUnknown *sender,
323         /* [retval][out] */ BOOL *result);
324     
325     virtual HRESULT STDMETHODCALLTYPE goForward( 
326         /* [in] */ IUnknown *sender);
327     
328     virtual HRESULT STDMETHODCALLTYPE canMakeTextLarger( 
329         /* [in] */ IUnknown *sender,
330         /* [retval][out] */ BOOL *result);
331     
332     virtual HRESULT STDMETHODCALLTYPE makeTextLarger( 
333         /* [in] */ IUnknown *sender);
334     
335     virtual HRESULT STDMETHODCALLTYPE canMakeTextSmaller( 
336         /* [in] */ IUnknown *sender,
337         /* [retval][out] */ BOOL *result);
338     
339     virtual HRESULT STDMETHODCALLTYPE makeTextSmaller( 
340         /* [in] */ IUnknown *sender);
341
342     virtual HRESULT STDMETHODCALLTYPE canMakeTextStandardSize( 
343         /* [in] */ IUnknown *sender,
344         /* [retval][out] */ BOOL *result);
345     
346     virtual HRESULT STDMETHODCALLTYPE makeTextStandardSize( 
347         /* [in] */ IUnknown *sender);
348     
349     virtual HRESULT STDMETHODCALLTYPE toggleContinuousSpellChecking( 
350         /* [in] */ IUnknown *sender);
351     
352     virtual HRESULT STDMETHODCALLTYPE toggleSmartInsertDelete( 
353         /* [in] */ IUnknown *sender);
354
355     virtual HRESULT STDMETHODCALLTYPE toggleGrammarChecking( 
356         /* [in] */ IUnknown *sender);
357
358     virtual HRESULT STDMETHODCALLTYPE reloadFromOrigin( 
359         /* [in] */ IUnknown *sender);
360
361     // IWebViewCSS
362
363     virtual HRESULT STDMETHODCALLTYPE computedStyleForElement( 
364         /* [in] */ IDOMElement *element,
365         /* [in] */ BSTR pseudoElement,
366         /* [retval][out] */ IDOMCSSStyleDeclaration **style);
367
368     // IWebViewEditing
369
370     virtual HRESULT STDMETHODCALLTYPE editableDOMRangeForPoint( 
371         /* [in] */ LPPOINT point,
372         /* [retval][out] */ IDOMRange **range);
373     
374     virtual HRESULT STDMETHODCALLTYPE setSelectedDOMRange( 
375         /* [in] */ IDOMRange *range,
376         /* [in] */ WebSelectionAffinity affinity);
377     
378     virtual HRESULT STDMETHODCALLTYPE selectedDOMRange( 
379         /* [retval][out] */ IDOMRange **range);
380     
381     virtual HRESULT STDMETHODCALLTYPE selectionAffinity( 
382         /* [retval][out][retval][out] */ WebSelectionAffinity *affinity);
383     
384     virtual HRESULT STDMETHODCALLTYPE setEditable( 
385         /* [in] */ BOOL flag);
386     
387     virtual HRESULT STDMETHODCALLTYPE isEditable( 
388         /* [retval][out] */ BOOL *isEditable);
389     
390     virtual HRESULT STDMETHODCALLTYPE setTypingStyle( 
391         /* [in] */ IDOMCSSStyleDeclaration *style);
392     
393     virtual HRESULT STDMETHODCALLTYPE typingStyle( 
394         /* [retval][out] */ IDOMCSSStyleDeclaration **style);
395     
396     virtual HRESULT STDMETHODCALLTYPE setSmartInsertDeleteEnabled( 
397         /* [in] */ BOOL flag);
398     
399     virtual HRESULT STDMETHODCALLTYPE smartInsertDeleteEnabled( 
400         /* [in] */ BOOL *enabled);
401
402     virtual HRESULT STDMETHODCALLTYPE setSelectTrailingWhitespaceEnabled( 
403         /* [in] */ BOOL flag);
404     
405     virtual HRESULT STDMETHODCALLTYPE isSelectTrailingWhitespaceEnabled( 
406         /* [in] */ BOOL *enabled);
407
408     virtual HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled( 
409         /* [in] */ BOOL flag);
410     
411     virtual HRESULT STDMETHODCALLTYPE isContinuousSpellCheckingEnabled( 
412         /* [retval][out] */ BOOL *enabled);
413     
414     virtual HRESULT STDMETHODCALLTYPE spellCheckerDocumentTag( 
415         /* [retval][out] */ int *tag);
416     
417     virtual HRESULT STDMETHODCALLTYPE undoManager( 
418         /* [retval][out] */ IWebUndoManager **manager);
419     
420     virtual HRESULT STDMETHODCALLTYPE setEditingDelegate( 
421         /* [in] */ IWebEditingDelegate *d);
422     
423     virtual HRESULT STDMETHODCALLTYPE editingDelegate( 
424         /* [retval][out] */ IWebEditingDelegate **d);
425     
426     virtual HRESULT STDMETHODCALLTYPE styleDeclarationWithText( 
427         /* [in] */ BSTR text,
428         /* [retval][out] */ IDOMCSSStyleDeclaration **style);
429     
430     virtual HRESULT STDMETHODCALLTYPE hasSelectedRange( 
431         /* [retval][out] */ BOOL *hasSelectedRange);
432     
433     virtual HRESULT STDMETHODCALLTYPE cutEnabled( 
434         /* [retval][out] */ BOOL *enabled);
435     
436     virtual HRESULT STDMETHODCALLTYPE copyEnabled( 
437         /* [retval][out] */ BOOL *enabled);
438     
439     virtual HRESULT STDMETHODCALLTYPE pasteEnabled( 
440         /* [retval][out] */ BOOL *enabled);
441     
442     virtual HRESULT STDMETHODCALLTYPE deleteEnabled( 
443         /* [retval][out] */ BOOL *enabled);
444
445     virtual HRESULT STDMETHODCALLTYPE editingEnabled( 
446         /* [retval][out] */ BOOL *enabled);
447
448     virtual HRESULT STDMETHODCALLTYPE isGrammarCheckingEnabled( 
449         /* [retval][out] */ BOOL *enabled);
450     
451     virtual HRESULT STDMETHODCALLTYPE setGrammarCheckingEnabled( 
452         BOOL enabled);
453
454     virtual HRESULT STDMETHODCALLTYPE setPageSizeMultiplier( 
455         /* [in] */ float multiplier);
456     
457     virtual HRESULT STDMETHODCALLTYPE pageSizeMultiplier( 
458         /* [retval][out] */ float *multiplier);
459
460     virtual HRESULT STDMETHODCALLTYPE canZoomPageIn( 
461         /* [in] */ IUnknown *sender,
462         /* [retval][out] */ BOOL *result);
463     
464     virtual HRESULT STDMETHODCALLTYPE zoomPageIn( 
465         /* [in] */ IUnknown *sender);
466     
467     virtual HRESULT STDMETHODCALLTYPE canZoomPageOut( 
468         /* [in] */ IUnknown *sender,
469         /* [retval][out] */ BOOL *result);
470     
471     virtual HRESULT STDMETHODCALLTYPE zoomPageOut( 
472         /* [in] */ IUnknown *sender);
473
474     virtual HRESULT STDMETHODCALLTYPE canResetPageZoom( 
475         /* [in] */ IUnknown *sender,
476         /* [retval][out] */ BOOL *result);
477     
478     virtual HRESULT STDMETHODCALLTYPE resetPageZoom( 
479         /* [in] */ IUnknown *sender);
480
481     // IWebViewUndoableEditing
482
483     virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithNode( 
484         /* [in] */ IDOMNode *node);
485     
486     virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithText( 
487         /* [in] */ BSTR text);
488     
489     virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithMarkupString( 
490         /* [in] */ BSTR markupString);
491     
492     virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithArchive( 
493         /* [in] */ IWebArchive *archive);
494     
495     virtual HRESULT STDMETHODCALLTYPE deleteSelection( void);
496
497     virtual HRESULT STDMETHODCALLTYPE clearSelection(void);
498     
499     virtual HRESULT STDMETHODCALLTYPE applyStyle( 
500         /* [in] */ IDOMCSSStyleDeclaration *style);
501
502     // IWebViewEditingActions
503
504     virtual HRESULT STDMETHODCALLTYPE copy( 
505         /* [in] */ IUnknown *sender);
506     
507     virtual HRESULT STDMETHODCALLTYPE cut( 
508         /* [in] */ IUnknown *sender);
509     
510     virtual HRESULT STDMETHODCALLTYPE paste( 
511         /* [in] */ IUnknown *sender);
512     
513     virtual HRESULT STDMETHODCALLTYPE copyURL( 
514         /* [in] */ BSTR url);
515
516     virtual HRESULT STDMETHODCALLTYPE copyFont( 
517         /* [in] */ IUnknown *sender);
518     
519     virtual HRESULT STDMETHODCALLTYPE pasteFont( 
520         /* [in] */ IUnknown *sender);
521     
522     virtual HRESULT STDMETHODCALLTYPE delete_( 
523         /* [in] */ IUnknown *sender);
524     
525     virtual HRESULT STDMETHODCALLTYPE pasteAsPlainText( 
526         /* [in] */ IUnknown *sender);
527     
528     virtual HRESULT STDMETHODCALLTYPE pasteAsRichText( 
529         /* [in] */ IUnknown *sender);
530     
531     virtual HRESULT STDMETHODCALLTYPE changeFont( 
532         /* [in] */ IUnknown *sender);
533     
534     virtual HRESULT STDMETHODCALLTYPE changeAttributes( 
535         /* [in] */ IUnknown *sender);
536     
537     virtual HRESULT STDMETHODCALLTYPE changeDocumentBackgroundColor( 
538         /* [in] */ IUnknown *sender);
539     
540     virtual HRESULT STDMETHODCALLTYPE changeColor( 
541         /* [in] */ IUnknown *sender);
542     
543     virtual HRESULT STDMETHODCALLTYPE alignCenter( 
544         /* [in] */ IUnknown *sender);
545     
546     virtual HRESULT STDMETHODCALLTYPE alignJustified( 
547         /* [in] */ IUnknown *sender);
548     
549     virtual HRESULT STDMETHODCALLTYPE alignLeft( 
550         /* [in] */ IUnknown *sender);
551     
552     virtual HRESULT STDMETHODCALLTYPE alignRight( 
553         /* [in] */ IUnknown *sender);
554     
555     virtual HRESULT STDMETHODCALLTYPE checkSpelling( 
556         /* [in] */ IUnknown *sender);
557     
558     virtual HRESULT STDMETHODCALLTYPE showGuessPanel( 
559         /* [in] */ IUnknown *sender);
560     
561     virtual HRESULT STDMETHODCALLTYPE performFindPanelAction( 
562         /* [in] */ IUnknown *sender);
563     
564     virtual HRESULT STDMETHODCALLTYPE startSpeaking( 
565         /* [in] */ IUnknown *sender);
566     
567     virtual HRESULT STDMETHODCALLTYPE stopSpeaking( 
568         /* [in] */ IUnknown *sender);
569
570     // IWebNotificationObserver
571
572     virtual HRESULT STDMETHODCALLTYPE onNotify( 
573         /* [in] */ IWebNotification *notification);
574
575     // IWebViewPrivate
576
577     virtual HRESULT STDMETHODCALLTYPE MIMETypeForExtension(
578         /* [in] */ BSTR extension,
579         /* [retval][out] */ BSTR *mimeType);
580
581     virtual HRESULT STDMETHODCALLTYPE setCustomDropTarget(
582         /* [in] */ IDropTarget* dt);
583
584     virtual HRESULT STDMETHODCALLTYPE removeCustomDropTarget();
585
586     virtual HRESULT STDMETHODCALLTYPE setInViewSourceMode( 
587         /* [in] */ BOOL flag);
588     
589     virtual HRESULT STDMETHODCALLTYPE inViewSourceMode( 
590         /* [retval][out] */ BOOL* flag);
591
592     virtual HRESULT STDMETHODCALLTYPE viewWindow( 
593         /* [retval][out] */ OLE_HANDLE *window);
594
595     virtual HRESULT STDMETHODCALLTYPE setFormDelegate( 
596         /* [in] */ IWebFormDelegate *formDelegate);
597
598     virtual HRESULT STDMETHODCALLTYPE formDelegate( 
599         /* [retval][out] */ IWebFormDelegate **formDelegate);
600
601     virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegatePrivate( 
602         /* [in] */ IWebFrameLoadDelegatePrivate *frameLoadDelegatePrivate);
603
604     virtual HRESULT STDMETHODCALLTYPE frameLoadDelegatePrivate( 
605         /* [retval][out] */ IWebFrameLoadDelegatePrivate **frameLoadDelegatePrivate);
606
607     virtual HRESULT STDMETHODCALLTYPE scrollOffset( 
608         /* [retval][out] */ LPPOINT offset);
609
610     virtual HRESULT STDMETHODCALLTYPE scrollBy( 
611         /* [in] */ LPPOINT offset);
612
613     virtual HRESULT STDMETHODCALLTYPE visibleContentRect( 
614         /* [retval][out] */ LPRECT rect);
615
616     virtual HRESULT STDMETHODCALLTYPE updateFocusedAndActiveState();
617
618     virtual HRESULT STDMETHODCALLTYPE executeCoreCommandByName(BSTR name, BSTR value);
619
620     virtual HRESULT STDMETHODCALLTYPE clearMainFrameName();
621
622     virtual HRESULT STDMETHODCALLTYPE markAllMatchesForText(
623         BSTR search, BOOL caseSensitive, BOOL highlight, UINT limit, UINT* matches);
624
625     virtual HRESULT STDMETHODCALLTYPE unmarkAllTextMatches();
626
627     virtual HRESULT STDMETHODCALLTYPE rectsForTextMatches(
628         IEnumTextMatches** pmatches);
629
630     virtual HRESULT STDMETHODCALLTYPE generateSelectionImage(
631         BOOL forceWhiteText, OLE_HANDLE* hBitmap);
632
633     virtual HRESULT STDMETHODCALLTYPE selectionRect(
634         RECT* rc);
635     
636     virtual HRESULT STDMETHODCALLTYPE DragEnter(
637         IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
638
639     virtual HRESULT STDMETHODCALLTYPE DragOver(
640         DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
641     
642     virtual HRESULT STDMETHODCALLTYPE DragLeave();
643     
644     virtual HRESULT STDMETHODCALLTYPE Drop(
645         IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
646
647     virtual HRESULT STDMETHODCALLTYPE canHandleRequest( 
648         IWebURLRequest *request,
649         BOOL *result);
650
651     virtual HRESULT STDMETHODCALLTYPE standardUserAgentWithApplicationName( 
652         /* [in] */ BSTR applicationName,
653         /* [retval][out] */ BSTR *groupName);
654
655     virtual HRESULT STDMETHODCALLTYPE clearFocusNode();
656
657     virtual HRESULT STDMETHODCALLTYPE setInitialFocus(
658         /* [in] */ BOOL forward);
659     
660     virtual HRESULT STDMETHODCALLTYPE setTabKeyCyclesThroughElements( 
661         /* [in] */ BOOL cycles);
662     
663     virtual HRESULT STDMETHODCALLTYPE tabKeyCyclesThroughElements( 
664         /* [retval][out] */ BOOL *result);
665
666     virtual HRESULT STDMETHODCALLTYPE setAllowSiteSpecificHacks(
667         /* [in] */ BOOL allows);
668
669     virtual HRESULT STDMETHODCALLTYPE addAdditionalPluginDirectory( 
670         /* [in] */ BSTR directory);    
671
672     virtual HRESULT STDMETHODCALLTYPE loadBackForwardListFromOtherView( 
673         /* [in] */ IWebView *otherView);
674
675     virtual HRESULT STDMETHODCALLTYPE inspector(
676         /* [retval][out] */ IWebInspector**);
677
678     virtual HRESULT STDMETHODCALLTYPE clearUndoRedoOperations( void);
679     virtual HRESULT STDMETHODCALLTYPE shouldClose( 
680         /* [retval][out] */ BOOL* result);
681
682     virtual HRESULT STDMETHODCALLTYPE setProhibitsMainFrameScrolling(BOOL);
683     virtual HRESULT STDMETHODCALLTYPE setShouldApplyMacFontAscentHack(BOOL);
684
685     virtual HRESULT STDMETHODCALLTYPE windowAncestryDidChange();
686
687     virtual HRESULT STDMETHODCALLTYPE paintDocumentRectToContext(
688         /* [in] */ RECT rect,
689         /* [in] */ OLE_HANDLE dc);
690
691     virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerTimeDelay(
692         /* [in] */ double timeDelay);
693
694     virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerChunkSize(
695         /* [in] */ int chunkSize);
696
697     virtual HRESULT STDMETHODCALLTYPE backingStore(
698         /* [out, retval] */ OLE_HANDLE* hBitmap);
699
700     virtual HRESULT STDMETHODCALLTYPE setTransparent(
701         /* [in] */ BOOL transparent);
702
703     virtual HRESULT STDMETHODCALLTYPE transparent(
704         /* [out, retval] */ BOOL* transparent);
705
706     virtual HRESULT STDMETHODCALLTYPE setDefersCallbacks(
707         /* [in] */ BOOL defersCallbacks);
708
709     virtual HRESULT STDMETHODCALLTYPE defersCallbacks(
710         /* [out, retval] */ BOOL* defersCallbacks);
711
712     virtual HRESULT STDMETHODCALLTYPE globalHistoryItem(
713         /* [out, retval] */ IWebHistoryItem** item);
714
715     virtual HRESULT STDMETHODCALLTYPE setAlwaysUsesComplexTextCodePath(
716         /* [in] */ BOOL complex);
717
718     virtual HRESULT STDMETHODCALLTYPE alwaysUsesComplexTextCodePath(
719         /* [out, retval] */ BOOL* complex);
720
721     virtual HRESULT STDMETHODCALLTYPE setCookieEnabled(
722         /* [in] */ BOOL enable);
723
724     virtual HRESULT STDMETHODCALLTYPE cookieEnabled(
725         /* [out, retval] */ BOOL* enabled);
726
727     virtual HRESULT STDMETHODCALLTYPE setMediaVolume(
728         /* [in] */ float volume);
729
730     virtual HRESULT STDMETHODCALLTYPE mediaVolume(
731         /* [out, retval] */ float* volume);
732
733     virtual HRESULT STDMETHODCALLTYPE registerEmbeddedViewMIMEType( 
734         /* [in] */ BSTR mimeType);
735
736     virtual HRESULT STDMETHODCALLTYPE setMemoryCacheDelegateCallsEnabled( 
737         /* [in] */ BOOL enabled);
738
739     virtual HRESULT STDMETHODCALLTYPE setJavaScriptURLsAreAllowed(
740         /* [in] */ BOOL areAllowed);
741
742     virtual HRESULT STDMETHODCALLTYPE setCanStartPlugins(
743         /* [in] */ BOOL canStartPlugins);
744
745     virtual HRESULT STDMETHODCALLTYPE addUserScriptToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
746                                                            unsigned whitelistCount, BSTR* whitelist, 
747                                                            unsigned blacklistCount, BSTR* blacklist,
748                                                            WebUserScriptInjectionTime);
749     virtual HRESULT STDMETHODCALLTYPE addUserStyleSheetToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
750                                                                unsigned whitelistCount, BSTR* whitelist, 
751                                                                unsigned blacklistCount, BSTR* blacklist);
752     virtual HRESULT STDMETHODCALLTYPE removeUserScriptFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
753     virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
754     virtual HRESULT STDMETHODCALLTYPE removeUserScriptsFromGroup(BSTR groupName, IWebScriptWorld*);
755     virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetsFromGroup(BSTR groupName, IWebScriptWorld*);
756     virtual HRESULT STDMETHODCALLTYPE removeAllUserContentFromGroup(BSTR groupName);
757
758     virtual HRESULT STDMETHODCALLTYPE setPluginHalterDelegate(IWebPluginHalterDelegate*);
759     virtual HRESULT STDMETHODCALLTYPE pluginHalterDelegate(IWebPluginHalterDelegate**);
760
761     virtual HRESULT STDMETHODCALLTYPE invalidateBackingStore(const RECT*);
762
763     virtual HRESULT STDMETHODCALLTYPE whiteListAccessFromOrigin(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
764     virtual HRESULT STDMETHODCALLTYPE resetOriginAccessWhiteLists();
765
766
767     virtual HRESULT STDMETHODCALLTYPE setHistoryDelegate(IWebHistoryDelegate* historyDelegate);
768     virtual HRESULT STDMETHODCALLTYPE historyDelegate(IWebHistoryDelegate** historyDelegate);
769     virtual HRESULT STDMETHODCALLTYPE addVisitedLinks(BSTR* visitedURLs, unsigned visitedURLCount);
770
771     virtual HRESULT STDMETHODCALLTYPE isNodeHaltedPlugin(IDOMNode*, BOOL*);
772     virtual HRESULT STDMETHODCALLTYPE restartHaltedPluginForNode(IDOMNode*);
773     virtual HRESULT STDMETHODCALLTYPE hasPluginForNodeBeenHalted(IDOMNode*, BOOL*);
774
775     // WebView
776     bool shouldUseEmbeddedView(const WebCore::String& mimeType) const;
777
778     WebCore::Page* page();
779     bool handleMouseEvent(UINT, WPARAM, LPARAM);
780     void setMouseActivated(bool flag) { m_mouseActivated = flag; }
781     bool handleContextMenuEvent(WPARAM, LPARAM);
782     bool onMeasureItem(WPARAM, LPARAM);
783     bool onDrawItem(WPARAM, LPARAM);
784     bool onInitMenuPopup(WPARAM, LPARAM);
785     bool onUninitMenuPopup(WPARAM, LPARAM);
786     void performContextMenuAction(WPARAM, LPARAM, bool byPosition);
787     bool mouseWheel(WPARAM, LPARAM, bool isMouseHWheel);
788     bool gesture(WPARAM, LPARAM);
789     bool gestureNotify(WPARAM, LPARAM);
790     bool execCommand(WPARAM wParam, LPARAM lParam);
791     bool keyDown(WPARAM, LPARAM, bool systemKeyDown = false);
792     bool keyUp(WPARAM, LPARAM, bool systemKeyDown = false);
793     bool keyPress(WPARAM, LPARAM, bool systemKeyDown = false);
794     void paint(HDC, LPARAM);
795     void paintIntoWindow(HDC bitmapDC, HDC windowDC, const WebCore::IntRect& dirtyRect);
796     bool ensureBackingStore();
797     void addToDirtyRegion(const WebCore::IntRect&);
798     void addToDirtyRegion(HRGN);
799     void scrollBackingStore(WebCore::FrameView*, int dx, int dy, const WebCore::IntRect& scrollViewRect, const WebCore::IntRect& clipRect);
800     void deleteBackingStore();
801     void repaint(const WebCore::IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false);
802     void frameRect(RECT* rect);
803     void closeWindow();
804     void closeWindowSoon();
805     bool didClose() const { return m_didClose; }
806
807     bool transparent() const { return m_transparent; }
808
809     bool onIMEStartComposition();
810     bool onIMEComposition(LPARAM);
811     bool onIMEEndComposition();
812     bool onIMEChar(WPARAM, LPARAM);
813     bool onIMENotify(WPARAM, LPARAM, LRESULT*);
814     bool onIMERequest(WPARAM, LPARAM, LRESULT*);
815     bool onIMESelect(WPARAM, LPARAM);
816     bool onIMESetContext(WPARAM, LPARAM);
817     void selectionChanged();
818     void resetIME(WebCore::Frame*);
819     void setInputMethodState(bool);
820
821     HRESULT registerDragDrop();
822     HRESULT revokeDragDrop();
823
824     // Convenient to be able to violate the rules of COM here for easy movement to the frame.
825     WebFrame* topLevelFrame() const { return m_mainFrame; }
826     const WebCore::String& userAgentForKURL(const WebCore::KURL& url);
827
828     static bool canHandleRequest(const WebCore::ResourceRequest&);
829
830     static WebCore::String standardUserAgentWithApplicationName(const WebCore::String&);
831
832     void setIsBeingDestroyed() { m_isBeingDestroyed = true; }
833     bool isBeingDestroyed() const { return m_isBeingDestroyed; }
834
835     const char* interpretKeyEvent(const WebCore::KeyboardEvent*);
836     bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);
837
838     bool isPainting() const { return m_paintCount > 0; }
839
840     void setToolTip(const WebCore::String&);
841
842     void registerForIconNotification(bool listen);
843     void dispatchDidReceiveIconFromWebFrame(WebFrame*);
844
845     HRESULT notifyDidAddIcon(IWebNotification*);
846     HRESULT notifyPreferencesChanged(IWebNotification*);
847
848     static void setCacheModel(WebCacheModel);
849     static WebCacheModel cacheModel();
850     static bool didSetCacheModel();
851     static WebCacheModel maxCacheModelInAnyInstance();
852
853     void updateActiveStateSoon() const;
854     void deleteBackingStoreSoon();
855     void cancelDeleteBackingStoreSoon();
856
857     HWND topLevelParent() const { return m_topLevelParent; }
858
859     void updateActiveState();
860
861     bool onGetObject(WPARAM, LPARAM, LRESULT&) const;
862     static STDMETHODIMP AccessibleObjectFromWindow(HWND, DWORD objectID, REFIID, void** ppObject);
863
864     void downloadURL(const WebCore::KURL&);
865
866 #if USE(ACCELERATED_COMPOSITING)
867     bool isAcceleratedCompositing() const { return m_isAcceleratedCompositing; }
868     void resizeLayerRenderer() { m_layerRenderer.resize(); }
869     void layerRendererBecameVisible() { m_layerRenderer.createRenderer(); }
870     void setRootLayerNeedsDisplay() { m_layerRenderer.setNeedsDisplay(); }
871     void setRootChildLayer(WebCore::PlatformLayer* layer);
872 #endif
873
874 private:
875     void setZoomMultiplier(float multiplier, bool isTextOnly);
876     float zoomMultiplier(bool isTextOnly);
877     bool canZoomIn(bool isTextOnly);
878     HRESULT zoomIn(bool isTextOnly);
879     bool canZoomOut(bool isTextOnly);
880     HRESULT zoomOut(bool isTextOnly);
881     bool canResetZoom(bool isTextOnly);
882     HRESULT resetZoom(bool isTextOnly);
883     bool active();
884
885     enum WindowsToPaint { PaintWebViewOnly, PaintWebViewAndChildren };
886     void paintIntoBackingStore(WebCore::FrameView*, HDC bitmapDC, const WebCore::IntRect& dirtyRect, WindowsToPaint);
887     void updateBackingStore(WebCore::FrameView*, HDC = 0, bool backingStoreCompletelyDirty = false, WindowsToPaint = PaintWebViewOnly);
888
889     WebCore::DragOperation keyStateToDragOperation(DWORD grfKeyState) const;
890
891     // FIXME: This variable is part of a workaround. The drop effect (pdwEffect) passed to Drop is incorrect. 
892     // We set this variable in DragEnter and DragOver so that it can be used in Drop to set the correct drop effect. 
893     // Thus, on return from DoDragDrop we have the correct pdwEffect for the drag-and-drop operation.
894     // (see https://bugs.webkit.org/show_bug.cgi?id=29264)
895     DWORD m_lastDropEffect;
896
897 protected:
898     HIMC getIMMContext();
899     void releaseIMMContext(HIMC);
900     static bool allowSiteSpecificHacks() { return s_allowSiteSpecificHacks; } 
901     void preflightSpellChecker();
902     bool continuousCheckingAllowed();
903     void initializeToolTipWindow();
904     void closeWindowTimerFired(WebCore::Timer<WebView>*);
905     void prepareCandidateWindow(WebCore::Frame*, HIMC);
906     void updateSelectionForIME();
907     bool onIMERequestCharPosition(WebCore::Frame*, IMECHARPOSITION*, LRESULT*);
908     bool onIMERequestReconvertString(WebCore::Frame*, RECONVERTSTRING*, LRESULT*);
909     bool developerExtrasEnabled() const;
910
911     // AllWebViewSet functions
912     void addToAllWebViewsSet();
913     void removeFromAllWebViewsSet();
914
915     virtual void windowReceivedMessage(HWND, UINT message, WPARAM, LPARAM);
916
917     ULONG m_refCount;
918     HWND m_hostWindow;
919     HWND m_viewWindow;
920     WebFrame* m_mainFrame;
921     WebCore::Page* m_page;
922     
923     OwnPtr<HBITMAP> m_backingStoreBitmap;
924     SIZE m_backingStoreSize;
925     OwnPtr<HRGN> m_backingStoreDirtyRegion;
926
927     COMPtr<IWebEditingDelegate> m_editingDelegate;
928     COMPtr<IWebFrameLoadDelegate> m_frameLoadDelegate;
929     COMPtr<IWebFrameLoadDelegatePrivate> m_frameLoadDelegatePrivate;
930     COMPtr<IWebUIDelegate> m_uiDelegate;
931     COMPtr<IWebUIDelegatePrivate> m_uiDelegatePrivate;
932     COMPtr<IWebFormDelegate> m_formDelegate;
933     COMPtr<IWebPolicyDelegate> m_policyDelegate;
934     COMPtr<IWebResourceLoadDelegate> m_resourceLoadDelegate;
935     COMPtr<IWebDownloadDelegate> m_downloadDelegate;
936     COMPtr<IWebHistoryDelegate> m_historyDelegate;
937     COMPtr<WebPreferences> m_preferences;
938     COMPtr<WebInspector> m_webInspector;
939     COMPtr<IWebPluginHalterDelegate> m_pluginHalterDelegate;
940
941     bool m_userAgentOverridden;
942     bool m_useBackForwardList;
943     WebCore::String m_userAgentCustom;
944     WebCore::String m_userAgentStandard;
945     float m_zoomMultiplier;
946     WebCore::String m_overrideEncoding;
947     WebCore::String m_applicationName;
948     bool m_mouseActivated;
949     // WebCore dragging logic needs to be able to inspect the drag data
950     // this is updated in DragEnter/Leave/Drop
951     COMPtr<IDataObject> m_dragData;
952     COMPtr<IDropTargetHelper> m_dropTargetHelper;
953     UChar m_currentCharacterCode;
954     bool m_isBeingDestroyed;
955     unsigned m_paintCount;
956     bool m_hasSpellCheckerDocumentTag;
957     bool m_smartInsertDeleteEnabled;
958     bool m_selectTrailingWhitespaceEnabled;
959     bool m_didClose;
960     bool m_hasCustomDropTarget;
961     unsigned m_inIMEComposition;
962     HWND m_toolTipHwnd;
963     WebCore::String m_toolTip;
964     bool m_deleteBackingStoreTimerActive;
965
966     bool m_transparent;
967
968     static bool s_allowSiteSpecificHacks;
969
970     WebCore::Timer<WebView> m_closeWindowTimer;
971     OwnPtr<TRACKMOUSEEVENT> m_mouseOutTracker;
972
973     HWND m_topLevelParent;
974
975     OwnPtr<HashSet<WebCore::String> > m_embeddedViewMIMETypes;
976
977     //Variables needed to store gesture information
978     RefPtr<WebCore::Node> m_gestureTargetNode;
979     long m_lastPanX;
980     long m_lastPanY;
981     long m_xOverpan;
982     long m_yOverpan;
983
984 #if USE(ACCELERATED_COMPOSITING)
985     void setAcceleratedCompositing(bool);
986     void updateRootLayerContents();
987
988     WebCore::WKCACFLayerRenderer m_layerRenderer;
989     bool m_isAcceleratedCompositing;
990 #endif
991 };
992
993 #endif