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::GraphicsLayerClient
74 , WebCore::WKCACFLayerRendererClient
78 static WebView* createInstance();
85 virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
86 virtual ULONG STDMETHODCALLTYPE AddRef(void);
87 virtual ULONG STDMETHODCALLTYPE Release(void);
91 virtual HRESULT STDMETHODCALLTYPE canShowMIMEType(
92 /* [in] */ BSTR mimeType,
93 /* [retval][out] */ BOOL *canShow);
95 virtual HRESULT STDMETHODCALLTYPE canShowMIMETypeAsHTML(
96 /* [in] */ BSTR mimeType,
97 /* [retval][out] */ BOOL *canShow);
99 virtual HRESULT STDMETHODCALLTYPE MIMETypesShownAsHTML(
100 /* [retval][out] */ IEnumVARIANT **enumVariant);
102 virtual HRESULT STDMETHODCALLTYPE setMIMETypesShownAsHTML(
103 /* [size_is][in] */ BSTR *mimeTypes,
104 /* [in] */ int cMimeTypes);
106 virtual HRESULT STDMETHODCALLTYPE URLFromPasteboard(
107 /* [in] */ IDataObject *pasteboard,
108 /* [retval][out] */ BSTR *url);
110 virtual HRESULT STDMETHODCALLTYPE URLTitleFromPasteboard(
111 /* [in] */ IDataObject *pasteboard,
112 /* [retval][out] */ BSTR *urlTitle);
114 virtual HRESULT STDMETHODCALLTYPE initWithFrame(
115 /* [in] */ RECT frame,
116 /* [in] */ BSTR frameName,
117 /* [in] */ BSTR groupName);
119 virtual HRESULT STDMETHODCALLTYPE setUIDelegate(
120 /* [in] */ IWebUIDelegate *d);
122 virtual HRESULT STDMETHODCALLTYPE uiDelegate(
123 /* [out][retval] */ IWebUIDelegate **d);
125 virtual HRESULT STDMETHODCALLTYPE setResourceLoadDelegate(
126 /* [in] */ IWebResourceLoadDelegate *d);
128 virtual HRESULT STDMETHODCALLTYPE resourceLoadDelegate(
129 /* [out][retval] */ IWebResourceLoadDelegate **d);
131 virtual HRESULT STDMETHODCALLTYPE setDownloadDelegate(
132 /* [in] */ IWebDownloadDelegate *d);
134 virtual HRESULT STDMETHODCALLTYPE downloadDelegate(
135 /* [out][retval] */ IWebDownloadDelegate **d);
137 virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegate(
138 /* [in] */ IWebFrameLoadDelegate *d);
140 virtual HRESULT STDMETHODCALLTYPE frameLoadDelegate(
141 /* [out][retval] */ IWebFrameLoadDelegate **d);
143 virtual HRESULT STDMETHODCALLTYPE setPolicyDelegate(
144 /* [in] */ IWebPolicyDelegate *d);
146 virtual HRESULT STDMETHODCALLTYPE policyDelegate(
147 /* [out][retval] */ IWebPolicyDelegate **d);
149 virtual HRESULT STDMETHODCALLTYPE mainFrame(
150 /* [out][retval] */ IWebFrame **frame);
152 virtual HRESULT STDMETHODCALLTYPE focusedFrame(
153 /* [out][retval] */ IWebFrame **frame);
155 virtual HRESULT STDMETHODCALLTYPE backForwardList(
156 /* [out][retval] */ IWebBackForwardList **list);
158 virtual HRESULT STDMETHODCALLTYPE setMaintainsBackForwardList(
159 /* [in] */ BOOL flag);
161 virtual HRESULT STDMETHODCALLTYPE goBack(
162 /* [retval][out] */ BOOL *succeeded);
164 virtual HRESULT STDMETHODCALLTYPE goForward(
165 /* [retval][out] */ BOOL *succeeded);
167 virtual HRESULT STDMETHODCALLTYPE goToBackForwardItem(
168 /* [in] */ IWebHistoryItem *item,
169 /* [retval][out] */ BOOL *succeeded);
171 virtual HRESULT STDMETHODCALLTYPE setTextSizeMultiplier(
172 /* [in] */ float multiplier);
174 virtual HRESULT STDMETHODCALLTYPE textSizeMultiplier(
175 /* [retval][out] */ float *multiplier);
177 virtual HRESULT STDMETHODCALLTYPE setApplicationNameForUserAgent(
178 /* [in] */ BSTR applicationName);
180 virtual HRESULT STDMETHODCALLTYPE applicationNameForUserAgent(
181 /* [retval][out] */ BSTR *applicationName);
183 virtual HRESULT STDMETHODCALLTYPE setCustomUserAgent(
184 /* [in] */ BSTR userAgentString);
186 virtual HRESULT STDMETHODCALLTYPE customUserAgent(
187 /* [retval][out] */ BSTR *userAgentString);
189 virtual HRESULT STDMETHODCALLTYPE userAgentForURL(
191 /* [retval][out] */ BSTR *userAgent);
193 virtual HRESULT STDMETHODCALLTYPE supportsTextEncoding(
194 /* [retval][out] */ BOOL *supports);
196 virtual HRESULT STDMETHODCALLTYPE setCustomTextEncodingName(
197 /* [in] */ BSTR encodingName);
199 virtual HRESULT STDMETHODCALLTYPE customTextEncodingName(
200 /* [retval][out] */ BSTR *encodingName);
202 virtual HRESULT STDMETHODCALLTYPE setMediaStyle(
203 /* [in] */ BSTR media);
205 virtual HRESULT STDMETHODCALLTYPE mediaStyle(
206 /* [retval][out] */ BSTR *media);
208 virtual HRESULT STDMETHODCALLTYPE stringByEvaluatingJavaScriptFromString(
209 /* [in] */ BSTR script,
210 /* [retval][out] */ BSTR *result);
212 virtual HRESULT STDMETHODCALLTYPE windowScriptObject(
213 /* [retval][out] */ IWebScriptObject **webScriptObject);
215 virtual HRESULT STDMETHODCALLTYPE setPreferences(
216 /* [in] */ IWebPreferences *prefs);
218 virtual HRESULT STDMETHODCALLTYPE preferences(
219 /* [retval][out] */ IWebPreferences **prefs);
221 virtual HRESULT STDMETHODCALLTYPE setPreferencesIdentifier(
222 /* [in] */ BSTR anIdentifier);
224 virtual HRESULT STDMETHODCALLTYPE preferencesIdentifier(
225 /* [retval][out] */ BSTR *anIdentifier);
227 virtual HRESULT STDMETHODCALLTYPE setHostWindow(
228 /* [in] */ OLE_HANDLE window);
230 virtual HRESULT STDMETHODCALLTYPE hostWindow(
231 /* [retval][out] */ OLE_HANDLE *window);
233 virtual HRESULT STDMETHODCALLTYPE searchFor(
235 /* [in] */ BOOL forward,
236 /* [in] */ BOOL caseFlag,
237 /* [in] */ BOOL wrapFlag,
238 /* [retval][out] */ BOOL *found);
240 virtual HRESULT STDMETHODCALLTYPE registerViewClass(
241 /* [in] */ IWebDocumentView *view,
242 /* [in] */ IWebDocumentRepresentation *representation,
243 /* [in] */ BSTR forMIMEType);
245 virtual HRESULT STDMETHODCALLTYPE setGroupName(
246 /* [in] */ BSTR groupName);
248 virtual HRESULT STDMETHODCALLTYPE groupName(
249 /* [retval][out] */ BSTR *groupName);
251 virtual HRESULT STDMETHODCALLTYPE estimatedProgress(
252 /* [retval][out] */ double *estimatedProgress);
254 virtual HRESULT STDMETHODCALLTYPE isLoading(
255 /* [retval][out] */ BOOL *isLoading);
257 virtual HRESULT STDMETHODCALLTYPE elementAtPoint(
258 /* [in] */ LPPOINT point,
259 /* [retval][out] */ IPropertyBag **elementDictionary);
261 virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForSelection(
262 /* [retval][out] */ IEnumVARIANT **enumVariant);
264 virtual HRESULT STDMETHODCALLTYPE writeSelectionWithPasteboardTypes(
265 /* [size_is][in] */ BSTR *types,
266 /* [in] */ int cTypes,
267 /* [in] */ IDataObject *pasteboard);
269 virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForElement(
270 /* [in] */ IPropertyBag *elementDictionary,
271 /* [retval][out] */ IEnumVARIANT **enumVariant);
273 virtual HRESULT STDMETHODCALLTYPE writeElement(
274 /* [in] */ IPropertyBag *elementDictionary,
275 /* [size_is][in] */ BSTR *withPasteboardTypes,
276 /* [in] */ int cWithPasteboardTypes,
277 /* [in] */ IDataObject *pasteboard);
279 virtual HRESULT STDMETHODCALLTYPE selectedText(
280 /* [out, retval] */ BSTR* str);
282 virtual HRESULT STDMETHODCALLTYPE centerSelectionInVisibleArea(
283 /* [in] */ IUnknown* sender);
285 virtual HRESULT STDMETHODCALLTYPE moveDragCaretToPoint(
286 /* [in] */ LPPOINT point);
288 virtual HRESULT STDMETHODCALLTYPE removeDragCaret( void);
290 virtual HRESULT STDMETHODCALLTYPE setDrawsBackground(
291 /* [in] */ BOOL drawsBackground);
293 virtual HRESULT STDMETHODCALLTYPE drawsBackground(
294 /* [retval][out] */ BOOL *drawsBackground);
296 virtual HRESULT STDMETHODCALLTYPE setMainFrameURL(
297 /* [in] */ BSTR urlString);
299 virtual HRESULT STDMETHODCALLTYPE mainFrameURL(
300 /* [retval][out] */ BSTR *urlString);
302 virtual HRESULT STDMETHODCALLTYPE mainFrameDocument(
303 /* [retval][out] */ IDOMDocument **document);
305 virtual HRESULT STDMETHODCALLTYPE mainFrameTitle(
306 /* [retval][out] */ BSTR *title);
308 virtual HRESULT STDMETHODCALLTYPE mainFrameIcon(
309 /* [retval][out] */ OLE_HANDLE *hBitmap);
311 virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsLocal(
312 /* [in] */ BSTR scheme);
314 virtual HRESULT STDMETHODCALLTYPE close();
318 virtual HRESULT STDMETHODCALLTYPE takeStringURLFrom(
319 /* [in] */ IUnknown *sender);
321 virtual HRESULT STDMETHODCALLTYPE stopLoading(
322 /* [in] */ IUnknown *sender);
324 virtual HRESULT STDMETHODCALLTYPE reload(
325 /* [in] */ IUnknown *sender);
327 virtual HRESULT STDMETHODCALLTYPE canGoBack(
328 /* [in] */ IUnknown *sender,
329 /* [retval][out] */ BOOL *result);
331 virtual HRESULT STDMETHODCALLTYPE goBack(
332 /* [in] */ IUnknown *sender);
334 virtual HRESULT STDMETHODCALLTYPE canGoForward(
335 /* [in] */ IUnknown *sender,
336 /* [retval][out] */ BOOL *result);
338 virtual HRESULT STDMETHODCALLTYPE goForward(
339 /* [in] */ IUnknown *sender);
341 virtual HRESULT STDMETHODCALLTYPE canMakeTextLarger(
342 /* [in] */ IUnknown *sender,
343 /* [retval][out] */ BOOL *result);
345 virtual HRESULT STDMETHODCALLTYPE makeTextLarger(
346 /* [in] */ IUnknown *sender);
348 virtual HRESULT STDMETHODCALLTYPE canMakeTextSmaller(
349 /* [in] */ IUnknown *sender,
350 /* [retval][out] */ BOOL *result);
352 virtual HRESULT STDMETHODCALLTYPE makeTextSmaller(
353 /* [in] */ IUnknown *sender);
355 virtual HRESULT STDMETHODCALLTYPE canMakeTextStandardSize(
356 /* [in] */ IUnknown *sender,
357 /* [retval][out] */ BOOL *result);
359 virtual HRESULT STDMETHODCALLTYPE makeTextStandardSize(
360 /* [in] */ IUnknown *sender);
362 virtual HRESULT STDMETHODCALLTYPE toggleContinuousSpellChecking(
363 /* [in] */ IUnknown *sender);
365 virtual HRESULT STDMETHODCALLTYPE toggleSmartInsertDelete(
366 /* [in] */ IUnknown *sender);
368 virtual HRESULT STDMETHODCALLTYPE toggleGrammarChecking(
369 /* [in] */ IUnknown *sender);
371 virtual HRESULT STDMETHODCALLTYPE reloadFromOrigin(
372 /* [in] */ IUnknown *sender);
376 virtual HRESULT STDMETHODCALLTYPE computedStyleForElement(
377 /* [in] */ IDOMElement *element,
378 /* [in] */ BSTR pseudoElement,
379 /* [retval][out] */ IDOMCSSStyleDeclaration **style);
383 virtual HRESULT STDMETHODCALLTYPE editableDOMRangeForPoint(
384 /* [in] */ LPPOINT point,
385 /* [retval][out] */ IDOMRange **range);
387 virtual HRESULT STDMETHODCALLTYPE setSelectedDOMRange(
388 /* [in] */ IDOMRange *range,
389 /* [in] */ WebSelectionAffinity affinity);
391 virtual HRESULT STDMETHODCALLTYPE selectedDOMRange(
392 /* [retval][out] */ IDOMRange **range);
394 virtual HRESULT STDMETHODCALLTYPE selectionAffinity(
395 /* [retval][out][retval][out] */ WebSelectionAffinity *affinity);
397 virtual HRESULT STDMETHODCALLTYPE setEditable(
398 /* [in] */ BOOL flag);
400 virtual HRESULT STDMETHODCALLTYPE isEditable(
401 /* [retval][out] */ BOOL *isEditable);
403 virtual HRESULT STDMETHODCALLTYPE setTypingStyle(
404 /* [in] */ IDOMCSSStyleDeclaration *style);
406 virtual HRESULT STDMETHODCALLTYPE typingStyle(
407 /* [retval][out] */ IDOMCSSStyleDeclaration **style);
409 virtual HRESULT STDMETHODCALLTYPE setSmartInsertDeleteEnabled(
410 /* [in] */ BOOL flag);
412 virtual HRESULT STDMETHODCALLTYPE smartInsertDeleteEnabled(
413 /* [in] */ BOOL *enabled);
415 virtual HRESULT STDMETHODCALLTYPE setSelectTrailingWhitespaceEnabled(
416 /* [in] */ BOOL flag);
418 virtual HRESULT STDMETHODCALLTYPE isSelectTrailingWhitespaceEnabled(
419 /* [in] */ BOOL *enabled);
421 virtual HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled(
422 /* [in] */ BOOL flag);
424 virtual HRESULT STDMETHODCALLTYPE isContinuousSpellCheckingEnabled(
425 /* [retval][out] */ BOOL *enabled);
427 virtual HRESULT STDMETHODCALLTYPE spellCheckerDocumentTag(
428 /* [retval][out] */ int *tag);
430 virtual HRESULT STDMETHODCALLTYPE undoManager(
431 /* [retval][out] */ IWebUndoManager **manager);
433 virtual HRESULT STDMETHODCALLTYPE setEditingDelegate(
434 /* [in] */ IWebEditingDelegate *d);
436 virtual HRESULT STDMETHODCALLTYPE editingDelegate(
437 /* [retval][out] */ IWebEditingDelegate **d);
439 virtual HRESULT STDMETHODCALLTYPE styleDeclarationWithText(
440 /* [in] */ BSTR text,
441 /* [retval][out] */ IDOMCSSStyleDeclaration **style);
443 virtual HRESULT STDMETHODCALLTYPE hasSelectedRange(
444 /* [retval][out] */ BOOL *hasSelectedRange);
446 virtual HRESULT STDMETHODCALLTYPE cutEnabled(
447 /* [retval][out] */ BOOL *enabled);
449 virtual HRESULT STDMETHODCALLTYPE copyEnabled(
450 /* [retval][out] */ BOOL *enabled);
452 virtual HRESULT STDMETHODCALLTYPE pasteEnabled(
453 /* [retval][out] */ BOOL *enabled);
455 virtual HRESULT STDMETHODCALLTYPE deleteEnabled(
456 /* [retval][out] */ BOOL *enabled);
458 virtual HRESULT STDMETHODCALLTYPE editingEnabled(
459 /* [retval][out] */ BOOL *enabled);
461 virtual HRESULT STDMETHODCALLTYPE isGrammarCheckingEnabled(
462 /* [retval][out] */ BOOL *enabled);
464 virtual HRESULT STDMETHODCALLTYPE setGrammarCheckingEnabled(
467 virtual HRESULT STDMETHODCALLTYPE setPageSizeMultiplier(
468 /* [in] */ float multiplier);
470 virtual HRESULT STDMETHODCALLTYPE pageSizeMultiplier(
471 /* [retval][out] */ float *multiplier);
473 virtual HRESULT STDMETHODCALLTYPE canZoomPageIn(
474 /* [in] */ IUnknown *sender,
475 /* [retval][out] */ BOOL *result);
477 virtual HRESULT STDMETHODCALLTYPE zoomPageIn(
478 /* [in] */ IUnknown *sender);
480 virtual HRESULT STDMETHODCALLTYPE canZoomPageOut(
481 /* [in] */ IUnknown *sender,
482 /* [retval][out] */ BOOL *result);
484 virtual HRESULT STDMETHODCALLTYPE zoomPageOut(
485 /* [in] */ IUnknown *sender);
487 virtual HRESULT STDMETHODCALLTYPE canResetPageZoom(
488 /* [in] */ IUnknown *sender,
489 /* [retval][out] */ BOOL *result);
491 virtual HRESULT STDMETHODCALLTYPE resetPageZoom(
492 /* [in] */ IUnknown *sender);
494 // IWebViewUndoableEditing
496 virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithNode(
497 /* [in] */ IDOMNode *node);
499 virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithText(
500 /* [in] */ BSTR text);
502 virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithMarkupString(
503 /* [in] */ BSTR markupString);
505 virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithArchive(
506 /* [in] */ IWebArchive *archive);
508 virtual HRESULT STDMETHODCALLTYPE deleteSelection( void);
510 virtual HRESULT STDMETHODCALLTYPE clearSelection(void);
512 virtual HRESULT STDMETHODCALLTYPE applyStyle(
513 /* [in] */ IDOMCSSStyleDeclaration *style);
515 // IWebViewEditingActions
517 virtual HRESULT STDMETHODCALLTYPE copy(
518 /* [in] */ IUnknown *sender);
520 virtual HRESULT STDMETHODCALLTYPE cut(
521 /* [in] */ IUnknown *sender);
523 virtual HRESULT STDMETHODCALLTYPE paste(
524 /* [in] */ IUnknown *sender);
526 virtual HRESULT STDMETHODCALLTYPE copyURL(
527 /* [in] */ BSTR url);
529 virtual HRESULT STDMETHODCALLTYPE copyFont(
530 /* [in] */ IUnknown *sender);
532 virtual HRESULT STDMETHODCALLTYPE pasteFont(
533 /* [in] */ IUnknown *sender);
535 virtual HRESULT STDMETHODCALLTYPE delete_(
536 /* [in] */ IUnknown *sender);
538 virtual HRESULT STDMETHODCALLTYPE pasteAsPlainText(
539 /* [in] */ IUnknown *sender);
541 virtual HRESULT STDMETHODCALLTYPE pasteAsRichText(
542 /* [in] */ IUnknown *sender);
544 virtual HRESULT STDMETHODCALLTYPE changeFont(
545 /* [in] */ IUnknown *sender);
547 virtual HRESULT STDMETHODCALLTYPE changeAttributes(
548 /* [in] */ IUnknown *sender);
550 virtual HRESULT STDMETHODCALLTYPE changeDocumentBackgroundColor(
551 /* [in] */ IUnknown *sender);
553 virtual HRESULT STDMETHODCALLTYPE changeColor(
554 /* [in] */ IUnknown *sender);
556 virtual HRESULT STDMETHODCALLTYPE alignCenter(
557 /* [in] */ IUnknown *sender);
559 virtual HRESULT STDMETHODCALLTYPE alignJustified(
560 /* [in] */ IUnknown *sender);
562 virtual HRESULT STDMETHODCALLTYPE alignLeft(
563 /* [in] */ IUnknown *sender);
565 virtual HRESULT STDMETHODCALLTYPE alignRight(
566 /* [in] */ IUnknown *sender);
568 virtual HRESULT STDMETHODCALLTYPE checkSpelling(
569 /* [in] */ IUnknown *sender);
571 virtual HRESULT STDMETHODCALLTYPE showGuessPanel(
572 /* [in] */ IUnknown *sender);
574 virtual HRESULT STDMETHODCALLTYPE performFindPanelAction(
575 /* [in] */ IUnknown *sender);
577 virtual HRESULT STDMETHODCALLTYPE startSpeaking(
578 /* [in] */ IUnknown *sender);
580 virtual HRESULT STDMETHODCALLTYPE stopSpeaking(
581 /* [in] */ IUnknown *sender);
583 // IWebNotificationObserver
585 virtual HRESULT STDMETHODCALLTYPE onNotify(
586 /* [in] */ IWebNotification *notification);
590 virtual HRESULT STDMETHODCALLTYPE MIMETypeForExtension(
591 /* [in] */ BSTR extension,
592 /* [retval][out] */ BSTR *mimeType);
594 virtual HRESULT STDMETHODCALLTYPE setCustomDropTarget(
595 /* [in] */ IDropTarget* dt);
597 virtual HRESULT STDMETHODCALLTYPE removeCustomDropTarget();
599 virtual HRESULT STDMETHODCALLTYPE setInViewSourceMode(
600 /* [in] */ BOOL flag);
602 virtual HRESULT STDMETHODCALLTYPE inViewSourceMode(
603 /* [retval][out] */ BOOL* flag);
605 virtual HRESULT STDMETHODCALLTYPE viewWindow(
606 /* [retval][out] */ OLE_HANDLE *window);
608 virtual HRESULT STDMETHODCALLTYPE setFormDelegate(
609 /* [in] */ IWebFormDelegate *formDelegate);
611 virtual HRESULT STDMETHODCALLTYPE formDelegate(
612 /* [retval][out] */ IWebFormDelegate **formDelegate);
614 virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegatePrivate(
615 /* [in] */ IWebFrameLoadDelegatePrivate *frameLoadDelegatePrivate);
617 virtual HRESULT STDMETHODCALLTYPE frameLoadDelegatePrivate(
618 /* [retval][out] */ IWebFrameLoadDelegatePrivate **frameLoadDelegatePrivate);
620 virtual HRESULT STDMETHODCALLTYPE scrollOffset(
621 /* [retval][out] */ LPPOINT offset);
623 virtual HRESULT STDMETHODCALLTYPE scrollBy(
624 /* [in] */ LPPOINT offset);
626 virtual HRESULT STDMETHODCALLTYPE visibleContentRect(
627 /* [retval][out] */ LPRECT rect);
629 virtual HRESULT STDMETHODCALLTYPE updateFocusedAndActiveState();
631 virtual HRESULT STDMETHODCALLTYPE executeCoreCommandByName(BSTR name, BSTR value);
633 virtual HRESULT STDMETHODCALLTYPE clearMainFrameName();
635 virtual HRESULT STDMETHODCALLTYPE markAllMatchesForText(
636 BSTR search, BOOL caseSensitive, BOOL highlight, UINT limit, UINT* matches);
638 virtual HRESULT STDMETHODCALLTYPE unmarkAllTextMatches();
640 virtual HRESULT STDMETHODCALLTYPE rectsForTextMatches(
641 IEnumTextMatches** pmatches);
643 virtual HRESULT STDMETHODCALLTYPE generateSelectionImage(
644 BOOL forceWhiteText, OLE_HANDLE* hBitmap);
646 virtual HRESULT STDMETHODCALLTYPE selectionRect(
649 virtual HRESULT STDMETHODCALLTYPE DragEnter(
650 IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
652 virtual HRESULT STDMETHODCALLTYPE DragOver(
653 DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
655 virtual HRESULT STDMETHODCALLTYPE DragLeave();
657 virtual HRESULT STDMETHODCALLTYPE Drop(
658 IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
660 virtual HRESULT STDMETHODCALLTYPE canHandleRequest(
661 IWebURLRequest *request,
664 virtual HRESULT STDMETHODCALLTYPE standardUserAgentWithApplicationName(
665 /* [in] */ BSTR applicationName,
666 /* [retval][out] */ BSTR *groupName);
668 virtual HRESULT STDMETHODCALLTYPE clearFocusNode();
670 virtual HRESULT STDMETHODCALLTYPE setInitialFocus(
671 /* [in] */ BOOL forward);
673 virtual HRESULT STDMETHODCALLTYPE setTabKeyCyclesThroughElements(
674 /* [in] */ BOOL cycles);
676 virtual HRESULT STDMETHODCALLTYPE tabKeyCyclesThroughElements(
677 /* [retval][out] */ BOOL *result);
679 virtual HRESULT STDMETHODCALLTYPE setAllowSiteSpecificHacks(
680 /* [in] */ BOOL allows);
682 virtual HRESULT STDMETHODCALLTYPE addAdditionalPluginDirectory(
683 /* [in] */ BSTR directory);
685 virtual HRESULT STDMETHODCALLTYPE loadBackForwardListFromOtherView(
686 /* [in] */ IWebView *otherView);
688 virtual HRESULT STDMETHODCALLTYPE inspector(
689 /* [retval][out] */ IWebInspector**);
691 virtual HRESULT STDMETHODCALLTYPE clearUndoRedoOperations( void);
692 virtual HRESULT STDMETHODCALLTYPE shouldClose(
693 /* [retval][out] */ BOOL* result);
695 virtual HRESULT STDMETHODCALLTYPE setProhibitsMainFrameScrolling(BOOL);
696 virtual HRESULT STDMETHODCALLTYPE setShouldApplyMacFontAscentHack(BOOL);
698 virtual HRESULT STDMETHODCALLTYPE windowAncestryDidChange();
700 virtual HRESULT STDMETHODCALLTYPE paintDocumentRectToContext(
701 /* [in] */ RECT rect,
702 /* [in] */ OLE_HANDLE dc);
704 virtual HRESULT STDMETHODCALLTYPE paintScrollViewRectToContextAtPoint(
705 /* [in] */ RECT rect,
707 /* [in] */ OLE_HANDLE dc);
709 virtual HRESULT STDMETHODCALLTYPE reportException(
710 /* [in] */ JSContextRef context,
711 /* [in] */ JSValueRef exception);
713 virtual HRESULT STDMETHODCALLTYPE elementFromJS(
714 /* [in] */ JSContextRef context,
715 /* [in] */ JSValueRef nodeObject,
716 /* [retval][out] */ IDOMElement **element);
718 virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerTimeDelay(
719 /* [in] */ double timeDelay);
721 virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerChunkSize(
722 /* [in] */ int chunkSize);
724 virtual HRESULT STDMETHODCALLTYPE backingStore(
725 /* [out, retval] */ OLE_HANDLE* hBitmap);
727 virtual HRESULT STDMETHODCALLTYPE setTransparent(
728 /* [in] */ BOOL transparent);
730 virtual HRESULT STDMETHODCALLTYPE transparent(
731 /* [out, retval] */ BOOL* transparent);
733 virtual HRESULT STDMETHODCALLTYPE setDefersCallbacks(
734 /* [in] */ BOOL defersCallbacks);
736 virtual HRESULT STDMETHODCALLTYPE defersCallbacks(
737 /* [out, retval] */ BOOL* defersCallbacks);
739 virtual HRESULT STDMETHODCALLTYPE globalHistoryItem(
740 /* [out, retval] */ IWebHistoryItem** item);
742 virtual HRESULT STDMETHODCALLTYPE setAlwaysUsesComplexTextCodePath(
743 /* [in] */ BOOL complex);
745 virtual HRESULT STDMETHODCALLTYPE alwaysUsesComplexTextCodePath(
746 /* [out, retval] */ BOOL* complex);
748 virtual HRESULT STDMETHODCALLTYPE setCookieEnabled(
749 /* [in] */ BOOL enable);
751 virtual HRESULT STDMETHODCALLTYPE cookieEnabled(
752 /* [out, retval] */ BOOL* enabled);
754 virtual HRESULT STDMETHODCALLTYPE setMediaVolume(
755 /* [in] */ float volume);
757 virtual HRESULT STDMETHODCALLTYPE mediaVolume(
758 /* [out, retval] */ float* volume);
760 virtual HRESULT STDMETHODCALLTYPE registerEmbeddedViewMIMEType(
761 /* [in] */ BSTR mimeType);
763 virtual HRESULT STDMETHODCALLTYPE setMemoryCacheDelegateCallsEnabled(
764 /* [in] */ BOOL enabled);
766 virtual HRESULT STDMETHODCALLTYPE setJavaScriptURLsAreAllowed(
767 /* [in] */ BOOL areAllowed);
769 virtual HRESULT STDMETHODCALLTYPE setCanStartPlugins(
770 /* [in] */ BOOL canStartPlugins);
772 virtual HRESULT STDMETHODCALLTYPE addUserScriptToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
773 unsigned whitelistCount, BSTR* whitelist,
774 unsigned blacklistCount, BSTR* blacklist,
775 WebUserScriptInjectionTime);
776 virtual HRESULT STDMETHODCALLTYPE addUserStyleSheetToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
777 unsigned whitelistCount, BSTR* whitelist,
778 unsigned blacklistCount, BSTR* blacklist);
779 virtual HRESULT STDMETHODCALLTYPE removeUserScriptFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
780 virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
781 virtual HRESULT STDMETHODCALLTYPE removeUserScriptsFromGroup(BSTR groupName, IWebScriptWorld*);
782 virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetsFromGroup(BSTR groupName, IWebScriptWorld*);
783 virtual HRESULT STDMETHODCALLTYPE removeAllUserContentFromGroup(BSTR groupName);
785 virtual HRESULT STDMETHODCALLTYPE setPluginHalterDelegate(IWebPluginHalterDelegate*);
786 virtual HRESULT STDMETHODCALLTYPE pluginHalterDelegate(IWebPluginHalterDelegate**);
788 virtual HRESULT STDMETHODCALLTYPE invalidateBackingStore(const RECT*);
790 virtual HRESULT STDMETHODCALLTYPE addOriginAccessWhitelistEntry(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
791 virtual HRESULT STDMETHODCALLTYPE removeOriginAccessWhitelistEntry(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
792 virtual HRESULT STDMETHODCALLTYPE resetOriginAccessWhitelists();
794 virtual HRESULT STDMETHODCALLTYPE setHistoryDelegate(IWebHistoryDelegate* historyDelegate);
795 virtual HRESULT STDMETHODCALLTYPE historyDelegate(IWebHistoryDelegate** historyDelegate);
796 virtual HRESULT STDMETHODCALLTYPE addVisitedLinks(BSTR* visitedURLs, unsigned visitedURLCount);
798 virtual HRESULT STDMETHODCALLTYPE isNodeHaltedPlugin(IDOMNode*, BOOL*);
799 virtual HRESULT STDMETHODCALLTYPE restartHaltedPluginForNode(IDOMNode*);
800 virtual HRESULT STDMETHODCALLTYPE hasPluginForNodeBeenHalted(IDOMNode*, BOOL*);
802 virtual HRESULT STDMETHODCALLTYPE setGeolocationProvider(IWebGeolocationProvider* locationProvider);
803 virtual HRESULT STDMETHODCALLTYPE geolocationProvider(IWebGeolocationProvider** locationProvider);
804 virtual HRESULT STDMETHODCALLTYPE geolocationDidChangePosition(IWebGeolocationPosition* position);
805 virtual HRESULT STDMETHODCALLTYPE geolocationDidFailWithError(IWebError* error);
807 virtual HRESULT STDMETHODCALLTYPE setDomainRelaxationForbiddenForURLScheme(BOOL forbidden, BSTR scheme);
808 virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsSecure(BSTR);
810 virtual HRESULT STDMETHODCALLTYPE nextDisplayIsSynchronous();
813 bool shouldUseEmbeddedView(const WTF::String& mimeType) const;
815 WebCore::Page* page();
816 bool handleMouseEvent(UINT, WPARAM, LPARAM);
817 void setMouseActivated(bool flag) { m_mouseActivated = flag; }
818 bool handleContextMenuEvent(WPARAM, LPARAM);
819 bool onMeasureItem(WPARAM, LPARAM);
820 bool onDrawItem(WPARAM, LPARAM);
821 bool onInitMenuPopup(WPARAM, LPARAM);
822 bool onUninitMenuPopup(WPARAM, LPARAM);
823 void performContextMenuAction(WPARAM, LPARAM, bool byPosition);
824 bool mouseWheel(WPARAM, LPARAM, bool isMouseHWheel);
825 bool verticalScroll(WPARAM, LPARAM);
826 bool horizontalScroll(WPARAM, LPARAM);
827 bool gesture(WPARAM, LPARAM);
828 bool gestureNotify(WPARAM, LPARAM);
829 bool execCommand(WPARAM wParam, LPARAM lParam);
830 bool keyDown(WPARAM, LPARAM, bool systemKeyDown = false);
831 bool keyUp(WPARAM, LPARAM, bool systemKeyDown = false);
832 bool keyPress(WPARAM, LPARAM, bool systemKeyDown = false);
833 void paint(HDC, LPARAM);
834 void paintIntoWindow(HDC bitmapDC, HDC windowDC, const WebCore::IntRect& dirtyRect);
835 bool ensureBackingStore();
836 void addToDirtyRegion(const WebCore::IntRect&);
837 void addToDirtyRegion(HRGN);
838 void scrollBackingStore(WebCore::FrameView*, int dx, int dy, const WebCore::IntRect& scrollViewRect, const WebCore::IntRect& clipRect);
839 void deleteBackingStore();
840 void repaint(const WebCore::IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false);
841 void frameRect(RECT* rect);
843 void closeWindowSoon();
844 void closeWindowTimerFired();
845 bool didClose() const { return m_didClose; }
847 bool transparent() const { return m_transparent; }
849 bool onIMEStartComposition();
850 bool onIMEComposition(LPARAM);
851 bool onIMEEndComposition();
852 bool onIMEChar(WPARAM, LPARAM);
853 bool onIMENotify(WPARAM, LPARAM, LRESULT*);
854 LRESULT onIMERequest(WPARAM, LPARAM);
855 bool onIMESelect(WPARAM, LPARAM);
856 bool onIMESetContext(WPARAM, LPARAM);
857 void selectionChanged();
858 void resetIME(WebCore::Frame*);
859 void setInputMethodState(bool);
861 HRESULT registerDragDrop();
862 HRESULT revokeDragDrop();
864 // Convenient to be able to violate the rules of COM here for easy movement to the frame.
865 WebFrame* topLevelFrame() const { return m_mainFrame; }
866 const WTF::String& userAgentForKURL(const WebCore::KURL& url);
868 static bool canHandleRequest(const WebCore::ResourceRequest&);
870 static WTF::String standardUserAgentWithApplicationName(const WTF::String&);
872 void setIsBeingDestroyed() { m_isBeingDestroyed = true; }
873 bool isBeingDestroyed() const { return m_isBeingDestroyed; }
875 const char* interpretKeyEvent(const WebCore::KeyboardEvent*);
876 bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);
878 bool isPainting() const { return m_paintCount > 0; }
880 void setToolTip(const WTF::String&);
882 void registerForIconNotification(bool listen);
883 void dispatchDidReceiveIconFromWebFrame(WebFrame*);
885 HRESULT notifyDidAddIcon(IWebNotification*);
886 HRESULT notifyPreferencesChanged(IWebNotification*);
888 static void setCacheModel(WebCacheModel);
889 static WebCacheModel cacheModel();
890 static bool didSetCacheModel();
891 static WebCacheModel maxCacheModelInAnyInstance();
893 void updateActiveStateSoon() const;
894 void deleteBackingStoreSoon();
895 void cancelDeleteBackingStoreSoon();
897 HWND topLevelParent() const { return m_topLevelParent; }
898 HWND viewWindow() const { return m_viewWindow; }
900 void updateActiveState();
902 bool onGetObject(WPARAM, LPARAM, LRESULT&) const;
903 static STDMETHODIMP AccessibleObjectFromWindow(HWND, DWORD objectID, REFIID, void** ppObject);
905 void downloadURL(const WebCore::KURL&);
907 #if USE(ACCELERATED_COMPOSITING)
908 void scheduleCompositingLayerSync();
909 void setRootChildLayer(WebCore::GraphicsLayer*);
912 void enterFullscreenForNode(WebCore::Node*);
913 void exitFullscreen();
915 void setLastCursor(HCURSOR cursor) { m_lastSetCursor = cursor; }
918 void setZoomMultiplier(float multiplier, bool isTextOnly);
919 float zoomMultiplier(bool isTextOnly);
920 bool canZoomIn(bool isTextOnly);
921 HRESULT zoomIn(bool isTextOnly);
922 bool canZoomOut(bool isTextOnly);
923 HRESULT zoomOut(bool isTextOnly);
924 bool canResetZoom(bool isTextOnly);
925 HRESULT resetZoom(bool isTextOnly);
928 void sizeChanged(const WebCore::IntSize&);
930 enum WindowsToPaint { PaintWebViewOnly, PaintWebViewAndChildren };
931 void paintIntoBackingStore(WebCore::FrameView*, HDC bitmapDC, const WebCore::IntRect& dirtyRect, WindowsToPaint);
932 void updateBackingStore(WebCore::FrameView*, HDC = 0, bool backingStoreCompletelyDirty = false, WindowsToPaint = PaintWebViewOnly);
934 WebCore::DragOperation keyStateToDragOperation(DWORD grfKeyState) const;
936 // FIXME: This variable is part of a workaround. The drop effect (pdwEffect) passed to Drop is incorrect.
937 // We set this variable in DragEnter and DragOver so that it can be used in Drop to set the correct drop effect.
938 // Thus, on return from DoDragDrop we have the correct pdwEffect for the drag-and-drop operation.
939 // (see https://bugs.webkit.org/show_bug.cgi?id=29264)
940 DWORD m_lastDropEffect;
942 #if USE(ACCELERATED_COMPOSITING)
943 // GraphicsLayerClient
944 virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time);
945 virtual void notifySyncRequired(const WebCore::GraphicsLayer*);
946 virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect& inClip);
947 virtual bool showDebugBorders() const;
948 virtual bool showRepaintCounter() const;
950 // WKCACFLayerRendererClient
951 virtual bool shouldRender() const;
952 virtual void syncCompositingState();
956 static bool registerWebViewWindowClass();
957 static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
959 HIMC getIMMContext();
960 void releaseIMMContext(HIMC);
961 static bool allowSiteSpecificHacks() { return s_allowSiteSpecificHacks; }
962 void preflightSpellChecker();
963 bool continuousCheckingAllowed();
964 void initializeToolTipWindow();
965 void prepareCandidateWindow(WebCore::Frame*, HIMC);
966 void updateSelectionForIME();
967 LRESULT onIMERequestCharPosition(WebCore::Frame*, IMECHARPOSITION*);
968 LRESULT onIMERequestReconvertString(WebCore::Frame*, RECONVERTSTRING*);
969 bool developerExtrasEnabled() const;
971 bool shouldInitializeTrackPointHack();
973 // AllWebViewSet functions
974 void addToAllWebViewsSet();
975 void removeFromAllWebViewsSet();
977 virtual void windowReceivedMessage(HWND, UINT message, WPARAM, LPARAM);
981 bool m_deletionHasBegun;
985 WebFrame* m_mainFrame;
986 WebCore::Page* m_page;
988 RefPtr<RefCountedHBITMAP> m_backingStoreBitmap;
989 SIZE m_backingStoreSize;
990 RefPtr<RefCountedHRGN> m_backingStoreDirtyRegion;
992 COMPtr<IWebEditingDelegate> m_editingDelegate;
993 COMPtr<IWebFrameLoadDelegate> m_frameLoadDelegate;
994 COMPtr<IWebFrameLoadDelegatePrivate> m_frameLoadDelegatePrivate;
995 COMPtr<IWebUIDelegate> m_uiDelegate;
996 COMPtr<IWebUIDelegatePrivate> m_uiDelegatePrivate;
997 COMPtr<IWebFormDelegate> m_formDelegate;
998 COMPtr<IWebPolicyDelegate> m_policyDelegate;
999 COMPtr<IWebResourceLoadDelegate> m_resourceLoadDelegate;
1000 COMPtr<IWebDownloadDelegate> m_downloadDelegate;
1001 COMPtr<IWebHistoryDelegate> m_historyDelegate;
1002 COMPtr<WebPreferences> m_preferences;
1003 COMPtr<WebInspector> m_webInspector;
1004 COMPtr<IWebPluginHalterDelegate> m_pluginHalterDelegate;
1005 COMPtr<IWebGeolocationProvider> m_geolocationProvider;
1007 bool m_userAgentOverridden;
1008 bool m_useBackForwardList;
1009 WTF::String m_userAgentCustom;
1010 WTF::String m_userAgentStandard;
1011 float m_zoomMultiplier;
1012 bool m_zoomsTextOnly;
1013 WTF::String m_overrideEncoding;
1014 WTF::String m_applicationName;
1015 bool m_mouseActivated;
1016 // WebCore dragging logic needs to be able to inspect the drag data
1017 // this is updated in DragEnter/Leave/Drop
1018 COMPtr<IDataObject> m_dragData;
1019 COMPtr<IDropTargetHelper> m_dropTargetHelper;
1020 UChar m_currentCharacterCode;
1021 bool m_isBeingDestroyed;
1022 unsigned m_paintCount;
1023 bool m_hasSpellCheckerDocumentTag;
1024 bool m_smartInsertDeleteEnabled;
1025 bool m_selectTrailingWhitespaceEnabled;
1027 bool m_hasCustomDropTarget;
1028 unsigned m_inIMEComposition;
1030 WTF::String m_toolTip;
1031 bool m_deleteBackingStoreTimerActive;
1035 static bool s_allowSiteSpecificHacks;
1037 WebCore::SuspendableTimer* m_closeWindowTimer;
1038 OwnPtr<TRACKMOUSEEVENT> m_mouseOutTracker;
1040 HWND m_topLevelParent;
1042 OwnPtr<HashSet<WTF::String> > m_embeddedViewMIMETypes;
1044 //Variables needed to store gesture information
1045 RefPtr<WebCore::Node> m_gestureTargetNode;
1052 OwnPtr<FullscreenVideoController> m_fullscreenController;
1055 #if USE(ACCELERATED_COMPOSITING)
1056 bool isAcceleratedCompositing() const { return m_isAcceleratedCompositing; }
1057 void setAcceleratedCompositing(bool);
1059 OwnPtr<WebCore::WKCACFLayerRenderer> m_layerRenderer;
1060 OwnPtr<WebCore::GraphicsLayer> m_backingLayer;
1061 bool m_isAcceleratedCompositing;
1064 bool m_nextDisplayIsSynchronous;
1066 HCURSOR m_lastSetCursor;