diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/WebPageProxy.h')
| -rw-r--r-- | Source/WebKit2/UIProcess/WebPageProxy.h | 1007 |
1 files changed, 1007 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h new file mode 100644 index 000000000..42a18f3e1 --- /dev/null +++ b/Source/WebKit2/UIProcess/WebPageProxy.h @@ -0,0 +1,1007 @@ +/* + * Copyright (C) 2010, 2011 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 INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS 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 WebPageProxy_h +#define WebPageProxy_h + +#include "APIObject.h" +#include "Connection.h" +#include "ContextMenuState.h" +#include "DragControllerAction.h" +#include "DrawingAreaProxy.h" +#include "EditorState.h" +#include "GeolocationPermissionRequestManagerProxy.h" +#if ENABLE(TOUCH_EVENTS) +#include "NativeWebTouchEvent.h" +#endif +#if PLATFORM(QT) +#include "QtNetworkRequestData.h" +#endif +#include "NotificationPermissionRequestManagerProxy.h" +#include "PlatformProcessIdentifier.h" +#include "SandboxExtension.h" +#include "ShareableBitmap.h" +#include "WKBase.h" +#include "WKPagePrivate.h" +#include "WebContextMenuItemData.h" +#include "WebFindClient.h" +#include "WebFormClient.h" +#include "WebFrameProxy.h" +#include "WebHistoryClient.h" +#include "WebHitTestResult.h" +#include "WebLoaderClient.h" +#include "WebPageContextMenuClient.h" +#include "WebPolicyClient.h" +#include "WebPopupMenuProxy.h" +#include "WebResourceLoadClient.h" +#include "WebUIClient.h" +#include <WebCore/DragActions.h> +#include <WebCore/DragSession.h> +#include <WebCore/HitTestResult.h> +#include <WebCore/Page.h> +#include <WebCore/PlatformScreen.h> +#include <WebCore/ScrollTypes.h> +#include <WebCore/TextChecking.h> +#include <wtf/HashMap.h> +#include <wtf/HashSet.h> +#include <wtf/OwnPtr.h> +#include <wtf/PassOwnPtr.h> +#include <wtf/PassRefPtr.h> +#include <wtf/RefPtr.h> +#include <wtf/Vector.h> +#include <wtf/text/WTFString.h> +#if PLATFORM(EFL) +#include <Evas.h> +#endif + +namespace CoreIPC { + class ArgumentDecoder; + class Connection; + class MessageID; +} + +namespace WebCore { + class AuthenticationChallenge; + class Cursor; + class DragData; + class FloatRect; + class IntSize; + class ProtectionSpace; + struct FileChooserSettings; + struct TextCheckingResult; + struct ViewportArguments; + struct WindowFeatures; +} + +#if PLATFORM(QT) +class QQuickNetworkReply; +#endif + +#if PLATFORM(MAC) +#ifdef __OBJC__ +@class WKView; +#else +class WKView; +#endif +#endif + +namespace WebKit { + +class NativeWebKeyboardEvent; +class NativeWebMouseEvent; +class NativeWebWheelEvent; +class PageClient; +class PlatformCertificateInfo; +class StringPairVector; +class WebBackForwardList; +class WebBackForwardListItem; +class WebContextMenuProxy; +class WebData; +class WebEditCommandProxy; +class WebFullScreenManagerProxy; +class WebKeyboardEvent; +class WebMouseEvent; +class WebOpenPanelResultListenerProxy; +class WebPageGroup; +class WebProcessProxy; +class WebURLRequest; +class WebWheelEvent; +struct AttributedString; +struct DictionaryPopupInfo; +struct EditorState; +struct PlatformPopupMenuData; +struct PrintInfo; +struct WebPageCreationParameters; +struct WebPopupItem; + +#if PLATFORM(WIN) +struct WindowGeometry; +#endif + +#if ENABLE(GESTURE_EVENTS) +class WebGestureEvent; +#endif + +typedef GenericCallback<WKStringRef, StringImpl*> StringCallback; +typedef GenericCallback<WKSerializedScriptValueRef, WebSerializedScriptValue*> ScriptValueCallback; + +#if ENABLE(TOUCH_EVENTS) +struct QueuedTouchEvents { + QueuedTouchEvents(const NativeWebTouchEvent& event) + : forwardedEvent(event) + { + } + NativeWebTouchEvent forwardedEvent; + Vector<NativeWebTouchEvent> deferredTouchEvents; +}; +#endif + +// FIXME: Make a version of CallbackBase with three arguments, and define ValidateCommandCallback as a specialization. +class ValidateCommandCallback : public CallbackBase { +public: + typedef void (*CallbackFunction)(WKStringRef, bool, int32_t, WKErrorRef, void*); + + static PassRefPtr<ValidateCommandCallback> create(void* context, CallbackFunction callback) + { + return adoptRef(new ValidateCommandCallback(context, callback)); + } + + virtual ~ValidateCommandCallback() + { + ASSERT(!m_callback); + } + + void performCallbackWithReturnValue(StringImpl* returnValue1, bool returnValue2, int returnValue3) + { + ASSERT(m_callback); + + m_callback(toAPI(returnValue1), returnValue2, returnValue3, 0, context()); + + m_callback = 0; + } + + void invalidate() + { + ASSERT(m_callback); + + RefPtr<WebError> error = WebError::create(); + m_callback(0, 0, 0, toAPI(error.get()), context()); + + m_callback = 0; + } + +private: + + ValidateCommandCallback(void* context, CallbackFunction callback) + : CallbackBase(context) + , m_callback(callback) + { + } + + CallbackFunction m_callback; +}; + +class WebPageProxy : public APIObject, public WebPopupMenuProxy::Client { +public: + static const Type APIType = TypePage; + + static PassRefPtr<WebPageProxy> create(PageClient*, PassRefPtr<WebProcessProxy>, WebPageGroup*, uint64_t pageID); + virtual ~WebPageProxy(); + + uint64_t pageID() const { return m_pageID; } + + WebFrameProxy* mainFrame() const { return m_mainFrame.get(); } + WebFrameProxy* focusedFrame() const { return m_focusedFrame.get(); } + WebFrameProxy* frameSetLargestFrame() const { return m_frameSetLargestFrame.get(); } + + DrawingAreaProxy* drawingArea() const { return m_drawingArea.get(); } + + WebBackForwardList* backForwardList() const { return m_backForwardList.get(); } + +#if ENABLE(INSPECTOR) + WebInspectorProxy* inspector(); +#endif + +#if ENABLE(FULLSCREEN_API) + WebFullScreenManagerProxy* fullScreenManager(); +#endif + + void initializeContextMenuClient(const WKPageContextMenuClient*); + void initializeFindClient(const WKPageFindClient*); + void initializeFormClient(const WKPageFormClient*); + void initializeLoaderClient(const WKPageLoaderClient*); + void initializePolicyClient(const WKPagePolicyClient*); + void initializeResourceLoadClient(const WKPageResourceLoadClient*); + void initializeUIClient(const WKPageUIClient*); + + void initializeWebPage(); + + void close(); + bool tryClose(); + bool isClosed() const { return m_isClosed; } + + void loadURL(const String&); + void loadURLRequest(WebURLRequest*); + void loadHTMLString(const String& htmlString, const String& baseURL); + void loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL); + void loadPlainTextString(const String& string); + + void stopLoading(); + void reload(bool reloadFromOrigin); + + void goForward(); + bool canGoForward() const; + void goBack(); + bool canGoBack() const; + + void goToBackForwardItem(WebBackForwardListItem*); + void tryRestoreScrollPosition(); + void didChangeBackForwardList(WebBackForwardListItem* addedItem, Vector<RefPtr<APIObject> >* removedItems); + void shouldGoToBackForwardListItem(uint64_t itemID, bool& shouldGoToBackForwardListItem); + + String activeURL() const; + String provisionalURL() const; + String committedURL() const; + + bool willHandleHorizontalScrollEvents() const; + + bool canShowMIMEType(const String& mimeType) const; + + bool drawsBackground() const { return m_drawsBackground; } + void setDrawsBackground(bool); + + bool drawsTransparentBackground() const { return m_drawsTransparentBackground; } + void setDrawsTransparentBackground(bool); + + void viewWillStartLiveResize(); + void viewWillEndLiveResize(); + + void setInitialFocus(bool forward, bool isKeyboardEventValid, const WebKeyboardEvent&); + void setWindowResizerSize(const WebCore::IntSize&); + + void clearSelection(); + + void setViewNeedsDisplay(const WebCore::IntRect&); + void displayView(); + void scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset); + + enum { + ViewWindowIsActive = 1 << 0, + ViewIsFocused = 1 << 1, + ViewIsVisible = 1 << 2, + ViewIsInWindow = 1 << 3, + }; + typedef unsigned ViewStateFlags; + void viewStateDidChange(ViewStateFlags flags); + + WebCore::IntSize viewSize() const; + bool isViewVisible() const { return m_isVisible; } + bool isViewWindowActive() const; + + void executeEditCommand(const String& commandName); + void validateCommand(const String& commandName, PassRefPtr<ValidateCommandCallback>); + + const EditorState& editorState() const { return m_editorState; } + bool canDelete() const { return hasSelectedRange() && isContentEditable(); } + bool hasSelectedRange() const { return m_editorState.selectionIsRange; } + bool isContentEditable() const { return m_editorState.isContentEditable; } + + bool maintainsInactiveSelection() const { return m_maintainsInactiveSelection; } + void setMaintainsInactiveSelection(bool); +#if PLATFORM(QT) + void registerApplicationScheme(const String& scheme); + void resolveApplicationSchemeRequest(QtNetworkRequestData); + void sendApplicationSchemeReply(const QQuickNetworkReply*); +#endif + +#if PLATFORM(QT) + void setComposition(const String& text, Vector<WebCore::CompositionUnderline> underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeEnd); + void confirmComposition(const String& compositionString, int64_t selectionStart, int64_t selectionLength); + void cancelComposition(); +#endif +#if PLATFORM(MAC) + void updateWindowIsVisible(bool windowIsVisible); + void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates); + + void setComposition(const String& text, Vector<WebCore::CompositionUnderline> underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeEnd); + void confirmComposition(); + void cancelComposition(); + bool insertText(const String& text, uint64_t replacementRangeStart, uint64_t replacementRangeEnd); + void getMarkedRange(uint64_t& location, uint64_t& length); + void getSelectedRange(uint64_t& location, uint64_t& length); + void getAttributedSubstringFromRange(uint64_t location, uint64_t length, AttributedString&); + uint64_t characterIndexForPoint(const WebCore::IntPoint); + WebCore::IntRect firstRectForCharacterRange(uint64_t, uint64_t); + bool executeKeypressCommands(const Vector<WebCore::KeypressCommand>&); + + void sendComplexTextInputToPlugin(uint64_t pluginComplexTextInputIdentifier, const String& textInput); + CGContextRef containingWindowGraphicsContext(); + bool shouldDelayWindowOrderingForEvent(const WebMouseEvent&); + bool acceptsFirstMouse(int eventNumber, const WebMouseEvent&); + + WKView* wkView() const; +#endif +#if PLATFORM(WIN) + void didChangeCompositionSelection(bool); + void confirmComposition(const String&); + void setComposition(const String&, Vector<WebCore::CompositionUnderline>&, int); + WebCore::IntRect firstRectForCharacterInSelectedRange(int); + String getSelectedText(); + + bool gestureWillBegin(const WebCore::IntPoint&); + void gestureDidScroll(const WebCore::IntSize&); + void gestureDidEnd(); + + void setGestureReachedScrollingLimit(bool); + + HWND nativeWindow() const; +#endif +#if PLATFORM(GTK) + GtkWidget* viewWidget(); +#endif +#if PLATFORM(EFL) + Evas_Object* viewObject(); +#endif +#if USE(TILED_BACKING_STORE) + void setFixedVisibleContentRect(const WebCore::IntRect&); + void setViewportSize(const WebCore::IntSize&); +#endif + + void handleMouseEvent(const NativeWebMouseEvent&); + void handleWheelEvent(const NativeWebWheelEvent&); + void handleKeyboardEvent(const NativeWebKeyboardEvent&); +#if ENABLE(GESTURE_EVENTS) + void handleGestureEvent(const WebGestureEvent&); +#endif +#if ENABLE(TOUCH_EVENTS) + void handleTouchEvent(const NativeWebTouchEvent&); +#endif + + void scrollBy(WebCore::ScrollDirection, WebCore::ScrollGranularity); + void centerSelectionInVisibleArea(); + + String pageTitle() const; + const String& toolTip() const { return m_toolTip; } + + void setUserAgent(const String&); + const String& userAgent() const { return m_userAgent; } + void setApplicationNameForUserAgent(const String&); + const String& applicationNameForUserAgent() const { return m_applicationNameForUserAgent; } + void setCustomUserAgent(const String&); + const String& customUserAgent() const { return m_customUserAgent; } + static String standardUserAgent(const String& applicationName = String()); + + bool supportsTextEncoding() const; + void setCustomTextEncodingName(const String&); + String customTextEncodingName() const { return m_customTextEncodingName; } + + double estimatedProgress() const; + + void terminateProcess(); + + typedef bool (*WebPageProxySessionStateFilterCallback)(WKPageRef, WKStringRef type, WKTypeRef object, void* context); + PassRefPtr<WebData> sessionStateData(WebPageProxySessionStateFilterCallback, void* context) const; + void restoreFromSessionStateData(WebData*); + + bool supportsTextZoom() const; + double textZoomFactor() const { return m_mainFrameHasCustomRepresentation ? 1 : m_textZoomFactor; } + void setTextZoomFactor(double); + double pageZoomFactor() const; + void setPageZoomFactor(double); + void setPageAndTextZoomFactors(double pageZoomFactor, double textZoomFactor); + + void scalePage(double scale, const WebCore::IntPoint& origin); + double pageScaleFactor() const { return m_pageScaleFactor; } + + float deviceScaleFactor() const; + void setIntrinsicDeviceScaleFactor(float); + void setCustomDeviceScaleFactor(float); + void windowScreenDidChange(PlatformDisplayID); + + void setUseFixedLayout(bool); + void setFixedLayoutSize(const WebCore::IntSize&); + bool useFixedLayout() const { return m_useFixedLayout; }; + const WebCore::IntSize& fixedLayoutSize() const { return m_fixedLayoutSize; }; + + bool hasHorizontalScrollbar() const { return m_mainFrameHasHorizontalScrollbar; } + bool hasVerticalScrollbar() const { return m_mainFrameHasVerticalScrollbar; } + + bool isPinnedToLeftSide() const { return m_mainFrameIsPinnedToLeftSide; } + bool isPinnedToRightSide() const { return m_mainFrameIsPinnedToRightSide; } + + void setPaginationMode(WebCore::Page::Pagination::Mode); + WebCore::Page::Pagination::Mode paginationMode() const { return m_paginationMode; } + void setPageLength(double); + double pageLength() const { return m_pageLength; } + void setGapBetweenPages(double); + double gapBetweenPages() const { return m_gapBetweenPages; } + unsigned pageCount() const { return m_pageCount; } + +#if PLATFORM(MAC) + // Called by the web process through a message. + void registerWebProcessAccessibilityToken(const CoreIPC::DataReference&); + // Called by the UI process when it is ready to send its tokens to the web process. + void registerUIProcessAccessibilityTokens(const CoreIPC::DataReference& elemenToken, const CoreIPC::DataReference& windowToken); + bool writeSelectionToPasteboard(const String& pasteboardName, const Vector<String>& pasteboardTypes); + bool readSelectionFromPasteboard(const String& pasteboardName); + void makeFirstResponder(); +#endif + + void pageScaleFactorDidChange(double); + + void setMemoryCacheClientCallsEnabled(bool); + + // Find. + void findString(const String&, FindOptions, unsigned maxMatchCount); + void hideFindUI(); + void countStringMatches(const String&, FindOptions, unsigned maxMatchCount); + void didCountStringMatches(const String&, uint32_t matchCount); + void setFindIndicator(const WebCore::FloatRect& selectionRectInWindowCoordinates, const Vector<WebCore::FloatRect>& textRectsInSelectionRectCoordinates, float contentImageScaleFactor, const ShareableBitmap::Handle& contentImageHandle, bool fadeOut, bool animate); + void didFindString(const String&, uint32_t matchCount); + void didFailToFindString(const String&); +#if PLATFORM(WIN) + void didInstallOrUninstallPageOverlay(bool); +#endif + + void getContentsAsString(PassRefPtr<StringCallback>); + void getMainResourceDataOfFrame(WebFrameProxy*, PassRefPtr<DataCallback>); + void getResourceDataFromFrame(WebFrameProxy*, WebURL*, PassRefPtr<DataCallback>); + void getRenderTreeExternalRepresentation(PassRefPtr<StringCallback>); + void getSelectionOrContentsAsString(PassRefPtr<StringCallback>); + void getSourceForFrame(WebFrameProxy*, PassRefPtr<StringCallback>); + void getWebArchiveOfFrame(WebFrameProxy*, PassRefPtr<DataCallback>); + void runJavaScriptInMainFrame(const String&, PassRefPtr<ScriptValueCallback>); + void forceRepaint(PassRefPtr<VoidCallback>); + + float headerHeight(WebFrameProxy*); + float footerHeight(WebFrameProxy*); + void drawHeader(WebFrameProxy*, const WebCore::FloatRect&); + void drawFooter(WebFrameProxy*, const WebCore::FloatRect&); + +#if PLATFORM(MAC) + // Dictionary. + void performDictionaryLookupAtLocation(const WebCore::FloatPoint&); +#endif + + void receivedPolicyDecision(WebCore::PolicyAction, WebFrameProxy*, uint64_t listenerID); + + void backForwardRemovedItem(uint64_t itemID); + + // Drag and drop support. + void dragEntered(WebCore::DragData*, const String& dragStorageName = String()); + void dragUpdated(WebCore::DragData*, const String& dragStorageName = String()); + void dragExited(WebCore::DragData*, const String& dragStorageName = String()); + void performDrag(WebCore::DragData*, const String& dragStorageName, const SandboxExtension::Handle&); + + void didPerformDragControllerAction(WebCore::DragSession); + void dragEnded(const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, uint64_t operation); +#if PLATFORM(MAC) + void setDragImage(const WebCore::IntPoint& clientPosition, const ShareableBitmap::Handle& dragImageHandle, bool isLinkDrag); +#endif +#if PLATFORM(WIN) + void startDragDrop(const WebCore::IntPoint& imagePoint, const WebCore::IntPoint& dragPoint, uint64_t okEffect, const HashMap<UINT, Vector<String> >& dataMap, uint64_t fileSize, const String& pathname, const SharedMemory::Handle& fileContentHandle, const WebCore::IntSize& dragImageSize, const SharedMemory::Handle& dragImageHandle, bool isLinkDrag); +#endif +#if PLATFORM(QT) || PLATFORM(GTK) + void startDrag(const WebCore::DragData&, const ShareableBitmap::Handle& dragImage); +#endif + void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*); + void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&); + + void processDidBecomeUnresponsive(); + void processDidBecomeResponsive(); + void processDidCrash(); + +#if USE(ACCELERATED_COMPOSITING) + virtual void enterAcceleratedCompositingMode(const LayerTreeContext&); + virtual void exitAcceleratedCompositingMode(); +#endif + + void didDraw(); + + enum UndoOrRedo { Undo, Redo }; + void addEditCommand(WebEditCommandProxy*); + void removeEditCommand(WebEditCommandProxy*); + bool isValidEditCommand(WebEditCommandProxy*); + void registerEditCommand(PassRefPtr<WebEditCommandProxy>, UndoOrRedo); + + WebProcessProxy* process() const; + PlatformProcessIdentifier processIdentifier() const; + + WebPageGroup* pageGroup() const { return m_pageGroup.get(); } + + bool isValid(); + + const String& urlAtProcessExit() const { return m_urlAtProcessExit; } + WebFrameProxy::LoadState loadStateAtProcessExit() const { return m_loadStateAtProcessExit; } + + WebCore::DragSession dragSession() const { return m_currentDragSession; } + void resetDragOperation() { m_currentDragSession = WebCore::DragSession(); } + + void preferencesDidChange(); + + // Called by the WebContextMenuProxy. + void contextMenuItemSelected(const WebContextMenuItemData&); + + // Called by the WebOpenPanelResultListenerProxy. + void didChooseFilesForOpenPanel(const Vector<String>&); + void didCancelForOpenPanel(); + + WebPageCreationParameters creationParameters() const; + +#if PLATFORM(QT) + void findZoomableAreaForPoint(const WebCore::IntPoint&); + void didReceiveMessageFromNavigatorQtObject(const String&); + void handleDownloadRequest(DownloadProxy*); +#endif + + void advanceToNextMisspelling(bool startBeforeSelection) const; + void changeSpellingToWord(const String& word) const; +#if PLATFORM(MAC) + void uppercaseWord(); + void lowercaseWord(); + void capitalizeWord(); + + bool isSmartInsertDeleteEnabled() const { return m_isSmartInsertDeleteEnabled; } + void setSmartInsertDeleteEnabled(bool); +#endif + + void beginPrinting(WebFrameProxy*, const PrintInfo&); + void endPrinting(); + void computePagesForPrinting(WebFrameProxy*, const PrintInfo&, PassRefPtr<ComputedPagesCallback>); +#if PLATFORM(MAC) || PLATFORM(WIN) + void drawRectToPDF(WebFrameProxy*, const PrintInfo&, const WebCore::IntRect&, PassRefPtr<DataCallback>); + void drawPagesToPDF(WebFrameProxy*, const PrintInfo&, uint32_t first, uint32_t count, PassRefPtr<DataCallback>); +#endif + + const String& pendingAPIRequestURL() const { return m_pendingAPIRequestURL; } + + void flashBackingStoreUpdates(const Vector<WebCore::IntRect>& updateRects); + +#if PLATFORM(MAC) + void handleCorrectionPanelResult(const String& result); +#endif + + static void setDebugPaintFlags(WKPageDebugPaintFlags flags) { s_debugPaintFlags = flags; } + static WKPageDebugPaintFlags debugPaintFlags() { return s_debugPaintFlags; } + + // Color to be used with kWKDebugFlashViewUpdates. + static WebCore::Color viewUpdatesFlashColor(); + + // Color to be used with kWKDebugFlashBackingStoreUpdates. + static WebCore::Color backingStoreUpdatesFlashColor(); + + void saveDataToFileInDownloadsFolder(const String& suggestedFilename, const String& mimeType, const String& originatingURLString, WebData*); + + void linkClicked(const String&, const WebMouseEvent&); + + WebCore::IntRect visibleScrollerThumbRect() const { return m_visibleScrollerThumbRect; } + + uint64_t renderTreeSize() const { return m_renderTreeSize; } + + void setShouldSendEventsSynchronously(bool sync) { m_shouldSendEventsSynchronously = sync; }; + + void printMainFrame(); + + // WebPopupMenuProxy::Client + virtual NativeWebMouseEvent* currentlyProcessedMouseDownEvent(); + +private: + WebPageProxy(PageClient*, PassRefPtr<WebProcessProxy>, WebPageGroup*, uint64_t pageID); + + virtual Type type() const { return APIType; } + + // WebPopupMenuProxy::Client + virtual void valueChangedForPopupMenu(WebPopupMenuProxy*, int32_t newSelectedIndex); + virtual void setTextFromItemForPopupMenu(WebPopupMenuProxy*, int32_t index); +#if PLATFORM(GTK) + virtual void failedToShowPopupMenu(); +#endif + + // Implemented in generated WebPageProxyMessageReceiver.cpp + void didReceiveWebPageProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*); + void didReceiveSyncWebPageProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&); + + void didCreateMainFrame(uint64_t frameID); + void didCreateSubframe(uint64_t frameID, uint64_t parentFrameID); + void didSaveFrameToPageCache(uint64_t frameID); + void didRestoreFrameFromPageCache(uint64_t frameID, uint64_t parentFrameID); + + void didStartProvisionalLoadForFrame(uint64_t frameID, const String& url, const String& unreachableURL, CoreIPC::ArgumentDecoder*); + void didReceiveServerRedirectForProvisionalLoadForFrame(uint64_t frameID, const String&, CoreIPC::ArgumentDecoder*); + void didFailProvisionalLoadForFrame(uint64_t frameID, const WebCore::ResourceError&, CoreIPC::ArgumentDecoder*); + void didCommitLoadForFrame(uint64_t frameID, const String& mimeType, bool frameHasCustomRepresentation, const PlatformCertificateInfo&, CoreIPC::ArgumentDecoder*); + void didFinishDocumentLoadForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder*); + void didFinishLoadForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder*); + void didFailLoadForFrame(uint64_t frameID, const WebCore::ResourceError&, CoreIPC::ArgumentDecoder*); + void didSameDocumentNavigationForFrame(uint64_t frameID, uint32_t sameDocumentNavigationType, const String&, CoreIPC::ArgumentDecoder*); + void didReceiveTitleForFrame(uint64_t frameID, const String&, CoreIPC::ArgumentDecoder*); + void didFirstLayoutForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder*); + void didFirstVisuallyNonEmptyLayoutForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder*); + void didRemoveFrameFromHierarchy(uint64_t frameID, CoreIPC::ArgumentDecoder*); + void didDisplayInsecureContentForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder*); + void didRunInsecureContentForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder*); + void didDetectXSSForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder*); + void frameDidBecomeFrameSet(uint64_t frameID, bool); + void didStartProgress(); + void didChangeProgress(double); + void didFinishProgress(); + + void decidePolicyForNavigationAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const WebCore::ResourceRequest&, uint64_t listenerID, CoreIPC::ArgumentDecoder*, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID); + void decidePolicyForNewWindowAction(uint64_t frameID, uint32_t navigationType, uint32_t modifiers, int32_t mouseButton, const WebCore::ResourceRequest&, const String& frameName, uint64_t listenerID, CoreIPC::ArgumentDecoder*); + void decidePolicyForResponse(uint64_t frameID, const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID); + void unableToImplementPolicy(uint64_t frameID, const WebCore::ResourceError&, CoreIPC::ArgumentDecoder* arguments); + + void willSubmitForm(uint64_t frameID, uint64_t sourceFrameID, const StringPairVector& textFieldValues, uint64_t listenerID, CoreIPC::ArgumentDecoder*); + + // Resource load client + void didInitiateLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, const WebCore::ResourceRequest&, bool pageIsProvisionallyLoading); + void didSendRequestForResource(uint64_t frameID, uint64_t resourceIdentifier, const WebCore::ResourceRequest&, const WebCore::ResourceResponse& redirectResponse); + void didReceiveResponseForResource(uint64_t frameID, uint64_t resourceIdentifier, const WebCore::ResourceResponse&); + void didReceiveContentLengthForResource(uint64_t frameID, uint64_t resourceIdentifier, uint64_t contentLength); + void didFinishLoadForResource(uint64_t frameID, uint64_t resourceIdentifier); + void didFailLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, const WebCore::ResourceError&); + + // UI client + void createNewPage(const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, uint32_t modifiers, int32_t mouseButton, uint64_t& newPageID, WebPageCreationParameters&); + void showPage(); + void closePage(bool stopResponsivenessTimer); + void runJavaScriptAlert(uint64_t frameID, const String&); + void runJavaScriptConfirm(uint64_t frameID, const String&, bool& result); + void runJavaScriptPrompt(uint64_t frameID, const String&, const String&, String& result); + void shouldInterruptJavaScript(bool& result); + void setStatusText(const String&); + void mouseDidMoveOverElement(const WebHitTestResult::Data& hitTestResultData, uint32_t modifiers, CoreIPC::ArgumentDecoder*); + void missingPluginButtonClicked(const String& mimeType, const String& url, const String& pluginsPageURL); + void setToolbarsAreVisible(bool toolbarsAreVisible); + void getToolbarsAreVisible(bool& toolbarsAreVisible); + void setMenuBarIsVisible(bool menuBarIsVisible); + void getMenuBarIsVisible(bool& menuBarIsVisible); + void setStatusBarIsVisible(bool statusBarIsVisible); + void getStatusBarIsVisible(bool& statusBarIsVisible); + void setIsResizable(bool isResizable); + void getIsResizable(bool& isResizable); + void setWindowFrame(const WebCore::FloatRect&); + void getWindowFrame(WebCore::FloatRect&); + void screenToWindow(const WebCore::IntPoint& screenPoint, WebCore::IntPoint& windowPoint); + void windowToScreen(const WebCore::IntRect& viewRect, WebCore::IntRect& result); + void runBeforeUnloadConfirmPanel(const String& message, uint64_t frameID, bool& shouldClose); + void didChangeViewportProperties(const WebCore::ViewportArguments&); + void pageDidScroll(); + void runOpenPanel(uint64_t frameID, const WebCore::FileChooserSettings&); + void printFrame(uint64_t frameID); + void exceededDatabaseQuota(uint64_t frameID, const String& originIdentifier, const String& databaseName, const String& displayName, uint64_t currentQuota, uint64_t currentOriginUsage, uint64_t currentDatabaseUsage, uint64_t expectedUsage, uint64_t& newQuota); + void requestGeolocationPermissionForFrame(uint64_t geolocationID, uint64_t frameID, String originIdentifier); + void runModal(); + void notifyScrollerThumbIsVisibleInRect(const WebCore::IntRect&); + void recommendedScrollbarStyleDidChange(int32_t newStyle); + void didChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVerticalScrollbar); + void didChangeScrollOffsetPinningForMainFrame(bool pinnedToLeftSide, bool pinnedToRightSide); + void didChangePageCount(unsigned); + void didFailToInitializePlugin(const String& mimeType); + void numWheelEventHandlersChanged(unsigned count) { m_wheelEventHandlerCount = count; } + + void reattachToWebProcess(); + void reattachToWebProcessWithItem(WebBackForwardListItem*); + + void requestNotificationPermission(uint64_t notificationID, const String& originIdentifier); + void showNotification(const String& title, const String& body, const String& originIdentifier, uint64_t notificationID); + +#if USE(TILED_BACKING_STORE) + void pageDidRequestScroll(const WebCore::IntPoint&); +#endif + +#if PLATFORM(QT) + void didChangeContentsSize(const WebCore::IntSize&); + void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&); + void focusEditableArea(const WebCore::IntRect& caret, const WebCore::IntRect&); +#endif +#if ENABLE(TOUCH_EVENTS) + void needTouchEvents(bool); +#endif + + void editorStateChanged(const EditorState&); + + // Back/Forward list management + void backForwardAddItem(uint64_t itemID); + void backForwardGoToItem(uint64_t itemID); + void backForwardItemAtIndex(int32_t index, uint64_t& itemID); + void backForwardBackListCount(int32_t& count); + void backForwardForwardListCount(int32_t& count); + void backForwardClear(); + + // Undo management + void registerEditCommandForUndo(uint64_t commandID, uint32_t editAction); + void clearAllEditCommands(); + void canUndoRedo(uint32_t action, bool& result); + void executeUndoRedo(uint32_t action, bool& result); + + // Keyboard handling +#if PLATFORM(MAC) + void interpretQueuedKeyEvent(const EditorState&, bool& handled, Vector<WebCore::KeypressCommand>&); + void executeSavedCommandBySelector(const String& selector, bool& handled); +#endif + +#if PLATFORM(GTK) + void getEditorCommandsForKeyEvent(const AtomicString&, Vector<String>&); +#endif +#if PLATFORM(EFL) + void getEditorCommandsForKeyEvent(Vector<String>&); +#endif + + // Popup Menu. + void showPopupMenu(const WebCore::IntRect& rect, uint64_t textDirection, const Vector<WebPopupItem>& items, int32_t selectedIndex, const PlatformPopupMenuData&); + void hidePopupMenu(); +#if PLATFORM(WIN) + void setPopupMenuSelectedIndex(int32_t); +#endif + + // Context Menu. + void showContextMenu(const WebCore::IntPoint& menuLocation, const ContextMenuState&, const Vector<WebContextMenuItemData>&, CoreIPC::ArgumentDecoder*); + void internalShowContextMenu(const WebCore::IntPoint& menuLocation, const ContextMenuState&, const Vector<WebContextMenuItemData>&, CoreIPC::ArgumentDecoder*); + + // Search popup results + void saveRecentSearches(const String&, const Vector<String>&); + void loadRecentSearches(const String&, Vector<String>&); + +#if PLATFORM(MAC) + // Speech. + void getIsSpeaking(bool&); + void speak(const String&); + void stopSpeaking(); + + // Spotlight. + void searchWithSpotlight(const String&); + + // Dictionary. + void didPerformDictionaryLookup(const String&, const DictionaryPopupInfo&); +#endif + + // Spelling and grammar. + int64_t spellDocumentTag(); +#if USE(UNIFIED_TEXT_CHECKING) + void checkTextOfParagraph(const String& text, uint64_t checkingTypes, Vector<WebCore::TextCheckingResult>& results); +#endif + void checkSpellingOfString(const String& text, int32_t& misspellingLocation, int32_t& misspellingLength); + void checkGrammarOfString(const String& text, Vector<WebCore::GrammarDetail>&, int32_t& badGrammarLocation, int32_t& badGrammarLength); + void spellingUIIsShowing(bool&); + void updateSpellingUIWithMisspelledWord(const String& misspelledWord); + void updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const WebCore::GrammarDetail&); + void getGuessesForWord(const String& word, const String& context, Vector<String>& guesses); + void learnWord(const String& word); + void ignoreWord(const String& word); + + void setFocus(bool focused); + void takeFocus(uint32_t direction); + void setToolTip(const String&); + void setCursor(const WebCore::Cursor&); + void setCursorHiddenUntilMouseMoves(bool); + + void didReceiveEvent(uint32_t opaqueType, bool handled); + void stopResponsivenessTimer(); + + void voidCallback(uint64_t); + void dataCallback(const CoreIPC::DataReference&, uint64_t); + void stringCallback(const String&, uint64_t); + void scriptValueCallback(const CoreIPC::DataReference&, uint64_t); + void computedPagesCallback(const Vector<WebCore::IntRect>&, double totalScaleFactorForPrinting, uint64_t); + void validateCommandCallback(const String&, bool, int, uint64_t); + + void focusedFrameChanged(uint64_t frameID); + void frameSetLargestFrameChanged(uint64_t frameID); + + void canAuthenticateAgainstProtectionSpaceInFrame(uint64_t frameID, const WebCore::ProtectionSpace&, bool& canAuthenticate); + void didReceiveAuthenticationChallenge(uint64_t frameID, const WebCore::AuthenticationChallenge&, uint64_t challengeID); + + void didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference&); + +#if PLATFORM(MAC) + void pluginFocusOrWindowFocusChanged(uint64_t pluginComplexTextInputIdentifier, bool pluginHasFocusAndWindowHasFocus); + void setPluginComplexTextInputState(uint64_t pluginComplexTextInputIdentifier, uint64_t complexTextInputState); +#endif + + void clearPendingAPIRequestURL() { m_pendingAPIRequestURL = String(); } + void setPendingAPIRequestURL(const String& pendingAPIRequestURL) { m_pendingAPIRequestURL = pendingAPIRequestURL; } + + bool maybeInitializeSandboxExtensionHandle(const WebCore::KURL&, SandboxExtension::Handle&); + +#if PLATFORM(MAC) + void substitutionsPanelIsShowing(bool&); +#if !defined(BUILDING_ON_SNOW_LEOPARD) + void showCorrectionPanel(int32_t panelType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings); + void dismissCorrectionPanel(int32_t reason); + void dismissCorrectionPanelSoon(int32_t reason, String& result); + void recordAutocorrectionResponse(int32_t responseType, const String& replacedString, const String& replacementString); +#endif // !defined(BUILDING_ON_SNOW_LEOPARD) +#endif // PLATFORM(MAC) + + void clearLoadDependentCallbacks(); + + void performDragControllerAction(DragControllerAction, WebCore::DragData*, const String& dragStorageName, const SandboxExtension::Handle&); + + void updateBackingStoreDiscardableState(); + +#if PLATFORM(WIN) + void scheduleChildWindowGeometryUpdate(const WindowGeometry&); +#endif + + void setRenderTreeSize(uint64_t treeSize) { m_renderTreeSize = treeSize; } + + PageClient* m_pageClient; + WebLoaderClient m_loaderClient; + WebPolicyClient m_policyClient; + WebFormClient m_formClient; + WebResourceLoadClient m_resourceLoadClient; + WebUIClient m_uiClient; + WebFindClient m_findClient; + WebPageContextMenuClient m_contextMenuClient; + + OwnPtr<DrawingAreaProxy> m_drawingArea; + RefPtr<WebProcessProxy> m_process; + RefPtr<WebPageGroup> m_pageGroup; + RefPtr<WebFrameProxy> m_mainFrame; + RefPtr<WebFrameProxy> m_focusedFrame; + RefPtr<WebFrameProxy> m_frameSetLargestFrame; + + String m_userAgent; + String m_applicationNameForUserAgent; + String m_customUserAgent; + String m_customTextEncodingName; + +#if ENABLE(INSPECTOR) + RefPtr<WebInspectorProxy> m_inspector; +#endif + +#if ENABLE(FULLSCREEN_API) + RefPtr<WebFullScreenManagerProxy> m_fullScreenManager; +#endif + + HashMap<uint64_t, RefPtr<VoidCallback> > m_voidCallbacks; + HashMap<uint64_t, RefPtr<DataCallback> > m_dataCallbacks; + HashMap<uint64_t, RefPtr<StringCallback> > m_stringCallbacks; + HashSet<uint64_t> m_loadDependentStringCallbackIDs; + HashMap<uint64_t, RefPtr<ScriptValueCallback> > m_scriptValueCallbacks; + HashMap<uint64_t, RefPtr<ComputedPagesCallback> > m_computedPagesCallbacks; + HashMap<uint64_t, RefPtr<ValidateCommandCallback> > m_validateCommandCallbacks; + + HashSet<WebEditCommandProxy*> m_editCommandSet; + + RefPtr<WebPopupMenuProxy> m_activePopupMenu; + RefPtr<WebContextMenuProxy> m_activeContextMenu; + ContextMenuState m_activeContextMenuState; + RefPtr<WebOpenPanelResultListenerProxy> m_openPanelResultListener; + GeolocationPermissionRequestManagerProxy m_geolocationPermissionRequestManager; + NotificationPermissionRequestManagerProxy m_notificationPermissionRequestManager; + + double m_estimatedProgress; + + // Whether the web page is contained in a top-level window. + bool m_isInWindow; + + // Whether the page is visible; if the backing view is visible and inserted into a window. + bool m_isVisible; + + bool m_canGoBack; + bool m_canGoForward; + RefPtr<WebBackForwardList> m_backForwardList; + + bool m_maintainsInactiveSelection; + + String m_toolTip; + + String m_urlAtProcessExit; + WebFrameProxy::LoadState m_loadStateAtProcessExit; + + EditorState m_editorState; + + double m_textZoomFactor; + double m_pageZoomFactor; + double m_pageScaleFactor; + float m_intrinsicDeviceScaleFactor; + float m_customDeviceScaleFactor; + + bool m_drawsBackground; + bool m_drawsTransparentBackground; + + bool m_areMemoryCacheClientCallsEnabled; + + bool m_useFixedLayout; + WebCore::IntSize m_fixedLayoutSize; + + WebCore::Page::Pagination::Mode m_paginationMode; + double m_pageLength; + double m_gapBetweenPages; + + // If the process backing the web page is alive and kicking. + bool m_isValid; + + // Whether WebPageProxy::close() has been called on this page. + bool m_isClosed; + + bool m_isInPrintingMode; + bool m_isPerformingDOMPrintOperation; + + bool m_inDecidePolicyForResponse; + bool m_syncMimeTypePolicyActionIsValid; + WebCore::PolicyAction m_syncMimeTypePolicyAction; + uint64_t m_syncMimeTypePolicyDownloadID; + + bool m_inDecidePolicyForNavigationAction; + bool m_syncNavigationActionPolicyActionIsValid; + WebCore::PolicyAction m_syncNavigationActionPolicyAction; + uint64_t m_syncNavigationActionPolicyDownloadID; + + Deque<NativeWebKeyboardEvent> m_keyEventQueue; + Deque<NativeWebWheelEvent> m_wheelEventQueue; + Vector<NativeWebWheelEvent> m_currentlyProcessedWheelEvents; + + bool m_processingMouseMoveEvent; + OwnPtr<NativeWebMouseEvent> m_nextMouseMoveEvent; + OwnPtr<NativeWebMouseEvent> m_currentlyProcessedMouseDownEvent; + +#if ENABLE(TOUCH_EVENTS) + bool m_needTouchEvents; + Deque<QueuedTouchEvents> m_touchEventQueue; +#endif + + uint64_t m_pageID; + +#if PLATFORM(MAC) + bool m_isSmartInsertDeleteEnabled; +#endif + + int64_t m_spellDocumentTag; + bool m_hasSpellDocumentTag; + unsigned m_pendingLearnOrIgnoreWordMessageCount; + + bool m_mainFrameHasCustomRepresentation; + WebCore::DragSession m_currentDragSession; + + String m_pendingAPIRequestURL; + + bool m_mainFrameHasHorizontalScrollbar; + bool m_mainFrameHasVerticalScrollbar; + int m_wheelEventHandlerCount; + + bool m_mainFrameIsPinnedToLeftSide; + bool m_mainFrameIsPinnedToRightSide; + + unsigned m_pageCount; + + WebCore::IntRect m_visibleScrollerThumbRect; + + uint64_t m_renderTreeSize; + + static WKPageDebugPaintFlags s_debugPaintFlags; + + bool m_shouldSendEventsSynchronously; + +#if PLATFORM(QT) + WTF::HashSet<RefPtr<QtNetworkRequestData> > m_applicationSchemeRequests; +#endif +}; + +} // namespace WebKit + +#endif // WebPageProxy_h |
