#ifndef Settings_h
#define Settings_h
#include "EditingBehaviorTypes.h"
#include "FontRenderingMode.h"
#include "IntSize.h"
#include "KURL.h"
#include "SecurityOrigin.h"
#include "SettingsMacros.h"
#include "Timer.h"
#include <wtf/HashMap.h>
#include <wtf/text/AtomicString.h>
#include <wtf/text/AtomicStringHash.h>
#include <wtf/unicode/Unicode.h>
#if PLATFORM(IOS)
#include "Document.h" // For cLayoutScheduleThreshold.
#endif // PLATFORM(IOS)
namespace WebCore {
class FontGenericFamilies;
class Page;
enum EditableLinkBehavior {
EditableLinkDefaultBehavior,
EditableLinkAlwaysLive,
EditableLinkOnlyLiveWithShiftKey,
EditableLinkLiveWhenNotFocused,
EditableLinkNeverLive
};
enum TextDirectionSubmenuInclusionBehavior {
TextDirectionSubmenuNeverIncluded,
TextDirectionSubmenuAutomaticallyIncluded,
TextDirectionSubmenuAlwaysIncluded
};
class Settings {
WTF_MAKE_NONCOPYABLE(Settings); WTF_MAKE_FAST_ALLOCATED;
public:
static PassOwnPtr<Settings> create(Page*);
~Settings();
void setStandardFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
const AtomicString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
void setFixedFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
const AtomicString& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
void setSerifFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
const AtomicString& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
void setSansSerifFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
const AtomicString& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
void setCursiveFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
const AtomicString& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
void setFantasyFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
const AtomicString& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
void setPictographFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
const AtomicString& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
#if ENABLE(TEXT_AUTOSIZING)
void setTextAutosizingEnabled(bool);
bool textAutosizingEnabled() const { return m_textAutosizingEnabled; }
void setTextAutosizingFontScaleFactor(float);
float textAutosizingFontScaleFactor() const { return m_textAutosizingFontScaleFactor; }
void setTextAutosizingWindowSizeOverride(const IntSize&);
const IntSize& textAutosizingWindowSizeOverride() const { return m_textAutosizingWindowSizeOverride; }
#endif
void setMediaTypeOverride(const String&);
const String& mediaTypeOverride() const { return m_mediaTypeOverride; }
void setLoadsImagesAutomatically(bool);
bool loadsImagesAutomatically() const { return m_loadsImagesAutomatically; }
bool isScriptEnabled() const { return m_isScriptEnabled; }
void setScriptEnabled(bool);
SETTINGS_GETTERS_AND_SETTERS
void setJavaEnabled(bool);
bool isJavaEnabled() const { return m_isJavaEnabled; }
void setJavaEnabledForLocalFiles(bool);
bool isJavaEnabledForLocalFiles() const { return m_isJavaEnabledForLocalFiles; }
void setImagesEnabled(bool);
bool areImagesEnabled() const { return m_areImagesEnabled; }
void setPluginsEnabled(bool);
bool arePluginsEnabled() const { return m_arePluginsEnabled; }
void setPrivateBrowsingEnabled(bool);
bool privateBrowsingEnabled() const { return m_privateBrowsingEnabled; }
void setDNSPrefetchingEnabled(bool);
bool dnsPrefetchingEnabled() const { return m_dnsPrefetchingEnabled; }
void setUserStyleSheetLocation(const KURL&);
const KURL& userStyleSheetLocation() const { return m_userStyleSheetLocation; }
void setNeedsAdobeFrameReloadingQuirk(bool);
bool needsAcrobatFrameReloadingQuirk() const { return m_needsAdobeFrameReloadingQuirk; }
static void setDefaultMinDOMTimerInterval(double); static double defaultMinDOMTimerInterval();
static void setHiddenPageDOMTimerAlignmentInterval(double); static double hiddenPageDOMTimerAlignmentInterval();
void setMinDOMTimerInterval(double); double minDOMTimerInterval();
static void setDefaultDOMTimerAlignmentInterval(double);
static double defaultDOMTimerAlignmentInterval();
void setDOMTimerAlignmentInterval(double);
double domTimerAlignmentInterval() const;
#if ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
bool hiddenPageDOMTimerThrottlingEnabled() const { return m_hiddenPageDOMTimerThrottlingEnabled; }
void setHiddenPageDOMTimerThrottlingEnabled(bool);
#endif
void setUsesPageCache(bool);
bool usesPageCache() const { return m_usesPageCache; }
#if ENABLE(IOS_TEXT_AUTOSIZING)
void setMinimumZoomFontSize(float size) { m_minimumZoomFontSize = size; }
float minimumZoomFontSize() const { return m_minimumZoomFontSize; }
#endif
#if PLATFORM(IOS)
void setLayoutInterval(int t) { m_layoutInterval = t < cLayoutScheduleThreshold ? cLayoutScheduleThreshold : t; }
int layoutInterval() const { return m_layoutInterval; }
void setMaxParseDuration(double maxParseDuration) { m_maxParseDuration = maxParseDuration; }
double maxParseDuration() const { return m_maxParseDuration; }
void setStandalone(bool flag);
bool standalone() const { return m_standalone; }
void setTelephoneNumberParsingEnabled(bool flag) { m_telephoneNumberParsingEnabled = flag; }
bool telephoneNumberParsingEnabled() const { return m_telephoneNumberParsingEnabled; }
void setMediaDataLoadsAutomatically(bool flag) { m_mediaDataLoadsAutomatically = flag; }
bool mediaDataLoadsAutomatically() const { return m_mediaDataLoadsAutomatically; }
void setShouldTransformsAffectOverflow(bool flag) { m_shouldTransformsAffectOverflow = flag; }
bool shouldTransformsAffectOverflow() const { return m_shouldTransformsAffectOverflow; }
void setShouldDispatchJavaScriptWindowOnErrorEvents(bool flag) { m_shouldDispatchJavaScriptWindowOnErrorEvents = flag; }
bool shouldDispatchJavaScriptWindowOnErrorEvents() const { return m_shouldDispatchJavaScriptWindowOnErrorEvents; }
void setFontFallbackPrefersPictographs(bool);
bool fontFallbackPrefersPictographs() const { return m_fontFallbackPrefersPictographs; }
void setAlwaysUseBaselineOfPrimaryFont(bool flag) { m_alwaysUseBaselineOfPrimaryFont = flag; }
bool alwaysUseBaselineOfPrimaryFont() const { return m_alwaysUseBaselineOfPrimaryFont; }
void setAllowMultiElementImplicitSubmission(bool flag) { m_allowMultiElementImplicitFormSubmission = flag; }
bool allowMultiElementImplicitSubmission() const { return m_allowMultiElementImplicitFormSubmission; }
void setAlwaysUseAcceleratedOverflowScroll(bool flag) { m_alwaysUseAcceleratedOverflowScroll = flag; }
bool alwaysUseAcceleratedOverflowScroll() const { return m_alwaysUseAcceleratedOverflowScroll; }
void setAllowCompositingLayerVisualDegradation(bool flag) { m_allowCompositingLayerVisualDegradation = flag; }
bool allowCompositingLayerVisualDegradation() const { return m_allowCompositingLayerVisualDegradation; }
void setMediaPlaybackAllowsAirPlay(bool flag) { m_mediaPlaybackAllowsAirPlay = flag; };
bool mediaPlaybackAllowsAirPlay() const { return m_mediaPlaybackAllowsAirPlay; }
#endif
void setFontRenderingMode(FontRenderingMode mode);
FontRenderingMode fontRenderingMode() const;
void setCSSCustomFilterEnabled(bool enabled) { m_isCSSCustomFilterEnabled = enabled; }
bool isCSSCustomFilterEnabled() const { return m_isCSSCustomFilterEnabled; }
#if ENABLE(CSS_STICKY_POSITION)
void setCSSStickyPositionEnabled(bool enabled) { m_cssStickyPositionEnabled = enabled; }
bool cssStickyPositionEnabled() const { return m_cssStickyPositionEnabled; }
#else
void setCSSStickyPositionEnabled(bool) { }
bool cssStickyPositionEnabled() const { return false; }
#endif
#if ENABLE(CSS_VARIABLES)
void setCSSVariablesEnabled(bool enabled) { m_cssVariablesEnabled = enabled; }
bool cssVariablesEnabled() const { return m_cssVariablesEnabled; }
#else
void setCSSVariablesEnabled(bool) { }
bool cssVariablesEnabled() const { return false; }
#endif
void setShowTiledScrollingIndicator(bool);
bool showTiledScrollingIndicator() const { return m_showTiledScrollingIndicator; }
#if PLATFORM(WIN)
static void setShouldUseHighResolutionTimers(bool);
static bool shouldUseHighResolutionTimers() { return gShouldUseHighResolutionTimers; }
#endif
void setTiledBackingStoreEnabled(bool);
bool tiledBackingStoreEnabled() const { return m_tiledBackingStoreEnabled; }
#if USE(AVFOUNDATION)
static void setAVFoundationEnabled(bool flag);
static bool isAVFoundationEnabled() { return gAVFoundationEnabled; }
#endif
#if PLATFORM(MAC)
static void setQTKitEnabled(bool flag);
static bool isQTKitEnabled() { return gQTKitEnabled; }
#endif
static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
#if USE(SAFARI_THEME)
static void setShouldPaintNativeControls(bool);
static bool shouldPaintNativeControls() { return gShouldPaintNativeControls; }
#endif
static void setMockScrollbarsEnabled(bool flag);
static bool mockScrollbarsEnabled();
static void setUsesOverlayScrollbars(bool flag);
static bool usesOverlayScrollbars();
#if ENABLE(TOUCH_EVENTS)
void setTouchEventEmulationEnabled(bool enabled) { m_touchEventEmulationEnabled = enabled; }
bool isTouchEventEmulationEnabled() const { return m_touchEventEmulationEnabled; }
#endif
void setStorageBlockingPolicy(SecurityOrigin::StorageBlockingPolicy);
SecurityOrigin::StorageBlockingPolicy storageBlockingPolicy() const { return m_storageBlockingPolicy; }
void setScrollingPerformanceLoggingEnabled(bool);
bool scrollingPerformanceLoggingEnabled() { return m_scrollingPerformanceLoggingEnabled; }
void setAggressiveTileRetentionEnabled(bool);
bool aggressiveTileRetentionEnabled() { return m_aggressiveTileRetentionEnabled; }
static void setShouldRespectPriorityInCSSAttributeSetters(bool);
static bool shouldRespectPriorityInCSSAttributeSetters();
void setTimeWithoutMouseMovementBeforeHidingControls(double time) { m_timeWithoutMouseMovementBeforeHidingControls = time; }
double timeWithoutMouseMovementBeforeHidingControls() const { return m_timeWithoutMouseMovementBeforeHidingControls; }
#if ENABLE(PAGE_VISIBILITY_API)
bool hiddenPageCSSAnimationSuspensionEnabled() const { return m_hiddenPageCSSAnimationSuspensionEnabled; }
void setHiddenPageCSSAnimationSuspensionEnabled(bool);
#endif
static bool lowPowerVideoAudioBufferSizeEnabled() { return gLowPowerVideoAudioBufferSizeEnabled; }
static void setLowPowerVideoAudioBufferSizeEnabled(bool);
#if PLATFORM(IOS)
static void setAudioSessionCategoryOverride(unsigned int);
static unsigned int audioSessionCategoryOverride();
static void setNetworkDataUsageTrackingEnabled(bool);
static bool networkDataUsageTrackingEnabled();
static void setNetworkInterfaceName(const String&);
static const String& networkInterfaceName();
#endif
private:
explicit Settings(Page*);
void initializeDefaultFontFamilies();
#if PLATFORM(IOS)
static String& networkInterfaceNameGlobal();
#endif
Page* m_page;
String m_mediaTypeOverride;
KURL m_userStyleSheetLocation;
RefPtr<FontGenericFamilies> m_fontGenericFamilies;
SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
#if ENABLE(IOS_TEXT_AUTOSIZING)
float m_minimumZoomFontSize;
#endif
#if PLATFORM(IOS)
int m_layoutInterval;
double m_maxParseDuration;
#endif
#if ENABLE(TEXT_AUTOSIZING)
float m_textAutosizingFontScaleFactor;
IntSize m_textAutosizingWindowSizeOverride;
bool m_textAutosizingEnabled : 1;
#endif
SETTINGS_MEMBER_VARIABLES
bool m_isJavaEnabled : 1;
bool m_isJavaEnabledForLocalFiles : 1;
bool m_loadsImagesAutomatically : 1;
bool m_privateBrowsingEnabled : 1;
bool m_areImagesEnabled : 1;
bool m_arePluginsEnabled : 1;
bool m_isScriptEnabled : 1;
bool m_needsAdobeFrameReloadingQuirk : 1;
bool m_usesPageCache : 1;
unsigned m_fontRenderingMode : 1;
bool m_isCSSCustomFilterEnabled : 1;
#if PLATFORM(IOS)
bool m_standalone : 1;
bool m_telephoneNumberParsingEnabled : 1;
bool m_mediaDataLoadsAutomatically : 1;
bool m_shouldTransformsAffectOverflow : 1;
bool m_shouldDispatchJavaScriptWindowOnErrorEvents : 1;
bool m_fontFallbackPrefersPictographs : 1;
bool m_alwaysUseBaselineOfPrimaryFont : 1;
bool m_allowMultiElementImplicitFormSubmission : 1;
bool m_alwaysUseAcceleratedOverflowScroll : 1;
bool m_allowCompositingLayerVisualDegradation : 1;
bool m_mediaPlaybackAllowsAirPlay : 1;
#endif
#if ENABLE(CSS_STICKY_POSITION)
bool m_cssStickyPositionEnabled : 1;
#endif
#if ENABLE(CSS_VARIABLES)
bool m_cssVariablesEnabled : 1;
#endif
bool m_showTiledScrollingIndicator : 1;
bool m_tiledBackingStoreEnabled : 1;
bool m_dnsPrefetchingEnabled : 1;
#if ENABLE(TOUCH_EVENTS)
bool m_touchEventEmulationEnabled : 1;
#endif
bool m_scrollingPerformanceLoggingEnabled : 1;
bool m_aggressiveTileRetentionEnabled : 1;
double m_timeWithoutMouseMovementBeforeHidingControls;
Timer<Settings> m_setImageLoadingSettingsTimer;
void imageLoadingSettingsTimerFired(Timer<Settings>*);
#if ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
bool m_hiddenPageDOMTimerThrottlingEnabled : 1;
#endif
#if ENABLE(PAGE_VISIBILITY_API)
bool m_hiddenPageCSSAnimationSuspensionEnabled : 1;
#endif
static double gDefaultMinDOMTimerInterval;
static double gDefaultDOMTimerAlignmentInterval;
#if USE(AVFOUNDATION)
static bool gAVFoundationEnabled;
#endif
#if PLATFORM(MAC)
static bool gQTKitEnabled;
#endif
static bool gMockScrollbarsEnabled;
static bool gUsesOverlayScrollbars;
#if USE(SAFARI_THEME)
static bool gShouldPaintNativeControls;
#endif
#if PLATFORM(WIN)
static bool gShouldUseHighResolutionTimers;
#endif
static bool gShouldRespectPriorityInCSSAttributeSetters;
#if PLATFORM(IOS)
static bool gNetworkDataUsageTrackingEnabled;
#endif
static double gHiddenPageDOMTimerAlignmentInterval;
static bool gLowPowerVideoAudioBufferSizeEnabled;
};
}
#endif // Settings_h