2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
32 #include "WebPreferences.h"
33 #include <WebCore/DragActions.h>
34 #include <WebCore/IntRect.h>
35 #include <WebCore/RefCountedGDIHandle.h>
36 #include <WebCore/SuspendableTimer.h>
37 #include <WebCore/WindowMessageListener.h>
38 #include <wtf/HashSet.h>
39 #include <wtf/OwnPtr.h>
40 #include <wtf/RefPtr.h>
42 #if USE(ACCELERATED_COMPOSITING)
43 #include <WebCore/PlatformCALayer.h>
44 #include <WebCore/WKCACFLayerRenderer.h>
47 class FullscreenVideoController;
48 class WebBackForwardList;
51 class WebInspectorClient;
53 typedef WebCore::RefCountedGDIHandle<HBITMAP> RefCountedHBITMAP;
54 typedef WebCore::RefCountedGDIHandle<HRGN> RefCountedHRGN;
56 WebView* kit(WebCore::Page*);
57 WebCore::Page* core(IWebView*);
59 interface IDropTargetHelper;
63 , public IWebViewPrivate
64 , public IWebIBActions
66 , public IWebViewEditing
67 , public IWebViewUndoableEditing
68 , public IWebViewEditingActions
69 , public IWebNotificationObserver
71 , WebCore::WindowMessageListener
72 #if USE(ACCELERATED_COMPOSITING)
73 , WebCore::WKCACFLayerRendererClient
77 static WebView* createInstance();
84 virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
85 virtual ULONG STDMETHODCALLTYPE AddRef(void);
86 virtual ULONG STDMETHODCALLTYPE Release(void);
90 virtual HRESULT STDMETHODCALLTYPE canShowMIMEType(
91 /* [in] */ BSTR mimeType,
92 /* [retval][out] */ BOOL *canShow);
94 virtual HRESULT STDMETHODCALLTYPE canShowMIMETypeAsHTML(
95 /* [in] */ BSTR mimeType,
96 /* [retval][out] */ BOOL *canShow);
98 virtual HRESULT STDMETHODCALLTYPE MIMETypesShownAsHTML(
99 /* [retval][out] */ IEnumVARIANT **enumVariant);
101 virtual HRESULT STDMETHODCALLTYPE setMIMETypesShownAsHTML(
102 /* [size_is][in] */ BSTR *mimeTypes,
103 /* [in] */ int cMimeTypes);
105 virtual HRESULT STDMETHODCALLTYPE URLFromPasteboard(
106 /* [in] */ IDataObject *pasteboard,
107 /* [retval][out] */ BSTR *url);
109 virtual HRESULT STDMETHODCALLTYPE URLTitleFromPasteboard(
110 /* [in] */ IDataObject *pasteboard,
111 /* [retval][out] */ BSTR *urlTitle);
113 virtual HRESULT STDMETHODCALLTYPE initWithFrame(
114 /* [in] */ RECT frame,
115 /* [in] */ BSTR frameName,
116 /* [in] */ BSTR groupName);
118 virtual HRESULT STDMETHODCALLTYPE setUIDelegate(
119 /* [in] */ IWebUIDelegate *d);
121 virtual HRESULT STDMETHODCALLTYPE uiDelegate(
122 /* [out][retval] */ IWebUIDelegate **d);
124 virtual HRESULT STDMETHODCALLTYPE setResourceLoadDelegate(
125 /* [in] */ IWebResourceLoadDelegate *d);
127 virtual HRESULT STDMETHODCALLTYPE resourceLoadDelegate(
128 /* [out][retval] */ IWebResourceLoadDelegate **d);
130 virtual HRESULT STDMETHODCALLTYPE setDownloadDelegate(
131 /* [in] */ IWebDownloadDelegate *d);
133 virtual HRESULT STDMETHODCALLTYPE downloadDelegate(
134 /* [out][retval] */ IWebDownloadDelegate **d);
136 virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegate(
137 /* [in] */ IWebFrameLoadDelegate *d);
139 virtual HRESULT STDMETHODCALLTYPE frameLoadDelegate(
140 /* [out][retval] */ IWebFrameLoadDelegate **d);
142 virtual HRESULT STDMETHODCALLTYPE setPolicyDelegate(
143 /* [in] */ IWebPolicyDelegate *d);
145 virtual HRESULT STDMETHODCALLTYPE policyDelegate(
146 /* [out][retval] */ IWebPolicyDelegate **d);
148 virtual HRESULT STDMETHODCALLTYPE mainFrame(
149 /* [out][retval] */ IWebFrame **frame);
151 virtual HRESULT STDMETHODCALLTYPE focusedFrame(
152 /* [out][retval] */ IWebFrame **frame);
154 virtual HRESULT STDMETHODCALLTYPE backForwardList(
155 /* [out][retval] */ IWebBackForwardList **list);
157 virtual HRESULT STDMETHODCALLTYPE setMaintainsBackForwardList(
158 /* [in] */ BOOL flag);
160 virtual HRESULT STDMETHODCALLTYPE goBack(
161 /* [retval][out] */ BOOL *succeeded);
163 virtual HRESULT STDMETHODCALLTYPE goForward(
164 /* [retval][out] */ BOOL *succeeded);
166 virtual HRESULT STDMETHODCALLTYPE goToBackForwardItem(
167 /* [in] */ IWebHistoryItem *item,
168 /* [retval][out] */ BOOL *succeeded);
170 virtual HRESULT STDMETHODCALLTYPE setTextSizeMultiplier(
171 /* [in] */ float multiplier);
173 virtual HRESULT STDMETHODCALLTYPE textSizeMultiplier(
174 /* [retval][out] */ float *multiplier);
176 virtual HRESULT STDMETHODCALLTYPE setApplicationNameForUserAgent(
177 /* [in] */ BSTR applicationName);
179 virtual HRESULT STDMETHODCALLTYPE applicationNameForUserAgent(
180 /* [retval][out] */ BSTR *applicationName);
182 virtual HRESULT STDMETHODCALLTYPE setCustomUserAgent(
183 /* [in] */ BSTR userAgentString);
185 virtual HRESULT STDMETHODCALLTYPE customUserAgent(
186 /* [retval][out] */ BSTR *userAgentString);
188 virtual HRESULT STDMETHODCALLTYPE userAgentForURL(
190 /* [retval][out] */ BSTR *userAgent);
192 virtual HRESULT STDMETHODCALLTYPE supportsTextEncoding(
193 /* [retval][out] */ BOOL *supports);
195 virtual HRESULT STDMETHODCALLTYPE setCustomTextEncodingName(
196 /* [in] */ BSTR encodingName);
198 virtual HRESULT STDMETHODCALLTYPE customTextEncodingName(
199 /* [retval][out] */ BSTR *encodingName);
201 virtual HRESULT STDMETHODCALLTYPE setMediaStyle(
202 /* [in] */ BSTR media);
204 virtual HRESULT STDMETHODCALLTYPE mediaStyle(
205 /* [retval][out] */ BSTR *media);
207 virtual HRESULT STDMETHODCALLTYPE stringByEvaluatingJavaScriptFromString(
208 /* [in] */ BSTR script,
209 /* [retval][out] */ BSTR *result);
211 virtual HRESULT STDMETHODCALLTYPE windowScriptObject(
212 /* [retval][out] */ IWebScriptObject **webScriptObject);
214 virtual HRESULT STDMETHODCALLTYPE setPreferences(
215 /* [in] */ IWebPreferences *prefs);
217 virtual HRESULT STDMETHODCALLTYPE preferences(
218 /* [retval][out] */ IWebPreferences **prefs);
220 virtual HRESULT STDMETHODCALLTYPE setPreferencesIdentifier(
221 /* [in] */ BSTR anIdentifier);
223 virtual HRESULT STDMETHODCALLTYPE preferencesIdentifier(
224 /* [retval][out] */ BSTR *anIdentifier);
226 virtual HRESULT STDMETHODCALLTYPE setHostWindow(
227 /* [in] */ OLE_HANDLE window);
229 virtual HRESULT STDMETHODCALLTYPE hostWindow(
230 /* [retval][out] */ OLE_HANDLE *window);
232 virtual HRESULT STDMETHODCALLTYPE searchFor(
234 /* [in] */ BOOL forward,
235 /* [in] */ BOOL caseFlag,
236 /* [in] */ BOOL wrapFlag,
237 /* [retval][out] */ BOOL *found);
239 virtual HRESULT STDMETHODCALLTYPE registerViewClass(
240 /* [in] */ IWebDocumentView *view,
241 /* [in] */ IWebDocumentRepresentation *representation,
242 /* [in] */ BSTR forMIMEType);
244 virtual HRESULT STDMETHODCALLTYPE setGroupName(
245 /* [in] */ BSTR groupName);
247 virtual HRESULT STDMETHODCALLTYPE groupName(
248 /* [retval][out] */ BSTR *groupName);
250 virtual HRESULT STDMETHODCALLTYPE estimatedProgress(
251 /* [retval][out] */ double *estimatedProgress);
253 virtual HRESULT STDMETHODCALLTYPE isLoading(
254 /* [retval][out] */ BOOL *isLoading);
256 virtual HRESULT STDMETHODCALLTYPE elementAtPoint(
257 /* [in] */ LPPOINT point,
258 /* [retval][out] */ IPropertyBag **elementDictionary);
260 virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForSelection(
261 /* [retval][out] */ IEnumVARIANT **enumVariant);
263 virtual HRESULT STDMETHODCALLTYPE writeSelectionWithPasteboardTypes(
264 /* [size_is][in] */ BSTR *types,
265 /* [in] */ int cTypes,
266 /* [in] */ IDataObject *pasteboard);
268 virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForElement(
269 /* [in] */ IPropertyBag *elementDictionary,
270 /* [retval][out] */ IEnumVARIANT **enumVariant);
272 virtual HRESULT STDMETHODCALLTYPE writeElement(
273 /* [in] */ IPropertyBag *elementDictionary,
274 /* [size_is][in] */ BSTR *withPasteboardTypes,
275 /* [in] */ int cWithPasteboardTypes,
276 /* [in] */ IDataObject *pasteboard);
278 virtual HRESULT STDMETHODCALLTYPE selectedText(
279 /* [out, retval] */ BSTR* str);
281 virtual HRESULT STDMETHODCALLTYPE centerSelectionInVisibleArea(
282 /* [in] */ IUnknown* sender);
284 virtual HRESULT STDMETHODCALLTYPE moveDragCaretToPoint(
285 /* [in] */ LPPOINT point);
287 virtual HRESULT STDMETHODCALLTYPE removeDragCaret( void);
289 virtual HRESULT STDMETHODCALLTYPE setDrawsBackground(
290 /* [in] */ BOOL drawsBackground);
292 virtual HRESULT STDMETHODCALLTYPE drawsBackground(
293 /* [retval][out] */ BOOL *drawsBackground);
295 virtual HRESULT STDMETHODCALLTYPE setMainFrameURL(
296 /* [in] */ BSTR urlString);
298 virtual HRESULT STDMETHODCALLTYPE mainFrameURL(
299 /* [retval][out] */ BSTR *urlString);
301 virtual HRESULT STDMETHODCALLTYPE mainFrameDocument(
302 /* [retval][out] */ IDOMDocument **document);
304 virtual HRESULT STDMETHODCALLTYPE mainFrameTitle(
305 /* [retval][out] */ BSTR *title);
307 virtual HRESULT STDMETHODCALLTYPE mainFrameIcon(
308 /* [retval][out] */ OLE_HANDLE *hBitmap);
310 virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsLocal(
311 /* [in] */ BSTR scheme);
313 virtual HRESULT STDMETHODCALLTYPE close();
317 virtual HRESULT STDMETHODCALLTYPE takeStringURLFrom(
318 /* [in] */ IUnknown *sender);
320 virtual HRESULT STDMETHODCALLTYPE stopLoading(
321 /* [in] */ IUnknown *sender);
323 virtual HRESULT STDMETHODCALLTYPE reload(
324 /* [in] */ IUnknown *sender);
326 virtual HRESULT STDMETHODCALLTYPE canGoBack(
327 /* [in] */ IUnknown *sender,
328 /* [retval][out] */ BOOL *result);
330 virtual HRESULT STDMETHODCALLTYPE goBack(
331 /* [in] */ IUnknown *sender);
333 virtual HRESULT STDMETHODCALLTYPE canGoForward(
334 /* [in] */ IUnknown *sender,
335 /* [retval][out] */ BOOL *result);
337 virtual HRESULT STDMETHODCALLTYPE goForward(
338 /* [in] */ IUnknown *sender);
340 virtual HRESULT STDMETHODCALLTYPE canMakeTextLarger(
341 /* [in] */ IUnknown *sender,
342 /* [retval][out] */ BOOL *result);
344 virtual HRESULT STDMETHODCALLTYPE makeTextLarger(
345 /* [in] */ IUnknown *sender);
347 virtual HRESULT STDMETHODCALLTYPE canMakeTextSmaller(
348 /* [in] */ IUnknown *sender,
349 /* [retval][out] */ BOOL *result);
351 virtual HRESULT STDMETHODCALLTYPE makeTextSmaller(
352 /* [in] */ IUnknown *sender);
354 virtual HRESULT STDMETHODCALLTYPE canMakeTextStandardSize(
355 /* [in] */ IUnknown *sender,
356 /* [retval][out] */ BOOL *result);
358 virtual HRESULT STDMETHODCALLTYPE makeTextStandardSize(
359 /* [in] */ IUnknown *sender);
361 virtual HRESULT STDMETHODCALLTYPE toggleContinuousSpellChecking(
362 /* [in] */ IUnknown *sender);
364 virtual HRESULT STDMETHODCALLTYPE toggleSmartInsertDelete(
365 /* [in] */ IUnknown *sender);
367 virtual HRESULT STDMETHODCALLTYPE toggleGrammarChecking(
368 /* [in] */ IUnknown *sender);
370 virtual HRESULT STDMETHODCALLTYPE reloadFromOrigin(
371 /* [in] */ IUnknown *sender);
375 virtual HRESULT STDMETHODCALLTYPE computedStyleForElement(
376 /* [in] */ IDOMElement *element,
377 /* [in] */ BSTR pseudoElement,
378 /* [retval][out] */ IDOMCSSStyleDeclaration **style);
382 virtual HRESULT STDMETHODCALLTYPE editableDOMRangeForPoint(
383 /* [in] */ LPPOINT point,
384 /* [retval][out] */ IDOMRange **range);
386 virtual HRESULT STDMETHODCALLTYPE setSelectedDOMRange(
387 /* [in] */ IDOMRange *range,
388 /* [in] */ WebSelectionAffinity affinity);
390 virtual HRESULT STDMETHODCALLTYPE selectedDOMRange(
391 /* [retval][out] */ IDOMRange **range);
393 virtual HRESULT STDMETHODCALLTYPE selectionAffinity(
394 /* [retval][out][retval][out] */ WebSelectionAffinity *affinity);
396 virtual HRESULT STDMETHODCALLTYPE setEditable(
397 /* [in] */ BOOL flag);
399 virtual HRESULT STDMETHODCALLTYPE isEditable(
400 /* [retval][out] */ BOOL *isEditable);
402 virtual HRESULT STDMETHODCALLTYPE setTypingStyle(
403 /* [in] */ IDOMCSSStyleDeclaration *style);
405 virtual HRESULT STDMETHODCALLTYPE typingStyle(
406 /* [retval][out] */ IDOMCSSStyleDeclaration **style);
408 virtual HRESULT STDMETHODCALLTYPE setSmartInsertDeleteEnabled(
409 /* [in] */ BOOL flag);
411 virtual HRESULT STDMETHODCALLTYPE smartInsertDeleteEnabled(
412 /* [in] */ BOOL *enabled);
414 virtual HRESULT STDMETHODCALLTYPE setSelectTrailingWhitespaceEnabled(
415 /* [in] */ BOOL flag);
417 virtual HRESULT STDMETHODCALLTYPE isSelectTrailingWhitespaceEnabled(
418 /* [in] */ BOOL *enabled);
420 virtual HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled(
421 /* [in] */ BOOL flag);
423 virtual HRESULT STDMETHODCALLTYPE isContinuousSpellCheckingEnabled(
424 /* [retval][out] */ BOOL *enabled);
426 virtual HRESULT STDMETHODCALLTYPE spellCheckerDocumentTag(
427 /* [retval][out] */ int *tag);
429 virtual HRESULT STDMETHODCALLTYPE undoManager(
430 /* [retval][out] */ IWebUndoManager **manager);
432 virtual HRESULT STDMETHODCALLTYPE setEditingDelegate(
433 /* [in] */ IWebEditingDelegate *d);
435 virtual HRESULT STDMETHODCALLTYPE editingDelegate(
436 /* [retval][out] */ IWebEditingDelegate **d);
438 virtual HRESULT STDMETHODCALLTYPE styleDeclarationWithText(
439 /* [in] */ BSTR text,
440 /* [retval][out] */ IDOMCSSStyleDeclaration **style);
442 virtual HRESULT STDMETHODCALLTYPE hasSelectedRange(
443 /* [retval][out] */ BOOL *hasSelectedRange);
445 virtual HRESULT STDMETHODCALLTYPE cutEnabled(
446 /* [retval][out] */ BOOL *enabled);
448 virtual HRESULT STDMETHODCALLTYPE copyEnabled(
449 /* [retval][out] */ BOOL *enabled);
451 virtual HRESULT STDMETHODCALLTYPE pasteEnabled(
452 /* [retval][out] */ BOOL *enabled);
454 virtual HRESULT STDMETHODCALLTYPE deleteEnabled(
455 /* [retval][out] */ BOOL *enabled);
457 virtual HRESULT STDMETHODCALLTYPE editingEnabled(
458 /* [retval][out] */ BOOL *enabled);
460 virtual HRESULT STDMETHODCALLTYPE isGrammarCheckingEnabled(
461 /* [retval][out] */ BOOL *enabled);
463 virtual HRESULT STDMETHODCALLTYPE setGrammarCheckingEnabled(
466 virtual HRESULT STDMETHODCALLTYPE setPageSizeMultiplier(
467 /* [in] */ float multiplier);
469 virtual HRESULT STDMETHODCALLTYPE pageSizeMultiplier(
470 /* [retval][out] */ float *multiplier);
472 virtual HRESULT STDMETHODCALLTYPE canZoomPageIn(
473 /* [in] */ IUnknown *sender,
474 /* [retval][out] */ BOOL *result);
476 virtual HRESULT STDMETHODCALLTYPE zoomPageIn(
477 /* [in] */ IUnknown *sender);
479 virtual HRESULT STDMETHODCALLTYPE canZoomPageOut(
480 /* [in] */ IUnknown *sender,
481 /* [retval][out] */ BOOL *result);
483 virtual HRESULT STDMETHODCALLTYPE zoomPageOut(
484 /* [in] */ IUnknown *sender);
486 virtual HRESULT STDMETHODCALLTYPE canResetPageZoom(
487 /* [in] */ IUnknown *sender,
488 /* [retval][out] */ BOOL *result);
490 virtual HRESULT STDMETHODCALLTYPE resetPageZoom(
491 /* [in] */ IUnknown *sender);
493 // IWebViewUndoableEditing
495 virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithNode(
496 /* [in] */ IDOMNode *node);
498 virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithText(
499 /* [in] */ BSTR text);
501 virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithMarkupString(
502 /* [in] */ BSTR markupString);
504 virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithArchive(
505 /* [in] */ IWebArchive *archive);
507 virtual HRESULT STDMETHODCALLTYPE deleteSelection( void);
509 virtual HRESULT STDMETHODCALLTYPE clearSelection(void);
511 virtual HRESULT STDMETHODCALLTYPE applyStyle(
512 /* [in] */ IDOMCSSStyleDeclaration *style);
514 // IWebViewEditingActions
516 virtual HRESULT STDMETHODCALLTYPE copy(
517 /* [in] */ IUnknown *sender);
519 virtual HRESULT STDMETHODCALLTYPE cut(
520 /* [in] */ IUnknown *sender);
522 virtual HRESULT STDMETHODCALLTYPE paste(
523 /* [in] */ IUnknown *sender);
525 virtual HRESULT STDMETHODCALLTYPE copyURL(
526 /* [in] */ BSTR url);
528 virtual HRESULT STDMETHODCALLTYPE copyFont(
529 /* [in] */ IUnknown *sender);
531 virtual HRESULT STDMETHODCALLTYPE pasteFont(
532 /* [in] */ IUnknown *sender);
534 virtual HRESULT STDMETHODCALLTYPE delete_(
535 /* [in] */ IUnknown *sender);
537 virtual HRESULT STDMETHODCALLTYPE pasteAsPlainText(
538 /* [in] */ IUnknown *sender);
540 virtual HRESULT STDMETHODCALLTYPE pasteAsRichText(
541 /* [in] */ IUnknown *sender);
543 virtual HRESULT STDMETHODCALLTYPE changeFont(
544 /* [in] */ IUnknown *sender);
546 virtual HRESULT STDMETHODCALLTYPE changeAttributes(
547 /* [in] */ IUnknown *sender);
549 virtual HRESULT STDMETHODCALLTYPE changeDocumentBackgroundColor(
550 /* [in] */ IUnknown *sender);
552 virtual HRESULT STDMETHODCALLTYPE changeColor(
553 /* [in] */ IUnknown *sender);
555 virtual HRESULT STDMETHODCALLTYPE alignCenter(
556 /* [in] */ IUnknown *sender);
558 virtual HRESULT STDMETHODCALLTYPE alignJustified(
559 /* [in] */ IUnknown *sender);
561 virtual HRESULT STDMETHODCALLTYPE alignLeft(
562 /* [in] */ IUnknown *sender);
564 virtual HRESULT STDMETHODCALLTYPE alignRight(
565 /* [in] */ IUnknown *sender);
567 virtual HRESULT STDMETHODCALLTYPE checkSpelling(
568 /* [in] */ IUnknown *sender);
570 virtual HRESULT STDMETHODCALLTYPE showGuessPanel(
571 /* [in] */ IUnknown *sender);
573 virtual HRESULT STDMETHODCALLTYPE performFindPanelAction(
574 /* [in] */ IUnknown *sender);
576 virtual HRESULT STDMETHODCALLTYPE startSpeaking(
577 /* [in] */ IUnknown *sender);
579 virtual HRESULT STDMETHODCALLTYPE stopSpeaking(
580 /* [in] */ IUnknown *sender);
582 // IWebNotificationObserver
584 virtual HRESULT STDMETHODCALLTYPE onNotify(
585 /* [in] */ IWebNotification *notification);
589 virtual HRESULT STDMETHODCALLTYPE MIMETypeForExtension(
590 /* [in] */ BSTR extension,
591 /* [retval][out] */ BSTR *mimeType);
593 virtual HRESULT STDMETHODCALLTYPE setCustomDropTarget(
594 /* [in] */ IDropTarget* dt);
596 virtual HRESULT STDMETHODCALLTYPE removeCustomDropTarget();
598 virtual HRESULT STDMETHODCALLTYPE setInViewSourceMode(
599 /* [in] */ BOOL flag);
601 virtual HRESULT STDMETHODCALLTYPE inViewSourceMode(
602 /* [retval][out] */ BOOL* flag);
604 virtual HRESULT STDMETHODCALLTYPE viewWindow(
605 /* [retval][out] */ OLE_HANDLE *window);
607 virtual HRESULT STDMETHODCALLTYPE setFormDelegate(
608 /* [in] */ IWebFormDelegate *formDelegate);
610 virtual HRESULT STDMETHODCALLTYPE formDelegate(
611 /* [retval][out] */ IWebFormDelegate **formDelegate);
613 virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegatePrivate(
614 /* [in] */ IWebFrameLoadDelegatePrivate *frameLoadDelegatePrivate);
616 virtual HRESULT STDMETHODCALLTYPE frameLoadDelegatePrivate(
617 /* [retval][out] */ IWebFrameLoadDelegatePrivate **frameLoadDelegatePrivate);
619 virtual HRESULT STDMETHODCALLTYPE scrollOffset(
620 /* [retval][out] */ LPPOINT offset);
622 virtual HRESULT STDMETHODCALLTYPE scrollBy(
623 /* [in] */ LPPOINT offset);
625 virtual HRESULT STDMETHODCALLTYPE visibleContentRect(
626 /* [retval][out] */ LPRECT rect);
628 virtual HRESULT STDMETHODCALLTYPE updateFocusedAndActiveState();
630 virtual HRESULT STDMETHODCALLTYPE executeCoreCommandByName(BSTR name, BSTR value);
632 virtual HRESULT STDMETHODCALLTYPE clearMainFrameName();
634 virtual HRESULT STDMETHODCALLTYPE markAllMatchesForText(
635 BSTR search, BOOL caseSensitive, BOOL highlight, UINT limit, UINT* matches);
637 virtual HRESULT STDMETHODCALLTYPE unmarkAllTextMatches();
639 virtual HRESULT STDMETHODCALLTYPE rectsForTextMatches(
640 IEnumTextMatches** pmatches);
642 virtual HRESULT STDMETHODCALLTYPE generateSelectionImage(
643 BOOL forceWhiteText, OLE_HANDLE* hBitmap);
645 virtual HRESULT STDMETHODCALLTYPE selectionRect(
648 virtual HRESULT STDMETHODCALLTYPE DragEnter(
649 IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
651 virtual HRESULT STDMETHODCALLTYPE DragOver(
652 DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
654 virtual HRESULT STDMETHODCALLTYPE DragLeave();
656 virtual HRESULT STDMETHODCALLTYPE Drop(
657 IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
659 virtual HRESULT STDMETHODCALLTYPE canHandleRequest(
660 IWebURLRequest *request,
663 virtual HRESULT STDMETHODCALLTYPE standardUserAgentWithApplicationName(
664 /* [in] */ BSTR applicationName,
665 /* [retval][out] */ BSTR *groupName);
667 virtual HRESULT STDMETHODCALLTYPE clearFocusNode();
669 virtual HRESULT STDMETHODCALLTYPE setInitialFocus(
670 /* [in] */ BOOL forward);
672 virtual HRESULT STDMETHODCALLTYPE setTabKeyCyclesThroughElements(
673 /* [in] */ BOOL cycles);
675 virtual HRESULT STDMETHODCALLTYPE tabKeyCyclesThroughElements(
676 /* [retval][out] */ BOOL *result);
678 virtual HRESULT STDMETHODCALLTYPE setAllowSiteSpecificHacks(
679 /* [in] */ BOOL allows);
681 virtual HRESULT STDMETHODCALLTYPE addAdditionalPluginDirectory(
682 /* [in] */ BSTR directory);
684 virtual HRESULT STDMETHODCALLTYPE loadBackForwardListFromOtherView(
685 /* [in] */ IWebView *otherView);
687 virtual HRESULT STDMETHODCALLTYPE inspector(
688 /* [retval][out] */ IWebInspector**);
690 virtual HRESULT STDMETHODCALLTYPE clearUndoRedoOperations( void);
691 virtual HRESULT STDMETHODCALLTYPE shouldClose(
692 /* [retval][out] */ BOOL* result);
694 virtual HRESULT STDMETHODCALLTYPE setProhibitsMainFrameScrolling(BOOL);
695 virtual HRESULT STDMETHODCALLTYPE setShouldApplyMacFontAscentHack(BOOL);
697 virtual HRESULT STDMETHODCALLTYPE windowAncestryDidChange();
699 virtual HRESULT STDMETHODCALLTYPE paintDocumentRectToContext(
700 /* [in] */ RECT rect,
701 /* [in] */ OLE_HANDLE dc);
703 virtual HRESULT STDMETHODCALLTYPE paintScrollViewRectToContextAtPoint(
704 /* [in] */ RECT rect,
706 /* [in] */ OLE_HANDLE dc);
708 virtual HRESULT STDMETHODCALLTYPE reportException(
709 /* [in] */ JSContextRef context,
710 /* [in] */ JSValueRef exception);
712 virtual HRESULT STDMETHODCALLTYPE elementFromJS(
713 /* [in] */ JSContextRef context,
714 /* [in] */ JSValueRef nodeObject,
715 /* [retval][out] */ IDOMElement **element);
717 virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerTimeDelay(
718 /* [in] */ double timeDelay);
720 virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerChunkSize(
721 /* [in] */ int chunkSize);
723 virtual HRESULT STDMETHODCALLTYPE backingStore(
724 /* [out, retval] */ OLE_HANDLE* hBitmap);
726 virtual HRESULT STDMETHODCALLTYPE setTransparent(
727 /* [in] */ BOOL transparent);
729 virtual HRESULT STDMETHODCALLTYPE transparent(
730 /* [out, retval] */ BOOL* transparent);
732 virtual HRESULT STDMETHODCALLTYPE setDefersCallbacks(
733 /* [in] */ BOOL defersCallbacks);
735 virtual HRESULT STDMETHODCALLTYPE defersCallbacks(
736 /* [out, retval] */ BOOL* defersCallbacks);
738 virtual HRESULT STDMETHODCALLTYPE globalHistoryItem(
739 /* [out, retval] */ IWebHistoryItem** item);
741 virtual HRESULT STDMETHODCALLTYPE setAlwaysUsesComplexTextCodePath(
742 /* [in] */ BOOL complex);
744 virtual HRESULT STDMETHODCALLTYPE alwaysUsesComplexTextCodePath(
745 /* [out, retval] */ BOOL* complex);
747 virtual HRESULT STDMETHODCALLTYPE setCookieEnabled(
748 /* [in] */ BOOL enable);
750 virtual HRESULT STDMETHODCALLTYPE cookieEnabled(
751 /* [out, retval] */ BOOL* enabled);
753 virtual HRESULT STDMETHODCALLTYPE setMediaVolume(
754 /* [in] */ float volume);
756 virtual HRESULT STDMETHODCALLTYPE mediaVolume(
757 /* [out, retval] */ float* volume);
759 virtual HRESULT STDMETHODCALLTYPE registerEmbeddedViewMIMEType(
760 /* [in] */ BSTR mimeType);
762 virtual HRESULT STDMETHODCALLTYPE setMemoryCacheDelegateCallsEnabled(
763 /* [in] */ BOOL enabled);
765 virtual HRESULT STDMETHODCALLTYPE setJavaScriptURLsAreAllowed(
766 /* [in] */ BOOL areAllowed);
768 virtual HRESULT STDMETHODCALLTYPE setCanStartPlugins(
769 /* [in] */ BOOL canStartPlugins);
771 virtual HRESULT STDMETHODCALLTYPE addUserScriptToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
772 unsigned whitelistCount, BSTR* whitelist,
773 unsigned blacklistCount, BSTR* blacklist,
774 WebUserScriptInjectionTime);
775 virtual HRESULT STDMETHODCALLTYPE addUserStyleSheetToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
776 unsigned whitelistCount, BSTR* whitelist,
777 unsigned blacklistCount, BSTR* blacklist);
778 virtual HRESULT STDMETHODCALLTYPE removeUserScriptFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
779 virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
780 virtual HRESULT STDMETHODCALLTYPE removeUserScriptsFromGroup(BSTR groupName, IWebScriptWorld*);
781 virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetsFromGroup(BSTR groupName, IWebScriptWorld*);
782 virtual HRESULT STDMETHODCALLTYPE removeAllUserContentFromGroup(BSTR groupName);
784 virtual HRESULT STDMETHODCALLTYPE setPluginHalterDelegate(IWebPluginHalterDelegate*);
785 virtual HRESULT STDMETHODCALLTYPE pluginHalterDelegate(IWebPluginHalterDelegate**);
787 virtual HRESULT STDMETHODCALLTYPE invalidateBackingStore(const RECT*);
789 virtual HRESULT STDMETHODCALLTYPE addOriginAccessWhitelistEntry(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
790 virtual HRESULT STDMETHODCALLTYPE removeOriginAccessWhitelistEntry(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
791 virtual HRESULT STDMETHODCALLTYPE resetOriginAccessWhitelists();
793 virtual HRESULT STDMETHODCALLTYPE setHistoryDelegate(IWebHistoryDelegate* historyDelegate);
794 virtual HRESULT STDMETHODCALLTYPE historyDelegate(IWebHistoryDelegate** historyDelegate);
795 virtual HRESULT STDMETHODCALLTYPE addVisitedLinks(BSTR* visitedURLs, unsigned visitedURLCount);
797 virtual HRESULT STDMETHODCALLTYPE isNodeHaltedPlugin(IDOMNode*, BOOL*);
798 virtual HRESULT STDMETHODCALLTYPE restartHaltedPluginForNode(IDOMNode*);
799 virtual HRESULT STDMETHODCALLTYPE hasPluginForNodeBeenHalted(IDOMNode*, BOOL*);
801 virtual HRESULT STDMETHODCALLTYPE setGeolocationProvider(IWebGeolocationProvider* locationProvider);
802 virtual HRESULT STDMETHODCALLTYPE geolocationProvider(IWebGeolocationProvider** locationProvider);
803 virtual HRESULT STDMETHODCALLTYPE geolocationDidChangePosition(IWebGeolocationPosition* position);
804 virtual HRESULT STDMETHODCALLTYPE geolocationDidFailWithError(IWebError* error);
806 virtual HRESULT STDMETHODCALLTYPE setDomainRelaxationForbiddenForURLScheme(BOOL forbidden, BSTR scheme);
807 virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsSecure(BSTR);
809 virtual HRESULT STDMETHODCALLTYPE nextDisplayIsSynchronous();
812 bool shouldUseEmbeddedView(const WTF::String& mimeType) const;
814 WebCore::Page* page();
815 bool handleMouseEvent(UINT, WPARAM, LPARAM);
816 void setMouseActivated(bool flag) { m_mouseActivated = flag; }
817 bool handleContextMenuEvent(WPARAM, LPARAM);
818 bool onMeasureItem(WPARAM, LPARAM);
819 bool onDrawItem(WPARAM, LPARAM);
820 bool onInitMenuPopup(WPARAM, LPARAM);
821 bool onUninitMenuPopup(WPARAM, LPARAM);
822 void performContextMenuAction(WPARAM, LPARAM, bool byPosition);
823 bool mouseWheel(WPARAM, LPARAM, bool isMouseHWheel);
824 bool verticalScroll(WPARAM, LPARAM);
825 bool horizontalScroll(WPARAM, LPARAM);
826 bool gesture(WPARAM, LPARAM);
827 bool gestureNotify(WPARAM, LPARAM);
828 bool execCommand(WPARAM wParam, LPARAM lParam);
829 bool keyDown(WPARAM, LPARAM, bool systemKeyDown = false);
830 bool keyUp(WPARAM, LPARAM, bool systemKeyDown = false);
831 bool keyPress(WPARAM, LPARAM, bool systemKeyDown = false);
832 void paint(HDC, LPARAM);
833 void paintIntoWindow(HDC bitmapDC, HDC windowDC, const WebCore::IntRect& dirtyRect);
834 bool ensureBackingStore();
835 void addToDirtyRegion(const WebCore::IntRect&);
836 void addToDirtyRegion(HRGN);
837 void scrollBackingStore(WebCore::FrameView*, int dx, int dy, const WebCore::IntRect& scrollViewRect, const WebCore::IntRect& clipRect);
838 void deleteBackingStore();
839 void repaint(const WebCore::IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false);
840 void frameRect(RECT* rect);
842 void closeWindowSoon();
843 void closeWindowTimerFired();
844 bool didClose() const { return m_didClose; }
846 bool transparent() const { return m_transparent; }
848 bool onIMEStartComposition();
849 bool onIMEComposition(LPARAM);
850 bool onIMEEndComposition();
851 bool onIMEChar(WPARAM, LPARAM);
852 bool onIMENotify(WPARAM, LPARAM, LRESULT*);
853 LRESULT onIMERequest(WPARAM, LPARAM);
854 bool onIMESelect(WPARAM, LPARAM);
855 bool onIMESetContext(WPARAM, LPARAM);
856 void selectionChanged();
857 void resetIME(WebCore::Frame*);
858 void setInputMethodState(bool);
860 HRESULT registerDragDrop();
861 HRESULT revokeDragDrop();
863 // Convenient to be able to violate the rules of COM here for easy movement to the frame.
864 WebFrame* topLevelFrame() const { return m_mainFrame; }
865 const WTF::String& userAgentForKURL(const WebCore::KURL& url);
867 static bool canHandleRequest(const WebCore::ResourceRequest&);
869 static WTF::String standardUserAgentWithApplicationName(const WTF::String&);
871 void setIsBeingDestroyed() { m_isBeingDestroyed = true; }
872 bool isBeingDestroyed() const { return m_isBeingDestroyed; }
874 const char* interpretKeyEvent(const WebCore::KeyboardEvent*);
875 bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);
877 bool isPainting() const { return m_paintCount > 0; }
879 void setToolTip(const WTF::String&);
881 void registerForIconNotification(bool listen);
882 void dispatchDidReceiveIconFromWebFrame(WebFrame*);
884 HRESULT notifyDidAddIcon(IWebNotification*);
885 HRESULT notifyPreferencesChanged(IWebNotification*);
887 static void setCacheModel(WebCacheModel);
888 static WebCacheModel cacheModel();
889 static bool didSetCacheModel();
890 static WebCacheModel maxCacheModelInAnyInstance();
892 void updateActiveStateSoon() const;
893 void deleteBackingStoreSoon();
894 void cancelDeleteBackingStoreSoon();
896 HWND topLevelParent() const { return m_topLevelParent; }
897 HWND viewWindow() const { return m_viewWindow; }
899 void updateActiveState();
901 bool onGetObject(WPARAM, LPARAM, LRESULT&) const;
902 static STDMETHODIMP AccessibleObjectFromWindow(HWND, DWORD objectID, REFIID, void** ppObject);
904 void downloadURL(const WebCore::KURL&);
906 #if USE(ACCELERATED_COMPOSITING)
907 void setRootLayerNeedsDisplay(bool sync = false)
910 m_layerRenderer->setNeedsDisplay(sync);
912 void setRootChildLayer(WebCore::PlatformCALayer*);
915 void enterFullscreenForNode(WebCore::Node*);
916 void exitFullscreen();
918 void setLastCursor(HCURSOR cursor) { m_lastSetCursor = cursor; }
921 void setZoomMultiplier(float multiplier, bool isTextOnly);
922 float zoomMultiplier(bool isTextOnly);
923 bool canZoomIn(bool isTextOnly);
924 HRESULT zoomIn(bool isTextOnly);
925 bool canZoomOut(bool isTextOnly);
926 HRESULT zoomOut(bool isTextOnly);
927 bool canResetZoom(bool isTextOnly);
928 HRESULT resetZoom(bool isTextOnly);
931 void sizeChanged(const WebCore::IntSize&);
933 enum WindowsToPaint { PaintWebViewOnly, PaintWebViewAndChildren };
934 void paintIntoBackingStore(WebCore::FrameView*, HDC bitmapDC, const WebCore::IntRect& dirtyRect, WindowsToPaint);
935 void updateBackingStore(WebCore::FrameView*, HDC = 0, bool backingStoreCompletelyDirty = false, WindowsToPaint = PaintWebViewOnly);
937 WebCore::DragOperation keyStateToDragOperation(DWORD grfKeyState) const;
939 // FIXME: This variable is part of a workaround. The drop effect (pdwEffect) passed to Drop is incorrect.
940 // We set this variable in DragEnter and DragOver so that it can be used in Drop to set the correct drop effect.
941 // Thus, on return from DoDragDrop we have the correct pdwEffect for the drag-and-drop operation.
942 // (see https://bugs.webkit.org/show_bug.cgi?id=29264)
943 DWORD m_lastDropEffect;
945 #if USE(ACCELERATED_COMPOSITING)
946 // WKCACFLayerRendererClient
947 virtual bool shouldRender() const;
948 virtual void animationsStarted(CFTimeInterval);
949 virtual void syncCompositingState();
953 static bool registerWebViewWindowClass();
954 static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
956 HIMC getIMMContext();
957 void releaseIMMContext(HIMC);
958 static bool allowSiteSpecificHacks() { return s_allowSiteSpecificHacks; }
959 void preflightSpellChecker();
960 bool continuousCheckingAllowed();
961 void initializeToolTipWindow();
962 void prepareCandidateWindow(WebCore::Frame*, HIMC);
963 void updateSelectionForIME();
964 LRESULT onIMERequestCharPosition(WebCore::Frame*, IMECHARPOSITION*);
965 LRESULT onIMERequestReconvertString(WebCore::Frame*, RECONVERTSTRING*);
966 bool developerExtrasEnabled() const;
968 bool shouldInitializeTrackPointHack();
970 // AllWebViewSet functions
971 void addToAllWebViewsSet();
972 void removeFromAllWebViewsSet();
974 virtual void windowReceivedMessage(HWND, UINT message, WPARAM, LPARAM);
978 bool m_deletionHasBegun;
982 WebFrame* m_mainFrame;
983 WebCore::Page* m_page;
985 RefPtr<RefCountedHBITMAP> m_backingStoreBitmap;
986 SIZE m_backingStoreSize;
987 RefPtr<RefCountedHRGN> m_backingStoreDirtyRegion;
989 COMPtr<IWebEditingDelegate> m_editingDelegate;
990 COMPtr<IWebFrameLoadDelegate> m_frameLoadDelegate;
991 COMPtr<IWebFrameLoadDelegatePrivate> m_frameLoadDelegatePrivate;
992 COMPtr<IWebUIDelegate> m_uiDelegate;
993 COMPtr<IWebUIDelegatePrivate> m_uiDelegatePrivate;
994 COMPtr<IWebFormDelegate> m_formDelegate;
995 COMPtr<IWebPolicyDelegate> m_policyDelegate;
996 COMPtr<IWebResourceLoadDelegate> m_resourceLoadDelegate;
997 COMPtr<IWebDownloadDelegate> m_downloadDelegate;
998 COMPtr<IWebHistoryDelegate> m_historyDelegate;
999 COMPtr<WebPreferences> m_preferences;
1000 COMPtr<WebInspector> m_webInspector;
1001 COMPtr<IWebPluginHalterDelegate> m_pluginHalterDelegate;
1002 COMPtr<IWebGeolocationProvider> m_geolocationProvider;
1004 bool m_userAgentOverridden;
1005 bool m_useBackForwardList;
1006 WTF::String m_userAgentCustom;
1007 WTF::String m_userAgentStandard;
1008 float m_zoomMultiplier;
1009 bool m_zoomsTextOnly;
1010 WTF::String m_overrideEncoding;
1011 WTF::String m_applicationName;
1012 bool m_mouseActivated;
1013 // WebCore dragging logic needs to be able to inspect the drag data
1014 // this is updated in DragEnter/Leave/Drop
1015 COMPtr<IDataObject> m_dragData;
1016 COMPtr<IDropTargetHelper> m_dropTargetHelper;
1017 UChar m_currentCharacterCode;
1018 bool m_isBeingDestroyed;
1019 unsigned m_paintCount;
1020 bool m_hasSpellCheckerDocumentTag;
1021 bool m_smartInsertDeleteEnabled;
1022 bool m_selectTrailingWhitespaceEnabled;
1024 bool m_hasCustomDropTarget;
1025 unsigned m_inIMEComposition;
1027 WTF::String m_toolTip;
1028 bool m_deleteBackingStoreTimerActive;
1032 static bool s_allowSiteSpecificHacks;
1034 WebCore::SuspendableTimer* m_closeWindowTimer;
1035 OwnPtr<TRACKMOUSEEVENT> m_mouseOutTracker;
1037 HWND m_topLevelParent;
1039 OwnPtr<HashSet<WTF::String> > m_embeddedViewMIMETypes;
1041 //Variables needed to store gesture information
1042 RefPtr<WebCore::Node> m_gestureTargetNode;
1049 OwnPtr<FullscreenVideoController> m_fullscreenController;
1052 #if USE(ACCELERATED_COMPOSITING)
1053 bool isAcceleratedCompositing() const { return m_isAcceleratedCompositing; }
1054 void setAcceleratedCompositing(bool);
1055 void updateRootLayerContents();
1056 void layerRendererBecameVisible();
1058 OwnPtr<WebCore::WKCACFLayerRenderer> m_layerRenderer;
1059 bool m_isAcceleratedCompositing;
1062 bool m_nextDisplayIsSynchronous;
1064 HCURSOR m_lastSetCursor;