Title: [218016] trunk/Source/WebCore
Revision
218016
Author
[email protected]
Date
2017-06-09 13:55:11 -0700 (Fri, 09 Jun 2017)

Log Message

Media elements are allowed to continue to load media data after navigation
https://bugs.webkit.org/show_bug.cgi?id=173179

Reviewed by Eric Carlson.

Deny media sessions the ability to load media data when suspended.

* Modules/webaudio/AudioContext.cpp:
(WebCore::AudioContext::isSuspended):
* Modules/webaudio/AudioContext.h:
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::isSuspended):
* html/HTMLMediaElement.h:
* platform/audio/PlatformMediaSession.cpp:
(WebCore::PlatformMediaSession::isSuspended):
* platform/audio/PlatformMediaSession.h:
(WebCore::PlatformMediaSessionClient::isSuspended):
* platform/audio/PlatformMediaSessionManager.cpp:
(WebCore::PlatformMediaSessionManager::sessionCanLoadMedia):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (218015 => 218016)


--- trunk/Source/WebCore/ChangeLog	2017-06-09 20:45:37 UTC (rev 218015)
+++ trunk/Source/WebCore/ChangeLog	2017-06-09 20:55:11 UTC (rev 218016)
@@ -1,3 +1,25 @@
+2017-06-09  Jer Noble  <[email protected]>
+
+        Media elements are allowed to continue to load media data after navigation
+        https://bugs.webkit.org/show_bug.cgi?id=173179
+
+        Reviewed by Eric Carlson.
+
+        Deny media sessions the ability to load media data when suspended.  
+
+        * Modules/webaudio/AudioContext.cpp:
+        (WebCore::AudioContext::isSuspended):
+        * Modules/webaudio/AudioContext.h:
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::isSuspended):
+        * html/HTMLMediaElement.h:
+        * platform/audio/PlatformMediaSession.cpp:
+        (WebCore::PlatformMediaSession::isSuspended):
+        * platform/audio/PlatformMediaSession.h:
+        (WebCore::PlatformMediaSessionClient::isSuspended):
+        * platform/audio/PlatformMediaSessionManager.cpp:
+        (WebCore::PlatformMediaSessionManager::sessionCanLoadMedia):
+
 2017-06-09  Daniel Bates  <[email protected]>
 
         CSP: Apply img-src directive to favicon loads

Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp (218015 => 218016)


--- trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp	2017-06-09 20:45:37 UTC (rev 218015)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp	2017-06-09 20:55:11 UTC (rev 218016)
@@ -374,6 +374,11 @@
     return document() ? document()->processingUserGestureForMedia() : false;
 }
 
+bool AudioContext::isSuspended() const
+{
+    return !document() || document()->activeDOMObjectsAreSuspended() || document()->activeDOMObjectsAreStopped();
+}
+
 void AudioContext::visibilityStateChanged()
 {
     // Do not suspend if audio is audible.

Modified: trunk/Source/WebCore/Modules/webaudio/AudioContext.h (218015 => 218016)


--- trunk/Source/WebCore/Modules/webaudio/AudioContext.h	2017-06-09 20:45:37 UTC (rev 218015)
+++ trunk/Source/WebCore/Modules/webaudio/AudioContext.h	2017-06-09 20:55:11 UTC (rev 218016)
@@ -319,6 +319,7 @@
     bool shouldOverrideBackgroundPlaybackRestriction(PlatformMediaSession::InterruptionType) const override { return false; }
     String sourceApplicationIdentifier() const override;
     bool canProduceAudio() const final { return true; }
+    bool isSuspended() const final;
     bool processingUserGestureForMedia() const final;
 
     void visibilityStateChanged() final;

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (218015 => 218016)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2017-06-09 20:45:37 UTC (rev 218015)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2017-06-09 20:55:11 UTC (rev 218016)
@@ -7025,6 +7025,11 @@
     return m_player && m_readyState >= HAVE_METADATA && hasAudio();
 }
 
+bool HTMLMediaElement::isSuspended() const
+{
+    return document().activeDOMObjectsAreSuspended() || document().activeDOMObjectsAreStopped();
+}
+
 #if ENABLE(MEDIA_SOURCE)
 size_t HTMLMediaElement::maximumSourceBufferSize(const SourceBuffer& buffer) const
 {

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (218015 => 218016)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2017-06-09 20:45:37 UTC (rev 218015)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2017-06-09 20:55:11 UTC (rev 218016)
@@ -825,6 +825,7 @@
     bool shouldOverrideBackgroundLoadingRestriction() const override;
     bool canProduceAudio() const final;
     bool processingUserGestureForMedia() const final;
+    bool isSuspended() const final;
 
     void pageMutedStateDidChange() override;
 

Modified: trunk/Source/WebCore/platform/audio/PlatformMediaSession.cpp (218015 => 218016)


--- trunk/Source/WebCore/platform/audio/PlatformMediaSession.cpp	2017-06-09 20:45:37 UTC (rev 218015)
+++ trunk/Source/WebCore/platform/audio/PlatformMediaSession.cpp	2017-06-09 20:55:11 UTC (rev 218016)
@@ -299,6 +299,11 @@
     return m_client.elementIsHidden();
 }
 
+bool PlatformMediaSession::isSuspended() const
+{
+    return m_client.isSuspended();
+}
+
 bool PlatformMediaSession::shouldOverrideBackgroundLoadingRestriction() const
 {
     return m_client.shouldOverrideBackgroundLoadingRestriction();

Modified: trunk/Source/WebCore/platform/audio/PlatformMediaSession.h (218015 => 218016)


--- trunk/Source/WebCore/platform/audio/PlatformMediaSession.h	2017-06-09 20:45:37 UTC (rev 218015)
+++ trunk/Source/WebCore/platform/audio/PlatformMediaSession.h	2017-06-09 20:55:11 UTC (rev 218016)
@@ -144,6 +144,7 @@
     DisplayType displayType() const;
 
     bool isHidden() const;
+    bool isSuspended() const;
 
     bool shouldOverrideBackgroundLoadingRestriction() const;
 
@@ -218,6 +219,7 @@
     virtual void setShouldBufferData(bool) { }
     virtual bool elementIsHidden() const { return false; }
     virtual bool canProduceAudio() const { return false; }
+    virtual bool isSuspended() const { return false; };
 
     virtual bool shouldOverrideBackgroundPlaybackRestriction(PlatformMediaSession::InterruptionType) const = 0;
     virtual bool shouldOverrideBackgroundLoadingRestriction() const { return false; }

Modified: trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp (218015 => 218016)


--- trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp	2017-06-09 20:45:37 UTC (rev 218015)
+++ trunk/Source/WebCore/platform/audio/PlatformMediaSessionManager.cpp	2017-06-09 20:55:11 UTC (rev 218016)
@@ -289,6 +289,8 @@
     
 bool PlatformMediaSessionManager::sessionCanLoadMedia(const PlatformMediaSession& session) const
 {
+    if (session.isSuspended())
+        return false;
     return session.state() == PlatformMediaSession::Playing || !session.isHidden() || session.shouldOverrideBackgroundLoadingRestriction();
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to