Title: [175347] trunk/Source/WebCore
Revision
175347
Author
[email protected]
Date
2014-10-29 14:59:48 -0700 (Wed, 29 Oct 2014)

Log Message

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):

Modified Paths

Diff

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;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to