Home | History | Annotate | Download | only in page
      1 /*
      2  * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "Settings.h"
     28 
     29 #include "BackForwardList.h"
     30 #include "Frame.h"
     31 #include "FrameTree.h"
     32 #include "FrameView.h"
     33 #include "HistoryItem.h"
     34 #include "Page.h"
     35 #include "PageCache.h"
     36 #include <limits>
     37 
     38 using namespace std;
     39 
     40 namespace WebCore {
     41 
     42 static void setNeedsReapplyStylesInAllFrames(Page* page)
     43 {
     44     for (Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext())
     45         frame->setNeedsReapplyStyles();
     46 }
     47 
     48 #if USE(SAFARI_THEME)
     49 bool Settings::gShouldPaintNativeControls = true;
     50 #endif
     51 
     52 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
     53 bool Settings::gShouldUseHighResolutionTimers = true;
     54 #endif
     55 
     56 Settings::Settings(Page* page)
     57     : m_page(page)
     58 #ifdef ANDROID_LAYOUT
     59     , m_layoutAlgorithm(kLayoutFitColumnToScreen)
     60 #endif
     61     , m_editableLinkBehavior(EditableLinkDefaultBehavior)
     62     , m_textDirectionSubmenuInclusionBehavior(TextDirectionSubmenuAutomaticallyIncluded)
     63     , m_minimumFontSize(0)
     64     , m_minimumLogicalFontSize(0)
     65     , m_defaultFontSize(0)
     66     , m_defaultFixedFontSize(0)
     67 #ifdef ANDROID_LAYOUT
     68     , m_useWideViewport(false)
     69 #endif
     70 #ifdef ANDROID_MULTIPLE_WINDOWS
     71     , m_supportMultipleWindows(true)
     72 #endif
     73 #ifdef ANDROID_BLOCK_NETWORK_IMAGE
     74     , m_blockNetworkImage(false)
     75 #endif
     76     , m_maximumDecodedImageSize(numeric_limits<size_t>::max())
     77     , m_localStorageQuota(5 * 1024 * 1024)  // Suggested by the HTML5 spec.
     78     , m_pluginAllowedRunTime(numeric_limits<unsigned>::max())
     79     , m_isJavaEnabled(false)
     80     , m_loadsImagesAutomatically(false)
     81     , m_privateBrowsingEnabled(false)
     82     , m_caretBrowsingEnabled(false)
     83     , m_areImagesEnabled(true)
     84     , m_arePluginsEnabled(false)
     85     , m_databasesEnabled(false)
     86     , m_localStorageEnabled(false)
     87     , m_isJavaScriptEnabled(false)
     88     , m_isWebSecurityEnabled(true)
     89     , m_allowUniversalAccessFromFileURLs(true)
     90     , m_javaScriptCanOpenWindowsAutomatically(false)
     91     , m_shouldPrintBackgrounds(false)
     92     , m_textAreasAreResizable(false)
     93 #if ENABLE(DASHBOARD_SUPPORT)
     94     , m_usesDashboardBackwardCompatibilityMode(false)
     95 #endif
     96     , m_needsAdobeFrameReloadingQuirk(false)
     97     , m_needsKeyboardEventDisambiguationQuirks(false)
     98     , m_treatsAnyTextCSSLinkAsStylesheet(false)
     99     , m_needsLeopardMailQuirks(false)
    100     , m_needsTigerMailQuirks(false)
    101     , m_isDOMPasteAllowed(false)
    102     , m_shrinksStandaloneImagesToFit(true)
    103     , m_usesPageCache(false)
    104     , m_showsURLsInToolTips(false)
    105     , m_forceFTPDirectoryListings(false)
    106     , m_developerExtrasEnabled(false)
    107     , m_authorAndUserStylesEnabled(true)
    108     , m_needsSiteSpecificQuirks(false)
    109     , m_fontRenderingMode(0)
    110     , m_frameSetFlatteningEnabled(false)
    111     , m_webArchiveDebugModeEnabled(false)
    112     , m_localFileContentSniffingEnabled(false)
    113     , m_inApplicationChromeMode(false)
    114     , m_offlineWebApplicationCacheEnabled(false)
    115     , m_shouldPaintCustomScrollbars(false)
    116     , m_zoomsTextOnly(false)
    117     , m_enforceCSSMIMETypeInStrictMode(true)
    118     , m_usesEncodingDetector(false)
    119     , m_allowScriptsToCloseWindows(false)
    120     , m_editingBehavior(
    121 #if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN))
    122         // (PLATFORM(MAC) is always false in Chromium, hence the extra condition.)
    123         EditingMacBehavior
    124 #else
    125         EditingWindowsBehavior
    126 #endif
    127         )
    128     // FIXME: This should really be disabled by default as it makes platforms that don't support the feature download files
    129     // they can't use by. Leaving enabled for now to not change existing behavior.
    130     , m_downloadableBinaryFontsEnabled(true)
    131     , m_xssAuditorEnabled(false)
    132     , m_acceleratedCompositingEnabled(true)
    133     , m_showDebugBorders(false)
    134     , m_showRepaintCounter(false)
    135     , m_experimentalNotificationsEnabled(false)
    136     , m_webGLEnabled(false)
    137     , m_geolocationEnabled(true)
    138     , m_loadDeferringEnabled(true)
    139 #ifdef ANDROID_PLUGINS
    140     , m_pluginsOnDemand(false)
    141 #endif
    142 {
    143     // A Frame may not have been created yet, so we initialize the AtomicString
    144     // hash before trying to use it.
    145     AtomicString::init();
    146 #ifdef ANDROID_META_SUPPORT
    147     resetMetadataSettings();
    148 #endif
    149 }
    150 
    151 void Settings::setStandardFontFamily(const AtomicString& standardFontFamily)
    152 {
    153     if (standardFontFamily == m_standardFontFamily)
    154         return;
    155 
    156     m_standardFontFamily = standardFontFamily;
    157     setNeedsReapplyStylesInAllFrames(m_page);
    158 }
    159 
    160 void Settings::setFixedFontFamily(const AtomicString& fixedFontFamily)
    161 {
    162     if (m_fixedFontFamily == fixedFontFamily)
    163         return;
    164 
    165     m_fixedFontFamily = fixedFontFamily;
    166     setNeedsReapplyStylesInAllFrames(m_page);
    167 }
    168 
    169 void Settings::setSerifFontFamily(const AtomicString& serifFontFamily)
    170 {
    171     if (m_serifFontFamily == serifFontFamily)
    172         return;
    173 
    174     m_serifFontFamily = serifFontFamily;
    175     setNeedsReapplyStylesInAllFrames(m_page);
    176 }
    177 
    178 void Settings::setSansSerifFontFamily(const AtomicString& sansSerifFontFamily)
    179 {
    180     if (m_sansSerifFontFamily == sansSerifFontFamily)
    181         return;
    182 
    183     m_sansSerifFontFamily = sansSerifFontFamily;
    184     setNeedsReapplyStylesInAllFrames(m_page);
    185 }
    186 
    187 void Settings::setCursiveFontFamily(const AtomicString& cursiveFontFamily)
    188 {
    189     if (m_cursiveFontFamily == cursiveFontFamily)
    190         return;
    191 
    192     m_cursiveFontFamily = cursiveFontFamily;
    193     setNeedsReapplyStylesInAllFrames(m_page);
    194 }
    195 
    196 void Settings::setFantasyFontFamily(const AtomicString& fantasyFontFamily)
    197 {
    198     if (m_fantasyFontFamily == fantasyFontFamily)
    199         return;
    200 
    201     m_fantasyFontFamily = fantasyFontFamily;
    202     setNeedsReapplyStylesInAllFrames(m_page);
    203 }
    204 
    205 void Settings::setMinimumFontSize(int minimumFontSize)
    206 {
    207     if (m_minimumFontSize == minimumFontSize)
    208         return;
    209 
    210     m_minimumFontSize = minimumFontSize;
    211     setNeedsReapplyStylesInAllFrames(m_page);
    212 }
    213 
    214 void Settings::setMinimumLogicalFontSize(int minimumLogicalFontSize)
    215 {
    216     if (m_minimumLogicalFontSize == minimumLogicalFontSize)
    217         return;
    218 
    219     m_minimumLogicalFontSize = minimumLogicalFontSize;
    220     setNeedsReapplyStylesInAllFrames(m_page);
    221 }
    222 
    223 void Settings::setDefaultFontSize(int defaultFontSize)
    224 {
    225     if (m_defaultFontSize == defaultFontSize)
    226         return;
    227 
    228     m_defaultFontSize = defaultFontSize;
    229     setNeedsReapplyStylesInAllFrames(m_page);
    230 }
    231 
    232 void Settings::setDefaultFixedFontSize(int defaultFontSize)
    233 {
    234     if (m_defaultFixedFontSize == defaultFontSize)
    235         return;
    236 
    237     m_defaultFixedFontSize = defaultFontSize;
    238     setNeedsReapplyStylesInAllFrames(m_page);
    239 }
    240 
    241 #ifdef ANDROID_BLOCK_NETWORK_IMAGE
    242 void Settings::setBlockNetworkImage(bool blockNetworkImage)
    243 {
    244     m_blockNetworkImage = blockNetworkImage;
    245 }
    246 #endif
    247 
    248 void Settings::setLoadsImagesAutomatically(bool loadsImagesAutomatically)
    249 {
    250     m_loadsImagesAutomatically = loadsImagesAutomatically;
    251 }
    252 
    253 void Settings::setJavaScriptEnabled(bool isJavaScriptEnabled)
    254 {
    255     m_isJavaScriptEnabled = isJavaScriptEnabled;
    256 }
    257 
    258 void Settings::setWebSecurityEnabled(bool isWebSecurityEnabled)
    259 {
    260     m_isWebSecurityEnabled = isWebSecurityEnabled;
    261 }
    262 
    263 void Settings::setAllowUniversalAccessFromFileURLs(bool allowUniversalAccessFromFileURLs)
    264 {
    265     m_allowUniversalAccessFromFileURLs = allowUniversalAccessFromFileURLs;
    266 }
    267 
    268 void Settings::setJavaEnabled(bool isJavaEnabled)
    269 {
    270     m_isJavaEnabled = isJavaEnabled;
    271 }
    272 
    273 void Settings::setImagesEnabled(bool areImagesEnabled)
    274 {
    275     m_areImagesEnabled = areImagesEnabled;
    276 }
    277 
    278 void Settings::setPluginsEnabled(bool arePluginsEnabled)
    279 {
    280     m_arePluginsEnabled = arePluginsEnabled;
    281 }
    282 
    283 void Settings::setDatabasesEnabled(bool databasesEnabled)
    284 {
    285     m_databasesEnabled = databasesEnabled;
    286 }
    287 
    288 void Settings::setLocalStorageEnabled(bool localStorageEnabled)
    289 {
    290     m_localStorageEnabled = localStorageEnabled;
    291 }
    292 
    293 void Settings::setLocalStorageQuota(unsigned localStorageQuota)
    294 {
    295     m_localStorageQuota = localStorageQuota;
    296 }
    297 
    298 void Settings::setPrivateBrowsingEnabled(bool privateBrowsingEnabled)
    299 {
    300     m_privateBrowsingEnabled = privateBrowsingEnabled;
    301 }
    302 
    303 void Settings::setJavaScriptCanOpenWindowsAutomatically(bool javaScriptCanOpenWindowsAutomatically)
    304 {
    305     m_javaScriptCanOpenWindowsAutomatically = javaScriptCanOpenWindowsAutomatically;
    306 }
    307 
    308 void Settings::setDefaultTextEncodingName(const String& defaultTextEncodingName)
    309 {
    310     m_defaultTextEncodingName = defaultTextEncodingName;
    311 }
    312 
    313 void Settings::setUserStyleSheetLocation(const KURL& userStyleSheetLocation)
    314 {
    315     if (m_userStyleSheetLocation == userStyleSheetLocation)
    316         return;
    317 
    318     m_userStyleSheetLocation = userStyleSheetLocation;
    319 
    320     m_page->userStyleSheetLocationChanged();
    321 }
    322 
    323 void Settings::setShouldPrintBackgrounds(bool shouldPrintBackgrounds)
    324 {
    325     m_shouldPrintBackgrounds = shouldPrintBackgrounds;
    326 }
    327 
    328 void Settings::setTextAreasAreResizable(bool textAreasAreResizable)
    329 {
    330     if (m_textAreasAreResizable == textAreasAreResizable)
    331         return;
    332 
    333     m_textAreasAreResizable = textAreasAreResizable;
    334     setNeedsReapplyStylesInAllFrames(m_page);
    335 }
    336 
    337 void Settings::setEditableLinkBehavior(EditableLinkBehavior editableLinkBehavior)
    338 {
    339     m_editableLinkBehavior = editableLinkBehavior;
    340 }
    341 
    342 void Settings::setTextDirectionSubmenuInclusionBehavior(TextDirectionSubmenuInclusionBehavior behavior)
    343 {
    344     m_textDirectionSubmenuInclusionBehavior = behavior;
    345 }
    346 
    347 #if ENABLE(DASHBOARD_SUPPORT)
    348 void Settings::setUsesDashboardBackwardCompatibilityMode(bool usesDashboardBackwardCompatibilityMode)
    349 {
    350     m_usesDashboardBackwardCompatibilityMode = usesDashboardBackwardCompatibilityMode;
    351 }
    352 #endif
    353 
    354 // FIXME: This quirk is needed because of Radar 4674537 and 5211271. We need to phase it out once Adobe
    355 // can fix the bug from their end.
    356 void Settings::setNeedsAdobeFrameReloadingQuirk(bool shouldNotReloadIFramesForUnchangedSRC)
    357 {
    358     m_needsAdobeFrameReloadingQuirk = shouldNotReloadIFramesForUnchangedSRC;
    359 }
    360 
    361 // This is a quirk we are pro-actively applying to old applications. It changes keyboard event dispatching,
    362 // making keyIdentifier available on keypress events, making charCode available on keydown/keyup events,
    363 // and getting keypress dispatched in more cases.
    364 void Settings::setNeedsKeyboardEventDisambiguationQuirks(bool needsQuirks)
    365 {
    366     m_needsKeyboardEventDisambiguationQuirks = needsQuirks;
    367 }
    368 
    369 void Settings::setTreatsAnyTextCSSLinkAsStylesheet(bool treatsAnyTextCSSLinkAsStylesheet)
    370 {
    371     m_treatsAnyTextCSSLinkAsStylesheet = treatsAnyTextCSSLinkAsStylesheet;
    372 }
    373 
    374 void Settings::setNeedsLeopardMailQuirks(bool needsQuirks)
    375 {
    376     m_needsLeopardMailQuirks = needsQuirks;
    377 }
    378 
    379 void Settings::setNeedsTigerMailQuirks(bool needsQuirks)
    380 {
    381     m_needsTigerMailQuirks = needsQuirks;
    382 }
    383 
    384 void Settings::setDOMPasteAllowed(bool DOMPasteAllowed)
    385 {
    386     m_isDOMPasteAllowed = DOMPasteAllowed;
    387 }
    388 
    389 void Settings::setUsesPageCache(bool usesPageCache)
    390 {
    391     if (m_usesPageCache == usesPageCache)
    392         return;
    393 
    394     m_usesPageCache = usesPageCache;
    395     if (!m_usesPageCache) {
    396         HistoryItemVector& historyItems = m_page->backForwardList()->entries();
    397         for (unsigned i = 0; i < historyItems.size(); i++)
    398             pageCache()->remove(historyItems[i].get());
    399         pageCache()->releaseAutoreleasedPagesNow();
    400     }
    401 }
    402 
    403 void Settings::setShrinksStandaloneImagesToFit(bool shrinksStandaloneImagesToFit)
    404 {
    405     m_shrinksStandaloneImagesToFit = shrinksStandaloneImagesToFit;
    406 }
    407 
    408 void Settings::setShowsURLsInToolTips(bool showsURLsInToolTips)
    409 {
    410     m_showsURLsInToolTips = showsURLsInToolTips;
    411 }
    412 
    413 void Settings::setFTPDirectoryTemplatePath(const String& path)
    414 {
    415     m_ftpDirectoryTemplatePath = path;
    416 }
    417 
    418 void Settings::setForceFTPDirectoryListings(bool force)
    419 {
    420     m_forceFTPDirectoryListings = force;
    421 }
    422 
    423 void Settings::setDeveloperExtrasEnabled(bool developerExtrasEnabled)
    424 {
    425     m_developerExtrasEnabled = developerExtrasEnabled;
    426 }
    427 
    428 #ifdef ANDROID_META_SUPPORT
    429 void Settings::resetMetadataSettings()
    430 {
    431     m_viewport_width = -1;
    432     m_viewport_height = -1;
    433     m_viewport_initial_scale = 0;
    434     m_viewport_minimum_scale = 0;
    435     m_viewport_maximum_scale = 0;
    436     m_viewport_user_scalable = true;
    437     m_viewport_target_densitydpi = -1;
    438     m_format_detection_telephone = true;
    439     m_format_detection_address = true;
    440     m_format_detection_email = true;
    441 }
    442 
    443 void Settings::setMetadataSettings(const String& key, const String& value)
    444 {
    445     if (key == "width") {
    446         if (value == "device-width") {
    447             m_viewport_width = 0;
    448         } else {
    449             int width = value.toInt();
    450             if (width <= 10000) {
    451                 if (width <= 320) {
    452                     // This is a hack to accommodate the pages designed for the
    453                     // original iPhone. The new version, since 10/2007, is to
    454                     // use device-width which works for both portrait and
    455                     // landscape modes.
    456                     m_viewport_width = 0;
    457                 } else {
    458                     m_viewport_width = width;
    459                 }
    460             }
    461         }
    462     } else if (key == "height") {
    463         if (value == "device-height") {
    464             m_viewport_height = 0;
    465         } else {
    466             int height = value.toInt();
    467             if (height >= 200 && height <= 10000) {
    468                 m_viewport_height = height;
    469             }
    470         }
    471     } else if (key == "initial-scale") {
    472         int scale = int(value.toFloat() * 100);
    473         if (scale >= 1 && scale <= 1000) {
    474             m_viewport_initial_scale = scale;
    475         }
    476     } else if (key == "minimum-scale") {
    477         int scale = int(value.toFloat() * 100);
    478         if (scale >= 1 && scale <= 1000) {
    479             m_viewport_minimum_scale = scale;
    480         }
    481     } else if (key == "maximum-scale") {
    482         int scale = int(value.toFloat() * 100);
    483         if (scale >= 1 && scale <= 1000) {
    484             m_viewport_maximum_scale = scale;
    485         }
    486     } else if (key == "user-scalable") {
    487         // even Apple doc says using "no", "0" is common in the real world, and
    488         // some sites, e.g. gomoviesapp.com, use "false".
    489         if (value == "no" || value == "0" || value == "false") {
    490             m_viewport_user_scalable = false;
    491         }
    492     } else if (key == "target-densitydpi") {
    493         if (value == "device-dpi") {
    494             m_viewport_target_densitydpi = 0;
    495         } else if (value == "low-dpi") {
    496             m_viewport_target_densitydpi = 120;
    497         } else if (value == "medium-dpi") {
    498             m_viewport_target_densitydpi = 160;
    499         } else if (value == "high-dpi") {
    500             m_viewport_target_densitydpi = 240;
    501         } else {
    502             int dpi = value.toInt();
    503             if (dpi >= 70 && dpi <= 400) {
    504                 m_viewport_target_densitydpi = dpi;
    505             }
    506         }
    507     } else if (key == "telephone") {
    508         if (value == "no") {
    509             m_format_detection_telephone = false;
    510         }
    511     } else if (key == "address") {
    512         if (value == "no") {
    513             m_format_detection_address = false;
    514         }
    515     } else if (key == "email") {
    516         if (value == "no") {
    517             m_format_detection_email = false;
    518         }
    519     } else if (key == "format-detection") {
    520         // even Apple doc says "format-detection" should be the name of the
    521         // <meta> tag. In the real world, e.g. amazon.com, use
    522         // "format-detection=no" in the "viewport" <meta> tag to disable all
    523         // format detection.
    524         if (value == "no") {
    525             m_format_detection_telephone = false;
    526             m_format_detection_address = false;
    527             m_format_detection_email = false;
    528         }
    529     }
    530 }
    531 
    532 void Settings::setViewportWidth(int width)
    533 {
    534     if (width < 0 || width > 10000)
    535         m_viewport_width = -1;
    536     else
    537         m_viewport_width = width;
    538 }
    539 
    540 void Settings::setViewportHeight(int height)
    541 {
    542     if (height < 0 || height > 10000)
    543         m_viewport_height = -1;
    544     else
    545         m_viewport_height = height;
    546 }
    547 
    548 void Settings::setViewportInitialScale(int scale)
    549 {
    550     if (scale < 1 || scale > 1000)
    551         m_viewport_initial_scale = 0;
    552     else
    553         m_viewport_initial_scale = scale;
    554 }
    555 
    556 void Settings::setViewportMinimumScale(int scale)
    557 {
    558     if (scale < 1 || scale > 1000)
    559         m_viewport_minimum_scale = 0;
    560     else
    561         m_viewport_minimum_scale = scale;
    562 }
    563 
    564 void Settings::setViewportMaximumScale(int scale)
    565 {
    566     if (scale < 1 || scale > 1000)
    567         m_viewport_maximum_scale = 0;
    568     else
    569         m_viewport_maximum_scale = scale;
    570 }
    571 
    572 void Settings::setViewportUserScalable(bool scalable)
    573 {
    574     m_viewport_user_scalable = scalable;
    575 }
    576 
    577 void Settings::setViewportTargetDensityDpi(int dpi)
    578 {
    579     if (dpi < 0 || dpi > 400)
    580         m_viewport_target_densitydpi = -1;
    581     else
    582         m_viewport_target_densitydpi = dpi;
    583 }
    584 
    585 void Settings::setFormatDetectionAddress(bool detect)
    586 {
    587     m_format_detection_address = detect;
    588 }
    589 
    590 void Settings::setFormatDetectionEmail(bool detect)
    591 {
    592     m_format_detection_email = detect;
    593 }
    594 
    595 void Settings::setFormatDetectionTelephone(bool detect)
    596 {
    597     m_format_detection_telephone = detect;
    598 }
    599 #endif
    600 
    601 void Settings::setAuthorAndUserStylesEnabled(bool authorAndUserStylesEnabled)
    602 {
    603     if (m_authorAndUserStylesEnabled == authorAndUserStylesEnabled)
    604         return;
    605 
    606     m_authorAndUserStylesEnabled = authorAndUserStylesEnabled;
    607     setNeedsReapplyStylesInAllFrames(m_page);
    608 }
    609 
    610 void Settings::setFontRenderingMode(FontRenderingMode mode)
    611 {
    612     if (fontRenderingMode() == mode)
    613         return;
    614     m_fontRenderingMode = mode;
    615     setNeedsReapplyStylesInAllFrames(m_page);
    616 }
    617 
    618 FontRenderingMode Settings::fontRenderingMode() const
    619 {
    620     return static_cast<FontRenderingMode>(m_fontRenderingMode);
    621 }
    622 
    623 void Settings::setNeedsSiteSpecificQuirks(bool needsQuirks)
    624 {
    625     m_needsSiteSpecificQuirks = needsQuirks;
    626 }
    627 
    628 void Settings::setFrameSetFlatteningEnabled(bool frameSetFlatteningEnabled)
    629 {
    630     m_frameSetFlatteningEnabled = frameSetFlatteningEnabled;
    631 }
    632 
    633 void Settings::setWebArchiveDebugModeEnabled(bool enabled)
    634 {
    635     m_webArchiveDebugModeEnabled = enabled;
    636 }
    637 
    638 void Settings::setLocalFileContentSniffingEnabled(bool enabled)
    639 {
    640     m_localFileContentSniffingEnabled = enabled;
    641 }
    642 
    643 void Settings::setLocalStorageDatabasePath(const String& path)
    644 {
    645     m_localStorageDatabasePath = path;
    646 }
    647 
    648 void Settings::setApplicationChromeMode(bool mode)
    649 {
    650     m_inApplicationChromeMode = mode;
    651 }
    652 
    653 void Settings::setOfflineWebApplicationCacheEnabled(bool enabled)
    654 {
    655     m_offlineWebApplicationCacheEnabled = enabled;
    656 }
    657 
    658 void Settings::setShouldPaintCustomScrollbars(bool shouldPaintCustomScrollbars)
    659 {
    660     m_shouldPaintCustomScrollbars = shouldPaintCustomScrollbars;
    661 }
    662 
    663 void Settings::setZoomsTextOnly(bool zoomsTextOnly)
    664 {
    665     if (zoomsTextOnly == m_zoomsTextOnly)
    666         return;
    667 
    668     m_zoomsTextOnly = zoomsTextOnly;
    669     setNeedsReapplyStylesInAllFrames(m_page);
    670 }
    671 
    672 void Settings::setEnforceCSSMIMETypeInStrictMode(bool enforceCSSMIMETypeInStrictMode)
    673 {
    674     m_enforceCSSMIMETypeInStrictMode = enforceCSSMIMETypeInStrictMode;
    675 }
    676 
    677 #if USE(SAFARI_THEME)
    678 void Settings::setShouldPaintNativeControls(bool shouldPaintNativeControls)
    679 {
    680     gShouldPaintNativeControls = shouldPaintNativeControls;
    681 }
    682 #endif
    683 
    684 void Settings::setUsesEncodingDetector(bool usesEncodingDetector)
    685 {
    686     m_usesEncodingDetector = usesEncodingDetector;
    687 }
    688 
    689 void Settings::setAllowScriptsToCloseWindows(bool allowScriptsToCloseWindows)
    690 {
    691     m_allowScriptsToCloseWindows = allowScriptsToCloseWindows;
    692 }
    693 
    694 void Settings::setCaretBrowsingEnabled(bool caretBrowsingEnabled)
    695 {
    696     m_caretBrowsingEnabled = caretBrowsingEnabled;
    697 }
    698 
    699 void Settings::setDownloadableBinaryFontsEnabled(bool downloadableBinaryFontsEnabled)
    700 {
    701     m_downloadableBinaryFontsEnabled = downloadableBinaryFontsEnabled;
    702 }
    703 
    704 void Settings::setXSSAuditorEnabled(bool xssAuditorEnabled)
    705 {
    706     m_xssAuditorEnabled = xssAuditorEnabled;
    707 }
    708 
    709 void Settings::setAcceleratedCompositingEnabled(bool enabled)
    710 {
    711     if (m_acceleratedCompositingEnabled == enabled)
    712         return;
    713 
    714     m_acceleratedCompositingEnabled = enabled;
    715     setNeedsReapplyStylesInAllFrames(m_page);
    716 }
    717 
    718 void Settings::setShowDebugBorders(bool enabled)
    719 {
    720     if (m_showDebugBorders == enabled)
    721         return;
    722 
    723     m_showDebugBorders = enabled;
    724     setNeedsReapplyStylesInAllFrames(m_page);
    725 }
    726 
    727 void Settings::setShowRepaintCounter(bool enabled)
    728 {
    729     if (m_showRepaintCounter == enabled)
    730         return;
    731 
    732     m_showRepaintCounter = enabled;
    733     setNeedsReapplyStylesInAllFrames(m_page);
    734 }
    735 
    736 void Settings::setExperimentalNotificationsEnabled(bool enabled)
    737 {
    738     m_experimentalNotificationsEnabled = enabled;
    739 }
    740 
    741 void Settings::setPluginAllowedRunTime(unsigned runTime)
    742 {
    743     m_pluginAllowedRunTime = runTime;
    744     m_page->pluginAllowedRunTimeChanged();
    745 }
    746 
    747 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
    748 void Settings::setShouldUseHighResolutionTimers(bool shouldUseHighResolutionTimers)
    749 {
    750     gShouldUseHighResolutionTimers = shouldUseHighResolutionTimers;
    751 }
    752 #endif
    753 
    754 void Settings::setWebGLEnabled(bool enabled)
    755 {
    756     m_webGLEnabled = enabled;
    757 }
    758 
    759 void Settings::setGeolocationEnabled(bool enabled)
    760 {
    761     m_geolocationEnabled = enabled;
    762 }
    763 
    764 void Settings::setLoadDeferringEnabled(bool enabled)
    765 {
    766     m_loadDeferringEnabled = enabled;
    767 }
    768 
    769 } // namespace WebCore
    770