Modified: trunk/Source/WebCore/ChangeLog (175346 => 175347)
--- trunk/Source/WebCore/ChangeLog 2014-10-29 21:32:06 UTC (rev 175346)
+++ trunk/Source/WebCore/ChangeLog 2014-10-29 21:59:48 UTC (rev 175347)
@@ -1,3 +1,40 @@
+2014-10-29 Alexey Proskuryakov <[email protected]>
+
+ Notify Settings object when its Page object goes away.
+ https://bugs.webkit.org/show_bug.cgi?id=138183
+ rdar://problem/18786900
+
+ Reviewed by Andreas Kling.
+
+ I could not make a test for this issue.
+
+ * page/Page.cpp:
+ (WebCore::Page::~Page):
+ * page/Settings.cpp:
+ (WebCore::setImageLoadingSettings):
+ (WebCore::Settings::Settings):
+ (WebCore::Settings::setTextAutosizingEnabled):
+ (WebCore::Settings::setTextAutosizingWindowSizeOverride):
+ (WebCore::Settings::setTextAutosizingFontScaleFactor):
+ (WebCore::Settings::setMediaTypeOverride):
+ (WebCore::Settings::setScriptEnabled):
+ (WebCore::Settings::setUserStyleSheetLocation):
+ (WebCore::Settings::setMinDOMTimerInterval):
+ (WebCore::Settings::minDOMTimerInterval):
+ (WebCore::Settings::domTimerAlignmentInterval):
+ (WebCore::Settings::setUsesPageCache):
+ (WebCore::Settings::setScreenFontSubstitutionEnabled):
+ (WebCore::Settings::setFontRenderingMode):
+ (WebCore::Settings::setDNSPrefetchingEnabled):
+ (WebCore::Settings::setStorageBlockingPolicy):
+ (WebCore::Settings::setBackgroundShouldExtendBeyondPage):
+ (WebCore::Settings::setScrollingPerformanceLoggingEnabled):
+ (WebCore::Settings::setHiddenPageDOMTimerThrottlingEnabled):
+ (WebCore::Settings::setHiddenPageCSSAnimationSuspensionEnabled):
+ (WebCore::Settings::setFontFallbackPrefersPictographs):
+ * page/Settings.h:
+ (WebCore::Settings::pageDestroyed):
+
2014-10-29 Zalan Bujtas <[email protected]>
Remove invalid float from RootInlineBox.
Modified: trunk/Source/WebCore/page/Page.cpp (175346 => 175347)
--- trunk/Source/WebCore/page/Page.cpp 2014-10-29 21:32:06 UTC (rev 175346)
+++ trunk/Source/WebCore/page/Page.cpp 2014-10-29 21:59:48 UTC (rev 175347)
@@ -240,6 +240,8 @@
setGroupName(String());
allPages->remove(this);
+ m_settings->pageDestroyed();
+
for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
frame->willDetachPage();
frame->detachFromPage();
Modified: trunk/Source/WebCore/page/Settings.cpp (175346 => 175347)
--- trunk/Source/WebCore/page/Settings.cpp 2014-10-29 21:32:06 UTC (rev 175346)
+++ trunk/Source/WebCore/page/Settings.cpp 2014-10-29 21:59:48 UTC (rev 175347)
@@ -53,6 +53,9 @@
static void setImageLoadingSettings(Page* page)
{
+ if (!page)
+ return;
+
for (Frame* frame = &page->mainFrame(); frame; frame = frame->tree().traverseNext()) {
frame->document()->cachedResourceLoader()->setImagesEnabled(page->settings().areImagesEnabled());
frame->document()->cachedResourceLoader()->setAutoLoadImages(page->settings().loadsImagesAutomatically());
@@ -201,7 +204,7 @@
// hash before trying to use it.
AtomicString::init();
initializeDefaultFontFamilies();
- m_page = page; // Page is not yet fully initialized wen constructing Settings, so keeping m_page null over initializeDefaultFontFamilies() call.
+ m_page = page; // Page is not yet fully initialized when constructing Settings, so keeping m_page null over initializeDefaultFontFamilies() call.
}
Settings::~Settings()
@@ -330,7 +333,8 @@
return;
m_textAutosizingEnabled = textAutosizingEnabled;
- m_page->setNeedsRecalcStyleInAllFrames();
+ if (m_page)
+ m_page->setNeedsRecalcStyleInAllFrames();
}
void Settings::setTextAutosizingWindowSizeOverride(const IntSize& textAutosizingWindowSizeOverride)
@@ -339,13 +343,17 @@
return;
m_textAutosizingWindowSizeOverride = textAutosizingWindowSizeOverride;
- m_page->setNeedsRecalcStyleInAllFrames();
+ if (m_page)
+ m_page->setNeedsRecalcStyleInAllFrames();
}
void Settings::setTextAutosizingFontScaleFactor(float fontScaleFactor)
{
m_textAutosizingFontScaleFactor = fontScaleFactor;
+ if (!m_page)
+ 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();
@@ -362,6 +370,9 @@
m_mediaTypeOverride = mediaTypeOverride;
+ if (!m_page)
+ return;
+
FrameView* view = m_page->mainFrame().view();
ASSERT(view);
@@ -394,6 +405,10 @@
return;
m_isScriptEnabled = isScriptEnabled;
+
+ if (!m_page)
+ return;
+
#if PLATFORM(IOS)
m_page->setNeedsRecalcStyleInAllFrames();
#endif
@@ -434,7 +449,8 @@
m_userStyleSheetLocation = userStyleSheetLocation;
- m_page->userStyleSheetLocationChanged();
+ if (m_page)
+ m_page->userStyleSheetLocationChanged();
}
// FIXME: This quirk is needed because of Radar 4674537 and 5211271. We need to phase it out once Adobe
@@ -456,11 +472,14 @@
void Settings::setMinDOMTimerInterval(double interval)
{
- m_page->setMinimumTimerInterval(interval);
+ if (m_page)
+ m_page->setMinimumTimerInterval(interval);
}
double Settings::minDOMTimerInterval()
{
+ if (!m_page)
+ return 0;
return m_page->minimumTimerInterval();
}
@@ -476,6 +495,8 @@
double Settings::domTimerAlignmentInterval() const
{
+ if (!m_page)
+ return 0;
return m_page->timerAlignmentInterval();
}
@@ -492,6 +513,10 @@
return;
m_usesPageCache = usesPageCache;
+
+ if (!m_page)
+ return;
+
if (!m_usesPageCache) {
int first = -m_page->backForward().backCount();
int last = m_page->backForward().forwardCount();
@@ -505,7 +530,9 @@
if (m_screenFontSubstitutionEnabled == enabled)
return;
m_screenFontSubstitutionEnabled = enabled;
- m_page->setNeedsRecalcStyleInAllFrames();
+
+ if (m_page)
+ m_page->setNeedsRecalcStyleInAllFrames();
}
void Settings::setFontRenderingMode(FontRenderingMode mode)
@@ -513,7 +540,8 @@
if (fontRenderingMode() == mode)
return;
m_fontRenderingMode = mode;
- m_page->setNeedsRecalcStyleInAllFrames();
+ if (m_page)
+ m_page->setNeedsRecalcStyleInAllFrames();
}
FontRenderingMode Settings::fontRenderingMode() const
@@ -534,7 +562,8 @@
return;
m_dnsPrefetchingEnabled = dnsPrefetchingEnabled;
- m_page->dnsPrefetchingStateChanged();
+ if (m_page)
+ m_page->dnsPrefetchingStateChanged();
}
void Settings::setShowTiledScrollingIndicator(bool enabled)
@@ -558,7 +587,8 @@
return;
m_storageBlockingPolicy = enabled;
- m_page->storageBlockingStateChanged();
+ if (m_page)
+ m_page->storageBlockingStateChanged();
}
void Settings::setBackgroundShouldExtendBeyondPage(bool shouldExtend)
@@ -568,7 +598,8 @@
m_backgroundShouldExtendBeyondPage = shouldExtend;
- m_page->mainFrame().view()->updateExtendBackgroundIfNecessary();
+ if (m_page)
+ m_page->mainFrame().view()->updateExtendBackgroundIfNecessary();
}
#if USE(AVFOUNDATION)
@@ -597,7 +628,7 @@
{
m_scrollingPerformanceLoggingEnabled = enabled;
- if (m_page->mainFrame().view())
+ if (m_page && m_page->mainFrame().view())
m_page->mainFrame().view()->setScrollingPerformanceLoggingEnabled(enabled);
}
@@ -639,7 +670,8 @@
if (m_hiddenPageDOMTimerThrottlingEnabled == flag)
return;
m_hiddenPageDOMTimerThrottlingEnabled = flag;
- m_page->hiddenPageDOMTimerThrottlingStateChanged();
+ if (m_page)
+ m_page->hiddenPageDOMTimerThrottlingStateChanged();
}
#endif
@@ -648,7 +680,8 @@
if (m_hiddenPageCSSAnimationSuspensionEnabled == flag)
return;
m_hiddenPageCSSAnimationSuspensionEnabled = flag;
- m_page->hiddenPageCSSAnimationSuspensionStateChanged();
+ if (m_page)
+ m_page->hiddenPageCSSAnimationSuspensionStateChanged();
}
void Settings::setFontFallbackPrefersPictographs(bool preferPictographs)
@@ -657,7 +690,8 @@
return;
m_fontFallbackPrefersPictographs = preferPictographs;
- m_page->setNeedsRecalcStyleInAllFrames();
+ if (m_page)
+ m_page->setNeedsRecalcStyleInAllFrames();
}
void Settings::setLowPowerVideoAudioBufferSizeEnabled(bool flag)
Modified: trunk/Source/WebCore/page/Settings.h (175346 => 175347)
--- trunk/Source/WebCore/page/Settings.h 2014-10-29 21:32:06 UTC (rev 175346)
+++ trunk/Source/WebCore/page/Settings.h 2014-10-29 21:59:48 UTC (rev 175347)
@@ -66,6 +66,8 @@
static PassRefPtr<Settings> create(Page*);
~Settings();
+ void pageDestroyed() { m_page = nullptr; }
+
WEBCORE_EXPORT void setStandardFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
WEBCORE_EXPORT const AtomicString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;