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