Diff
Modified: trunk/Source/WebCore/ChangeLog (224903 => 224904)
--- trunk/Source/WebCore/ChangeLog 2017-11-15 23:05:41 UTC (rev 224903)
+++ trunk/Source/WebCore/ChangeLog 2017-11-15 23:25:34 UTC (rev 224904)
@@ -1,3 +1,30 @@
+2017-11-15 Eric Carlson <eric.carl...@apple.com>
+
+ Log media readyState and networkState as strings
+ https://bugs.webkit.org/show_bug.cgi?id=179732
+
+ Reviewed by Youenn Fablet.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::convertEnumerationToString):
+ (WebCore::HTMLMediaElement::scheduleDelayedAction): Fix logic error.
+ (WebCore::HTMLMediaElement::pendingActionTimerFired): Fix incorrect log string.
+ (WebCore::HTMLMediaElement::setNetworkState): Don't cast to int for logging.
+ (WebCore::HTMLMediaElement::setReadyState): Ditto. Log when autoplay is blocked.
+
+ * html/HTMLMediaElementEnums.h:
+ (PAL::LogArgument<WebCore::HTMLMediaElementEnums::ReadyState>::toString): New.
+ (PAL::LogArgument<WebCore::HTMLMediaElementEnums::NetworkState>::toString): New.
+
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::convertEnumerationToString):
+ * platform/graphics/MediaPlayerEnums.h:
+ (PAL::LogArgument<WebCore::MediaPlayerEnums::ReadyState>::toString):
+ (PAL::LogArgument<WebCore::MediaPlayerEnums::NetworkState>::toString):
+
+ * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
+ (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Log strings.
+
2017-11-15 Youenn Fablet <you...@apple.com>
Service Worker fetch should handle empty responses
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (224903 => 224904)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2017-11-15 23:05:41 UTC (rev 224903)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2017-11-15 23:25:34 UTC (rev 224904)
@@ -254,6 +254,40 @@
using namespace HTMLNames;
+String convertEnumerationToString(HTMLMediaElement::ReadyState enumerationValue)
+{
+ static const NeverDestroyed<String> values[] = {
+ MAKE_STATIC_STRING_IMPL("HAVE_NOTHING"),
+ MAKE_STATIC_STRING_IMPL("HAVE_METADATA"),
+ MAKE_STATIC_STRING_IMPL("HAVE_CURRENT_DATA"),
+ MAKE_STATIC_STRING_IMPL("HAVE_FUTURE_DATA"),
+ MAKE_STATIC_STRING_IMPL("HAVE_ENOUGH_DATA"),
+ };
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::HAVE_NOTHING) == 0, "HTMLMediaElement::HAVE_NOTHING is not 0 as expected");
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::HAVE_METADATA) == 1, "HTMLMediaElement::HAVE_METADATA is not 1 as expected");
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::HAVE_CURRENT_DATA) == 2, "HTMLMediaElement::HAVE_CURRENT_DATA is not 2 as expected");
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::HAVE_FUTURE_DATA) == 3, "HTMLMediaElement::HAVE_FUTURE_DATA is not 3 as expected");
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::HAVE_ENOUGH_DATA) == 4, "HTMLMediaElement::HAVE_ENOUGH_DATA is not 4 as expected");
+ ASSERT(static_cast<size_t>(enumerationValue) < WTF_ARRAY_LENGTH(values));
+ return values[static_cast<size_t>(enumerationValue)];
+}
+
+String convertEnumerationToString(HTMLMediaElement::NetworkState enumerationValue)
+{
+ static const NeverDestroyed<String> values[] = {
+ MAKE_STATIC_STRING_IMPL("NETWORK_EMPTY"),
+ MAKE_STATIC_STRING_IMPL("NETWORK_IDLE"),
+ MAKE_STATIC_STRING_IMPL("NETWORK_LOADING"),
+ MAKE_STATIC_STRING_IMPL("NETWORK_NO_SOURCE"),
+ };
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::NETWORK_EMPTY) == 0, "HTMLMediaElement::NETWORK_EMPTY is not 0 as expected");
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::NETWORK_IDLE) == 1, "HTMLMediaElement::NETWORK_IDLE is not 1 as expected");
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::NETWORK_LOADING) == 2, "HTMLMediaElement::NETWORK_LOADING is not 2 as expected");
+ static_assert(static_cast<size_t>(HTMLMediaElementEnums::NETWORK_NO_SOURCE) == 3, "HTMLMediaElement::NETWORK_NO_SOURCE is not 3 as expected");
+ ASSERT(static_cast<size_t>(enumerationValue) < WTF_ARRAY_LENGTH(values));
+ return values[static_cast<size_t>(enumerationValue)];
+}
+
typedef HashMap<Document*, HashSet<HTMLMediaElement*>> DocumentElementSetMap;
static DocumentElementSetMap& documentToElementSetMap()
{
@@ -988,7 +1022,7 @@
void HTMLMediaElement::scheduleDelayedAction(DelayedActionType actionType)
{
- if (actionType ^ m_pendingActionFlags)
+ if (!(actionType & m_pendingActionFlags))
ALWAYS_LOG(LOGIDENTIFIER, "setting ", actionName(actionType), " flag");
#if ENABLE(VIDEO_TRACK)
@@ -1088,7 +1122,7 @@
if (!pendingActions)
return;
- ALWAYS_LOG(LOGIDENTIFIER, "setting ", actionName(static_cast<DelayedActionType>(pendingActions)), " flag");
+ ALWAYS_LOG(LOGIDENTIFIER, "processing ", actionName(static_cast<DelayedActionType>(pendingActions)), " flag");
#if ENABLE(VIDEO_TRACK)
if (pendingActions & ConfigureTextTracks)
@@ -2296,7 +2330,7 @@
void HTMLMediaElement::setNetworkState(MediaPlayer::NetworkState state)
{
if (static_cast<int>(state) != static_cast<int>(m_networkState))
- ALWAYS_LOG(LOGIDENTIFIER, "new state = ", static_cast<int>(state), ", current state = ", static_cast<int>(m_networkState));
+ ALWAYS_LOG(LOGIDENTIFIER, "new state = ", state, ", current state = ", m_networkState);
if (state == MediaPlayer::Empty) {
// Just update the cached state and leave, we can't do anything.
@@ -2402,7 +2436,7 @@
bool tracksAreReady = true;
#endif
- ALWAYS_LOG(LOGIDENTIFIER, "new state = ", static_cast<int>(state), ", current state = ", static_cast<int>(m_readyState));
+ ALWAYS_LOG(LOGIDENTIFIER, "new state = ", state, ", current state = ", m_readyState);
if (tracksAreReady)
m_readyState = newState;
@@ -2505,8 +2539,10 @@
m_playbackStartedTime = currentMediaTime().toDouble();
scheduleEvent(eventNames().playEvent);
scheduleNotifyAboutPlaying();
- } else if (success.value() == MediaPlaybackDenialReason::UserGestureRequired)
+ } else if (success.value() == MediaPlaybackDenialReason::UserGestureRequired) {
+ ALWAYS_LOG(LOGIDENTIFIER, "Autoplay blocked, user gesture required");
setPlaybackWithoutUserGesture(PlaybackWithoutUserGesture::Prevented);
+ }
shouldUpdateDisplayState = true;
}
@@ -2514,6 +2550,10 @@
// If we transition to the Future Data state and we're about to begin playing, ensure playback is actually permitted first,
// honoring any playback denial reasons such as the requirement of a user gesture.
if (m_readyState == HAVE_FUTURE_DATA && oldState < HAVE_FUTURE_DATA && potentiallyPlaying() && !m_mediaSession->playbackPermitted(*this)) {
+ auto canTransition = canTransitionFromAutoplayToPlay();
+ if (canTransition && canTransition.value() == MediaPlaybackDenialReason::UserGestureRequired)
+ ALWAYS_LOG(LOGIDENTIFIER, "Autoplay blocked, user gesture required");
+
pauseInternal();
setPlaybackWithoutUserGesture(PlaybackWithoutUserGesture::Prevented);
}
Modified: trunk/Source/WebCore/html/HTMLMediaElementEnums.h (224903 => 224904)
--- trunk/Source/WebCore/html/HTMLMediaElementEnums.h 2017-11-15 23:05:41 UTC (rev 224903)
+++ trunk/Source/WebCore/html/HTMLMediaElementEnums.h 2017-11-15 23:25:34 UTC (rev 224904)
@@ -58,4 +58,31 @@
} SeekType;
};
+String convertEnumerationToString(HTMLMediaElementEnums::ReadyState);
+String convertEnumerationToString(HTMLMediaElementEnums::NetworkState);
+
} // namespace WebCore
+
+namespace PAL {
+
+template<typename Type>
+struct LogArgument;
+
+template <>
+struct LogArgument<WebCore::HTMLMediaElementEnums::ReadyState> {
+ static String toString(const WebCore::HTMLMediaElementEnums::ReadyState state)
+ {
+ return convertEnumerationToString(state);
+ }
+};
+
+template <>
+struct LogArgument<WebCore::HTMLMediaElementEnums::NetworkState> {
+ static String toString(const WebCore::HTMLMediaElementEnums::NetworkState state)
+ {
+ return convertEnumerationToString(state);
+ }
+};
+
+}; // namespace PAL
+
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (224903 => 224904)
--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp 2017-11-15 23:05:41 UTC (rev 224903)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp 2017-11-15 23:25:34 UTC (rev 224904)
@@ -1513,6 +1513,46 @@
}
#endif
+String convertEnumerationToString(MediaPlayerEnums::ReadyState enumerationValue)
+{
+ static const NeverDestroyed<String> values[] = {
+ MAKE_STATIC_STRING_IMPL("HaveNothing"),
+ MAKE_STATIC_STRING_IMPL("HaveMetadata"),
+ MAKE_STATIC_STRING_IMPL("HaveCurrentData"),
+ MAKE_STATIC_STRING_IMPL("HaveFutureData"),
+ MAKE_STATIC_STRING_IMPL("HaveEnoughData"),
+ };
+ static_assert(static_cast<size_t>(MediaPlayerEnums::HaveNothing) == 0, "MediaPlayerEnums::HaveNothing is not 0 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::HaveMetadata) == 1, "MediaPlayerEnums::HaveMetadata is not 1 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::HaveCurrentData) == 2, "MediaPlayerEnums::HaveCurrentData is not 2 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::HaveFutureData) == 3, "MediaPlayerEnums::HaveFutureData is not 3 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::HaveEnoughData) == 4, "MediaPlayerEnums::HaveEnoughData is not 4 as expected");
+ ASSERT(static_cast<size_t>(enumerationValue) < WTF_ARRAY_LENGTH(values));
+ return values[static_cast<size_t>(enumerationValue)];
}
+String convertEnumerationToString(MediaPlayerEnums::NetworkState enumerationValue)
+{
+ static const NeverDestroyed<String> values[] = {
+ MAKE_STATIC_STRING_IMPL("Empty"),
+ MAKE_STATIC_STRING_IMPL("Idle"),
+ MAKE_STATIC_STRING_IMPL("Loading"),
+ MAKE_STATIC_STRING_IMPL("Loaded"),
+ MAKE_STATIC_STRING_IMPL("FormatError"),
+ MAKE_STATIC_STRING_IMPL("NetworkError"),
+ MAKE_STATIC_STRING_IMPL("DecodeError"),
+ };
+ static_assert(static_cast<size_t>(MediaPlayerEnums::Empty) == 0, "MediaPlayerEnums::Empty is not 0 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::Idle) == 1, "MediaPlayerEnums::Idle is not 1 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::Loading) == 2, "MediaPlayerEnums::Loading is not 2 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::Loaded) == 3, "MediaPlayerEnums::Loaded is not 3 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::FormatError) == 4, "MediaPlayerEnums::FormatError is not 4 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::NetworkError) == 5, "MediaPlayerEnums::NetworkError is not 5 as expected");
+ static_assert(static_cast<size_t>(MediaPlayerEnums::DecodeError) == 6, "MediaPlayerEnums::DecodeError is not 6 as expected");
+ ASSERT(static_cast<size_t>(enumerationValue) < WTF_ARRAY_LENGTH(values));
+ return values[static_cast<size_t>(enumerationValue)];
+}
+
+}
+
#endif
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayerEnums.h (224903 => 224904)
--- trunk/Source/WebCore/platform/graphics/MediaPlayerEnums.h 2017-11-15 23:05:41 UTC (rev 224903)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayerEnums.h 2017-11-15 23:25:34 UTC (rev 224904)
@@ -23,9 +23,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef MediaPlayerEnums_h
-#define MediaPlayerEnums_h
+#pragma once
+#include <wtf/text/WTFString.h>
+
namespace WebCore {
class MediaPlayerEnums {
@@ -43,6 +44,31 @@
typedef uint32_t VideoFullscreenMode;
};
-}
+WTF::String convertEnumerationToString(MediaPlayerEnums::ReadyState);
+WTF::String convertEnumerationToString(MediaPlayerEnums::NetworkState);
-#endif
+} // namespace WebCore
+
+
+namespace PAL {
+
+template<typename Type>
+struct LogArgument;
+
+template <>
+struct LogArgument<WebCore::MediaPlayerEnums::ReadyState> {
+ static WTF::String toString(const WebCore::MediaPlayerEnums::ReadyState state)
+ {
+ return convertEnumerationToString(state);
+ }
+};
+
+template <>
+struct LogArgument<WebCore::MediaPlayerEnums::NetworkState> {
+ static WTF::String toString(const WebCore::MediaPlayerEnums::NetworkState state)
+ {
+ return convertEnumerationToString(state);
+ }
+};
+
+}; // namespace PAL
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp (224903 => 224904)
--- trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp 2017-11-15 23:05:41 UTC (rev 224903)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp 2017-11-15 23:25:34 UTC (rev 224904)
@@ -578,9 +578,9 @@
m_haveReportedFirstVideoFrame = false;
if (m_networkState != newNetworkState)
- ALWAYS_LOG(LOGIDENTIFIER, "entered with networkState ", static_cast<int>(m_networkState), ", exiting with ", static_cast<int>(newNetworkState));
+ ALWAYS_LOG(LOGIDENTIFIER, "entered with networkState ", m_networkState, ", exiting with ", newNetworkState);
if (m_readyState != newReadyState)
- ALWAYS_LOG(LOGIDENTIFIER, "entered with readyState ", static_cast<int>(m_readyState), ", exiting with ", static_cast<int>(newReadyState));
+ ALWAYS_LOG(LOGIDENTIFIER, "entered with readyState ", m_readyState, ", exiting with ", newReadyState);
setNetworkState(newNetworkState);
setReadyState(newReadyState);