f053f541ed50b9247343111712dce8ef80f51b7d
[WebKit-https.git] / Source / WebCore / page / Settings.h
1 /*
2  * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All rights reserved.
3  *           (C) 2006 Graham Dennis (graham.dennis@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 "EditingBehaviorTypes.h"
31 #include "FontRenderingMode.h"
32 #include "IntSize.h"
33 #include "KURL.h"
34 #include "SecurityOrigin.h"
35 #include "Timer.h"
36 #include <wtf/HashMap.h>
37 #include <wtf/text/AtomicString.h>
38 #include <wtf/text/AtomicStringHash.h>
39 #include <wtf/unicode/Unicode.h>
40
41 namespace WebCore {
42
43     class Page;
44
45     enum EditableLinkBehavior {
46         EditableLinkDefaultBehavior,
47         EditableLinkAlwaysLive,
48         EditableLinkOnlyLiveWithShiftKey,
49         EditableLinkLiveWhenNotFocused,
50         EditableLinkNeverLive
51     };
52
53     enum TextDirectionSubmenuInclusionBehavior {
54         TextDirectionSubmenuNeverIncluded,
55         TextDirectionSubmenuAutomaticallyIncluded,
56         TextDirectionSubmenuAlwaysIncluded
57     };
58
59     // UScriptCode uses -1 and 0 for UScriptInvalidCode and UScriptCommon.
60     // We need to use -2 and -3 for empty value and deleted value.
61     struct UScriptCodeHashTraits : WTF::GenericHashTraits<int> {
62         static const bool emptyValueIsZero = false;
63         static int emptyValue() { return -2; }
64         static void constructDeletedValue(int& slot) { slot = -3; }
65         static bool isDeletedValue(int value) { return value == -3; }
66     };
67
68     typedef HashMap<int, AtomicString, DefaultHash<int>::Hash, UScriptCodeHashTraits> ScriptFontFamilyMap;
69
70     class Settings {
71         WTF_MAKE_NONCOPYABLE(Settings); WTF_MAKE_FAST_ALLOCATED;
72     public:
73         static PassOwnPtr<Settings> create(Page*);
74
75         void setStandardFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
76         const AtomicString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
77
78         void setFixedFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
79         const AtomicString& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
80
81         void setSerifFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
82         const AtomicString& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
83
84         void setSansSerifFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
85         const AtomicString& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
86
87         void setCursiveFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
88         const AtomicString& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
89
90         void setFantasyFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
91         const AtomicString& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
92
93         void setPictographFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
94         const AtomicString& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
95
96         void setMinimumFontSize(int);
97         int minimumFontSize() const { return m_minimumFontSize; }
98
99         void setMinimumLogicalFontSize(int);
100         int minimumLogicalFontSize() const { return m_minimumLogicalFontSize; }
101
102         void setDefaultFontSize(int);
103         int defaultFontSize() const { return m_defaultFontSize; }
104
105         void setDefaultFixedFontSize(int);
106         int defaultFixedFontSize() const { return m_defaultFixedFontSize; }
107
108         void setScreenFontSubstitutionEnabled(bool);
109         bool screenFontSubstitutionEnabled() const { return m_screenFontSubstitutionEnabled; }
110
111 #if ENABLE(TEXT_AUTOSIZING)
112         void setTextAutosizingEnabled(bool);
113         bool textAutosizingEnabled() const { return m_textAutosizingEnabled; }
114
115         void setTextAutosizingFontScaleFactor(float);
116         float textAutosizingFontScaleFactor() const { return m_textAutosizingFontScaleFactor; }
117
118         // Only set by Layout Tests, and only used if textAutosizingEnabled() returns true.
119         void setTextAutosizingWindowSizeOverride(const IntSize&);
120         const IntSize& textAutosizingWindowSizeOverride() const { return m_textAutosizingWindowSizeOverride; }
121 #endif
122
123         // Only set by Layout Tests.
124         void setResolutionOverride(const IntSize&);
125         const IntSize& resolutionOverride() const { return m_resolutionDensityPerInchOverride; }
126
127         // Only set by Layout Tests.
128         void setMediaTypeOverride(const String&);
129         const String& mediaTypeOverride() const { return m_mediaTypeOverride; }
130
131         // Unlike areImagesEnabled, this only suppresses the network load of
132         // the image URL.  A cached image will still be rendered if requested.
133         void setLoadsImagesAutomatically(bool);
134         bool loadsImagesAutomatically() const { return m_loadsImagesAutomatically; }
135
136         // This setting only affects site icon image loading if loadsImagesAutomatically setting is false and this setting is true.
137         // All other permutations still heed loadsImagesAutomatically setting.
138         void setLoadsSiteIconsIgnoringImageLoadingSetting(bool);
139         bool loadsSiteIconsIgnoringImageLoadingSetting() const { return m_loadsSiteIconsIgnoringImageLoadingSetting; }
140
141         void setScriptEnabled(bool);
142         // Instead of calling isScriptEnabled directly, please consider calling
143         // ScriptController::canExecuteScripts, which takes things like the
144         // HTML sandbox attribute into account.
145         bool isScriptEnabled() const { return m_isScriptEnabled; }
146
147         void setWebSecurityEnabled(bool);
148         bool isWebSecurityEnabled() const { return m_isWebSecurityEnabled; }
149
150         void setAllowUniversalAccessFromFileURLs(bool);
151         bool allowUniversalAccessFromFileURLs() const { return m_allowUniversalAccessFromFileURLs; }
152
153         void setAllowFileAccessFromFileURLs(bool);
154         bool allowFileAccessFromFileURLs() const { return m_allowFileAccessFromFileURLs; }
155
156         void setJavaScriptCanOpenWindowsAutomatically(bool);
157         bool javaScriptCanOpenWindowsAutomatically() const { return m_javaScriptCanOpenWindowsAutomatically; }
158
159         void setSupportsMultipleWindows(bool);
160         bool supportsMultipleWindows() const { return m_supportsMultipleWindows; }
161
162         void setJavaScriptCanAccessClipboard(bool);
163         bool javaScriptCanAccessClipboard() const { return m_javaScriptCanAccessClipboard; }
164
165         void setSpatialNavigationEnabled(bool);
166         bool isSpatialNavigationEnabled() const { return m_isSpatialNavigationEnabled; }
167
168         void setJavaEnabled(bool);
169         bool isJavaEnabled() const { return m_isJavaEnabled; }
170
171         // This settings is only consulted if isJavaEnabled() returns true;
172         void setJavaEnabledForLocalFiles(bool);
173         bool isJavaEnabledForLocalFiles() const { return m_isJavaEnabledForLocalFiles; }
174
175         void setImagesEnabled(bool);
176         bool areImagesEnabled() const { return m_areImagesEnabled; }
177
178         void setMediaEnabled(bool);
179         bool isMediaEnabled() const { return m_isMediaEnabled; }
180
181         void setPluginsEnabled(bool);
182         bool arePluginsEnabled() const { return m_arePluginsEnabled; }
183
184         void setLocalStorageEnabled(bool);
185         bool localStorageEnabled() const { return m_localStorageEnabled; }
186
187         // Allow clients concerned with memory consumption to set a quota on session storage
188         // since the memory used won't be released until the Page is destroyed.
189         // Default is noQuota.
190         void setSessionStorageQuota(unsigned);
191         unsigned sessionStorageQuota() const { return m_sessionStorageQuota; }
192
193         // When this option is set, WebCore will avoid storing any record of browsing activity
194         // that may persist on disk or remain displayed when the option is reset.
195         // This option does not affect the storage of such information in RAM.
196         // The following functions respect this setting:
197         //  - HTML5/DOM Storage
198         //  - Icon Database
199         //  - Console Messages
200         //  - MemoryCache
201         //  - Application Cache
202         //  - Back/Forward Page History
203         //  - Page Search Results
204         //  - HTTP Cookies
205         //  - Plug-ins (that support NPNVprivateModeBool)
206         void setPrivateBrowsingEnabled(bool);
207         bool privateBrowsingEnabled() const { return m_privateBrowsingEnabled; }
208
209         void setCaretBrowsingEnabled(bool);
210         bool caretBrowsingEnabled() const { return m_caretBrowsingEnabled; }
211
212         void setDefaultTextEncodingName(const String&);
213         const String& defaultTextEncodingName() const { return m_defaultTextEncodingName; }
214         
215         void setUsesEncodingDetector(bool);
216         bool usesEncodingDetector() const { return m_usesEncodingDetector; }
217
218         void setDNSPrefetchingEnabled(bool);
219         bool dnsPrefetchingEnabled() const { return m_dnsPrefetchingEnabled; }
220
221         void setUserStyleSheetLocation(const KURL&);
222         const KURL& userStyleSheetLocation() const { return m_userStyleSheetLocation; }
223
224         void setFixedElementsLayoutRelativeToFrame(bool);
225         bool fixedElementsLayoutRelativeToFrame() const { return m_fixedElementsLayoutRelativeToFrame; }
226
227         void setShouldPrintBackgrounds(bool);
228         bool shouldPrintBackgrounds() const { return m_shouldPrintBackgrounds; }
229
230         void setTextAreasAreResizable(bool);
231         bool textAreasAreResizable() const { return m_textAreasAreResizable; }
232
233         void setEditableLinkBehavior(EditableLinkBehavior);
234         EditableLinkBehavior editableLinkBehavior() const { return m_editableLinkBehavior; }
235
236         void setTextDirectionSubmenuInclusionBehavior(TextDirectionSubmenuInclusionBehavior);
237         TextDirectionSubmenuInclusionBehavior textDirectionSubmenuInclusionBehavior() const { return m_textDirectionSubmenuInclusionBehavior; }
238
239 #if ENABLE(DASHBOARD_SUPPORT)
240         void setUsesDashboardBackwardCompatibilityMode(bool);
241         bool usesDashboardBackwardCompatibilityMode() const { return m_usesDashboardBackwardCompatibilityMode; }
242 #endif
243         
244         void setNeedsAdobeFrameReloadingQuirk(bool);
245         bool needsAcrobatFrameReloadingQuirk() const { return m_needsAdobeFrameReloadingQuirk; }
246
247         void setNeedsKeyboardEventDisambiguationQuirks(bool);
248         bool needsKeyboardEventDisambiguationQuirks() const { return m_needsKeyboardEventDisambiguationQuirks; }
249
250         void setTreatsAnyTextCSSLinkAsStylesheet(bool);
251         bool treatsAnyTextCSSLinkAsStylesheet() const { return m_treatsAnyTextCSSLinkAsStylesheet; }
252
253         void setNeedsLeopardMailQuirks(bool);
254         bool needsLeopardMailQuirks() const { return m_needsLeopardMailQuirks; }
255
256         void setDOMPasteAllowed(bool);
257         bool isDOMPasteAllowed() const { return m_isDOMPasteAllowed; }
258         
259         static void setDefaultMinDOMTimerInterval(double); // Interval specified in seconds.
260         static double defaultMinDOMTimerInterval();
261         
262         void setMinDOMTimerInterval(double); // Per-page; initialized to default value.
263         double minDOMTimerInterval();
264
265         static void setDefaultDOMTimerAlignmentInterval(double);
266         static double defaultDOMTimerAlignmentInterval();
267
268         void setDOMTimerAlignmentInterval(double);
269         double domTimerAlignmentInterval() const;
270
271         void setUsesPageCache(bool);
272         bool usesPageCache() const { return m_usesPageCache; }
273         
274         void setPageCacheSupportsPlugins(bool pageCacheSupportsPlugins) { m_pageCacheSupportsPlugins = pageCacheSupportsPlugins; }
275         bool pageCacheSupportsPlugins() const { return m_pageCacheSupportsPlugins; }
276
277         void setShrinksStandaloneImagesToFit(bool);
278         bool shrinksStandaloneImagesToFit() const { return m_shrinksStandaloneImagesToFit; }
279
280         void setShowsURLsInToolTips(bool);
281         bool showsURLsInToolTips() const { return m_showsURLsInToolTips; }
282
283         void setShowsToolTipOverTruncatedText(bool);
284         bool showsToolTipOverTruncatedText() const { return m_showsToolTipOverTruncatedText; }
285
286         void setFTPDirectoryTemplatePath(const String&);
287         const String& ftpDirectoryTemplatePath() const { return m_ftpDirectoryTemplatePath; }
288         
289         void setForceFTPDirectoryListings(bool);
290         bool forceFTPDirectoryListings() const { return m_forceFTPDirectoryListings; }
291         
292         void setDeveloperExtrasEnabled(bool);
293         bool developerExtrasEnabled() const { return m_developerExtrasEnabled; }
294         
295         void setJavaScriptExperimentsEnabled(bool);
296         bool javaScriptExperimentsEnabled() const { return m_javaScriptExperimentsEnabled; }
297
298         void setFrameFlatteningEnabled(bool);
299         bool frameFlatteningEnabled() const { return m_frameFlatteningEnabled; }
300
301         void setAuthorAndUserStylesEnabled(bool);
302         bool authorAndUserStylesEnabled() const { return m_authorAndUserStylesEnabled; }
303         
304         void setFontRenderingMode(FontRenderingMode mode);
305         FontRenderingMode fontRenderingMode() const;
306
307         void setNeedsSiteSpecificQuirks(bool);
308         bool needsSiteSpecificQuirks() const { return m_needsSiteSpecificQuirks; }
309
310 #if ENABLE(WEB_ARCHIVE)
311         void setWebArchiveDebugModeEnabled(bool);
312         bool webArchiveDebugModeEnabled() const { return m_webArchiveDebugModeEnabled; }
313 #endif
314
315         void setLocalFileContentSniffingEnabled(bool);
316         bool localFileContentSniffingEnabled() const { return m_localFileContentSniffingEnabled; }
317
318         void setLocalStorageDatabasePath(const String&);
319         const String& localStorageDatabasePath() const { return m_localStorageDatabasePath; }
320
321         void setApplicationChromeMode(bool);
322         bool inApplicationChromeMode() const { return m_inApplicationChromeMode; }
323
324         void setOfflineWebApplicationCacheEnabled(bool);
325         bool offlineWebApplicationCacheEnabled() const { return m_offlineWebApplicationCacheEnabled; }
326         
327         void setEnforceCSSMIMETypeInNoQuirksMode(bool);
328         bool enforceCSSMIMETypeInNoQuirksMode() { return m_enforceCSSMIMETypeInNoQuirksMode; }
329
330         void setMaximumDecodedImageSize(size_t size) { m_maximumDecodedImageSize = size; }
331         size_t maximumDecodedImageSize() const { return m_maximumDecodedImageSize; }
332
333         void setAllowScriptsToCloseWindows(bool);
334         bool allowScriptsToCloseWindows() const { return m_allowScriptsToCloseWindows; }
335
336         void setEditingBehaviorType(EditingBehaviorType behavior) { m_editingBehaviorType = behavior; }
337         EditingBehaviorType editingBehaviorType() const { return static_cast<EditingBehaviorType>(m_editingBehaviorType); }
338
339         void setDownloadableBinaryFontsEnabled(bool);
340         bool downloadableBinaryFontsEnabled() const { return m_downloadableBinaryFontsEnabled; }
341
342         void setXSSAuditorEnabled(bool);
343         bool xssAuditorEnabled() const { return m_xssAuditorEnabled; }
344
345         void setCanvasUsesAcceleratedDrawing(bool);
346         bool canvasUsesAcceleratedDrawing() const { return m_canvasUsesAcceleratedDrawing; }
347
348         void setAcceleratedDrawingEnabled(bool enabled) { m_acceleratedDrawingEnabled = enabled; }
349         bool acceleratedDrawingEnabled() const { return m_acceleratedDrawingEnabled; }
350
351         void setAcceleratedFiltersEnabled(bool enabled) { m_acceleratedFiltersEnabled = enabled; }
352         bool acceleratedFiltersEnabled() const { return m_acceleratedFiltersEnabled; }
353
354         void setCSSCustomFilterEnabled(bool enabled) { m_isCSSCustomFilterEnabled = enabled; }
355         bool isCSSCustomFilterEnabled() const { return m_isCSSCustomFilterEnabled; }
356
357 #if ENABLE(CSS_STICKY_POSITION)
358         void setCSSStickyPositionEnabled(bool enabled) { m_cssStickyPositionEnabled = enabled; }
359         bool cssStickyPositionEnabled() const { return m_cssStickyPositionEnabled; }
360 #else
361         void setCSSStickyPositionEnabled(bool) { }
362         bool cssStickyPositionEnabled() const { return false; }
363 #endif
364
365 #if ENABLE(CSS_REGIONS)
366         void setCSSRegionsEnabled(bool enabled) { m_cssRegionsEnabled = enabled; }
367         bool cssRegionsEnabled() const { return m_cssRegionsEnabled; }
368 #else
369         void setCSSRegionsEnabled(bool) { }
370         bool cssRegionsEnabled() const { return false; }
371 #endif
372
373 #if ENABLE(CSS_VARIABLES)
374         void setCSSVariablesEnabled(bool enabled) { m_cssVariablesEnabled = enabled; }
375         bool cssVariablesEnabled() const { return m_cssVariablesEnabled; }
376 #else
377         void setCSSVariablesEnabled(bool) { }
378         bool cssVariablesEnabled() const { return false; }
379 #endif
380
381         void setRegionBasedColumnsEnabled(bool enabled) { m_regionBasedColumnsEnabled = enabled; }
382         bool regionBasedColumnsEnabled() const { return m_regionBasedColumnsEnabled; }
383
384         void setCSSGridLayoutEnabled(bool enabled) { m_cssGridLayoutEnabled = enabled; }
385         bool cssGridLayoutEnabled() const { return m_cssGridLayoutEnabled; }
386
387         void setAcceleratedCompositingEnabled(bool);
388         bool acceleratedCompositingEnabled() const { return m_acceleratedCompositingEnabled; }
389
390         void setAcceleratedCompositingFor3DTransformsEnabled(bool);
391         bool acceleratedCompositingFor3DTransformsEnabled() const { return m_acceleratedCompositingFor3DTransformsEnabled; }
392
393         void setAcceleratedCompositingForVideoEnabled(bool);
394         bool acceleratedCompositingForVideoEnabled() const { return m_acceleratedCompositingForVideoEnabled; }
395
396         void setAcceleratedCompositingForPluginsEnabled(bool);
397         bool acceleratedCompositingForPluginsEnabled() const { return m_acceleratedCompositingForPluginsEnabled; }
398
399         void setAcceleratedCompositingForCanvasEnabled(bool);
400         bool acceleratedCompositingForCanvasEnabled() const { return m_acceleratedCompositingForCanvasEnabled; }
401
402         void setAcceleratedCompositingForAnimationEnabled(bool);
403         bool acceleratedCompositingForAnimationEnabled() const { return m_acceleratedCompositingForAnimationEnabled; }
404
405         void setAcceleratedCompositingForFixedPositionEnabled(bool enabled) { m_acceleratedCompositingForFixedPositionEnabled = enabled; }
406         bool acceleratedCompositingForFixedPositionEnabled() const { return m_acceleratedCompositingForFixedPositionEnabled; }
407
408         void setAcceleratedCompositingForScrollableFramesEnabled(bool enabled) { m_acceleratedCompositingForScrollableFramesEnabled = enabled; }
409         bool acceleratedCompositingForScrollableFramesEnabled() const { return m_acceleratedCompositingForScrollableFramesEnabled; }
410
411         void setAcceleratedCompositingForOverflowScrollEnabled(bool enabled) { m_acceleratedCompositingForOverflowScrollEnabled = enabled; }
412         bool acceleratedCompositingForOverflowScrollEnabled() const { return m_acceleratedCompositingForOverflowScrollEnabled; };
413
414         void setShowDebugBorders(bool);
415         bool showDebugBorders() const { return m_showDebugBorders; }
416
417         void setShowRepaintCounter(bool);
418         bool showRepaintCounter() const { return m_showRepaintCounter; }
419
420         void setExperimentalNotificationsEnabled(bool);
421         bool experimentalNotificationsEnabled() const { return m_experimentalNotificationsEnabled; }
422
423 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
424         static void setShouldUseHighResolutionTimers(bool);
425         static bool shouldUseHighResolutionTimers() { return gShouldUseHighResolutionTimers; }
426 #endif
427
428         void setWebAudioEnabled(bool);
429         bool webAudioEnabled() const { return m_webAudioEnabled; }
430
431         void setWebGLEnabled(bool);
432         bool webGLEnabled() const { return m_webGLEnabled; }
433
434         void setWebGLErrorsToConsoleEnabled(bool);
435         bool webGLErrorsToConsoleEnabled() const { return m_webGLErrorsToConsoleEnabled; }
436
437         void setOpenGLMultisamplingEnabled(bool);
438         bool openGLMultisamplingEnabled() const { return m_openGLMultisamplingEnabled; }
439
440         void setPrivilegedWebGLExtensionsEnabled(bool);
441         bool privilegedWebGLExtensionsEnabled() const { return m_privilegedWebGLExtensionsEnabled; }
442
443         void setAccelerated2dCanvasEnabled(bool);
444         bool accelerated2dCanvasEnabled() const { return m_acceleratedCanvas2dEnabled; }
445
446         void setDeferred2dCanvasEnabled(bool);
447         bool deferred2dCanvasEnabled() const { return m_deferredCanvas2dEnabled; }
448
449         // Number of pixels below which 2D canvas is rendered in software
450         // even if hardware acceleration is enabled.
451         // Hardware acceleration is useful for large canvases where it can avoid the
452         // pixel bandwidth between the CPU and GPU. But GPU acceleration comes at
453         // a price - extra back-buffer and texture copy. Small canvases are also
454         // widely used for stylized fonts. Anti-aliasing text in hardware at that
455         // scale is generally slower. So below a certain size it is better to
456         // draw canvas in software.
457         void setMinimumAccelerated2dCanvasSize(int);
458         int minimumAccelerated2dCanvasSize() const { return m_minimumAccelerated2dCanvasSize; }
459
460         void setLoadDeferringEnabled(bool);
461         bool loadDeferringEnabled() const { return m_loadDeferringEnabled; }
462         
463         void setTiledBackingStoreEnabled(bool);
464         bool tiledBackingStoreEnabled() const { return m_tiledBackingStoreEnabled; }
465
466         void setPaginateDuringLayoutEnabled(bool flag) { m_paginateDuringLayoutEnabled = flag; }
467         bool paginateDuringLayoutEnabled() const { return m_paginateDuringLayoutEnabled; }
468
469 #if ENABLE(FULLSCREEN_API)
470         void setFullScreenEnabled(bool flag) { m_fullScreenAPIEnabled = flag; }
471         bool fullScreenEnabled() const  { return m_fullScreenAPIEnabled; }
472 #endif
473
474 #if USE(AVFOUNDATION)
475         static void setAVFoundationEnabled(bool flag) { gAVFoundationEnabled = flag; }
476         static bool isAVFoundationEnabled() { return gAVFoundationEnabled; }
477 #endif
478
479         void setAsynchronousSpellCheckingEnabled(bool flag) { m_asynchronousSpellCheckingEnabled = flag; }
480         bool asynchronousSpellCheckingEnabled() const  { return m_asynchronousSpellCheckingEnabled; }
481
482         void setUnifiedTextCheckerEnabled(bool flag) { m_unifiedTextCheckerEnabled = flag; }
483         bool unifiedTextCheckerEnabled() const { return m_unifiedTextCheckerEnabled; }
484
485         void setMemoryInfoEnabled(bool flag) { m_memoryInfoEnabled = flag; }
486         bool memoryInfoEnabled() const { return m_memoryInfoEnabled; }
487
488         void setQuantizedMemoryInfoEnabled(bool flag) { m_quantizedMemoryInfoEnabled = flag; }
489         bool quantizedMemoryInfoEnabled() const { return m_quantizedMemoryInfoEnabled; }
490
491         // This feature requires an implementation of ValidationMessageClient.
492         void setInteractiveFormValidationEnabled(bool flag) { m_interactiveFormValidation = flag; }
493         bool interactiveFormValidationEnabled() const { return m_interactiveFormValidation; }
494
495         // Sets the maginication value for validation message timer.
496         // If the maginication value is N, a validation message disappears
497         // automatically after <message length> * N / 1000 seconds. If N is
498         // equal to or less than 0, a validation message doesn't disappears
499         // automaticaly. The default value is 50.
500         void setValidationMessageTimerMagnification(int newValue) { m_validationMessageTimerMagnification = newValue; }
501         int validationMessageTimerMaginification() const { return m_validationMessageTimerMagnification; }
502         
503         void setUsePreHTML5ParserQuirks(bool flag) { m_usePreHTML5ParserQuirks = flag; }
504         bool usePreHTML5ParserQuirks() const { return m_usePreHTML5ParserQuirks; }
505
506         static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
507         void setMaximumHTMLParserDOMTreeDepth(unsigned maximumHTMLParserDOMTreeDepth) { m_maximumHTMLParserDOMTreeDepth = maximumHTMLParserDOMTreeDepth; }
508         unsigned maximumHTMLParserDOMTreeDepth() const { return m_maximumHTMLParserDOMTreeDepth; }
509
510         void setHyperlinkAuditingEnabled(bool flag) { m_hyperlinkAuditingEnabled = flag; }
511         bool hyperlinkAuditingEnabled() const { return m_hyperlinkAuditingEnabled; }
512
513         void setCrossOriginCheckInGetMatchedCSSRulesDisabled(bool flag) { m_crossOriginCheckInGetMatchedCSSRulesDisabled = flag; }
514         bool crossOriginCheckInGetMatchedCSSRulesDisabled() const { return m_crossOriginCheckInGetMatchedCSSRulesDisabled; }
515         
516         void setLayoutFallbackWidth(int width) { m_layoutFallbackWidth = width; }
517         int layoutFallbackWidth() const { return m_layoutFallbackWidth; }
518
519         void setDeviceWidth(int width) { m_deviceWidth = width; }
520         int deviceWidth() const { return m_deviceWidth; }
521
522         void setDeviceHeight(int height) { m_deviceHeight = height; }
523         int deviceHeight() const { return m_deviceHeight; }
524
525         void setForceCompositingMode(bool flag) { m_forceCompositingMode = flag; }
526         bool forceCompositingMode() { return m_forceCompositingMode; }
527
528         void setShouldInjectUserScriptsInInitialEmptyDocument(bool flag) { m_shouldInjectUserScriptsInInitialEmptyDocument = flag; }
529         bool shouldInjectUserScriptsInInitialEmptyDocument() { return m_shouldInjectUserScriptsInInitialEmptyDocument; }
530
531         void setAllowDisplayOfInsecureContent(bool flag) { m_allowDisplayOfInsecureContent = flag; }
532         bool allowDisplayOfInsecureContent() const { return m_allowDisplayOfInsecureContent; }
533         void setAllowRunningOfInsecureContent(bool flag) { m_allowRunningOfInsecureContent = flag; }
534         bool allowRunningOfInsecureContent() const { return m_allowRunningOfInsecureContent; }
535
536 #if ENABLE(SMOOTH_SCROLLING)
537         void setEnableScrollAnimator(bool flag) { m_scrollAnimatorEnabled = flag; }
538         bool scrollAnimatorEnabled() const { return m_scrollAnimatorEnabled; }
539 #endif
540
541         void setMediaPlaybackRequiresUserGesture(bool flag) { m_mediaPlaybackRequiresUserGesture = flag; };
542         bool mediaPlaybackRequiresUserGesture() const { return m_mediaPlaybackRequiresUserGesture; }
543
544         void setMediaPlaybackAllowsInline(bool flag) { m_mediaPlaybackAllowsInline = flag; };
545         bool mediaPlaybackAllowsInline() const { return m_mediaPlaybackAllowsInline; }
546
547         void setPasswordEchoEnabled(bool flag) { m_passwordEchoEnabled = flag; }
548         bool passwordEchoEnabled() const { return m_passwordEchoEnabled; }
549
550         void setSuppressesIncrementalRendering(bool flag) { m_suppressesIncrementalRendering = flag; }
551         bool suppressesIncrementalRendering() const { return m_suppressesIncrementalRendering; }
552         
553         void setBackspaceKeyNavigationEnabled(bool flag) { m_backspaceKeyNavigationEnabled = flag; }
554         bool backspaceKeyNavigationEnabled() const { return m_backspaceKeyNavigationEnabled; }
555         
556         void setPasswordEchoDurationInSeconds(double durationInSeconds) { m_passwordEchoDurationInSeconds = durationInSeconds; }
557         double passwordEchoDurationInSeconds() const { return m_passwordEchoDurationInSeconds; }
558
559 #if USE(SAFARI_THEME)
560         // Windows debugging pref (global) for switching between the Aqua look and a native windows look.
561         static void setShouldPaintNativeControls(bool);
562         static bool shouldPaintNativeControls() { return gShouldPaintNativeControls; }
563 #endif
564
565         static void setMockScrollbarsEnabled(bool flag);
566         static bool mockScrollbarsEnabled();
567
568         static void setUsesOverlayScrollbars(bool flag);
569         static bool usesOverlayScrollbars();
570
571         void setVisualWordMovementEnabled(bool enabled) { m_visualWordMovementEnabled = enabled; }
572         bool visualWordMovementEnabled() const { return m_visualWordMovementEnabled; }
573
574 #if ENABLE(VIDEO_TRACK)
575         void setShouldDisplaySubtitles(bool flag) { m_shouldDisplaySubtitles = flag; }
576         bool shouldDisplaySubtitles() const { return m_shouldDisplaySubtitles; }
577
578         void setShouldDisplayCaptions(bool flag) { m_shouldDisplayCaptions = flag; }
579         bool shouldDisplayCaptions() const { return m_shouldDisplayCaptions; }
580
581         void setShouldDisplayTextDescriptions(bool flag) { m_shouldDisplayTextDescriptions = flag; }
582         bool shouldDisplayTextDescriptions() const { return m_shouldDisplayTextDescriptions; }
583 #endif
584
585         void setScrollingCoordinatorEnabled(bool enabled) { m_scrollingCoordinatorEnabled = enabled; }
586         bool scrollingCoordinatorEnabled() const { return m_scrollingCoordinatorEnabled; }
587
588         void setNotificationsEnabled(bool enabled) { m_notificationsEnabled = enabled; }
589         bool notificationsEnabled() const { return m_notificationsEnabled; }
590
591         // Some apps needs isLoadingInAPISense to account for active subresource loaders.
592         void setNeedsIsLoadingInAPISenseQuirk(bool enabled) { m_needsIsLoadingInAPISenseQuirk = enabled; }
593         bool needsIsLoadingInAPISenseQuirk() const { return m_needsIsLoadingInAPISenseQuirk; }
594
595 #if ENABLE(TOUCH_EVENTS)
596         void setTouchEventEmulationEnabled(bool enabled) { m_touchEventEmulationEnabled = enabled; }
597         bool isTouchEventEmulationEnabled() const { return m_touchEventEmulationEnabled; }
598 #endif
599
600         void setShouldRespectImageOrientation(bool enabled) { m_shouldRespectImageOrientation = enabled; }
601         bool shouldRespectImageOrientation() const { return m_shouldRespectImageOrientation; }
602
603         void setWantsBalancedSetDefersLoadingBehavior(bool flag) { m_wantsBalancedSetDefersLoadingBehavior = flag; }
604         bool wantsBalancedSetDefersLoadingBehavior() const { return m_wantsBalancedSetDefersLoadingBehavior; }
605
606         void setIncrementalRenderingSuppressionTimeoutInSeconds(double timeout) { m_incrementalRenderingSuppressionTimeoutInSeconds = timeout; }
607         double incrementalRenderingSuppressionTimeoutInSeconds() const { return m_incrementalRenderingSuppressionTimeoutInSeconds; }
608
609         void setRequestAnimationFrameEnabled(bool enabled) { m_requestAnimationFrameEnabled = enabled; }
610         bool requestAnimationFrameEnabled() const { return m_requestAnimationFrameEnabled; }
611
612         void setDeviceSupportsTouch(bool enabled) { m_deviceSupportsTouch = enabled; }
613         bool deviceSupportsTouch() const { return m_deviceSupportsTouch; }
614
615         void setDeviceSupportsMouse(bool enabled) { m_deviceSupportsMouse = enabled; }
616         bool deviceSupportsMouse() const { return m_deviceSupportsMouse; }
617
618         void setNeedsDidFinishLoadOrderQuirk(bool needsQuirk) { m_needsDidFinishLoadOrderQuirk = needsQuirk; }
619         bool needsDidFinishLoadOrderQuirk() const { return m_needsDidFinishLoadOrderQuirk; }
620
621         void setFixedPositionCreatesStackingContext(bool creates) { m_fixedPositionCreatesStackingContext = creates; }
622         bool fixedPositionCreatesStackingContext() const { return m_fixedPositionCreatesStackingContext; }
623
624         void setSyncXHRInDocumentsEnabled(bool enabled) { m_syncXHRInDocumentsEnabled = enabled; }
625         bool syncXHRInDocumentsEnabled() const { return m_syncXHRInDocumentsEnabled; }
626
627         // When enabled, window.blur() does not change focus, and
628         // window.focus() only changes focus when invoked from the context that
629         // created the window.
630         void setWindowFocusRestricted(bool restricted) { m_windowFocusRestricted = restricted; }
631         bool windowFocusRestricted() const { return m_windowFocusRestricted; }
632
633         void setStorageBlockingPolicy(SecurityOrigin::StorageBlockingPolicy);
634         SecurityOrigin::StorageBlockingPolicy storageBlockingPolicy() const { return m_storageBlockingPolicy; }
635
636         void setScrollingPerformanceLoggingEnabled(bool);
637         bool scrollingPerformanceLoggingEnabled() { return m_scrollingPerformanceLoggingEnabled; }
638
639 #if USE(JSC)
640         static void setShouldRespectPriorityInCSSAttributeSetters(bool);
641         static bool shouldRespectPriorityInCSSAttributeSetters();
642 #endif
643
644         void setCookieEnabled(bool enabled) { m_cookieEnabled = enabled; }
645         bool cookieEnabled() const { return m_cookieEnabled; }
646
647         void setDiagnosticLoggingEnabled(bool enabled) { m_diagnosticLoggingEnabled = enabled; }
648         bool diagnosticLoggingEnabled() const { return m_diagnosticLoggingEnabled; }
649
650         void setApplyPageScaleFactorInCompositor(bool enabled) { m_applyPageScaleFactorInCompositor = enabled; }
651         bool applyPageScaleFactorInCompositor() const { return m_applyPageScaleFactorInCompositor; }
652
653         void setPlugInSnapshottingEnabled(bool enabled) { m_plugInSnapshottingEnabled = enabled; }
654         bool plugInSnapshottingEnabled() const { return m_plugInSnapshottingEnabled; }
655
656     private:
657         explicit Settings(Page*);
658
659         void initializeDefaultFontFamilies();
660
661         Page* m_page;
662
663         String m_defaultTextEncodingName;
664         String m_ftpDirectoryTemplatePath;
665         String m_localStorageDatabasePath;
666         String m_mediaTypeOverride;
667         KURL m_userStyleSheetLocation;
668         ScriptFontFamilyMap m_standardFontFamilyMap;
669         ScriptFontFamilyMap m_serifFontFamilyMap;
670         ScriptFontFamilyMap m_fixedFontFamilyMap;
671         ScriptFontFamilyMap m_sansSerifFontFamilyMap;
672         ScriptFontFamilyMap m_cursiveFontFamilyMap;
673         ScriptFontFamilyMap m_fantasyFontFamilyMap;
674         ScriptFontFamilyMap m_pictographFontFamilyMap;
675         EditableLinkBehavior m_editableLinkBehavior;
676         TextDirectionSubmenuInclusionBehavior m_textDirectionSubmenuInclusionBehavior;
677         double m_passwordEchoDurationInSeconds;
678         int m_minimumFontSize;
679         int m_minimumLogicalFontSize;
680         int m_defaultFontSize;
681         int m_defaultFixedFontSize;
682         bool m_screenFontSubstitutionEnabled;
683         int m_validationMessageTimerMagnification;
684         int m_minimumAccelerated2dCanvasSize;
685         int m_layoutFallbackWidth;
686         size_t m_maximumDecodedImageSize;
687         int m_deviceWidth;
688         int m_deviceHeight;
689         unsigned m_sessionStorageQuota;
690         unsigned m_editingBehaviorType;
691         unsigned m_maximumHTMLParserDOMTreeDepth;
692         SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
693 #if ENABLE(TEXT_AUTOSIZING)
694         float m_textAutosizingFontScaleFactor;
695         IntSize m_textAutosizingWindowSizeOverride;
696         bool m_textAutosizingEnabled : 1;
697 #endif
698         IntSize m_resolutionDensityPerInchOverride;
699         bool m_isSpatialNavigationEnabled : 1;
700         bool m_isJavaEnabled : 1;
701         bool m_isJavaEnabledForLocalFiles : 1;
702         bool m_loadsImagesAutomatically : 1;
703         bool m_loadsSiteIconsIgnoringImageLoadingSetting : 1;
704         bool m_privateBrowsingEnabled : 1;
705         bool m_caretBrowsingEnabled : 1;
706         bool m_areImagesEnabled : 1;
707         bool m_isMediaEnabled : 1;
708         bool m_arePluginsEnabled : 1;
709         bool m_localStorageEnabled : 1;
710         bool m_isScriptEnabled : 1;
711         bool m_isWebSecurityEnabled : 1;
712         bool m_allowUniversalAccessFromFileURLs: 1;
713         bool m_allowFileAccessFromFileURLs: 1;
714         bool m_javaScriptCanOpenWindowsAutomatically : 1;
715         bool m_supportsMultipleWindows : 1;
716         bool m_javaScriptCanAccessClipboard : 1;
717         bool m_shouldPrintBackgrounds : 1;
718         bool m_textAreasAreResizable : 1;
719 #if ENABLE(DASHBOARD_SUPPORT)
720         bool m_usesDashboardBackwardCompatibilityMode : 1;
721 #endif
722         bool m_needsAdobeFrameReloadingQuirk : 1;
723         bool m_needsKeyboardEventDisambiguationQuirks : 1;
724         bool m_treatsAnyTextCSSLinkAsStylesheet : 1;
725         bool m_needsLeopardMailQuirks : 1;
726         bool m_isDOMPasteAllowed : 1;
727         bool m_shrinksStandaloneImagesToFit : 1;
728         bool m_usesPageCache : 1;
729         bool m_pageCacheSupportsPlugins : 1;
730         bool m_showsURLsInToolTips : 1;
731         bool m_showsToolTipOverTruncatedText : 1;
732         bool m_forceFTPDirectoryListings : 1;
733         bool m_developerExtrasEnabled : 1;
734         bool m_javaScriptExperimentsEnabled : 1;
735         bool m_authorAndUserStylesEnabled : 1;
736         bool m_needsSiteSpecificQuirks : 1;
737         unsigned m_fontRenderingMode : 1;
738         bool m_frameFlatteningEnabled : 1;
739 #if ENABLE(WEB_ARCHIVE)
740         bool m_webArchiveDebugModeEnabled : 1;
741 #endif
742         bool m_localFileContentSniffingEnabled : 1;
743         bool m_inApplicationChromeMode : 1;
744         bool m_offlineWebApplicationCacheEnabled : 1;
745         bool m_enforceCSSMIMETypeInNoQuirksMode : 1;
746         bool m_usesEncodingDetector : 1;
747         bool m_allowScriptsToCloseWindows : 1;
748         bool m_canvasUsesAcceleratedDrawing : 1;
749         bool m_acceleratedDrawingEnabled : 1;
750         bool m_acceleratedFiltersEnabled : 1;
751         bool m_isCSSCustomFilterEnabled : 1;
752 #if ENABLE(CSS_STICKY_POSITION)
753         bool m_cssStickyPositionEnabled : 1;
754 #endif        
755 #if ENABLE(CSS_REGIONS)
756         bool m_cssRegionsEnabled : 1;
757 #endif
758 #if ENABLE(CSS_VARIABLES)
759         bool m_cssVariablesEnabled : 1;
760 #endif
761         bool m_regionBasedColumnsEnabled : 1;
762         bool m_cssGridLayoutEnabled : 1;
763         bool m_downloadableBinaryFontsEnabled : 1;
764         bool m_xssAuditorEnabled : 1;
765         bool m_acceleratedCompositingEnabled : 1;
766         bool m_acceleratedCompositingForOverflowScrollEnabled : 1;
767         bool m_acceleratedCompositingFor3DTransformsEnabled : 1;
768         bool m_acceleratedCompositingForVideoEnabled : 1;
769         bool m_acceleratedCompositingForPluginsEnabled : 1;
770         bool m_acceleratedCompositingForCanvasEnabled : 1;
771         bool m_acceleratedCompositingForAnimationEnabled : 1;
772         bool m_acceleratedCompositingForFixedPositionEnabled : 1;
773         bool m_acceleratedCompositingForScrollableFramesEnabled : 1; // Works only in conjunction with forceCompositingMode
774         bool m_showDebugBorders : 1;
775         bool m_showRepaintCounter : 1;
776         bool m_experimentalNotificationsEnabled : 1;
777         bool m_webGLEnabled : 1;
778         bool m_webGLErrorsToConsoleEnabled : 1;
779         bool m_openGLMultisamplingEnabled : 1;
780         bool m_privilegedWebGLExtensionsEnabled : 1;
781         bool m_webAudioEnabled : 1;
782         bool m_acceleratedCanvas2dEnabled : 1;
783         bool m_deferredCanvas2dEnabled : 1;
784         bool m_loadDeferringEnabled : 1;
785         bool m_tiledBackingStoreEnabled : 1;
786         bool m_paginateDuringLayoutEnabled : 1;
787         bool m_dnsPrefetchingEnabled : 1;
788 #if ENABLE(FULLSCREEN_API)
789         bool m_fullScreenAPIEnabled : 1;
790 #endif
791         bool m_asynchronousSpellCheckingEnabled : 1;
792         bool m_unifiedTextCheckerEnabled : 1;
793         bool m_memoryInfoEnabled : 1;
794         bool m_quantizedMemoryInfoEnabled : 1;
795         bool m_interactiveFormValidation : 1;
796         bool m_usePreHTML5ParserQuirks : 1;
797         bool m_hyperlinkAuditingEnabled : 1;
798         bool m_crossOriginCheckInGetMatchedCSSRulesDisabled : 1;
799         bool m_forceCompositingMode : 1;
800         bool m_shouldInjectUserScriptsInInitialEmptyDocument : 1;
801         bool m_fixedElementsLayoutRelativeToFrame : 1;
802         bool m_allowDisplayOfInsecureContent : 1;
803         bool m_allowRunningOfInsecureContent : 1;
804 #if ENABLE(SMOOTH_SCROLLING)
805         bool m_scrollAnimatorEnabled : 1;
806 #endif
807         bool m_mediaPlaybackRequiresUserGesture : 1;
808         bool m_mediaPlaybackAllowsInline : 1;
809         bool m_passwordEchoEnabled : 1;
810         bool m_suppressesIncrementalRendering : 1;
811         bool m_backspaceKeyNavigationEnabled : 1;
812         bool m_visualWordMovementEnabled : 1;
813
814 #if ENABLE(VIDEO_TRACK)
815         bool m_shouldDisplaySubtitles : 1;
816         bool m_shouldDisplayCaptions : 1;
817         bool m_shouldDisplayTextDescriptions : 1;
818 #endif
819         bool m_scrollingCoordinatorEnabled : 1;
820
821         bool m_notificationsEnabled : 1;
822         bool m_needsIsLoadingInAPISenseQuirk : 1;
823
824 #if ENABLE(TOUCH_EVENTS)
825         bool m_touchEventEmulationEnabled : 1;
826 #endif
827         bool m_shouldRespectImageOrientation : 1;
828         bool m_wantsBalancedSetDefersLoadingBehavior : 1;
829         bool m_requestAnimationFrameEnabled : 1;
830         bool m_deviceSupportsTouch : 1;
831         bool m_deviceSupportsMouse : 1;
832         bool m_needsDidFinishLoadOrderQuirk : 1;
833
834         bool m_fixedPositionCreatesStackingContext : 1;
835         bool m_syncXHRInDocumentsEnabled : 1;
836         bool m_cookieEnabled : 1;
837
838         bool m_windowFocusRestricted : 1;
839
840         bool m_diagnosticLoggingEnabled : 1;
841
842         bool m_scrollingPerformanceLoggingEnabled : 1;
843
844         bool m_applyPageScaleFactorInCompositor : 1;
845         bool m_plugInSnapshottingEnabled : 1;
846
847         Timer<Settings> m_setImageLoadingSettingsTimer;
848         void imageLoadingSettingsTimerFired(Timer<Settings>*);
849
850         double m_incrementalRenderingSuppressionTimeoutInSeconds;
851
852         static double gDefaultMinDOMTimerInterval;
853         static double gDefaultDOMTimerAlignmentInterval;
854
855 #if USE(AVFOUNDATION)
856         static bool gAVFoundationEnabled;
857 #endif
858         static bool gMockScrollbarsEnabled;
859         static bool gUsesOverlayScrollbars;
860
861 #if USE(SAFARI_THEME)
862         static bool gShouldPaintNativeControls;
863 #endif
864 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
865         static bool gShouldUseHighResolutionTimers;
866 #endif
867 #if USE(JSC)
868         static bool gShouldRespectPriorityInCSSAttributeSetters;
869 #endif
870     };
871
872 } // namespace WebCore
873
874 #endif // Settings_h