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