Need a way to test the tile cache with margins enabled
[WebKit-https.git] / Source / WebCore / page / Settings.h
1 /*
2  * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2011, 2012, 2013 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 "URL.h"
34 #include "SecurityOrigin.h"
35 #include "SettingsMacros.h"
36 #include "Timer.h"
37 #include <wtf/HashMap.h>
38 #include <wtf/RefCounted.h>
39 #include <wtf/text/AtomicString.h>
40 #include <wtf/text/AtomicStringHash.h>
41 #include <wtf/unicode/Unicode.h>
42
43 namespace WebCore {
44
45 class FontGenericFamilies;
46 class Page;
47
48 enum EditableLinkBehavior {
49     EditableLinkDefaultBehavior,
50     EditableLinkAlwaysLive,
51     EditableLinkOnlyLiveWithShiftKey,
52     EditableLinkLiveWhenNotFocused,
53     EditableLinkNeverLive
54 };
55
56 enum TextDirectionSubmenuInclusionBehavior {
57     TextDirectionSubmenuNeverIncluded,
58     TextDirectionSubmenuAutomaticallyIncluded,
59     TextDirectionSubmenuAlwaysIncluded
60 };
61
62 class Settings : public RefCounted<Settings> {
63     WTF_MAKE_NONCOPYABLE(Settings); WTF_MAKE_FAST_ALLOCATED;
64 public:
65     static PassRefPtr<Settings> create(Page*);
66     ~Settings();
67
68     void setStandardFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
69     const AtomicString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
70
71     void setFixedFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
72     const AtomicString& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
73
74     void setSerifFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
75     const AtomicString& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
76
77     void setSansSerifFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
78     const AtomicString& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
79
80     void setCursiveFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
81     const AtomicString& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
82
83     void setFantasyFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
84     const AtomicString& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
85
86     void setPictographFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
87     const AtomicString& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
88
89 #if ENABLE(TEXT_AUTOSIZING)
90     void setTextAutosizingEnabled(bool);
91     bool textAutosizingEnabled() const { return m_textAutosizingEnabled; }
92
93     void setTextAutosizingFontScaleFactor(float);
94     float textAutosizingFontScaleFactor() const { return m_textAutosizingFontScaleFactor; }
95
96     // Only set by Layout Tests, and only used if textAutosizingEnabled() returns true.
97     void setTextAutosizingWindowSizeOverride(const IntSize&);
98     const IntSize& textAutosizingWindowSizeOverride() const { return m_textAutosizingWindowSizeOverride; }
99 #endif
100
101     // Only set by Layout Tests.
102     void setMediaTypeOverride(const String&);
103     const String& mediaTypeOverride() const { return m_mediaTypeOverride; }
104
105     // Unlike areImagesEnabled, this only suppresses the network load of
106     // the image URL.  A cached image will still be rendered if requested.
107     void setLoadsImagesAutomatically(bool);
108     bool loadsImagesAutomatically() const { return m_loadsImagesAutomatically; }
109
110     // Clients that execute script should call ScriptController::canExecuteScripts()
111     // instead of this function. ScriptController::canExecuteScripts() checks the
112     // HTML sandbox, plug-in sandboxing, and other important details.
113     bool isScriptEnabled() const { return m_isScriptEnabled; }
114     void setScriptEnabled(bool);
115
116     SETTINGS_GETTERS_AND_SETTERS
117
118     void setScreenFontSubstitutionEnabled(bool);
119     bool screenFontSubstitutionEnabled() const { return m_screenFontSubstitutionEnabled; }
120
121     void setJavaEnabled(bool);
122     bool isJavaEnabled() const { return m_isJavaEnabled; }
123
124     // This settings is only consulted if isJavaEnabled() returns true;
125     void setJavaEnabledForLocalFiles(bool);
126     bool isJavaEnabledForLocalFiles() const { return m_isJavaEnabledForLocalFiles; }
127
128     void setImagesEnabled(bool);
129     bool areImagesEnabled() const { return m_areImagesEnabled; }
130
131     void setPluginsEnabled(bool);
132     bool arePluginsEnabled() const { return m_arePluginsEnabled; }
133
134     // When this option is set, WebCore will avoid storing any record of browsing activity
135     // that may persist on disk or remain displayed when the option is reset.
136     // This option does not affect the storage of such information in RAM.
137     // The following functions respect this setting:
138     //  - HTML5/DOM Storage
139     //  - Icon Database
140     //  - Console Messages
141     //  - MemoryCache
142     //  - Application Cache
143     //  - Back/Forward Page History
144     //  - Page Search Results
145     //  - HTTP Cookies
146     //  - Plug-ins (that support NPNVprivateModeBool)
147     void setPrivateBrowsingEnabled(bool);
148     bool privateBrowsingEnabled() const { return m_privateBrowsingEnabled; }
149
150     void setDNSPrefetchingEnabled(bool);
151     bool dnsPrefetchingEnabled() const { return m_dnsPrefetchingEnabled; }
152
153     void setUserStyleSheetLocation(const URL&);
154     const URL& userStyleSheetLocation() const { return m_userStyleSheetLocation; }
155
156     void setNeedsAdobeFrameReloadingQuirk(bool);
157     bool needsAcrobatFrameReloadingQuirk() const { return m_needsAdobeFrameReloadingQuirk; }
158
159     static void setDefaultMinDOMTimerInterval(double); // Interval specified in seconds.
160     static double defaultMinDOMTimerInterval();
161         
162     static void setHiddenPageDOMTimerAlignmentInterval(double); // Interval specified in seconds.
163     static double hiddenPageDOMTimerAlignmentInterval();
164
165     void setMinDOMTimerInterval(double); // Per-page; initialized to default value.
166     double minDOMTimerInterval();
167
168     static void setDefaultDOMTimerAlignmentInterval(double);
169     static double defaultDOMTimerAlignmentInterval();
170
171     void setDOMTimerAlignmentInterval(double);
172     double domTimerAlignmentInterval() const;
173
174     // FIXME: Change these methods to take/return an unsigned integer after we upstream the iOS port.
175     void setLayoutInterval(int);
176     int layoutInterval() const { return m_layoutInterval; }
177
178 #if ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
179     bool hiddenPageDOMTimerThrottlingEnabled() const { return m_hiddenPageDOMTimerThrottlingEnabled; }
180     void setHiddenPageDOMTimerThrottlingEnabled(bool);
181 #endif
182
183 #if PLATFORM(IOS)
184     // FIXME: This setting isn't specific to iOS.
185     void setMaxParseDuration(double maxParseDuration) { m_maxParseDuration = maxParseDuration; }
186     double maxParseDuration() const { return m_maxParseDuration; }
187
188     void setStandalone(bool);
189     bool standalone() const { return m_standalone; }
190
191     void setTelephoneNumberParsingEnabled(bool flag) { m_telephoneNumberParsingEnabled = flag; }
192     bool telephoneNumberParsingEnabled() const { return m_telephoneNumberParsingEnabled; }
193
194     void setMediaDataLoadsAutomatically(bool flag) { m_mediaDataLoadsAutomatically = flag; }
195     bool mediaDataLoadsAutomatically() const { return m_mediaDataLoadsAutomatically; }
196
197     void setShouldTransformsAffectOverflow(bool flag) { m_shouldTransformsAffectOverflow = flag; }
198     bool shouldTransformsAffectOverflow() const { return m_shouldTransformsAffectOverflow; }
199
200     void setShouldDispatchJavaScriptWindowOnErrorEvents(bool flag) { m_shouldDispatchJavaScriptWindowOnErrorEvents = flag; }
201     bool shouldDispatchJavaScriptWindowOnErrorEvents() const { return m_shouldDispatchJavaScriptWindowOnErrorEvents; }
202
203     void setAlwaysUseBaselineOfPrimaryFont(bool flag) { m_alwaysUseBaselineOfPrimaryFont = flag; }
204     bool alwaysUseBaselineOfPrimaryFont() const { return m_alwaysUseBaselineOfPrimaryFont; }
205
206     void setAlwaysUseAcceleratedOverflowScroll(bool flag) { m_alwaysUseAcceleratedOverflowScroll = flag; }
207     bool alwaysUseAcceleratedOverflowScroll() const { return m_alwaysUseAcceleratedOverflowScroll; }
208 #endif
209
210     void setUsesPageCache(bool);
211     bool usesPageCache() const { return m_usesPageCache; }
212         
213     void setFontRenderingMode(FontRenderingMode mode);
214     FontRenderingMode fontRenderingMode() const;
215
216     void setCSSCustomFilterEnabled(bool enabled) { m_isCSSCustomFilterEnabled = enabled; }
217     bool isCSSCustomFilterEnabled() const { return m_isCSSCustomFilterEnabled; }
218
219 #if ENABLE(CSS_STICKY_POSITION)
220     void setCSSStickyPositionEnabled(bool enabled) { m_cssStickyPositionEnabled = enabled; }
221     bool cssStickyPositionEnabled() const { return m_cssStickyPositionEnabled; }
222 #else
223     void setCSSStickyPositionEnabled(bool) { }
224     bool cssStickyPositionEnabled() const { return false; }
225 #endif
226
227     void setShowTiledScrollingIndicator(bool);
228     bool showTiledScrollingIndicator() const { return m_showTiledScrollingIndicator; }
229
230 #if PLATFORM(WIN)
231     static void setShouldUseHighResolutionTimers(bool);
232     static bool shouldUseHighResolutionTimers() { return gShouldUseHighResolutionTimers; }
233 #endif
234
235     void setTiledBackingStoreEnabled(bool);
236     bool tiledBackingStoreEnabled() const { return m_tiledBackingStoreEnabled; }
237
238     void setBackgroundShouldExtendBeyondPage(bool);
239     bool backgroundShouldExtendBeyondPage() const { return m_backgroundShouldExtendBeyondPage; }
240
241 #if USE(AVFOUNDATION)
242     static void setAVFoundationEnabled(bool flag);
243     static bool isAVFoundationEnabled() { return gAVFoundationEnabled; }
244 #endif
245
246 #if PLATFORM(MAC)
247     static void setQTKitEnabled(bool flag);
248     static bool isQTKitEnabled() { return gQTKitEnabled; }
249 #endif
250
251     static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
252
253 #if USE(SAFARI_THEME)
254     // Windows debugging pref (global) for switching between the Aqua look and a native windows look.
255     static void setShouldPaintNativeControls(bool);
256     static bool shouldPaintNativeControls() { return gShouldPaintNativeControls; }
257 #endif
258
259     static void setMockScrollbarsEnabled(bool flag);
260     static bool mockScrollbarsEnabled();
261
262     static void setUsesOverlayScrollbars(bool flag);
263     static bool usesOverlayScrollbars();
264
265 #if ENABLE(TOUCH_EVENTS)
266     void setTouchEventEmulationEnabled(bool enabled) { m_touchEventEmulationEnabled = enabled; }
267     bool isTouchEventEmulationEnabled() const { return m_touchEventEmulationEnabled; }
268 #endif
269
270     void setStorageBlockingPolicy(SecurityOrigin::StorageBlockingPolicy);
271     SecurityOrigin::StorageBlockingPolicy storageBlockingPolicy() const { return m_storageBlockingPolicy; }
272
273     void setScrollingPerformanceLoggingEnabled(bool);
274     bool scrollingPerformanceLoggingEnabled() { return m_scrollingPerformanceLoggingEnabled; }
275         
276     void setAggressiveTileRetentionEnabled(bool);
277     bool aggressiveTileRetentionEnabled() { return m_aggressiveTileRetentionEnabled; }
278
279     static void setShouldRespectPriorityInCSSAttributeSetters(bool);
280     static bool shouldRespectPriorityInCSSAttributeSetters();
281
282     void setTimeWithoutMouseMovementBeforeHidingControls(double time) { m_timeWithoutMouseMovementBeforeHidingControls = time; }
283     double timeWithoutMouseMovementBeforeHidingControls() const { return m_timeWithoutMouseMovementBeforeHidingControls; }
284
285 #if ENABLE(PAGE_VISIBILITY_API)
286     bool hiddenPageCSSAnimationSuspensionEnabled() const { return m_hiddenPageCSSAnimationSuspensionEnabled; }
287     void setHiddenPageCSSAnimationSuspensionEnabled(bool);
288 #endif
289
290     void setFontFallbackPrefersPictographs(bool);
291     bool fontFallbackPrefersPictographs() const { return m_fontFallbackPrefersPictographs; }
292
293     static bool lowPowerVideoAudioBufferSizeEnabled() { return gLowPowerVideoAudioBufferSizeEnabled; }
294     static void setLowPowerVideoAudioBufferSizeEnabled(bool);
295
296 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
297     static void setVideoPluginProxyEnabled(bool flag);
298     static bool isVideoPluginProxyEnabled() { return gVideoPluginProxyEnabled; }
299 #endif
300
301 #if PLATFORM(IOS)
302     static void setAudioSessionCategoryOverride(unsigned);
303     static unsigned audioSessionCategoryOverride();
304
305     static void setNetworkDataUsageTrackingEnabled(bool);
306     static bool networkDataUsageTrackingEnabled();
307
308     static void setNetworkInterfaceName(const String&);
309     static const String& networkInterfaceName();
310 #endif
311
312 private:
313     explicit Settings(Page*);
314
315     void initializeDefaultFontFamilies();
316     static bool shouldEnableScreenFontSubstitutionByDefault();
317
318     Page* m_page;
319
320     String m_mediaTypeOverride;
321     URL m_userStyleSheetLocation;
322     const std::unique_ptr<FontGenericFamilies> m_fontGenericFamilies;
323     SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
324     int m_layoutInterval;
325 #if PLATFORM(IOS)
326     double m_maxParseDuration;
327 #endif
328 #if ENABLE(TEXT_AUTOSIZING)
329     float m_textAutosizingFontScaleFactor;
330     IntSize m_textAutosizingWindowSizeOverride;
331     bool m_textAutosizingEnabled : 1;
332 #endif
333
334     SETTINGS_MEMBER_VARIABLES
335
336     bool m_screenFontSubstitutionEnabled : 1;
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_arePluginsEnabled : 1;
343     bool m_isScriptEnabled : 1;
344     bool m_needsAdobeFrameReloadingQuirk : 1;
345     bool m_usesPageCache : 1;
346     unsigned m_fontRenderingMode : 1;
347     bool m_isCSSCustomFilterEnabled : 1;
348 #if PLATFORM(IOS)
349     bool m_standalone : 1;
350     bool m_telephoneNumberParsingEnabled : 1;
351     bool m_mediaDataLoadsAutomatically : 1;
352     bool m_shouldTransformsAffectOverflow : 1;
353     bool m_shouldDispatchJavaScriptWindowOnErrorEvents : 1;
354     bool m_alwaysUseBaselineOfPrimaryFont : 1;
355     bool m_allowMultiElementImplicitFormSubmission : 1;
356     bool m_alwaysUseAcceleratedOverflowScroll : 1;
357 #endif
358 #if ENABLE(CSS_STICKY_POSITION)
359     bool m_cssStickyPositionEnabled : 1;
360 #endif
361     bool m_showTiledScrollingIndicator : 1;
362     bool m_tiledBackingStoreEnabled : 1;
363     bool m_backgroundShouldExtendBeyondPage : 1;
364     bool m_dnsPrefetchingEnabled : 1;
365
366 #if ENABLE(TOUCH_EVENTS)
367     bool m_touchEventEmulationEnabled : 1;
368 #endif
369     bool m_scrollingPerformanceLoggingEnabled : 1;
370     bool m_aggressiveTileRetentionEnabled : 1;
371
372     double m_timeWithoutMouseMovementBeforeHidingControls;
373
374     Timer<Settings> m_setImageLoadingSettingsTimer;
375     void imageLoadingSettingsTimerFired(Timer<Settings>*);
376
377 #if ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
378     bool m_hiddenPageDOMTimerThrottlingEnabled : 1;
379 #endif
380 #if ENABLE(PAGE_VISIBILITY_API)
381     bool m_hiddenPageCSSAnimationSuspensionEnabled : 1;
382 #endif
383     bool m_fontFallbackPrefersPictographs : 1;
384
385     static double gDefaultMinDOMTimerInterval;
386     static double gDefaultDOMTimerAlignmentInterval;
387
388 #if USE(AVFOUNDATION)
389     static bool gAVFoundationEnabled;
390 #endif
391
392 #if PLATFORM(MAC)
393     static bool gQTKitEnabled;
394 #endif
395         
396     static bool gMockScrollbarsEnabled;
397     static bool gUsesOverlayScrollbars;
398
399 #if USE(SAFARI_THEME)
400     static bool gShouldPaintNativeControls;
401 #endif
402 #if PLATFORM(WIN)
403     static bool gShouldUseHighResolutionTimers;
404 #endif
405     static bool gShouldRespectPriorityInCSSAttributeSetters;
406 #if PLATFORM(IOS)
407     static bool gNetworkDataUsageTrackingEnabled;
408 #endif
409
410     static double gHiddenPageDOMTimerAlignmentInterval;
411
412     static bool gLowPowerVideoAudioBufferSizeEnabled;
413
414 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
415     static bool gVideoPluginProxyEnabled;
416 #endif
417 };
418
419 } // namespace WebCore
420
421 #endif