Unreviewed. Remove references to SAFARI_THEME from Windows Solution.
[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         static void setMockScrollbarsEnabled(bool flag);
267         static bool mockScrollbarsEnabled();
268
269         static void setUsesOverlayScrollbars(bool flag);
270         static bool usesOverlayScrollbars();
271
272 #if ENABLE(TOUCH_EVENTS)
273         void setTouchEventEmulationEnabled(bool enabled) { m_touchEventEmulationEnabled = enabled; }
274         bool isTouchEventEmulationEnabled() const { return m_touchEventEmulationEnabled; }
275 #endif
276
277         void setStorageBlockingPolicy(SecurityOrigin::StorageBlockingPolicy);
278         SecurityOrigin::StorageBlockingPolicy storageBlockingPolicy() const { return m_storageBlockingPolicy; }
279
280         void setScrollingPerformanceLoggingEnabled(bool);
281         bool scrollingPerformanceLoggingEnabled() { return m_scrollingPerformanceLoggingEnabled; }
282         
283         void setAggressiveTileRetentionEnabled(bool);
284         bool aggressiveTileRetentionEnabled() { return m_aggressiveTileRetentionEnabled; }
285
286 #if USE(JSC)
287         static void setShouldRespectPriorityInCSSAttributeSetters(bool);
288         static bool shouldRespectPriorityInCSSAttributeSetters();
289 #endif
290
291     private:
292         explicit Settings(Page*);
293
294         void initializeDefaultFontFamilies();
295
296         Page* m_page;
297
298         String m_mediaTypeOverride;
299         KURL m_userStyleSheetLocation;
300         ScriptFontFamilyMap m_standardFontFamilyMap;
301         ScriptFontFamilyMap m_serifFontFamilyMap;
302         ScriptFontFamilyMap m_fixedFontFamilyMap;
303         ScriptFontFamilyMap m_sansSerifFontFamilyMap;
304         ScriptFontFamilyMap m_cursiveFontFamilyMap;
305         ScriptFontFamilyMap m_fantasyFontFamilyMap;
306         ScriptFontFamilyMap m_pictographFontFamilyMap;
307         int m_minimumFontSize;
308         int m_minimumLogicalFontSize;
309         int m_defaultFontSize;
310         int m_defaultFixedFontSize;
311         bool m_screenFontSubstitutionEnabled;
312         SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
313 #if ENABLE(TEXT_AUTOSIZING)
314         float m_textAutosizingFontScaleFactor;
315         IntSize m_textAutosizingWindowSizeOverride;
316         bool m_textAutosizingEnabled : 1;
317 #endif
318         IntSize m_resolutionDensityPerInchOverride;
319
320         SETTINGS_MEMBER_VARIABLES
321
322         bool m_isJavaEnabled : 1;
323         bool m_isJavaEnabledForLocalFiles : 1;
324         bool m_loadsImagesAutomatically : 1;
325         bool m_privateBrowsingEnabled : 1;
326         bool m_areImagesEnabled : 1;
327         bool m_arePluginsEnabled : 1;
328         bool m_isScriptEnabled : 1;
329         bool m_textAreasAreResizable : 1;
330         bool m_needsAdobeFrameReloadingQuirk : 1;
331         bool m_usesPageCache : 1;
332         bool m_authorAndUserStylesEnabled : 1;
333         unsigned m_fontRenderingMode : 1;
334         bool m_isCSSCustomFilterEnabled : 1;
335 #if ENABLE(CSS_STICKY_POSITION)
336         bool m_cssStickyPositionEnabled : 1;
337 #endif
338 #if ENABLE(CSS_VARIABLES)
339         bool m_cssVariablesEnabled : 1;
340 #endif
341         bool m_acceleratedCompositingEnabled : 1;
342         bool m_showDebugBorders : 1;
343         bool m_showRepaintCounter : 1;
344         bool m_showTiledScrollingIndicator : 1;
345         bool m_tiledBackingStoreEnabled : 1;
346         bool m_dnsPrefetchingEnabled : 1;
347 #if ENABLE(SMOOTH_SCROLLING)
348         bool m_scrollAnimatorEnabled : 1;
349 #endif
350
351 #if ENABLE(TOUCH_EVENTS)
352         bool m_touchEventEmulationEnabled : 1;
353 #endif
354         bool m_scrollingPerformanceLoggingEnabled : 1;
355         bool m_aggressiveTileRetentionEnabled : 1;
356
357         Timer<Settings> m_setImageLoadingSettingsTimer;
358         void imageLoadingSettingsTimerFired(Timer<Settings>*);
359
360         static double gDefaultMinDOMTimerInterval;
361         static double gDefaultDOMTimerAlignmentInterval;
362
363 #if USE(AVFOUNDATION)
364         static bool gAVFoundationEnabled;
365 #endif
366
367 #if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
368         static bool gQTKitEnabled;
369 #endif
370         
371         static bool gMockScrollbarsEnabled;
372         static bool gUsesOverlayScrollbars;
373
374 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
375         static bool gShouldUseHighResolutionTimers;
376 #endif
377 #if USE(JSC)
378         static bool gShouldRespectPriorityInCSSAttributeSetters;
379 #endif
380
381         static double gHiddenPageDOMTimerAlignmentInterval;
382     };
383
384 } // namespace WebCore
385
386 #endif // Settings_h