Home | History | Annotate | Download | only in webkit
      1 /*
      2  * Copyright (C) 2008 Christian Dywan <christian (at) imendio.com>
      3  * Copyright (C) 2008 Nuanti Ltd.
      4  * Copyright (C) 2008 Collabora Ltd.
      5  * Copyright (C) 2008 Holger Hans Peter Freyther
      6  * Copyright (C) 2009 Jan Michael Alonzo
      7  * Copyright (C) 2009 Movial Creative Technologies Inc.
      8  * Copyright (C) 2009 Igalia S.L.
      9  *
     10  * This library is free software; you can redistribute it and/or
     11  * modify it under the terms of the GNU Library General Public
     12  * License as published by the Free Software Foundation; either
     13  * version 2 of the License, or (at your option) any later version.
     14  *
     15  * This library is distributed in the hope that it will be useful,
     16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     18  * Library General Public License for more details.
     19  *
     20  * You should have received a copy of the GNU Library General Public License
     21  * along with this library; see the file COPYING.LIB.  If not, write to
     22  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     23  * Boston, MA 02110-1301, USA.
     24  */
     25 
     26 #include "config.h"
     27 #include "webkitwebsettings.h"
     28 
     29 #include "EditingBehavior.h"
     30 #include "FileSystem.h"
     31 #include "PluginDatabase.h"
     32 #include "webkitenumtypes.h"
     33 #include "webkitglobalsprivate.h"
     34 #include "webkitversion.h"
     35 #include "webkitwebsettingsprivate.h"
     36 #include <wtf/text/CString.h>
     37 #include <wtf/text/StringConcatenate.h>
     38 #include <glib/gi18n-lib.h>
     39 
     40 #if OS(UNIX)
     41 #include <sys/utsname.h>
     42 #elif OS(WINDOWS)
     43 #include "SystemInfo.h"
     44 #endif
     45 
     46 /**
     47  * SECTION:webkitwebsettings
     48  * @short_description: Control the behaviour of a #WebKitWebView
     49  *
     50  * #WebKitWebSettings can be applied to a #WebKitWebView to control text encoding,
     51  * color, font sizes, printing mode, script support, loading of images and various other things.
     52  * After creation, a #WebKitWebSettings object contains default settings.
     53  *
     54  * <informalexample><programlisting>
     55  * /<!-- -->* Create a new websettings and disable java script *<!-- -->/
     56  * WebKitWebSettings *settings = webkit_web_settings_new ();
     57  * g_object_set (G_OBJECT(settings), "enable-scripts", FALSE, NULL);
     58  *
     59  * /<!-- -->* Apply the result *<!-- -->/
     60  * webkit_web_view_set_settings (WEBKIT_WEB_VIEW(my_webview), settings);
     61  * </programlisting></informalexample>
     62  */
     63 
     64 using namespace WebCore;
     65 
     66 G_DEFINE_TYPE(WebKitWebSettings, webkit_web_settings, G_TYPE_OBJECT)
     67 
     68 struct _WebKitWebSettingsPrivate {
     69     gchar* default_encoding;
     70     gchar* cursive_font_family;
     71     gchar* default_font_family;
     72     gchar* fantasy_font_family;
     73     gchar* monospace_font_family;
     74     gchar* sans_serif_font_family;
     75     gchar* serif_font_family;
     76     guint default_font_size;
     77     guint default_monospace_font_size;
     78     guint minimum_font_size;
     79     guint minimum_logical_font_size;
     80     gboolean enforce_96_dpi;
     81     gboolean auto_load_images;
     82     gboolean auto_shrink_images;
     83     gboolean print_backgrounds;
     84     gboolean enable_scripts;
     85     gboolean enable_plugins;
     86     gboolean resizable_text_areas;
     87     gchar* user_stylesheet_uri;
     88     gfloat zoom_step;
     89     gboolean enable_developer_extras;
     90     gboolean enable_private_browsing;
     91     gboolean enable_spell_checking;
     92     gchar* spell_checking_languages;
     93     gboolean enable_caret_browsing;
     94     gboolean enable_html5_database;
     95     gboolean enable_html5_local_storage;
     96     gboolean enable_xss_auditor;
     97     gboolean enable_spatial_navigation;
     98     gboolean enable_frame_flattening;
     99     gchar* user_agent;
    100     gboolean javascript_can_open_windows_automatically;
    101     gboolean javascript_can_access_clipboard;
    102     gboolean enable_offline_web_application_cache;
    103     WebKitEditingBehavior editing_behavior;
    104     gboolean enable_universal_access_from_file_uris;
    105     gboolean enable_file_access_from_file_uris;
    106     gboolean enable_dom_paste;
    107     gboolean tab_key_cycles_through_elements;
    108     gboolean enable_default_context_menu;
    109     gboolean enable_site_specific_quirks;
    110     gboolean enable_page_cache;
    111     gboolean auto_resize_window;
    112     gboolean enable_java_applet;
    113     gboolean enable_hyperlink_auditing;
    114     gboolean enable_fullscreen;
    115     gboolean enable_dns_prefetching;
    116     gboolean enable_webgl;
    117 };
    118 
    119 #define WEBKIT_WEB_SETTINGS_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_SETTINGS, WebKitWebSettingsPrivate))
    120 
    121 enum {
    122     PROP_0,
    123 
    124     PROP_DEFAULT_ENCODING,
    125     PROP_CURSIVE_FONT_FAMILY,
    126     PROP_DEFAULT_FONT_FAMILY,
    127     PROP_FANTASY_FONT_FAMILY,
    128     PROP_MONOSPACE_FONT_FAMILY,
    129     PROP_SANS_SERIF_FONT_FAMILY,
    130     PROP_SERIF_FONT_FAMILY,
    131     PROP_DEFAULT_FONT_SIZE,
    132     PROP_DEFAULT_MONOSPACE_FONT_SIZE,
    133     PROP_MINIMUM_FONT_SIZE,
    134     PROP_MINIMUM_LOGICAL_FONT_SIZE,
    135     PROP_ENFORCE_96_DPI,
    136     PROP_AUTO_LOAD_IMAGES,
    137     PROP_AUTO_SHRINK_IMAGES,
    138     PROP_PRINT_BACKGROUNDS,
    139     PROP_ENABLE_SCRIPTS,
    140     PROP_ENABLE_PLUGINS,
    141     PROP_RESIZABLE_TEXT_AREAS,
    142     PROP_USER_STYLESHEET_URI,
    143     PROP_ZOOM_STEP,
    144     PROP_ENABLE_DEVELOPER_EXTRAS,
    145     PROP_ENABLE_PRIVATE_BROWSING,
    146     PROP_ENABLE_SPELL_CHECKING,
    147     PROP_SPELL_CHECKING_LANGUAGES,
    148     PROP_ENABLE_CARET_BROWSING,
    149     PROP_ENABLE_HTML5_DATABASE,
    150     PROP_ENABLE_HTML5_LOCAL_STORAGE,
    151     PROP_ENABLE_XSS_AUDITOR,
    152     PROP_ENABLE_SPATIAL_NAVIGATION,
    153     PROP_ENABLE_FRAME_FLATTENING,
    154     PROP_USER_AGENT,
    155     PROP_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY,
    156     PROP_JAVASCRIPT_CAN_ACCESS_CLIPBOARD,
    157     PROP_ENABLE_OFFLINE_WEB_APPLICATION_CACHE,
    158     PROP_EDITING_BEHAVIOR,
    159     PROP_ENABLE_UNIVERSAL_ACCESS_FROM_FILE_URIS,
    160     PROP_ENABLE_FILE_ACCESS_FROM_FILE_URIS,
    161     PROP_ENABLE_DOM_PASTE,
    162     PROP_TAB_KEY_CYCLES_THROUGH_ELEMENTS,
    163     PROP_ENABLE_DEFAULT_CONTEXT_MENU,
    164     PROP_ENABLE_SITE_SPECIFIC_QUIRKS,
    165     PROP_ENABLE_PAGE_CACHE,
    166     PROP_AUTO_RESIZE_WINDOW,
    167     PROP_ENABLE_JAVA_APPLET,
    168     PROP_ENABLE_HYPERLINK_AUDITING,
    169     PROP_ENABLE_FULLSCREEN,
    170     PROP_ENABLE_DNS_PREFETCHING,
    171     PROP_ENABLE_WEBGL
    172 };
    173 
    174 // Create a default user agent string
    175 // This is a liberal interpretation of http://www.mozilla.org/build/revised-user-agent-strings.html
    176 // See also http://developer.apple.com/internet/safari/faq.html#anchor2
    177 static String webkitPlatform()
    178 {
    179 #if PLATFORM(X11)
    180     DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("X11; ")));
    181 #elif OS(WINDOWS)
    182     DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("")));
    183 #elif PLATFORM(MAC)
    184     DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("Macintosh; ")));
    185 #elif defined(GDK_WINDOWING_DIRECTFB)
    186     DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("DirectFB; ")));
    187 #else
    188     DEFINE_STATIC_LOCAL(const String, uaPlatform, (String("Unknown; ")));
    189 #endif
    190 
    191     return uaPlatform;
    192 }
    193 
    194 static String webkitOSVersion()
    195 {
    196    // FIXME: platform/version detection can be shared.
    197 #if OS(DARWIN)
    198 
    199 #if CPU(X86)
    200     DEFINE_STATIC_LOCAL(const String, uaOSVersion, (String("Intel Mac OS X")));
    201 #else
    202     DEFINE_STATIC_LOCAL(const String, uaOSVersion, (String("PPC Mac OS X")));
    203 #endif
    204 
    205 #elif OS(UNIX)
    206     DEFINE_STATIC_LOCAL(String, uaOSVersion, (String()));
    207 
    208     if (!uaOSVersion.isEmpty())
    209         return uaOSVersion;
    210 
    211     struct utsname name;
    212     if (uname(&name) != -1)
    213         uaOSVersion = makeString(name.sysname, ' ', name.machine);
    214     else
    215         uaOSVersion = String("Unknown");
    216 #elif OS(WINDOWS)
    217     DEFINE_STATIC_LOCAL(const String, uaOSVersion, (windowsVersionForUAString()));
    218 #else
    219     DEFINE_STATIC_LOCAL(const String, uaOSVersion, (String("Unknown")));
    220 #endif
    221 
    222     return uaOSVersion;
    223 }
    224 
    225 String webkitUserAgent()
    226 {
    227     // We mention Safari since many broken sites check for it (OmniWeb does this too)
    228     // We re-use the WebKit version, though it doesn't seem to matter much in practice
    229 
    230     DEFINE_STATIC_LOCAL(const String, uaVersion, (makeString(String::number(WEBKIT_USER_AGENT_MAJOR_VERSION), '.', String::number(WEBKIT_USER_AGENT_MINOR_VERSION), '+')));
    231     DEFINE_STATIC_LOCAL(const String, staticUA, (makeString("Mozilla/5.0 (", webkitPlatform(), webkitOSVersion(), ") AppleWebKit/", uaVersion) +
    232                                                  makeString(" (KHTML, like Gecko) Version/5.0 Safari/", uaVersion)));
    233 
    234     return staticUA;
    235 }
    236 
    237 static void webkit_web_settings_finalize(GObject* object);
    238 
    239 static void webkit_web_settings_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec);
    240 
    241 static void webkit_web_settings_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec);
    242 
    243 static void webkit_web_settings_class_init(WebKitWebSettingsClass* klass)
    244 {
    245     GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
    246     gobject_class->finalize = webkit_web_settings_finalize;
    247     gobject_class->set_property = webkit_web_settings_set_property;
    248     gobject_class->get_property = webkit_web_settings_get_property;
    249 
    250     webkitInit();
    251 
    252     GParamFlags flags = (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT);
    253 
    254     g_object_class_install_property(gobject_class,
    255                                     PROP_DEFAULT_ENCODING,
    256                                     g_param_spec_string(
    257                                     "default-encoding",
    258                                     _("Default Encoding"),
    259                                     _("The default encoding used to display text."),
    260                                     "iso-8859-1",
    261                                     flags));
    262 
    263     g_object_class_install_property(gobject_class,
    264                                     PROP_CURSIVE_FONT_FAMILY,
    265                                     g_param_spec_string(
    266                                     "cursive-font-family",
    267                                     _("Cursive Font Family"),
    268                                     _("The default Cursive font family used to display text."),
    269                                     "serif",
    270                                     flags));
    271 
    272     g_object_class_install_property(gobject_class,
    273                                     PROP_DEFAULT_FONT_FAMILY,
    274                                     g_param_spec_string(
    275                                     "default-font-family",
    276                                     _("Default Font Family"),
    277                                     _("The default font family used to display text."),
    278                                     "sans-serif",
    279                                     flags));
    280 
    281     g_object_class_install_property(gobject_class,
    282                                     PROP_FANTASY_FONT_FAMILY,
    283                                     g_param_spec_string(
    284                                     "fantasy-font-family",
    285                                     _("Fantasy Font Family"),
    286                                     _("The default Fantasy font family used to display text."),
    287                                     "serif",
    288                                     flags));
    289 
    290     g_object_class_install_property(gobject_class,
    291                                     PROP_MONOSPACE_FONT_FAMILY,
    292                                     g_param_spec_string(
    293                                     "monospace-font-family",
    294                                     _("Monospace Font Family"),
    295                                     _("The default font family used to display monospace text."),
    296                                     "monospace",
    297                                     flags));
    298 
    299     g_object_class_install_property(gobject_class,
    300                                     PROP_SANS_SERIF_FONT_FAMILY,
    301                                     g_param_spec_string(
    302                                     "sans-serif-font-family",
    303                                     _("Sans Serif Font Family"),
    304                                     _("The default Sans Serif font family used to display text."),
    305                                     "sans-serif",
    306                                     flags));
    307 
    308     g_object_class_install_property(gobject_class,
    309                                     PROP_SERIF_FONT_FAMILY,
    310                                     g_param_spec_string(
    311                                     "serif-font-family",
    312                                     _("Serif Font Family"),
    313                                     _("The default Serif font family used to display text."),
    314                                     "serif",
    315                                     flags));
    316 
    317     g_object_class_install_property(gobject_class,
    318                                     PROP_DEFAULT_FONT_SIZE,
    319                                     g_param_spec_int(
    320                                     "default-font-size",
    321                                     _("Default Font Size"),
    322                                     _("The default font size used to display text."),
    323                                     5, G_MAXINT, 12,
    324                                     flags));
    325 
    326     g_object_class_install_property(gobject_class,
    327                                     PROP_DEFAULT_MONOSPACE_FONT_SIZE,
    328                                     g_param_spec_int(
    329                                     "default-monospace-font-size",
    330                                     _("Default Monospace Font Size"),
    331                                     _("The default font size used to display monospace text."),
    332                                     5, G_MAXINT, 10,
    333                                     flags));
    334 
    335     g_object_class_install_property(gobject_class,
    336                                     PROP_MINIMUM_FONT_SIZE,
    337                                     g_param_spec_int(
    338                                     "minimum-font-size",
    339                                     _("Minimum Font Size"),
    340                                     _("The minimum font size used to display text."),
    341                                     0, G_MAXINT, 5,
    342                                     flags));
    343 
    344     g_object_class_install_property(gobject_class,
    345                                     PROP_MINIMUM_LOGICAL_FONT_SIZE,
    346                                     g_param_spec_int(
    347                                     "minimum-logical-font-size",
    348                                     _("Minimum Logical Font Size"),
    349                                     _("The minimum logical font size used to display text."),
    350                                     1, G_MAXINT, 5,
    351                                     flags));
    352 
    353     /**
    354     * WebKitWebSettings:enforce-96-dpi:
    355     *
    356     * Enforce a resolution of 96 DPI. This is meant for compatibility
    357     * with web pages which cope badly with different screen resolutions
    358     * and for automated testing.
    359     * Web browsers and applications that typically display arbitrary
    360     * content from the web should provide a preference for this.
    361     *
    362     * Since: 1.0.3
    363     */
    364     g_object_class_install_property(gobject_class,
    365                                     PROP_ENFORCE_96_DPI,
    366                                     g_param_spec_boolean(
    367                                     "enforce-96-dpi",
    368                                     _("Enforce 96 DPI"),
    369                                     _("Enforce a resolution of 96 DPI"),
    370                                     FALSE,
    371                                     flags));
    372 
    373     g_object_class_install_property(gobject_class,
    374                                     PROP_AUTO_LOAD_IMAGES,
    375                                     g_param_spec_boolean(
    376                                     "auto-load-images",
    377                                     _("Auto Load Images"),
    378                                     _("Load images automatically."),
    379                                     TRUE,
    380                                     flags));
    381 
    382     g_object_class_install_property(gobject_class,
    383                                     PROP_AUTO_SHRINK_IMAGES,
    384                                     g_param_spec_boolean(
    385                                     "auto-shrink-images",
    386                                     _("Auto Shrink Images"),
    387                                     _("Automatically shrink standalone images to fit."),
    388                                     TRUE,
    389                                     flags));
    390 
    391     g_object_class_install_property(gobject_class,
    392                                     PROP_PRINT_BACKGROUNDS,
    393                                     g_param_spec_boolean(
    394                                     "print-backgrounds",
    395                                     _("Print Backgrounds"),
    396                                     _("Whether background images should be printed."),
    397                                     TRUE,
    398                                     flags));
    399 
    400     g_object_class_install_property(gobject_class,
    401                                     PROP_ENABLE_SCRIPTS,
    402                                     g_param_spec_boolean(
    403                                     "enable-scripts",
    404                                     _("Enable Scripts"),
    405                                     _("Enable embedded scripting languages."),
    406                                     TRUE,
    407                                     flags));
    408 
    409     g_object_class_install_property(gobject_class,
    410                                     PROP_ENABLE_PLUGINS,
    411                                     g_param_spec_boolean(
    412                                     "enable-plugins",
    413                                     _("Enable Plugins"),
    414                                     _("Enable embedded plugin objects."),
    415                                     TRUE,
    416                                     flags));
    417 
    418     g_object_class_install_property(gobject_class,
    419                                     PROP_RESIZABLE_TEXT_AREAS,
    420                                     g_param_spec_boolean(
    421                                     "resizable-text-areas",
    422                                     _("Resizable Text Areas"),
    423                                     _("Whether text areas are resizable."),
    424                                     TRUE,
    425                                     flags));
    426 
    427     g_object_class_install_property(gobject_class,
    428                                     PROP_USER_STYLESHEET_URI,
    429                                     g_param_spec_string("user-stylesheet-uri",
    430                                     _("User Stylesheet URI"),
    431                                     _("The URI of a stylesheet that is applied to every page."),
    432                                     0,
    433                                     flags));
    434 
    435     /**
    436     * WebKitWebSettings:zoom-step:
    437     *
    438     * The value by which the zoom level is changed when zooming in or out.
    439     *
    440     * Since: 1.0.1
    441     */
    442     g_object_class_install_property(gobject_class,
    443                                     PROP_ZOOM_STEP,
    444                                     g_param_spec_float(
    445                                     "zoom-step",
    446                                     _("Zoom Stepping Value"),
    447                                     _("The value by which the zoom level is changed when zooming in or out."),
    448                                     0.0f, G_MAXFLOAT, 0.1f,
    449                                     flags));
    450 
    451     /**
    452     * WebKitWebSettings:enable-developer-extras:
    453     *
    454     * Whether developer extensions should be enabled. This enables,
    455     * for now, the Web Inspector, which can be controlled using the
    456     * #WebKitWebInspector instance held by the #WebKitWebView this
    457     * setting is enabled for.
    458     *
    459     * Since: 1.0.3
    460     */
    461     g_object_class_install_property(gobject_class,
    462                                     PROP_ENABLE_DEVELOPER_EXTRAS,
    463                                     g_param_spec_boolean(
    464                                     "enable-developer-extras",
    465                                     _("Enable Developer Extras"),
    466                                     _("Enables special extensions that help developers"),
    467                                     FALSE,
    468                                     flags));
    469 
    470     /**
    471     * WebKitWebSettings:enable-private-browsing:
    472     *
    473     * Whether to enable private browsing mode. Private browsing mode prevents
    474     * WebKit from updating the global history and storing any session
    475     * information e.g., on-disk cache, as well as suppressing any messages
    476     * from being printed into the (javascript) console.
    477     *
    478     * This is currently experimental for WebKitGtk.
    479     *
    480     * Since: 1.1.2
    481     */
    482     g_object_class_install_property(gobject_class,
    483                                     PROP_ENABLE_PRIVATE_BROWSING,
    484                                     g_param_spec_boolean(
    485                                     "enable-private-browsing",
    486                                     _("Enable Private Browsing"),
    487                                     _("Enables private browsing mode"),
    488                                     FALSE,
    489                                     flags));
    490 
    491     /**
    492     * WebKitWebSettings:enable-spell-checking:
    493     *
    494     * Whether to enable spell checking while typing.
    495     *
    496     * Since: 1.1.6
    497     */
    498     g_object_class_install_property(gobject_class,
    499                                     PROP_ENABLE_SPELL_CHECKING,
    500                                     g_param_spec_boolean(
    501                                     "enable-spell-checking",
    502                                     _("Enable Spell Checking"),
    503                                     _("Enables spell checking while typing"),
    504                                     FALSE,
    505                                     flags));
    506 
    507     /**
    508     * WebKitWebSettings:spell-checking-languages:
    509     *
    510     * The languages to be used for spell checking, separated by commas.
    511     *
    512     * The locale string typically is in the form lang_COUNTRY, where lang
    513     * is an ISO-639 language code, and COUNTRY is an ISO-3166 country code.
    514     * For instance, sv_FI for Swedish as written in Finland or pt_BR
    515     * for Portuguese as written in Brazil.
    516     *
    517     * If no value is specified then the value returned by
    518     * gtk_get_default_language will be used.
    519     *
    520     * Since: 1.1.6
    521     */
    522     g_object_class_install_property(gobject_class,
    523                                     PROP_SPELL_CHECKING_LANGUAGES,
    524                                     g_param_spec_string(
    525                                     "spell-checking-languages",
    526                                     _("Languages to use for spell checking"),
    527                                     _("Comma separated list of languages to use for spell checking"),
    528                                     0,
    529                                     flags));
    530 
    531     /**
    532     * WebKitWebSettings:enable-caret-browsing:
    533     *
    534     * Whether to enable caret browsing mode.
    535     *
    536     * Since: 1.1.6
    537     */
    538     g_object_class_install_property(gobject_class,
    539                                     PROP_ENABLE_CARET_BROWSING,
    540                                     g_param_spec_boolean("enable-caret-browsing",
    541                                                          _("Enable Caret Browsing"),
    542                                                          _("Whether to enable accessibility enhanced keyboard navigation"),
    543                                                          FALSE,
    544                                                          flags));
    545     /**
    546     * WebKitWebSettings:enable-html5-database:
    547     *
    548     * Whether to enable HTML5 client-side SQL database support. Client-side
    549     * SQL database allows web pages to store structured data and be able to
    550     * use SQL to manipulate that data asynchronously.
    551     *
    552     * Since: 1.1.8
    553     */
    554     g_object_class_install_property(gobject_class,
    555                                     PROP_ENABLE_HTML5_DATABASE,
    556                                     g_param_spec_boolean("enable-html5-database",
    557                                                          _("Enable HTML5 Database"),
    558                                                          _("Whether to enable HTML5 database support"),
    559                                                          TRUE,
    560                                                          flags));
    561 
    562     /**
    563     * WebKitWebSettings:enable-html5-local-storage:
    564     *
    565     * Whether to enable HTML5 localStorage support. localStorage provides
    566     * simple synchronous storage access.
    567     *
    568     * Since: 1.1.8
    569     */
    570     g_object_class_install_property(gobject_class,
    571                                     PROP_ENABLE_HTML5_LOCAL_STORAGE,
    572                                     g_param_spec_boolean("enable-html5-local-storage",
    573                                                          _("Enable HTML5 Local Storage"),
    574                                                          _("Whether to enable HTML5 Local Storage support"),
    575                                                          TRUE,
    576                                                          flags));
    577     /**
    578     * WebKitWebSettings:enable-xss-auditor
    579     *
    580     * Whether to enable the XSS Auditor. This feature filters some kinds of
    581     * reflective XSS attacks on vulnerable web sites.
    582     *
    583     * Since: 1.1.11
    584     */
    585     g_object_class_install_property(gobject_class,
    586                                     PROP_ENABLE_XSS_AUDITOR,
    587                                     g_param_spec_boolean("enable-xss-auditor",
    588                                                          _("Enable XSS Auditor"),
    589                                                          _("Whether to enable the XSS auditor"),
    590                                                          TRUE,
    591                                                          flags));
    592     /**
    593     * WebKitWebSettings:enable-spatial-navigation
    594     *
    595     * Whether to enable the Spatial Navigation. This feature consists in the ability
    596     * to navigate between focusable elements in a Web page, such as hyperlinks and
    597     * form controls, by using Left, Right, Up and Down arrow keys. For example, if
    598     * an user presses the Right key, heuristics determine whether there is an element
    599     * he might be trying to reach towards the right, and if there are multiple elements,
    600     * which element he probably wants.
    601     *
    602     * Since: 1.1.23
    603     */
    604     g_object_class_install_property(gobject_class,
    605                                     PROP_ENABLE_SPATIAL_NAVIGATION,
    606                                     g_param_spec_boolean("enable-spatial-navigation",
    607                                                          _("Enable Spatial Navigation"),
    608                                                          _("Whether to enable Spatial Navigation"),
    609                                                          FALSE,
    610                                                          flags));
    611     /**
    612     * WebKitWebSettings:enable-frame-flattening
    613     *
    614     * Whether to enable the Frame Flattening. With this setting each subframe is expanded
    615     * to its contents, which will flatten all the frames to become one scrollable page.
    616     * On touch devices, it is desired to not have any scrollable sub parts of the page as
    617     * it results in a confusing user experience, with scrolling sometimes scrolling sub parts
    618     * and at other times scrolling the page itself. For this reason iframes and framesets are
    619     * barely usable on touch devices.
    620     *
    621     * Since: 1.3.5
    622     */
    623     g_object_class_install_property(gobject_class,
    624                                     PROP_ENABLE_FRAME_FLATTENING,
    625                                     g_param_spec_boolean("enable-frame-flattening",
    626                                                          _("Enable Frame Flattening"),
    627                                                          _("Whether to enable Frame Flattening"),
    628                                                          FALSE,
    629                                                          flags));
    630     /**
    631      * WebKitWebSettings:user-agent:
    632      *
    633      * The User-Agent string used by WebKitGtk.
    634      *
    635      * This will return a default User-Agent string if a custom string wasn't
    636      * provided by the application. Setting this property to a NULL value or
    637      * an empty string will result in the User-Agent string being reset to the
    638      * default value.
    639      *
    640      * Since: 1.1.11
    641      */
    642     g_object_class_install_property(gobject_class, PROP_USER_AGENT,
    643                                     g_param_spec_string("user-agent",
    644                                                         _("User Agent"),
    645                                                         _("The User-Agent string used by WebKitGtk"),
    646                                                         webkitUserAgent().utf8().data(),
    647                                                         flags));
    648 
    649     /**
    650     * WebKitWebSettings:javascript-can-open-windows-automatically
    651     *
    652     * Whether JavaScript can open popup windows automatically without user
    653     * intervention.
    654     *
    655     * Since: 1.1.11
    656     */
    657     g_object_class_install_property(gobject_class,
    658                                     PROP_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY,
    659                                     g_param_spec_boolean("javascript-can-open-windows-automatically",
    660                                                          _("JavaScript can open windows automatically"),
    661                                                          _("Whether JavaScript can open windows automatically"),
    662                                                          FALSE,
    663                                                          flags));
    664 
    665     /**
    666     * WebKitWebSettings:javascript-can-access-clipboard
    667     *
    668     * Whether JavaScript can access Clipboard.
    669     *
    670     * Since: 1.3.0
    671     */
    672     g_object_class_install_property(gobject_class,
    673                                     PROP_JAVASCRIPT_CAN_ACCESS_CLIPBOARD,
    674                                     g_param_spec_boolean("javascript-can-access-clipboard",
    675                                                          _("JavaScript can access Clipboard"),
    676                                                          _("Whether JavaScript can access Clipboard"),
    677                                                          FALSE,
    678                                                          flags));
    679 
    680     /**
    681     * WebKitWebSettings:enable-offline-web-application-cache
    682     *
    683     * Whether to enable HTML5 offline web application cache support. Offline
    684     * Web Application Cache ensures web applications are available even when
    685     * the user is not connected to the network.
    686     *
    687     * Since: 1.1.13
    688     */
    689     g_object_class_install_property(gobject_class,
    690                                     PROP_ENABLE_OFFLINE_WEB_APPLICATION_CACHE,
    691                                     g_param_spec_boolean("enable-offline-web-application-cache",
    692                                                          _("Enable offline web application cache"),
    693                                                          _("Whether to enable offline web application cache"),
    694                                                          TRUE,
    695                                                          flags));
    696 
    697 
    698     /**
    699     * WebKitWebSettings:editing-behavior
    700     *
    701     * This setting controls various editing behaviors that differ
    702     * between platforms and that have been combined in two groups,
    703     * 'Mac' and 'Windows'. Some examples:
    704     *
    705     *  1) Clicking below the last line of an editable area puts the
    706     * caret at the end of the last line on Mac, but in the middle of
    707     * the last line on Windows.
    708     *
    709     *  2) Pushing down the arrow key on the last line puts the caret
    710     *  at the end of the last line on Mac, but does nothing on
    711     *  Windows. A similar case exists on the top line.
    712     *
    713     * Since: 1.1.13
    714     */
    715     g_object_class_install_property(gobject_class,
    716                                     PROP_EDITING_BEHAVIOR,
    717                                     g_param_spec_enum("editing-behavior",
    718                                                       _("Editing behavior"),
    719                                                       _("The behavior mode to use in editing mode"),
    720                                                       WEBKIT_TYPE_EDITING_BEHAVIOR,
    721                                                       WEBKIT_EDITING_BEHAVIOR_UNIX,
    722                                                       flags));
    723 
    724     /**
    725      * WebKitWebSettings:enable-universal-access-from-file-uris
    726      *
    727      * Whether to allow files loaded through file:// URIs universal access to
    728      * all pages.
    729      *
    730      * Since: 1.1.13
    731      */
    732     g_object_class_install_property(gobject_class,
    733                                     PROP_ENABLE_UNIVERSAL_ACCESS_FROM_FILE_URIS,
    734                                     g_param_spec_boolean("enable-universal-access-from-file-uris",
    735                                                          _("Enable universal access from file URIs"),
    736                                                          _("Whether to allow universal access from file URIs"),
    737                                                          FALSE,
    738                                                          flags));
    739 
    740     /**
    741      * WebKitWebSettings:enable-dom-paste
    742      *
    743      * Whether to enable DOM paste. If set to %TRUE, document.execCommand("Paste")
    744      * will correctly execute and paste content of the clipboard.
    745      *
    746      * Since: 1.1.16
    747      */
    748     g_object_class_install_property(gobject_class,
    749                                     PROP_ENABLE_DOM_PASTE,
    750                                     g_param_spec_boolean("enable-dom-paste",
    751                                                          _("Enable DOM paste"),
    752                                                          _("Whether to enable DOM paste"),
    753                                                          FALSE,
    754                                                          flags));
    755     /**
    756     * WebKitWebSettings:tab-key-cycles-through-elements:
    757     *
    758     * Whether the tab key cycles through elements on the page.
    759     *
    760     * If @flag is %TRUE, pressing the tab key will focus the next element in
    761     * the @web_view. If @flag is %FALSE, the @web_view will interpret tab
    762     * key presses as normal key presses. If the selected element is editable, the
    763     * tab key will cause the insertion of a tab character.
    764     *
    765     * Since: 1.1.17
    766     */
    767     g_object_class_install_property(gobject_class,
    768                                     PROP_TAB_KEY_CYCLES_THROUGH_ELEMENTS,
    769                                     g_param_spec_boolean("tab-key-cycles-through-elements",
    770                                                          _("Tab key cycles through elements"),
    771                                                          _("Whether the tab key cycles through elements on the page."),
    772                                                          TRUE,
    773                                                          flags));
    774 
    775     /**
    776      * WebKitWebSettings:enable-default-context-menu:
    777      *
    778      * Whether right-clicks should be handled automatically to create,
    779      * and display the context menu. Turning this off will make
    780      * WebKitGTK+ not emit the populate-popup signal. Notice that the
    781      * default button press event handler may still handle right
    782      * clicks for other reasons, such as in-page context menus, or
    783      * right-clicks that are handled by the page itself.
    784      *
    785      * Since: 1.1.18
    786      */
    787     g_object_class_install_property(gobject_class,
    788                                     PROP_ENABLE_DEFAULT_CONTEXT_MENU,
    789                                     g_param_spec_boolean(
    790                                     "enable-default-context-menu",
    791                                     _("Enable Default Context Menu"),
    792                                     _("Enables the handling of right-clicks for the creation of the default context menu"),
    793                                     TRUE,
    794                                     flags));
    795 
    796     /**
    797      * WebKitWebSettings::enable-site-specific-quirks
    798      *
    799      * Whether to turn on site-specific hacks.  Turning this on will
    800      * tell WebKitGTK+ to use some site-specific workarounds for
    801      * better web compatibility.  For example, older versions of
    802      * MediaWiki will incorrectly send WebKit a css file with KHTML
    803      * workarounds.  By turning on site-specific quirks, WebKit will
    804      * special-case this and other cases to make the sites work.
    805      *
    806      * Since: 1.1.18
    807      */
    808     g_object_class_install_property(gobject_class,
    809                                     PROP_ENABLE_SITE_SPECIFIC_QUIRKS,
    810                                     g_param_spec_boolean(
    811                                     "enable-site-specific-quirks",
    812                                     _("Enable Site Specific Quirks"),
    813                                     _("Enables the site-specific compatibility workarounds"),
    814                                     FALSE,
    815                                     flags));
    816 
    817     /**
    818     * WebKitWebSettings:enable-page-cache:
    819     *
    820     * Enable or disable the page cache. Disabling the page cache is
    821     * generally only useful for special circumstances like low-memory
    822     * scenarios or special purpose applications like static HTML
    823     * viewers. This setting only controls the Page Cache, this cache
    824     * is different than the disk-based or memory-based traditional
    825     * resource caches, its point is to make going back and forth
    826     * between pages much faster. For details about the different types
    827     * of caches and their purposes see:
    828     * http://webkit.org/blog/427/webkit-page-cache-i-the-basics/
    829     *
    830     * Since: 1.1.18
    831     */
    832     g_object_class_install_property(gobject_class,
    833                                     PROP_ENABLE_PAGE_CACHE,
    834                                     g_param_spec_boolean("enable-page-cache",
    835                                                          _("Enable page cache"),
    836                                                          _("Whether the page cache should be used"),
    837                                                          FALSE,
    838                                                          flags));
    839 
    840     /**
    841     * WebKitWebSettings:auto-resize-window:
    842     *
    843     * Web pages can request to modify the size and position of the
    844     * window containing the #WebKitWebView through various DOM methods
    845     * (resizeTo, moveTo, resizeBy, moveBy). By default WebKit will not
    846     * honor this requests, but you can set this property to %TRUE if
    847     * you'd like it to do so. If you wish to handle this manually, you
    848     * can connect to the notify signal for the
    849     * #WebKitWebWindowFeatures of your #WebKitWebView.
    850     *
    851     * Since: 1.1.22
    852     */
    853     g_object_class_install_property(gobject_class,
    854                                     PROP_AUTO_RESIZE_WINDOW,
    855                                     g_param_spec_boolean("auto-resize-window",
    856                                                          _("Auto Resize Window"),
    857                                                          _("Automatically resize the toplevel window when a page requests it"),
    858                                                          FALSE,
    859                                                          flags));
    860 
    861     /**
    862      * WebKitWebSettings:enable-file-access-from-file-uris:
    863      *
    864      * Boolean property to control file access for file:// URIs. If this
    865      * option is enabled every file:// will have its own security unique domain.
    866      *
    867      * Since: 1.1.22
    868      */
    869      g_object_class_install_property(gobject_class,
    870                                      PROP_ENABLE_FILE_ACCESS_FROM_FILE_URIS,
    871                                      g_param_spec_boolean("enable-file-access-from-file-uris",
    872                                                           "Enable file access from file URIs",
    873                                                           "Controls file access for file:// URIs.",
    874                                                           FALSE,
    875                                                           flags));
    876 
    877    /**
    878     * WebKitWebSettings:enable-java-applet:
    879     *
    880     * Enable or disable support for the Java &lt;applet&gt; tag. Keep in
    881     * mind that Java content can be still shown in the page through
    882     * &lt;object&gt; or &lt;embed&gt;, which are the preferred tags for this task.
    883     *
    884     * Since: 1.1.22
    885     */
    886     g_object_class_install_property(gobject_class,
    887                                     PROP_ENABLE_JAVA_APPLET,
    888                                     g_param_spec_boolean("enable-java-applet",
    889                                                          _("Enable Java Applet"),
    890                                                          _("Whether Java Applet support through <applet> should be enabled"),
    891                                                          TRUE,
    892                                                          flags));
    893 
    894     /**
    895     * WebKitWebSettings:enable-hyperlink-auditing:
    896     *
    897     * Enable or disable support for <a ping>.
    898     *
    899     * Since: 1.2.5
    900     */
    901     g_object_class_install_property(gobject_class,
    902                                     PROP_ENABLE_HYPERLINK_AUDITING,
    903                                     g_param_spec_boolean("enable-hyperlink-auditing",
    904                                                          _("Enable Hyperlink Auditing"),
    905                                                          _("Whether <a ping> should be able to send pings"),
    906                                                          FALSE,
    907                                                          flags));
    908 
    909     /* Undocumented for now */
    910     g_object_class_install_property(gobject_class,
    911                                     PROP_ENABLE_FULLSCREEN,
    912                                     g_param_spec_boolean("enable-fullscreen",
    913                                                          _("Enable Fullscreen"),
    914                                                          _("Whether the Mozilla style API should be enabled."),
    915                                                          FALSE,
    916                                                          flags));
    917     /**
    918     * WebKitWebSettings:enable-webgl:
    919     *
    920     * Enable or disable support for WebGL on pages. WebGL is an experimental
    921     * proposal for allowing web pages to use OpenGL ES-like calls directly. The
    922     * standard is currently a work-in-progress by the Khronos Group.
    923     *
    924     * Since: 1.3.14
    925     */
    926     g_object_class_install_property(gobject_class,
    927                                     PROP_ENABLE_WEBGL,
    928                                     g_param_spec_boolean("enable-webgl",
    929                                                          _("Enable WebGL"),
    930                                                          _("Whether WebGL content should be rendered"),
    931                                                          FALSE,
    932                                                          flags));
    933 
    934     /**
    935     * WebKitWebSettings:enable-dns-prefetching
    936     *
    937     * Whether webkit prefetches domain names.  This is a separate knob from private browsing.
    938     * Whether private browsing should set this or not is up for debate, for now it doesn't.
    939     *
    940     * Since: 1.3.13.
    941     */
    942     g_object_class_install_property(gobject_class,
    943                                     PROP_ENABLE_DNS_PREFETCHING,
    944                                     g_param_spec_boolean("enable-dns-prefetching",
    945                                                          _("WebKit prefetches domain names"),
    946                                                          _("Whether WebKit prefetches domain names"),
    947                                                          TRUE,
    948                                                          flags));
    949 
    950     g_type_class_add_private(klass, sizeof(WebKitWebSettingsPrivate));
    951 }
    952 
    953 static void webkit_web_settings_init(WebKitWebSettings* web_settings)
    954 {
    955     web_settings->priv = G_TYPE_INSTANCE_GET_PRIVATE(web_settings, WEBKIT_TYPE_WEB_SETTINGS, WebKitWebSettingsPrivate);
    956 }
    957 
    958 static void webkit_web_settings_finalize(GObject* object)
    959 {
    960     WebKitWebSettings* web_settings = WEBKIT_WEB_SETTINGS(object);
    961     WebKitWebSettingsPrivate* priv = web_settings->priv;
    962 
    963     g_free(priv->default_encoding);
    964     g_free(priv->cursive_font_family);
    965     g_free(priv->default_font_family);
    966     g_free(priv->fantasy_font_family);
    967     g_free(priv->monospace_font_family);
    968     g_free(priv->sans_serif_font_family);
    969     g_free(priv->serif_font_family);
    970     g_free(priv->user_stylesheet_uri);
    971     g_free(priv->spell_checking_languages);
    972 
    973     g_free(priv->user_agent);
    974 
    975     G_OBJECT_CLASS(webkit_web_settings_parent_class)->finalize(object);
    976 }
    977 
    978 static void webkit_web_settings_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec)
    979 {
    980     WebKitWebSettings* web_settings = WEBKIT_WEB_SETTINGS(object);
    981     WebKitWebSettingsPrivate* priv = web_settings->priv;
    982 
    983     switch(prop_id) {
    984     case PROP_DEFAULT_ENCODING:
    985         g_free(priv->default_encoding);
    986         priv->default_encoding = g_strdup(g_value_get_string(value));
    987         break;
    988     case PROP_CURSIVE_FONT_FAMILY:
    989         g_free(priv->cursive_font_family);
    990         priv->cursive_font_family = g_strdup(g_value_get_string(value));
    991         break;
    992     case PROP_DEFAULT_FONT_FAMILY:
    993         g_free(priv->default_font_family);
    994         priv->default_font_family = g_strdup(g_value_get_string(value));
    995         break;
    996     case PROP_FANTASY_FONT_FAMILY:
    997         g_free(priv->fantasy_font_family);
    998         priv->fantasy_font_family = g_strdup(g_value_get_string(value));
    999         break;
   1000     case PROP_MONOSPACE_FONT_FAMILY:
   1001         g_free(priv->monospace_font_family);
   1002         priv->monospace_font_family = g_strdup(g_value_get_string(value));
   1003         break;
   1004     case PROP_SANS_SERIF_FONT_FAMILY:
   1005         g_free(priv->sans_serif_font_family);
   1006         priv->sans_serif_font_family = g_strdup(g_value_get_string(value));
   1007         break;
   1008     case PROP_SERIF_FONT_FAMILY:
   1009         g_free(priv->serif_font_family);
   1010         priv->serif_font_family = g_strdup(g_value_get_string(value));
   1011         break;
   1012     case PROP_DEFAULT_FONT_SIZE:
   1013         priv->default_font_size = g_value_get_int(value);
   1014         break;
   1015     case PROP_DEFAULT_MONOSPACE_FONT_SIZE:
   1016         priv->default_monospace_font_size = g_value_get_int(value);
   1017         break;
   1018     case PROP_MINIMUM_FONT_SIZE:
   1019         priv->minimum_font_size = g_value_get_int(value);
   1020         break;
   1021     case PROP_MINIMUM_LOGICAL_FONT_SIZE:
   1022         priv->minimum_logical_font_size = g_value_get_int(value);
   1023         break;
   1024     case PROP_ENFORCE_96_DPI:
   1025         priv->enforce_96_dpi = g_value_get_boolean(value);
   1026         break;
   1027     case PROP_AUTO_LOAD_IMAGES:
   1028         priv->auto_load_images = g_value_get_boolean(value);
   1029         break;
   1030     case PROP_AUTO_SHRINK_IMAGES:
   1031         priv->auto_shrink_images = g_value_get_boolean(value);
   1032         break;
   1033     case PROP_PRINT_BACKGROUNDS:
   1034         priv->print_backgrounds = g_value_get_boolean(value);
   1035         break;
   1036     case PROP_ENABLE_SCRIPTS:
   1037         priv->enable_scripts = g_value_get_boolean(value);
   1038         break;
   1039     case PROP_ENABLE_PLUGINS:
   1040         priv->enable_plugins = g_value_get_boolean(value);
   1041         break;
   1042     case PROP_RESIZABLE_TEXT_AREAS:
   1043         priv->resizable_text_areas = g_value_get_boolean(value);
   1044         break;
   1045     case PROP_USER_STYLESHEET_URI:
   1046         g_free(priv->user_stylesheet_uri);
   1047         priv->user_stylesheet_uri = g_strdup(g_value_get_string(value));
   1048         break;
   1049     case PROP_ZOOM_STEP:
   1050         priv->zoom_step = g_value_get_float(value);
   1051         break;
   1052     case PROP_ENABLE_DEVELOPER_EXTRAS:
   1053         priv->enable_developer_extras = g_value_get_boolean(value);
   1054         break;
   1055     case PROP_ENABLE_PRIVATE_BROWSING:
   1056         priv->enable_private_browsing = g_value_get_boolean(value);
   1057         break;
   1058     case PROP_ENABLE_CARET_BROWSING:
   1059         priv->enable_caret_browsing = g_value_get_boolean(value);
   1060         break;
   1061     case PROP_ENABLE_HTML5_DATABASE:
   1062         priv->enable_html5_database = g_value_get_boolean(value);
   1063         break;
   1064     case PROP_ENABLE_HTML5_LOCAL_STORAGE:
   1065         priv->enable_html5_local_storage = g_value_get_boolean(value);
   1066         break;
   1067     case PROP_ENABLE_SPELL_CHECKING:
   1068         priv->enable_spell_checking = g_value_get_boolean(value);
   1069         break;
   1070     case PROP_SPELL_CHECKING_LANGUAGES:
   1071         g_free(priv->spell_checking_languages);
   1072         priv->spell_checking_languages = g_strdup(g_value_get_string(value));
   1073         break;
   1074     case PROP_ENABLE_XSS_AUDITOR:
   1075         priv->enable_xss_auditor = g_value_get_boolean(value);
   1076         break;
   1077     case PROP_ENABLE_SPATIAL_NAVIGATION:
   1078         priv->enable_spatial_navigation = g_value_get_boolean(value);
   1079         break;
   1080     case PROP_ENABLE_FRAME_FLATTENING:
   1081         priv->enable_frame_flattening = g_value_get_boolean(value);
   1082         break;
   1083     case PROP_USER_AGENT:
   1084         g_free(priv->user_agent);
   1085         if (!g_value_get_string(value) || !strlen(g_value_get_string(value)))
   1086             priv->user_agent = g_strdup(webkitUserAgent().utf8().data());
   1087         else
   1088             priv->user_agent = g_strdup(g_value_get_string(value));
   1089         break;
   1090     case PROP_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY:
   1091         priv->javascript_can_open_windows_automatically = g_value_get_boolean(value);
   1092         break;
   1093     case PROP_JAVASCRIPT_CAN_ACCESS_CLIPBOARD:
   1094         priv->javascript_can_access_clipboard = g_value_get_boolean(value);
   1095         break;
   1096     case PROP_ENABLE_OFFLINE_WEB_APPLICATION_CACHE:
   1097         priv->enable_offline_web_application_cache = g_value_get_boolean(value);
   1098         break;
   1099     case PROP_EDITING_BEHAVIOR:
   1100         priv->editing_behavior = static_cast<WebKitEditingBehavior>(g_value_get_enum(value));
   1101         break;
   1102     case PROP_ENABLE_UNIVERSAL_ACCESS_FROM_FILE_URIS:
   1103         priv->enable_universal_access_from_file_uris = g_value_get_boolean(value);
   1104         break;
   1105     case PROP_ENABLE_FILE_ACCESS_FROM_FILE_URIS:
   1106         priv->enable_file_access_from_file_uris = g_value_get_boolean(value);
   1107         break;
   1108     case PROP_ENABLE_DOM_PASTE:
   1109         priv->enable_dom_paste = g_value_get_boolean(value);
   1110         break;
   1111     case PROP_TAB_KEY_CYCLES_THROUGH_ELEMENTS:
   1112         priv->tab_key_cycles_through_elements = g_value_get_boolean(value);
   1113         break;
   1114     case PROP_ENABLE_DEFAULT_CONTEXT_MENU:
   1115         priv->enable_default_context_menu = g_value_get_boolean(value);
   1116         break;
   1117     case PROP_ENABLE_SITE_SPECIFIC_QUIRKS:
   1118         priv->enable_site_specific_quirks = g_value_get_boolean(value);
   1119         break;
   1120     case PROP_ENABLE_PAGE_CACHE:
   1121         priv->enable_page_cache = g_value_get_boolean(value);
   1122         break;
   1123     case PROP_AUTO_RESIZE_WINDOW:
   1124         priv->auto_resize_window = g_value_get_boolean(value);
   1125         break;
   1126     case PROP_ENABLE_JAVA_APPLET:
   1127         priv->enable_java_applet = g_value_get_boolean(value);
   1128         break;
   1129     case PROP_ENABLE_HYPERLINK_AUDITING:
   1130         priv->enable_hyperlink_auditing = g_value_get_boolean(value);
   1131         break;
   1132     case PROP_ENABLE_FULLSCREEN:
   1133         priv->enable_fullscreen = g_value_get_boolean(value);
   1134         break;
   1135     case PROP_ENABLE_DNS_PREFETCHING:
   1136         priv->enable_dns_prefetching = g_value_get_boolean(value);
   1137         break;
   1138     case PROP_ENABLE_WEBGL:
   1139         priv->enable_webgl = g_value_get_boolean(value);
   1140         break;
   1141     default:
   1142         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
   1143         break;
   1144     }
   1145 }
   1146 
   1147 static void webkit_web_settings_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)
   1148 {
   1149     WebKitWebSettings* web_settings = WEBKIT_WEB_SETTINGS(object);
   1150     WebKitWebSettingsPrivate* priv = web_settings->priv;
   1151 
   1152     switch (prop_id) {
   1153     case PROP_DEFAULT_ENCODING:
   1154         g_value_set_string(value, priv->default_encoding);
   1155         break;
   1156     case PROP_CURSIVE_FONT_FAMILY:
   1157         g_value_set_string(value, priv->cursive_font_family);
   1158         break;
   1159     case PROP_DEFAULT_FONT_FAMILY:
   1160         g_value_set_string(value, priv->default_font_family);
   1161         break;
   1162     case PROP_FANTASY_FONT_FAMILY:
   1163         g_value_set_string(value, priv->fantasy_font_family);
   1164         break;
   1165     case PROP_MONOSPACE_FONT_FAMILY:
   1166         g_value_set_string(value, priv->monospace_font_family);
   1167         break;
   1168     case PROP_SANS_SERIF_FONT_FAMILY:
   1169         g_value_set_string(value, priv->sans_serif_font_family);
   1170         break;
   1171     case PROP_SERIF_FONT_FAMILY:
   1172         g_value_set_string(value, priv->serif_font_family);
   1173         break;
   1174     case PROP_DEFAULT_FONT_SIZE:
   1175         g_value_set_int(value, priv->default_font_size);
   1176         break;
   1177     case PROP_DEFAULT_MONOSPACE_FONT_SIZE:
   1178         g_value_set_int(value, priv->default_monospace_font_size);
   1179         break;
   1180     case PROP_MINIMUM_FONT_SIZE:
   1181         g_value_set_int(value, priv->minimum_font_size);
   1182         break;
   1183     case PROP_MINIMUM_LOGICAL_FONT_SIZE:
   1184         g_value_set_int(value, priv->minimum_logical_font_size);
   1185         break;
   1186     case PROP_ENFORCE_96_DPI:
   1187         g_value_set_boolean(value, priv->enforce_96_dpi);
   1188         break;
   1189     case PROP_AUTO_LOAD_IMAGES:
   1190         g_value_set_boolean(value, priv->auto_load_images);
   1191         break;
   1192     case PROP_AUTO_SHRINK_IMAGES:
   1193         g_value_set_boolean(value, priv->auto_shrink_images);
   1194         break;
   1195     case PROP_PRINT_BACKGROUNDS:
   1196         g_value_set_boolean(value, priv->print_backgrounds);
   1197         break;
   1198     case PROP_ENABLE_SCRIPTS:
   1199         g_value_set_boolean(value, priv->enable_scripts);
   1200         break;
   1201     case PROP_ENABLE_PLUGINS:
   1202         g_value_set_boolean(value, priv->enable_plugins);
   1203         break;
   1204     case PROP_RESIZABLE_TEXT_AREAS:
   1205         g_value_set_boolean(value, priv->resizable_text_areas);
   1206         break;
   1207     case PROP_USER_STYLESHEET_URI:
   1208         g_value_set_string(value, priv->user_stylesheet_uri);
   1209         break;
   1210     case PROP_ZOOM_STEP:
   1211         g_value_set_float(value, priv->zoom_step);
   1212         break;
   1213     case PROP_ENABLE_DEVELOPER_EXTRAS:
   1214         g_value_set_boolean(value, priv->enable_developer_extras);
   1215         break;
   1216     case PROP_ENABLE_PRIVATE_BROWSING:
   1217         g_value_set_boolean(value, priv->enable_private_browsing);
   1218         break;
   1219     case PROP_ENABLE_CARET_BROWSING:
   1220         g_value_set_boolean(value, priv->enable_caret_browsing);
   1221         break;
   1222     case PROP_ENABLE_HTML5_DATABASE:
   1223         g_value_set_boolean(value, priv->enable_html5_database);
   1224         break;
   1225     case PROP_ENABLE_HTML5_LOCAL_STORAGE:
   1226         g_value_set_boolean(value, priv->enable_html5_local_storage);
   1227         break;
   1228     case PROP_ENABLE_SPELL_CHECKING:
   1229         g_value_set_boolean(value, priv->enable_spell_checking);
   1230         break;
   1231     case PROP_SPELL_CHECKING_LANGUAGES:
   1232         g_value_set_string(value, priv->spell_checking_languages);
   1233         break;
   1234     case PROP_ENABLE_XSS_AUDITOR:
   1235         g_value_set_boolean(value, priv->enable_xss_auditor);
   1236         break;
   1237     case PROP_ENABLE_SPATIAL_NAVIGATION:
   1238         g_value_set_boolean(value, priv->enable_spatial_navigation);
   1239         break;
   1240     case PROP_ENABLE_FRAME_FLATTENING:
   1241         g_value_set_boolean(value, priv->enable_frame_flattening);
   1242         break;
   1243     case PROP_USER_AGENT:
   1244         g_value_set_string(value, priv->user_agent);
   1245         break;
   1246     case PROP_JAVASCRIPT_CAN_OPEN_WINDOWS_AUTOMATICALLY:
   1247         g_value_set_boolean(value, priv->javascript_can_open_windows_automatically);
   1248         break;
   1249     case PROP_JAVASCRIPT_CAN_ACCESS_CLIPBOARD:
   1250         g_value_set_boolean(value, priv->javascript_can_access_clipboard);
   1251         break;
   1252     case PROP_ENABLE_OFFLINE_WEB_APPLICATION_CACHE:
   1253         g_value_set_boolean(value, priv->enable_offline_web_application_cache);
   1254         break;
   1255     case PROP_EDITING_BEHAVIOR:
   1256         g_value_set_enum(value, priv->editing_behavior);
   1257         break;
   1258     case PROP_ENABLE_UNIVERSAL_ACCESS_FROM_FILE_URIS:
   1259         g_value_set_boolean(value, priv->enable_universal_access_from_file_uris);
   1260         break;
   1261     case PROP_ENABLE_FILE_ACCESS_FROM_FILE_URIS:
   1262         g_value_set_boolean(value, priv->enable_file_access_from_file_uris);
   1263         break;
   1264     case PROP_ENABLE_DOM_PASTE:
   1265         g_value_set_boolean(value, priv->enable_dom_paste);
   1266         break;
   1267     case PROP_TAB_KEY_CYCLES_THROUGH_ELEMENTS:
   1268         g_value_set_boolean(value, priv->tab_key_cycles_through_elements);
   1269         break;
   1270     case PROP_ENABLE_DEFAULT_CONTEXT_MENU:
   1271         g_value_set_boolean(value, priv->enable_default_context_menu);
   1272         break;
   1273     case PROP_ENABLE_SITE_SPECIFIC_QUIRKS:
   1274         g_value_set_boolean(value, priv->enable_site_specific_quirks);
   1275         break;
   1276     case PROP_ENABLE_PAGE_CACHE:
   1277         g_value_set_boolean(value, priv->enable_page_cache);
   1278         break;
   1279     case PROP_AUTO_RESIZE_WINDOW:
   1280         g_value_set_boolean(value, priv->auto_resize_window);
   1281         break;
   1282     case PROP_ENABLE_JAVA_APPLET:
   1283         g_value_set_boolean(value, priv->enable_java_applet);
   1284         break;
   1285     case PROP_ENABLE_HYPERLINK_AUDITING:
   1286         g_value_set_boolean(value, priv->enable_hyperlink_auditing);
   1287         break;
   1288     case PROP_ENABLE_FULLSCREEN:
   1289         g_value_set_boolean(value, priv->enable_fullscreen);
   1290         break;
   1291     case PROP_ENABLE_DNS_PREFETCHING:
   1292         g_value_set_boolean(value, priv->enable_dns_prefetching);
   1293         break;
   1294     case PROP_ENABLE_WEBGL:
   1295         g_value_set_boolean(value, priv->enable_webgl);
   1296         break;
   1297     default:
   1298         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
   1299         break;
   1300     }
   1301 }
   1302 
   1303 /**
   1304  * webkit_web_settings_new:
   1305  *
   1306  * Creates a new #WebKitWebSettings instance with default values. It must
   1307  * be manually attached to a WebView.
   1308  *
   1309  * Returns: a new #WebKitWebSettings instance
   1310  **/
   1311 WebKitWebSettings* webkit_web_settings_new()
   1312 {
   1313     return WEBKIT_WEB_SETTINGS(g_object_new(WEBKIT_TYPE_WEB_SETTINGS, NULL));
   1314 }
   1315 
   1316 /**
   1317  * webkit_web_settings_copy:
   1318  *
   1319  * Copies an existing #WebKitWebSettings instance.
   1320  *
   1321  * Returns: (transfer full): a new #WebKitWebSettings instance
   1322  **/
   1323 WebKitWebSettings* webkit_web_settings_copy(WebKitWebSettings* web_settings)
   1324 {
   1325     WebKitWebSettingsPrivate* priv = web_settings->priv;
   1326 
   1327     WebKitWebSettings* copy = WEBKIT_WEB_SETTINGS(g_object_new(WEBKIT_TYPE_WEB_SETTINGS,
   1328                  "default-encoding", priv->default_encoding,
   1329                  "cursive-font-family", priv->cursive_font_family,
   1330                  "default-font-family", priv->default_font_family,
   1331                  "fantasy-font-family", priv->fantasy_font_family,
   1332                  "monospace-font-family", priv->monospace_font_family,
   1333                  "sans-serif-font-family", priv->sans_serif_font_family,
   1334                  "serif-font-family", priv->serif_font_family,
   1335                  "default-font-size", priv->default_font_size,
   1336                  "default-monospace-font-size", priv->default_monospace_font_size,
   1337                  "minimum-font-size", priv->minimum_font_size,
   1338                  "minimum-logical-font-size", priv->minimum_logical_font_size,
   1339                  "auto-load-images", priv->auto_load_images,
   1340                  "auto-shrink-images", priv->auto_shrink_images,
   1341                  "print-backgrounds", priv->print_backgrounds,
   1342                  "enable-scripts", priv->enable_scripts,
   1343                  "enable-plugins", priv->enable_plugins,
   1344                  "resizable-text-areas", priv->resizable_text_areas,
   1345                  "user-stylesheet-uri", priv->user_stylesheet_uri,
   1346                  "zoom-step", priv->zoom_step,
   1347                  "enable-developer-extras", priv->enable_developer_extras,
   1348                  "enable-private-browsing", priv->enable_private_browsing,
   1349                  "enable-spell-checking", priv->enable_spell_checking,
   1350                  "spell-checking-languages", priv->spell_checking_languages,
   1351                  "enable-caret-browsing", priv->enable_caret_browsing,
   1352                  "enable-html5-database", priv->enable_html5_database,
   1353                  "enable-html5-local-storage", priv->enable_html5_local_storage,
   1354                  "enable-xss-auditor", priv->enable_xss_auditor,
   1355                  "enable-spatial-navigation", priv->enable_spatial_navigation,
   1356                  "enable-frame-flattening", priv->enable_frame_flattening,
   1357                  "user-agent", webkit_web_settings_get_user_agent(web_settings),
   1358                  "javascript-can-open-windows-automatically", priv->javascript_can_open_windows_automatically,
   1359                  "javascript-can-access-clipboard", priv->javascript_can_access_clipboard,
   1360                  "enable-offline-web-application-cache", priv->enable_offline_web_application_cache,
   1361                  "editing-behavior", priv->editing_behavior,
   1362                  "enable-universal-access-from-file-uris", priv->enable_universal_access_from_file_uris,
   1363                  "enable-file-access-from-file-uris", priv->enable_file_access_from_file_uris,
   1364                  "enable-dom-paste", priv->enable_dom_paste,
   1365                  "tab-key-cycles-through-elements", priv->tab_key_cycles_through_elements,
   1366                  "enable-default-context-menu", priv->enable_default_context_menu,
   1367                  "enable-site-specific-quirks", priv->enable_site_specific_quirks,
   1368                  "enable-page-cache", priv->enable_page_cache,
   1369                  "auto-resize-window", priv->auto_resize_window,
   1370                  "enable-java-applet", priv->enable_java_applet,
   1371                  "enable-hyperlink-auditing", priv->enable_hyperlink_auditing,
   1372                  "enable-fullscreen", priv->enable_fullscreen,
   1373                  "enable-dns-prefetching", priv->enable_dns_prefetching,
   1374                  NULL));
   1375 
   1376     return copy;
   1377 }
   1378 
   1379 /**
   1380  * webkit_web_settings_add_extra_plugin_directory:
   1381  * @web_view: a #WebKitWebView
   1382  * @directory: the directory to add
   1383  *
   1384  * Adds the @directory to paths where @web_view will search for plugins.
   1385  *
   1386  * Since: 1.0.3
   1387  */
   1388 void webkit_web_settings_add_extra_plugin_directory(WebKitWebView* webView, const gchar* directory)
   1389 {
   1390     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
   1391 
   1392     PluginDatabase::installedPlugins()->addExtraPluginDirectory(filenameToString(directory));
   1393 }
   1394 
   1395 /**
   1396  * webkit_web_settings_get_user_agent:
   1397  * @web_settings: a #WebKitWebSettings
   1398  *
   1399  * Returns the User-Agent string currently used by the web view(s) associated
   1400  * with the @web_settings.
   1401  *
   1402  * Since: 1.1.11
   1403  */
   1404 G_CONST_RETURN gchar* webkit_web_settings_get_user_agent(WebKitWebSettings* webSettings)
   1405 {
   1406     g_return_val_if_fail(WEBKIT_IS_WEB_SETTINGS(webSettings), NULL);
   1407 
   1408     WebKitWebSettingsPrivate* priv = webSettings->priv;
   1409 
   1410     return priv->user_agent;
   1411 }
   1412 
   1413 namespace WebKit {
   1414 
   1415 WebCore::EditingBehaviorType core(WebKitEditingBehavior type)
   1416 {
   1417     return (WebCore::EditingBehaviorType)type;
   1418 }
   1419 
   1420 }
   1421