Home | History | Annotate | Download | only in web
      1 /*
      2  * Copyright (C) 2009, 2010, 2011, 2012 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #ifndef WebView_h
     32 #define WebView_h
     33 
     34 #include "../platform/WebColor.h"
     35 #include "../platform/WebString.h"
     36 #include "../platform/WebVector.h"
     37 #include "WebDragOperation.h"
     38 #include "WebPageVisibilityState.h"
     39 #include "WebWidget.h"
     40 
     41 namespace WebKit {
     42 
     43 class WebAccessibilityObject;
     44 class WebAutofillClient;
     45 class WebDevToolsAgent;
     46 class WebDevToolsAgentClient;
     47 class WebDragData;
     48 class WebFrame;
     49 class WebFrameClient;
     50 class WebGraphicsContext3D;
     51 class WebHitTestResult;
     52 class WebNode;
     53 class WebPageOverlay;
     54 class WebPermissionClient;
     55 class WebPrerendererClient;
     56 class WebRange;
     57 class WebSettings;
     58 class WebSpellCheckClient;
     59 class WebString;
     60 class WebPasswordGeneratorClient;
     61 class WebValidationMessageClient;
     62 class WebViewBenchmarkSupport;
     63 class WebViewClient;
     64 struct WebActiveWheelFlingParameters;
     65 struct WebMediaPlayerAction;
     66 struct WebPluginAction;
     67 struct WebPoint;
     68 struct WebWindowFeatures;
     69 
     70 class WebView : public WebWidget {
     71 public:
     72     WEBKIT_EXPORT static const double textSizeMultiplierRatio;
     73     WEBKIT_EXPORT static const double minTextSizeMultiplier;
     74     WEBKIT_EXPORT static const double maxTextSizeMultiplier;
     75     WEBKIT_EXPORT static const float minPageScaleFactor;
     76     WEBKIT_EXPORT static const float maxPageScaleFactor;
     77 
     78     // Controls which frames user content is injected into.
     79     enum UserContentInjectIn {
     80         UserContentInjectInAllFrames,
     81         UserContentInjectInTopFrameOnly
     82     };
     83 
     84     // Controls which documents user styles are injected into.
     85     enum UserStyleInjectionTime {
     86         UserStyleInjectInExistingDocuments,
     87         UserStyleInjectInSubsequentDocuments
     88     };
     89 
     90 
     91     // Initialization ------------------------------------------------------
     92 
     93     // Creates a WebView that is NOT yet initialized.  You will need to
     94     // call initializeMainFrame to finish the initialization.  It is valid
     95     // to pass null client pointers.
     96     WEBKIT_EXPORT static WebView* create(WebViewClient*);
     97 
     98     // After creating a WebView, you should immediately call this method.
     99     // You can optionally modify the settings before calling this method.
    100     // The WebFrameClient will receive events for the main frame and any
    101     // child frames.  It is valid to pass a null WebFrameClient pointer.
    102     virtual void initializeMainFrame(WebFrameClient*) = 0;
    103 
    104     virtual void initializeHelperPluginFrame(WebFrameClient*) = 0;
    105 
    106     // Initializes the various client interfaces.
    107     virtual void setAutofillClient(WebAutofillClient*) = 0;
    108     virtual void setDevToolsAgentClient(WebDevToolsAgentClient*) = 0;
    109     virtual void setPermissionClient(WebPermissionClient*) = 0;
    110     virtual void setPrerendererClient(WebPrerendererClient*) = 0;
    111     virtual void setSpellCheckClient(WebSpellCheckClient*) = 0;
    112     virtual void setValidationMessageClient(WebValidationMessageClient*) = 0;
    113     virtual void setPasswordGeneratorClient(WebPasswordGeneratorClient*) = 0;
    114 
    115     // Options -------------------------------------------------------------
    116 
    117     // The returned pointer is valid for the lifetime of the WebView.
    118     virtual WebSettings* settings() = 0;
    119 
    120     // Corresponds to the encoding of the main frame.  Setting the page
    121     // encoding may cause the main frame to reload.
    122     virtual WebString pageEncoding() const = 0;
    123     virtual void setPageEncoding(const WebString&) = 0;
    124 
    125     // Makes the WebView transparent.  This is useful if you want to have
    126     // some custom background rendered behind it.
    127     virtual bool isTransparent() const = 0;
    128     virtual void setIsTransparent(bool) = 0;
    129 
    130     // Sets the base color used for this WebView's background. This is in effect
    131     // the default background color used for pages with no background-color
    132     // style in effect, or used as the alpha-blended basis for any pages with
    133     // translucent background-color style. (For pages with opaque
    134     // background-color style, this property is effectively ignored).
    135     // Setting this takes effect for the currently loaded page, if any, and
    136     // persists across subsequent navigations. Defaults to white prior to the
    137     // first call to this method.
    138     virtual void setBaseBackgroundColor(WebColor) = 0;
    139 
    140     // Controls whether pressing Tab key advances focus to links.
    141     virtual bool tabsToLinks() const = 0;
    142     virtual void setTabsToLinks(bool) = 0;
    143 
    144     // Method that controls whether pressing Tab key cycles through page
    145     // elements or inserts a '\t' char in the focused text area.
    146     virtual bool tabKeyCyclesThroughElements() const = 0;
    147     virtual void setTabKeyCyclesThroughElements(bool) = 0;
    148 
    149     // Controls the WebView's active state, which may affect the rendering
    150     // of elements on the page (i.e., tinting of input elements).
    151     virtual bool isActive() const = 0;
    152     virtual void setIsActive(bool) = 0;
    153 
    154     // Allows disabling domain relaxation.
    155     virtual void setDomainRelaxationForbidden(bool, const WebString& scheme) = 0;
    156 
    157     // Allows setting the state of the various bars exposed via BarProp
    158     // properties on the window object. The size related fields of
    159     // WebWindowFeatures are ignored.
    160     virtual void setWindowFeatures(const WebWindowFeatures&) = 0;
    161 
    162 
    163     // Closing -------------------------------------------------------------
    164 
    165     // Runs beforeunload handlers for the current page, returning false if
    166     // any handler suppressed unloading.
    167     virtual bool dispatchBeforeUnloadEvent() = 0;
    168 
    169     // Runs unload handlers for the current page.
    170     virtual void dispatchUnloadEvent() = 0;
    171 
    172 
    173     // Frames --------------------------------------------------------------
    174 
    175     virtual WebFrame* mainFrame() = 0;
    176 
    177     // Returns the frame identified by the given name.  This method
    178     // supports pseudo-names like _self, _top, and _blank.  It traverses
    179     // the entire frame tree containing this tree looking for a frame that
    180     // matches the given name.  If the optional relativeToFrame parameter
    181     // is specified, then the search begins with the given frame and its
    182     // children.
    183     virtual WebFrame* findFrameByName(
    184         const WebString& name, WebFrame* relativeToFrame = 0) = 0;
    185 
    186 
    187     // Focus ---------------------------------------------------------------
    188 
    189     virtual WebFrame* focusedFrame() = 0;
    190     virtual void setFocusedFrame(WebFrame*) = 0;
    191 
    192     // Focus the first (last if reverse is true) focusable node.
    193     virtual void setInitialFocus(bool reverse) = 0;
    194 
    195     // Clears the focused node (and selection if a text field is focused)
    196     // to ensure that a text field on the page is not eating keystrokes we
    197     // send it.
    198     virtual void clearFocusedNode() = 0;
    199 
    200     // Scrolls the node currently in focus into view.
    201     virtual void scrollFocusedNodeIntoView() = 0;
    202 
    203     // Scrolls the node currently in focus into |rect|, where |rect| is in
    204     // window space.
    205     virtual void scrollFocusedNodeIntoRect(const WebRect&) { }
    206 
    207     // Advance the focus of the WebView forward to the next element or to the
    208     // previous element in the tab sequence (if reverse is true).
    209     virtual void advanceFocus(bool reverse) { }
    210 
    211     // Animate a scale into the specified find-in-page rect.
    212     virtual void zoomToFindInPageRect(const WebRect&) = 0;
    213 
    214     // Animate a scale into the specified rect where multiple targets were
    215     // found from previous tap gesture.
    216     // Returns false if it doesn't do any zooming.
    217     virtual bool zoomToMultipleTargetsRect(const WebRect&) = 0;
    218 
    219 
    220     // Zoom ----------------------------------------------------------------
    221 
    222     // Returns the current zoom level.  0 is "original size", and each increment
    223     // above or below represents zooming 20% larger or smaller to default limits
    224     // of 300% and 50% of original size, respectively.  Only plugins use
    225     // non whole-numbers, since they might choose to have specific zoom level so
    226     // that fixed-width content is fit-to-page-width, for example.
    227     virtual double zoomLevel() = 0;
    228 
    229     // Changes the zoom level to the specified level, clamping at the limits
    230     // noted above, and returns the current zoom level after applying the
    231     // change.
    232     virtual double setZoomLevel(double) = 0;
    233 
    234     // FIXME: Deprecated, delete once Chromium side is updated.
    235     virtual double setZoomLevel(bool textOnly, double zoomLevel) = 0;
    236 
    237     // Updates the zoom limits for this view.
    238     virtual void zoomLimitsChanged(double minimumZoomLevel,
    239                                    double maximumZoomLevel) = 0;
    240 
    241     // Helper functions to convert between zoom level and zoom factor.  zoom
    242     // factor is zoom percent / 100, so 300% = 3.0.
    243     WEBKIT_EXPORT static double zoomLevelToZoomFactor(double zoomLevel);
    244     WEBKIT_EXPORT static double zoomFactorToZoomLevel(double factor);
    245 
    246     // Returns the current text zoom factor, where 1.0 is the normal size, > 1.0
    247     // is scaled up and < 1.0 is scaled down.
    248     virtual float textZoomFactor() = 0;
    249 
    250     // Scales the text in the page by a factor of textZoomFactor.
    251     // Note: this has no effect on plugins.
    252     virtual float setTextZoomFactor(float) = 0;
    253 
    254     // Sets the initial page scale to the given factor. This scale setting overrides
    255     // page scale set in the page's viewport meta tag.
    256     virtual void setInitialPageScaleOverride(float) = 0;
    257 
    258     // Gets the scale factor of the page, where 1.0 is the normal size, > 1.0
    259     // is scaled up, < 1.0 is scaled down.
    260     virtual float pageScaleFactor() const = 0;
    261 
    262     // Scales the page and the scroll offset by a given factor, while ensuring
    263     // that the new scroll position does not go beyond the edge of the page.
    264     virtual void setPageScaleFactorPreservingScrollOffset(float) = 0;
    265 
    266     // Scales a page by a factor of scaleFactor and then sets a scroll position to (x, y).
    267     // setPageScaleFactor() magnifies and shrinks a page without affecting layout.
    268     // On the other hand, zooming affects layout of the page.
    269     virtual void setPageScaleFactor(float scaleFactor, const WebPoint& origin) = 0;
    270 
    271     // PageScaleFactor will be force-clamped between minPageScale and maxPageScale
    272     // (and these values will persist until setPageScaleFactorLimits is called
    273     // again).
    274     virtual void setPageScaleFactorLimits(float minPageScale, float maxPageScale) = 0;
    275 
    276     virtual float minimumPageScaleFactor() const = 0;
    277     virtual float maximumPageScaleFactor() const = 0;
    278 
    279     // Save the WebView's current scroll and scale state. Each call to this function
    280     // overwrites the previously saved scroll and scale state.
    281     virtual void saveScrollAndScaleState() = 0;
    282 
    283     // Restore the previously saved scroll and scale state. After restoring the
    284     // state, this function deletes any saved scroll and scale state.
    285     virtual void restoreScrollAndScaleState() = 0;
    286 
    287     // Reset any saved values for the scroll and scale state.
    288     virtual void resetScrollAndScaleState() = 0;
    289 
    290     // Prevent the web page from setting min/max scale via the viewport meta
    291     // tag. This is an accessibility feature that lets folks zoom in to web
    292     // pages even if the web page tries to block scaling.
    293     virtual void setIgnoreViewportTagScaleLimits(bool) = 0;
    294 
    295     // Returns the "preferred" contents size, defined as the preferred minimum width of the main document's contents
    296     // and the minimum height required to display the main document without scrollbars.
    297     // The returned size has the page zoom factor applied.
    298     virtual WebSize contentsPreferredMinimumSize() = 0;
    299 
    300     // The ratio of the current device's screen DPI to the target device's screen DPI.
    301     virtual float deviceScaleFactor() const = 0;
    302 
    303     // Sets the ratio as computed by computePageScaleConstraints.
    304     virtual void setDeviceScaleFactor(float) = 0;
    305 
    306 
    307     // Fixed Layout --------------------------------------------------------
    308 
    309     // In fixed layout mode, the layout of the page is independent of the
    310     // view port size, given by WebWidget::size().
    311 
    312     virtual bool isFixedLayoutModeEnabled() const = 0;
    313     virtual void enableFixedLayoutMode(bool enable) = 0;
    314 
    315     virtual WebSize fixedLayoutSize() const = 0;
    316     virtual void setFixedLayoutSize(const WebSize&) = 0;
    317 
    318 
    319     // Auto-Resize -----------------------------------------------------------
    320 
    321     // In auto-resize mode, the view is automatically adjusted to fit the html
    322     // content within the given bounds.
    323     virtual void enableAutoResizeMode(
    324         const WebSize& minSize,
    325         const WebSize& maxSize) = 0;
    326 
    327     // Turn off auto-resize.
    328     virtual void disableAutoResizeMode() = 0;
    329 
    330     // Media ---------------------------------------------------------------
    331 
    332     // Performs the specified media player action on the node at the given location.
    333     virtual void performMediaPlayerAction(
    334         const WebMediaPlayerAction&, const WebPoint& location) = 0;
    335 
    336     // Performs the specified plugin action on the node at the given location.
    337     virtual void performPluginAction(
    338         const WebPluginAction&, const WebPoint& location) = 0;
    339 
    340 
    341     // Data exchange -------------------------------------------------------
    342 
    343     // Do a hit test at given point and return the HitTestResult.
    344     virtual WebHitTestResult hitTestResultAt(const WebPoint&) = 0;
    345 
    346     // Copy to the clipboard the image located at a particular point in the
    347     // WebView (if there is such an image)
    348     virtual void copyImageAt(const WebPoint&) = 0;
    349 
    350     // Notifies the WebView that a drag has terminated.
    351     virtual void dragSourceEndedAt(
    352         const WebPoint& clientPoint, const WebPoint& screenPoint,
    353         WebDragOperation operation) = 0;
    354 
    355     // Notifies the WebView that a drag is going on.
    356     virtual void dragSourceMovedTo(
    357         const WebPoint& clientPoint, const WebPoint& screenPoint,
    358         WebDragOperation operation) = 0;
    359 
    360     // Notfies the WebView that the system drag and drop operation has ended.
    361     virtual void dragSourceSystemDragEnded() = 0;
    362 
    363     // Callback methods when a drag-and-drop operation is trying to drop
    364     // something on the WebView.
    365     virtual WebDragOperation dragTargetDragEnter(
    366         const WebDragData&,
    367         const WebPoint& clientPoint, const WebPoint& screenPoint,
    368         WebDragOperationsMask operationsAllowed,
    369         int keyModifiers) = 0;
    370     virtual WebDragOperation dragTargetDragOver(
    371         const WebPoint& clientPoint, const WebPoint& screenPoint,
    372         WebDragOperationsMask operationsAllowed,
    373         int keyModifiers) = 0;
    374     virtual void dragTargetDragLeave() = 0;
    375     virtual void dragTargetDrop(
    376         const WebPoint& clientPoint, const WebPoint& screenPoint,
    377         int keyModifiers) = 0;
    378 
    379     // Retrieves a list of spelling markers.
    380     virtual void spellingMarkers(WebVector<uint32_t>* markers) = 0;
    381 
    382 
    383     // Support for resource loading initiated by plugins -------------------
    384 
    385     // Returns next unused request identifier which is unique within the
    386     // parent Page.
    387     virtual unsigned long createUniqueIdentifierForRequest() = 0;
    388 
    389 
    390     // Developer tools -----------------------------------------------------
    391 
    392     // Inspect a particular point in the WebView.  (x = -1 || y = -1) is a
    393     // special case, meaning inspect the current page and not a specific
    394     // point.
    395     virtual void inspectElementAt(const WebPoint&) = 0;
    396 
    397     // Settings used by the inspector.
    398     virtual WebString inspectorSettings() const = 0;
    399     virtual void setInspectorSettings(const WebString&) = 0;
    400     virtual bool inspectorSetting(const WebString& key,
    401                                   WebString* value) const = 0;
    402     virtual void setInspectorSetting(const WebString& key,
    403                                      const WebString& value) = 0;
    404 
    405     // The embedder may optionally engage a WebDevToolsAgent.  This may only
    406     // be set once per WebView.
    407     virtual WebDevToolsAgent* devToolsAgent() = 0;
    408 
    409 
    410     // Accessibility -------------------------------------------------------
    411 
    412     // Returns the accessibility object for this view.
    413     virtual WebAccessibilityObject accessibilityObject() = 0;
    414 
    415 
    416     // Autofill  -----------------------------------------------------------
    417 
    418     // Notifies the WebView that Autofill suggestions are available for a node.
    419     // |itemIDs| is a vector of IDs for the menu items. A positive itemID is a
    420     // unique ID for the Autofill entries. Other MenuItemIDs are defined in
    421     // WebAutofillClient.h
    422     virtual void applyAutofillSuggestions(
    423         const WebNode&,
    424         const WebVector<WebString>& names,
    425         const WebVector<WebString>& labels,
    426         const WebVector<WebString>& icons,
    427         const WebVector<int>& itemIDs,
    428         int separatorIndex = -1) = 0;
    429 
    430     // Hides any popup (suggestions, selects...) that might be showing.
    431     virtual void hidePopups() = 0;
    432 
    433     virtual void selectAutofillSuggestionAtIndex(unsigned listIndex) = 0;
    434 
    435 
    436     // Context menu --------------------------------------------------------
    437 
    438     virtual void performCustomContextMenuAction(unsigned action) = 0;
    439 
    440     // Shows a context menu for the currently focused element.
    441     virtual void showContextMenu() = 0;
    442 
    443 
    444     // Popup menu ----------------------------------------------------------
    445 
    446     // Sets whether select popup menus should be rendered by the browser.
    447     WEBKIT_EXPORT static void setUseExternalPopupMenus(bool);
    448 
    449 
    450     // Visited link state --------------------------------------------------
    451 
    452     // Tells all WebView instances to update the visited link state for the
    453     // specified hash.
    454     WEBKIT_EXPORT static void updateVisitedLinkState(unsigned long long hash);
    455 
    456     // Tells all WebView instances to update the visited state for all
    457     // their links.
    458     WEBKIT_EXPORT static void resetVisitedLinkState();
    459 
    460 
    461     // Custom colors -------------------------------------------------------
    462 
    463     virtual void setScrollbarColors(unsigned inactiveColor,
    464                                     unsigned activeColor,
    465                                     unsigned trackColor) = 0;
    466 
    467     virtual void setSelectionColors(unsigned activeBackgroundColor,
    468                                     unsigned activeForegroundColor,
    469                                     unsigned inactiveBackgroundColor,
    470                                     unsigned inactiveForegroundColor) = 0;
    471 
    472     // User scripts --------------------------------------------------------
    473     WEBKIT_EXPORT static void addUserStyleSheet(const WebString& sourceCode,
    474                                                 const WebVector<WebString>& patterns,
    475                                                 UserContentInjectIn injectIn,
    476                                                 UserStyleInjectionTime injectionTime = UserStyleInjectInSubsequentDocuments);
    477     WEBKIT_EXPORT static void removeAllUserContent();
    478 
    479     // Modal dialog support ------------------------------------------------
    480 
    481     // Call these methods before and after running a nested, modal event loop
    482     // to suspend script callbacks and resource loads.
    483     WEBKIT_EXPORT static void willEnterModalLoop();
    484     WEBKIT_EXPORT static void didExitModalLoop();
    485 
    486     // Called to inform the WebView that a wheel fling animation was started externally (for instance
    487     // by the compositor) but must be completed by the WebView.
    488     virtual void transferActiveWheelFlingAnimation(const WebActiveWheelFlingParameters&) = 0;
    489 
    490     virtual bool setEditableSelectionOffsets(int start, int end) = 0;
    491     virtual bool setCompositionFromExistingText(int compositionStart, int compositionEnd, const WebVector<WebCompositionUnderline>& underlines) = 0;
    492     virtual void extendSelectionAndDelete(int before, int after) = 0;
    493 
    494     virtual bool isSelectionEditable() const = 0;
    495 
    496     virtual void setShowPaintRects(bool) = 0;
    497     virtual void setShowFPSCounter(bool) = 0;
    498     virtual void setContinuousPaintingEnabled(bool) = 0;
    499     virtual void setShowScrollBottleneckRects(bool) = 0;
    500 
    501     // Benchmarking support -------------------------------------------------
    502 
    503     virtual WebViewBenchmarkSupport* benchmarkSupport() { return 0; }
    504 
    505     // Visibility -----------------------------------------------------------
    506 
    507     // Sets the visibility of the WebView.
    508     virtual void setVisibilityState(WebPageVisibilityState visibilityState,
    509                                     bool isInitialState) { }
    510 
    511     // PageOverlay ----------------------------------------------------------
    512 
    513     // Adds/removes page overlay to this WebView. These functions change the
    514     // graphical appearance of the WebView. WebPageOverlay paints the
    515     // contents of the page overlay. It also provides an z-order number for
    516     // the page overlay. The z-order number defines the paint order the page
    517     // overlays. Page overlays with larger z-order number will be painted after
    518     // page overlays with smaller z-order number. That is, they appear above
    519     // the page overlays with smaller z-order number. If two page overlays have
    520     // the same z-order number, the later added one will be on top.
    521     virtual void addPageOverlay(WebPageOverlay*, int /*z-order*/) = 0;
    522     virtual void removePageOverlay(WebPageOverlay*) = 0;
    523 
    524     // Testing functionality for TestRunner ---------------------------------
    525 
    526 protected:
    527     ~WebView() {}
    528 };
    529 
    530 } // namespace WebKit
    531 
    532 #endif
    533