blob: 8263f74bcbf03827e32b0d6e127bc991e4bcc0be [file] [log] [blame]
// Copyright (c) 2006-2008 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.
#ifndef WEBKIT_GLUE_H__
#define WEBKIT_GLUE_H__
#include <string>
#include <vector>
#ifdef _WIN32
#include <windows.h>
#endif
#include "base/string16.h"
#include "webkit/glue/webplugin.h"
// We do not include the header files for these interfaces since this header
// file is included by code in webkit/port
class SharedCursor;
class WebView;
class WebViewDelegate;
class WebRequest;
class WebFrame;
class WebFrameImpl;
class GURL;
struct _NPNetscapeFuncs;
typedef _NPNetscapeFuncs NPNetscapeFuncs;
#ifdef _WIN32
struct IMLangFontLink2;
#endif
namespace WebCore {
class Document;
class Frame;
} // namespace WebCore
class SkBitmap;
namespace webkit_glue {
//-----------------------------------------------------------------------------
// Functions implemented by JS engines.
void SetJavaScriptFlags(const std::wstring& flags);
void SetRecordPlaybackMode(bool value);
//-----------------------------------------------------------------------------
// Functions implemented by WebKit, called by the embedder:
// Turns on "layout test" mode, which tries to mimic the font and widget sizing
// of the Mac DumpRenderTree.
void SetLayoutTestMode(bool enable);
bool IsLayoutTestMode();
#if defined(OS_WIN)
// Returns the com object pointer for the FontLink interface. This is the
// default way to do this operation. It can be called directly from
// GetLangFontLink.
IMLangFontLink2* GetLangFontLinkHelper();
// Returns the monitor information corresponding to the window.
// This is the default implementation.
MONITORINFOEX GetMonitorInfoForWindowHelper(HWND window);
#endif
// Returns the text of the document element.
std::wstring DumpDocumentText(WebFrame* web_frame);
// Returns the text of the document element and optionally its child frames.
// If recursive is false, this is equivalent to DumpDocumentText followed by
// a newline. If recursive is true, it recursively dumps all frames as text.
std::wstring DumpFramesAsText(WebFrame* web_frame, bool recursive);
// Returns the renderer's description of its tree (its externalRepresentation).
std::wstring DumpRenderer(WebFrame* web_frame);
// Returns a dump of the scroll position of the webframe.
std::wstring DumpFrameScrollPosition(WebFrame* web_frame, bool recursive);
// Returns a representation of the back/forward list.
void DumpBackForwardList(WebView* view, void* previous_history_item,
std::wstring* result);
// Cleans up state left over from the previous test run.
void ResetBeforeTestRun(WebView* view);
// Returns the WebKit version (major.minor).
std::string GetWebKitVersion();
// Called to override the default user agent with a custom one. Call this
// before anyone actually asks for the user agent in order to prevent
// inconsistent behavior.
void SetUserAgent(const std::string& new_user_agent);
// Returns the user agent, which is usually the default user agent but may be
// overriden by a call to SetUserAgent() (which should be done at startup).
const std::string& GetUserAgent();
// Creates serialized state for the specified URL. This is a variant of
// HistoryItemToString (in glue_serialize) that is used during session restore
// if the saved state is empty.
std::string CreateHistoryStateForURL(const GURL& url);
#ifndef NDEBUG
// Checks various important objects to see if there are any in memory, and
// calls AppendToLog with any leaked objects. Designed to be called on shutdown
void CheckForLeaks();
#endif
// Decodes the image from the data in |image_data| into |image|.
// Returns false if the image could not be decoded.
bool DecodeImage(const std::string& image_data, SkBitmap* image);
//-----------------------------------------------------------------------------
// Functions implemented by the embedder, called by WebKit:
// This function is called to request a prefetch of the DNS resolution for the
// provided hostname.
void PrefetchDns(const std::string& hostname);
// This function is called to request a prefetch of the entire URL, loading it
// into our cache for (expected) future needs. The given URL may NOT be in
// canonical form and it will NOT be null-terminated; use the length instead.
void PrecacheUrl(const char16* url, int url_length);
// This function is called to add a line to the application's log file.
void AppendToLog(const char* filename, int line, const char* message);
// Get the mime type (if any) that is associated with the given file extension.
// Returns true if a corresponding mime type exists.
bool GetMimeTypeFromExtension(std::wstring &ext, std::string *mime_type);
// Get the mime type (if any) that is associated with the given file.
// Returns true if a corresponding mime type exists.
bool GetMimeTypeFromFile(const std::wstring &file_path, std::string *mime_type);
// Get the preferred extension (if any) associated with the given mime type.
// Returns true if a corresponding file extension exists.
bool GetPreferredExtensionForMimeType(const std::string& mime_type,
std::wstring *ext);
#ifdef _WIN32
// Returns the com object pointer for the FontLink interface
IMLangFontLink2* GetLangFontLink();
#endif
// Sets a cookie string for the given URL. The policy_url argument indicates
// the URL of the topmost frame, which may be useful for determining whether or
// not to allow this cookie setting. NOTE: the cookie string is a standard
// cookie string of the form "name=value; option1=x; option2=y"
void SetCookie(const GURL& url, const GURL& policy_url,
const std::string& cookie);
// Returns all cookies in the form "a=1; b=2; c=3" for the given URL. NOTE:
// this string should not include any options that may have been specified when
// the cookie was set. Semicolons delimit individual cookies in this context.
std::string GetCookies(const GURL& url, const GURL& policy_url);
// Gather usage statistics from the in-memory cache and inform our host, if
// applicable.
void NotifyCacheStats();
// Glue to get resources from the embedder.
// Gets a localized string given a message id. Returns an empty string if the
// message id is not found.
std::wstring GetLocalizedString(int message_id);
// Returns the raw data for a resource. This resource must have been
// specified as BINDATA in the relevant .rc file.
std::string GetDataResource(int resource_id);
// Returns an SkBitmap for a resource. This resource must have been
// specified as BINDATA in the relevant .rc file.
SkBitmap* GetBitmapResource(int resource_id);
#ifdef _WIN32
// Loads and returns a cursor.
HCURSOR LoadCursor(int cursor_id);
#endif
// Glue to access the clipboard.
// Clear the clipboard. It is usually a good idea to clear the clipboard
// before writing content to the clipboard.
void ClipboardClear();
// Adds UNICODE and ASCII text to the clipboard.
void ClipboardWriteText(const std::wstring& text);
// Adds HTML to the clipboard. The url parameter is optional, but especially
// useful if the HTML fragment contains relative links
void ClipboardWriteHTML(const std::wstring& html, const GURL& url);
// Adds a bookmark to the clipboard
void ClipboardWriteBookmark(const std::wstring& title, const GURL& url);
// Adds a bitmap to the clipboard
void ClipboardWriteBitmap(const SkBitmap& bitmap);
// Used by WebKit to determine whether WebKit wrote the clipboard last
void ClipboardWriteWebSmartPaste();
// Tests whether the clipboard contains a certain format
bool ClipboardIsFormatAvailable(unsigned int format);
// Reads UNICODE text from the clipboard, if available.
void ClipboardReadText(std::wstring* result);
// Reads ASCII text from the clipboard, if available.
void ClipboardReadAsciiText(std::string* result);
// Reads HTML from the clipboard, if available.
void ClipboardReadHTML(std::wstring* markup, GURL* url);
// Gets the directory where the application data and libraries exist. This
// may be a versioned subdirectory, or it may be the same directory as the
// GetExeDirectory(), depending on the embedder's implementation.
// Path is an output parameter to receive the path.
// Returns true if successful, false otherwise.
bool GetApplicationDirectory(std::wstring *path);
// Gets the URL where the inspector's HTML file resides. It must use the
// protocol returned by GetUIResourceProtocol.
GURL GetInspectorURL();
// Gets the protocol that is used for all user interface resources, including
// the Inspector. It must end with "-resource".
std::string GetUIResourceProtocol();
// Gets the directory where the launching executable resides on disk.
// Path is an output parameter to receive the path.
// Returns true if successful, false otherwise.
bool GetExeDirectory(std::wstring *path);
// Embedders implement this function to return the list of plugins to Webkit.
bool GetPlugins(bool refresh, std::vector<WebPluginInfo>* plugins);
// Returns true if the plugins run in the same process as the renderer, and
// false otherwise.
bool IsPluginRunningInRendererProcess();
#ifdef _WIN32
// Asks the browser to load the font.
bool EnsureFontLoaded(HFONT font);
// Returns the monitor information corresponding to the window.
MONITORINFOEX GetMonitorInfoForWindow(HWND window);
#endif
// Functions implemented by webkit_glue for WebKit ----------------------------
// Notifies the embedder that a form element value has changed. The document
// pointer, which MAY BE NULL, indicates the document that owns the form
// element that changed, if any.
void NotifyFormStateChanged(const WebCore::Document* document);
// Returns a bool indicating if the Null plugin should be enabled or not.
bool IsDefaultPluginEnabled();
#ifdef _WIN32
// Downloads the file specified by the URL. On sucess a WM_COPYDATA message
// will be sent to the caller_window.
bool DownloadUrl(const std::string& url, HWND caller_window);
#endif
// Returns the plugin finder URL.
bool GetPluginFinderURL(std::string* plugin_finder_url);
// Returns the locale that this instance of webkit is running as. This is of
// the form language-country (e.g., en-US or pt-BR).
std::wstring GetWebKitLocale();
// Notifies the browser that the current page runs out of JS memory.
void NotifyJSOutOfMemory(WebCore::Frame* frame);
} // namespace webkit_glue
#endif // WEBKIT_GLUE_H__