25ad8d8d8b1317a8bcc9ac7019c09e35de9a4ab5
[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 #if ENABLE(TEXT_AUTOSIZING)
98         void setTextAutosizingEnabled(bool);
99         bool textAutosizingEnabled() const { return m_textAutosizingEnabled; }
100
101         void setTextAutosizingFontScaleFactor(float);
102         float textAutosizingFontScaleFactor() const { return m_textAutosizingFontScaleFactor; }
103
104         // Only set by Layout Tests, and only used if textAutosizingEnabled() returns true.
105         void setTextAutosizingWindowSizeOverride(const IntSize&);
106         const IntSize& textAutosizingWindowSizeOverride() const { return m_textAutosizingWindowSizeOverride; }
107 #endif
108
109         // Only set by Layout Tests.
110         void setResolutionOverride(const IntSize&);
111         const IntSize& resolutionOverride() const { return m_resolutionDensityPerInchOverride; }
112
113         // Only set by Layout Tests.
114         void setMediaTypeOverride(const String&);
115         const String& mediaTypeOverride() const { return m_mediaTypeOverride; }
116
117         // Unlike areImagesEnabled, this only suppresses the network load of
118         // the image URL.  A cached image will still be rendered if requested.
119         void setLoadsImagesAutomatically(bool);
120         bool loadsImagesAutomatically() const { return m_loadsImagesAutomatically; }
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         SETTINGS_GETTERS_AND_SETTERS
129
130         void setJavaEnabled(bool);
131         bool isJavaEnabled() const { return m_isJavaEnabled; }
132
133         // This settings is only consulted if isJavaEnabled() returns true;
134         void setJavaEnabledForLocalFiles(bool);
135         bool isJavaEnabledForLocalFiles() const { return m_isJavaEnabledForLocalFiles; }
136
137         void setImagesEnabled(bool);
138         bool areImagesEnabled() const { return m_areImagesEnabled; }
139
140         void setPluginsEnabled(bool);
141         bool arePluginsEnabled() const { return m_arePluginsEnabled; }
142
143         // When this option is set, WebCore will avoid storing any record of browsing activity
144         // that may persist on disk or remain displayed when the option is reset.
145         // This option does not affect the storage of such information in RAM.
146         // The following functions respect this setting:
147         //  - HTML5/DOM Storage
148         //  - Icon Database
149         //  - Console Messages
150         //  - MemoryCache
151         //  - Application Cache
152         //  - Back/Forward Page History
153         //  - Page Search Results
154         //  - HTTP Cookies
155         //  - Plug-ins (that support NPNVprivateModeBool)
156         void setPrivateBrowsingEnabled(bool);
157         bool privateBrowsingEnabled() const { return m_privateBrowsingEnabled; }
158
159         void setDNSPrefetchingEnabled(bool);
160         bool dnsPrefetchingEnabled() const { return m_dnsPrefetchingEnabled; }
161
162         void setUserStyleSheetLocation(const KURL&);
163         const KURL& userStyleSheetLocation() const { return m_userStyleSheetLocation; }
164
165         void setNeedsAdobeFrameReloadingQuirk(bool);
166         bool needsAcrobatFrameReloadingQuirk() const { return m_needsAdobeFrameReloadingQuirk; }
167
168         static void setDefaultMinDOMTimerInterval(double); // Interval specified in seconds.
169         static double defaultMinDOMTimerInterval();
170         
171         static void setHiddenPageDOMTimerAlignmentInterval(double); // Interval specified in seconds.
172         static double hiddenPageDOMTimerAlignmentInterval();
173
174         void setMinDOMTimerInterval(double); // Per-page; initialized to default value.
175         double minDOMTimerInterval();
176
177         static void setDefaultDOMTimerAlignmentInterval(double);
178         static double defaultDOMTimerAlignmentInterval();
179
180         void setDOMTimerAlignmentInterval(double);
181         double domTimerAlignmentInterval() const;
182
183         void setUsesPageCache(bool);
184         bool usesPageCache() const { return m_usesPageCache; }
185         
186         void setFontRenderingMode(FontRenderingMode mode);
187         FontRenderingMode fontRenderingMode() const;
188
189         void setCSSCustomFilterEnabled(bool enabled) { m_isCSSCustomFilterEnabled = enabled; }
190         bool isCSSCustomFilterEnabled() const { return m_isCSSCustomFilterEnabled; }
191
192 #if ENABLE(CSS_STICKY_POSITION)
193         void setCSSStickyPositionEnabled(bool enabled) { m_cssStickyPositionEnabled = enabled; }
194         bool cssStickyPositionEnabled() const { return m_cssStickyPositionEnabled; }
195 #else
196         void setCSSStickyPositionEnabled(bool) { }
197         bool cssStickyPositionEnabled() const { return false; }
198 #endif
199
200 #if ENABLE(CSS_VARIABLES)
201         void setCSSVariablesEnabled(bool enabled) { m_cssVariablesEnabled = enabled; }
202         bool cssVariablesEnabled() const { return m_cssVariablesEnabled; }
203 #else
204         void setCSSVariablesEnabled(bool) { }
205         bool cssVariablesEnabled() const { return false; }
206 #endif
207
208         void setShowTiledScrollingIndicator(bool);
209         bool showTiledScrollingIndicator() const { return m_showTiledScrollingIndicator; }
210
211 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
212         static void setShouldUseHighResolutionTimers(bool);
213         static bool shouldUseHighResolutionTimers() { return gShouldUseHighResolutionTimers; }
214 #endif
215
216         void setTiledBackingStoreEnabled(bool);
217         bool tiledBackingStoreEnabled() const { return m_tiledBackingStoreEnabled; }
218
219 #if USE(AVFOUNDATION)
220         static void setAVFoundationEnabled(bool flag);
221         static bool isAVFoundationEnabled() { return gAVFoundationEnabled; }
222 #endif
223
224 #if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
225         static void setQTKitEnabled(bool flag);
226         static bool isQTKitEnabled() { return gQTKitEnabled; }
227 #endif
228
229         static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
230
231 #if ENABLE(SMOOTH_SCROLLING)
232         void setEnableScrollAnimator(bool flag) { m_scrollAnimatorEnabled = flag; }
233         bool scrollAnimatorEnabled() const { return m_scrollAnimatorEnabled; }
234 #endif
235
236 #if USE(SAFARI_THEME)
237         // Windows debugging pref (global) for switching between the Aqua look and a native windows look.
238         static void setShouldPaintNativeControls(bool);
239         static bool shouldPaintNativeControls() { return gShouldPaintNativeControls; }
240 #endif
241
242         static void setMockScrollbarsEnabled(bool flag);
243         static bool mockScrollbarsEnabled();
244
245         static void setUsesOverlayScrollbars(bool flag);
246         static bool usesOverlayScrollbars();
247
248 #if ENABLE(TOUCH_EVENTS)
249         void setTouchEventEmulationEnabled(bool enabled) { m_touchEventEmulationEnabled = enabled; }
250         bool isTouchEventEmulationEnabled() const { return m_touchEventEmulationEnabled; }
251 #endif
252
253         void setStorageBlockingPolicy(SecurityOrigin::StorageBlockingPolicy);
254         SecurityOrigin::StorageBlockingPolicy storageBlockingPolicy() const { return m_storageBlockingPolicy; }
255
256         void setScrollingPerformanceLoggingEnabled(bool);
257         bool scrollingPerformanceLoggingEnabled() { return m_scrollingPerformanceLoggingEnabled; }
258         
259         void setAggressiveTileRetentionEnabled(bool);
260         bool aggressiveTileRetentionEnabled() { return m_aggressiveTileRetentionEnabled; }
261
262 #if USE(JSC)
263         static void setShouldRespectPriorityInCSSAttributeSetters(bool);
264         static bool shouldRespectPriorityInCSSAttributeSetters();
265 #endif
266
267     private:
268         explicit Settings(Page*);
269
270         void initializeDefaultFontFamilies();
271
272         Page* m_page;
273
274         String m_mediaTypeOverride;
275         KURL m_userStyleSheetLocation;
276         ScriptFontFamilyMap m_standardFontFamilyMap;
277         ScriptFontFamilyMap m_serifFontFamilyMap;
278         ScriptFontFamilyMap m_fixedFontFamilyMap;
279         ScriptFontFamilyMap m_sansSerifFontFamilyMap;
280         ScriptFontFamilyMap m_cursiveFontFamilyMap;
281         ScriptFontFamilyMap m_fantasyFontFamilyMap;
282         ScriptFontFamilyMap m_pictographFontFamilyMap;
283         SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
284 #if ENABLE(TEXT_AUTOSIZING)
285         float m_textAutosizingFontScaleFactor;
286         IntSize m_textAutosizingWindowSizeOverride;
287         bool m_textAutosizingEnabled : 1;
288 #endif
289         IntSize m_resolutionDensityPerInchOverride;
290
291         SETTINGS_MEMBER_VARIABLES
292
293         bool m_isJavaEnabled : 1;
294         bool m_isJavaEnabledForLocalFiles : 1;
295         bool m_loadsImagesAutomatically : 1;
296         bool m_privateBrowsingEnabled : 1;
297         bool m_areImagesEnabled : 1;
298         bool m_arePluginsEnabled : 1;
299         bool m_isScriptEnabled : 1;
300         bool m_needsAdobeFrameReloadingQuirk : 1;
301         bool m_usesPageCache : 1;
302         unsigned m_fontRenderingMode : 1;
303         bool m_isCSSCustomFilterEnabled : 1;
304 #if ENABLE(CSS_STICKY_POSITION)
305         bool m_cssStickyPositionEnabled : 1;
306 #endif
307 #if ENABLE(CSS_VARIABLES)
308         bool m_cssVariablesEnabled : 1;
309 #endif
310         bool m_showTiledScrollingIndicator : 1;
311         bool m_tiledBackingStoreEnabled : 1;
312         bool m_dnsPrefetchingEnabled : 1;
313 #if ENABLE(SMOOTH_SCROLLING)
314         bool m_scrollAnimatorEnabled : 1;
315 #endif
316
317 #if ENABLE(TOUCH_EVENTS)
318         bool m_touchEventEmulationEnabled : 1;
319 #endif
320         bool m_scrollingPerformanceLoggingEnabled : 1;
321         bool m_aggressiveTileRetentionEnabled : 1;
322
323         Timer<Settings> m_setImageLoadingSettingsTimer;
324         void imageLoadingSettingsTimerFired(Timer<Settings>*);
325
326         static double gDefaultMinDOMTimerInterval;
327         static double gDefaultDOMTimerAlignmentInterval;
328
329 #if USE(AVFOUNDATION)
330         static bool gAVFoundationEnabled;
331 #endif
332
333 #if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
334         static bool gQTKitEnabled;
335 #endif
336         
337         static bool gMockScrollbarsEnabled;
338         static bool gUsesOverlayScrollbars;
339
340 #if USE(SAFARI_THEME)
341         static bool gShouldPaintNativeControls;
342 #endif
343 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
344         static bool gShouldUseHighResolutionTimers;
345 #endif
346 #if USE(JSC)
347         static bool gShouldRespectPriorityInCSSAttributeSetters;
348 #endif
349
350         static double gHiddenPageDOMTimerAlignmentInterval;
351     };
352
353 } // namespace WebCore
354
355 #endif // Settings_h