blob: eec24fd516b74f8b19d9df83c2b409646c6b45e3 [file] [log] [blame]
/*
* Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCfLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef WebView_H
#define WebView_H
#include "COMPtr.h"
#include "WebKit.h"
#include "WebFrame.h"
#include "WebPreferences.h"
#include <WebCore/DragActions.h>
#include <WebCore/IntRect.h>
#include <WebCore/RefCountedGDIHandle.h>
#include <WebCore/SuspendableTimer.h>
#include <WebCore/WindowMessageListener.h>
#include <WebCore/WKCACFLayer.h>
#include <WebCore/WKCACFLayerRenderer.h>
#include <wtf/HashSet.h>
#include <wtf/OwnPtr.h>
#include <wtf/RefPtr.h>
class FullscreenVideoController;
class WebBackForwardList;
class WebFrame;
class WebInspector;
class WebInspectorClient;
typedef WebCore::RefCountedGDIHandle<HBITMAP> RefCountedHBITMAP;
typedef WebCore::RefCountedGDIHandle<HRGN> RefCountedHRGN;
WebView* kit(WebCore::Page*);
WebCore::Page* core(IWebView*);
interface IDropTargetHelper;
class WebView
: public IWebView
, public IWebViewPrivate
, public IWebIBActions
, public IWebViewCSS
, public IWebViewEditing
, public IWebViewUndoableEditing
, public IWebViewEditingActions
, public IWebNotificationObserver
, public IDropTarget
, WebCore::WindowMessageListener
#if USE(ACCELERATED_COMPOSITING)
, WebCore::WKCACFLayerRendererClient
#endif
{
public:
static WebView* createInstance();
protected:
WebView();
~WebView();
public:
// IUnknown
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef(void);
virtual ULONG STDMETHODCALLTYPE Release(void);
// IWebView
virtual HRESULT STDMETHODCALLTYPE canShowMIMEType(
/* [in] */ BSTR mimeType,
/* [retval][out] */ BOOL *canShow);
virtual HRESULT STDMETHODCALLTYPE canShowMIMETypeAsHTML(
/* [in] */ BSTR mimeType,
/* [retval][out] */ BOOL *canShow);
virtual HRESULT STDMETHODCALLTYPE MIMETypesShownAsHTML(
/* [retval][out] */ IEnumVARIANT **enumVariant);
virtual HRESULT STDMETHODCALLTYPE setMIMETypesShownAsHTML(
/* [size_is][in] */ BSTR *mimeTypes,
/* [in] */ int cMimeTypes);
virtual HRESULT STDMETHODCALLTYPE URLFromPasteboard(
/* [in] */ IDataObject *pasteboard,
/* [retval][out] */ BSTR *url);
virtual HRESULT STDMETHODCALLTYPE URLTitleFromPasteboard(
/* [in] */ IDataObject *pasteboard,
/* [retval][out] */ BSTR *urlTitle);
virtual HRESULT STDMETHODCALLTYPE initWithFrame(
/* [in] */ RECT frame,
/* [in] */ BSTR frameName,
/* [in] */ BSTR groupName);
virtual HRESULT STDMETHODCALLTYPE setUIDelegate(
/* [in] */ IWebUIDelegate *d);
virtual HRESULT STDMETHODCALLTYPE uiDelegate(
/* [out][retval] */ IWebUIDelegate **d);
virtual HRESULT STDMETHODCALLTYPE setResourceLoadDelegate(
/* [in] */ IWebResourceLoadDelegate *d);
virtual HRESULT STDMETHODCALLTYPE resourceLoadDelegate(
/* [out][retval] */ IWebResourceLoadDelegate **d);
virtual HRESULT STDMETHODCALLTYPE setDownloadDelegate(
/* [in] */ IWebDownloadDelegate *d);
virtual HRESULT STDMETHODCALLTYPE downloadDelegate(
/* [out][retval] */ IWebDownloadDelegate **d);
virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegate(
/* [in] */ IWebFrameLoadDelegate *d);
virtual HRESULT STDMETHODCALLTYPE frameLoadDelegate(
/* [out][retval] */ IWebFrameLoadDelegate **d);
virtual HRESULT STDMETHODCALLTYPE setPolicyDelegate(
/* [in] */ IWebPolicyDelegate *d);
virtual HRESULT STDMETHODCALLTYPE policyDelegate(
/* [out][retval] */ IWebPolicyDelegate **d);
virtual HRESULT STDMETHODCALLTYPE mainFrame(
/* [out][retval] */ IWebFrame **frame);
virtual HRESULT STDMETHODCALLTYPE focusedFrame(
/* [out][retval] */ IWebFrame **frame);
virtual HRESULT STDMETHODCALLTYPE backForwardList(
/* [out][retval] */ IWebBackForwardList **list);
virtual HRESULT STDMETHODCALLTYPE setMaintainsBackForwardList(
/* [in] */ BOOL flag);
virtual HRESULT STDMETHODCALLTYPE goBack(
/* [retval][out] */ BOOL *succeeded);
virtual HRESULT STDMETHODCALLTYPE goForward(
/* [retval][out] */ BOOL *succeeded);
virtual HRESULT STDMETHODCALLTYPE goToBackForwardItem(
/* [in] */ IWebHistoryItem *item,
/* [retval][out] */ BOOL *succeeded);
virtual HRESULT STDMETHODCALLTYPE setTextSizeMultiplier(
/* [in] */ float multiplier);
virtual HRESULT STDMETHODCALLTYPE textSizeMultiplier(
/* [retval][out] */ float *multiplier);
virtual HRESULT STDMETHODCALLTYPE setApplicationNameForUserAgent(
/* [in] */ BSTR applicationName);
virtual HRESULT STDMETHODCALLTYPE applicationNameForUserAgent(
/* [retval][out] */ BSTR *applicationName);
virtual HRESULT STDMETHODCALLTYPE setCustomUserAgent(
/* [in] */ BSTR userAgentString);
virtual HRESULT STDMETHODCALLTYPE customUserAgent(
/* [retval][out] */ BSTR *userAgentString);
virtual HRESULT STDMETHODCALLTYPE userAgentForURL(
/* [in] */ BSTR url,
/* [retval][out] */ BSTR *userAgent);
virtual HRESULT STDMETHODCALLTYPE supportsTextEncoding(
/* [retval][out] */ BOOL *supports);
virtual HRESULT STDMETHODCALLTYPE setCustomTextEncodingName(
/* [in] */ BSTR encodingName);
virtual HRESULT STDMETHODCALLTYPE customTextEncodingName(
/* [retval][out] */ BSTR *encodingName);
virtual HRESULT STDMETHODCALLTYPE setMediaStyle(
/* [in] */ BSTR media);
virtual HRESULT STDMETHODCALLTYPE mediaStyle(
/* [retval][out] */ BSTR *media);
virtual HRESULT STDMETHODCALLTYPE stringByEvaluatingJavaScriptFromString(
/* [in] */ BSTR script,
/* [retval][out] */ BSTR *result);
virtual HRESULT STDMETHODCALLTYPE windowScriptObject(
/* [retval][out] */ IWebScriptObject **webScriptObject);
virtual HRESULT STDMETHODCALLTYPE setPreferences(
/* [in] */ IWebPreferences *prefs);
virtual HRESULT STDMETHODCALLTYPE preferences(
/* [retval][out] */ IWebPreferences **prefs);
virtual HRESULT STDMETHODCALLTYPE setPreferencesIdentifier(
/* [in] */ BSTR anIdentifier);
virtual HRESULT STDMETHODCALLTYPE preferencesIdentifier(
/* [retval][out] */ BSTR *anIdentifier);
virtual HRESULT STDMETHODCALLTYPE setHostWindow(
/* [in] */ OLE_HANDLE window);
virtual HRESULT STDMETHODCALLTYPE hostWindow(
/* [retval][out] */ OLE_HANDLE *window);
virtual HRESULT STDMETHODCALLTYPE searchFor(
/* [in] */ BSTR str,
/* [in] */ BOOL forward,
/* [in] */ BOOL caseFlag,
/* [in] */ BOOL wrapFlag,
/* [retval][out] */ BOOL *found);
virtual HRESULT STDMETHODCALLTYPE registerViewClass(
/* [in] */ IWebDocumentView *view,
/* [in] */ IWebDocumentRepresentation *representation,
/* [in] */ BSTR forMIMEType);
virtual HRESULT STDMETHODCALLTYPE setGroupName(
/* [in] */ BSTR groupName);
virtual HRESULT STDMETHODCALLTYPE groupName(
/* [retval][out] */ BSTR *groupName);
virtual HRESULT STDMETHODCALLTYPE estimatedProgress(
/* [retval][out] */ double *estimatedProgress);
virtual HRESULT STDMETHODCALLTYPE isLoading(
/* [retval][out] */ BOOL *isLoading);
virtual HRESULT STDMETHODCALLTYPE elementAtPoint(
/* [in] */ LPPOINT point,
/* [retval][out] */ IPropertyBag **elementDictionary);
virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForSelection(
/* [retval][out] */ IEnumVARIANT **enumVariant);
virtual HRESULT STDMETHODCALLTYPE writeSelectionWithPasteboardTypes(
/* [size_is][in] */ BSTR *types,
/* [in] */ int cTypes,
/* [in] */ IDataObject *pasteboard);
virtual HRESULT STDMETHODCALLTYPE pasteboardTypesForElement(
/* [in] */ IPropertyBag *elementDictionary,
/* [retval][out] */ IEnumVARIANT **enumVariant);
virtual HRESULT STDMETHODCALLTYPE writeElement(
/* [in] */ IPropertyBag *elementDictionary,
/* [size_is][in] */ BSTR *withPasteboardTypes,
/* [in] */ int cWithPasteboardTypes,
/* [in] */ IDataObject *pasteboard);
virtual HRESULT STDMETHODCALLTYPE selectedText(
/* [out, retval] */ BSTR* str);
virtual HRESULT STDMETHODCALLTYPE centerSelectionInVisibleArea(
/* [in] */ IUnknown* sender);
virtual HRESULT STDMETHODCALLTYPE moveDragCaretToPoint(
/* [in] */ LPPOINT point);
virtual HRESULT STDMETHODCALLTYPE removeDragCaret( void);
virtual HRESULT STDMETHODCALLTYPE setDrawsBackground(
/* [in] */ BOOL drawsBackground);
virtual HRESULT STDMETHODCALLTYPE drawsBackground(
/* [retval][out] */ BOOL *drawsBackground);
virtual HRESULT STDMETHODCALLTYPE setMainFrameURL(
/* [in] */ BSTR urlString);
virtual HRESULT STDMETHODCALLTYPE mainFrameURL(
/* [retval][out] */ BSTR *urlString);
virtual HRESULT STDMETHODCALLTYPE mainFrameDocument(
/* [retval][out] */ IDOMDocument **document);
virtual HRESULT STDMETHODCALLTYPE mainFrameTitle(
/* [retval][out] */ BSTR *title);
virtual HRESULT STDMETHODCALLTYPE mainFrameIcon(
/* [retval][out] */ OLE_HANDLE *hBitmap);
virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsLocal(
/* [in] */ BSTR scheme);
virtual HRESULT STDMETHODCALLTYPE close();
// IWebIBActions
virtual HRESULT STDMETHODCALLTYPE takeStringURLFrom(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE stopLoading(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE reload(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE canGoBack(
/* [in] */ IUnknown *sender,
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE goBack(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE canGoForward(
/* [in] */ IUnknown *sender,
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE goForward(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE canMakeTextLarger(
/* [in] */ IUnknown *sender,
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE makeTextLarger(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE canMakeTextSmaller(
/* [in] */ IUnknown *sender,
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE makeTextSmaller(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE canMakeTextStandardSize(
/* [in] */ IUnknown *sender,
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE makeTextStandardSize(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE toggleContinuousSpellChecking(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE toggleSmartInsertDelete(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE toggleGrammarChecking(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE reloadFromOrigin(
/* [in] */ IUnknown *sender);
// IWebViewCSS
virtual HRESULT STDMETHODCALLTYPE computedStyleForElement(
/* [in] */ IDOMElement *element,
/* [in] */ BSTR pseudoElement,
/* [retval][out] */ IDOMCSSStyleDeclaration **style);
// IWebViewEditing
virtual HRESULT STDMETHODCALLTYPE editableDOMRangeForPoint(
/* [in] */ LPPOINT point,
/* [retval][out] */ IDOMRange **range);
virtual HRESULT STDMETHODCALLTYPE setSelectedDOMRange(
/* [in] */ IDOMRange *range,
/* [in] */ WebSelectionAffinity affinity);
virtual HRESULT STDMETHODCALLTYPE selectedDOMRange(
/* [retval][out] */ IDOMRange **range);
virtual HRESULT STDMETHODCALLTYPE selectionAffinity(
/* [retval][out][retval][out] */ WebSelectionAffinity *affinity);
virtual HRESULT STDMETHODCALLTYPE setEditable(
/* [in] */ BOOL flag);
virtual HRESULT STDMETHODCALLTYPE isEditable(
/* [retval][out] */ BOOL *isEditable);
virtual HRESULT STDMETHODCALLTYPE setTypingStyle(
/* [in] */ IDOMCSSStyleDeclaration *style);
virtual HRESULT STDMETHODCALLTYPE typingStyle(
/* [retval][out] */ IDOMCSSStyleDeclaration **style);
virtual HRESULT STDMETHODCALLTYPE setSmartInsertDeleteEnabled(
/* [in] */ BOOL flag);
virtual HRESULT STDMETHODCALLTYPE smartInsertDeleteEnabled(
/* [in] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE setSelectTrailingWhitespaceEnabled(
/* [in] */ BOOL flag);
virtual HRESULT STDMETHODCALLTYPE isSelectTrailingWhitespaceEnabled(
/* [in] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE setContinuousSpellCheckingEnabled(
/* [in] */ BOOL flag);
virtual HRESULT STDMETHODCALLTYPE isContinuousSpellCheckingEnabled(
/* [retval][out] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE spellCheckerDocumentTag(
/* [retval][out] */ int *tag);
virtual HRESULT STDMETHODCALLTYPE undoManager(
/* [retval][out] */ IWebUndoManager **manager);
virtual HRESULT STDMETHODCALLTYPE setEditingDelegate(
/* [in] */ IWebEditingDelegate *d);
virtual HRESULT STDMETHODCALLTYPE editingDelegate(
/* [retval][out] */ IWebEditingDelegate **d);
virtual HRESULT STDMETHODCALLTYPE styleDeclarationWithText(
/* [in] */ BSTR text,
/* [retval][out] */ IDOMCSSStyleDeclaration **style);
virtual HRESULT STDMETHODCALLTYPE hasSelectedRange(
/* [retval][out] */ BOOL *hasSelectedRange);
virtual HRESULT STDMETHODCALLTYPE cutEnabled(
/* [retval][out] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE copyEnabled(
/* [retval][out] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE pasteEnabled(
/* [retval][out] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE deleteEnabled(
/* [retval][out] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE editingEnabled(
/* [retval][out] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE isGrammarCheckingEnabled(
/* [retval][out] */ BOOL *enabled);
virtual HRESULT STDMETHODCALLTYPE setGrammarCheckingEnabled(
BOOL enabled);
virtual HRESULT STDMETHODCALLTYPE setPageSizeMultiplier(
/* [in] */ float multiplier);
virtual HRESULT STDMETHODCALLTYPE pageSizeMultiplier(
/* [retval][out] */ float *multiplier);
virtual HRESULT STDMETHODCALLTYPE canZoomPageIn(
/* [in] */ IUnknown *sender,
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE zoomPageIn(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE canZoomPageOut(
/* [in] */ IUnknown *sender,
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE zoomPageOut(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE canResetPageZoom(
/* [in] */ IUnknown *sender,
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE resetPageZoom(
/* [in] */ IUnknown *sender);
// IWebViewUndoableEditing
virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithNode(
/* [in] */ IDOMNode *node);
virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithText(
/* [in] */ BSTR text);
virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithMarkupString(
/* [in] */ BSTR markupString);
virtual HRESULT STDMETHODCALLTYPE replaceSelectionWithArchive(
/* [in] */ IWebArchive *archive);
virtual HRESULT STDMETHODCALLTYPE deleteSelection( void);
virtual HRESULT STDMETHODCALLTYPE clearSelection(void);
virtual HRESULT STDMETHODCALLTYPE applyStyle(
/* [in] */ IDOMCSSStyleDeclaration *style);
// IWebViewEditingActions
virtual HRESULT STDMETHODCALLTYPE copy(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE cut(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE paste(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE copyURL(
/* [in] */ BSTR url);
virtual HRESULT STDMETHODCALLTYPE copyFont(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE pasteFont(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE delete_(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE pasteAsPlainText(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE pasteAsRichText(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE changeFont(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE changeAttributes(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE changeDocumentBackgroundColor(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE changeColor(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE alignCenter(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE alignJustified(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE alignLeft(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE alignRight(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE checkSpelling(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE showGuessPanel(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE performFindPanelAction(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE startSpeaking(
/* [in] */ IUnknown *sender);
virtual HRESULT STDMETHODCALLTYPE stopSpeaking(
/* [in] */ IUnknown *sender);
// IWebNotificationObserver
virtual HRESULT STDMETHODCALLTYPE onNotify(
/* [in] */ IWebNotification *notification);
// IWebViewPrivate
virtual HRESULT STDMETHODCALLTYPE MIMETypeForExtension(
/* [in] */ BSTR extension,
/* [retval][out] */ BSTR *mimeType);
virtual HRESULT STDMETHODCALLTYPE setCustomDropTarget(
/* [in] */ IDropTarget* dt);
virtual HRESULT STDMETHODCALLTYPE removeCustomDropTarget();
virtual HRESULT STDMETHODCALLTYPE setInViewSourceMode(
/* [in] */ BOOL flag);
virtual HRESULT STDMETHODCALLTYPE inViewSourceMode(
/* [retval][out] */ BOOL* flag);
virtual HRESULT STDMETHODCALLTYPE viewWindow(
/* [retval][out] */ OLE_HANDLE *window);
virtual HRESULT STDMETHODCALLTYPE setFormDelegate(
/* [in] */ IWebFormDelegate *formDelegate);
virtual HRESULT STDMETHODCALLTYPE formDelegate(
/* [retval][out] */ IWebFormDelegate **formDelegate);
virtual HRESULT STDMETHODCALLTYPE setFrameLoadDelegatePrivate(
/* [in] */ IWebFrameLoadDelegatePrivate *frameLoadDelegatePrivate);
virtual HRESULT STDMETHODCALLTYPE frameLoadDelegatePrivate(
/* [retval][out] */ IWebFrameLoadDelegatePrivate **frameLoadDelegatePrivate);
virtual HRESULT STDMETHODCALLTYPE scrollOffset(
/* [retval][out] */ LPPOINT offset);
virtual HRESULT STDMETHODCALLTYPE scrollBy(
/* [in] */ LPPOINT offset);
virtual HRESULT STDMETHODCALLTYPE visibleContentRect(
/* [retval][out] */ LPRECT rect);
virtual HRESULT STDMETHODCALLTYPE updateFocusedAndActiveState();
virtual HRESULT STDMETHODCALLTYPE executeCoreCommandByName(BSTR name, BSTR value);
virtual HRESULT STDMETHODCALLTYPE clearMainFrameName();
virtual HRESULT STDMETHODCALLTYPE markAllMatchesForText(
BSTR search, BOOL caseSensitive, BOOL highlight, UINT limit, UINT* matches);
virtual HRESULT STDMETHODCALLTYPE unmarkAllTextMatches();
virtual HRESULT STDMETHODCALLTYPE rectsForTextMatches(
IEnumTextMatches** pmatches);
virtual HRESULT STDMETHODCALLTYPE generateSelectionImage(
BOOL forceWhiteText, OLE_HANDLE* hBitmap);
virtual HRESULT STDMETHODCALLTYPE selectionRect(
RECT* rc);
virtual HRESULT STDMETHODCALLTYPE DragEnter(
IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
virtual HRESULT STDMETHODCALLTYPE DragOver(
DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
virtual HRESULT STDMETHODCALLTYPE DragLeave();
virtual HRESULT STDMETHODCALLTYPE Drop(
IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
virtual HRESULT STDMETHODCALLTYPE canHandleRequest(
IWebURLRequest *request,
BOOL *result);
virtual HRESULT STDMETHODCALLTYPE standardUserAgentWithApplicationName(
/* [in] */ BSTR applicationName,
/* [retval][out] */ BSTR *groupName);
virtual HRESULT STDMETHODCALLTYPE clearFocusNode();
virtual HRESULT STDMETHODCALLTYPE setInitialFocus(
/* [in] */ BOOL forward);
virtual HRESULT STDMETHODCALLTYPE setTabKeyCyclesThroughElements(
/* [in] */ BOOL cycles);
virtual HRESULT STDMETHODCALLTYPE tabKeyCyclesThroughElements(
/* [retval][out] */ BOOL *result);
virtual HRESULT STDMETHODCALLTYPE setAllowSiteSpecificHacks(
/* [in] */ BOOL allows);
virtual HRESULT STDMETHODCALLTYPE addAdditionalPluginDirectory(
/* [in] */ BSTR directory);
virtual HRESULT STDMETHODCALLTYPE loadBackForwardListFromOtherView(
/* [in] */ IWebView *otherView);
virtual HRESULT STDMETHODCALLTYPE inspector(
/* [retval][out] */ IWebInspector**);
virtual HRESULT STDMETHODCALLTYPE clearUndoRedoOperations( void);
virtual HRESULT STDMETHODCALLTYPE shouldClose(
/* [retval][out] */ BOOL* result);
virtual HRESULT STDMETHODCALLTYPE setProhibitsMainFrameScrolling(BOOL);
virtual HRESULT STDMETHODCALLTYPE setShouldApplyMacFontAscentHack(BOOL);
virtual HRESULT STDMETHODCALLTYPE windowAncestryDidChange();
virtual HRESULT STDMETHODCALLTYPE paintDocumentRectToContext(
/* [in] */ RECT rect,
/* [in] */ OLE_HANDLE dc);
virtual HRESULT STDMETHODCALLTYPE paintScrollViewRectToContextAtPoint(
/* [in] */ RECT rect,
/* [in] */ POINT pt,
/* [in] */ OLE_HANDLE dc);
virtual HRESULT STDMETHODCALLTYPE reportException(
/* [in] */ JSContextRef context,
/* [in] */ JSValueRef exception);
virtual HRESULT STDMETHODCALLTYPE elementFromJS(
/* [in] */ JSContextRef context,
/* [in] */ JSValueRef nodeObject,
/* [retval][out] */ IDOMElement **element);
virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerTimeDelay(
/* [in] */ double timeDelay);
virtual HRESULT STDMETHODCALLTYPE setCustomHTMLTokenizerChunkSize(
/* [in] */ int chunkSize);
virtual HRESULT STDMETHODCALLTYPE backingStore(
/* [out, retval] */ OLE_HANDLE* hBitmap);
virtual HRESULT STDMETHODCALLTYPE setTransparent(
/* [in] */ BOOL transparent);
virtual HRESULT STDMETHODCALLTYPE transparent(
/* [out, retval] */ BOOL* transparent);
virtual HRESULT STDMETHODCALLTYPE setDefersCallbacks(
/* [in] */ BOOL defersCallbacks);
virtual HRESULT STDMETHODCALLTYPE defersCallbacks(
/* [out, retval] */ BOOL* defersCallbacks);
virtual HRESULT STDMETHODCALLTYPE globalHistoryItem(
/* [out, retval] */ IWebHistoryItem** item);
virtual HRESULT STDMETHODCALLTYPE setAlwaysUsesComplexTextCodePath(
/* [in] */ BOOL complex);
virtual HRESULT STDMETHODCALLTYPE alwaysUsesComplexTextCodePath(
/* [out, retval] */ BOOL* complex);
virtual HRESULT STDMETHODCALLTYPE setCookieEnabled(
/* [in] */ BOOL enable);
virtual HRESULT STDMETHODCALLTYPE cookieEnabled(
/* [out, retval] */ BOOL* enabled);
virtual HRESULT STDMETHODCALLTYPE setMediaVolume(
/* [in] */ float volume);
virtual HRESULT STDMETHODCALLTYPE mediaVolume(
/* [out, retval] */ float* volume);
virtual HRESULT STDMETHODCALLTYPE registerEmbeddedViewMIMEType(
/* [in] */ BSTR mimeType);
virtual HRESULT STDMETHODCALLTYPE setMemoryCacheDelegateCallsEnabled(
/* [in] */ BOOL enabled);
virtual HRESULT STDMETHODCALLTYPE setJavaScriptURLsAreAllowed(
/* [in] */ BOOL areAllowed);
virtual HRESULT STDMETHODCALLTYPE setCanStartPlugins(
/* [in] */ BOOL canStartPlugins);
virtual HRESULT STDMETHODCALLTYPE addUserScriptToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
unsigned whitelistCount, BSTR* whitelist,
unsigned blacklistCount, BSTR* blacklist,
WebUserScriptInjectionTime);
virtual HRESULT STDMETHODCALLTYPE addUserStyleSheetToGroup(BSTR groupName, IWebScriptWorld*, BSTR source, BSTR url,
unsigned whitelistCount, BSTR* whitelist,
unsigned blacklistCount, BSTR* blacklist);
virtual HRESULT STDMETHODCALLTYPE removeUserScriptFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetFromGroup(BSTR groupName, IWebScriptWorld*, BSTR url);
virtual HRESULT STDMETHODCALLTYPE removeUserScriptsFromGroup(BSTR groupName, IWebScriptWorld*);
virtual HRESULT STDMETHODCALLTYPE removeUserStyleSheetsFromGroup(BSTR groupName, IWebScriptWorld*);
virtual HRESULT STDMETHODCALLTYPE removeAllUserContentFromGroup(BSTR groupName);
virtual HRESULT STDMETHODCALLTYPE setPluginHalterDelegate(IWebPluginHalterDelegate*);
virtual HRESULT STDMETHODCALLTYPE pluginHalterDelegate(IWebPluginHalterDelegate**);
virtual HRESULT STDMETHODCALLTYPE invalidateBackingStore(const RECT*);
virtual HRESULT STDMETHODCALLTYPE addOriginAccessWhitelistEntry(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
virtual HRESULT STDMETHODCALLTYPE removeOriginAccessWhitelistEntry(BSTR sourceOrigin, BSTR destinationProtocol, BSTR destinationHost, BOOL allowDestinationSubdomains);
virtual HRESULT STDMETHODCALLTYPE resetOriginAccessWhitelists();
virtual HRESULT STDMETHODCALLTYPE setHistoryDelegate(IWebHistoryDelegate* historyDelegate);
virtual HRESULT STDMETHODCALLTYPE historyDelegate(IWebHistoryDelegate** historyDelegate);
virtual HRESULT STDMETHODCALLTYPE addVisitedLinks(BSTR* visitedURLs, unsigned visitedURLCount);
virtual HRESULT STDMETHODCALLTYPE isNodeHaltedPlugin(IDOMNode*, BOOL*);
virtual HRESULT STDMETHODCALLTYPE restartHaltedPluginForNode(IDOMNode*);
virtual HRESULT STDMETHODCALLTYPE hasPluginForNodeBeenHalted(IDOMNode*, BOOL*);
virtual HRESULT STDMETHODCALLTYPE setGeolocationProvider(IWebGeolocationProvider* locationProvider);
virtual HRESULT STDMETHODCALLTYPE geolocationProvider(IWebGeolocationProvider** locationProvider);
virtual HRESULT STDMETHODCALLTYPE geolocationDidChangePosition(IWebGeolocationPosition* position);
virtual HRESULT STDMETHODCALLTYPE geolocationDidFailWithError(IWebError* error);
virtual HRESULT STDMETHODCALLTYPE setDomainRelaxationForbiddenForURLScheme(BOOL forbidden, BSTR scheme);
virtual HRESULT STDMETHODCALLTYPE registerURLSchemeAsSecure(BSTR);
virtual HRESULT STDMETHODCALLTYPE nextDisplayIsSynchronous();
// WebView
bool shouldUseEmbeddedView(const WTF::String& mimeType) const;
WebCore::Page* page();
bool handleMouseEvent(UINT, WPARAM, LPARAM);
void setMouseActivated(bool flag) { m_mouseActivated = flag; }
bool handleContextMenuEvent(WPARAM, LPARAM);
bool onMeasureItem(WPARAM, LPARAM);
bool onDrawItem(WPARAM, LPARAM);
bool onInitMenuPopup(WPARAM, LPARAM);
bool onUninitMenuPopup(WPARAM, LPARAM);
void performContextMenuAction(WPARAM, LPARAM, bool byPosition);
bool mouseWheel(WPARAM, LPARAM, bool isMouseHWheel);
bool verticalScroll(WPARAM, LPARAM);
bool horizontalScroll(WPARAM, LPARAM);
bool gesture(WPARAM, LPARAM);
bool gestureNotify(WPARAM, LPARAM);
bool execCommand(WPARAM wParam, LPARAM lParam);
bool keyDown(WPARAM, LPARAM, bool systemKeyDown = false);
bool keyUp(WPARAM, LPARAM, bool systemKeyDown = false);
bool keyPress(WPARAM, LPARAM, bool systemKeyDown = false);
void paint(HDC, LPARAM);
void paintIntoWindow(HDC bitmapDC, HDC windowDC, const WebCore::IntRect& dirtyRect);
bool ensureBackingStore();
void addToDirtyRegion(const WebCore::IntRect&);
void addToDirtyRegion(HRGN);
void scrollBackingStore(WebCore::FrameView*, int dx, int dy, const WebCore::IntRect& scrollViewRect, const WebCore::IntRect& clipRect);
void deleteBackingStore();
void repaint(const WebCore::IntRect&, bool contentChanged, bool immediate = false, bool repaintContentOnly = false);
void frameRect(RECT* rect);
void closeWindow();
void closeWindowSoon();
void closeWindowTimerFired();
bool didClose() const { return m_didClose; }
bool transparent() const { return m_transparent; }
bool onIMEStartComposition();
bool onIMEComposition(LPARAM);
bool onIMEEndComposition();
bool onIMEChar(WPARAM, LPARAM);
bool onIMENotify(WPARAM, LPARAM, LRESULT*);
LRESULT onIMERequest(WPARAM, LPARAM);
bool onIMESelect(WPARAM, LPARAM);
bool onIMESetContext(WPARAM, LPARAM);
void selectionChanged();
void resetIME(WebCore::Frame*);
void setInputMethodState(bool);
HRESULT registerDragDrop();
HRESULT revokeDragDrop();
// Convenient to be able to violate the rules of COM here for easy movement to the frame.
WebFrame* topLevelFrame() const { return m_mainFrame; }
const WTF::String& userAgentForKURL(const WebCore::KURL& url);
static bool canHandleRequest(const WebCore::ResourceRequest&);
static WTF::String standardUserAgentWithApplicationName(const WTF::String&);
void setIsBeingDestroyed() { m_isBeingDestroyed = true; }
bool isBeingDestroyed() const { return m_isBeingDestroyed; }
const char* interpretKeyEvent(const WebCore::KeyboardEvent*);
bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);
bool isPainting() const { return m_paintCount > 0; }
void setToolTip(const WTF::String&);
void registerForIconNotification(bool listen);
void dispatchDidReceiveIconFromWebFrame(WebFrame*);
HRESULT notifyDidAddIcon(IWebNotification*);
HRESULT notifyPreferencesChanged(IWebNotification*);
static void setCacheModel(WebCacheModel);
static WebCacheModel cacheModel();
static bool didSetCacheModel();
static WebCacheModel maxCacheModelInAnyInstance();
void updateActiveStateSoon() const;
void deleteBackingStoreSoon();
void cancelDeleteBackingStoreSoon();
HWND topLevelParent() const { return m_topLevelParent; }
HWND viewWindow() const { return m_viewWindow; }
void updateActiveState();
bool onGetObject(WPARAM, LPARAM, LRESULT&) const;
static STDMETHODIMP AccessibleObjectFromWindow(HWND, DWORD objectID, REFIID, void** ppObject);
void downloadURL(const WebCore::KURL&);
#if USE(ACCELERATED_COMPOSITING)
void setRootLayerNeedsDisplay() { if (m_layerRenderer) m_layerRenderer->setNeedsDisplay(); }
void setRootChildLayer(WebCore::WKCACFLayer* layer);
#endif
void enterFullscreenForNode(WebCore::Node*);
void exitFullscreen();
void setLastCursor(HCURSOR cursor) { m_lastSetCursor = cursor; }
private:
void setZoomMultiplier(float multiplier, bool isTextOnly);
float zoomMultiplier(bool isTextOnly);
bool canZoomIn(bool isTextOnly);
HRESULT zoomIn(bool isTextOnly);
bool canZoomOut(bool isTextOnly);
HRESULT zoomOut(bool isTextOnly);
bool canResetZoom(bool isTextOnly);
HRESULT resetZoom(bool isTextOnly);
bool active();
enum WindowsToPaint { PaintWebViewOnly, PaintWebViewAndChildren };
void paintIntoBackingStore(WebCore::FrameView*, HDC bitmapDC, const WebCore::IntRect& dirtyRect, WindowsToPaint);
void updateBackingStore(WebCore::FrameView*, HDC = 0, bool backingStoreCompletelyDirty = false, WindowsToPaint = PaintWebViewOnly);
WebCore::DragOperation keyStateToDragOperation(DWORD grfKeyState) const;
// FIXME: This variable is part of a workaround. The drop effect (pdwEffect) passed to Drop is incorrect.
// We set this variable in DragEnter and DragOver so that it can be used in Drop to set the correct drop effect.
// Thus, on return from DoDragDrop we have the correct pdwEffect for the drag-and-drop operation.
// (see https://bugs.webkit.org/show_bug.cgi?id=29264)
DWORD m_lastDropEffect;
#if USE(ACCELERATED_COMPOSITING)
// WKCACFLayerRendererClient
virtual bool shouldRender() const;
#endif
protected:
static bool registerWebViewWindowClass();
static LRESULT CALLBACK WebViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
HIMC getIMMContext();
void releaseIMMContext(HIMC);
static bool allowSiteSpecificHacks() { return s_allowSiteSpecificHacks; }
void preflightSpellChecker();
bool continuousCheckingAllowed();
void initializeToolTipWindow();
void prepareCandidateWindow(WebCore::Frame*, HIMC);
void updateSelectionForIME();
LRESULT onIMERequestCharPosition(WebCore::Frame*, IMECHARPOSITION*);
LRESULT onIMERequestReconvertString(WebCore::Frame*, RECONVERTSTRING*);
bool developerExtrasEnabled() const;
bool shouldInitializeTrackPointHack();
// AllWebViewSet functions
void addToAllWebViewsSet();
void removeFromAllWebViewsSet();
virtual void windowReceivedMessage(HWND, UINT message, WPARAM, LPARAM);
ULONG m_refCount;
#if !ASSERT_DISABLED
bool m_deletionHasBegun;
#endif
HWND m_hostWindow;
HWND m_viewWindow;
WebFrame* m_mainFrame;
WebCore::Page* m_page;
RefPtr<RefCountedHBITMAP> m_backingStoreBitmap;
SIZE m_backingStoreSize;
RefPtr<RefCountedHRGN> m_backingStoreDirtyRegion;
COMPtr<IWebEditingDelegate> m_editingDelegate;
COMPtr<IWebFrameLoadDelegate> m_frameLoadDelegate;
COMPtr<IWebFrameLoadDelegatePrivate> m_frameLoadDelegatePrivate;
COMPtr<IWebUIDelegate> m_uiDelegate;
COMPtr<IWebUIDelegatePrivate> m_uiDelegatePrivate;
COMPtr<IWebFormDelegate> m_formDelegate;
COMPtr<IWebPolicyDelegate> m_policyDelegate;
COMPtr<IWebResourceLoadDelegate> m_resourceLoadDelegate;
COMPtr<IWebDownloadDelegate> m_downloadDelegate;
COMPtr<IWebHistoryDelegate> m_historyDelegate;
COMPtr<WebPreferences> m_preferences;
COMPtr<WebInspector> m_webInspector;
COMPtr<IWebPluginHalterDelegate> m_pluginHalterDelegate;
COMPtr<IWebGeolocationProvider> m_geolocationProvider;
bool m_userAgentOverridden;
bool m_useBackForwardList;
WTF::String m_userAgentCustom;
WTF::String m_userAgentStandard;
float m_zoomMultiplier;
WTF::String m_overrideEncoding;
WTF::String m_applicationName;
bool m_mouseActivated;
// WebCore dragging logic needs to be able to inspect the drag data
// this is updated in DragEnter/Leave/Drop
COMPtr<IDataObject> m_dragData;
COMPtr<IDropTargetHelper> m_dropTargetHelper;
UChar m_currentCharacterCode;
bool m_isBeingDestroyed;
unsigned m_paintCount;
bool m_hasSpellCheckerDocumentTag;
bool m_smartInsertDeleteEnabled;
bool m_selectTrailingWhitespaceEnabled;
bool m_didClose;
bool m_hasCustomDropTarget;
unsigned m_inIMEComposition;
HWND m_toolTipHwnd;
WTF::String m_toolTip;
bool m_deleteBackingStoreTimerActive;
bool m_transparent;
static bool s_allowSiteSpecificHacks;
WebCore::SuspendableTimer* m_closeWindowTimer;
OwnPtr<TRACKMOUSEEVENT> m_mouseOutTracker;
HWND m_topLevelParent;
OwnPtr<HashSet<WTF::String> > m_embeddedViewMIMETypes;
//Variables needed to store gesture information
RefPtr<WebCore::Node> m_gestureTargetNode;
long m_lastPanX;
long m_lastPanY;
long m_xOverpan;
long m_yOverpan;
#if ENABLE(VIDEO)
OwnPtr<FullscreenVideoController> m_fullscreenController;
#endif
#if USE(ACCELERATED_COMPOSITING)
bool isAcceleratedCompositing() const { return m_isAcceleratedCompositing; }
void setAcceleratedCompositing(bool);
void updateRootLayerContents();
void resizeLayerRenderer() { m_layerRenderer->resize(); }
void layerRendererBecameVisible() { m_layerRenderer->createRenderer(); }
OwnPtr<WebCore::WKCACFLayerRenderer> m_layerRenderer;
bool m_isAcceleratedCompositing;
#endif
bool m_nextDisplayIsSynchronous;
HCURSOR m_lastSetCursor;
};
#endif