blob: 6bf918cdddbe89c263492c7e8178cdcca3eb0810 [file] [log] [blame]
// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// WebCore provides hooks for several kinds of functionality, allowing separate
// classes termed "delegates" to receive notifications (in the form of direct
// function calls) when certain events are about to occur or have just occurred.
// In some cases, the delegate implements the needed functionality; in others,
// the delegate has some control over the behavior but doesn't actually
// implement it. For example, the UI delegate is responsible for showing a
// dialog box or otherwise handling a JavaScript window.alert() call, via the
// RunJavaScriptAlert() method. On the other hand, the editor delegate doesn't
// actually handle editing functionality, although it could (for example)
// override whether a content-editable node accepts editing focus by returning
// false from ShouldBeginEditing(). (It would also possible for a more
// special-purpose editing delegate to act on the edited node in some way, e.g.
// to highlight modified text in the DidChangeContents() method.)
// WebKit divides the delegated tasks into several different classes, but we
// combine them into a single WebViewDelegate. This single delegate encompasses
// the needed functionality of the WebKit UIDelegate, ContextMenuDelegate,
// PolicyDelegate, FrameLoadDelegate, and EditorDelegate; additional portions
// of ChromeClient and FrameLoaderClient not delegated in the WebKit
// implementation; and some WebView additions.
#ifndef WEBKIT_GLUE_WEBVIEW_DELEGATE_H_
#define WEBKIT_GLUE_WEBVIEW_DELEGATE_H_
#include <vector>
#include "base/gfx/native_widget_types.h"
#include "webkit/api/public/WebFrame.h"
#include "webkit/api/public/WebNavigationPolicy.h"
#include "webkit/api/public/WebNavigationType.h"
#include "webkit/api/public/WebTextDirection.h"
#include "webkit/api/public/WebWidgetClient.h"
#include "webkit/glue/context_menu.h"
namespace webkit_glue {
class WebMediaPlayerDelegate;
}
namespace WebCore {
class AccessibilityObject;
}
namespace WebKit {
class WebDataSource;
class WebDragData;
class WebForm;
class WebWorker;
class WebWorkerClient;
class WebMediaPlayer;
class WebMediaPlayerClient;
class WebNode;
class WebURLRequest;
class WebURLResponse;
class WebWidget;
struct WebPoint;
struct WebPopupMenuInfo;
struct WebRect;
struct WebURLError;
}
class FilePath;
class SkBitmap;
class WebDevToolsAgentDelegate;
class WebMediaPlayerDelegate;
class WebPluginDelegate;
class WebView;
struct ContextMenuMediaParams;
struct WebPluginGeometry;
struct WebPreferences;
enum NavigationGesture {
NavigationGestureUser, // User initiated navigation/load. This is not
// currently used due to the untrustworthy nature
// of userGestureHint (wasRunByUserGesture). See
// bug 1051891.
NavigationGestureAuto, // Non-user initiated navigation / load. For example
// onload or setTimeout triggered document.location
// changes, and form.submits. See bug 1046841 for
// some cases that should be treated this way but
// aren't yet.
NavigationGestureUnknown, // What we assign when userGestureHint returns true
// because we can't trust it.
};
// Interface passed in to the WebViewDelegate to receive notification of the
// result of an open file dialog.
class WebFileChooserCallback {
public:
WebFileChooserCallback() {}
virtual ~WebFileChooserCallback() {}
virtual void OnFileChoose(const std::vector<FilePath>& file_names) { }
private:
DISALLOW_COPY_AND_ASSIGN(WebFileChooserCallback);
};
// Inheritance here is somewhat weird, but since a WebView is a WebWidget,
// it makes sense that a WebViewDelegate is a WebWidgetClient.
class WebViewDelegate : virtual public WebKit::WebWidgetClient {
public:
// WebView additions -------------------------------------------------------
// This method is called to create a new WebView. The WebView should not be
// made visible until the new WebView's Delegate has its Show method called.
// The returned WebView pointer is assumed to be owned by the host window,
// and the caller of CreateWebView should not release the given WebView.
// |user_gesture| is true if a user action initiated this call.
// |creator_url|, if nonempty, holds the security origin of the page creating
// this WebView.
virtual WebView* CreateWebView(WebView* webview,
bool user_gesture,
const GURL& creator_url) {
return NULL;
}
// This method is called to create a new WebWidget to act as a popup
// (like a drop-down menu).
virtual WebKit::WebWidget* CreatePopupWidget(
WebView* webview,
bool activatable) {
return NULL;
}
// Like CreatePopupWidget, except the actual widget is rendered by the
// embedder using the supplied info.
virtual WebKit::WebWidget* CreatePopupWidgetWithInfo(
WebView* webview,
const WebKit::WebPopupMenuInfo& info) {
return NULL;
}
// This method is called to create a WebPluginDelegate implementation when a
// new plugin is instanced. See webkit_glue::CreateWebPluginDelegateHelper
// for a default WebPluginDelegate implementation.
// TODO(port): clsid is very Win- and ActiveX-specific; refactor to be more
// platform-neutral
virtual WebPluginDelegate* CreatePluginDelegate(
WebView* webview,
const GURL& url,
const std::string& mime_type,
const std::string& clsid,
std::string* actual_mime_type) {
return NULL;
}
// Called when a windowed plugin is created.
// Lets the view delegate create anything it is using to wrap the plugin.
virtual void CreatedPluginWindow(gfx::PluginWindowHandle handle) { }
// Called when a windowed plugin is closing.
// Lets the view delegate shut down anything it is using to wrap the plugin.
virtual void WillDestroyPluginWindow(gfx::PluginWindowHandle handle) { }
// This method is called when the renderer creates a worker object.
virtual WebKit::WebWorker* CreateWebWorker(WebKit::WebWorkerClient* client) {
return NULL;
}
// Called when a WebMediaPlayer is needed.
virtual WebKit::WebMediaPlayer* CreateWebMediaPlayer(
WebKit::WebMediaPlayerClient* client) {
return NULL;
}
// This method is called to open a URL in the specified manner.
virtual void OpenURL(WebView* webview, const GURL& url,
const GURL& referrer,
WebKit::WebNavigationPolicy policy) {
}
// Notifies how many matches have been found so far, for a given request_id.
// |final_update| specifies whether this is the last update (all frames have
// completed scoping).
virtual void ReportFindInPageMatchCount(int count, int request_id,
bool final_update) {
}
// Notifies the browser what tick-mark rect is currently selected. Parameter
// |request_id| lets the recipient know which request this message belongs to,
// so that it can choose to ignore the message if it has moved on to other
// things. |selection_rect| is expected to have coordinates relative to the
// top left corner of the web page area and represent where on the screen the
// selection rect is currently located.
virtual void ReportFindInPageSelection(int request_id,
int active_match_ordinal,
const WebKit::WebRect& selection) {
}
// Returns whether this WebView was opened by a user gesture.
virtual bool WasOpenedByUserGesture() const {
return true;
}
// Called by ChromeClientImpl::focus() if accessibility on the renderer side
// is enabled, and a focus change has occurred. Will retrieve the id of the
// input AccessibilityObject and send it through IPC for handling on the
// browser side.
virtual void FocusAccessibilityObject(WebCore::AccessibilityObject* acc_obj) {
}
// Keeps track of the necessary window move for a plugin window that resulted
// from a scroll operation. That way, all plugin windows can be moved at the
// same time as each other and the page.
virtual void DidMovePlugin(const WebPluginGeometry& move) {
}
// FrameLoaderClient -------------------------------------------------------
virtual bool CanAcceptLoadDrops() const {
// Always return true here so layout tests (which use the default WebView
// delegate) continue to pass.
return true;
}
// Notifies the delegate that a load has begun.
virtual void DidStartLoading(WebView* webview) {
}
// Notifies the delegate that all loads are finished.
virtual void DidStopLoading(WebView* webview) {
}
// The original version of this is WindowScriptObjectAvailable, below. This
// is a Chrome-specific version that serves the same purpose, but has been
// renamed since we haven't implemented WebScriptObject. Our embedding
// implementation binds native objects to the window via the webframe instead.
// TODO(pamg): If we do implement WebScriptObject, we may wish to switch to
// using the original version of this function.
virtual void WindowObjectCleared(WebKit::WebFrame* webframe) {
}
// Notifies that the documentElement for the document in a webframe has been
// created. This is called before anything else is parsed or executed for the
// document.
virtual void DocumentElementAvailable(WebKit::WebFrame* webframe) {
}
// Notifies that a new script context has been created for this frame.
// This is similar to WindowObjectCleared but only called once per frame
// context.
virtual void DidCreateScriptContextForFrame(WebKit::WebFrame* webframe) {
}
// Notifies that this frame's script context has been destroyed.
virtual void DidDestroyScriptContextForFrame(WebKit::WebFrame* webframe) {
}
// Notifies that a garbage-collected context was created - content scripts.
virtual void DidCreateIsolatedScriptContext(WebKit::WebFrame* webframe) {
}
// PolicyDelegate ----------------------------------------------------------
// This method is called to notify the delegate, and let it modify a
// proposed navigation. It will be called before loading starts, and
// on every redirect.
//
// default_policy specifies what should normally happen for this
// navigation (open in current tab, start a new tab, start a new
// window, etc). This method can return an altered policy, and
// take any additional separate action it wants to.
//
// is_redirect is true if this is a redirect rather than user action.
virtual WebKit::WebNavigationPolicy PolicyForNavigationAction(
WebView* webview,
WebKit::WebFrame* frame,
const WebKit::WebURLRequest& request,
WebKit::WebNavigationType type,
WebKit::WebNavigationPolicy default_policy,
bool is_redirect) {
return default_policy;
}
// FrameLoadDelegate -------------------------------------------------------
// A datasource has been created for a new navigation. The given datasource
// will become the provisional datasource for the frame.
virtual void DidCreateDataSource(WebKit::WebFrame* frame,
WebKit::WebDataSource* ds) {
}
// Notifies the delegate that the provisional load of a specified frame in a
// given WebView has started. By the time the provisional load for a frame has
// started, we know whether or not the current load is due to a client
// redirect or not, so we pass this information through to allow us to set
// the referrer properly in those cases. The consumed_client_redirect_src is
// an empty invalid GURL in other cases.
virtual void DidStartProvisionalLoadForFrame(
WebView* webview,
WebKit::WebFrame* frame,
NavigationGesture gesture) {
}
// Called when a provisional load is redirected (see GetProvisionalDataSource
// for more info on provisional loads). This happens when the server sends
// back any type of redirect HTTP response.
//
// The redirect information can be retrieved from the provisional data
// source's redirect chain, which will be updated prior to this callback.
// The last element in that vector will be the new URL (which will be the
// same as the provisional data source's current URL), and the next-to-last
// element will be the referring URL.
virtual void DidReceiveProvisionalLoadServerRedirect(WebView* webview,
WebKit::WebFrame* frame) {
}
// @method webView:didFailProvisionalLoadWithError:forFrame:
// @abstract Notifies the delegate that the provisional load has failed
// @param webView The WebView sending the message
// @param error The error that occurred
// @param frame The frame for which the error occurred
// @discussion This method is called after the provisional data source has
// failed to load. The frame will continue to display the contents of the
// committed data source if there is one.
// This notification is only received for errors like network errors.
virtual void DidFailProvisionalLoadWithError(WebView* webview,
const WebKit::WebURLError& error,
WebKit::WebFrame* frame) {
}
// Notifies the delegate to commit data for the given frame. The delegate
// may optionally convert the data before calling CommitDocumentData or
// suppress a call to CommitDocumentData. For example, if CommitDocumentData
// is never called, then an empty document will be created.
virtual void DidReceiveDocumentData(WebKit::WebFrame* frame,
const char* data,
size_t data_len) {
frame->commitDocumentData(data, data_len);
}
// Notifies the delegate that the load has changed from provisional to
// committed. This method is called after the provisional data source has
// become the committed data source.
//
// In some cases, a single load may be committed more than once. This
// happens in the case of multipart/x-mixed-replace, also known as "server
// push". In this case, a single location change leads to multiple documents
// that are loaded in sequence. When this happens, a new commit will be sent
// for each document.
//
// The "is_new_navigation" flag will be true when a new session history entry
// was created for the load. The frame's GetHistoryState method can be used
// to get the corresponding session history state.
virtual void DidCommitLoadForFrame(WebView* webview, WebKit::WebFrame* frame,
bool is_new_navigation) {
}
//
// @method webView:didReceiveTitle:forFrame:
// @abstract Notifies the delegate that the page title for a frame has been received
// @param webView The WebView sending the message
// @param title The new page title
// @param frame The frame for which the title has been received
// @discussion The title may update during loading; clients should be prepared for this.
// - (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame;
virtual void DidReceiveTitle(WebView* webview,
const std::wstring& title,
WebKit::WebFrame* frame) {
}
//
// @method webView:didFinishLoadForFrame:
// @abstract Notifies the delegate that the committed load of a frame has completed
// @param webView The WebView sending the message
// @param frame The frame that finished loading
// @discussion This method is called after the committed data source of a frame has successfully loaded
// and will only be called when all subresources such as images and stylesheets are done loading.
// Plug-In content and JavaScript-requested loads may occur after this method is called.
// - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
virtual void DidFinishLoadForFrame(WebView* webview,
WebKit::WebFrame* frame) {
}
//
// @method webView:didFailLoadWithError:forFrame:
// @abstract Notifies the delegate that the committed load of a frame has failed
// @param webView The WebView sending the message
// @param error The error that occurred
// @param frame The frame that failed to load
// @discussion This method is called after a data source has committed but failed to completely load.
// - (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame;
virtual void DidFailLoadWithError(WebView* webview,
const WebKit::WebURLError& error,
WebKit::WebFrame* forFrame) {
}
// Notifies the delegate of a DOMContentLoaded event.
// This is called when the html resource has been loaded, but
// not necessarily all subresources (images, stylesheets). So, this is called
// before DidFinishLoadForFrame.
virtual void DidFinishDocumentLoadForFrame(WebView* webview, WebKit::WebFrame* frame) {
}
// This method is called when we load a resource from an in-memory cache.
// A return value of |false| indicates the load should proceed, but WebCore
// appears to largely ignore the return value.
virtual bool DidLoadResourceFromMemoryCache(
WebView* webview,
const WebKit::WebURLRequest& request,
const WebKit::WebURLResponse& response,
WebKit::WebFrame* frame) {
return false;
}
// This is called after javascript onload handlers have been fired.
virtual void DidHandleOnloadEventsForFrame(WebView* webview, WebKit::WebFrame* frame) {
}
// This method is called when anchors within a page have been clicked.
// It is very similar to DidCommitLoadForFrame.
virtual void DidChangeLocationWithinPageForFrame(WebView* webview,
WebKit::WebFrame* frame,
bool is_new_navigation) {
}
// This is called when the favicon for a frame has been received.
virtual void DidReceiveIconForFrame(WebView* webview, WebKit::WebFrame* frame) {
}
// Notifies the delegate that a frame will start a client-side redirect. When
// this function is called, the redirect has not yet been started (it may
// not even be scheduled to happen until some point in the future). When the
// redirect has been cancelled or has succeeded, DidStopClientRedirect will
// be called.
//
// WebKit considers meta refreshes, and setting document.location (regardless
// of when called) as client redirects (possibly among others).
//
// This function is intended to continue progress feedback while a
// client-side redirect is pending. Watch out: WebKit seems to call us twice
// for client redirects, resulting in two calls of this function.
virtual void WillPerformClientRedirect(WebView* webview,
WebKit::WebFrame* frame,
const GURL& src_url,
const GURL& dest_url,
unsigned int delay_seconds,
unsigned int fire_date) {
}
// Notifies the delegate that a pending client-side redirect has been
// cancelled (for example, if the frame changes before the timeout) or has
// completed successfully. A client-side redirect is the result of setting
// document.location, for example, as opposed to a server side redirect
// which is the result of HTTP headers (see DidReceiveServerRedirect).
//
// On success, this will be called when the provisional load that the client
// side redirect initiated is committed.
//
// See the implementation of FrameLoader::clientRedirectCancelledOrFinished.
virtual void DidCancelClientRedirect(WebView* webview,
WebKit::WebFrame* frame) {
}
// Notifies the delegate that the load about to be committed for the specified
// webview and frame was due to a client redirect originating from source URL.
// The information/notification obtained from this method is relevant until
// the next provisional load is started, at which point it becomes obsolete.
virtual void DidCompleteClientRedirect(WebView* webview,
WebKit::WebFrame* frame,
const GURL& source) {
}
// Notifies the delegate that a form is about to be submitted.
virtual void WillSubmitForm(WebView* webview, WebKit::WebFrame* frame,
const WebKit::WebForm& form) {
}
//
// @method webView:willCloseFrame:
// @abstract Notifies the delegate that a frame will be closed
// @param webView The WebView sending the message
// @param frame The frame that will be closed
// @discussion This method is called right before WebKit is done with the frame
// and the objects that it contains.
// - (void)webView:(WebView *)sender willCloseFrame:(WebFrame *)frame;
virtual void WillCloseFrame(WebView* webview, WebKit::WebFrame* frame) {
}
// ResourceLoadDelegate ----------------------------------------------------
// Associates the given identifier with the initial resource request.
// Resource load callbacks will use the identifier throughout the life of the
// request.
virtual void AssignIdentifierToRequest(
WebKit::WebFrame* webframe,
uint32 identifier,
const WebKit::WebURLRequest& request) {
}
// Notifies the delegate that a request is about to be sent out, giving the
// delegate the opportunity to modify the request. Note that request is
// writable here, and changes to the URL, for example, will change the request
// made. If this request is the result of a redirect, then redirect_response
// will be non-null and contain the response that triggered the redirect.
virtual void WillSendRequest(
WebKit::WebFrame* webframe,
uint32 identifier,
WebKit::WebURLRequest* request,
const WebKit::WebURLResponse& redirect_response) {
}
virtual void DidReceiveResponse(WebKit::WebFrame* webframe,
uint32 identifier,
const WebKit::WebURLResponse& response) {
}
// Notifies the delegate that a subresource load has succeeded.
virtual void DidFinishLoading(WebKit::WebFrame* webframe, uint32 identifier) {
}
// Notifies the delegate that a subresource load has failed, and why.
virtual void DidFailLoadingWithError(WebKit::WebFrame* webframe,
uint32 identifier,
const WebKit::WebURLError& error) {
}
// ChromeClient ------------------------------------------------------------
// Appends a line to the application's error console. The message contains
// an error description or other information, the line_no provides a line
// number (e.g. for a JavaScript error report), and the source_id contains
// a URL or other description of the source of the message.
virtual void AddMessageToConsole(WebView* webview,
const std::wstring& message,
unsigned int line_no,
const std::wstring& source_id) {
}
// Queries the browser for suggestions to be shown for the form text field
// named |field_name|. |text| is the text entered by the user so far and
// |node_id| is the id of the node of the input field.
virtual void QueryFormFieldAutofill(const std::wstring& field_name,
const std::wstring& text,
int64 node_id) {
}
// Instructs the browser to remove the autofill entry specified from it DB.
virtual void RemoveStoredAutofillEntry(const std::wstring& name,
const std::wstring& value) {
}
virtual void DidContentsSizeChange(WebKit::WebWidget* webwidget,
int new_width, int new_height) {
}
// UIDelegate --------------------------------------------------------------
// Asks the browser to show a modal HTML dialog. The dialog is passed the
// given arguments as a JSON string, and returns its result as a JSON string
// through json_retval.
virtual void ShowModalHTMLDialog(const GURL& url, int width, int height,
const std::string& json_arguments,
std::string* json_retval) {
}
// Displays a JavaScript alert panel associated with the given view. Clients
// should visually indicate that this panel comes from JavaScript and some
// information about the originating frame (at least the domain). The panel
// should have a single OK button.
virtual void RunJavaScriptAlert(WebKit::WebFrame* webframe,
const std::wstring& message) {
}
// Displays a JavaScript confirm panel associated with the given view.
// Clients should visually indicate that this panel comes
// from JavaScript. The panel should have two buttons, e.g. "OK" and
// "Cancel". Returns true if the user hit OK, or false if the user hit Cancel.
virtual bool RunJavaScriptConfirm(WebKit::WebFrame* webframe,
const std::wstring& message) {
return false;
}
// Displays a JavaScript text input panel associated with the given view.
// Clients should visually indicate that this panel comes from JavaScript.
// The panel should have two buttons, e.g. "OK" and "Cancel", and an area to
// type text. The default_value should appear as the initial text in the
// panel when it is shown. If the user hit OK, returns true and fills result
// with the text in the box. The value of result is undefined if the user
// hit Cancel.
virtual bool RunJavaScriptPrompt(WebKit::WebFrame* webframe,
const std::wstring& message,
const std::wstring& default_value,
std::wstring* result) {
return false;
}
// Sets the status bar text.
virtual void SetStatusbarText(WebView* webview,
const std::wstring& message) { }
// Displays a "before unload" confirm panel associated with the given view.
// The panel should have two buttons, e.g. "OK" and "Cancel", where OK means
// that the navigation should continue, and Cancel means that the navigation
// should be cancelled, leaving the user on the current page. Returns true
// if the user hit OK, or false if the user hit Cancel.
virtual bool RunBeforeUnloadConfirm(WebKit::WebFrame* webframe,
const std::wstring& message) {
return true; // OK, continue to navigate away
}
// Tells the client that we're hovering over a link with a given URL,
// if the node is not a link, the URL will be an empty GURL.
virtual void UpdateTargetURL(WebView* webview,
const GURL& url) {
}
// Called to display a file chooser prompt. The prompt should be pre-
// populated with the given initial_filename string. The WebViewDelegate
// will own the WebFileChooserCallback object and is responsible for
// freeing it.
virtual void RunFileChooser(bool multi_select,
const string16& title,
const FilePath& initial_filename,
WebFileChooserCallback* file_chooser) {
delete file_chooser;
}
// @abstract Shows a context menu with commands relevant to a specific
// element on the current page.
// @param webview The WebView sending the delegate method.
// @param node_type The type of the node(s) the context menu is being
// invoked on
// @param x The x position of the mouse pointer (relative to the webview)
// @param y The y position of the mouse pointer (relative to the webview)
// @param link_url The absolute URL of the link that contains the node the
// mouse right clicked on
// @param image_url The absolute URL of the image that the mouse right
// clicked on
// @param page_url The URL of the page the mouse right clicked on
// @param frame_url The URL of the subframe the mouse right clicked on
// @param media_params Extra attributed needed by the context menu for
// media elements.
// @param selection_text The raw text of the selection that the mouse right
// clicked on
// @param misspelled_word The editable (possibily) misspelled word
// in the Editor on which dictionary lookup for suggestions will be done.
// @param edit_flags which edit operations the renderer believes are available
// @param security_info
// @param frame_charset which indicates the character encoding of
// the currently focused frame.
virtual void ShowContextMenu(WebView* webview,
ContextNodeType node_type,
int x,
int y,
const GURL& link_url,
const GURL& image_url,
const GURL& page_url,
const GURL& frame_url,
const ContextMenuMediaParams& media_params,
const std::wstring& selection_text,
const std::wstring& misspelled_word,
int edit_flags,
const std::string& security_info,
const std::string& frame_charset) {
}
// Starts a drag session with the supplied contextual information.
// webview: The WebView sending the delegate method.
// drop_data: a WebDropData struct which should contain all the necessary
// information for dragging data out of the webview.
virtual void StartDragging(WebView* webview,
const WebKit::WebDragData& drag_data) {
}
// Returns the focus to the client.
// reverse: Whether the focus should go to the previous (if true) or the next
// focusable element.
virtual void TakeFocus(WebView* webview, bool reverse) {
}
// Displays JS out-of-memory warning in the infobar
virtual void JSOutOfMemory() {
}
// EditorDelegate ----------------------------------------------------------
// These methods exist primarily to allow a specialized executable to record
// edit events for testing purposes. Most embedders are not expected to
// override them. In fact, by default these editor delegate methods aren't
// even called by the EditorClient, for performance reasons. To enable them,
// call WebView::SetUseEditorDelegate(true) for each WebView.
virtual bool ShouldBeginEditing(WebView* webview, std::wstring range) {
return true;
}
virtual bool ShouldEndEditing(WebView* webview, std::wstring range) {
return true;
}
virtual bool ShouldInsertNode(WebView* webview,
std::wstring node,
std::wstring range,
std::wstring action) {
return true;
}
virtual bool ShouldInsertText(WebView* webview,
std::wstring text,
std::wstring range,
std::wstring action) {
return true;
}
virtual bool ShouldChangeSelectedRange(WebView* webview,
std::wstring fromRange,
std::wstring toRange,
std::wstring affinity,
bool stillSelecting) {
return true;
}
virtual bool ShouldDeleteRange(WebView* webview, std::wstring range) {
return true;
}
virtual bool ShouldApplyStyle(WebView* webview,
std::wstring style,
std::wstring range) {
return true;
}
virtual bool SmartInsertDeleteEnabled() {
return true;
}
virtual bool IsSelectTrailingWhitespaceEnabled() {
#if defined(OS_WIN)
return true;
#else
return false;
#endif
}
virtual void DidBeginEditing() { }
virtual void DidChangeSelection(bool is_empty_selection) { }
virtual void DidChangeContents() { }
virtual void DidEndEditing() { }
// Notification that a user metric has occurred.
virtual void UserMetricsRecordAction(const std::wstring& action) { }
virtual void UserMetricsRecordComputedAction(const std::wstring& action) {
UserMetricsRecordAction(action);
}
// -------------------------------------------------------------------------
// Notification that a request to download an image has completed. |errored|
// indicates if there was a network error. The image is empty if there was
// a network error, the contents of the page couldn't by converted to an
// image, or the response from the host was not 200.
// NOTE: image is empty if the response didn't contain image data.
virtual void DidDownloadImage(int id,
const GURL& image_url,
bool errored,
const SkBitmap& image) {
}
// History Related ---------------------------------------------------------
// Tells the embedder to navigate back or forward in session history by the
// given offset (relative to the current position in session history).
virtual void NavigateBackForwardSoon(int offset) {
}
// Returns how many entries are in the back and forward lists, respectively.
virtual int GetHistoryBackListCount() {
return 0;
}
virtual int GetHistoryForwardListCount() {
return 0;
}
// Notification that the form state of an element in the document, scroll
// position, or possibly something else has changed that affects session
// history (HistoryItem). This function will be called frequently, so the
// implementor should not perform intensive operations in this notification.
virtual void OnNavStateChanged(WebView* webview) { }
// -------------------------------------------------------------------------
// Tell the delegate the tooltip text and its directionality hint for the
// current mouse position.
virtual void SetTooltipText(WebView* webview,
const std::wstring& tooltip_text,
WebKit::WebTextDirection text_direction_hint) { }
// Downloading -------------------------------------------------------------
virtual void DownloadUrl(const GURL& url, const GURL& referrer) { }
// InspectorClient ---------------------------------------------------------
virtual void UpdateInspectorSettings(const std::wstring& raw_settings) { }
// DevTools ----------------------------------------------------------------
virtual WebDevToolsAgentDelegate* GetWebDevToolsAgentDelegate() {
return NULL;
}
// Selection clipboard -----------------------------------------------------
// Request the text on the selection clipboard be sent back to the webview
// so it can be inserted into the current focus area. In response to this call
// the delegate should get the text and send it to the WebView via
// InsertText().
virtual void PasteFromSelectionClipboard() { }
// Editor Client -----------------------------------------------------------
// Returns true if the word is spelled correctly. The word may begin or end
// with whitespace or punctuation, so the implementor should be sure to handle
// these cases.
//
// If the word is misspelled (returns false), the given first and last
// indices (inclusive) will be filled with the offsets of the boundary of the
// word within the given buffer. The out pointers must be specified. If the
// word is correctly spelled (returns true), they will be set to (0,0).
virtual void SpellCheck(const std::wstring& word, int* misspell_location,
int* misspell_length) {
*misspell_location = *misspell_length = 0;
}
// Computes an auto correct word for a misspelled word. If no word is found,
// empty string is computed.
virtual std::wstring GetAutoCorrectWord(const std::wstring& misspelled_word) {
return std::wstring();
}
// Changes the state of the input method editor.
virtual void SetInputMethodState(bool enabled) { }
// Asks the user to print the page or a specific frame. Called in response to
// a window.print() call.
virtual void ScriptedPrint(WebKit::WebFrame* frame) { }
// Called when an item was added to the history
virtual void DidAddHistoryItem() { }
WebViewDelegate() { }
protected:
~WebViewDelegate() { }
};
#endif // WEBKIT_GLUE_WEBVIEW_DELEGATE_H_