Diff
Modified: trunk/Source/WebCore/ChangeLog (275570 => 275571)
--- trunk/Source/WebCore/ChangeLog 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebCore/ChangeLog 2021-04-06 23:51:54 UTC (rev 275571)
@@ -1,3 +1,20 @@
+2021-04-06 Jer Noble <jer.no...@apple.com>
+
+ [MediaSession] Add optional mediaTime and hostTime arguments to the playSession() command.
+ https://bugs.webkit.org/show_bug.cgi?id=224173
+
+ Reviewed by Eric Carlson.
+
+ When receiving a playSession() method that has an optional mediaTime argument, perform a
+ seekAction before the matching playAction if the current media time is not already approximately
+ equal to the mediaTime argument.
+
+ * Modules/mediasession/MediaSessionCoordinator.cpp:
+ (WebCore::MediaSessionCoordinator::playSession):
+ (WebCore::MediaSessionCoordinator::currentPositionApproximatelyEqualTo):
+ * Modules/mediasession/MediaSessionCoordinator.h:
+ * Modules/mediasession/MediaSessionCoordinatorPrivate.h:
+
2021-04-06 Said Abou-Hallawa <s...@apple.com>
Replace the Optional metadata of ImageSource by a single OptionSet and the underlying metadata
Modified: trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.cpp (275570 => 275571)
--- trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.cpp 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.cpp 2021-04-06 23:51:54 UTC (rev 275571)
@@ -35,7 +35,10 @@
#include "MediaSession.h"
#include "MediaSessionCoordinatorPrivate.h"
#include <wtf/Logger.h>
+#include <wtf/Seconds.h>
+static const Seconds CommandTimeTolerance = 50_ms;
+
namespace WebCore {
static const void* nextCoordinatorLogIdentifier()
@@ -296,8 +299,9 @@
completionHandler(true);
}
-void MediaSessionCoordinator::playSession(CompletionHandler<void(bool)>&& completionHandler)
+void MediaSessionCoordinator::playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&& completionHandler)
{
+ UNUSED_PARAM(hostTime);
ALWAYS_LOG(LOGIDENTIFIER, m_state);
if (m_state != MediaSessionCoordinatorState::Joined) {
@@ -305,6 +309,9 @@
return;
}
+ if (atTime && !currentPositionApproximatelyEqualTo(*atTime))
+ m_session->callActionHandler({ .action = "" .seekTime = *atTime });
+
m_session->callActionHandler({ .action = "" });
completionHandler(true);
}
@@ -335,6 +342,19 @@
completionHandler(true);
}
+bool MediaSessionCoordinator::currentPositionApproximatelyEqualTo(double time)
+{
+ if (!m_session)
+ return false;
+
+ auto currentPosition = m_session->currentPosition();
+ if (!currentPosition)
+ return false;
+
+ auto delta = Seconds(abs(*currentPosition - time));
+ return delta <= CommandTimeTolerance;
+}
+
WTFLogChannel& MediaSessionCoordinator::logChannel()
{
return LogMedia;
Modified: trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.h (275570 => 275571)
--- trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.h 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinator.h 2021-04-06 23:51:54 UTC (rev 275571)
@@ -72,7 +72,7 @@
// MediaSessionCoordinatorClient
void seekSessionToTime(double, CompletionHandler<void(bool)>&&) final;
- void playSession(CompletionHandler<void(bool)>&&) final;
+ void playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&&) final;
void pauseSession(CompletionHandler<void(bool)>&&) final;
void setSessionTrack(const String&, CompletionHandler<void(bool)>&&) final;
Modified: trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinatorPrivate.h (275570 => 275571)
--- trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinatorPrivate.h 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSessionCoordinatorPrivate.h 2021-04-06 23:51:54 UTC (rev 275571)
@@ -46,7 +46,7 @@
virtual ~MediaSessionCoordinatorClient() = default;
virtual void seekSessionToTime(double, CompletionHandler<void(bool)>&&) = 0;
- virtual void playSession(CompletionHandler<void(bool)>&&) = 0;
+ virtual void playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&&) = 0;
virtual void pauseSession(CompletionHandler<void(bool)>&&) = 0;
virtual void setSessionTrack(const String&, CompletionHandler<void(bool)>&&) = 0;
};
Modified: trunk/Source/WebKit/ChangeLog (275570 => 275571)
--- trunk/Source/WebKit/ChangeLog 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebKit/ChangeLog 2021-04-06 23:51:54 UTC (rev 275571)
@@ -1,3 +1,18 @@
+2021-04-06 Jer Noble <jer.no...@apple.com>
+
+ [MediaSession] Add optional mediaTime and hostTime arguments to the playSession() command.
+ https://bugs.webkit.org/show_bug.cgi?id=224173
+
+ Reviewed by Eric Carlson.
+
+ * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp:
+ (WebKit::RemoteMediaSessionCoordinatorProxy::playSession):
+ * UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h:
+ * WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp:
+ (WebKit::RemoteMediaSessionCoordinator::playSession):
+ * WebProcess/MediaSession/RemoteMediaSessionCoordinator.h:
+ * WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in:
+
2021-04-06 Brent Fulgham <bfulg...@apple.com>
Add additional page load diagnostic logging
Modified: trunk/Source/WebKit/UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp (275570 => 275571)
--- trunk/Source/WebKit/UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebKit/UIProcess/Media/RemoteMediaSessionCoordinatorProxy.cpp 2021-04-06 23:51:54 UTC (rev 275571)
@@ -159,9 +159,9 @@
m_webPageProxy.sendWithAsyncReply(Messages::RemoteMediaSessionCoordinator::SeekSessionToTime { time }, callback);
}
-void RemoteMediaSessionCoordinatorProxy::playSession(CompletionHandler<void(bool)>&& callback)
+void RemoteMediaSessionCoordinatorProxy::playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&& callback)
{
- m_webPageProxy.sendWithAsyncReply(Messages::RemoteMediaSessionCoordinator::PlaySession { }, callback);
+ m_webPageProxy.sendWithAsyncReply(Messages::RemoteMediaSessionCoordinator::PlaySession { WTFMove(atTime), WTFMove(hostTime) }, callback);
}
void RemoteMediaSessionCoordinatorProxy::pauseSession(CompletionHandler<void(bool)>&& callback)
Modified: trunk/Source/WebKit/UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h (275570 => 275571)
--- trunk/Source/WebKit/UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebKit/UIProcess/Media/RemoteMediaSessionCoordinatorProxy.h 2021-04-06 23:51:54 UTC (rev 275571)
@@ -77,7 +77,7 @@
// MediaSessionCoordinatorClient
void seekSessionToTime(double, CompletionHandler<void(bool)>&&) final;
- void playSession(CompletionHandler<void(bool)>&&) final;
+ void playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&&) final;
void pauseSession(CompletionHandler<void(bool)>&&) final;
void setSessionTrack(const String&, CompletionHandler<void(bool)>&&) final;
Modified: trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp (275570 => 275571)
--- trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.cpp 2021-04-06 23:51:54 UTC (rev 275571)
@@ -190,11 +190,11 @@
completionHandler(false);
}
-void RemoteMediaSessionCoordinator::playSession(CompletionHandler<void(bool)>&& completionHandler)
+void RemoteMediaSessionCoordinator::playSession(Optional<double> atTime, Optional<double> hostTime, CompletionHandler<void(bool)>&& completionHandler)
{
ALWAYS_LOG_IF_POSSIBLE(LOGIDENTIFIER);
if (auto coordinatorClient = client())
- coordinatorClient->playSession(WTFMove((completionHandler)));
+ coordinatorClient->playSession(WTFMove(atTime), WTFMove(hostTime), WTFMove((completionHandler)));
else
completionHandler(false);
}
Modified: trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.h (275570 => 275571)
--- trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.h 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.h 2021-04-06 23:51:54 UTC (rev 275571)
@@ -55,7 +55,7 @@
// MessageReceivers.
void seekSessionToTime(double, CompletionHandler<void(bool)>&&);
- void playSession(CompletionHandler<void(bool)>&&);
+ void playSession(Optional<double>, Optional<double>, CompletionHandler<void(bool)>&&);
void pauseSession(CompletionHandler<void(bool)>&&);
void setSessionTrack(const String&, CompletionHandler<void(bool)>&&);
Modified: trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in (275570 => 275571)
--- trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in 2021-04-06 23:36:25 UTC (rev 275570)
+++ trunk/Source/WebKit/WebProcess/MediaSession/RemoteMediaSessionCoordinator.messages.in 2021-04-06 23:51:54 UTC (rev 275571)
@@ -29,7 +29,7 @@
SeekSessionToTime(double time) -> (bool result) Async
- PlaySession() -> (bool result) Async
+ PlaySession(Optional<double> atTime, Optional<double> hostTime) -> (bool result) Async
PauseSession() -> (bool result) Async