/* * Copyright (C) 2010 Google 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: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 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. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef WebViewImpl_h #define WebViewImpl_h #include "WebNavigationPolicy.h" #include "platform/WebLayer.h" #include "platform/WebLayerTreeView.h" #include "platform/WebLayerTreeViewClient.h" #include "platform/WebPoint.h" #include "platform/WebRect.h" #include "platform/WebSize.h" #include "platform/WebString.h" #include "WebView.h" #include "ChromeClientImpl.h" #include "ContextMenuClientImpl.h" #include "DragClientImpl.h" #include "EditorClientImpl.h" #include "GraphicsContext3D.h" #include "GraphicsLayer.h" #include "InspectorClientImpl.h" #include "IntPoint.h" #include "IntRect.h" #include "NotificationPresenterImpl.h" #include "PageOverlayList.h" #include "PageWidgetDelegate.h" #include "PlatformGestureCurveTarget.h" #include "UserMediaClientImpl.h" #include #include namespace WebCore { class ActivePlatformGestureAnimation; class ChromiumDataObject; class Color; class DocumentLoader; class Frame; class GraphicsContext3D; class HistoryItem; class HitTestResult; class KeyboardEvent; class Page; class PageGroup; class PagePopup; class PagePopupClient; class PlatformGestureCurveTarget; class PlatformKeyboardEvent; class PopupContainer; class PopupMenuClient; class Range; class RenderTheme; class TextFieldDecorator; class Widget; } namespace WebKit { class AutocompletePopupMenuClient; class AutofillPopupMenuClient; class BatteryClientImpl; class ContextMenuClientImpl; class DeviceOrientationClientProxy; class DragScrollTimer; class GeolocationClientProxy; class NonCompositedContentHost; class PrerendererClientImpl; class SpeechInputClientImpl; class SpeechRecognitionClientProxy; class UserMediaClientImpl; class WebAccessibilityObject; class WebCompositorImpl; class WebDevToolsAgentClient; class WebDevToolsAgentPrivate; class WebFrameImpl; class WebGestureEvent; class WebPagePopupImpl; class WebPrerendererClient; class WebImage; class WebKeyboardEvent; class WebMouseEvent; class WebMouseWheelEvent; class WebSettingsImpl; class WebTouchEvent; class WebViewImpl : public WebView, public WebLayerTreeViewClient, public RefCounted, public WebCore::PlatformGestureCurveTarget, public PageWidgetEventHandler { public: enum AutoZoomType { DoubleTap, FindInPage, }; // WebWidget methods: virtual void close(); virtual WebSize size() { return m_size; } virtual void willStartLiveResize(); virtual void resize(const WebSize&); virtual void willEndLiveResize(); virtual void willEnterFullScreen(); virtual void didEnterFullScreen(); virtual void willExitFullScreen(); virtual void didExitFullScreen(); virtual void setCompositorSurfaceReady(); virtual void animate(double); virtual void layout(); // Also implements WebLayerTreeViewClient::layout() virtual void paint(WebCanvas*, const WebRect&); virtual void themeChanged(); virtual void composite(bool finish); virtual void setNeedsRedraw(); virtual bool isInputThrottled() const; virtual bool handleInputEvent(const WebInputEvent&); virtual void mouseCaptureLost(); virtual void setFocus(bool enable); virtual bool setComposition( const WebString& text, const WebVector& underlines, int selectionStart, int selectionEnd); virtual bool confirmComposition(); virtual bool confirmComposition(const WebString& text); virtual bool compositionRange(size_t* location, size_t* length); virtual WebTextInputInfo textInputInfo(); virtual WebTextInputType textInputType(); virtual bool selectionBounds(WebRect& start, WebRect& end) const; virtual bool selectionTextDirection(WebTextDirection& start, WebTextDirection& end) const; virtual bool caretOrSelectionRange(size_t* location, size_t* length); virtual void setTextDirection(WebTextDirection direction); virtual bool isAcceleratedCompositingActive() const; virtual void didAcquirePointerLock(); virtual void didNotAcquirePointerLock(); virtual void didLosePointerLock(); virtual void didChangeWindowResizerRect(); virtual void instrumentBeginFrame(); virtual void instrumentCancelFrame(); // WebView methods: virtual void initializeMainFrame(WebFrameClient*); virtual void setAutofillClient(WebAutofillClient*); virtual void setDevToolsAgentClient(WebDevToolsAgentClient*); virtual void setPermissionClient(WebPermissionClient*); virtual void setPrerendererClient(WebPrerendererClient*) OVERRIDE; virtual void setSpellCheckClient(WebSpellCheckClient*); virtual void addTextFieldDecoratorClient(WebTextFieldDecoratorClient*) OVERRIDE; virtual WebSettings* settings(); virtual WebString pageEncoding() const; virtual void setPageEncoding(const WebString& encoding); virtual bool isTransparent() const; virtual void setIsTransparent(bool value); virtual bool tabsToLinks() const; virtual void setTabsToLinks(bool value); virtual bool tabKeyCyclesThroughElements() const; virtual void setTabKeyCyclesThroughElements(bool value); virtual bool isActive() const; virtual void setIsActive(bool value); virtual void setDomainRelaxationForbidden(bool, const WebString& scheme); virtual bool dispatchBeforeUnloadEvent(); virtual void dispatchUnloadEvent(); virtual WebFrame* mainFrame(); virtual WebFrame* findFrameByName( const WebString& name, WebFrame* relativeToFrame); virtual WebFrame* focusedFrame(); virtual void setFocusedFrame(WebFrame* frame); virtual void setInitialFocus(bool reverse); virtual void clearFocusedNode(); virtual void scrollFocusedNodeIntoView(); virtual void scrollFocusedNodeIntoRect(const WebRect&); virtual double zoomLevel(); virtual double setZoomLevel(bool textOnly, double zoomLevel); virtual void zoomLimitsChanged(double minimumZoomLevel, double maximumZoomLevel); virtual float pageScaleFactor() const; virtual bool isPageScaleFactorSet() const; virtual void setPageScaleFactorPreservingScrollOffset(float); virtual void setPageScaleFactor(float scaleFactor, const WebPoint& origin); virtual void setPageScaleFactorLimits(float minPageScale, float maxPageScale); virtual float minimumPageScaleFactor() const; virtual float maximumPageScaleFactor() const; virtual float deviceScaleFactor() const; virtual void setDeviceScaleFactor(float); virtual bool isFixedLayoutModeEnabled() const; virtual void enableFixedLayoutMode(bool enable); virtual WebSize fixedLayoutSize() const; virtual void setFixedLayoutSize(const WebSize&); virtual void enableAutoResizeMode( const WebSize& minSize, const WebSize& maxSize); virtual void disableAutoResizeMode(); virtual void performMediaPlayerAction( const WebMediaPlayerAction& action, const WebPoint& location); virtual void performPluginAction( const WebPluginAction&, const WebPoint&); virtual void copyImageAt(const WebPoint& point); virtual void dragSourceEndedAt( const WebPoint& clientPoint, const WebPoint& screenPoint, WebDragOperation operation); virtual void dragSourceMovedTo( const WebPoint& clientPoint, const WebPoint& screenPoint, WebDragOperation operation); virtual void dragSourceSystemDragEnded(); virtual WebDragOperation dragTargetDragEnter( const WebDragData&, const WebPoint& clientPoint, const WebPoint& screenPoint, WebDragOperationsMask operationsAllowed); virtual WebDragOperation dragTargetDragEnter( const WebDragData&, const WebPoint& clientPoint, const WebPoint& screenPoint, WebDragOperationsMask operationsAllowed, int keyModifiers); virtual WebDragOperation dragTargetDragOver( const WebPoint& clientPoint, const WebPoint& screenPoint, WebDragOperationsMask operationsAllowed); virtual WebDragOperation dragTargetDragOver( const WebPoint& clientPoint, const WebPoint& screenPoint, WebDragOperationsMask operationsAllowed, int keyModifiers); virtual void dragTargetDragLeave(); virtual void dragTargetDrop( const WebPoint& clientPoint, const WebPoint& screenPoint); virtual void dragTargetDrop( const WebPoint& clientPoint, const WebPoint& screenPoint, int keyModifiers); virtual unsigned long createUniqueIdentifierForRequest(); virtual void inspectElementAt(const WebPoint& point); virtual WebString inspectorSettings() const; virtual void setInspectorSettings(const WebString& settings); virtual bool inspectorSetting(const WebString& key, WebString* value) const; virtual void setInspectorSetting(const WebString& key, const WebString& value); virtual WebDevToolsAgent* devToolsAgent(); virtual WebAccessibilityObject accessibilityObject(); virtual void applyAutofillSuggestions( const WebNode&, const WebVector& names, const WebVector& labels, const WebVector& icons, const WebVector& itemIDs, int separatorIndex); virtual void hidePopups(); virtual void setScrollbarColors(unsigned inactiveColor, unsigned activeColor, unsigned trackColor); virtual void setSelectionColors(unsigned activeBackgroundColor, unsigned activeForegroundColor, unsigned inactiveBackgroundColor, unsigned inactiveForegroundColor); virtual void performCustomContextMenuAction(unsigned action); virtual void addPageOverlay(WebPageOverlay*, int /* zOrder */); virtual void removePageOverlay(WebPageOverlay*); #if ENABLE(BATTERY_STATUS) virtual void updateBatteryStatus(const WebBatteryStatus&); #endif virtual void transferActiveWheelFlingAnimation(const WebActiveWheelFlingParameters&); // WebLayerTreeViewClient virtual void willBeginFrame(); virtual void didBeginFrame(); virtual void updateAnimations(double monotonicFrameBeginTime); virtual void applyScrollAndScale(const WebSize&, float); virtual WebGraphicsContext3D* createContext3D(); virtual void didRebindGraphicsContext(bool); virtual void willCommit(); virtual void didCommit(); virtual void didCommitAndDrawFrame(); virtual void didCompleteSwapBuffers(); virtual void scheduleComposite(); // WebViewImpl void setIgnoreInputEvents(bool newValue); WebDevToolsAgentPrivate* devToolsAgentPrivate() { return m_devToolsAgent.get(); } PageOverlayList* pageOverlays() const { return m_pageOverlays.get(); } void setOverlayLayer(WebCore::GraphicsLayer*); const WebPoint& lastMouseDownPoint() const { return m_lastMouseDownPoint; } WebCore::Frame* focusedWebCoreFrame() const; // Returns the currently focused Node or null if no node has focus. WebCore::Node* focusedWebCoreNode(); static WebViewImpl* fromPage(WebCore::Page*); // A pageGroup identifies a namespace of pages. Page groups are used on PLATFORM(MAC) // for some programs that use HTML views to display things that don't seem like // web pages to the user (so shouldn't have visited link coloring). We only use // one page group. static WebCore::PageGroup* defaultPageGroup(); WebViewClient* client() { return m_client; } WebAutofillClient* autofillClient() { return m_autofillClient; } WebPermissionClient* permissionClient() { return m_permissionClient; } WebSpellCheckClient* spellCheckClient() { return m_spellCheckClient; } const Vector >& textFieldDecorators() const { return m_textFieldDecorators; } // Returns the page object associated with this view. This may be null when // the page is shutting down, but will be valid at all other times. WebCore::Page* page() const { return m_page.get(); } WebCore::RenderTheme* theme() const; // Returns the main frame associated with this view. This may be null when // the page is shutting down, but will be valid at all other times. WebFrameImpl* mainFrameImpl(); // History related methods: void observeNewNavigation(); // Event related methods: void mouseContextMenu(const WebMouseEvent&); void mouseDoubleClick(const WebMouseEvent&); void startPageScaleAnimation(const WebCore::IntPoint& targetPosition, bool useAnchor, float newScale, double durationSec); void numberOfWheelEventHandlersChanged(unsigned); void numberOfTouchEventHandlersChanged(unsigned); // PlatformGestureCurveTarget implementation for wheel fling. virtual void scrollBy(const WebCore::IntPoint&); // Handles context menu events orignated via the the keyboard. These // include the VK_APPS virtual key and the Shift+F10 combine. Code is // based on the Webkit function bool WebView::handleContextMenuEvent(WPARAM // wParam, LPARAM lParam) in webkit\webkit\win\WebView.cpp. The only // significant change in this function is the code to convert from a // Keyboard event to the Right Mouse button down event. bool sendContextMenuEvent(const WebKeyboardEvent&); // Notifies the WebView that a load has been committed. isNewNavigation // will be true if a new session history item should be created for that // load. isNavigationWithinPage will be true if the navigation does // not take the user away from the current page. void didCommitLoad(bool* isNewNavigation, bool isNavigationWithinPage); // Indicates two things: // 1) This view may have a new layout now. // 2) Calling layout() is a no-op. // After calling WebWidget::layout(), expect to get this notification // unless the view did not need a layout. void layoutUpdated(WebFrameImpl*); void didChangeContentsSize(); // Returns true if popup menus should be rendered by the browser, false if // they should be rendered by WebKit (which is the default). static bool useExternalPopupMenus(); bool contextMenuAllowed() const { return m_contextMenuAllowed; } bool shouldAutoResize() const { return m_shouldAutoResize; } WebCore::IntSize minAutoSize() const { return m_minAutoSize; } WebCore::IntSize maxAutoSize() const { return m_maxAutoSize; } // Set the disposition for how this webview is to be initially shown. void setInitialNavigationPolicy(WebNavigationPolicy policy) { m_initialNavigationPolicy = policy; } WebNavigationPolicy initialNavigationPolicy() const { return m_initialNavigationPolicy; } // Sets the emulated text zoom factor // (may not be 1 in the device metrics emulation mode). void setEmulatedTextZoomFactor(float); // Returns the emulated text zoom factor // (which may not be 1 in the device metrics emulation mode). float emulatedTextZoomFactor() const { return m_emulatedTextZoomFactor; } // Determines whether a page should e.g. be opened in a background tab. // Returns false if it has no opinion, in which case it doesn't set *policy. static bool navigationPolicyFromMouseEvent( unsigned short button, bool ctrl, bool shift, bool alt, bool meta, WebNavigationPolicy*); // Start a system drag and drop operation. void startDragging( WebCore::Frame*, const WebDragData& dragData, WebDragOperationsMask mask, const WebImage& dragImage, const WebPoint& dragImageOffset); void autofillPopupDidHide() { m_autofillPopupShowing = false; } #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) // Returns the provider of desktop notifications. NotificationPresenterImpl* notificationPresenterImpl(); #endif // Tries to scroll a frame or any parent of a frame. Returns true if the view // was scrolled. bool propagateScroll(WebCore::ScrollDirection, WebCore::ScrollGranularity); // Notification that a popup was opened/closed. void popupOpened(WebCore::PopupContainer* popupContainer); void popupClosed(WebCore::PopupContainer* popupContainer); #if ENABLE(PAGE_POPUP) WebCore::PagePopup* openPagePopup(WebCore::PagePopupClient*, const WebCore::IntRect& originBoundsInRootView); void closePagePopup(WebCore::PagePopup*); #endif void hideAutofillPopup(); // Returns the input event we're currently processing. This is used in some // cases where the WebCore DOM event doesn't have the information we need. static const WebInputEvent* currentInputEvent() { return m_currentInputEvent; } #if USE(ACCELERATED_COMPOSITING) bool allowsAcceleratedCompositing(); void setRootGraphicsLayer(WebCore::GraphicsLayer*); void scheduleCompositingLayerSync(); void scrollRootLayerRect(const WebCore::IntSize& scrollDelta, const WebCore::IntRect& clipRect); void invalidateRootLayerRect(const WebCore::IntRect&); NonCompositedContentHost* nonCompositedContentHost(); void setBackgroundColor(const WebCore::Color&); #endif #if ENABLE(REQUEST_ANIMATION_FRAME) void scheduleAnimation(); #endif // Returns the onscreen 3D context used by the compositor. This is // used by the renderer's code to set up resource sharing between // the compositor's context and subordinate contexts for APIs like // WebGL. Returns 0 if compositing support is not compiled in or // we could not successfully instantiate a context. virtual WebGraphicsContext3D* graphicsContext3D(); virtual WebGraphicsContext3D* sharedGraphicsContext3D(); PassOwnPtr createCompositorGraphicsContext3D(); virtual void setVisibilityState(WebPageVisibilityState, bool); WebCore::PopupContainer* selectPopup() const { return m_selectPopup.get(); } #if ENABLE(PAGE_POPUP) bool hasOpenedPopup() const { return m_selectPopup || m_pagePopup; } #else bool hasOpenedPopup() const { return m_selectPopup; } #endif // Returns true if the event leads to scrolling. static bool mapKeyCodeForScroll(int keyCode, WebCore::ScrollDirection* scrollDirection, WebCore::ScrollGranularity* scrollGranularity); // Called by a full frame plugin inside this view to inform it that its // zoom level has been updated. The plugin should only call this function // if the zoom change was triggered by the browser, it's only needed in case // a plugin can update its own zoom, say because of its own UI. void fullFramePluginZoomLevelChanged(double zoomLevel); #if ENABLE(GESTURE_EVENTS) void computeScaleAndScrollForHitRect(const WebRect& hitRect, AutoZoomType, float& scale, WebPoint& scroll); #endif void loseCompositorContext(int numTimes); void enterFullScreenForElement(WebCore::Element*); void exitFullScreenForElement(WebCore::Element*); // Exposed for the purpose of overriding device metrics. void sendResizeEventAndRepaint(); // Exposed for testing purposes. bool hasHorizontalScrollbar(); bool hasVerticalScrollbar(); // Pointer Lock calls allow a page to capture all mouse events and // disable the system cursor. #if ENABLE(POINTER_LOCK) virtual bool requestPointerLock(); virtual void requestPointerUnlock(); virtual bool isPointerLocked(); #endif private: bool computePageScaleFactorLimits(); float clampPageScaleFactorToLimits(float scale); WebPoint clampOffsetAtScale(const WebPoint& offset, float scale); friend class WebView; // So WebView::Create can call our constructor friend class WTF::RefCounted; enum DragAction { DragEnter, DragOver }; WebViewImpl(WebViewClient*); virtual ~WebViewImpl(); // Returns true if the event was actually processed. bool keyEventDefault(const WebKeyboardEvent&); // Returns true if the autocomple has consumed the event. bool autocompleteHandleKeyEvent(const WebKeyboardEvent&); // Repaints the Autofill popup. Should be called when the suggestions // have changed. Note that this should only be called when the Autofill // popup is showing. void refreshAutofillPopup(); // Returns true if the view was scrolled. bool scrollViewWithKeyboard(int keyCode, int modifiers); void hideSelectPopup(); // Converts |pos| from window coordinates to contents coordinates and gets // the HitTestResult for it. WebCore::HitTestResult hitTestResultForWindowPos(const WebCore::IntPoint&); // Consolidate some common code between starting a drag over a target and // updating a drag over a target. If we're starting a drag, |isEntering| // should be true. WebDragOperation dragTargetDragEnterOrOver(const WebPoint& clientPoint, const WebPoint& screenPoint, DragAction, int keyModifiers); void configureAutoResizeMode(); #if USE(ACCELERATED_COMPOSITING) void setIsAcceleratedCompositingActive(bool); void doComposite(); void doPixelReadbackToCanvas(WebCanvas*, const WebCore::IntRect&); void reallocateRenderer(); void updateLayerTreeViewport(); #endif #if ENABLE(GESTURE_EVENTS) // Returns the bounding box of the block type node touched by the WebRect. WebRect computeBlockBounds(const WebRect&, AutoZoomType); // Helper function: Widens the width of |source| by the specified margins // while keeping it smaller than page width. WebRect widenRectWithinPageBounds(const WebRect& source, int targetMargin, int minimumMargin); #endif #if ENABLE(POINTER_LOCK) void pointerLockMouseEvent(const WebInputEvent&); #endif // PageWidgetEventHandler functions virtual void handleMouseLeave(WebCore::Frame&, const WebMouseEvent&) OVERRIDE; virtual void handleMouseDown(WebCore::Frame&, const WebMouseEvent&) OVERRIDE; virtual void handleMouseUp(WebCore::Frame&, const WebMouseEvent&) OVERRIDE; virtual bool handleGestureEvent(const WebGestureEvent&) OVERRIDE; virtual bool handleKeyEvent(const WebKeyboardEvent&) OVERRIDE; virtual bool handleCharEvent(const WebKeyboardEvent&) OVERRIDE; WebSettingsImpl* settingsImpl(); WebViewClient* m_client; WebAutofillClient* m_autofillClient; WebPermissionClient* m_permissionClient; WebSpellCheckClient* m_spellCheckClient; Vector > m_textFieldDecorators; ChromeClientImpl m_chromeClientImpl; ContextMenuClientImpl m_contextMenuClientImpl; DragClientImpl m_dragClientImpl; EditorClientImpl m_editorClientImpl; InspectorClientImpl m_inspectorClientImpl; WebSize m_size; // If true, automatically resize the render view around its content. bool m_shouldAutoResize; // The lower bound on the size when auto-resizing. WebCore::IntSize m_minAutoSize; // The upper bound on the size when auto-resizing. WebCore::IntSize m_maxAutoSize; OwnPtr m_page; // This flag is set when a new navigation is detected. It is used to satisfy // the corresponding argument to WebFrameClient::didCommitProvisionalLoad. bool m_observedNewNavigation; #ifndef NDEBUG // Used to assert that the new navigation we observed is the same navigation // when we make use of m_observedNewNavigation. const WebCore::DocumentLoader* m_newNavigationLoader; #endif // An object that can be used to manipulate m_page->settings() without linking // against WebCore. This is lazily allocated the first time GetWebSettings() // is called. OwnPtr m_webSettings; // A copy of the web drop data object we received from the browser. RefPtr m_currentDragData; // The point relative to the client area where the mouse was last pressed // down. This is used by the drag client to determine what was under the // mouse when the drag was initiated. We need to track this here in // WebViewImpl since DragClient::startDrag does not pass the position the // mouse was at when the drag was initiated, only the current point, which // can be misleading as it is usually not over the element the user actually // dragged by the time a drag is initiated. WebPoint m_lastMouseDownPoint; // Keeps track of the current zoom level. 0 means no zoom, positive numbers // mean zoom in, negative numbers mean zoom out. double m_zoomLevel; double m_minimumZoomLevel; double m_maximumZoomLevel; float m_pageDefinedMinimumPageScaleFactor; float m_pageDefinedMaximumPageScaleFactor; float m_minimumPageScaleFactor; float m_maximumPageScaleFactor; bool m_pageScaleFactorIsSet; bool m_contextMenuAllowed; bool m_doingDragAndDrop; bool m_ignoreInputEvents; // Webkit expects keyPress events to be suppressed if the associated keyDown // event was handled. Safari implements this behavior by peeking out the // associated WM_CHAR event if the keydown was handled. We emulate // this behavior by setting this flag if the keyDown was handled. bool m_suppressNextKeypressEvent; // The policy for how this webview is to be initially shown. WebNavigationPolicy m_initialNavigationPolicy; // Represents whether or not this object should process incoming IME events. bool m_imeAcceptEvents; // The available drag operations (copy, move link...) allowed by the source. WebDragOperation m_operationsAllowed; // The current drag operation as negotiated by the source and destination. // When not equal to DragOperationNone, the drag data can be dropped onto the // current drop target in this WebView (the drop target can accept the drop). WebDragOperation m_dragOperation; // Whether an Autofill popup is currently showing. bool m_autofillPopupShowing; // The Autofill popup client. OwnPtr m_autofillPopupClient; // The Autofill popup. RefPtr m_autofillPopup; // The popup associated with a select element. RefPtr m_selectPopup; #if ENABLE(PAGE_POPUP) // The popup associated with an input element. RefPtr m_pagePopup; #endif OwnPtr m_devToolsAgent; OwnPtr m_pageOverlays; // Whether the webview is rendering transparently. bool m_isTransparent; // Whether the user can press tab to focus links. bool m_tabsToLinks; // Inspector settings. WebString m_inspectorSettings; typedef HashMap SettingsMap; OwnPtr m_inspectorSettingsMap; OwnPtr m_dragScrollTimer; #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) // The provider of desktop notifications; NotificationPresenterImpl m_notificationPresenter; #endif // If set, the (plugin) node which has mouse capture. RefPtr m_mouseCaptureNode; // If set, the WebView is transitioning to fullscreen for this element. RefPtr m_provisionalFullScreenElement; // If set, the WebView is in fullscreen mode for an element in this frame. RefPtr m_fullScreenFrame; bool m_isCancelingFullScreen; #if USE(ACCELERATED_COMPOSITING) WebCore::IntRect m_rootLayerScrollDamage; OwnPtr m_nonCompositedContentHost; WebLayerTreeView m_layerTreeView; WebLayer m_rootLayer; WebCore::GraphicsLayer* m_rootGraphicsLayer; bool m_isAcceleratedCompositingActive; bool m_compositorCreationFailed; // If true, the graphics context is being restored. bool m_recreatingGraphicsContext; bool m_compositorSurfaceReady; float m_deviceScaleInCompositor; #endif static const WebInputEvent* m_currentInputEvent; #if ENABLE(INPUT_SPEECH) OwnPtr m_speechInputClient; #endif #if ENABLE(SCRIPTED_SPEECH) OwnPtr m_speechRecognitionClient; #endif // If we attempt to fetch the on-screen GraphicsContext3D before // the compositor has been turned on, we need to instantiate it // early. This member holds on to the GC3D in this case. OwnPtr m_temporaryOnscreenGraphicsContext3D; OwnPtr m_deviceOrientationClientProxy; OwnPtr m_geolocationClientProxy; #if ENABLE(BATTERY_STATUS) OwnPtr m_batteryClient; #endif float m_emulatedTextZoomFactor; #if ENABLE(MEDIA_STREAM) UserMediaClientImpl m_userMediaClientImpl; #endif OwnPtr m_gestureAnimation; WebPoint m_lastWheelPosition; WebPoint m_lastWheelGlobalPosition; int m_flingModifier; }; } // namespace WebKit #endif