summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/Settings.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-09-13 12:51:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-19 20:50:05 +0200
commitd441d6f39bb846989d95bcf5caf387b42414718d (patch)
treee367e64a75991c554930278175d403c072de6bb8 /Source/WebCore/page/Settings.cpp
parent0060b2994c07842f4c59de64b5e3e430525c4b90 (diff)
downloadqtwebkit-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.cpp315
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