/* * Copyright (C) 2010, 2011, 2013 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 WebPage_h #define WebPage_h #include "APIInjectedBundleFormClient.h" #include "APIInjectedBundlePageContextMenuClient.h" #include "APIInjectedBundlePageUIClient.h" #include "APIObject.h" #include "Download.h" #include "EditingRange.h" #include "FindController.h" #include "GeolocationPermissionRequestManager.h" #include "ImageOptions.h" #include "InjectedBundlePageDiagnosticLoggingClient.h" #include "InjectedBundlePageEditorClient.h" #include "InjectedBundlePageFullScreenClient.h" #include "InjectedBundlePageLoaderClient.h" #include "InjectedBundlePagePolicyClient.h" #include "InjectedBundlePageResourceLoadClient.h" #include "LayerTreeContext.h" #include "MessageReceiver.h" #include "MessageSender.h" #include "Plugin.h" #include "SandboxExtension.h" #include "ShareableBitmap.h" #include "UserData.h" #include "UserMediaPermissionRequestManager.h" #include "WebURLSchemeHandler.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if PLATFORM(QT) #include "ArgumentCodersQt.h" #include "TapHighlightController.h" #endif #if HAVE(ACCESSIBILITY) && (PLATFORM(GTK) || PLATFORM(EFL)) #include "WebPageAccessibilityObject.h" #include #endif #if PLATFORM(GTK) #include "ArgumentCodersGtk.h" #include "WebPrintOperationGtk.h" #endif #if PLATFORM(IOS) #include "GestureTypes.h" #import "WebPageMessages.h" #endif #if ENABLE(IOS_TOUCH_EVENTS) #include #elif ENABLE(TOUCH_EVENTS) #include #endif #if ENABLE(MAC_GESTURE_EVENTS) #include #endif #if ENABLE(CONTEXT_MENUS) #include "InjectedBundlePageContextMenuClient.h" #endif #if PLATFORM(COCOA) #include "ViewGestureGeometryCollector.h" #include OBJC_CLASS CALayer; OBJC_CLASS NSArray; OBJC_CLASS NSDictionary; OBJC_CLASS NSObject; OBJC_CLASS WKAccessibilityWebPageObject; #endif namespace API { class Array; } namespace IPC { class ArgumentDecoder; class Connection; } namespace WebCore { class DocumentLoader; class GraphicsContext; class Frame; class FrameView; class HTMLPlugInElement; class HTMLPlugInImageElement; class IntPoint; class KeyboardEvent; class MediaPlaybackTargetContext; class Page; class PrintContext; class Range; class ResourceResponse; class ResourceRequest; class SharedBuffer; class SubstituteData; class TextCheckingRequest; class URL; class VisibleSelection; struct Highlight; struct KeypressCommand; struct TextCheckingResult; #if ENABLE(VIDEO) && USE(GSTREAMER) class MediaPlayerRequestInstallMissingPluginsCallback; #endif } namespace WebKit { class DrawingArea; class InjectedBundleBackForwardList; class NotificationPermissionRequestManager; class PDFPlugin; class PageBanner; class PluginView; class VisibleContentRectUpdateInfo; class WebColorChooser; class WebContextMenu; class WebContextMenuItemData; class WebDocumentLoader; class WebEvent; class WebFrame; class WebFullScreenManager; class WebImage; class WebInspector; class WebInspectorClient; class WebInspectorUI; class WebGestureEvent; class WebKeyboardEvent; class WebURLSchemeHandlerProxy; class WebMouseEvent; class WebNotificationClient; class WebOpenPanelResultListener; class WebPageGroupProxy; class WebPageOverlay; class WebPopupMenu; class WebUndoStep; class WebUserContentController; class WebVideoFullscreenManager; class WebWheelEvent; struct AssistedNodeInformation; struct AttributedString; struct BackForwardListItemState; struct EditingRange; struct EditorState; struct InteractionInformationAtPosition; struct PrintInfo; struct WebPageCreationParameters; struct WebPreferencesStore; #if PLATFORM(COCOA) class RemoteLayerTreeTransaction; #endif #if ENABLE(QT_GESTURE_EVENTS) class WebGestureEvent; #endif #if ENABLE(TOUCH_EVENTS) class WebTouchEvent; #endif class WebPage : public API::ObjectImpl, public IPC::MessageReceiver, public IPC::MessageSender { public: static Ref create(uint64_t pageID, const WebPageCreationParameters&); virtual ~WebPage(); void reinitializeWebPage(const WebPageCreationParameters&); void close(); static WebPage* fromCorePage(WebCore::Page*); WebCore::Page* corePage() const { return m_page.get(); } uint64_t pageID() const { return m_pageID; } WebCore::SessionID sessionID() const { return m_page->sessionID(); } bool usesEphemeralSession() const { return m_page->usesEphemeralSession(); } void setSessionID(WebCore::SessionID); void setSize(const WebCore::IntSize&); const WebCore::IntSize& size() const { return m_viewSize; } WebCore::IntRect bounds() const { return WebCore::IntRect(WebCore::IntPoint(), size()); } InjectedBundleBackForwardList* backForwardList(); DrawingArea* drawingArea() const { return m_drawingArea.get(); } #if ENABLE(ASYNC_SCROLLING) WebCore::ScrollingCoordinator* scrollingCoordinator() const; #endif WebPageGroupProxy* pageGroup() const { return m_pageGroup.get(); } void scrollMainFrameIfNotAtMaxScrollPosition(const WebCore::IntSize& scrollOffset); bool scrollBy(uint32_t scrollDirection, uint32_t scrollGranularity); void centerSelectionInVisibleArea(); #if PLATFORM(COCOA) void willCommitLayerTree(RemoteLayerTreeTransaction&); void didFlushLayerTreeAtTime(std::chrono::milliseconds); #endif enum class LazyCreationPolicy { UseExistingOnly, CreateIfNeeded }; WebInspector* inspector(LazyCreationPolicy = LazyCreationPolicy::CreateIfNeeded); WebInspectorUI* inspectorUI(); bool isInspectorPage() { return !!m_inspectorUI; } #if PLATFORM(IOS) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)) WebVideoFullscreenManager* videoFullscreenManager(); #endif #if PLATFORM(IOS) void setAllowsMediaDocumentInlinePlayback(bool); bool allowsMediaDocumentInlinePlayback() const { return m_allowsMediaDocumentInlinePlayback; } #endif #if ENABLE(FULLSCREEN_API) WebFullScreenManager* fullScreenManager(); #endif // -- Called by the DrawingArea. // FIXME: We could genericize these into a DrawingArea client interface. Would that be beneficial? void drawRect(WebCore::GraphicsContext&, const WebCore::IntRect&); void layoutIfNeeded(); // -- Called from WebCore clients. bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*); void didStartPageTransition(); void didCompletePageTransition(); void didCommitLoad(WebFrame*); void willReplaceMultipartContent(const WebFrame&); void didReplaceMultipartContent(const WebFrame&); void didFinishLoad(WebFrame*); void show(); String userAgent(const WebCore::URL&) const; String userAgent(WebFrame*, const WebCore::URL&) const; String platformUserAgent(const WebCore::URL&) const; WebCore::KeyboardUIMode keyboardUIMode(); WebUndoStep* webUndoStep(uint64_t); void addWebUndoStep(uint64_t, WebUndoStep*); void removeWebEditCommand(uint64_t); bool isInRedo() const { return m_isInRedo; } void setActivePopupMenu(WebPopupMenu*); #if ENABLE(INPUT_TYPE_COLOR) WebColorChooser* activeColorChooser() const { return m_activeColorChooser; } void setActiveColorChooser(WebColorChooser*); void didChooseColor(const WebCore::Color&); void didEndColorPicker(); #endif WebOpenPanelResultListener* activeOpenPanelResultListener() const { return m_activeOpenPanelResultListener.get(); } void setActiveOpenPanelResultListener(PassRefPtr); void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&) override; void didReceiveSyncMessage(IPC::Connection&, IPC::MessageDecoder&, std::unique_ptr&) override; // -- InjectedBundle methods #if ENABLE(CONTEXT_MENUS) void setInjectedBundleContextMenuClient(std::unique_ptr); #endif void initializeInjectedBundleEditorClient(WKBundlePageEditorClientBase*); void setInjectedBundleFormClient(std::unique_ptr); void initializeInjectedBundleLoaderClient(WKBundlePageLoaderClientBase*); void initializeInjectedBundlePolicyClient(WKBundlePagePolicyClientBase*); void initializeInjectedBundleResourceLoadClient(WKBundlePageResourceLoadClientBase*); void setInjectedBundleUIClient(std::unique_ptr); #if ENABLE(FULLSCREEN_API) void initializeInjectedBundleFullScreenClient(WKBundlePageFullScreenClientBase*); #endif void initializeInjectedBundleDiagnosticLoggingClient(WKBundlePageDiagnosticLoggingClientBase*); #if ENABLE(CONTEXT_MENUS) API::InjectedBundle::PageContextMenuClient& injectedBundleContextMenuClient() { return *m_contextMenuClient.get(); } #endif InjectedBundlePageEditorClient& injectedBundleEditorClient() { return m_editorClient; } API::InjectedBundle::FormClient& injectedBundleFormClient() { return *m_formClient.get(); } InjectedBundlePageLoaderClient& injectedBundleLoaderClient() { return m_loaderClient; } InjectedBundlePagePolicyClient& injectedBundlePolicyClient() { return m_policyClient; } InjectedBundlePageResourceLoadClient& injectedBundleResourceLoadClient() { return m_resourceLoadClient; } API::InjectedBundle::PageUIClient& injectedBundleUIClient() { return *m_uiClient.get(); } InjectedBundlePageDiagnosticLoggingClient& injectedBundleDiagnosticLoggingClient() { return m_logDiagnosticMessageClient; } #if ENABLE(FULLSCREEN_API) InjectedBundlePageFullScreenClient& injectedBundleFullScreenClient() { return m_fullScreenClient; } #endif bool findStringFromInjectedBundle(const String&, FindOptions); WebFrame* mainWebFrame() const { return m_mainFrame.get(); } WebCore::MainFrame* mainFrame() const; // May return 0. WebCore::FrameView* mainFrameView() const; // May return 0. PassRefPtr currentSelectionAsRange(); #if ENABLE(NETSCAPE_PLUGIN_API) PassRefPtr createPlugin(WebFrame*, WebCore::HTMLPlugInElement*, const Plugin::Parameters&, String& newMIMEType); #endif #if ENABLE(WEBGL) WebCore::WebGLLoadPolicy webGLPolicyForURL(WebFrame*, const String&); WebCore::WebGLLoadPolicy resolveWebGLPolicyForURL(WebFrame*, const String&); #endif // ENABLE(WEBGL) enum class IncludePostLayoutDataHint { No, Yes }; EditorState editorState(IncludePostLayoutDataHint = IncludePostLayoutDataHint::Yes) const; void sendPostLayoutEditorStateIfNeeded(); String renderTreeExternalRepresentation() const; String renderTreeExternalRepresentationForPrinting() const; uint64_t renderTreeSize() const; void setTracksRepaints(bool); bool isTrackingRepaints() const; void resetTrackedRepaints(); Ref trackedRepaintRects(); void executeEditingCommand(const String& commandName, const String& argument); bool isEditingCommandEnabled(const String& commandName); void clearMainFrameName(); void sendClose(); void sendSetWindowFrame(const WebCore::FloatRect&); double textZoomFactor() const; void setTextZoomFactor(double); double pageZoomFactor() const; void setPageZoomFactor(double); void setPageAndTextZoomFactors(double pageZoomFactor, double textZoomFactor); void windowScreenDidChange(uint32_t); void scalePage(double scale, const WebCore::IntPoint& origin); void scalePageInViewCoordinates(double scale, WebCore::IntPoint centerInViewCoordinates); double pageScaleFactor() const; double totalScaleFactor() const; double viewScaleFactor() const; void scaleView(double scale); void setUseFixedLayout(bool); bool useFixedLayout() const { return m_useFixedLayout; } void setFixedLayoutSize(const WebCore::IntSize&); WebCore::IntSize fixedLayoutSize() const; void listenForLayoutMilestones(uint32_t /* LayoutMilestones */); void setSuppressScrollbarAnimations(bool); void setEnableVerticalRubberBanding(bool); void setEnableHorizontalRubberBanding(bool); void setBackgroundExtendsBeyondPage(bool); void setPaginationMode(uint32_t /* WebCore::Pagination::Mode */); void setPaginationBehavesLikeColumns(bool); void setPageLength(double); void setGapBetweenPages(double); void setPaginationLineGridEnabled(bool); void postInjectedBundleMessage(const String& messageName, const UserData&); bool drawsBackground() const { return m_drawsBackground; } void setUnderlayColor(const WebCore::Color& color) { m_underlayColor = color; } WebCore::Color underlayColor() const { return m_underlayColor; } void stopLoading(); void stopLoadingFrame(uint64_t frameID); bool defersLoading() const; void setDefersLoading(bool deferLoading); void enterAcceleratedCompositingMode(WebCore::GraphicsLayer*); void exitAcceleratedCompositingMode(); void addPluginView(PluginView*); void removePluginView(PluginView*); bool isVisible() const { return m_viewState & WebCore::ViewState::IsVisible; } bool isVisibleOrOccluded() const { return m_viewState & WebCore::ViewState::IsVisibleOrOccluded; } LayerHostingMode layerHostingMode() const { return m_layerHostingMode; } void setLayerHostingMode(unsigned); #if PLATFORM(COCOA) void updatePluginsActiveAndFocusedState(); const WebCore::FloatRect& windowFrameInScreenCoordinates() const { return m_windowFrameInScreenCoordinates; } const WebCore::FloatRect& windowFrameInUnflippedScreenCoordinates() const { return m_windowFrameInUnflippedScreenCoordinates; } const WebCore::FloatRect& viewFrameInWindowCoordinates() const { return m_viewFrameInWindowCoordinates; } bool hasCachedWindowFrame() const { return m_hasCachedWindowFrame; } #if !PLATFORM(IOS) void setTopOverhangImage(PassRefPtr); void setBottomOverhangImage(PassRefPtr); #endif // !PLATFORM(IOS) void updateHeaderAndFooterLayersForDeviceScaleChange(float scaleFactor); #endif // PLATFORM(COCOA) bool windowIsFocused() const; bool windowAndWebPageAreFocused() const; #if !PLATFORM(IOS) void setHeaderPageBanner(PassRefPtr); PageBanner* headerPageBanner(); void setFooterPageBanner(PassRefPtr); PageBanner* footerPageBanner(); void hidePageBanners(); void showPageBanners(); #endif // !PLATFORM(IOS) WebCore::IntPoint screenToRootView(const WebCore::IntPoint&); WebCore::IntRect rootViewToScreen(const WebCore::IntRect&); #if PLATFORM(IOS) WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&); WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&); #endif PassRefPtr scaledSnapshotWithOptions(const WebCore::IntRect&, double additionalScaleFactor, SnapshotOptions); PassRefPtr snapshotAtSize(const WebCore::IntRect&, const WebCore::IntSize& bitmapSize, SnapshotOptions); PassRefPtr snapshotNode(WebCore::Node&, SnapshotOptions, unsigned maximumPixelCount = std::numeric_limits::max()); static const WebEvent* currentEvent(); FindController& findController() { return m_findController; } #if ENABLE(TOUCH_EVENTS) && PLATFORM(QT) TapHighlightController& tapHighlightController() { return m_tapHighlightController; } #endif #if ENABLE(GEOLOCATION) GeolocationPermissionRequestManager& geolocationPermissionRequestManager() { return m_geolocationPermissionRequestManager; } #endif #if PLATFORM(IOS) || PLATFORM(EFL) void savePageState(WebCore::HistoryItem&); void restorePageState(const WebCore::HistoryItem&); #endif #if ENABLE(MEDIA_STREAM) UserMediaPermissionRequestManager& userMediaPermissionRequestManager() { return m_userMediaPermissionRequestManager; } #endif #if PLATFORM(IOS) WebCore::FloatSize screenSize() const; WebCore::FloatSize availableScreenSize() const; int32_t deviceOrientation() const { return m_deviceOrientation; } void viewportPropertiesDidChange(const WebCore::ViewportArguments&); void didReceiveMobileDocType(bool); void setUseTestingViewportConfiguration(bool useTestingViewport) { m_useTestingViewportConfiguration = useTestingViewport; } bool isUsingTestingViewportConfiguration() const { return m_useTestingViewportConfiguration; } double minimumPageScaleFactor() const; double maximumPageScaleFactor() const; bool allowsUserScaling() const; bool hasStablePageScaleFactor() const { return m_hasStablePageScaleFactor; } void handleTap(const WebCore::IntPoint&, uint64_t lastLayerTreeTransactionId); void potentialTapAtPosition(uint64_t requestID, const WebCore::FloatPoint&); void commitPotentialTap(uint64_t lastLayerTreeTransactionId); void commitPotentialTapFailed(); void cancelPotentialTap(); void cancelPotentialTapInFrame(WebFrame&); void tapHighlightAtPosition(uint64_t requestID, const WebCore::FloatPoint&); void inspectorNodeSearchMovedToPosition(const WebCore::FloatPoint&); void inspectorNodeSearchEndedAtPosition(const WebCore::FloatPoint&); void blurAssistedNode(); void selectWithGesture(const WebCore::IntPoint&, uint32_t granularity, uint32_t gestureType, uint32_t gestureState, bool isInteractingWithAssistedNode, uint64_t callbackID); void updateSelectionWithTouches(const WebCore::IntPoint& point, uint32_t touches, bool baseIsStart, uint64_t callbackID); void updateBlockSelectionWithTouch(const WebCore::IntPoint&, uint32_t touch, uint32_t handlePosition); void selectWithTwoTouches(const WebCore::IntPoint& from, const WebCore::IntPoint& to, uint32_t gestureType, uint32_t gestureState, uint64_t callbackID); void extendSelection(uint32_t granularity); void selectWordBackward(); void moveSelectionByOffset(int32_t offset, uint64_t callbackID); void selectTextWithGranularityAtPoint(const WebCore::IntPoint&, uint32_t granularity, bool isInteractingWithAssistedNode, uint64_t callbackID); void selectPositionAtBoundaryWithDirection(const WebCore::IntPoint&, uint32_t granularity, uint32_t direction, bool isInteractingWithAssistedNode, uint64_t callbackID); void moveSelectionAtBoundaryWithDirection(uint32_t granularity, uint32_t direction, uint64_t callbackID); void selectPositionAtPoint(const WebCore::IntPoint&, bool isInteractingWithAssistedNode, uint64_t callbackID); void beginSelectionInDirection(uint32_t direction, uint64_t callbackID); void updateSelectionWithExtentPoint(const WebCore::IntPoint&, bool isInteractingWithAssistedNode, uint64_t callbackID); void updateSelectionWithExtentPointAndBoundary(const WebCore::IntPoint&, uint32_t granularity, bool isInteractingWithAssistedNode, uint64_t callbackID); void elementDidFocus(WebCore::Node*); void elementDidBlur(WebCore::Node*); void requestDictationContext(uint64_t callbackID); void replaceDictatedText(const String& oldText, const String& newText); void replaceSelectedText(const String& oldText, const String& newText); void requestAutocorrectionData(const String& textForAutocorrection, uint64_t callbackID); void applyAutocorrection(const String& correction, const String& originalText, uint64_t callbackID); void syncApplyAutocorrection(const String& correction, const String& originalText, bool& correctionApplied); void requestAutocorrectionContext(uint64_t callbackID); void getAutocorrectionContext(String& beforeText, String& markedText, String& selectedText, String& afterText, uint64_t& location, uint64_t& length); void getPositionInformation(const WebCore::IntPoint&, InteractionInformationAtPosition&); void requestPositionInformation(const WebCore::IntPoint&); void startInteractionWithElementAtPosition(const WebCore::IntPoint&); void stopInteraction(); void performActionOnElement(uint32_t action); void focusNextAssistedNode(bool isForward, uint64_t callbackID); void setAssistedNodeValue(const String&); void setAssistedNodeValueAsNumber(double); void setAssistedNodeSelectedIndex(uint32_t index, bool allowMultipleSelection); void resetAssistedNodeForFrame(WebFrame*); WebCore::IntRect rectForElementAtInteractionLocation(); void updateSelectionAppearance(); void getLookupContextAtPoint(const WebCore::IntPoint, uint64_t callbackID); #if ENABLE(IOS_TOUCH_EVENTS) void dispatchAsynchronousTouchEvents(const Vector& queue); #endif void contentSizeCategoryDidChange(const String&); void executeEditCommandWithCallback(const String&, uint64_t callbackID); std::chrono::milliseconds eventThrottlingDelay() const; void showInspectorHighlight(const WebCore::Highlight&); void hideInspectorHighlight(); void showInspectorIndication(); void hideInspectorIndication(); void enableInspectorNodeSearch(); void disableInspectorNodeSearch(); #endif void setLayerTreeStateIsFrozen(bool); bool markLayersVolatileImmediatelyIfPossible(); NotificationPermissionRequestManager* notificationPermissionRequestManager(); void pageDidScroll(); #if USE(COORDINATED_GRAPHICS) void pageDidRequestScroll(const WebCore::IntPoint&); void setFixedVisibleContentRect(const WebCore::IntRect&); void sendViewportAttributesChanged(); #endif #if USE(COORDINATED_GRAPHICS_MULTIPROCESS) void commitPageTransitionViewport(); #endif #if ENABLE(CONTEXT_MENUS) WebContextMenu* contextMenu(); WebContextMenu* contextMenuAtPointInWindow(const WebCore::IntPoint&); #endif bool hasLocalDataForURL(const WebCore::URL&); String cachedResponseMIMETypeForURL(const WebCore::URL&); String cachedSuggestedFilenameForURL(const WebCore::URL&); PassRefPtr cachedResponseDataForURL(const WebCore::URL&); static bool canHandleRequest(const WebCore::ResourceRequest&); class SandboxExtensionTracker { public: ~SandboxExtensionTracker(); void invalidate(); void beginLoad(WebFrame*, const SandboxExtension::Handle& handle); void willPerformLoadDragDestinationAction(PassRefPtr pendingDropSandboxExtension); void didStartProvisionalLoad(WebFrame*); void didCommitProvisionalLoad(WebFrame*); void didFailProvisionalLoad(WebFrame*); private: void setPendingProvisionalSandboxExtension(PassRefPtr); RefPtr m_pendingProvisionalSandboxExtension; RefPtr m_provisionalSandboxExtension; RefPtr m_committedSandboxExtension; }; SandboxExtensionTracker& sandboxExtensionTracker() { return m_sandboxExtensionTracker; } #if PLATFORM(EFL) void setThemePath(const String&); #endif #if PLATFORM(QT) || PLATFORM(GTK) void setComposition(const String& text, const Vector& underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeLength); void confirmComposition(const String& text, int64_t selectionStart, int64_t selectionLength); void cancelComposition(); #endif #if PLATFORM (GTK) && HAVE(GTK_GESTURES) void getCenterForZoomGesture(const WebCore::IntPoint& centerInViewCoordinates, WebCore::IntPoint& result); #endif void didApplyStyle(); void didChangeSelection(); void discardedComposition(); #if PLATFORM(COCOA) void registerUIProcessAccessibilityTokens(const IPC::DataReference& elemenToken, const IPC::DataReference& windowToken); WKAccessibilityWebPageObject* accessibilityRemoteObject(); NSObject *accessibilityObjectForMainFramePlugin(); const WebCore::FloatPoint& accessibilityPosition() const { return m_accessibilityPosition; } void sendComplexTextInputToPlugin(uint64_t pluginComplexTextInputIdentifier, const String& textInput); void insertTextAsync(const String& text, const EditingRange& replacementRange, bool registerUndoGroup = false, uint32_t editingRangeIsRelativeTo = (uint32_t)EditingRangeIsRelativeTo::EditableRoot); void getMarkedRangeAsync(uint64_t callbackID); void getSelectedRangeAsync(uint64_t callbackID); void characterIndexForPointAsync(const WebCore::IntPoint&, uint64_t callbackID); void firstRectForCharacterRangeAsync(const EditingRange&, uint64_t callbackID); void setCompositionAsync(const String& text, Vector underlines, const EditingRange& selectionRange, const EditingRange& replacementRange); void confirmCompositionAsync(); #if PLATFORM(MAC) void insertDictatedTextAsync(const String& text, const EditingRange& replacementRange, const Vector& dictationAlternativeLocations, bool registerUndoGroup = false); void attributedSubstringForCharacterRangeAsync(const EditingRange&, uint64_t callbackID); void fontAtSelection(uint64_t callbackID); #endif void readSelectionFromPasteboard(const WTF::String& pasteboardName, bool& result); void getStringSelectionForPasteboard(WTF::String& stringValue); void getDataSelectionForPasteboard(const WTF::String pasteboardType, SharedMemory::Handle& handle, uint64_t& size); void shouldDelayWindowOrderingEvent(const WebKit::WebMouseEvent&, bool& result); void acceptsFirstMouse(int eventNumber, const WebKit::WebMouseEvent&, bool& result); bool performNonEditingBehaviorForSelector(const String&, WebCore::KeyboardEvent*); #if ENABLE(SERVICE_CONTROLS) void replaceSelectionWithPasteboardData(const Vector& types, const IPC::DataReference&); #endif #elif PLATFORM(EFL) void confirmComposition(const String& compositionString); void setComposition(const WTF::String& compositionString, const WTF::Vector& underlines, uint64_t cursorPosition); void cancelComposition(); #endif #if HAVE(ACCESSIBILITY) && (PLATFORM(GTK) || PLATFORM(EFL)) void updateAccessibilityTree(); #endif void setCompositionForTesting(const String& compositionString, uint64_t from, uint64_t length); bool hasCompositionForTesting(); void confirmCompositionForTesting(const String& compositionString); // FIXME: This a dummy message, to avoid breaking the build for platforms that don't require // any synchronous messages, and should be removed when is fixed. void dummy(bool&); #if PLATFORM(COCOA) bool isSpeaking(); void speak(const String&); void stopSpeaking(); void performDictionaryLookupForSelection(WebCore::Frame*, const WebCore::VisibleSelection&, WebCore::TextIndicatorPresentationTransition); #endif bool isSmartInsertDeleteEnabled(); void setSmartInsertDeleteEnabled(bool); bool isSelectTrailingWhitespaceEnabled(); void setSelectTrailingWhitespaceEnabled(bool); void replaceSelectionWithText(WebCore::Frame*, const String&); void clearSelection(); void restoreSelectionInFocusedEditableElement(); #if ENABLE(DRAG_SUPPORT) #if PLATFORM(QT) || PLATFORM(GTK) void performDragControllerAction(uint64_t action, WebCore::DragData); #else void performDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, const WTF::String& dragStorageName, uint32_t flags, const SandboxExtension::Handle&, const SandboxExtension::HandleArray&); #endif void dragEnded(WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t operation); void willPerformLoadDragDestinationAction(); void mayPerformUploadDragDestinationAction(); void willStartDrag() { ASSERT(!m_isStartingDrag); m_isStartingDrag = true; } void didStartDrag() { ASSERT(m_isStartingDrag); m_isStartingDrag = false; } #endif // ENABLE(DRAG_SUPPORT) void beginPrinting(uint64_t frameID, const PrintInfo&); void endPrinting(); void computePagesForPrinting(uint64_t frameID, const PrintInfo&, uint64_t callbackID); void computePagesForPrintingImpl(uint64_t frameID, const PrintInfo&, Vector& pageRects, double& totalScaleFactor); #if PLATFORM(COCOA) void drawRectToImage(uint64_t frameID, const PrintInfo&, const WebCore::IntRect&, const WebCore::IntSize&, uint64_t callbackID); void drawPagesToPDF(uint64_t frameID, const PrintInfo&, uint32_t first, uint32_t count, uint64_t callbackID); void drawPagesToPDFImpl(uint64_t frameID, const PrintInfo&, uint32_t first, uint32_t count, RetainPtr& pdfPageData); #if PLATFORM(IOS) void computePagesForPrintingAndStartDrawingToPDF(uint64_t frameID, const PrintInfo&, uint32_t firstPage, PassRefPtr); #endif #elif PLATFORM(GTK) void drawPagesForPrinting(uint64_t frameID, const PrintInfo&, uint64_t callbackID); void didFinishPrintOperation(const WebCore::ResourceError&, uint64_t callbackID); #endif void addResourceRequest(unsigned long, const WebCore::ResourceRequest&); void removeResourceRequest(unsigned long); void setMediaVolume(float); void setMuted(bool); void setMayStartMediaWhenInWindow(bool); #if ENABLE(MEDIA_SESSION) void handleMediaEvent(uint32_t /* WebCore::MediaEventType */); void setVolumeOfMediaElement(double, uint64_t); #endif void updateMainFrameScrollOffsetPinning(); bool mainFrameHasCustomContentProvider() const; void addMIMETypeWithCustomContentProvider(const String&); void mainFrameDidLayout(); bool canRunBeforeUnloadConfirmPanel() const { return m_canRunBeforeUnloadConfirmPanel; } void setCanRunBeforeUnloadConfirmPanel(bool canRunBeforeUnloadConfirmPanel) { m_canRunBeforeUnloadConfirmPanel = canRunBeforeUnloadConfirmPanel; } bool canRunModal() const { return m_canRunModal; } void setCanRunModal(bool canRunModal) { m_canRunModal = canRunModal; } void runModal(); void setDeviceScaleFactor(float); float deviceScaleFactor() const; void forceRepaintWithoutCallback(); void unmarkAllMisspellings(); void unmarkAllBadGrammar(); #if PLATFORM(COCOA) void handleAlternativeTextUIResult(const String&); #endif // For testing purpose. void simulateMouseDown(int button, WebCore::IntPoint, int clickCount, WKEventModifiers, double time); void simulateMouseUp(int button, WebCore::IntPoint, int clickCount, WKEventModifiers, double time); void simulateMouseMotion(WebCore::IntPoint, double time); #if ENABLE(CONTEXT_MENUS) void contextMenuShowing() { m_isShowingContextMenu = true; } #endif #if PLATFORM(QT) void setUserScripts(const Vector&); #endif void wheelEvent(const WebWheelEvent&); void wheelEventHandlersChanged(bool); void recomputeShortCircuitHorizontalWheelEventsState(); #if ENABLE(MAC_GESTURE_EVENTS) || ENABLE(QT_GESTURE_EVENTS) void gestureEvent(const WebGestureEvent&); #endif void updateVisibilityState(bool isInitialState = false); #if PLATFORM(IOS) void setViewportConfigurationMinimumLayoutSize(const WebCore::FloatSize&); void setMaximumUnobscuredSize(const WebCore::FloatSize&); void setDeviceOrientation(int32_t); void dynamicViewportSizeUpdate(const WebCore::FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, double scale, int32_t deviceOrientation, uint64_t dynamicViewportSizeUpdateID); void synchronizeDynamicViewportUpdate(double& newTargetScale, WebCore::FloatPoint& newScrollPosition, uint64_t& nextValidLayerTreeTransactionID); void updateVisibleContentRects(const VisibleContentRectUpdateInfo&, double oldestTimestamp); bool scaleWasSetByUIProcess() const { return m_scaleWasSetByUIProcess; } void willStartUserTriggeredZooming(); void applicationWillResignActive(); void applicationDidEnterBackground(bool isSuspendedUnderLock); void applicationWillEnterForeground(bool isSuspendedUnderLock); void applicationDidBecomeActive(); void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale); void completePendingSyntheticClickForContentChangeObserver(); #endif #if ENABLE(IOS_TOUCH_EVENTS) void dispatchTouchEvent(const WebTouchEvent&, bool& handled); #endif #if PLATFORM(GTK) && USE(TEXTURE_MAPPER_GL) uint64_t nativeWindowHandle() { return m_nativeWindowHandle; } #endif bool shouldUseCustomContentProviderForResponse(const WebCore::ResourceResponse&); bool canPluginHandleResponse(const WebCore::ResourceResponse& response); bool asynchronousPluginInitializationEnabled() const { return m_asynchronousPluginInitializationEnabled; } void setAsynchronousPluginInitializationEnabled(bool enabled) { m_asynchronousPluginInitializationEnabled = enabled; } bool asynchronousPluginInitializationEnabledForAllPlugins() const { return m_asynchronousPluginInitializationEnabledForAllPlugins; } void setAsynchronousPluginInitializationEnabledForAllPlugins(bool enabled) { m_asynchronousPluginInitializationEnabledForAllPlugins = enabled; } bool artificialPluginInitializationDelayEnabled() const { return m_artificialPluginInitializationDelayEnabled; } void setArtificialPluginInitializationDelayEnabled(bool enabled) { m_artificialPluginInitializationDelayEnabled = enabled; } void setTabToLinksEnabled(bool enabled) { m_tabToLinks = enabled; } bool tabToLinksEnabled() const { return m_tabToLinks; } bool scrollingPerformanceLoggingEnabled() const { return m_scrollingPerformanceLoggingEnabled; } void setScrollingPerformanceLoggingEnabled(bool); #if PLATFORM(COCOA) bool shouldUsePDFPlugin() const; bool pdfPluginEnabled() const { return m_pdfPluginEnabled; } void setPDFPluginEnabled(bool enabled) { m_pdfPluginEnabled = enabled; } #endif void savePDFToFileInDownloadsFolder(const String& suggestedFilename, const String& originatingURLString, const uint8_t* data, unsigned long size); #if PLATFORM(COCOA) void savePDFToTemporaryFolderAndOpenWithNativeApplication(const String& suggestedFilename, const String& originatingURLString, const uint8_t* data, unsigned long size, const String& pdfUUID); #endif bool mainFrameIsScrollable() const { return m_mainFrameIsScrollable; } void setMinimumLayoutSize(const WebCore::IntSize&); WebCore::IntSize minimumLayoutSize() const { return m_minimumLayoutSize; } void setAutoSizingShouldExpandToViewHeight(bool shouldExpand); bool autoSizingShouldExpandToViewHeight() { return m_autoSizingShouldExpandToViewHeight; } bool canShowMIMEType(const String& MIMEType) const; void addTextCheckingRequest(uint64_t requestID, PassRefPtr); void didFinishCheckingText(uint64_t requestID, const Vector&); void didCancelCheckingText(uint64_t requestID); #if ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC) void determinePrimarySnapshottedPlugIn(); void determinePrimarySnapshottedPlugInTimerFired(); void resetPrimarySnapshottedPlugIn(); bool matchesPrimaryPlugIn(const String& pageOrigin, const String& pluginOrigin, const String& mimeType) const; bool plugInIntersectsSearchRect(WebCore::HTMLPlugInImageElement& pluginImageElement); bool plugInIsPrimarySize(WebCore::HTMLPlugInImageElement& pluginImageElement, unsigned &pluginArea); #endif #if ENABLE(DATA_DETECTION) void setDataDetectionResults(NSArray *); #endif unsigned extendIncrementalRenderingSuppression(); void stopExtendingIncrementalRenderingSuppression(unsigned token); bool shouldExtendIncrementalRenderingSuppression() { return !m_activeRenderingSuppressionTokens.isEmpty(); } WebCore::ScrollPinningBehavior scrollPinningBehavior() { return m_scrollPinningBehavior; } void setScrollPinningBehavior(uint32_t /* WebCore::ScrollPinningBehavior */ pinning); WTF::Optional scrollbarOverlayStyle() { return m_scrollbarOverlayStyle; } void setScrollbarOverlayStyle(WTF::Optional scrollbarStyle); Ref createDocumentLoader(WebCore::Frame&, const WebCore::ResourceRequest&, const WebCore::SubstituteData&); void updateCachedDocumentLoader(WebDocumentLoader&, WebCore::Frame&); void getBytecodeProfile(uint64_t callbackID); #if ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION) void handleTelephoneNumberClick(const String& number, const WebCore::IntPoint&); void handleSelectionServiceClick(WebCore::FrameSelection&, const Vector& telephoneNumbers, const WebCore::IntPoint&); #endif void didChangeScrollOffsetForFrame(WebCore::Frame*); void setMainFrameProgressCompleted(bool completed) { m_mainFrameProgressCompleted = completed; } bool shouldDispatchFakeMouseMoveEvents() const { return m_shouldDispatchFakeMouseMoveEvents; } void setPageActivityState(WebCore::PageActivityState::Flags); void postMessage(const String& messageName, API::Object* messageBody); void postSynchronousMessageForTesting(const String& messageName, API::Object* messageBody, RefPtr& returnData); #if PLATFORM(GTK) void setInputMethodState(bool); #endif void imageOrMediaDocumentSizeChanged(const WebCore::IntSize&); #if ENABLE(VIDEO) #if USE(GSTREAMER) void requestInstallMissingMediaPlugins(const String& details, const String& description, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&); #endif #endif void addUserScript(const String& source, WebCore::UserContentInjectedFrames, WebCore::UserScriptInjectionTime); void addUserStyleSheet(const String& source, WebCore::UserContentInjectedFrames); void removeAllUserContent(); void dispatchDidLayout(WebCore::LayoutMilestones); void didRestoreScrollPosition(); WebURLSchemeHandlerProxy* urlSchemeHandlerForScheme(const String&); private: WebPage(uint64_t pageID, const WebPageCreationParameters&); // IPC::MessageSender virtual IPC::Connection* messageSenderConnection() override; virtual uint64_t messageSenderDestinationID() override; void platformInitialize(); void platformDetach(); void platformEditorState(WebCore::Frame&, EditorState& result, IncludePostLayoutDataHint) const; void didReceiveWebPageMessage(IPC::Connection&, IPC::MessageDecoder&); void didReceiveSyncWebPageMessage(IPC::Connection&, IPC::MessageDecoder&, std::unique_ptr&); #if PLATFORM(IOS) void resetViewportDefaultConfiguration(WebFrame* mainFrame); void viewportConfigurationChanged(); void updateViewportSizeForCSSViewportUnits(); static void convertSelectionRectsToRootView(WebCore::FrameView*, Vector&); PassRefPtr rangeForWebSelectionAtPosition(const WebCore::IntPoint&, const WebCore::VisiblePosition&, SelectionFlags&); PassRefPtr rangeForBlockAtPoint(const WebCore::IntPoint&); void computeExpandAndShrinkThresholdsForHandle(const WebCore::IntPoint&, SelectionHandlePosition, float& growThreshold, float& shrinkThreshold); PassRefPtr changeBlockSelection(const WebCore::IntPoint&, SelectionHandlePosition, float& growThreshold, float& shrinkThreshold, SelectionFlags&); PassRefPtr expandedRangeFromHandle(WebCore::Range*, SelectionHandlePosition); PassRefPtr contractedRangeFromHandle(WebCore::Range* currentRange, SelectionHandlePosition, SelectionFlags&); void getAssistedNodeInformation(AssistedNodeInformation&); void platformInitializeAccessibility(); void handleSyntheticClick(WebCore::Node* nodeRespondingToClick, const WebCore::FloatPoint& location); void completeSyntheticClick(WebCore::Node* nodeRespondingToClick, const WebCore::FloatPoint& location); void sendTapHighlightForNodeIfNecessary(uint64_t requestID, WebCore::Node*); void resetTextAutosizingBeforeLayoutIfNeeded(const WebCore::FloatSize& oldSize, const WebCore::FloatSize& newSize); WebCore::VisiblePosition visiblePositionInFocusedNodeForPoint(const WebCore::Frame&, const WebCore::IntPoint&, bool isInteractingWithAssistedNode); PassRefPtr rangeForGranularityAtPoint(const WebCore::Frame&, const WebCore::IntPoint&, uint32_t granularity, bool isInteractingWithAssistedNode); void volatilityTimerFired(); #endif #if !PLATFORM(COCOA) static const char* interpretKeyEvent(const WebCore::KeyboardEvent*); #endif bool performDefaultBehaviorForKeyEvent(const WebKeyboardEvent&); #if PLATFORM(MAC) bool executeKeypressCommandsInternal(const Vector&, WebCore::KeyboardEvent*); #endif String sourceForFrame(WebFrame*); void loadDataImpl(uint64_t navigationID, PassRefPtr, const String& MIMEType, const String& encodingName, const WebCore::URL& baseURL, const WebCore::URL& failingURL, const UserData&); void loadString(uint64_t navigationID, const String&, const String& MIMEType, const WebCore::URL& baseURL, const WebCore::URL& failingURL, const UserData&); bool platformHasLocalDataForURL(const WebCore::URL&); // Actions void tryClose(); void loadRequest(uint64_t navigationID, const WebCore::ResourceRequest&, const SandboxExtension::Handle&, uint64_t shouldOpenExternalURLsPolicy, const UserData&); void loadData(uint64_t navigationID, const IPC::DataReference&, const String& MIMEType, const String& encodingName, const String& baseURL, const UserData&); void loadHTMLString(uint64_t navigationID, const String& htmlString, const String& baseURL, const UserData&); void loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL, const String& provisionalLoadErrorURL, const UserData&); void loadPlainTextString(const String&, const UserData&); void loadWebArchiveData(const IPC::DataReference&, const UserData&); void navigateToPDFLinkWithSimulatedClick(const String& url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint); void reload(uint64_t navigationID, bool reloadFromOrigin, bool contentBlockersEnabled, const SandboxExtension::Handle&); void goForward(uint64_t navigationID, uint64_t); void goBack(uint64_t navigationID, uint64_t); void goToBackForwardItem(uint64_t navigationID, uint64_t); void tryRestoreScrollPosition(); void setInitialFocus(bool forward, bool isKeyboardEventValid, const WebKeyboardEvent&, uint64_t callbackID); void updateIsInWindow(bool isInitialState = false); void setViewState(WebCore::ViewState::Flags, bool wantsDidUpdateViewState, const Vector& callbackIDs); void validateCommand(const String&, uint64_t); void executeEditCommand(const String&, const String&); void setEditable(bool); void updateUserActivity(); void mouseEvent(const WebMouseEvent&); void keyEvent(const WebKeyboardEvent&); #if ENABLE(IOS_TOUCH_EVENTS) void touchEventSync(const WebTouchEvent&, bool& handled); #elif ENABLE(TOUCH_EVENTS) void touchEvent(const WebTouchEvent&); void touchEventSyncForTesting(const WebTouchEvent&, bool& handled); #if PLATFORM(QT) void highlightPotentialActivation(const WebCore::IntPoint&, const WebCore::IntSize& area); #endif #endif #if ENABLE(CONTEXT_MENUS) void contextMenuHidden() { m_isShowingContextMenu = false; } #endif static bool scroll(WebCore::Page*, WebCore::ScrollDirection, WebCore::ScrollGranularity); static bool logicalScroll(WebCore::Page*, WebCore::ScrollLogicalDirection, WebCore::ScrollGranularity); void loadURLInFrame(const String&, uint64_t frameID); enum class WasRestoredByAPIRequest { No, Yes }; void restoreSessionInternal(const Vector&, WasRestoredByAPIRequest); void restoreSession(const Vector&); void didRemoveBackForwardItem(uint64_t); #if ENABLE(REMOTE_INSPECTOR) void setAllowsRemoteInspection(bool); void setRemoteInspectionNameOverride(const String&); #endif void setDrawsBackground(bool); void setTopContentInset(float); void viewWillStartLiveResize(); void viewWillEndLiveResize(); void getContentsAsString(uint64_t callbackID); #if ENABLE(MHTML) void getContentsAsMHTMLData(uint64_t callbackID); #endif void getMainResourceDataOfFrame(uint64_t frameID, uint64_t callbackID); void getResourceDataFromFrame(uint64_t frameID, const String& resourceURL, uint64_t callbackID); void getRenderTreeExternalRepresentation(uint64_t callbackID); void getSelectionOrContentsAsString(uint64_t callbackID); void getSelectionAsWebArchiveData(uint64_t callbackID); void getSourceForFrame(uint64_t frameID, uint64_t callbackID); void getWebArchiveOfFrame(uint64_t frameID, uint64_t callbackID); void runJavaScriptInMainFrame(const String&, uint64_t callbackID); void forceRepaint(uint64_t callbackID); void takeSnapshot(WebCore::IntRect snapshotRect, WebCore::IntSize bitmapSize, uint32_t options, uint64_t callbackID); void preferencesDidChange(const WebPreferencesStore&); void platformPreferencesDidChange(const WebPreferencesStore&); void updatePreferences(const WebPreferencesStore&); void didReceivePolicyDecision(uint64_t frameID, uint64_t listenerID, uint32_t policyAction, uint64_t navigationID, DownloadID); void setUserAgent(const String&); void setCustomTextEncodingName(const String&); void suspendActiveDOMObjectsAndAnimations(); void resumeActiveDOMObjectsAndAnimations(); #if PLATFORM(COCOA) void performDictionaryLookupAtLocation(const WebCore::FloatPoint&); void performDictionaryLookupOfCurrentSelection(); void performDictionaryLookupForRange(WebCore::Frame*, WebCore::Range&, NSDictionary *options, WebCore::TextIndicatorPresentationTransition); WebCore::DictionaryPopupInfo dictionaryPopupInfoForRange(WebCore::Frame*, WebCore::Range&, NSDictionary **options, WebCore::TextIndicatorPresentationTransition); #if ENABLE(PDFKIT_PLUGIN) WebCore::DictionaryPopupInfo dictionaryPopupInfoForSelectionInPDFPlugin(PDFSelection *, PDFPlugin&, NSDictionary **options, WebCore::TextIndicatorPresentationTransition); #endif void windowAndViewFramesChanged(const WebCore::FloatRect& windowFrameInScreenCoordinates, const WebCore::FloatRect& windowFrameInUnflippedScreenCoordinates, const WebCore::FloatRect& viewFrameInWindowCoordinates, const WebCore::FloatPoint& accessibilityViewCoordinates); RetainPtr pdfDocumentForPrintingFrame(WebCore::Frame*); void computePagesForPrintingPDFDocument(uint64_t frameID, const PrintInfo&, Vector& resultPageRects); void drawPDFDocument(CGContextRef, PDFDocument *, const PrintInfo&, const WebCore::IntRect&); void drawPagesToPDFFromPDFDocument(CGContextRef, PDFDocument *, const PrintInfo&, uint32_t first, uint32_t count); #endif void setMainFrameIsScrollable(bool); void unapplyEditCommand(uint64_t commandID); void reapplyEditCommand(uint64_t commandID); void didRemoveEditCommand(uint64_t commandID); void findString(const String&, uint32_t findOptions, uint32_t maxMatchCount); void findStringMatches(const String&, uint32_t findOptions, uint32_t maxMatchCount); void getImageForFindMatch(uint32_t matchIndex); void selectFindMatch(uint32_t matchIndex); void hideFindUI(); void countStringMatches(const String&, uint32_t findOptions, uint32_t maxMatchCount); #if USE(COORDINATED_GRAPHICS_MULTIPROCESS) void findZoomableAreaForPoint(const WebCore::IntPoint&, const WebCore::IntSize& area); #endif void didChangeSelectedIndexForActivePopupMenu(int32_t newIndex); void setTextForActivePopupMenu(int32_t index); #if PLATFORM(GTK) void failedToShowPopupMenu(); #endif #if PLATFORM(QT) void hidePopupMenu(); void selectedIndex(int32_t newIndex); #endif #if PLATFORM(IOS) void didChooseFilesForOpenPanelWithDisplayStringAndIcon(const Vector&, const String& displayString, const IPC::DataReference& iconData); #endif void didChooseFilesForOpenPanel(const Vector&); void didCancelForOpenPanel(); #if ENABLE(SANDBOX_EXTENSIONS) void extendSandboxForFileFromOpenPanel(const SandboxExtension::Handle&); #endif void didReceiveGeolocationPermissionDecision(uint64_t geolocationID, bool allowed); void didReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed); #if ENABLE(MEDIA_STREAM) void didReceiveUserMediaPermissionDecision(uint64_t userMediaID, bool allowed, const String& audioDeviceUID, const String& videoDeviceUID); void didCompleteUserMediaPermissionCheck(uint64_t userMediaID, bool allowed); #endif void advanceToNextMisspelling(bool startBeforeSelection); void changeSpellingToWord(const String& word); #if USE(APPKIT) void uppercaseWord(); void lowercaseWord(); void capitalizeWord(); #endif #if ENABLE(CONTEXT_MENUS) void didSelectItemFromActiveContextMenu(const WebContextMenuItemData&); #endif void changeSelectedIndex(int32_t index); void setCanStartMediaTimerFired(); bool canHandleUserEvents() const; static bool platformCanHandleRequest(const WebCore::ResourceRequest&); static PluginView* focusedPluginViewForFrame(WebCore::Frame&); static PluginView* pluginViewForFrame(WebCore::Frame*); static PassRefPtr rangeFromEditingRange(WebCore::Frame&, const EditingRange&, EditingRangeIsRelativeTo = EditingRangeIsRelativeTo::EditableRoot); void reportUsedFeatures(); #if PLATFORM(MAC) void performImmediateActionHitTestAtLocation(WebCore::FloatPoint); RefPtr lookupTextAtLocation(WebCore::FloatPoint, NSDictionary **options); void immediateActionDidUpdate(); void immediateActionDidCancel(); void immediateActionDidComplete(); void setFont(const String& fontFamily, double fontSize, uint64_t fontTraits); void dataDetectorsDidPresentUI(WebCore::PageOverlay::PageOverlayID); void dataDetectorsDidChangeUI(WebCore::PageOverlay::PageOverlayID); void dataDetectorsDidHideUI(WebCore::PageOverlay::PageOverlayID); void handleAcceptedCandidate(WebCore::TextCheckingResult); #endif void setShouldDispatchFakeMouseMoveEvents(bool dispatch) { m_shouldDispatchFakeMouseMoveEvents = dispatch; } #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS) void playbackTargetSelected(uint64_t, const WebCore::MediaPlaybackTargetContext& outputDevice) const; void playbackTargetAvailabilityDidChange(uint64_t, bool); void setShouldPlayToPlaybackTarget(uint64_t, bool); #endif void clearWheelEventTestTrigger(); void setShouldScaleViewToFitDocument(bool); void pageStoppedScrolling(); #if ENABLE(VIDEO) && USE(GSTREAMER) void didEndRequestInstallMissingMediaPlugins(uint32_t result); #endif void registerURLSchemeHandler(uint64_t identifier, const String& scheme); void urlSchemeHandlerTaskDidReceiveResponse(uint64_t handlerIdentifier, uint64_t taskIdentifier, const WebCore::ResourceResponse&); void urlSchemeHandlerTaskDidReceiveData(uint64_t handlerIdentifier, uint64_t taskIdentifier, const IPC::DataReference&); void urlSchemeHandlerTaskDidComplete(uint64_t handlerIdentifier, uint64_t taskIdentifier, const WebCore::ResourceError&); uint64_t m_pageID; std::unique_ptr m_page; RefPtr m_mainFrame; RefPtr m_backForwardList; RefPtr m_pageGroup; String m_userAgent; WebCore::IntSize m_viewSize; std::unique_ptr m_drawingArea; HashSet m_pluginViews; bool m_hasSeenPlugin; HashMap> m_pendingTextCheckingRequestMap; bool m_useFixedLayout; bool m_drawsBackground; WebCore::Color m_underlayColor; bool m_isInRedo; bool m_isClosed; bool m_tabToLinks; bool m_asynchronousPluginInitializationEnabled; bool m_asynchronousPluginInitializationEnabledForAllPlugins; bool m_artificialPluginInitializationDelayEnabled; bool m_scrollingPerformanceLoggingEnabled; bool m_mainFrameIsScrollable; #if PLATFORM(IOS) bool m_ignoreViewportScalingConstraints { false }; #endif #if ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC) bool m_readyToFindPrimarySnapshottedPlugin; bool m_didFindPrimarySnapshottedPlugin; unsigned m_numberOfPrimarySnapshotDetectionAttempts; String m_primaryPlugInPageOrigin; String m_primaryPlugInOrigin; String m_primaryPlugInMimeType; RunLoop::Timer m_determinePrimarySnapshottedPlugInTimer; #endif // The layer hosting mode. LayerHostingMode m_layerHostingMode; #if PLATFORM(COCOA) bool m_pdfPluginEnabled; bool m_hasCachedWindowFrame; // The frame of the containing window in screen coordinates. WebCore::FloatRect m_windowFrameInScreenCoordinates; // The frame of the containing window in unflipped screen coordinates. WebCore::FloatRect m_windowFrameInUnflippedScreenCoordinates; // The frame of the view in window coordinates. WebCore::FloatRect m_viewFrameInWindowCoordinates; // The accessibility position of the view. WebCore::FloatPoint m_accessibilityPosition; RetainPtr m_mockAccessibilityElement; ViewGestureGeometryCollector m_viewGestureGeometryCollector; #elif HAVE(ACCESSIBILITY) && (PLATFORM(GTK) || PLATFORM(EFL)) GRefPtr m_accessibilityObject; #endif #if PLATFORM(GTK) && USE(TEXTURE_MAPPER_GL) // Our view's window in the UI process. uint64_t m_nativeWindowHandle; #endif #if !PLATFORM(IOS) RefPtr m_headerBanner; RefPtr m_footerBanner; #endif // !PLATFORM(IOS) RunLoop::Timer m_setCanStartMediaTimer; bool m_mayStartMediaWhenInWindow; HashMap> m_undoStepMap; #if ENABLE(CONTEXT_MENUS) std::unique_ptr m_contextMenuClient; #endif InjectedBundlePageEditorClient m_editorClient; std::unique_ptr m_formClient; InjectedBundlePageLoaderClient m_loaderClient; InjectedBundlePagePolicyClient m_policyClient; InjectedBundlePageResourceLoadClient m_resourceLoadClient; std::unique_ptr m_uiClient; #if ENABLE(FULLSCREEN_API) InjectedBundlePageFullScreenClient m_fullScreenClient; #endif InjectedBundlePageDiagnosticLoggingClient m_logDiagnosticMessageClient; FindController m_findController; #if ENABLE(TOUCH_EVENTS) && PLATFORM(QT) TapHighlightController m_tapHighlightController { this }; #endif RefPtr m_inspector; RefPtr m_inspectorUI; #if PLATFORM(IOS) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)) RefPtr m_videoFullscreenManager; #endif #if PLATFORM(IOS) bool m_allowsMediaDocumentInlinePlayback { false }; #endif #if ENABLE(FULLSCREEN_API) RefPtr m_fullScreenManager; #endif RefPtr m_activePopupMenu; #if ENABLE(CONTEXT_MENUS) RefPtr m_contextMenu; #endif #if ENABLE(INPUT_TYPE_COLOR) WebColorChooser* m_activeColorChooser; #endif RefPtr m_activeOpenPanelResultListener; RefPtr m_notificationPermissionRequestManager; RefPtr m_userContentController; #if ENABLE(GEOLOCATION) GeolocationPermissionRequestManager m_geolocationPermissionRequestManager; #endif #if ENABLE(MEDIA_STREAM) UserMediaPermissionRequestManager m_userMediaPermissionRequestManager; #endif std::unique_ptr m_printContext; #if PLATFORM(GTK) RefPtr m_printOperation; #endif SandboxExtensionTracker m_sandboxExtensionTracker; RefPtr m_pendingDropSandboxExtension; Vector> m_pendingDropExtensionsForFileUpload; WebCore::HysteresisActivity m_pageScrolledHysteresis; bool m_canRunBeforeUnloadConfirmPanel; bool m_canRunModal; bool m_isRunningModal; #if ENABLE(DRAG_SUPPORT) bool m_isStartingDrag; #endif bool m_cachedMainFrameIsPinnedToLeftSide; bool m_cachedMainFrameIsPinnedToRightSide; bool m_cachedMainFrameIsPinnedToTopSide; bool m_cachedMainFrameIsPinnedToBottomSide; bool m_canShortCircuitHorizontalWheelEvents; bool m_hasWheelEventHandlers; unsigned m_cachedPageCount; HashSet m_trackedNetworkResourceRequestIdentifiers; WebCore::IntSize m_minimumLayoutSize; bool m_autoSizingShouldExpandToViewHeight; #if ENABLE(CONTEXT_MENUS) bool m_isShowingContextMenu; #endif #if PLATFORM(IOS) RefPtr m_assistedNode; RefPtr m_currentWordRange; RefPtr m_interactionNode; WebCore::IntPoint m_lastInteractionLocation; enum SelectionAnchor { Start, End }; SelectionAnchor m_selectionAnchor; RefPtr m_potentialTapNode; WebCore::FloatPoint m_potentialTapLocation; WebCore::ViewportConfiguration m_viewportConfiguration; bool m_hasReceivedVisibleContentRectsAfterDidCommitLoad; bool m_scaleWasSetByUIProcess; bool m_userHasChangedPageScaleFactor; bool m_hasStablePageScaleFactor; bool m_userIsInteracting; bool m_hasFocusedDueToUserInteraction { false }; bool m_hasPendingBlurNotification; bool m_useTestingViewportConfiguration; bool m_isInStableState; std::chrono::milliseconds m_oldestNonStableUpdateVisibleContentRectsTimestamp; std::chrono::milliseconds m_estimatedLatency; WebCore::FloatSize m_screenSize; WebCore::FloatSize m_availableScreenSize; RefPtr m_currentBlockSelection; RefPtr m_initialSelection; WebCore::IntSize m_blockSelectionDesiredSize; WebCore::FloatSize m_maximumUnobscuredSize; int32_t m_deviceOrientation; bool m_inDynamicSizeUpdate; HashMap, WebCore::IntPoint> m_dynamicSizeUpdateHistory; RefPtr m_pendingSyntheticClickNode; WebCore::FloatPoint m_pendingSyntheticClickLocation; WebCore::FloatRect m_previousExposedContentRect; WebCore::Timer m_volatilityTimer; #endif HashSet m_mimeTypesWithCustomContentProviders; WebCore::Color m_backgroundColor; HashSet m_activeRenderingSuppressionTokens; unsigned m_maximumRenderingSuppressionToken; WebCore::ScrollPinningBehavior m_scrollPinningBehavior; WTF::Optional m_scrollbarOverlayStyle; bool m_useAsyncScrolling; WebCore::ViewState::Flags m_viewState; WebCore::PageActivityState::Flags m_activityState; bool m_processSuppressionEnabled; UserActivity m_userActivity; uint64_t m_pendingNavigationID; #if ENABLE(WEBGL) WebCore::WebGLLoadPolicy m_systemWebGLPolicy; #endif bool m_mainFrameProgressCompleted; bool m_shouldDispatchFakeMouseMoveEvents; bool m_isEditorStateMissingPostLayoutData { false }; #if PLATFORM(GTK) bool m_inputMethodEnabled { false }; #endif #if ENABLE(VIDEO) && USE(GSTREAMER) RefPtr m_installMediaPluginsCallback; #endif HashMap> m_schemeToURLSchemeHandlerProxyMap; HashMap m_identifierToURLSchemeHandlerProxyMap; }; } // namespace WebKit #endif // WebPage_h