Home | History | Annotate | Download | only in glue
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "webkit/glue/webpreferences.h"
      6 
      7 #include "base/string_util.h"
      8 #include "base/utf_string_conversions.h"
      9 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRuntimeFeatures.h"
     10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h"
     11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h"
     12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
     13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h"
     14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
     15 #include "webkit/glue/webkit_glue.h"
     16 
     17 using WebKit::WebRuntimeFeatures;
     18 using WebKit::WebSettings;
     19 using WebKit::WebString;
     20 using WebKit::WebURL;
     21 using WebKit::WebView;
     22 
     23 WebPreferences::WebPreferences()
     24     : standard_font_family(ASCIIToUTF16("Times New Roman")),
     25       fixed_font_family(ASCIIToUTF16("Courier New")),
     26       serif_font_family(ASCIIToUTF16("Times New Roman")),
     27       sans_serif_font_family(ASCIIToUTF16("Arial")),
     28       cursive_font_family(ASCIIToUTF16("Script")),
     29       fantasy_font_family(),  // Not sure what to use on Windows.
     30       default_font_size(16),
     31       default_fixed_font_size(13),
     32       minimum_font_size(0),
     33       minimum_logical_font_size(6),
     34       default_encoding("ISO-8859-1"),
     35       javascript_enabled(true),
     36       web_security_enabled(true),
     37       javascript_can_open_windows_automatically(true),
     38       loads_images_automatically(true),
     39       plugins_enabled(true),
     40       dom_paste_enabled(false),  // enables execCommand("paste")
     41       developer_extras_enabled(false),  // Requires extra work by embedder
     42       site_specific_quirks_enabled(false),
     43       shrinks_standalone_images_to_fit(true),
     44       uses_universal_detector(false),  // Disabled: page cycler regression
     45       text_areas_are_resizable(true),
     46       java_enabled(true),
     47       allow_scripts_to_close_windows(false),
     48       uses_page_cache(false),
     49       remote_fonts_enabled(true),
     50       javascript_can_access_clipboard(false),
     51       xss_auditor_enabled(false),
     52       local_storage_enabled(false),
     53       databases_enabled(false),
     54       application_cache_enabled(false),
     55       tabs_to_links(true),
     56       caret_browsing_enabled(false),
     57       hyperlink_auditing_enabled(true),
     58       user_style_sheet_enabled(false),
     59       author_and_user_styles_enabled(true),
     60       frame_flattening_enabled(false),
     61       allow_universal_access_from_file_urls(false),
     62       allow_file_access_from_file_urls(false),
     63       webaudio_enabled(false),
     64       experimental_webgl_enabled(false),
     65       gl_multisampling_enabled(true),
     66       show_composited_layer_borders(false),
     67       show_composited_layer_tree(false),
     68       show_fps_counter(false),
     69       asynchronous_spell_checking_enabled(true),
     70       accelerated_compositing_enabled(false),
     71       force_compositing_mode(false),
     72       composite_to_texture_enabled(false),
     73       accelerated_layers_enabled(false),
     74       accelerated_video_enabled(false),
     75       accelerated_2d_canvas_enabled(false),
     76       accelerated_drawing_enabled(false),
     77       accelerated_plugins_enabled(false),
     78       memory_info_enabled(false),
     79       interactive_form_validation_enabled(true),
     80       fullscreen_enabled(false) {
     81 }
     82 
     83 WebPreferences::~WebPreferences() {
     84 }
     85 
     86 void WebPreferences::Apply(WebView* web_view) const {
     87   WebSettings* settings = web_view->settings();
     88   settings->setStandardFontFamily(standard_font_family);
     89   settings->setFixedFontFamily(fixed_font_family);
     90   settings->setSerifFontFamily(serif_font_family);
     91   settings->setSansSerifFontFamily(sans_serif_font_family);
     92   settings->setCursiveFontFamily(cursive_font_family);
     93   settings->setFantasyFontFamily(fantasy_font_family);
     94   settings->setDefaultFontSize(default_font_size);
     95   settings->setDefaultFixedFontSize(default_fixed_font_size);
     96   settings->setMinimumFontSize(minimum_font_size);
     97   settings->setMinimumLogicalFontSize(minimum_logical_font_size);
     98   settings->setDefaultTextEncodingName(ASCIIToUTF16(default_encoding));
     99   settings->setJavaScriptEnabled(javascript_enabled);
    100   settings->setWebSecurityEnabled(web_security_enabled);
    101   settings->setJavaScriptCanOpenWindowsAutomatically(
    102       javascript_can_open_windows_automatically);
    103   settings->setLoadsImagesAutomatically(loads_images_automatically);
    104   settings->setPluginsEnabled(plugins_enabled);
    105   settings->setDOMPasteAllowed(dom_paste_enabled);
    106   settings->setDeveloperExtrasEnabled(developer_extras_enabled);
    107   settings->setNeedsSiteSpecificQuirks(site_specific_quirks_enabled);
    108   settings->setShrinksStandaloneImagesToFit(shrinks_standalone_images_to_fit);
    109   settings->setUsesEncodingDetector(uses_universal_detector);
    110   settings->setTextAreasAreResizable(text_areas_are_resizable);
    111   settings->setAllowScriptsToCloseWindows(allow_scripts_to_close_windows);
    112   if (user_style_sheet_enabled)
    113     settings->setUserStyleSheetLocation(user_style_sheet_location);
    114   else
    115     settings->setUserStyleSheetLocation(WebURL());
    116   settings->setAuthorAndUserStylesEnabled(author_and_user_styles_enabled);
    117   settings->setUsesPageCache(uses_page_cache);
    118   settings->setDownloadableBinaryFontsEnabled(remote_fonts_enabled);
    119   settings->setJavaScriptCanAccessClipboard(javascript_can_access_clipboard);
    120   settings->setXSSAuditorEnabled(xss_auditor_enabled);
    121   settings->setLocalStorageEnabled(local_storage_enabled);
    122   WebRuntimeFeatures::enableDatabase(
    123       WebRuntimeFeatures::isDatabaseEnabled() || databases_enabled);
    124   settings->setOfflineWebApplicationCacheEnabled(application_cache_enabled);
    125   settings->setCaretBrowsingEnabled(caret_browsing_enabled);
    126   settings->setHyperlinkAuditingEnabled(hyperlink_auditing_enabled);
    127 
    128   // This setting affects the behavior of links in an editable region:
    129   // clicking the link should select it rather than navigate to it.
    130   // Safari uses the same default. It is unlikley an embedder would want to
    131   // change this, since it would break existing rich text editors.
    132   settings->setEditableLinkBehaviorNeverLive();
    133 
    134   settings->setFrameFlatteningEnabled(frame_flattening_enabled);
    135 
    136   settings->setFontRenderingModeNormal();
    137   settings->setJavaEnabled(java_enabled);
    138 
    139   // Turn this on to cause WebCore to paint the resize corner for us.
    140   settings->setShouldPaintCustomScrollbars(true);
    141 
    142   // By default, allow_universal_access_from_file_urls is set to false and thus
    143   // we mitigate attacks from local HTML files by not granting file:// URLs
    144   // universal access. Only test shell will enable this.
    145   settings->setAllowUniversalAccessFromFileURLs(
    146       allow_universal_access_from_file_urls);
    147   settings->setAllowFileAccessFromFileURLs(allow_file_access_from_file_urls);
    148 
    149   // We prevent WebKit from checking if it needs to add a "text direction"
    150   // submenu to a context menu. it is not only because we don't need the result
    151   // but also because it cause a possible crash in Editor::hasBidiSelection().
    152   settings->setTextDirectionSubmenuInclusionBehaviorNeverIncluded();
    153 
    154   // Enable the web audio API if requested on the command line.
    155   settings->setWebAudioEnabled(webaudio_enabled);
    156 
    157   // Enable experimental WebGL support if requested on command line
    158   // and support is compiled in.
    159   settings->setExperimentalWebGLEnabled(experimental_webgl_enabled);
    160 
    161   // Disable GL multisampling if requested on command line.
    162   settings->setOpenGLMultisamplingEnabled(gl_multisampling_enabled);
    163 
    164   // Display colored borders around composited render layers if requested
    165   // on command line.
    166   settings->setShowDebugBorders(show_composited_layer_borders);
    167 
    168   // Display an FPS indicator if requested on the command line.
    169   settings->setShowFPSCounter(show_fps_counter);
    170 
    171   // Display the current compositor tree as overlay if requested on
    172   // the command line
    173   settings->setShowPlatformLayerTree(show_composited_layer_tree);
    174 
    175   // Enable gpu-accelerated compositing if requested on the command line.
    176   settings->setAcceleratedCompositingEnabled(accelerated_compositing_enabled);
    177 
    178   // Always enter compositing if requested on the command line.
    179   settings->setForceCompositingMode(force_compositing_mode);
    180 
    181   // Enable composite to offscreen texture if requested on the command line.
    182   settings->setCompositeToTextureEnabled(composite_to_texture_enabled);
    183 
    184   // Enable gpu-accelerated 2d canvas if requested on the command line.
    185   settings->setAccelerated2dCanvasEnabled(accelerated_2d_canvas_enabled);
    186 
    187   // Enable gpu-accelerated drawing if requested on the command line.
    188   settings->setAcceleratedDrawingEnabled(accelerated_drawing_enabled);
    189 
    190   // Enabling accelerated layers from the command line enabled accelerated
    191   // 3D CSS, Video, and Animations.
    192   settings->setAcceleratedCompositingFor3DTransformsEnabled(
    193       accelerated_layers_enabled);
    194   settings->setAcceleratedCompositingForVideoEnabled(
    195       accelerated_video_enabled);
    196   settings->setAcceleratedCompositingForAnimationEnabled(
    197       accelerated_layers_enabled);
    198 
    199   // Enabling accelerated plugins if specified from the command line.
    200   settings->setAcceleratedCompositingForPluginsEnabled(
    201       accelerated_plugins_enabled);
    202 
    203   // WebGL and accelerated 2D canvas are always gpu composited.
    204   settings->setAcceleratedCompositingForCanvasEnabled(
    205       experimental_webgl_enabled || accelerated_2d_canvas_enabled);
    206 
    207   // Enable memory info reporting to page if requested on the command line.
    208   settings->setMemoryInfoEnabled(memory_info_enabled);
    209 
    210   settings->setAsynchronousSpellCheckingEnabled(
    211       asynchronous_spell_checking_enabled);
    212 
    213   for (WebInspectorPreferences::const_iterator it = inspector_settings.begin();
    214        it != inspector_settings.end(); ++it)
    215     web_view->setInspectorSetting(WebString::fromUTF8(it->first),
    216                                   WebString::fromUTF8(it->second));
    217 
    218   // Tabs to link is not part of the settings. WebCore calls
    219   // ChromeClient::tabsToLinks which is part of the glue code.
    220   web_view->setTabsToLinks(tabs_to_links);
    221 
    222   settings->setInteractiveFormValidationEnabled(
    223       interactive_form_validation_enabled);
    224 
    225   settings->setFullScreenEnabled(fullscreen_enabled);
    226 }
    227