diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-09-13 12:51:20 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-19 20:50:05 +0200 |
commit | d441d6f39bb846989d95bcf5caf387b42414718d (patch) | |
tree | e367e64a75991c554930278175d403c072de6bb8 /Source/WebCore/page/Settings.cpp | |
parent | 0060b2994c07842f4c59de64b5e3e430525c4b90 (diff) | |
download | qtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz |
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit.
Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebCore/page/Settings.cpp')
-rw-r--r-- | Source/WebCore/page/Settings.cpp | 315 |
1 files changed, 139 insertions, 176 deletions
diff --git a/Source/WebCore/page/Settings.cpp b/Source/WebCore/page/Settings.cpp index b274e758f..9bc607fdd 100644 --- a/Source/WebCore/page/Settings.cpp +++ b/Source/WebCore/page/Settings.cpp @@ -32,14 +32,18 @@ #include "DOMTimer.h" #include "Database.h" #include "Document.h" +#include "Font.h" +#include "FontGenericFamilies.h" #include "Frame.h" #include "FrameTree.h" #include "FrameView.h" +#include "HTMLMediaElement.h" #include "HistoryItem.h" +#include "InspectorInstrumentation.h" #include "Page.h" #include "PageCache.h" -#include "ResourceHandle.h" #include "StorageMap.h" +#include "TextAutosizer.h" #include <limits> using namespace std; @@ -54,35 +58,16 @@ static void setImageLoadingSettings(Page* page) } } -// Sets the entry in the font map for the given script. If family is the empty string, removes the entry instead. -static inline void setGenericFontFamilyMap(ScriptFontFamilyMap& fontMap, const AtomicString& family, UScriptCode script, Page* page) +static void invalidateAfterGenericFamilyChange(Page* page) { - ScriptFontFamilyMap::iterator it = fontMap.find(static_cast<int>(script)); - if (family.isEmpty()) { - if (it == fontMap.end()) - return; - fontMap.remove(it); - } else if (it != fontMap.end() && it->value == family) - return; - else - fontMap.set(static_cast<int>(script), family); - + invalidateFontGlyphsCache(); if (page) page->setNeedsRecalcStyleInAllFrames(); } -static inline const AtomicString& getGenericFontFamilyForScript(const ScriptFontFamilyMap& fontMap, UScriptCode script) -{ - ScriptFontFamilyMap::const_iterator it = fontMap.find(static_cast<int>(script)); - if (it != fontMap.end()) - return it->value; - if (script != USCRIPT_COMMON) - return getGenericFontFamilyForScript(fontMap, USCRIPT_COMMON); - return emptyAtom; -} - double Settings::gDefaultMinDOMTimerInterval = 0.010; // 10 milliseconds double Settings::gDefaultDOMTimerAlignmentInterval = 0; +double Settings::gHiddenPageDOMTimerAlignmentInterval = 1.0; #if USE(SAFARI_THEME) bool Settings::gShouldPaintNativeControls = true; @@ -92,22 +77,25 @@ bool Settings::gShouldPaintNativeControls = true; bool Settings::gAVFoundationEnabled = false; #endif +#if PLATFORM(MAC) +bool Settings::gQTKitEnabled = true; +#endif + bool Settings::gMockScrollbarsEnabled = false; bool Settings::gUsesOverlayScrollbars = false; -#if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX)) +#if PLATFORM(WIN) bool Settings::gShouldUseHighResolutionTimers = true; #endif -#if USE(JSC) bool Settings::gShouldRespectPriorityInCSSAttributeSetters = false; -#endif +bool Settings::gLowPowerVideoAudioBufferSizeEnabled = false; // NOTEs -// 1) EditingMacBehavior comprises Tiger, Leopard, SnowLeopard and iOS builds, as well QtWebKit and Chromium when built on Mac; +// 1) EditingMacBehavior comprises Tiger, Leopard, SnowLeopard and iOS builds, as well as QtWebKit when built on Mac; // 2) EditingWindowsBehavior comprises Win32 and WinCE builds, as well as QtWebKit and Chromium when built on Windows; // 3) EditingUnixBehavior comprises all unix-based systems, but Darwin/MacOS (and then abusing the terminology); -// 99) MacEditingBehavior is used a fallback. +// 99) MacEditingBehavior is used as a fallback. static EditingBehaviorType editingBehaviorTypeForPlatform() { return @@ -125,15 +113,18 @@ static EditingBehaviorType editingBehaviorTypeForPlatform() } static const double defaultIncrementalRenderingSuppressionTimeoutInSeconds = 5; +#if USE(UNIFIED_TEXT_CHECKING) +static const bool defaultUnifiedTextCheckerEnabled = true; +#else +static const bool defaultUnifiedTextCheckerEnabled = false; +#endif +static const bool defaultSmartInsertDeleteEnabled = true; +static const bool defaultSelectTrailingWhitespaceEnabled = false; Settings::Settings(Page* page) : m_page(0) , m_mediaTypeOverride("screen") - , m_minimumFontSize(0) - , m_minimumLogicalFontSize(0) - , m_defaultFontSize(0) - , m_defaultFixedFontSize(0) - , m_screenFontSubstitutionEnabled(true) + , m_fontGenericFamilies(FontGenericFamilies::create()) , m_storageBlockingPolicy(SecurityOrigin::AllowAllStorage) #if ENABLE(TEXT_AUTOSIZING) , m_textAutosizingFontScaleFactor(1) @@ -150,16 +141,11 @@ Settings::Settings(Page* page) , m_loadsImagesAutomatically(false) , m_privateBrowsingEnabled(false) , m_areImagesEnabled(true) - , m_isMediaEnabled(true) , m_arePluginsEnabled(false) , m_isScriptEnabled(false) - , m_textAreasAreResizable(false) , m_needsAdobeFrameReloadingQuirk(false) - , m_isDOMPasteAllowed(false) , m_usesPageCache(false) - , m_authorAndUserStylesEnabled(true) , m_fontRenderingMode(0) - , m_inApplicationChromeMode(false) , m_isCSSCustomFilterEnabled(false) #if ENABLE(CSS_STICKY_POSITION) , m_cssStickyPositionEnabled(true) @@ -167,24 +153,22 @@ Settings::Settings(Page* page) #if ENABLE(CSS_VARIABLES) , m_cssVariablesEnabled(false) #endif - , m_acceleratedCompositingEnabled(true) - , m_showDebugBorders(false) - , m_showRepaintCounter(false) + , m_showTiledScrollingIndicator(false) , m_tiledBackingStoreEnabled(false) , m_dnsPrefetchingEnabled(false) -#if USE(UNIFIED_TEXT_CHECKING) - , m_unifiedTextCheckerEnabled(true) -#else - , m_unifiedTextCheckerEnabled(false) -#endif -#if ENABLE(SMOOTH_SCROLLING) - , m_scrollAnimatorEnabled(true) -#endif #if ENABLE(TOUCH_EVENTS) , m_touchEventEmulationEnabled(false) #endif , m_scrollingPerformanceLoggingEnabled(false) + , m_aggressiveTileRetentionEnabled(false) + , m_timeWithoutMouseMovementBeforeHidingControls(3) , m_setImageLoadingSettingsTimer(this, &Settings::imageLoadingSettingsTimerFired) +#if ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING) + , m_hiddenPageDOMTimerThrottlingEnabled(false) +#endif +#if ENABLE(PAGE_VISIBILITY_API) + , m_hiddenPageCSSAnimationSuspensionEnabled(false) +#endif { // A Frame may not have been created yet, so we initialize the AtomicString // hash before trying to use it. @@ -193,10 +177,26 @@ Settings::Settings(Page* page) m_page = page; // Page is not yet fully initialized wen constructing Settings, so keeping m_page null over initializeDefaultFontFamilies() call. } +Settings::~Settings() +{ +} + PassOwnPtr<Settings> Settings::create(Page* page) { return adoptPtr(new Settings(page)); -} +} + +SETTINGS_SETTER_BODIES + +void Settings::setHiddenPageDOMTimerAlignmentInterval(double hiddenPageDOMTimerAlignmentinterval) +{ + gHiddenPageDOMTimerAlignmentInterval = hiddenPageDOMTimerAlignmentinterval; +} + +double Settings::hiddenPageDOMTimerAlignmentInterval() +{ + return gHiddenPageDOMTimerAlignmentInterval; +} #if !PLATFORM(MAC) && !PLATFORM(BLACKBERRY) void Settings::initializeDefaultFontFamilies() @@ -207,117 +207,86 @@ void Settings::initializeDefaultFontFamilies() const AtomicString& Settings::standardFontFamily(UScriptCode script) const { - return getGenericFontFamilyForScript(m_standardFontFamilyMap, script); + return m_fontGenericFamilies->standardFontFamily(script); } void Settings::setStandardFontFamily(const AtomicString& family, UScriptCode script) { - setGenericFontFamilyMap(m_standardFontFamilyMap, family, script, m_page); + bool changes = m_fontGenericFamilies->setStandardFontFamily(family, script); + if (changes) + invalidateAfterGenericFamilyChange(m_page); } const AtomicString& Settings::fixedFontFamily(UScriptCode script) const { - return getGenericFontFamilyForScript(m_fixedFontFamilyMap, script); + return m_fontGenericFamilies->fixedFontFamily(script); } void Settings::setFixedFontFamily(const AtomicString& family, UScriptCode script) { - setGenericFontFamilyMap(m_fixedFontFamilyMap, family, script, m_page); + bool changes = m_fontGenericFamilies->setFixedFontFamily(family, script); + if (changes) + invalidateAfterGenericFamilyChange(m_page); } const AtomicString& Settings::serifFontFamily(UScriptCode script) const { - return getGenericFontFamilyForScript(m_serifFontFamilyMap, script); + return m_fontGenericFamilies->serifFontFamily(script); } void Settings::setSerifFontFamily(const AtomicString& family, UScriptCode script) { - setGenericFontFamilyMap(m_serifFontFamilyMap, family, script, m_page); + bool changes = m_fontGenericFamilies->setSerifFontFamily(family, script); + if (changes) + invalidateAfterGenericFamilyChange(m_page); } const AtomicString& Settings::sansSerifFontFamily(UScriptCode script) const { - return getGenericFontFamilyForScript(m_sansSerifFontFamilyMap, script); + return m_fontGenericFamilies->sansSerifFontFamily(script); } void Settings::setSansSerifFontFamily(const AtomicString& family, UScriptCode script) { - setGenericFontFamilyMap(m_sansSerifFontFamilyMap, family, script, m_page); + bool changes = m_fontGenericFamilies->setSansSerifFontFamily(family, script); + if (changes) + invalidateAfterGenericFamilyChange(m_page); } const AtomicString& Settings::cursiveFontFamily(UScriptCode script) const { - return getGenericFontFamilyForScript(m_cursiveFontFamilyMap, script); + return m_fontGenericFamilies->cursiveFontFamily(script); } void Settings::setCursiveFontFamily(const AtomicString& family, UScriptCode script) { - setGenericFontFamilyMap(m_cursiveFontFamilyMap, family, script, m_page); + bool changes = m_fontGenericFamilies->setCursiveFontFamily(family, script); + if (changes) + invalidateAfterGenericFamilyChange(m_page); } const AtomicString& Settings::fantasyFontFamily(UScriptCode script) const { - return getGenericFontFamilyForScript(m_fantasyFontFamilyMap, script); + return m_fontGenericFamilies->fantasyFontFamily(script); } void Settings::setFantasyFontFamily(const AtomicString& family, UScriptCode script) { - setGenericFontFamilyMap(m_fantasyFontFamilyMap, family, script, m_page); + bool changes = m_fontGenericFamilies->setFantasyFontFamily(family, script); + if (changes) + invalidateAfterGenericFamilyChange(m_page); } const AtomicString& Settings::pictographFontFamily(UScriptCode script) const { - return getGenericFontFamilyForScript(m_pictographFontFamilyMap, script); + return m_fontGenericFamilies->pictographFontFamily(script); } void Settings::setPictographFontFamily(const AtomicString& family, UScriptCode script) { - setGenericFontFamilyMap(m_pictographFontFamilyMap, family, script, m_page); -} - -void Settings::setMinimumFontSize(int minimumFontSize) -{ - if (m_minimumFontSize == minimumFontSize) - return; - - m_minimumFontSize = minimumFontSize; - m_page->setNeedsRecalcStyleInAllFrames(); -} - -void Settings::setMinimumLogicalFontSize(int minimumLogicalFontSize) -{ - if (m_minimumLogicalFontSize == minimumLogicalFontSize) - return; - - m_minimumLogicalFontSize = minimumLogicalFontSize; - m_page->setNeedsRecalcStyleInAllFrames(); -} - -void Settings::setDefaultFontSize(int defaultFontSize) -{ - if (m_defaultFontSize == defaultFontSize) - return; - - m_defaultFontSize = defaultFontSize; - m_page->setNeedsRecalcStyleInAllFrames(); -} - -void Settings::setDefaultFixedFontSize(int defaultFontSize) -{ - if (m_defaultFixedFontSize == defaultFontSize) - return; - - m_defaultFixedFontSize = defaultFontSize; - m_page->setNeedsRecalcStyleInAllFrames(); -} - -void Settings::setScreenFontSubstitutionEnabled(bool screenFontSubstitutionEnabled) -{ - if (m_screenFontSubstitutionEnabled == screenFontSubstitutionEnabled) - return; - - m_screenFontSubstitutionEnabled = screenFontSubstitutionEnabled; - m_page->setNeedsRecalcStyleInAllFrames(); + bool changes = m_fontGenericFamilies->setPictographFontFamily(family, script); + if (changes) + invalidateAfterGenericFamilyChange(m_page); } #if ENABLE(TEXT_AUTOSIZING) @@ -342,20 +311,16 @@ void Settings::setTextAutosizingWindowSizeOverride(const IntSize& textAutosizing void Settings::setTextAutosizingFontScaleFactor(float fontScaleFactor) { m_textAutosizingFontScaleFactor = fontScaleFactor; - m_page->setNeedsRecalcStyleInAllFrames(); -} -#endif - -void Settings::setResolutionOverride(const IntSize& densityPerInchOverride) -{ - if (m_resolutionDensityPerInchOverride == densityPerInchOverride) - return; + // FIXME: I wonder if this needs to traverse frames like in WebViewImpl::resize, or whether there is only one document per Settings instance? + for (Frame* frame = m_page->mainFrame(); frame; frame = frame->tree()->traverseNext()) + frame->document()->textAutosizer()->recalculateMultipliers(); - m_resolutionDensityPerInchOverride = densityPerInchOverride; m_page->setNeedsRecalcStyleInAllFrames(); } +#endif + void Settings::setMediaTypeOverride(const String& mediaTypeOverride) { if (m_mediaTypeOverride == mediaTypeOverride) @@ -394,6 +359,7 @@ void Settings::imageLoadingSettingsTimerFired(Timer<Settings>*) void Settings::setScriptEnabled(bool isScriptEnabled) { m_isScriptEnabled = isScriptEnabled; + InspectorInstrumentation::scriptsEnabled(m_page, m_isScriptEnabled); } void Settings::setJavaEnabled(bool isJavaEnabled) @@ -414,11 +380,6 @@ void Settings::setImagesEnabled(bool areImagesEnabled) m_setImageLoadingSettingsTimer.startOneShot(0); } -void Settings::setMediaEnabled(bool isMediaEnabled) -{ - m_isMediaEnabled = isMediaEnabled; -} - void Settings::setPluginsEnabled(bool arePluginsEnabled) { m_arePluginsEnabled = arePluginsEnabled; @@ -443,15 +404,6 @@ void Settings::setUserStyleSheetLocation(const KURL& userStyleSheetLocation) m_page->userStyleSheetLocationChanged(); } -void Settings::setTextAreasAreResizable(bool textAreasAreResizable) -{ - if (m_textAreasAreResizable == textAreasAreResizable) - return; - - m_textAreasAreResizable = textAreasAreResizable; - m_page->setNeedsRecalcStyleInAllFrames(); -} - // FIXME: This quirk is needed because of Radar 4674537 and 5211271. We need to phase it out once Adobe // can fix the bug from their end. void Settings::setNeedsAdobeFrameReloadingQuirk(bool shouldNotReloadIFramesForUnchangedSRC) @@ -459,11 +411,6 @@ void Settings::setNeedsAdobeFrameReloadingQuirk(bool shouldNotReloadIFramesForUn m_needsAdobeFrameReloadingQuirk = shouldNotReloadIFramesForUnchangedSRC; } -void Settings::setDOMPasteAllowed(bool DOMPasteAllowed) -{ - m_isDOMPasteAllowed = DOMPasteAllowed; -} - void Settings::setDefaultMinDOMTimerInterval(double interval) { gDefaultMinDOMTimerInterval = interval; @@ -515,19 +462,9 @@ void Settings::setUsesPageCache(bool usesPageCache) int last = m_page->backForward()->forwardCount(); for (int i = first; i <= last; i++) pageCache()->remove(m_page->backForward()->itemAtIndex(i)); - pageCache()->releaseAutoreleasedPagesNow(); } } -void Settings::setAuthorAndUserStylesEnabled(bool authorAndUserStylesEnabled) -{ - if (m_authorAndUserStylesEnabled == authorAndUserStylesEnabled) - return; - - m_authorAndUserStylesEnabled = authorAndUserStylesEnabled; - m_page->setNeedsRecalcStyleInAllFrames(); -} - void Settings::setFontRenderingMode(FontRenderingMode mode) { if (fontRenderingMode() == mode) @@ -541,11 +478,6 @@ FontRenderingMode Settings::fontRenderingMode() const return static_cast<FontRenderingMode>(m_fontRenderingMode); } -void Settings::setApplicationChromeMode(bool mode) -{ - m_inApplicationChromeMode = mode; -} - #if USE(SAFARI_THEME) void Settings::setShouldPaintNativeControls(bool shouldPaintNativeControls) { @@ -562,34 +494,15 @@ void Settings::setDNSPrefetchingEnabled(bool dnsPrefetchingEnabled) m_page->dnsPrefetchingStateChanged(); } -void Settings::setAcceleratedCompositingEnabled(bool enabled) -{ - if (m_acceleratedCompositingEnabled == enabled) - return; - - m_acceleratedCompositingEnabled = enabled; - m_page->setNeedsRecalcStyleInAllFrames(); -} - -void Settings::setShowDebugBorders(bool enabled) -{ - if (m_showDebugBorders == enabled) - return; - - m_showDebugBorders = enabled; - m_page->setNeedsRecalcStyleInAllFrames(); -} - -void Settings::setShowRepaintCounter(bool enabled) +void Settings::setShowTiledScrollingIndicator(bool enabled) { - if (m_showRepaintCounter == enabled) + if (m_showTiledScrollingIndicator == enabled) return; - m_showRepaintCounter = enabled; - m_page->setNeedsRecalcStyleInAllFrames(); + m_showTiledScrollingIndicator = enabled; } -#if PLATFORM(WIN) || (OS(WINDOWS) && PLATFORM(WX)) +#if PLATFORM(WIN) void Settings::setShouldUseHighResolutionTimers(bool shouldUseHighResolutionTimers) { gShouldUseHighResolutionTimers = shouldUseHighResolutionTimers; @@ -614,6 +527,28 @@ void Settings::setTiledBackingStoreEnabled(bool enabled) #endif } +#if USE(AVFOUNDATION) +void Settings::setAVFoundationEnabled(bool enabled) +{ + if (gAVFoundationEnabled == enabled) + return; + + gAVFoundationEnabled = enabled; + HTMLMediaElement::resetMediaEngines(); +} +#endif + +#if PLATFORM(MAC) +void Settings::setQTKitEnabled(bool enabled) +{ + if (gQTKitEnabled == enabled) + return; + + gQTKitEnabled = enabled; + HTMLMediaElement::resetMediaEngines(); +} +#endif + void Settings::setScrollingPerformanceLoggingEnabled(bool enabled) { m_scrollingPerformanceLoggingEnabled = enabled; @@ -621,6 +556,11 @@ void Settings::setScrollingPerformanceLoggingEnabled(bool enabled) if (m_page->mainFrame() && m_page->mainFrame()->view()) m_page->mainFrame()->view()->setScrollingPerformanceLoggingEnabled(enabled); } + +void Settings::setAggressiveTileRetentionEnabled(bool enabled) +{ + m_aggressiveTileRetentionEnabled = enabled; +} void Settings::setMockScrollbarsEnabled(bool flag) { @@ -642,7 +582,6 @@ bool Settings::usesOverlayScrollbars() return gUsesOverlayScrollbars; } -#if USE(JSC) void Settings::setShouldRespectPriorityInCSSAttributeSetters(bool flag) { gShouldRespectPriorityInCSSAttributeSetters = flag; @@ -652,6 +591,30 @@ bool Settings::shouldRespectPriorityInCSSAttributeSetters() { return gShouldRespectPriorityInCSSAttributeSetters; } + +#if ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING) +void Settings::setHiddenPageDOMTimerThrottlingEnabled(bool flag) +{ + if (m_hiddenPageDOMTimerThrottlingEnabled == flag) + return; + m_hiddenPageDOMTimerThrottlingEnabled = flag; + m_page->hiddenPageDOMTimerThrottlingStateChanged(); +} #endif +#if ENABLE(PAGE_VISIBILITY_API) +void Settings::setHiddenPageCSSAnimationSuspensionEnabled(bool flag) +{ + if (m_hiddenPageCSSAnimationSuspensionEnabled == flag) + return; + m_hiddenPageCSSAnimationSuspensionEnabled = flag; + m_page->hiddenPageCSSAnimationSuspensionStateChanged(); +} +#endif + +void Settings::setLowPowerVideoAudioBufferSizeEnabled(bool flag) +{ + gLowPowerVideoAudioBufferSizeEnabled = flag; +} + } // namespace WebCore |