Convert 3 settings to use Settings.in
[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 "SettingsMacros.h"
36 #include "Timer.h"
37 #include <wtf/HashMap.h>
38 #include <wtf/text/AtomicString.h>
39 #include <wtf/text/AtomicStringHash.h>
40 #include <wtf/unicode/Unicode.h>
41
42 namespace WebCore {
43
44     class Page;
45
46     enum EditableLinkBehavior {
47         EditableLinkDefaultBehavior,
48         EditableLinkAlwaysLive,
49         EditableLinkOnlyLiveWithShiftKey,
50         EditableLinkLiveWhenNotFocused,
51         EditableLinkNeverLive
52     };
53
54     enum TextDirectionSubmenuInclusionBehavior {
55         TextDirectionSubmenuNeverIncluded,
56         TextDirectionSubmenuAutomaticallyIncluded,
57         TextDirectionSubmenuAlwaysIncluded
58     };
59
60     // UScriptCode uses -1 and 0 for UScriptInvalidCode and UScriptCommon.
61     // We need to use -2 and -3 for empty value and deleted value.
62     struct UScriptCodeHashTraits : WTF::GenericHashTraits<int> {
63         static const bool emptyValueIsZero = false;
64         static int emptyValue() { return -2; }
65         static void constructDeletedValue(int& slot) { slot = -3; }
66         static bool isDeletedValue(int value) { return value == -3; }
67     };
68
69     typedef HashMap<int, AtomicString, DefaultHash<int>::Hash, UScriptCodeHashTraits> ScriptFontFamilyMap;
70
71     class Settings {
72         WTF_MAKE_NONCOPYABLE(Settings); WTF_MAKE_FAST_ALLOCATED;
73     public:
74         static PassOwnPtr<Settings> create(Page*);
75
76         void setStandardFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
77         const AtomicString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
78
79         void setFixedFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
80         const AtomicString& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
81
82         void setSerifFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
83         const AtomicString& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
84
85         void setSansSerifFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
86         const AtomicString& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
87
88         void setCursiveFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
89         const AtomicString& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
90
91         void setFantasyFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
92         const AtomicString& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
93
94         void setPictographFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
95         const AtomicString& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
96
97         void setMinimumFontSize(int);
98         int minimumFontSize() const { return m_minimumFontSize; }
99
100         void setMinimumLogicalFontSize(int);
101         int minimumLogicalFontSize() const { return m_minimumLogicalFontSize; }
102
103         void setDefaultFontSize(int);
104         int defaultFontSize() const { return m_defaultFontSize; }
105
106         void setDefaultFixedFontSize(int);
107         int defaultFixedFontSize() const { return m_defaultFixedFontSize; }
108
109         void setScreenFontSubstitutionEnabled(bool);
110         bool screenFontSubstitutionEnabled() const { return m_screenFontSubstitutionEnabled; }
111
112 #if ENABLE(TEXT_AUTOSIZING)
113         void setTextAutosizingEnabled(bool);
114         bool textAutosizingEnabled() const { return m_textAutosizingEnabled; }
115
116         void setTextAutosizingFontScaleFactor(float);
117         float textAutosizingFontScaleFactor() const { return m_textAutosizingFontScaleFactor; }
118
119         // Only set by Layout Tests, and only used if textAutosizingEnabled() returns true.
120         void setTextAutosizingWindowSizeOverride(const IntSize&);
121         const IntSize& textAutosizingWindowSizeOverride() const { return m_textAutosizingWindowSizeOverride; }
122 #endif
123
124         // Only set by Layout Tests.
125         void setResolutionOverride(const IntSize&);
126         const IntSize& resolutionOverride() const { return m_resolutionDensityPerInchOverride; }
127
128         // Only set by Layout Tests.
129         void setMediaTypeOverride(const String&);
130         const String& mediaTypeOverride() const { return m_mediaTypeOverride; }
131
132         // Unlike areImagesEnabled, this only suppresses the network load of
133         // the image URL.  A cached image will still be rendered if requested.
134         void setLoadsImagesAutomatically(bool);
135         bool loadsImagesAutomatically() const { return m_loadsImagesAutomatically; }
136
137         void setScriptEnabled(bool);
138         // Instead of calling isScriptEnabled directly, please consider calling
139         // ScriptController::canExecuteScripts, which takes things like the
140         // HTML sandbox attribute into account.
141         bool isScriptEnabled() const { return m_isScriptEnabled; }
142
143         SETTINGS_GETTERS_AND_SETTERS
144
145         void setJavaEnabled(bool);
146         bool isJavaEnabled() const { return m_isJavaEnabled; }
147
148         // This settings is only consulted if isJavaEnabled() returns true;
149         void setJavaEnabledForLocalFiles(bool);
150         bool isJavaEnabledForLocalFiles() const { return m_isJavaEnabledForLocalFiles; }
151
152         void setImagesEnabled(bool);
153         bool areImagesEnabled() const { return m_areImagesEnabled; }
154
155         void setPluginsEnabled(bool);
156         bool arePluginsEnabled() const { return m_arePluginsEnabled; }
157
158         // When this option is set, WebCore will avoid storing any record of browsing activity
159         // that may persist on disk or remain displayed when the option is reset.
160         // This option does not affect the storage of such information in RAM.
161         // The following functions respect this setting:
162         //  - HTML5/DOM Storage
163         //  - Icon Database
164         //  - Console Messages
165         //  - MemoryCache
166         //  - Application Cache
167         //  - Back/Forward Page History
168         //  - Page Search Results
169         //  - HTTP Cookies
170         //  - Plug-ins (that support NPNVprivateModeBool)
171         void setPrivateBrowsingEnabled(bool);
172         bool privateBrowsingEnabled() const { return m_privateBrowsingEnabled; }
173
174         void setDNSPrefetchingEnabled(bool);
175         bool dnsPrefetchingEnabled() const { return m_dnsPrefetchingEnabled; }
176
177         void setUserStyleSheetLocation(const KURL&);
178         const KURL& userStyleSheetLocation() const { return m_userStyleSheetLocation; }
179
180         void setTextAreasAreResizable(bool);
181         bool textAreasAreResizable() const { return m_textAreasAreResizable; }
182
183         void setNeedsAdobeFrameReloadingQuirk(bool);
184         bool needsAcrobatFrameReloadingQuirk() const { return m_needsAdobeFrameReloadingQuirk; }
185
186         static void setDefaultMinDOMTimerInterval(double); // Interval specified in seconds.
187         static double defaultMinDOMTimerInterval();
188         
189         static void setHiddenPageDOMTimerAlignmentInterval(double); // Interval specified in seconds.
190         static double hiddenPageDOMTimerAlignmentInterval();
191
192         void setMinDOMTimerInterval(double); // Per-page; initialized to default value.
193         double minDOMTimerInterval();
194
195         static void setDefaultDOMTimerAlignmentInterval(double);
196         static double defaultDOMTimerAlignmentInterval();
197
198         void setDOMTimerAlignmentInterval(double);
199         double domTimerAlignmentInterval() const;
200
201         void setUsesPageCache(bool);
202         bool usesPageCache() const { return m_usesPageCache; }
203         
204         void setAuthorAndUserStylesEnabled(bool);
205         bool authorAndUserStylesEnabled() const { return m_authorAndUserStylesEnabled; }
206         
207         void setFontRenderingMode(FontRenderingMode mode);
208         FontRenderingMode fontRenderingMode() const;
209
210         void setCSSCustomFilterEnabled(bool enabled) { m_isCSSCustomFilterEnabled = enabled; }
211         bool isCSSCustomFilterEnabled() const { return m_isCSSCustomFilterEnabled; }
212
213 #if ENABLE(CSS_STICKY_POSITION)
214         void setCSSStickyPositionEnabled(bool enabled) { m_cssStickyPositionEnabled = enabled; }
215         bool cssStickyPositionEnabled() const { return m_cssStickyPositionEnabled; }
216 #else
217         void setCSSStickyPositionEnabled(bool) { }
218         bool cssStickyPositionEnabled() const { return false; }
219 #endif
220
221 #if ENABLE(CSS_VARIABLES)
222         void setCSSVariablesEnabled(bool enabled) { m_cssVariablesEnabled = enabled; }
223         bool cssVariablesEnabled() const { return m_cssVariablesEnabled; }
224 #else
225         void setCSSVariablesEnabled(bool) { }
226         bool cssVariablesEnabled() const { return false; }
227 #endif
228
229         void setAcceleratedCompositingEnabled(bool);
230         bool acceleratedCompositingEnabled() const { return m_acceleratedCompositingEnabled; }
231
232         void setShowDebugBorders(bool);
233         bool showDebugBorders() const { return m_showDebugBorders; }
234
235         void setShowRepaintCounter(bool);
236         bool showRepaintCounter() const { return m_showRepaintCounter; }
237
238         void setShowTiledScrollingIndicator(bool);
239         bool showTiledScrollingIndicator() const { return m_showTiledScrollingIndicator; }
240
241 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
242         static void setShouldUseHighResolutionTimers(bool);
243         static bool shouldUseHighResolutionTimers() { return gShouldUseHighResolutionTimers; }
244 #endif
245
246         void setTiledBackingStoreEnabled(bool);
247         bool tiledBackingStoreEnabled() const { return m_tiledBackingStoreEnabled; }
248
249 #if USE(AVFOUNDATION)
250         static void setAVFoundationEnabled(bool flag);
251         static bool isAVFoundationEnabled() { return gAVFoundationEnabled; }
252 #endif
253
254 #if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
255         static void setQTKitEnabled(bool flag);
256         static bool isQTKitEnabled() { return gQTKitEnabled; }
257 #endif
258
259         static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
260
261 #if ENABLE(SMOOTH_SCROLLING)
262         void setEnableScrollAnimator(bool flag) { m_scrollAnimatorEnabled = flag; }
263         bool scrollAnimatorEnabled() const { return m_scrollAnimatorEnabled; }
264 #endif
265
266 #if USE(SAFARI_THEME)
267         // Windows debugging pref (global) for switching between the Aqua look and a native windows look.
268         static void setShouldPaintNativeControls(bool);
269         static bool shouldPaintNativeControls() { return gShouldPaintNativeControls; }
270 #endif
271
272         static void setMockScrollbarsEnabled(bool flag);
273         static bool mockScrollbarsEnabled();
274
275         static void setUsesOverlayScrollbars(bool flag);
276         static bool usesOverlayScrollbars();
277
278 #if ENABLE(TOUCH_EVENTS)
279         void setTouchEventEmulationEnabled(bool enabled) { m_touchEventEmulationEnabled = enabled; }
280         bool isTouchEventEmulationEnabled() const { return m_touchEventEmulationEnabled; }
281 #endif
282
283         void setStorageBlockingPolicy(SecurityOrigin::StorageBlockingPolicy);
284         SecurityOrigin::StorageBlockingPolicy storageBlockingPolicy() const { return m_storageBlockingPolicy; }
285
286         void setScrollingPerformanceLoggingEnabled(bool);
287         bool scrollingPerformanceLoggingEnabled() { return m_scrollingPerformanceLoggingEnabled; }
288         
289         void setAggressiveTileRetentionEnabled(bool);
290         bool aggressiveTileRetentionEnabled() { return m_aggressiveTileRetentionEnabled; }
291
292 #if USE(JSC)
293         static void setShouldRespectPriorityInCSSAttributeSetters(bool);
294         static bool shouldRespectPriorityInCSSAttributeSetters();
295 #endif
296
297     private:
298         explicit Settings(Page*);
299
300         void initializeDefaultFontFamilies();
301
302         Page* m_page;
303
304         String m_mediaTypeOverride;
305         KURL m_userStyleSheetLocation;
306         ScriptFontFamilyMap m_standardFontFamilyMap;
307         ScriptFontFamilyMap m_serifFontFamilyMap;
308         ScriptFontFamilyMap m_fixedFontFamilyMap;
309         ScriptFontFamilyMap m_sansSerifFontFamilyMap;
310         ScriptFontFamilyMap m_cursiveFontFamilyMap;
311         ScriptFontFamilyMap m_fantasyFontFamilyMap;
312         ScriptFontFamilyMap m_pictographFontFamilyMap;
313         int m_minimumFontSize;
314         int m_minimumLogicalFontSize;
315         int m_defaultFontSize;
316         int m_defaultFixedFontSize;
317         bool m_screenFontSubstitutionEnabled;
318         SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
319 #if ENABLE(TEXT_AUTOSIZING)
320         float m_textAutosizingFontScaleFactor;
321         IntSize m_textAutosizingWindowSizeOverride;
322         bool m_textAutosizingEnabled : 1;
323 #endif
324         IntSize m_resolutionDensityPerInchOverride;
325
326         SETTINGS_MEMBER_VARIABLES
327
328         bool m_isJavaEnabled : 1;
329         bool m_isJavaEnabledForLocalFiles : 1;
330         bool m_loadsImagesAutomatically : 1;
331         bool m_privateBrowsingEnabled : 1;
332         bool m_areImagesEnabled : 1;
333         bool m_arePluginsEnabled : 1;
334         bool m_isScriptEnabled : 1;
335         bool m_textAreasAreResizable : 1;
336         bool m_needsAdobeFrameReloadingQuirk : 1;
337         bool m_usesPageCache : 1;
338         bool m_authorAndUserStylesEnabled : 1;
339         unsigned m_fontRenderingMode : 1;
340         bool m_isCSSCustomFilterEnabled : 1;
341 #if ENABLE(CSS_STICKY_POSITION)
342         bool m_cssStickyPositionEnabled : 1;
343 #endif
344 #if ENABLE(CSS_VARIABLES)
345         bool m_cssVariablesEnabled : 1;
346 #endif
347         bool m_acceleratedCompositingEnabled : 1;
348         bool m_showDebugBorders : 1;
349         bool m_showRepaintCounter : 1;
350         bool m_showTiledScrollingIndicator : 1;
351         bool m_tiledBackingStoreEnabled : 1;
352         bool m_dnsPrefetchingEnabled : 1;
353 #if ENABLE(SMOOTH_SCROLLING)
354         bool m_scrollAnimatorEnabled : 1;
355 #endif
356
357 #if ENABLE(TOUCH_EVENTS)
358         bool m_touchEventEmulationEnabled : 1;
359 #endif
360         bool m_scrollingPerformanceLoggingEnabled : 1;
361         bool m_aggressiveTileRetentionEnabled : 1;
362
363         Timer<Settings> m_setImageLoadingSettingsTimer;
364         void imageLoadingSettingsTimerFired(Timer<Settings>*);
365
366         static double gDefaultMinDOMTimerInterval;
367         static double gDefaultDOMTimerAlignmentInterval;
368
369 #if USE(AVFOUNDATION)
370         static bool gAVFoundationEnabled;
371 #endif
372
373 #if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
374         static bool gQTKitEnabled;
375 #endif
376         
377         static bool gMockScrollbarsEnabled;
378         static bool gUsesOverlayScrollbars;
379
380 #if USE(SAFARI_THEME)
381         static bool gShouldPaintNativeControls;
382 #endif
383 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
384         static bool gShouldUseHighResolutionTimers;
385 #endif
386 #if USE(JSC)
387         static bool gShouldRespectPriorityInCSSAttributeSetters;
388 #endif
389
390         static double gHiddenPageDOMTimerAlignmentInterval;
391     };
392
393 } // namespace WebCore
394
395 #endif // Settings_h