Title: [257455] releases/WebKitGTK/webkit-2.28/Source/WebCore
- Revision
- 257455
- Author
- [email protected]
- Date
- 2020-02-26 02:58:08 -0800 (Wed, 26 Feb 2020)
Log Message
Merge r257235 - Document / DOMWindow objects get leaked on CNN.com due to CSSTransitions
https://bugs.webkit.org/show_bug.cgi?id=208145
Reviewed by Antoine Quint.
Break reference cycles using WeakPtr so that CSSTransitions can no longer cause whole document / DOM trees to
get leaked.
* animation/DocumentTimeline.cpp:
(WebCore::DocumentTimeline::DocumentTimeline):
* animation/DocumentTimeline.h:
* animation/KeyframeEffect.cpp:
(WebCore::KeyframeEffect::KeyframeEffect):
(WebCore::KeyframeEffect::setTarget):
* animation/KeyframeEffect.h:
Modified Paths
Diff
Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog (257454 => 257455)
--- releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog 2020-02-26 10:58:03 UTC (rev 257454)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/ChangeLog 2020-02-26 10:58:08 UTC (rev 257455)
@@ -1,3 +1,21 @@
+2020-02-24 Chris Dumez <[email protected]>
+
+ Document / DOMWindow objects get leaked on CNN.com due to CSSTransitions
+ https://bugs.webkit.org/show_bug.cgi?id=208145
+
+ Reviewed by Antoine Quint.
+
+ Break reference cycles using WeakPtr so that CSSTransitions can no longer cause whole document / DOM trees to
+ get leaked.
+
+ * animation/DocumentTimeline.cpp:
+ (WebCore::DocumentTimeline::DocumentTimeline):
+ * animation/DocumentTimeline.h:
+ * animation/KeyframeEffect.cpp:
+ (WebCore::KeyframeEffect::KeyframeEffect):
+ (WebCore::KeyframeEffect::setTarget):
+ * animation/KeyframeEffect.h:
+
2020-02-24 Antoine Quint <[email protected]>
RenderLayerBacking::notifyAnimationStarted calls directly into the old animation controller
Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/DocumentTimeline.cpp (257454 => 257455)
--- releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/DocumentTimeline.cpp 2020-02-26 10:58:03 UTC (rev 257454)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/DocumentTimeline.cpp 2020-02-26 10:58:08 UTC (rev 257455)
@@ -64,15 +64,13 @@
DocumentTimeline::DocumentTimeline(Document& document, Seconds originTime)
: AnimationTimeline()
, m_tickScheduleTimer(*this, &DocumentTimeline::scheduleAnimationResolution)
- , m_document(&document)
+ , m_document(makeWeakPtr(document))
, m_originTime(originTime)
{
- if (m_document) {
- m_document->addTimeline(*this);
- if (auto* page = m_document->page()) {
- if (page->settings().hiddenPageCSSAnimationSuspensionEnabled() && !page->isVisible())
- suspendAnimations();
- }
+ document.addTimeline(*this);
+ if (auto* page = document.page()) {
+ if (page->settings().hiddenPageCSSAnimationSuspensionEnabled() && !page->isVisible())
+ suspendAnimations();
}
}
Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/DocumentTimeline.h (257454 => 257455)
--- releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/DocumentTimeline.h 2020-02-26 10:58:03 UTC (rev 257454)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/DocumentTimeline.h 2020-02-26 10:58:08 UTC (rev 257455)
@@ -107,7 +107,7 @@
HashSet<RefPtr<WebAnimation>> m_acceleratedAnimationsPendingRunningStateChange;
HashSet<Element*> m_elementsWithRunningAcceleratedAnimations;
Vector<Ref<AnimationEventBase>> m_pendingAnimationEvents;
- RefPtr<Document> m_document;
+ WeakPtr<Document> m_document;
Markable<Seconds, Seconds::MarkableTraits> m_cachedCurrentTime;
Seconds m_originTime;
unsigned m_numberOfAnimationTimelineInvalidationsForTesting { 0 };
Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/KeyframeEffect.cpp (257454 => 257455)
--- releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/KeyframeEffect.cpp 2020-02-26 10:58:03 UTC (rev 257454)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/KeyframeEffect.cpp 2020-02-26 10:58:08 UTC (rev 257455)
@@ -521,7 +521,7 @@
}
KeyframeEffect::KeyframeEffect(Element* target)
- : m_target(target)
+ : m_target(makeWeakPtr(target))
{
}
@@ -1065,10 +1065,10 @@
void KeyframeEffect::setTarget(RefPtr<Element>&& newTarget)
{
- if (m_target == newTarget)
+ if (m_target.get() == newTarget.get())
return;
- auto previousTarget = std::exchange(m_target, WTFMove(newTarget));
+ auto previousTarget = std::exchange(m_target, makeWeakPtr(newTarget.get()));
if (auto* effectAnimation = animation())
effectAnimation->effectTargetDidChange(previousTarget.get(), m_target.get());
Modified: releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/KeyframeEffect.h (257454 => 257455)
--- releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/KeyframeEffect.h 2020-02-26 10:58:03 UTC (rev 257454)
+++ releases/WebKitGTK/webkit-2.28/Source/WebCore/animation/KeyframeEffect.h 2020-02-26 10:58:08 UTC (rev 257455)
@@ -191,7 +191,7 @@
KeyframeList m_blendingKeyframes { emptyString() };
Vector<ParsedKeyframe> m_parsedKeyframes;
Vector<AcceleratedAction> m_pendingAcceleratedActions;
- RefPtr<Element> m_target;
+ WeakPtr<Element> m_target;
std::unique_ptr<const RenderStyle> m_unanimatedStyle;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes