Title: [275571] trunk/Source
Revision
275571
Author
jer.no...@apple.com
Date
2021-04-06 16:51:54 -0700 (Tue, 06 Apr 2021)

Log Message

[MediaSession] Add optional mediaTime and hostTime arguments to the playSession() command.
https://bugs.webkit.org/show_bug.cgi?id=224173

Reviewed by Eric Carlson.

Source/WebCore:

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:

Source/WebKit:

* 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:

Modified Paths

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
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to