Home | History | Annotate | Download | only in page
      1 /*
      2  * Copyright (C) 2003, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
      3  *           (C) 2006 Graham Dennis (graham.dennis (at) gmail.com)
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  * 1. Redistributions of source code must retain the above copyright
      9  *    notice, this list of conditions and the following disclaimer.
     10  * 2. Redistributions in binary form must reproduce the above copyright
     11  *    notice, this list of conditions and the following disclaimer in the
     12  *    documentation and/or other materials provided with the distribution.
     13  *
     14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     25  */
     26 
     27 #ifndef Settings_h
     28 #define Settings_h
     29 
     30 #include "AtomicString.h"
     31 #include "FontRenderingMode.h"
     32 #include "KURL.h"
     33 
     34 namespace WebCore {
     35 
     36     class Page;
     37 
     38     enum EditableLinkBehavior {
     39         EditableLinkDefaultBehavior,
     40         EditableLinkAlwaysLive,
     41         EditableLinkOnlyLiveWithShiftKey,
     42         EditableLinkLiveWhenNotFocused,
     43         EditableLinkNeverLive
     44     };
     45 
     46     enum TextDirectionSubmenuInclusionBehavior {
     47         TextDirectionSubmenuNeverIncluded,
     48         TextDirectionSubmenuAutomaticallyIncluded,
     49         TextDirectionSubmenuAlwaysIncluded
     50     };
     51 
     52     // There are multiple editing details that are different on Windows than Macintosh.
     53     // We use a single switch for all of them. Some examples:
     54     //
     55     //    1) Clicking below the last line of an editable area puts the caret at the end
     56     //       of the last line on Mac, but in the middle of the last line on Windows.
     57     //    2) Pushing the down arrow key on the last line puts the caret at the end of the
     58     //       last line on Mac, but does nothing on Windows. A similar case exists on the
     59     //       top line.
     60     //
     61     // This setting is intended to control these sorts of behaviors. There are some other
     62     // behaviors with individual function calls on EditorClient (smart copy and paste and
     63     // selecting the space after a double click) that could be combined with this if
     64     // if possible in the future.
     65     enum EditingBehavior { EditingMacBehavior, EditingWindowsBehavior };
     66 
     67     class Settings : public Noncopyable {
     68     public:
     69         Settings(Page*);
     70 
     71 #ifdef ANDROID_LAYOUT
     72         // FIXME: How do we determine the margins other than guessing?
     73         #define ANDROID_SSR_MARGIN_PADDING  3
     74         #define ANDROID_FCTS_MARGIN_PADDING  10
     75 
     76         enum LayoutAlgorithm {
     77             kLayoutNormal,
     78             kLayoutSSR,
     79             kLayoutFitColumnToScreen
     80         };
     81 #endif
     82         void setStandardFontFamily(const AtomicString&);
     83         const AtomicString& standardFontFamily() const { return m_standardFontFamily; }
     84 
     85         void setFixedFontFamily(const AtomicString&);
     86         const AtomicString& fixedFontFamily() const { return m_fixedFontFamily; }
     87 
     88 #ifdef ANDROID_LAYOUT
     89         LayoutAlgorithm layoutAlgorithm() const { return m_layoutAlgorithm; }
     90         void setLayoutAlgorithm(LayoutAlgorithm algorithm) { m_layoutAlgorithm = algorithm; }
     91 
     92         bool useWideViewport() const { return m_useWideViewport; }
     93         void setUseWideViewport(bool use) { m_useWideViewport = use; }
     94 #endif
     95 
     96         void setSerifFontFamily(const AtomicString&);
     97         const AtomicString& serifFontFamily() const { return m_serifFontFamily; }
     98 
     99         void setSansSerifFontFamily(const AtomicString&);
    100         const AtomicString& sansSerifFontFamily() const { return m_sansSerifFontFamily; }
    101 
    102         void setCursiveFontFamily(const AtomicString&);
    103         const AtomicString& cursiveFontFamily() const { return m_cursiveFontFamily; }
    104 
    105         void setFantasyFontFamily(const AtomicString&);
    106         const AtomicString& fantasyFontFamily() const { return m_fantasyFontFamily; }
    107 
    108         void setMinimumFontSize(int);
    109         int minimumFontSize() const { return m_minimumFontSize; }
    110 
    111         void setMinimumLogicalFontSize(int);
    112         int minimumLogicalFontSize() const { return m_minimumLogicalFontSize; }
    113 
    114         void setDefaultFontSize(int);
    115         int defaultFontSize() const { return m_defaultFontSize; }
    116 
    117         void setDefaultFixedFontSize(int);
    118         int defaultFixedFontSize() const { return m_defaultFixedFontSize; }
    119 
    120         // Unlike areImagesEnabled, this only suppresses the network load of
    121         // the image URL.  A cached image will still be rendered if requested.
    122         void setLoadsImagesAutomatically(bool);
    123         bool loadsImagesAutomatically() const { return m_loadsImagesAutomatically; }
    124 
    125 #ifdef ANDROID_BLOCK_NETWORK_IMAGE
    126         void setBlockNetworkImage(bool);
    127         bool blockNetworkImage() const { return m_blockNetworkImage; }
    128 #endif
    129         void setJavaScriptEnabled(bool);
    130         bool isJavaScriptEnabled() const { return m_isJavaScriptEnabled; }
    131 
    132         void setWebSecurityEnabled(bool);
    133         bool isWebSecurityEnabled() const { return m_isWebSecurityEnabled; }
    134 
    135         void setAllowUniversalAccessFromFileURLs(bool);
    136         bool allowUniversalAccessFromFileURLs() const { return m_allowUniversalAccessFromFileURLs; }
    137 
    138         void setJavaScriptCanOpenWindowsAutomatically(bool);
    139         bool javaScriptCanOpenWindowsAutomatically() const { return m_javaScriptCanOpenWindowsAutomatically; }
    140 
    141         void setJavaEnabled(bool);
    142         bool isJavaEnabled() const { return m_isJavaEnabled; }
    143 
    144         void setImagesEnabled(bool);
    145         bool areImagesEnabled() const { return m_areImagesEnabled; }
    146 
    147         void setPluginsEnabled(bool);
    148         bool arePluginsEnabled() const { return m_arePluginsEnabled; }
    149 
    150 #ifdef ANDROID_PLUGINS
    151         void setPluginsOnDemand(bool onDemand) { m_pluginsOnDemand = onDemand; }
    152         bool arePluginsOnDemand() const { return m_pluginsOnDemand; }
    153 #endif
    154 
    155         void setDatabasesEnabled(bool);
    156         bool databasesEnabled() const { return m_databasesEnabled; }
    157 
    158         void setLocalStorageEnabled(bool);
    159         bool localStorageEnabled() const { return m_localStorageEnabled; }
    160 
    161         void setLocalStorageQuota(unsigned);
    162         unsigned localStorageQuota() const { return m_localStorageQuota; }
    163 
    164         void setPrivateBrowsingEnabled(bool);
    165         bool privateBrowsingEnabled() const { return m_privateBrowsingEnabled; }
    166 
    167         void setCaretBrowsingEnabled(bool);
    168         bool caretBrowsingEnabled() const { return m_caretBrowsingEnabled; }
    169 
    170         void setDefaultTextEncodingName(const String&);
    171         const String& defaultTextEncodingName() const { return m_defaultTextEncodingName; }
    172 
    173         void setUsesEncodingDetector(bool);
    174         bool usesEncodingDetector() const { return m_usesEncodingDetector; }
    175 
    176         void setUserStyleSheetLocation(const KURL&);
    177         const KURL& userStyleSheetLocation() const { return m_userStyleSheetLocation; }
    178 
    179         void setShouldPrintBackgrounds(bool);
    180         bool shouldPrintBackgrounds() const { return m_shouldPrintBackgrounds; }
    181 
    182         void setTextAreasAreResizable(bool);
    183         bool textAreasAreResizable() const { return m_textAreasAreResizable; }
    184 
    185         void setEditableLinkBehavior(EditableLinkBehavior);
    186         EditableLinkBehavior editableLinkBehavior() const { return m_editableLinkBehavior; }
    187 
    188         void setTextDirectionSubmenuInclusionBehavior(TextDirectionSubmenuInclusionBehavior);
    189         TextDirectionSubmenuInclusionBehavior textDirectionSubmenuInclusionBehavior() const { return m_textDirectionSubmenuInclusionBehavior; }
    190 
    191 #if ENABLE(DASHBOARD_SUPPORT)
    192         void setUsesDashboardBackwardCompatibilityMode(bool);
    193         bool usesDashboardBackwardCompatibilityMode() const { return m_usesDashboardBackwardCompatibilityMode; }
    194 #endif
    195 
    196         void setNeedsAdobeFrameReloadingQuirk(bool);
    197         bool needsAcrobatFrameReloadingQuirk() const { return m_needsAdobeFrameReloadingQuirk; }
    198 
    199         void setNeedsKeyboardEventDisambiguationQuirks(bool);
    200         bool needsKeyboardEventDisambiguationQuirks() const { return m_needsKeyboardEventDisambiguationQuirks; }
    201 
    202         void setTreatsAnyTextCSSLinkAsStylesheet(bool);
    203         bool treatsAnyTextCSSLinkAsStylesheet() const { return m_treatsAnyTextCSSLinkAsStylesheet; }
    204 
    205         void setNeedsLeopardMailQuirks(bool);
    206         bool needsLeopardMailQuirks() const { return m_needsLeopardMailQuirks; }
    207 
    208         void setNeedsTigerMailQuirks(bool);
    209         bool needsTigerMailQuirks() const { return m_needsTigerMailQuirks; }
    210 
    211         void setDOMPasteAllowed(bool);
    212         bool isDOMPasteAllowed() const { return m_isDOMPasteAllowed; }
    213 
    214         void setUsesPageCache(bool);
    215         bool usesPageCache() const { return m_usesPageCache; }
    216 
    217         void setShrinksStandaloneImagesToFit(bool);
    218         bool shrinksStandaloneImagesToFit() const { return m_shrinksStandaloneImagesToFit; }
    219 
    220         void setShowsURLsInToolTips(bool);
    221         bool showsURLsInToolTips() const { return m_showsURLsInToolTips; }
    222 
    223         void setFTPDirectoryTemplatePath(const String&);
    224         const String& ftpDirectoryTemplatePath() const { return m_ftpDirectoryTemplatePath; }
    225 
    226         void setForceFTPDirectoryListings(bool);
    227         bool forceFTPDirectoryListings() const { return m_forceFTPDirectoryListings; }
    228 
    229         void setDeveloperExtrasEnabled(bool);
    230         bool developerExtrasEnabled() const { return m_developerExtrasEnabled; }
    231 
    232         void setFrameSetFlatteningEnabled(bool);
    233         bool frameSetFlatteningEnabled() const { return m_frameSetFlatteningEnabled; }
    234 
    235 #ifdef ANDROID_META_SUPPORT
    236         void resetMetadataSettings();
    237         void setMetadataSettings(const String& key, const String& value);
    238 
    239         void setViewportWidth(int);
    240         int viewportWidth() const { return m_viewport_width; }
    241 
    242         void setViewportHeight(int);
    243         int viewportHeight() const { return m_viewport_height; }
    244 
    245         void setViewportInitialScale(int);
    246         int viewportInitialScale() const { return m_viewport_initial_scale; }
    247 
    248         void setViewportMinimumScale(int);
    249         int viewportMinimumScale() const { return m_viewport_minimum_scale; }
    250 
    251         void setViewportMaximumScale(int);
    252         int viewportMaximumScale() const { return m_viewport_maximum_scale; }
    253 
    254         void setViewportUserScalable(bool);
    255         bool viewportUserScalable() const { return m_viewport_user_scalable; }
    256 
    257         void setViewportTargetDensityDpi(int);
    258         int viewportTargetDensityDpi() const { return m_viewport_target_densitydpi; }
    259 
    260         void setFormatDetectionAddress(bool);
    261         bool formatDetectionAddress() const { return m_format_detection_address; }
    262 
    263         void setFormatDetectionEmail(bool);
    264         bool formatDetectionEmail() const { return m_format_detection_email; }
    265 
    266         void setFormatDetectionTelephone(bool);
    267         bool formatDetectionTelephone() const { return m_format_detection_telephone; }
    268 #endif
    269 #ifdef ANDROID_MULTIPLE_WINDOWS
    270         bool supportMultipleWindows() const { return m_supportMultipleWindows; }
    271         void setSupportMultipleWindows(bool support) { m_supportMultipleWindows = support; }
    272 #endif
    273         void setAuthorAndUserStylesEnabled(bool);
    274         bool authorAndUserStylesEnabled() const { return m_authorAndUserStylesEnabled; }
    275 
    276         void setFontRenderingMode(FontRenderingMode mode);
    277         FontRenderingMode fontRenderingMode() const;
    278 
    279         void setNeedsSiteSpecificQuirks(bool);
    280         bool needsSiteSpecificQuirks() const { return m_needsSiteSpecificQuirks; }
    281 
    282         void setWebArchiveDebugModeEnabled(bool);
    283         bool webArchiveDebugModeEnabled() const { return m_webArchiveDebugModeEnabled; }
    284 
    285         void setLocalFileContentSniffingEnabled(bool);
    286         bool localFileContentSniffingEnabled() const { return m_localFileContentSniffingEnabled; }
    287 
    288         void setLocalStorageDatabasePath(const String&);
    289         const String& localStorageDatabasePath() const { return m_localStorageDatabasePath; }
    290 
    291         void setApplicationChromeMode(bool);
    292         bool inApplicationChromeMode() const { return m_inApplicationChromeMode; }
    293 
    294         void setOfflineWebApplicationCacheEnabled(bool);
    295         bool offlineWebApplicationCacheEnabled() const { return m_offlineWebApplicationCacheEnabled; }
    296 
    297         void setShouldPaintCustomScrollbars(bool);
    298         bool shouldPaintCustomScrollbars() const { return m_shouldPaintCustomScrollbars; }
    299 
    300         void setZoomsTextOnly(bool);
    301         bool zoomsTextOnly() const { return m_zoomsTextOnly; }
    302 
    303         void setEnforceCSSMIMETypeInStrictMode(bool);
    304         bool enforceCSSMIMETypeInStrictMode() { return m_enforceCSSMIMETypeInStrictMode; }
    305 
    306         void setMaximumDecodedImageSize(size_t size) { m_maximumDecodedImageSize = size; }
    307         size_t maximumDecodedImageSize() const { return m_maximumDecodedImageSize; }
    308 
    309 #if USE(SAFARI_THEME)
    310         // Windows debugging pref (global) for switching between the Aqua look and a native windows look.
    311         static void setShouldPaintNativeControls(bool);
    312         static bool shouldPaintNativeControls() { return gShouldPaintNativeControls; }
    313 #endif
    314 
    315         void setAllowScriptsToCloseWindows(bool);
    316         bool allowScriptsToCloseWindows() const { return m_allowScriptsToCloseWindows; }
    317 
    318         void setEditingBehavior(EditingBehavior behavior) { m_editingBehavior = behavior; }
    319         EditingBehavior editingBehavior() const { return static_cast<EditingBehavior>(m_editingBehavior); }
    320 
    321         void setDownloadableBinaryFontsEnabled(bool);
    322         bool downloadableBinaryFontsEnabled() const { return m_downloadableBinaryFontsEnabled; }
    323 
    324         void setXSSAuditorEnabled(bool);
    325         bool xssAuditorEnabled() const { return m_xssAuditorEnabled; }
    326 
    327         void setAcceleratedCompositingEnabled(bool);
    328         bool acceleratedCompositingEnabled() const { return m_acceleratedCompositingEnabled; }
    329 
    330         void setShowDebugBorders(bool);
    331         bool showDebugBorders() const { return m_showDebugBorders; }
    332 
    333         void setShowRepaintCounter(bool);
    334         bool showRepaintCounter() const { return m_showRepaintCounter; }
    335 
    336         void setExperimentalNotificationsEnabled(bool);
    337         bool experimentalNotificationsEnabled() const { return m_experimentalNotificationsEnabled; }
    338 
    339 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
    340         static void setShouldUseHighResolutionTimers(bool);
    341         static bool shouldUseHighResolutionTimers() { return gShouldUseHighResolutionTimers; }
    342 #endif
    343 
    344         void setPluginAllowedRunTime(unsigned);
    345         unsigned pluginAllowedRunTime() const { return m_pluginAllowedRunTime; }
    346 
    347         void setWebGLEnabled(bool);
    348         bool webGLEnabled() const { return m_webGLEnabled; }
    349 
    350         void setGeolocationEnabled(bool);
    351         bool geolocationEnabled() const { return m_geolocationEnabled; }
    352 
    353         void setLoadDeferringEnabled(bool);
    354         bool loadDeferringEnabled() const { return m_loadDeferringEnabled; }
    355 
    356     private:
    357         Page* m_page;
    358 
    359         String m_defaultTextEncodingName;
    360         String m_ftpDirectoryTemplatePath;
    361         String m_localStorageDatabasePath;
    362         KURL m_userStyleSheetLocation;
    363         AtomicString m_standardFontFamily;
    364         AtomicString m_fixedFontFamily;
    365         AtomicString m_serifFontFamily;
    366         AtomicString m_sansSerifFontFamily;
    367         AtomicString m_cursiveFontFamily;
    368         AtomicString m_fantasyFontFamily;
    369 #ifdef ANDROID_LAYOUT
    370         LayoutAlgorithm m_layoutAlgorithm;
    371 #endif
    372         EditableLinkBehavior m_editableLinkBehavior;
    373         TextDirectionSubmenuInclusionBehavior m_textDirectionSubmenuInclusionBehavior;
    374         int m_minimumFontSize;
    375         int m_minimumLogicalFontSize;
    376         int m_defaultFontSize;
    377         int m_defaultFixedFontSize;
    378 #ifdef ANDROID_META_SUPPORT
    379         // range is from 200 to 10,000. 0 is a special value means device-width.
    380         // default is -1, which means undefined.
    381         int m_viewport_width;
    382         // range is from 223 to 10,000. 0 is a special value means device-height
    383         // default is -1, which means undefined.
    384         int m_viewport_height;
    385         // range is from 1 to 1000 in percent. default is 0, which means undefined.
    386         int m_viewport_initial_scale;
    387         // range is from 1 to 1000 in percent. default is 0, which means undefined.
    388         int m_viewport_minimum_scale;
    389         // range is from 1 to 1000 in percent. default is 0, which means undefined.
    390         int m_viewport_maximum_scale;
    391         // default is yes
    392         bool m_viewport_user_scalable : 1;
    393         // range is from 70 to 400. 0 is a special value means device-dpi
    394         // default is -1, which means undefined.
    395         int m_viewport_target_densitydpi;
    396         // default is yes
    397         bool m_format_detection_telephone : 1;
    398         // default is yes
    399         bool m_format_detection_address : 1;
    400         // default is yes
    401         bool m_format_detection_email : 1;
    402 #endif
    403 #ifdef ANDROID_LAYOUT
    404         bool m_useWideViewport : 1;
    405 #endif
    406 #ifdef ANDROID_MULTIPLE_WINDOWS
    407         bool m_supportMultipleWindows : 1;
    408 #endif
    409 #ifdef ANDROID_BLOCK_NETWORK_IMAGE
    410         bool m_blockNetworkImage : 1;
    411 #endif
    412         size_t m_maximumDecodedImageSize;
    413         unsigned m_localStorageQuota;
    414         unsigned m_pluginAllowedRunTime;
    415         bool m_isJavaEnabled : 1;
    416         bool m_loadsImagesAutomatically : 1;
    417         bool m_privateBrowsingEnabled : 1;
    418         bool m_caretBrowsingEnabled : 1;
    419         bool m_areImagesEnabled : 1;
    420         bool m_arePluginsEnabled : 1;
    421         bool m_databasesEnabled : 1;
    422         bool m_localStorageEnabled : 1;
    423         bool m_isJavaScriptEnabled : 1;
    424         bool m_isWebSecurityEnabled : 1;
    425         bool m_allowUniversalAccessFromFileURLs: 1;
    426         bool m_javaScriptCanOpenWindowsAutomatically : 1;
    427         bool m_shouldPrintBackgrounds : 1;
    428         bool m_textAreasAreResizable : 1;
    429 #if ENABLE(DASHBOARD_SUPPORT)
    430         bool m_usesDashboardBackwardCompatibilityMode : 1;
    431 #endif
    432         bool m_needsAdobeFrameReloadingQuirk : 1;
    433         bool m_needsKeyboardEventDisambiguationQuirks : 1;
    434         bool m_treatsAnyTextCSSLinkAsStylesheet : 1;
    435         bool m_needsLeopardMailQuirks : 1;
    436         bool m_needsTigerMailQuirks : 1;
    437         bool m_isDOMPasteAllowed : 1;
    438         bool m_shrinksStandaloneImagesToFit : 1;
    439         bool m_usesPageCache: 1;
    440         bool m_showsURLsInToolTips : 1;
    441         bool m_forceFTPDirectoryListings : 1;
    442         bool m_developerExtrasEnabled : 1;
    443         bool m_authorAndUserStylesEnabled : 1;
    444         bool m_needsSiteSpecificQuirks : 1;
    445         unsigned m_fontRenderingMode : 1;
    446         bool m_frameSetFlatteningEnabled : 1;
    447         bool m_webArchiveDebugModeEnabled : 1;
    448         bool m_localFileContentSniffingEnabled : 1;
    449         bool m_inApplicationChromeMode : 1;
    450         bool m_offlineWebApplicationCacheEnabled : 1;
    451         bool m_shouldPaintCustomScrollbars : 1;
    452         bool m_zoomsTextOnly : 1;
    453         bool m_enforceCSSMIMETypeInStrictMode : 1;
    454         bool m_usesEncodingDetector : 1;
    455         bool m_allowScriptsToCloseWindows : 1;
    456         unsigned m_editingBehavior : 1;
    457         bool m_downloadableBinaryFontsEnabled : 1;
    458         bool m_xssAuditorEnabled : 1;
    459         bool m_acceleratedCompositingEnabled : 1;
    460         bool m_showDebugBorders : 1;
    461         bool m_showRepaintCounter : 1;
    462         bool m_experimentalNotificationsEnabled : 1;
    463         bool m_webGLEnabled : 1;
    464         bool m_geolocationEnabled : 1;
    465         bool m_loadDeferringEnabled : 1;
    466 #ifdef ANDROID_PLUGINS
    467         bool m_pluginsOnDemand : 1;
    468 #endif
    469 
    470 #if USE(SAFARI_THEME)
    471         static bool gShouldPaintNativeControls;
    472 #endif
    473 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
    474         static bool gShouldUseHighResolutionTimers;
    475 #endif
    476     };
    477 
    478 } // namespace WebCore
    479 
    480 #endif // Settings_h
    481