webkitwebsettings.cpp [plain text]
#include "config.h"
#include "webkitwebsettings.h"
#include "EditingBehavior.h"
#include "FileSystem.h"
#include "KURL.h"
#include "PluginDatabase.h"
#include "UserAgentGtk.h"
#include "webkitenumtypes.h"
#include "webkitglobalsprivate.h"
#include "webkitversion.h"
#include "webkitwebsettingsprivate.h"
#include <wtf/gobject/GOwnPtr.h>
#include <wtf/text/CString.h>
#include <wtf/text/StringConcatenate.h>
#include <glib/gi18n-lib.h>
using namespace WebCore;
G_DEFINE_TYPE(WebKitWebSettings, webkit_web_settings, G_TYPE_OBJECT)
enum {
PROP_0,
PROP_DEFAULT_ENCODING,
PROP_CURSIVE_FONT_FAMILY,
PROP_DEFAULT_FONT_FAMILY,
PROP_FANTASY_FONT_FAMILY,
PROP_MONOSPACE_FONT_FAMILY,
PROP_SANS_SERIF_FONT_FAMILY,
PROP_SERIF_FONT_FAMILY,
PROP_DEFAULT_FONT_SIZE,
PROP_DEFAULT_MONOSPACE_FONT_SIZE,
PROP_MINIMUM_FONT_SIZE,
PROP_MINIMUM_LOGICAL_FONT_SIZE,
PROP_ENFORCE_96_DPI,
PROP_AUTO_LOAD_IMAGES,
PROP_AUTO_SHRINK_IMAGES,
PROP_RESPECT_IMAGE_ORIENTATION,
PROP_PRINT_BACKGROUNDS,
PROP_ENABLE_SCRIPTS,
PROP_ENABLE_PLUGINS,
PROP_RESIZABLE_TEXT_AREAS,
PROP_USER_STYLESHEET_URI,
PROP_ZOOM_STEP,
PROP_ENABLE_DEVELOPER_EXTRAS,
PROP_ENABLE_PRIVATE_BROWSING,
PROP_ENABLE_SPELL_CHECKING,
PROP_SPELL_CHECKING_LANGUAGES,
PROP_ENABLE_CARET_BROWSING,
PROP_ENABLE_HTML5_DATABASE,
PROP_ENABLE_HTML5_LOCAL_STORAGE,
PROP_HTML5_LOCAL_STORAGE_DATABASE_PATH,
PROP_ENABLE_XSS_AUDITOR,
PROP_ENABLE_SPATIAL_NAVIGATION,
PROP_ENABLE_FRAME_FLATTENING,
PROP_USER_AGENT,
PROP_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY,
PROP_JAVASCRIPT_CAN_ACCESS_CLIPBOARD,
PROP_ENABLE_OFFLINE_WEB_APPLICATION_CACHE,
PROP_EDITING_BEHAVIOR,
PROP_ENABLE_UNIVERSAL_ACCESS_FROM_FILE_URIS,
PROP_ENABLE_FILE_ACCESS_FROM_FILE_URIS,
PROP_ENABLE_DOM_PASTE,
PROP_TAB_KEY_CYCLES_THROUGH_ELEMENTS,
PROP_ENABLE_DEFAULT_CONTEXT_MENU,
PROP_ENABLE_SITE_SPECIFIC_QUIRKS,
PROP_ENABLE_PAGE_CACHE,
PROP_AUTO_RESIZE_WINDOW,
PROP_ENABLE_JAVA_APPLET,
PROP_ENABLE_HYPERLINK_AUDITING,
PROP_ENABLE_FULLSCREEN,
PROP_ENABLE_DNS_PREFETCHING,
PROP_ENABLE_WEBGL,
PROP_ENABLE_MEDIA_STREAM,
PROP_ENABLE_WEB_AUDIO,
PROP_ENABLE_ACCELERATED_COMPOSITING,
PROP_ENABLE_SMOOTH_SCROLLING,
PROP_MEDIA_PLAYBACK_REQUIRES_USER_GESTURE,
PROP_MEDIA_PLAYBACK_ALLOWS_INLINE,
PROP_ENABLE_CSS_SHADERS,
PROP_ENABLE_RUNNING_OF_INSECURE_CONTENT,
PROP_ENABLE_DISPLAY_OF_INSECURE_CONTENT
};
static void webkit_web_settings_finalize(GObject* object);
static void webkit_web_settings_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec);
static void webkit_web_settings_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec);
static void webkit_web_settings_class_init(WebKitWebSettingsClass* klass)
{
GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
gobject_class->finalize = webkit_web_settings_finalize;
gobject_class->set_property = webkit_web_settings_set_property;
gobject_class->get_property = webkit_web_settings_get_property;
webkitInit();
GParamFlags flags = (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT);
g_object_class_install_property(gobject_class,
PROP_DEFAULT_ENCODING,
g_param_spec_string(
"default-encoding",
_("Default Encoding"),
_("The default encoding used to display text."),
"iso-8859-1",
flags));
g_object_class_install_property(gobject_class,
PROP_CURSIVE_FONT_FAMILY,
g_param_spec_string(
"cursive-font-family",
_("Cursive Font Family"),
_("The default Cursive font family used to display text."),
"serif",
flags));
g_object_class_install_property(gobject_class,
PROP_DEFAULT_FONT_FAMILY,
g_param_spec_string(
"default-font-family",
_("Default Font Family"),
_("The default font family used to display text."),
"sans-serif",
flags));
g_object_class_install_property(gobject_class,
PROP_FANTASY_FONT_FAMILY,
g_param_spec_string(
"fantasy-font-family",
_("Fantasy Font Family"),
_("The default Fantasy font family used to display text."),
"serif",
flags));
g_object_class_install_property(gobject_class,
PROP_MONOSPACE_FONT_FAMILY,
g_param_spec_string(
"monospace-font-family",
_("Monospace Font Family"),
_("The default font family used to display monospace text."),
"monospace",
flags));
g_object_class_install_property(gobject_class,
PROP_SANS_SERIF_FONT_FAMILY,
g_param_spec_string(
"sans-serif-font-family",
_("Sans Serif Font Family"),
_("The default Sans Serif font family used to display text."),
"sans-serif",
flags));
g_object_class_install_property(gobject_class,
PROP_SERIF_FONT_FAMILY,
g_param_spec_string(
"serif-font-family",
_("Serif Font Family"),
_("The default Serif font family used to display text."),
"serif",
flags));
g_object_class_install_property(gobject_class,
PROP_DEFAULT_FONT_SIZE,
g_param_spec_int(
"default-font-size",
_("Default Font Size"),
_("The default font size used to display text."),
5, G_MAXINT, 12,
flags));
g_object_class_install_property(gobject_class,
PROP_DEFAULT_MONOSPACE_FONT_SIZE,
g_param_spec_int(
"default-monospace-font-size",
_("Default Monospace Font Size"),
_("The default font size used to display monospace text."),
5, G_MAXINT, 10,
flags));
g_object_class_install_property(gobject_class,
PROP_MINIMUM_FONT_SIZE,
g_param_spec_int(
"minimum-font-size",
_("Minimum Font Size"),
_("The minimum font size used to display text."),
0, G_MAXINT, 5,
flags));
g_object_class_install_property(gobject_class,
PROP_MINIMUM_LOGICAL_FONT_SIZE,
g_param_spec_int(
"minimum-logical-font-size",
_("Minimum Logical Font Size"),
_("The minimum logical font size used to display text."),
1, G_MAXINT, 5,
flags));
g_object_class_install_property(gobject_class,
PROP_ENFORCE_96_DPI,
g_param_spec_boolean(
"enforce-96-dpi",
_("Enforce 96 DPI"),
_("Enforce a resolution of 96 DPI"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_AUTO_LOAD_IMAGES,
g_param_spec_boolean(
"auto-load-images",
_("Auto Load Images"),
_("Load images automatically."),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_AUTO_SHRINK_IMAGES,
g_param_spec_boolean(
"auto-shrink-images",
_("Auto Shrink Images"),
_("Automatically shrink standalone images to fit."),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_RESPECT_IMAGE_ORIENTATION,
g_param_spec_boolean(
"respect-image-orientation",
_("Respect Image Orientation"),
_("Whether WebKit should respect image orientation."),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_PRINT_BACKGROUNDS,
g_param_spec_boolean(
"print-backgrounds",
_("Print Backgrounds"),
_("Whether background images should be printed."),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_SCRIPTS,
g_param_spec_boolean(
"enable-scripts",
_("Enable Scripts"),
_("Enable embedded scripting languages."),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_PLUGINS,
g_param_spec_boolean(
"enable-plugins",
_("Enable Plugins"),
_("Enable embedded plugin objects."),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_RESIZABLE_TEXT_AREAS,
g_param_spec_boolean(
"resizable-text-areas",
_("Resizable Text Areas"),
_("Whether text areas are resizable."),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_USER_STYLESHEET_URI,
g_param_spec_string("user-stylesheet-uri",
_("User Stylesheet URI"),
_("The URI of a stylesheet that is applied to every page."),
0,
flags));
g_object_class_install_property(gobject_class,
PROP_ZOOM_STEP,
g_param_spec_float(
"zoom-step",
_("Zoom Stepping Value"),
_("The value by which the zoom level is changed when zooming in or out."),
0.0f, G_MAXFLOAT, 0.1f,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_DEVELOPER_EXTRAS,
g_param_spec_boolean(
"enable-developer-extras",
_("Enable Developer Extras"),
_("Enables special extensions that help developers"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_PRIVATE_BROWSING,
g_param_spec_boolean(
"enable-private-browsing",
_("Enable Private Browsing"),
_("Enables private browsing mode"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_SPELL_CHECKING,
g_param_spec_boolean(
"enable-spell-checking",
_("Enable Spell Checking"),
_("Enables spell checking while typing"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_SPELL_CHECKING_LANGUAGES,
g_param_spec_string(
"spell-checking-languages",
_("Languages to use for spell checking"),
_("Comma separated list of languages to use for spell checking"),
0,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_CARET_BROWSING,
g_param_spec_boolean("enable-caret-browsing",
_("Enable Caret Browsing"),
_("Whether to enable accessibility enhanced keyboard navigation"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_HTML5_DATABASE,
g_param_spec_boolean("enable-html5-database",
_("Enable HTML5 Database"),
_("Whether to enable HTML5 database support"),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_HTML5_LOCAL_STORAGE,
g_param_spec_boolean("enable-html5-local-storage",
_("Enable HTML5 Local Storage"),
_("Whether to enable HTML5 Local Storage support"),
TRUE,
flags));
GOwnPtr<gchar> localStoragePath(g_build_filename(g_get_user_data_dir(), "webkit", "databases", NULL));
g_object_class_install_property(gobject_class,
PROP_HTML5_LOCAL_STORAGE_DATABASE_PATH,
g_param_spec_string("html5-local-storage-database-path",
_("Local Storage Database Path"),
_("The path to where HTML5 Local Storage databases are stored."),
localStoragePath.get(),
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_XSS_AUDITOR,
g_param_spec_boolean("enable-xss-auditor",
_("Enable XSS Auditor"),
_("Whether to enable the XSS auditor"),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_SPATIAL_NAVIGATION,
g_param_spec_boolean("enable-spatial-navigation",
_("Enable Spatial Navigation"),
_("Whether to enable Spatial Navigation"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_FRAME_FLATTENING,
g_param_spec_boolean("enable-frame-flattening",
_("Enable Frame Flattening"),
_("Whether to enable Frame Flattening"),
FALSE,
flags));
g_object_class_install_property(gobject_class, PROP_USER_AGENT,
g_param_spec_string("user-agent",
_("User Agent"),
_("The User-Agent string used by WebKitGtk"),
"", flags));
g_object_class_install_property(gobject_class,
PROP_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY,
g_param_spec_boolean("javascript-can-open-windows-automatically",
_("JavaScript can open windows automatically"),
_("Whether JavaScript can open windows automatically"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_JAVASCRIPT_CAN_ACCESS_CLIPBOARD,
g_param_spec_boolean("javascript-can-access-clipboard",
_("JavaScript can access Clipboard"),
_("Whether JavaScript can access Clipboard"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_OFFLINE_WEB_APPLICATION_CACHE,
g_param_spec_boolean("enable-offline-web-application-cache",
_("Enable offline web application cache"),
_("Whether to enable offline web application cache"),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_EDITING_BEHAVIOR,
g_param_spec_enum("editing-behavior",
_("Editing behavior"),
_("The behavior mode to use in editing mode"),
WEBKIT_TYPE_EDITING_BEHAVIOR,
WEBKIT_EDITING_BEHAVIOR_UNIX,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_UNIVERSAL_ACCESS_FROM_FILE_URIS,
g_param_spec_boolean("enable-universal-access-from-file-uris",
_("Enable universal access from file URIs"),
_("Whether to allow universal access from file URIs"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_DOM_PASTE,
g_param_spec_boolean("enable-dom-paste",
_("Enable DOM paste"),
_("Whether to enable DOM paste"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_TAB_KEY_CYCLES_THROUGH_ELEMENTS,
g_param_spec_boolean("tab-key-cycles-through-elements",
_("Tab key cycles through elements"),
_("Whether the tab key cycles through elements on the page."),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_DEFAULT_CONTEXT_MENU,
g_param_spec_boolean(
"enable-default-context-menu",
_("Enable Default Context Menu"),
_("Enables the handling of right-clicks for the creation of the default context menu"),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_SITE_SPECIFIC_QUIRKS,
g_param_spec_boolean(
"enable-site-specific-quirks",
_("Enable Site Specific Quirks"),
_("Enables the site-specific compatibility workarounds"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_PAGE_CACHE,
g_param_spec_boolean("enable-page-cache",
_("Enable page cache"),
_("Whether the page cache should be used"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_AUTO_RESIZE_WINDOW,
g_param_spec_boolean("auto-resize-window",
_("Auto Resize Window"),
_("Automatically resize the toplevel window when a page requests it"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_FILE_ACCESS_FROM_FILE_URIS,
g_param_spec_boolean("enable-file-access-from-file-uris",
"Enable file access from file URIs",
"Controls file access for file:// URIs.",
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_JAVA_APPLET,
g_param_spec_boolean("enable-java-applet",
_("Enable Java Applet"),
_("Whether Java Applet support through <applet> should be enabled"),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_HYPERLINK_AUDITING,
g_param_spec_boolean("enable-hyperlink-auditing",
_("Enable Hyperlink Auditing"),
_("Whether <a ping> should be able to send pings"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_FULLSCREEN,
g_param_spec_boolean("enable-fullscreen",
_("Enable Fullscreen"),
_("Whether the Mozilla style API should be enabled."),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_WEBGL,
g_param_spec_boolean("enable-webgl",
_("Enable WebGL"),
_("Whether WebGL content should be rendered"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_ACCELERATED_COMPOSITING,
g_param_spec_boolean("enable-accelerated-compositing",
_("Enable accelerated compositing"),
_("Whether accelerated compositing should be enabled"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_WEB_AUDIO,
g_param_spec_boolean("enable-webaudio",
_("Enable WebAudio"),
_("Whether WebAudio content should be handled"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_DNS_PREFETCHING,
g_param_spec_boolean("enable-dns-prefetching",
_("WebKit prefetches domain names"),
_("Whether WebKit prefetches domain names"),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_MEDIA_STREAM,
g_param_spec_boolean("enable-media-stream",
_("Enable Media Stream"),
_("Whether Media Stream should be enabled"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_SMOOTH_SCROLLING,
g_param_spec_boolean("enable-smooth-scrolling",
_("Enable smooth scrolling"),
_("Whether to enable smooth scrolling"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_MEDIA_PLAYBACK_REQUIRES_USER_GESTURE,
g_param_spec_boolean("media-playback-requires-user-gesture",
_("Media playback requires user gesture"),
_("Whether media playback requires user gesture"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_MEDIA_PLAYBACK_ALLOWS_INLINE,
g_param_spec_boolean("media-playback-allows-inline",
_("Media playback allows inline"),
_("Whether media playback allows inline"),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_CSS_SHADERS,
g_param_spec_boolean("enable-css-shaders",
_("Enable CSS shaders"),
_("Whether to enable css shaders"),
FALSE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_DISPLAY_OF_INSECURE_CONTENT,
g_param_spec_boolean("enable-display-of-insecure-content",
_("Enable display of insecure content"),
_("Whether non-HTTPS resources can display on HTTPS pages."),
TRUE,
flags));
g_object_class_install_property(gobject_class,
PROP_ENABLE_RUNNING_OF_INSECURE_CONTENT,
g_param_spec_boolean("enable-running-of-insecure-content",
_("Enable running of insecure content"),
_("Whether non-HTTPS resources can run on HTTPS pages."),
TRUE,
flags));
}
static void webkit_web_settings_init(WebKitWebSettings* web_settings)
{
web_settings->priv = new WebKitWebSettingsPrivate;
}
static void webkit_web_settings_finalize(GObject* object)
{
delete WEBKIT_WEB_SETTINGS(object)->priv;
G_OBJECT_CLASS(webkit_web_settings_parent_class)->finalize(object);
}
static void webkit_web_settings_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
{
WebKitWebSettings* web_settings = WEBKIT_WEB_SETTINGS(object);
WebKitWebSettingsPrivate* priv = web_settings->priv;
switch(prop_id) {
case PROP_DEFAULT_ENCODING:
priv->defaultEncoding = g_value_get_string(value);
break;
case PROP_CURSIVE_FONT_FAMILY:
priv->cursiveFontFamily = g_value_get_string(value);
break;
case PROP_DEFAULT_FONT_FAMILY:
priv->defaultFontFamily = g_value_get_string(value);
break;
case PROP_FANTASY_FONT_FAMILY:
priv->fantasyFontFamily = g_value_get_string(value);
break;
case PROP_MONOSPACE_FONT_FAMILY:
priv->monospaceFontFamily = g_value_get_string(value);
break;
case PROP_SANS_SERIF_FONT_FAMILY:
priv->sansSerifFontFamily = g_value_get_string(value);
break;
case PROP_SERIF_FONT_FAMILY:
priv->serifFontFamily = g_value_get_string(value);
break;
case PROP_DEFAULT_FONT_SIZE:
priv->defaultFontSize = g_value_get_int(value);
break;
case PROP_DEFAULT_MONOSPACE_FONT_SIZE:
priv->defaultMonospaceFontSize = g_value_get_int(value);
break;
case PROP_MINIMUM_FONT_SIZE:
priv->minimumFontSize = g_value_get_int(value);
break;
case PROP_MINIMUM_LOGICAL_FONT_SIZE:
priv->minimumLogicalFontSize = g_value_get_int(value);
break;
case PROP_ENFORCE_96_DPI:
priv->enforce96DPI = g_value_get_boolean(value);
break;
case PROP_AUTO_LOAD_IMAGES:
priv->autoLoadImages = g_value_get_boolean(value);
break;
case PROP_AUTO_SHRINK_IMAGES:
priv->autoShrinkImages = g_value_get_boolean(value);
break;
case PROP_RESPECT_IMAGE_ORIENTATION:
priv->respectImageOrientation = g_value_get_boolean(value);
break;
case PROP_PRINT_BACKGROUNDS:
priv->printBackgrounds = g_value_get_boolean(value);
break;
case PROP_ENABLE_SCRIPTS:
priv->enableScripts = g_value_get_boolean(value);
break;
case PROP_ENABLE_PLUGINS:
priv->enablePlugins = g_value_get_boolean(value);
break;
case PROP_RESIZABLE_TEXT_AREAS:
priv->resizableTextAreas = g_value_get_boolean(value);
break;
case PROP_USER_STYLESHEET_URI:
priv->userStylesheetURI = g_value_get_string(value);
break;
case PROP_ZOOM_STEP:
priv->zoomStep = g_value_get_float(value);
break;
case PROP_ENABLE_DEVELOPER_EXTRAS:
priv->enableDeveloperExtras = g_value_get_boolean(value);
break;
case PROP_ENABLE_PRIVATE_BROWSING:
priv->enablePrivateBrowsing = g_value_get_boolean(value);
break;
case PROP_ENABLE_CARET_BROWSING:
priv->enableCaretBrowsing = g_value_get_boolean(value);
break;
case PROP_ENABLE_HTML5_DATABASE:
priv->enableHTML5Database = g_value_get_boolean(value);
break;
case PROP_ENABLE_HTML5_LOCAL_STORAGE:
priv->enableHTML5LocalStorage = g_value_get_boolean(value);
break;
case PROP_HTML5_LOCAL_STORAGE_DATABASE_PATH:
priv->html5LocalStorageDatabasePath = g_value_get_string(value);
break;
case PROP_ENABLE_SPELL_CHECKING:
priv->enableSpellChecking = g_value_get_boolean(value);
break;
case PROP_SPELL_CHECKING_LANGUAGES:
priv->spellCheckingLanguages = g_value_get_string(value);
break;
case PROP_ENABLE_XSS_AUDITOR:
priv->enableXSSAuditor = g_value_get_boolean(value);
break;
case PROP_ENABLE_SPATIAL_NAVIGATION:
priv->enableSpatialNavigation = g_value_get_boolean(value);
break;
case PROP_ENABLE_FRAME_FLATTENING:
priv->enableFrameFlattening = g_value_get_boolean(value);
break;
case PROP_USER_AGENT:
if (!g_value_get_string(value) || !strlen(g_value_get_string(value)))
priv->userAgent = standardUserAgent().utf8();
else
priv->userAgent = g_value_get_string(value);
break;
case PROP_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY:
priv->javascriptCanOpenWindowsAutomatically = g_value_get_boolean(value);
break;
case PROP_JAVASCRIPT_CAN_ACCESS_CLIPBOARD:
priv->javascriptCanAccessClipboard = g_value_get_boolean(value);
break;
case PROP_ENABLE_OFFLINE_WEB_APPLICATION_CACHE:
priv->enableOfflineWebApplicationCache = g_value_get_boolean(value);
break;
case PROP_EDITING_BEHAVIOR:
priv->editingBehavior = static_cast<WebKitEditingBehavior>(g_value_get_enum(value));
break;
case PROP_ENABLE_UNIVERSAL_ACCESS_FROM_FILE_URIS:
priv->enableUniversalAccessFromFileURIs = g_value_get_boolean(value);
break;
case PROP_ENABLE_FILE_ACCESS_FROM_FILE_URIS:
priv->enableFileAccessFromFileURIs = g_value_get_boolean(value);
break;
case PROP_ENABLE_DOM_PASTE:
priv->enableDOMPaste = g_value_get_boolean(value);
break;
case PROP_TAB_KEY_CYCLES_THROUGH_ELEMENTS:
priv->tabKeyCyclesThroughElements = g_value_get_boolean(value);
break;
case PROP_ENABLE_DEFAULT_CONTEXT_MENU:
priv->enableDefaultContextMenu = g_value_get_boolean(value);
break;
case PROP_ENABLE_SITE_SPECIFIC_QUIRKS:
priv->enableSiteSpecificQuirks = g_value_get_boolean(value);
break;
case PROP_ENABLE_PAGE_CACHE:
priv->enablePageCache = g_value_get_boolean(value);
break;
case PROP_AUTO_RESIZE_WINDOW:
priv->autoResizeWindow = g_value_get_boolean(value);
break;
case PROP_ENABLE_JAVA_APPLET:
priv->enableJavaApplet = g_value_get_boolean(value);
break;
case PROP_ENABLE_HYPERLINK_AUDITING:
priv->enableHyperlinkAuditing = g_value_get_boolean(value);
break;
case PROP_ENABLE_FULLSCREEN:
priv->enableFullscreen = g_value_get_boolean(value);
break;
case PROP_ENABLE_DNS_PREFETCHING:
priv->enableDNSPrefetching = g_value_get_boolean(value);
break;
case PROP_ENABLE_WEBGL:
priv->enableWebgl = g_value_get_boolean(value);
break;
case PROP_ENABLE_MEDIA_STREAM:
priv->enableMediaStream = g_value_get_boolean(value);
break;
case PROP_ENABLE_WEB_AUDIO:
priv->enableWebAudio = g_value_get_boolean(value);
break;
case PROP_ENABLE_ACCELERATED_COMPOSITING:
priv->enableAcceleratedCompositing = g_value_get_boolean(value);
break;
case PROP_ENABLE_SMOOTH_SCROLLING:
priv->enableSmoothScrolling = g_value_get_boolean(value);
break;
case PROP_ENABLE_CSS_SHADERS:
priv->enableCSSShaders = g_value_get_boolean(value);
break;
case PROP_MEDIA_PLAYBACK_REQUIRES_USER_GESTURE:
priv->mediaPlaybackRequiresUserGesture = g_value_get_boolean(value);
break;
case PROP_MEDIA_PLAYBACK_ALLOWS_INLINE:
priv->mediaPlaybackAllowsInline = g_value_get_boolean(value);
break;
case PROP_ENABLE_DISPLAY_OF_INSECURE_CONTENT:
priv->enableDisplayOfInsecureContent = g_value_get_boolean(value);
break;
case PROP_ENABLE_RUNNING_OF_INSECURE_CONTENT:
priv->enableRunningOfInsecureContent = g_value_get_boolean(value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
}
}
static void webkit_web_settings_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)
{
WebKitWebSettings* web_settings = WEBKIT_WEB_SETTINGS(object);
WebKitWebSettingsPrivate* priv = web_settings->priv;
switch (prop_id) {
case PROP_DEFAULT_ENCODING:
g_value_set_string(value, priv->defaultEncoding.data());
break;
case PROP_CURSIVE_FONT_FAMILY:
g_value_set_string(value, priv->cursiveFontFamily.data());
break;
case PROP_DEFAULT_FONT_FAMILY:
g_value_set_string(value, priv->defaultFontFamily.data());
break;
case PROP_FANTASY_FONT_FAMILY:
g_value_set_string(value, priv->fantasyFontFamily.data());
break;
case PROP_MONOSPACE_FONT_FAMILY:
g_value_set_string(value, priv->monospaceFontFamily.data());
break;
case PROP_SANS_SERIF_FONT_FAMILY:
g_value_set_string(value, priv->sansSerifFontFamily.data());
break;
case PROP_SERIF_FONT_FAMILY:
g_value_set_string(value, priv->serifFontFamily.data());
break;
case PROP_DEFAULT_FONT_SIZE:
g_value_set_int(value, priv->defaultFontSize);
break;
case PROP_DEFAULT_MONOSPACE_FONT_SIZE:
g_value_set_int(value, priv->defaultMonospaceFontSize);
break;
case PROP_MINIMUM_FONT_SIZE:
g_value_set_int(value, priv->minimumFontSize);
break;
case PROP_MINIMUM_LOGICAL_FONT_SIZE:
g_value_set_int(value, priv->minimumLogicalFontSize);
break;
case PROP_ENFORCE_96_DPI:
g_value_set_boolean(value, priv->enforce96DPI);
break;
case PROP_AUTO_LOAD_IMAGES:
g_value_set_boolean(value, priv->autoLoadImages);
break;
case PROP_AUTO_SHRINK_IMAGES:
g_value_set_boolean(value, priv->autoShrinkImages);
break;
case PROP_RESPECT_IMAGE_ORIENTATION:
g_value_set_boolean(value, priv->respectImageOrientation);
break;
case PROP_PRINT_BACKGROUNDS:
g_value_set_boolean(value, priv->printBackgrounds);
break;
case PROP_ENABLE_SCRIPTS:
g_value_set_boolean(value, priv->enableScripts);
break;
case PROP_ENABLE_PLUGINS:
g_value_set_boolean(value, priv->enablePlugins);
break;
case PROP_RESIZABLE_TEXT_AREAS:
g_value_set_boolean(value, priv->resizableTextAreas);
break;
case PROP_USER_STYLESHEET_URI:
g_value_set_string(value, priv->userStylesheetURI.data());
break;
case PROP_ZOOM_STEP:
g_value_set_float(value, priv->zoomStep);
break;
case PROP_ENABLE_DEVELOPER_EXTRAS:
g_value_set_boolean(value, priv->enableDeveloperExtras);
break;
case PROP_ENABLE_PRIVATE_BROWSING:
g_value_set_boolean(value, priv->enablePrivateBrowsing);
break;
case PROP_ENABLE_CARET_BROWSING:
g_value_set_boolean(value, priv->enableCaretBrowsing);
break;
case PROP_ENABLE_HTML5_DATABASE:
g_value_set_boolean(value, priv->enableHTML5Database);
break;
case PROP_ENABLE_HTML5_LOCAL_STORAGE:
g_value_set_boolean(value, priv->enableHTML5LocalStorage);
break;
case PROP_HTML5_LOCAL_STORAGE_DATABASE_PATH:
g_value_set_string(value, priv->html5LocalStorageDatabasePath.data());
break;
case PROP_ENABLE_SPELL_CHECKING:
g_value_set_boolean(value, priv->enableSpellChecking);
break;
case PROP_SPELL_CHECKING_LANGUAGES:
g_value_set_string(value, priv->spellCheckingLanguages.data());
break;
case PROP_ENABLE_XSS_AUDITOR:
g_value_set_boolean(value, priv->enableXSSAuditor);
break;
case PROP_ENABLE_SPATIAL_NAVIGATION:
g_value_set_boolean(value, priv->enableSpatialNavigation);
break;
case PROP_ENABLE_FRAME_FLATTENING:
g_value_set_boolean(value, priv->enableFrameFlattening);
break;
case PROP_USER_AGENT:
g_value_set_string(value, priv->userAgent.data());
break;
case PROP_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY:
g_value_set_boolean(value, priv->javascriptCanOpenWindowsAutomatically);
break;
case PROP_JAVASCRIPT_CAN_ACCESS_CLIPBOARD:
g_value_set_boolean(value, priv->javascriptCanAccessClipboard);
break;
case PROP_ENABLE_OFFLINE_WEB_APPLICATION_CACHE:
g_value_set_boolean(value, priv->enableOfflineWebApplicationCache);
break;
case PROP_EDITING_BEHAVIOR:
g_value_set_enum(value, priv->editingBehavior);
break;
case PROP_ENABLE_UNIVERSAL_ACCESS_FROM_FILE_URIS:
g_value_set_boolean(value, priv->enableUniversalAccessFromFileURIs);
break;
case PROP_ENABLE_FILE_ACCESS_FROM_FILE_URIS:
g_value_set_boolean(value, priv->enableFileAccessFromFileURIs);
break;
case PROP_ENABLE_DOM_PASTE:
g_value_set_boolean(value, priv->enableDOMPaste);
break;
case PROP_TAB_KEY_CYCLES_THROUGH_ELEMENTS:
g_value_set_boolean(value, priv->tabKeyCyclesThroughElements);
break;
case PROP_ENABLE_DEFAULT_CONTEXT_MENU:
g_value_set_boolean(value, priv->enableDefaultContextMenu);
break;
case PROP_ENABLE_SITE_SPECIFIC_QUIRKS:
g_value_set_boolean(value, priv->enableSiteSpecificQuirks);
break;
case PROP_ENABLE_PAGE_CACHE:
g_value_set_boolean(value, priv->enablePageCache);
break;
case PROP_AUTO_RESIZE_WINDOW:
g_value_set_boolean(value, priv->autoResizeWindow);
break;
case PROP_ENABLE_JAVA_APPLET:
g_value_set_boolean(value, priv->enableJavaApplet);
break;
case PROP_ENABLE_HYPERLINK_AUDITING:
g_value_set_boolean(value, priv->enableHyperlinkAuditing);
break;
case PROP_ENABLE_FULLSCREEN:
g_value_set_boolean(value, priv->enableFullscreen);
break;
case PROP_ENABLE_DNS_PREFETCHING:
g_value_set_boolean(value, priv->enableDNSPrefetching);
break;
case PROP_ENABLE_WEBGL:
g_value_set_boolean(value, priv->enableWebgl);
break;
case PROP_ENABLE_MEDIA_STREAM:
g_value_set_boolean(value, priv->enableMediaStream);
break;
case PROP_ENABLE_WEB_AUDIO:
g_value_set_boolean(value, priv->enableWebAudio);
break;
case PROP_ENABLE_ACCELERATED_COMPOSITING:
g_value_set_boolean(value, priv->enableAcceleratedCompositing);
break;
case PROP_ENABLE_SMOOTH_SCROLLING:
g_value_set_boolean(value, priv->enableSmoothScrolling);
break;
case PROP_ENABLE_CSS_SHADERS:
g_value_set_boolean(value, priv->enableCSSShaders);
break;
case PROP_MEDIA_PLAYBACK_REQUIRES_USER_GESTURE:
g_value_set_boolean(value, priv->mediaPlaybackRequiresUserGesture);
break;
case PROP_MEDIA_PLAYBACK_ALLOWS_INLINE:
g_value_set_boolean(value, priv->mediaPlaybackAllowsInline);
break;
case PROP_ENABLE_DISPLAY_OF_INSECURE_CONTENT:
g_value_set_boolean(value, priv->enableDisplayOfInsecureContent);
break;
case PROP_ENABLE_RUNNING_OF_INSECURE_CONTENT:
g_value_set_boolean(value, priv->enableRunningOfInsecureContent);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
}
}
WebKitWebSettings* webkit_web_settings_new()
{
return WEBKIT_WEB_SETTINGS(g_object_new(WEBKIT_TYPE_WEB_SETTINGS, NULL));
}
WebKitWebSettings* webkit_web_settings_copy(WebKitWebSettings* original)
{
unsigned numberOfProperties = 0;
GOwnPtr<GParamSpec*> properties(g_object_class_list_properties(
G_OBJECT_CLASS(WEBKIT_WEB_SETTINGS_GET_CLASS(original)), &numberOfProperties));
GOwnPtr<GParameter> parameters(g_new0(GParameter, numberOfProperties));
for (size_t i = 0; i < numberOfProperties; i++) {
GParamSpec* property = properties.get()[i];
GParameter* parameter = parameters.get() + i;
if (!(property->flags & (G_PARAM_CONSTRUCT | G_PARAM_READWRITE)))
continue;
parameter->name = property->name;
g_value_init(¶meter->value, property->value_type);
g_object_get_property(G_OBJECT(original), property->name, ¶meter->value);
}
return WEBKIT_WEB_SETTINGS(g_object_newv(WEBKIT_TYPE_WEB_SETTINGS, numberOfProperties, parameters.get()));
}
void webkit_web_settings_add_extra_plugin_directory(WebKitWebView* webView, const gchar* directory)
{
g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
PluginDatabase::installedPlugins()->addExtraPluginDirectory(filenameToString(directory));
}
const gchar* webkit_web_settings_get_user_agent(WebKitWebSettings* webSettings)
{
g_return_val_if_fail(WEBKIT_IS_WEB_SETTINGS(webSettings), 0);
return webSettings->priv->userAgent.data();
}
static void initializeDomainsList(HashSet<String>& googleDomains)
{
googleDomains.add("biz");
googleDomains.add("com");
googleDomains.add("net");
googleDomains.add("org");
googleDomains.add("ae");
googleDomains.add("ag");
googleDomains.add("am");
googleDomains.add("at");
googleDomains.add("az");
googleDomains.add("be");
googleDomains.add("bi");
googleDomains.add("ca");
googleDomains.add("cc");
googleDomains.add("cd");
googleDomains.add("cg");
googleDomains.add("ch");
googleDomains.add("cl");
googleDomains.add("com.br");
googleDomains.add("com.do");
googleDomains.add("co.uk");
googleDomains.add("co.kr");
googleDomains.add("co.jp");
googleDomains.add("de");
googleDomains.add("dj");
googleDomains.add("dk");
googleDomains.add("ee");
googleDomains.add("es");
googleDomains.add("fi");
googleDomains.add("fm");
googleDomains.add("fr");
googleDomains.add("gg");
googleDomains.add("gl");
googleDomains.add("gm");
googleDomains.add("gs");
googleDomains.add("hn");
googleDomains.add("hu");
googleDomains.add("ie");
googleDomains.add("it");
googleDomains.add("je");
googleDomains.add("kz");
googleDomains.add("li");
googleDomains.add("lt");
googleDomains.add("lu");
googleDomains.add("lv");
googleDomains.add("ma");
googleDomains.add("ms");
googleDomains.add("mu");
googleDomains.add("mw");
googleDomains.add("nl");
googleDomains.add("no");
googleDomains.add("nu");
googleDomains.add("pl");
googleDomains.add("pn");
googleDomains.add("pt");
googleDomains.add("ru");
googleDomains.add("rw");
googleDomains.add("sh");
googleDomains.add("sk");
googleDomains.add("sm");
googleDomains.add("st");
googleDomains.add("td");
googleDomains.add("tk");
googleDomains.add("tp");
googleDomains.add("tv");
googleDomains.add("us");
googleDomains.add("uz");
googleDomains.add("ws");
}
static void initializeOtherGoogleDomains(Vector<String>& otherGoogleDomains)
{
otherGoogleDomains.append("gmail.com");
otherGoogleDomains.append("youtube.com");
otherGoogleDomains.append("gstatic.com");
otherGoogleDomains.append("ytimg.com");
}
static bool isGoogleDomain(String host)
{
DEFINE_STATIC_LOCAL(HashSet<String>, googleDomains, ());
DEFINE_STATIC_LOCAL(Vector<String>, otherGoogleDomains, ());
if (googleDomains.isEmpty())
initializeDomainsList(googleDomains);
if (otherGoogleDomains.isEmpty())
initializeOtherGoogleDomains(otherGoogleDomains);
int position = host.find(".google.");
if (position > 0 && googleDomains.contains(host.substring(position + sizeof(".google.") - 1)))
return true;
for (unsigned int i = 0; i < otherGoogleDomains.size(); i++) {
if (host.endsWith(otherGoogleDomains.at(i)))
return true;
}
return false;
}
static String userAgentForURL(const KURL& url)
{
if (isGoogleDomain(url.host()))
return standardUserAgent();
return String();
}
char* webkitWebSettingsUserAgentForURI(WebKitWebSettings* webSettings, const char* uri)
{
if (webSettings->priv->enableSiteSpecificQuirks) {
String userAgentString = userAgentForURL(WebCore::KURL(WebCore::KURL(), String::fromUTF8(uri)));
if (!userAgentString.isEmpty())
return g_strdup(userAgentString.utf8().data());
}
return g_strdup(webkit_web_settings_get_user_agent(webSettings));
}
namespace WebKit {
WebCore::EditingBehaviorType core(WebKitEditingBehavior type)
{
return static_cast<WebCore::EditingBehaviorType>(type);
}
}