Title: [257655] trunk/Source/WebCore
Revision
257655
Author
[email protected]
Date
2020-02-28 13:23:53 -0800 (Fri, 28 Feb 2020)

Log Message

MediaResourceLoader leaks resource responses
https://bugs.webkit.org/show_bug.cgi?id=208267

Reviewed by Eric Carlson.

MediaResourceLoader leaks resource responses when browsing in Safari, even though these responses are
only used for testing. AVAssetCustomURLBridgeForNSURLSession holds on to the WebCoreNSURLSession, which
keeps the MediaResourceLoader alive, even if there is no media on the current page. In turn, the
MediaResourceLoader always keeps in memory the last 5 HTTP responses.

To address the issue, we now only record these responses when running the tests.

* loader/MediaResourceLoader.cpp:
(WebCore::MediaResourceLoader::recordResponsesForTesting):
(WebCore::MediaResourceLoader::addResponseForTesting):
* loader/MediaResourceLoader.h:
* testing/Internals.cpp:
(WebCore::Internals::resetToConsistentState):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (257654 => 257655)


--- trunk/Source/WebCore/ChangeLog	2020-02-28 21:07:27 UTC (rev 257654)
+++ trunk/Source/WebCore/ChangeLog	2020-02-28 21:23:53 UTC (rev 257655)
@@ -1,3 +1,24 @@
+2020-02-28  Chris Dumez  <[email protected]>
+
+        MediaResourceLoader leaks resource responses
+        https://bugs.webkit.org/show_bug.cgi?id=208267
+
+        Reviewed by Eric Carlson.
+
+        MediaResourceLoader leaks resource responses when browsing in Safari, even though these responses are
+        only used for testing. AVAssetCustomURLBridgeForNSURLSession holds on to the WebCoreNSURLSession, which
+        keeps the MediaResourceLoader alive, even if there is no media on the current page. In turn, the
+        MediaResourceLoader always keeps in memory the last 5 HTTP responses.
+
+        To address the issue, we now only record these responses when running the tests.
+
+        * loader/MediaResourceLoader.cpp:
+        (WebCore::MediaResourceLoader::recordResponsesForTesting):
+        (WebCore::MediaResourceLoader::addResponseForTesting):
+        * loader/MediaResourceLoader.h:
+        * testing/Internals.cpp:
+        (WebCore::Internals::resetToConsistentState):
+
 2020-02-28  Keith Rollin  <[email protected]>
 
         Convert frame address in logging statements to pageID+frameID

Modified: trunk/Source/WebCore/loader/MediaResourceLoader.cpp (257654 => 257655)


--- trunk/Source/WebCore/loader/MediaResourceLoader.cpp	2020-02-28 21:07:27 UTC (rev 257654)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.cpp	2020-02-28 21:23:53 UTC (rev 257655)
@@ -41,6 +41,13 @@
 
 namespace WebCore {
 
+static bool shouldRecordResponsesForTesting = false;
+
+void MediaResourceLoader::recordResponsesForTesting()
+{
+    shouldRecordResponsesForTesting = true;
+}
+
 MediaResourceLoader::MediaResourceLoader(Document& document, HTMLMediaElement& mediaElement, const String& crossOriginMode)
     : ContextDestructionObserver(&document)
     , m_document(makeWeakPtr(document))
@@ -118,7 +125,7 @@
 void MediaResourceLoader::addResponseForTesting(const ResourceResponse& response)
 {
     const auto maximumResponsesForTesting = 5;
-    if (m_responsesForTesting.size() > maximumResponsesForTesting)
+    if (!shouldRecordResponsesForTesting || m_responsesForTesting.size() > maximumResponsesForTesting)
         return;
     m_responsesForTesting.append(response);
 }

Modified: trunk/Source/WebCore/loader/MediaResourceLoader.h (257654 => 257655)


--- trunk/Source/WebCore/loader/MediaResourceLoader.h	2020-02-28 21:07:27 UTC (rev 257654)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.h	2020-02-28 21:23:53 UTC (rev 257655)
@@ -55,6 +55,7 @@
     Document* document() { return m_document.get(); }
     const String& crossOriginMode() const { return m_crossOriginMode; }
 
+    WEBCORE_EXPORT static void recordResponsesForTesting();
     Vector<ResourceResponse> responsesForTesting() const { return m_responsesForTesting; }
     void addResponseForTesting(const ResourceResponse&);
 

Modified: trunk/Source/WebCore/testing/Internals.cpp (257654 => 257655)


--- trunk/Source/WebCore/testing/Internals.cpp	2020-02-28 21:07:27 UTC (rev 257654)
+++ trunk/Source/WebCore/testing/Internals.cpp	2020-02-28 21:23:53 UTC (rev 257655)
@@ -531,6 +531,8 @@
     page.setMockMediaPlaybackTargetPickerState(emptyString(), MediaPlaybackTargetContext::Unknown);
 #endif
 
+    MediaResourceLoader::recordResponsesForTesting();
+
     page.setShowAllPlugins(false);
     page.setLowPowerModeEnabledOverrideForTesting(WTF::nullopt);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to