Add a Setting to disable QTKit media engine.
[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 setMediaEnabled(bool);
156         bool isMediaEnabled() const { return m_isMediaEnabled; }
157
158         void setPluginsEnabled(bool);
159         bool arePluginsEnabled() const { return m_arePluginsEnabled; }
160
161         // When this option is set, WebCore will avoid storing any record of browsing activity
162         // that may persist on disk or remain displayed when the option is reset.
163         // This option does not affect the storage of such information in RAM.
164         // The following functions respect this setting:
165         //  - HTML5/DOM Storage
166         //  - Icon Database
167         //  - Console Messages
168         //  - MemoryCache
169         //  - Application Cache
170         //  - Back/Forward Page History
171         //  - Page Search Results
172         //  - HTTP Cookies
173         //  - Plug-ins (that support NPNVprivateModeBool)
174         void setPrivateBrowsingEnabled(bool);
175         bool privateBrowsingEnabled() const { return m_privateBrowsingEnabled; }
176
177         void setDNSPrefetchingEnabled(bool);
178         bool dnsPrefetchingEnabled() const { return m_dnsPrefetchingEnabled; }
179
180         void setUserStyleSheetLocation(const KURL&);
181         const KURL& userStyleSheetLocation() const { return m_userStyleSheetLocation; }
182
183         void setTextAreasAreResizable(bool);
184         bool textAreasAreResizable() const { return m_textAreasAreResizable; }
185
186         void setNeedsAdobeFrameReloadingQuirk(bool);
187         bool needsAcrobatFrameReloadingQuirk() const { return m_needsAdobeFrameReloadingQuirk; }
188
189         void setDOMPasteAllowed(bool);
190         bool isDOMPasteAllowed() const { return m_isDOMPasteAllowed; }
191         
192         static void setDefaultMinDOMTimerInterval(double); // Interval specified in seconds.
193         static double defaultMinDOMTimerInterval();
194         
195         static void setHiddenPageDOMTimerAlignmentInterval(double); // Interval specified in seconds.
196         static double hiddenPageDOMTimerAlignmentInterval();
197
198         void setMinDOMTimerInterval(double); // Per-page; initialized to default value.
199         double minDOMTimerInterval();
200
201         static void setDefaultDOMTimerAlignmentInterval(double);
202         static double defaultDOMTimerAlignmentInterval();
203
204         void setDOMTimerAlignmentInterval(double);
205         double domTimerAlignmentInterval() const;
206
207         void setUsesPageCache(bool);
208         bool usesPageCache() const { return m_usesPageCache; }
209         
210         void setAuthorAndUserStylesEnabled(bool);
211         bool authorAndUserStylesEnabled() const { return m_authorAndUserStylesEnabled; }
212         
213         void setFontRenderingMode(FontRenderingMode mode);
214         FontRenderingMode fontRenderingMode() const;
215
216         void setApplicationChromeMode(bool);
217         bool inApplicationChromeMode() const { return m_inApplicationChromeMode; }
218
219         void setCSSCustomFilterEnabled(bool enabled) { m_isCSSCustomFilterEnabled = enabled; }
220         bool isCSSCustomFilterEnabled() const { return m_isCSSCustomFilterEnabled; }
221
222 #if ENABLE(CSS_STICKY_POSITION)
223         void setCSSStickyPositionEnabled(bool enabled) { m_cssStickyPositionEnabled = enabled; }
224         bool cssStickyPositionEnabled() const { return m_cssStickyPositionEnabled; }
225 #else
226         void setCSSStickyPositionEnabled(bool) { }
227         bool cssStickyPositionEnabled() const { return false; }
228 #endif
229
230 #if ENABLE(CSS_VARIABLES)
231         void setCSSVariablesEnabled(bool enabled) { m_cssVariablesEnabled = enabled; }
232         bool cssVariablesEnabled() const { return m_cssVariablesEnabled; }
233 #else
234         void setCSSVariablesEnabled(bool) { }
235         bool cssVariablesEnabled() const { return false; }
236 #endif
237
238         void setAcceleratedCompositingEnabled(bool);
239         bool acceleratedCompositingEnabled() const { return m_acceleratedCompositingEnabled; }
240
241         void setShowDebugBorders(bool);
242         bool showDebugBorders() const { return m_showDebugBorders; }
243
244         void setShowRepaintCounter(bool);
245         bool showRepaintCounter() const { return m_showRepaintCounter; }
246
247         void setShowTiledScrollingIndicator(bool);
248         bool showTiledScrollingIndicator() const { return m_showTiledScrollingIndicator; }
249
250 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
251         static void setShouldUseHighResolutionTimers(bool);
252         static bool shouldUseHighResolutionTimers() { return gShouldUseHighResolutionTimers; }
253 #endif
254
255         void setTiledBackingStoreEnabled(bool);
256         bool tiledBackingStoreEnabled() const { return m_tiledBackingStoreEnabled; }
257
258 #if USE(AVFOUNDATION)
259         static void setAVFoundationEnabled(bool flag);
260         static bool isAVFoundationEnabled() { return gAVFoundationEnabled; }
261 #endif
262
263 #if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
264         static void setQTKitEnabled(bool flag);
265         static bool isQTKitEnabled() { return gQTKitEnabled; }
266 #endif
267
268         static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
269
270 #if ENABLE(SMOOTH_SCROLLING)
271         void setEnableScrollAnimator(bool flag) { m_scrollAnimatorEnabled = flag; }
272         bool scrollAnimatorEnabled() const { return m_scrollAnimatorEnabled; }
273 #endif
274
275 #if USE(SAFARI_THEME)
276         // Windows debugging pref (global) for switching between the Aqua look and a native windows look.
277         static void setShouldPaintNativeControls(bool);
278         static bool shouldPaintNativeControls() { return gShouldPaintNativeControls; }
279 #endif
280
281         static void setMockScrollbarsEnabled(bool flag);
282         static bool mockScrollbarsEnabled();
283
284         static void setUsesOverlayScrollbars(bool flag);
285         static bool usesOverlayScrollbars();
286
287 #if ENABLE(TOUCH_EVENTS)
288         void setTouchEventEmulationEnabled(bool enabled) { m_touchEventEmulationEnabled = enabled; }
289         bool isTouchEventEmulationEnabled() const { return m_touchEventEmulationEnabled; }
290 #endif
291
292         void setStorageBlockingPolicy(SecurityOrigin::StorageBlockingPolicy);
293         SecurityOrigin::StorageBlockingPolicy storageBlockingPolicy() const { return m_storageBlockingPolicy; }
294
295         void setScrollingPerformanceLoggingEnabled(bool);
296         bool scrollingPerformanceLoggingEnabled() { return m_scrollingPerformanceLoggingEnabled; }
297         
298         void setAggressiveTileRetentionEnabled(bool);
299         bool aggressiveTileRetentionEnabled() { return m_aggressiveTileRetentionEnabled; }
300
301 #if USE(JSC)
302         static void setShouldRespectPriorityInCSSAttributeSetters(bool);
303         static bool shouldRespectPriorityInCSSAttributeSetters();
304 #endif
305
306     private:
307         explicit Settings(Page*);
308
309         void initializeDefaultFontFamilies();
310
311         Page* m_page;
312
313         String m_mediaTypeOverride;
314         KURL m_userStyleSheetLocation;
315         ScriptFontFamilyMap m_standardFontFamilyMap;
316         ScriptFontFamilyMap m_serifFontFamilyMap;
317         ScriptFontFamilyMap m_fixedFontFamilyMap;
318         ScriptFontFamilyMap m_sansSerifFontFamilyMap;
319         ScriptFontFamilyMap m_cursiveFontFamilyMap;
320         ScriptFontFamilyMap m_fantasyFontFamilyMap;
321         ScriptFontFamilyMap m_pictographFontFamilyMap;
322         int m_minimumFontSize;
323         int m_minimumLogicalFontSize;
324         int m_defaultFontSize;
325         int m_defaultFixedFontSize;
326         bool m_screenFontSubstitutionEnabled;
327         SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
328 #if ENABLE(TEXT_AUTOSIZING)
329         float m_textAutosizingFontScaleFactor;
330         IntSize m_textAutosizingWindowSizeOverride;
331         bool m_textAutosizingEnabled : 1;
332 #endif
333         IntSize m_resolutionDensityPerInchOverride;
334
335         SETTINGS_MEMBER_VARIABLES
336
337         bool m_isJavaEnabled : 1;
338         bool m_isJavaEnabledForLocalFiles : 1;
339         bool m_loadsImagesAutomatically : 1;
340         bool m_privateBrowsingEnabled : 1;
341         bool m_areImagesEnabled : 1;
342         bool m_isMediaEnabled : 1;
343         bool m_arePluginsEnabled : 1;
344         bool m_isScriptEnabled : 1;
345         bool m_textAreasAreResizable : 1;
346         bool m_needsAdobeFrameReloadingQuirk : 1;
347         bool m_isDOMPasteAllowed : 1;
348         bool m_usesPageCache : 1;
349         bool m_authorAndUserStylesEnabled : 1;
350         unsigned m_fontRenderingMode : 1;
351         bool m_inApplicationChromeMode : 1;
352         bool m_isCSSCustomFilterEnabled : 1;
353 #if ENABLE(CSS_STICKY_POSITION)
354         bool m_cssStickyPositionEnabled : 1;
355 #endif
356 #if ENABLE(CSS_VARIABLES)
357         bool m_cssVariablesEnabled : 1;
358 #endif
359         bool m_acceleratedCompositingEnabled : 1;
360         bool m_showDebugBorders : 1;
361         bool m_showRepaintCounter : 1;
362         bool m_showTiledScrollingIndicator : 1;
363         bool m_tiledBackingStoreEnabled : 1;
364         bool m_dnsPrefetchingEnabled : 1;
365 #if ENABLE(SMOOTH_SCROLLING)
366         bool m_scrollAnimatorEnabled : 1;
367 #endif
368
369 #if ENABLE(TOUCH_EVENTS)
370         bool m_touchEventEmulationEnabled : 1;
371 #endif
372         bool m_scrollingPerformanceLoggingEnabled : 1;
373         bool m_aggressiveTileRetentionEnabled : 1;
374
375         Timer<Settings> m_setImageLoadingSettingsTimer;
376         void imageLoadingSettingsTimerFired(Timer<Settings>*);
377
378         static double gDefaultMinDOMTimerInterval;
379         static double gDefaultDOMTimerAlignmentInterval;
380
381 #if USE(AVFOUNDATION)
382         static bool gAVFoundationEnabled;
383 #endif
384
385 #if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
386         static bool gQTKitEnabled;
387 #endif
388         
389         static bool gMockScrollbarsEnabled;
390         static bool gUsesOverlayScrollbars;
391
392 #if USE(SAFARI_THEME)
393         static bool gShouldPaintNativeControls;
394 #endif
395 #if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX))
396         static bool gShouldUseHighResolutionTimers;
397 #endif
398 #if USE(JSC)
399         static bool gShouldRespectPriorityInCSSAttributeSetters;
400 #endif
401
402         static double gHiddenPageDOMTimerAlignmentInterval;
403     };
404
405 } // namespace WebCore
406
407 #endif // Settings_h