Add inspector logging for MediaElementSession autoplay
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Oct 2017 18:38:54 +0000 (18:38 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Oct 2017 18:38:54 +0000 (18:38 +0000)
https://bugs.webkit.org/show_bug.cgi?id=178846

Patch by Youenn Fablet <youenn@apple.com> on 2017-10-26
Reviewed by Eric Carlson.

No change of behavior.
Making use of pal Logger in MediaElementSession.
This new logging is limited to autoplay/playback for now.

* html/MediaElementSession.cpp:
(WebCore::MediaElementSession::MediaElementSession):
(WebCore::MediaElementSession::playbackPermitted const):
(WebCore::MediaElementSession::autoplayPermitted const):
(WebCore::MediaElementSession::willLog const):
(WebCore::MediaElementSession::logChannel const):
* html/MediaElementSession.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@224030 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/html/HTMLMediaElement.h
Source/WebCore/html/MediaElementSession.cpp
Source/WebCore/html/MediaElementSession.h

index 565ede8..16c9bb1 100644 (file)
@@ -1,3 +1,22 @@
+2017-10-26  Youenn Fablet  <youenn@apple.com>
+
+        Add inspector logging for MediaElementSession autoplay
+        https://bugs.webkit.org/show_bug.cgi?id=178846
+
+        Reviewed by Eric Carlson.
+
+        No change of behavior.
+        Making use of pal Logger in MediaElementSession.
+        This new logging is limited to autoplay/playback for now.
+
+        * html/MediaElementSession.cpp:
+        (WebCore::MediaElementSession::MediaElementSession):
+        (WebCore::MediaElementSession::playbackPermitted const):
+        (WebCore::MediaElementSession::autoplayPermitted const):
+        (WebCore::MediaElementSession::willLog const):
+        (WebCore::MediaElementSession::logChannel const):
+        * html/MediaElementSession.h:
+
 2017-10-26  Keith Miller  <keith_miller@apple.com>
 
         Move ApplePay to unified sources
index a93ad78..74e9f1f 100644 (file)
@@ -541,8 +541,11 @@ public:
 #if !RELEASE_LOG_DISABLED
     const PAL::Logger& logger() const final { return *m_logger.get(); }
     const void* logIdentifier() const final { return reinterpret_cast<const void*>(m_logIdentifier); }
+    WTFLogChannel& logChannel() const final;
 #endif
 
+    bool willLog(WTFLogLevel) const;
+
 protected:
     HTMLMediaElement(const QualifiedName&, Document&, bool createdByParser);
     virtual void finishInitialization();
@@ -902,14 +905,11 @@ private:
 
 #if !RELEASE_LOG_DISABLED
     const char* logClassName() const final { return "HTMLMediaElement"; }
-    WTFLogChannel& logChannel() const final;
 
     const void* mediaPlayerLogIdentifier() final { return logIdentifier(); }
     const PAL::Logger& mediaPlayerLogger() final { return logger(); }
 #endif
 
-    bool willLog(WTFLogLevel) const;
-
     WeakPtrFactory<HTMLMediaElement> m_weakFactory;
     Timer m_pendingActionTimer;
     Timer m_progressEventTimer;
index cda69a6..b8b5282 100644 (file)
@@ -169,7 +169,7 @@ SuccessOr<MediaPlaybackDenialReason> MediaElementSession::playbackPermitted(cons
         return { };
 
     if (requiresFullscreenForVideoPlayback(element) && !fullscreenPermitted(element)) {
-        RELEASE_LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE because of fullscreen restriction");
+        ALWAYS_LOG(LOGIDENTIFIER, "Returning FALSE because of fullscreen restriction");
         return MediaPlaybackDenialReason::FullscreenRequired;
     }
 
@@ -196,17 +196,17 @@ SuccessOr<MediaPlaybackDenialReason> MediaElementSession::playbackPermitted(cons
 #endif
 
     if (m_restrictions & RequireUserGestureForVideoRateChange && element.isVideo() && !element.document().processingUserGestureForMedia()) {
-        RELEASE_LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE because of video rate change restriction");
+        ALWAYS_LOG(LOGIDENTIFIER, "Returning FALSE because a user gesture is required for video rate change restriction");
         return MediaPlaybackDenialReason::UserGestureRequired;
     }
 
     if (m_restrictions & RequireUserGestureForAudioRateChange && (!element.isVideo() || element.hasAudio()) && !element.muted() && element.volume() && !element.document().processingUserGestureForMedia()) {
-        RELEASE_LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE because of audio rate change restriction");
+        ALWAYS_LOG(LOGIDENTIFIER, "Returning FALSE because a user gesture is required for audio rate change restriction");
         return MediaPlaybackDenialReason::UserGestureRequired;
     }
 
     if (m_restrictions & RequireUserGestureForVideoDueToLowPowerMode && element.isVideo() && !element.document().processingUserGestureForMedia()) {
-        RELEASE_LOG(Media, "MediaElementSession::playbackPermitted - returning FALSE because of video low power mode restriction");
+        ALWAYS_LOG(LOGIDENTIFIER, "Returning FALSE because of video low power mode restriction");
         return MediaPlaybackDenialReason::UserGestureRequired;
     }
 
@@ -229,14 +229,22 @@ bool MediaElementSession::autoplayPermitted() const
         return true;
 
     auto* renderer = m_element.renderer();
-    if (!renderer)
+    if (!renderer) {
+        ALWAYS_LOG(LOGIDENTIFIER, "Returning FALSE because element has no renderer");
         return false;
-    if (renderer->style().visibility() != VISIBLE)
+    }
+    if (renderer->style().visibility() != VISIBLE) {
+        ALWAYS_LOG(LOGIDENTIFIER, "Returning FALSE because element is not visible");
         return false;
-    if (renderer->view().frameView().isOffscreen())
+    }
+    if (renderer->view().frameView().isOffscreen()) {
+        ALWAYS_LOG(LOGIDENTIFIER, "Returning FALSE because frame is offscreen");
         return false;
-    if (renderer->visibleInViewportState() != VisibleInViewportState::Yes)
+    }
+    if (renderer->visibleInViewportState() != VisibleInViewportState::Yes) {
+        ALWAYS_LOG(LOGIDENTIFIER, "Returning FALSE because element is not visible in the viewport");
         return false;
+    }
     return true;
 }
 
@@ -831,6 +839,28 @@ bool MediaElementSession::allowsPlaybackControlsForAutoplayingAudio() const
     return page && page->allowsPlaybackControlsForAutoplayingAudio();
 }
 
+bool MediaElementSession::willLog(WTFLogLevel level) const
+{
+    return m_element.willLog(level);
+}
+
+#if !RELEASE_LOG_DISABLED
+const PAL::Logger& MediaElementSession::logger() const
+{
+    return m_element.logger();
+}
+
+const void* MediaElementSession::logIdentifier() const
+{
+    return m_element.logIdentifier();
+}
+
+WTFLogChannel& MediaElementSession::logChannel() const
+{
+    return m_element.logChannel();
+}
+#endif
+
 }
 
 #endif // ENABLE(VIDEO)
index 401bd40..b3e89ee 100644 (file)
@@ -32,6 +32,7 @@
 #include "PlatformMediaSession.h"
 #include "SuccessOr.h"
 #include "Timer.h"
+#include <pal/LoggerHelper.h>
 #include <wtf/TypeCasts.h>
 
 namespace WebCore {
@@ -51,7 +52,11 @@ class Document;
 class HTMLMediaElement;
 class SourceBuffer;
 
-class MediaElementSession final : public PlatformMediaSession {
+class MediaElementSession final : public PlatformMediaSession
+#if !RELEASE_LOG_DISABLED
+    , public PAL::LoggerHelper
+#endif
+    {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     explicit MediaElementSession(HTMLMediaElement&);
@@ -143,6 +148,14 @@ public:
             || type == VideoAudio;
     }
 
+#if !RELEASE_LOG_DISABLED
+    const PAL::Logger& logger() const final;
+    const void* logIdentifier() const final;
+    const char* logClassName() const final { return "MediaElementSession"; }
+    WTFLogChannel& logChannel() const final;
+#endif
+    bool willLog(WTFLogLevel) const;
+
 private:
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)