Title: [254499] trunk
Revision
254499
Author
[email protected]
Date
2020-01-14 00:16:00 -0800 (Tue, 14 Jan 2020)

Log Message

Expose video tracks for media files in the GPUProcess
https://bugs.webkit.org/show_bug.cgi?id=206209
<rdar://problem/58553026>

Reviewed by Jer Noble.

Source/WebCore:

No new tests, un-skipped existing tests that pass because of this change.

* platform/graphics/VideoTrackPrivate.h:

Source/WebKit:

* GPUProcess/media/RemoteAudioTrackProxy.cpp:
(WebKit::RemoteAudioTrackProxy::configuration):
* GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
(WebKit::RemoteMediaPlayerManagerProxy::videoTrackSetSelected):
* GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
* GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
* GPUProcess/media/RemoteMediaPlayerProxy.cpp:
(WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddVideoTrack):
(WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveVideoTrack):
(WebKit::RemoteMediaPlayerProxy::videoTrackSetSelected):
* GPUProcess/media/RemoteMediaPlayerProxy.h:
* GPUProcess/media/RemoteVideoTrackProxy.cpp: Copied from Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp.
(WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
(WebKit::RemoteVideoTrackProxy::configuration):
(WebKit::RemoteVideoTrackProxy::configurationChanged):
(WebKit::RemoteVideoTrackProxy::willRemove):
(WebKit::RemoteVideoTrackProxy::selectedChanged):
(WebKit::RemoteVideoTrackProxy::idChanged):
(WebKit::RemoteVideoTrackProxy::labelChanged):
(WebKit::RemoteVideoTrackProxy::languageChanged):
* GPUProcess/media/RemoteVideoTrackProxy.h: Added.
* GPUProcess/media/TrackPrivateRemoteConfiguration.h:
(WebKit::TrackPrivateRemoteConfiguration::encode const):
(WebKit::TrackPrivateRemoteConfiguration::decode):
* NetworkProcess/cache/CacheStorageEngine.cpp:
(WebKit::CacheStorage::Engine::clearCachesForOriginFromDirectories):
* Sources.txt:
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
(WebKit::AudioTrackPrivateRemote::updateConfiguration):
* WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
(WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
(WebKit::MediaPlayerPrivateRemote::removeRemoteVideoTrack):
(WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
* WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
* WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
(WebKit::RemoteMediaPlayerManager::addRemoteVideoTrack):
(WebKit::RemoteMediaPlayerManager::removeRemoteVideoTrack):
(WebKit::RemoteMediaPlayerManager::remoteVideoTrackConfigurationChanged):
* WebProcess/GPU/media/RemoteMediaPlayerManager.h:
* WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
* WebProcess/GPU/media/RemoteVideoTrackProxy.cpp: Copied from Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp.
(WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
(WebKit::RemoteVideoTrackProxy::configuration):
(WebKit::RemoteVideoTrackProxy::configurationChanged):
(WebKit::RemoteVideoTrackProxy::willRemove):
(WebKit::RemoteVideoTrackProxy::selectedChanged):
(WebKit::RemoteVideoTrackProxy::idChanged):
(WebKit::RemoteVideoTrackProxy::labelChanged):
(WebKit::RemoteVideoTrackProxy::languageChanged):
* WebProcess/GPU/media/RemoteVideoTrackProxy.h: Added.
* WebProcess/GPU/media/VideoTrackPrivateRemote.cpp: Copied from Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp.
(WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
(WebKit::VideoTrackPrivateRemote::setSelected):
(WebKit::VideoTrackPrivateRemote::updateConfiguration):
* WebProcess/GPU/media/VideoTrackPrivateRemote.h: Added.
(WebKit::VideoTrackPrivateRemote::create):

LayoutTests:

* gpu-process/TestExpectations:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (254498 => 254499)


--- trunk/LayoutTests/ChangeLog	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/LayoutTests/ChangeLog	2020-01-14 08:16:00 UTC (rev 254499)
@@ -1,3 +1,13 @@
+2020-01-14  Eric Carlson  <[email protected]>
+
+        Expose video tracks for media files in the GPUProcess
+        https://bugs.webkit.org/show_bug.cgi?id=206209
+        <rdar://problem/58553026>
+
+        Reviewed by Jer Noble.
+
+        * gpu-process/TestExpectations:
+
 2020-01-13  Simon Fraser  <[email protected]>
 
         REGRESSION (Catalina) non-scrolling iframe prevents document scrolling

Modified: trunk/LayoutTests/gpu-process/TestExpectations (254498 => 254499)


--- trunk/LayoutTests/gpu-process/TestExpectations	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/LayoutTests/gpu-process/TestExpectations	2020-01-14 08:16:00 UTC (rev 254499)
@@ -220,6 +220,10 @@
 media/video-play-audio-require-user-gesture.html [ Pass ]
 media/track/audio-track.html [ Pass ]
 media/audio-track-add-remove.html [ Pass ]
+media/track/video-track-add-remove.html [ Pass ]
+media/track/video-track-alternate-groups.html [ Pass ]
+media/track/video-track-addition-and-frame-removal.html [ Pass ]
+media/track/video-track.html [ Pass ]
 
 accessibility/media-element.html [ Skip ]
 fast/block/float/list-marker-is-float-crash.html [ Skip ]

Modified: trunk/Source/WebCore/ChangeLog (254498 => 254499)


--- trunk/Source/WebCore/ChangeLog	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebCore/ChangeLog	2020-01-14 08:16:00 UTC (rev 254499)
@@ -1,3 +1,15 @@
+2020-01-14  Eric Carlson  <[email protected]>
+
+        Expose video tracks for media files in the GPUProcess
+        https://bugs.webkit.org/show_bug.cgi?id=206209
+        <rdar://problem/58553026>
+
+        Reviewed by Jer Noble.
+
+        No new tests, un-skipped existing tests that pass because of this change.
+
+        * platform/graphics/VideoTrackPrivate.h:
+
 2020-01-13  Alexey Shvayka  <[email protected]>
 
         <iframe> attributes should be processed on "srcdoc" attribute removal

Modified: trunk/Source/WebCore/platform/graphics/VideoTrackPrivate.h (254498 => 254499)


--- trunk/Source/WebCore/platform/graphics/VideoTrackPrivate.h	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebCore/platform/graphics/VideoTrackPrivate.h	2020-01-14 08:16:00 UTC (rev 254499)
@@ -68,4 +68,21 @@
 
 } // namespace WebCore
 
+namespace WTF {
+
+template<> struct EnumTraits<WebCore::VideoTrackPrivate::Kind> {
+    using values = EnumValues<
+        WebCore::VideoTrackPrivate::Kind,
+        WebCore::VideoTrackPrivate::Kind::Alternative,
+        WebCore::VideoTrackPrivate::Kind::Captions,
+        WebCore::VideoTrackPrivate::Kind::Main,
+        WebCore::VideoTrackPrivate::Kind::Sign,
+        WebCore::VideoTrackPrivate::Kind::Subtitles,
+        WebCore::VideoTrackPrivate::Kind::Commentary,
+        WebCore::VideoTrackPrivate::Kind::None
+    >;
+};
+
+} // namespace WTF
+
 #endif

Modified: trunk/Source/WebKit/ChangeLog (254498 => 254499)


--- trunk/Source/WebKit/ChangeLog	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/ChangeLog	2020-01-14 08:16:00 UTC (rev 254499)
@@ -1,3 +1,69 @@
+2020-01-14  Eric Carlson  <[email protected]>
+
+        Expose video tracks for media files in the GPUProcess
+        https://bugs.webkit.org/show_bug.cgi?id=206209
+        <rdar://problem/58553026>
+
+        Reviewed by Jer Noble.
+
+        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
+        (WebKit::RemoteAudioTrackProxy::configuration):
+        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
+        (WebKit::RemoteMediaPlayerManagerProxy::videoTrackSetSelected):
+        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
+        * GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in:
+        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
+        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidAddVideoTrack):
+        (WebKit::RemoteMediaPlayerProxy::mediaPlayerDidRemoveVideoTrack):
+        (WebKit::RemoteMediaPlayerProxy::videoTrackSetSelected):
+        * GPUProcess/media/RemoteMediaPlayerProxy.h:
+        * GPUProcess/media/RemoteVideoTrackProxy.cpp: Copied from Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp.
+        (WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
+        (WebKit::RemoteVideoTrackProxy::configuration):
+        (WebKit::RemoteVideoTrackProxy::configurationChanged):
+        (WebKit::RemoteVideoTrackProxy::willRemove):
+        (WebKit::RemoteVideoTrackProxy::selectedChanged):
+        (WebKit::RemoteVideoTrackProxy::idChanged):
+        (WebKit::RemoteVideoTrackProxy::labelChanged):
+        (WebKit::RemoteVideoTrackProxy::languageChanged):
+        * GPUProcess/media/RemoteVideoTrackProxy.h: Added.
+        * GPUProcess/media/TrackPrivateRemoteConfiguration.h:
+        (WebKit::TrackPrivateRemoteConfiguration::encode const):
+        (WebKit::TrackPrivateRemoteConfiguration::decode):
+        * NetworkProcess/cache/CacheStorageEngine.cpp:
+        (WebKit::CacheStorage::Engine::clearCachesForOriginFromDirectories):
+        * Sources.txt:
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp:
+        (WebKit::AudioTrackPrivateRemote::updateConfiguration):
+        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
+        (WebKit::MediaPlayerPrivateRemote::addRemoteVideoTrack):
+        (WebKit::MediaPlayerPrivateRemote::removeRemoteVideoTrack):
+        (WebKit::MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged):
+        * WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
+        * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp:
+        (WebKit::RemoteMediaPlayerManager::addRemoteVideoTrack):
+        (WebKit::RemoteMediaPlayerManager::removeRemoteVideoTrack):
+        (WebKit::RemoteMediaPlayerManager::remoteVideoTrackConfigurationChanged):
+        * WebProcess/GPU/media/RemoteMediaPlayerManager.h:
+        * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in:
+        * WebProcess/GPU/media/RemoteVideoTrackProxy.cpp: Copied from Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp.
+        (WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
+        (WebKit::RemoteVideoTrackProxy::configuration):
+        (WebKit::RemoteVideoTrackProxy::configurationChanged):
+        (WebKit::RemoteVideoTrackProxy::willRemove):
+        (WebKit::RemoteVideoTrackProxy::selectedChanged):
+        (WebKit::RemoteVideoTrackProxy::idChanged):
+        (WebKit::RemoteVideoTrackProxy::labelChanged):
+        (WebKit::RemoteVideoTrackProxy::languageChanged):
+        * WebProcess/GPU/media/RemoteVideoTrackProxy.h: Added.
+        * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp: Copied from Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp.
+        (WebKit::VideoTrackPrivateRemote::VideoTrackPrivateRemote):
+        (WebKit::VideoTrackPrivateRemote::setSelected):
+        (WebKit::VideoTrackPrivateRemote::updateConfiguration):
+        * WebProcess/GPU/media/VideoTrackPrivateRemote.h: Added.
+        (WebKit::VideoTrackPrivateRemote::create):
+
 2020-01-13  Don Olmstead  <[email protected]>
 
         [WebAuthn] Support CTAP Client Pin

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp (254498 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp	2020-01-14 08:16:00 UTC (rev 254499)
@@ -55,7 +55,7 @@
     configuration->trackIndex = m_trackPrivate->trackIndex();
     configuration->startTimeVariance = m_trackPrivate->startTimeVariance();
     configuration->enabled = m_trackPrivate->enabled();
-    configuration->kind = m_trackPrivate->kind();
+    configuration->audioKind = m_trackPrivate->kind();
 
     return configuration.get();
 }

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp (254498 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp	2020-01-14 08:16:00 UTC (rev 254499)
@@ -335,6 +335,12 @@
         player->audioTrackSetEnabled(trackID, enabled);
 }
 
+void RemoteMediaPlayerManagerProxy::videoTrackSetSelected(MediaPlayerPrivateRemoteIdentifier playerID, TrackPrivateRemoteIdentifier trackID, bool selected)
+{
+    if (auto player = m_proxies.get(playerID))
+        player->videoTrackSetSelected(trackID, selected);
+}
+
 #if !RELEASE_LOG_DISABLED
 const Logger& RemoteMediaPlayerManagerProxy::logger() const
 {

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h (254498 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h	2020-01-14 08:16:00 UTC (rev 254499)
@@ -113,6 +113,7 @@
     void setRate(MediaPlayerPrivateRemoteIdentifier, double);
 
     void audioTrackSetEnabled(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, bool);
+    void videoTrackSetSelected(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, bool);
 
     HashMap<MediaPlayerPrivateRemoteIdentifier, std::unique_ptr<RemoteMediaPlayerProxy>> m_proxies;
     GPUConnectionToWebProcess& m_gpuConnectionToWebProcess;

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in (254498 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in	2020-01-14 08:16:00 UTC (rev 254499)
@@ -66,6 +66,7 @@
     SetRate(WebKit::MediaPlayerPrivateRemoteIdentifier id, double rate)
 
     AudioTrackSetEnabled(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID, bool enabled)
+    VideoTrackSetSelected(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID, bool enabled)
 }
 
 #endif

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp (254498 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp	2020-01-14 08:16:00 UTC (rev 254499)
@@ -29,6 +29,7 @@
 #if ENABLE(GPU_PROCESS)
 
 #include "GPUConnectionToWebProcess.h"
+#include "RemoteAudioTrackProxy.h"
 #include "RemoteMediaPlayerManagerMessages.h"
 #include "RemoteMediaPlayerManagerProxy.h"
 #include "RemoteMediaPlayerProxyConfiguration.h"
@@ -37,6 +38,7 @@
 #include "RemoteMediaResourceIdentifier.h"
 #include "RemoteMediaResourceLoader.h"
 #include "RemoteMediaResourceManager.h"
+#include "RemoteVideoTrackProxy.h"
 #include "WebCoreArgumentCoders.h"
 #include <WebCore/MediaPlayer.h>
 #include <WebCore/MediaPlayerPrivate.h>
@@ -387,6 +389,29 @@
     ASSERT_NOT_REACHED();
 }
 
+void RemoteMediaPlayerProxy::mediaPlayerDidAddVideoTrack(WebCore::VideoTrackPrivate& track)
+{
+    m_videoTracks.set(&track, RemoteVideoTrackProxy::create(*this, TrackPrivateRemoteIdentifier::generate(), m_webProcessConnection.copyRef(), track));
+}
+
+void RemoteMediaPlayerProxy::mediaPlayerDidRemoveVideoTrack(WebCore::VideoTrackPrivate& track)
+{
+    ASSERT(m_videoTracks.contains(&track));
+    m_videoTracks.remove(&track);
+}
+
+void RemoteMediaPlayerProxy::videoTrackSetSelected(TrackPrivateRemoteIdentifier trackID, bool selected)
+{
+    for (auto& track : m_videoTracks.values()) {
+        if (track->identifier() == trackID) {
+            track->setSelected(selected);
+            return;
+        }
+    }
+
+    ASSERT_NOT_REACHED();
+}
+
 // FIXME: Unimplemented
 void RemoteMediaPlayerProxy::mediaPlayerResourceNotSupported()
 {
@@ -520,21 +545,11 @@
     notImplemented();
 }
 
-void RemoteMediaPlayerProxy::mediaPlayerDidAddVideoTrack(VideoTrackPrivate&)
-{
-    notImplemented();
-}
-
 void RemoteMediaPlayerProxy::mediaPlayerDidRemoveTextTrack(InbandTextTrackPrivate&)
 {
     notImplemented();
 }
 
-void RemoteMediaPlayerProxy::mediaPlayerDidRemoveVideoTrack(VideoTrackPrivate&)
-{
-    notImplemented();
-}
-
 void RemoteMediaPlayerProxy::textTrackRepresentationBoundsChanged(const IntRect&)
 {
     notImplemented();

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h (254498 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h	2020-01-14 08:16:00 UTC (rev 254499)
@@ -49,7 +49,9 @@
 
 namespace WebKit {
 
+class RemoteAudioTrackProxy;
 class RemoteMediaPlayerManagerProxy;
+class RemoteVideoTrackProxy;
 
 class RemoteMediaPlayerProxy final
     : public CanMakeWeakPtr<RemoteMediaPlayerProxy>
@@ -95,6 +97,7 @@
     void setRate(double);
 
     void audioTrackSetEnabled(TrackPrivateRemoteIdentifier, bool);
+    void videoTrackSetSelected(TrackPrivateRemoteIdentifier, bool);
 
     Ref<WebCore::PlatformMediaResource> requestResource(WebCore::ResourceRequest&&, WebCore::PlatformMediaResourceLoader::LoadOptions);
     void removeResource(RemoteMediaResourceIdentifier);
@@ -116,6 +119,8 @@
 
     void mediaPlayerDidAddAudioTrack(WebCore::AudioTrackPrivate&) final;
     void mediaPlayerDidRemoveAudioTrack(WebCore::AudioTrackPrivate&) final;
+    void mediaPlayerDidAddVideoTrack(WebCore::VideoTrackPrivate&) final;
+    void mediaPlayerDidRemoveVideoTrack(WebCore::VideoTrackPrivate&) final;
 
     // Not implemented
     void mediaPlayerResourceNotSupported() final;
@@ -158,9 +163,7 @@
     const String& mediaPlayerMediaCacheDirectory() const final;
 
     void mediaPlayerDidAddTextTrack(WebCore::InbandTextTrackPrivate&) final;
-    void mediaPlayerDidAddVideoTrack(WebCore::VideoTrackPrivate&) final;
     void mediaPlayerDidRemoveTextTrack(WebCore::InbandTextTrackPrivate&) final;
-    void mediaPlayerDidRemoveVideoTrack(WebCore::VideoTrackPrivate&) final;
 
     void textTrackRepresentationBoundsChanged(const WebCore::IntRect&) final;
 
@@ -195,6 +198,7 @@
 #endif
 
     HashMap<AudioTrackPrivate*, Ref<RemoteAudioTrackProxy>> m_audioTracks;
+    HashMap<VideoTrackPrivate*, Ref<RemoteVideoTrackProxy>> m_videoTracks;
     MediaPlayerPrivateRemoteIdentifier m_id;
     RefPtr<SandboxExtension> m_sandboxExtension;
     Ref<IPC::Connection> m_webProcessConnection;

Copied: trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp (from rev 254498, trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp) (0 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp	                        (rev 0)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp	2020-01-14 08:16:00 UTC (rev 254499)
@@ -0,0 +1,95 @@
+/*
+* Copyright (C) 2020 Apple Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in the
+*    documentation and/or other materials provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "config.h"
+#include "RemoteVideoTrackProxy.h"
+
+#if ENABLE(GPU_PROCESS)
+
+#include "RemoteMediaPlayerManagerMessages.h"
+#include "RemoteMediaPlayerProxy.h"
+#include "TrackPrivateRemoteConfiguration.h"
+
+namespace WebKit {
+
+RemoteVideoTrackProxy::RemoteVideoTrackProxy(RemoteMediaPlayerProxy& player, TrackPrivateRemoteIdentifier id, Ref<IPC::Connection>&& connection, VideoTrackPrivate& trackPrivate)
+    : m_player(player)
+    , m_identifier(id)
+    , m_webProcessConnection(WTFMove(connection))
+    , m_trackPrivate(trackPrivate)
+{
+    m_trackPrivate->setClient(this);
+    m_webProcessConnection->send(Messages::RemoteMediaPlayerManager::AddRemoteVideoTrack(m_player.idendifier(), m_identifier, configuration()), 0);
+}
+
+TrackPrivateRemoteConfiguration& RemoteVideoTrackProxy::configuration()
+{
+    static NeverDestroyed<TrackPrivateRemoteConfiguration> configuration;
+
+    configuration->id = m_trackPrivate->id();
+    configuration->label = m_trackPrivate->label();
+    configuration->language = m_trackPrivate->language();
+    configuration->trackIndex = m_trackPrivate->trackIndex();
+    configuration->startTimeVariance = m_trackPrivate->startTimeVariance();
+    configuration->selected = m_trackPrivate->selected();
+    configuration->videoKind = m_trackPrivate->kind();
+
+    return configuration.get();
+}
+
+void RemoteVideoTrackProxy::configurationChanged()
+{
+    m_webProcessConnection->send(Messages::RemoteMediaPlayerManager::RemoteVideoTrackConfigurationChanged(m_player.idendifier(), m_identifier, configuration()), 0);
+}
+
+void RemoteVideoTrackProxy::willRemove()
+{
+    m_webProcessConnection->send(Messages::RemoteMediaPlayerManager::RemoveRemoteVideoTrack(m_player.idendifier(), m_identifier), 0);
+}
+
+void RemoteVideoTrackProxy::selectedChanged(bool)
+{
+    configurationChanged();
+}
+
+void RemoteVideoTrackProxy::idChanged(const AtomString&)
+{
+    configurationChanged();
+}
+
+void RemoteVideoTrackProxy::labelChanged(const AtomString&)
+{
+    configurationChanged();
+}
+
+void RemoteVideoTrackProxy::languageChanged(const AtomString&)
+{
+    configurationChanged();
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Added: trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h (0 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h	                        (rev 0)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h	2020-01-14 08:16:00 UTC (rev 254499)
@@ -0,0 +1,76 @@
+/*
+* Copyright (C) 2020 Apple Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in the
+*    documentation and/or other materials provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include "TrackPrivateRemoteIdentifier.h"
+#include <WebCore/TrackBase.h>
+#include <WebCore/VideoTrackPrivate.h>
+
+namespace WebKit {
+
+struct TrackPrivateRemoteConfiguration;
+
+class RemoteVideoTrackProxy final
+    : public ThreadSafeRefCounted<TrackPrivateBase, WTF::DestructionThread::Main>
+    , private WebCore::VideoTrackPrivateClient {
+public:
+    static Ref<RemoteVideoTrackProxy> create(RemoteMediaPlayerProxy& player, TrackPrivateRemoteIdentifier id, Ref<IPC::Connection>&& connection, VideoTrackPrivate& trackPrivate)
+    {
+        return adoptRef(*new RemoteVideoTrackProxy(player, id, WTFMove(connection), trackPrivate));
+    }
+
+    TrackPrivateRemoteIdentifier identifier() const { return m_identifier; };
+
+    void setSelected(bool selected) { m_trackPrivate->setSelected(selected); }
+
+private:
+    RemoteVideoTrackProxy(RemoteMediaPlayerProxy&, TrackPrivateRemoteIdentifier, Ref<IPC::Connection>&&, VideoTrackPrivate&);
+    ~RemoteVideoTrackProxy() = default;
+
+    // VideoTrackPrivateClient
+    void selectedChanged(bool) final;
+
+    // TrackPrivateBaseClient
+    void idChanged(const AtomString&) final;
+    void labelChanged(const AtomString&) final;
+    void languageChanged(const AtomString&) final;
+    void willRemove() final;
+
+    TrackPrivateRemoteConfiguration& configuration();
+    void configurationChanged();
+
+    RemoteMediaPlayerProxy& m_player;
+    TrackPrivateRemoteIdentifier m_identifier;
+    Ref<IPC::Connection> m_webProcessConnection;
+    Ref<VideoTrackPrivate> m_trackPrivate;
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/GPUProcess/media/TrackPrivateRemoteConfiguration.h (254498 => 254499)


--- trunk/Source/WebKit/GPUProcess/media/TrackPrivateRemoteConfiguration.h	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/GPUProcess/media/TrackPrivateRemoteConfiguration.h	2020-01-14 08:16:00 UTC (rev 254499)
@@ -27,6 +27,8 @@
 
 #if ENABLE(GPU_PROCESS)
 
+#include <WebCore/AudioTrackPrivate.h>
+#include <WebCore/VideoTrackPrivate.h>
 #include <wtf/MediaTime.h>
 
 namespace WebKit {
@@ -37,9 +39,13 @@
     AtomString language;
     MediaTime startTimeVariance { MediaTime::zeroTime() };
     int trackIndex;
+
     bool enabled;
-    WebCore::AudioTrackPrivate::Kind kind { WebCore::AudioTrackPrivate::Kind::None };
+    WebCore::AudioTrackPrivate::Kind audioKind { WebCore::AudioTrackPrivate::Kind::None };
 
+    bool selected;
+    WebCore::VideoTrackPrivate::Kind videoKind { WebCore::VideoTrackPrivate::Kind::None };
+
     template<class Encoder>
     void encode(Encoder& encoder) const
     {
@@ -49,7 +55,9 @@
         encoder << startTimeVariance;
         encoder << trackIndex;
         encoder << enabled;
-        encoder.encodeEnum(kind);
+        encoder.encodeEnum(audioKind);
+        encoder << selected;
+        encoder.encodeEnum(videoKind);
     }
 
     template <class Decoder>
@@ -85,11 +93,21 @@
         if (!enabled)
             return WTF::nullopt;
 
-        Optional<WebCore::AudioTrackPrivate::Kind> kind;
-        decoder >> kind;
-        if (!kind)
+        Optional<WebCore::AudioTrackPrivate::Kind> audioKind;
+        decoder >> audioKind;
+        if (!audioKind)
             return WTF::nullopt;
 
+        Optional<bool> selected;
+        decoder >> selected;
+        if (!selected)
+            return WTF::nullopt;
+
+        Optional<WebCore::VideoTrackPrivate::Kind> videoKind;
+        decoder >> videoKind;
+        if (!videoKind)
+            return WTF::nullopt;
+
         return {{
             WTFMove(*id),
             WTFMove(*label),
@@ -97,7 +115,9 @@
             WTFMove(*startTimeVariance),
             *trackIndex,
             *enabled,
-            *kind,
+            *audioKind,
+            *selected,
+            *videoKind,
         }};
     }
 };

Modified: trunk/Source/WebKit/Sources.txt (254498 => 254499)


--- trunk/Source/WebKit/Sources.txt	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/Sources.txt	2020-01-14 08:16:00 UTC (rev 254499)
@@ -32,6 +32,7 @@
 GPUProcess/media/RemoteMediaResource.cpp
 GPUProcess/media/RemoteMediaResourceLoader.cpp
 GPUProcess/media/RemoteMediaResourceManager.cpp
+GPUProcess/media/RemoteVideoTrackProxy.cpp
 
 NetworkProcess/AdClickAttributionManager.cpp
 NetworkProcess/NetworkActivityTracker.cpp
@@ -516,6 +517,7 @@
 WebProcess/GPU/media/RemoteMediaPlayerManager.cpp
 WebProcess/GPU/media/RemoteMediaPlayerMIMETypeCache.cpp @no-unify
 WebProcess/GPU/media/RemoteMediaResourceProxy.cpp
+WebProcess/GPU/media/VideoTrackPrivateRemote.cpp
 WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp
 WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp
 WebProcess/GPU/webrtc/MediaRecorderProvider.cpp

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (254498 => 254499)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-01-14 08:16:00 UTC (rev 254499)
@@ -2057,6 +2057,10 @@
 		071BC57D23CA56D200680D7C /* TrackPrivateRemoteIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TrackPrivateRemoteIdentifier.h; sourceTree = "<group>"; };
 		071BC57E23CA5DB100680D7C /* RemoteAudioTrackProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteAudioTrackProxy.cpp; sourceTree = "<group>"; };
 		071BC57F23CA5DB100680D7C /* RemoteAudioTrackProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteAudioTrackProxy.h; sourceTree = "<group>"; };
+		071BC58223CC2BD300680D7C /* VideoTrackPrivateRemote.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoTrackPrivateRemote.h; sourceTree = "<group>"; };
+		071BC58323CC2BD500680D7C /* VideoTrackPrivateRemote.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VideoTrackPrivateRemote.cpp; sourceTree = "<group>"; };
+		071BC58423CC2C0900680D7C /* RemoteVideoTrackProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteVideoTrackProxy.cpp; sourceTree = "<group>"; };
+		071BC58523CC2C0900680D7C /* RemoteVideoTrackProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteVideoTrackProxy.h; sourceTree = "<group>"; };
 		0725EFAB239AE38400A538A9 /* RemoteMediaPlayerManagerProxy.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = RemoteMediaPlayerManagerProxy.messages.in; sourceTree = "<group>"; };
 		0725EFAC239AE38500A538A9 /* RemoteMediaPlayerManagerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteMediaPlayerManagerProxy.h; sourceTree = "<group>"; };
 		0725EFAD239B024500A538A9 /* RemoteMediaPlayerManagerProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteMediaPlayerManagerProxy.cpp; sourceTree = "<group>"; };
@@ -5189,6 +5193,8 @@
 				07B3B46F23AB2CB300BA5B12 /* RemoteMediaPlayerState.h */,
 				1D32F89D23A84C5B00B1EA6A /* RemoteMediaResourceProxy.cpp */,
 				1D32F89B23A84BA600B1EA6A /* RemoteMediaResourceProxy.h */,
+				071BC58323CC2BD500680D7C /* VideoTrackPrivateRemote.cpp */,
+				071BC58223CC2BD300680D7C /* VideoTrackPrivateRemote.h */,
 			);
 			path = media;
 			sourceTree = "<group>";
@@ -5212,6 +5218,8 @@
 				1DA4089E23A827780058C950 /* RemoteMediaResourceManager.cpp */,
 				1DA4089423A80A3E0058C950 /* RemoteMediaResourceManager.h */,
 				1D32F8A623A8601900B1EA6A /* RemoteMediaResourceManager.messages.in */,
+				071BC58423CC2C0900680D7C /* RemoteVideoTrackProxy.cpp */,
+				071BC58523CC2C0900680D7C /* RemoteVideoTrackProxy.h */,
 				071BC57B23CA532400680D7C /* TrackPrivateRemoteConfiguration.h */,
 				071BC57D23CA56D200680D7C /* TrackPrivateRemoteIdentifier.h */,
 			);

Modified: trunk/Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp (254498 => 254499)


--- trunk/Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp	2020-01-14 08:16:00 UTC (rev 254499)
@@ -63,7 +63,7 @@
         auto changed = !m_label.isEmpty();
         m_label = configuration.label;
         if (changed && client())
-            client()->idChanged(m_label);
+            client()->labelChanged(m_label);
     }
 
     if (configuration.language != m_language) {
@@ -70,12 +70,12 @@
         auto changed = !m_language.isEmpty();
         m_language = configuration.language;
         if (changed && client())
-            client()->idChanged(m_language);
+            client()->languageChanged(m_language);
     }
 
     m_trackIndex = configuration.trackIndex;
     m_startTimeVariance = configuration.startTimeVariance;
-    m_kind = configuration.kind;
+    m_kind = configuration.audioKind;
     setEnabled(configuration.enabled);
 }
 

Modified: trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp (254498 => 254499)


--- trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp	2020-01-14 08:16:00 UTC (rev 254499)
@@ -32,6 +32,7 @@
 #include "Logging.h"
 #include "RemoteMediaPlayerManagerProxyMessages.h"
 #include "SandboxExtension.h"
+#include "VideoTrackPrivateRemote.h"
 #include "WebCoreArgumentCoders.h"
 #include "WebProcess.h"
 #include <WebCore/MediaPlayer.h>
@@ -386,12 +387,15 @@
 
 void MediaPlayerPrivateRemote::addRemoteAudioTrack(TrackPrivateRemoteIdentifier identifier, TrackPrivateRemoteConfiguration&& configuration)
 {
-    ASSERT(!m_audioTracks.contains(identifier));
-    if (m_audioTracks.contains(identifier))
+    auto addResult = m_audioTracks.ensure(identifier, [&] {
+        return AudioTrackPrivateRemote::create(*this, identifier, WTFMove(configuration));
+    });
+    ASSERT(addResult.isNewEntry);
+
+    if (!addResult.isNewEntry)
         return;
 
-    auto track = AudioTrackPrivateRemote::create(*this, identifier, WTFMove(configuration));
-    m_player->addAudioTrack(m_audioTracks.add(identifier, WTFMove(track)).iterator->value);
+    m_player->addAudioTrack(addResult.iterator->value);
 }
 
 void MediaPlayerPrivateRemote::removeRemoteAudioTrack(TrackPrivateRemoteIdentifier id)
@@ -412,6 +416,37 @@
         track->updateConfiguration(WTFMove(configuration));
 }
 
+void MediaPlayerPrivateRemote::addRemoteVideoTrack(TrackPrivateRemoteIdentifier identifier, TrackPrivateRemoteConfiguration&& configuration)
+{
+    auto addResult = m_videoTracks.ensure(identifier, [&] {
+        return VideoTrackPrivateRemote::create(*this, identifier, WTFMove(configuration));
+    });
+    ASSERT(addResult.isNewEntry);
+
+    if (!addResult.isNewEntry)
+        return;
+
+    m_player->addVideoTrack(addResult.iterator->value);
+}
+
+void MediaPlayerPrivateRemote::removeRemoteVideoTrack(TrackPrivateRemoteIdentifier id)
+{
+    ASSERT(m_videoTracks.contains(id));
+
+    if (auto* track = m_videoTracks.get(id)) {
+        m_player->removeVideoTrack(*track);
+        m_videoTracks.remove(id);
+    }
+}
+
+void MediaPlayerPrivateRemote::remoteVideoTrackConfigurationChanged(TrackPrivateRemoteIdentifier id, TrackPrivateRemoteConfiguration&& configuration)
+{
+    ASSERT(m_videoTracks.contains(id));
+
+    if (const auto& track = m_videoTracks.get(id))
+        track->updateConfiguration(WTFMove(configuration));
+}
+
 // FIXME: Unimplemented
 
 #if ENABLE(MEDIA_SOURCE)

Modified: trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h (254498 => 254499)


--- trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h	2020-01-14 08:16:00 UTC (rev 254499)
@@ -41,6 +41,7 @@
 namespace WebKit {
 
 class AudioTrackPrivateRemote;
+class VideoTrackPrivateRemote;
 struct TrackPrivateRemoteConfiguration;
 
 class MediaPlayerPrivateRemote final
@@ -82,6 +83,10 @@
     void removeRemoteAudioTrack(TrackPrivateRemoteIdentifier);
     void remoteAudioTrackConfigurationChanged(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
 
+    void addRemoteVideoTrack(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
+    void removeRemoteVideoTrack(TrackPrivateRemoteIdentifier);
+    void remoteVideoTrackConfigurationChanged(TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
+
     void requestResource(RemoteMediaResourceIdentifier, WebCore::ResourceRequest&&, WebCore::PlatformMediaResourceLoader::LoadOptions);
     void removeResource(RemoteMediaResourceIdentifier);
 
@@ -321,6 +326,7 @@
 
     HashMap<RemoteMediaResourceIdentifier, RefPtr<WebCore::PlatformMediaResource>> m_mediaResources;
     HashMap<TrackPrivateRemoteIdentifier, Ref<AudioTrackPrivateRemote>> m_audioTracks;
+    HashMap<TrackPrivateRemoteIdentifier, Ref<VideoTrackPrivateRemote>> m_videoTracks;
 
     double m_volume { 1 };
     double m_rate { 1 };

Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp (254498 => 254499)


--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.cpp	2020-01-14 08:16:00 UTC (rev 254499)
@@ -321,6 +321,24 @@
         player->remoteAudioTrackConfigurationChanged(trackID, WTFMove(configuration));
 }
 
+void RemoteMediaPlayerManager::addRemoteVideoTrack(MediaPlayerPrivateRemoteIdentifier playerID, TrackPrivateRemoteIdentifier trackID, TrackPrivateRemoteConfiguration&& configuration)
+{
+    if (auto player = m_players.get(playerID))
+        player->addRemoteVideoTrack(trackID, WTFMove(configuration));
+}
+
+void RemoteMediaPlayerManager::removeRemoteVideoTrack(MediaPlayerPrivateRemoteIdentifier playerID, TrackPrivateRemoteIdentifier trackID)
+{
+    if (auto player = m_players.get(playerID))
+        player->removeRemoteVideoTrack(trackID);
+}
+
+void RemoteMediaPlayerManager::remoteVideoTrackConfigurationChanged(MediaPlayerPrivateRemoteIdentifier playerID, TrackPrivateRemoteIdentifier trackID, TrackPrivateRemoteConfiguration&& configuration)
+{
+    if (auto player = m_players.get(playerID))
+        player->remoteVideoTrackConfigurationChanged(trackID, WTFMove(configuration));
+}
+
 void RemoteMediaPlayerManager::requestResource(MediaPlayerPrivateRemoteIdentifier id, RemoteMediaResourceIdentifier remoteMediaResourceIdentifier, ResourceRequest&& request, PlatformMediaResourceLoader::LoadOptions options, CompletionHandler<void()>&& completionHandler)
 {
     if (const auto& player = m_players.get(id))

Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h (254498 => 254499)


--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.h	2020-01-14 08:16:00 UTC (rev 254499)
@@ -89,10 +89,15 @@
     void updateCachedState(MediaPlayerPrivateRemoteIdentifier, RemoteMediaPlayerState&&);
     void characteristicChanged(MediaPlayerPrivateRemoteIdentifier, bool hasAudio, bool hasVideo, WebCore::MediaPlayerEnums::MovieLoadType);
     void sizeChanged(MediaPlayerPrivateRemoteIdentifier, WebCore::FloatSize);
+
     void addRemoteAudioTrack(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
     void removeRemoteAudioTrack(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier);
     void remoteAudioTrackConfigurationChanged(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
 
+    void addRemoteVideoTrack(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
+    void removeRemoteVideoTrack(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier);
+    void remoteVideoTrackConfigurationChanged(MediaPlayerPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
+
     void requestResource(MediaPlayerPrivateRemoteIdentifier, RemoteMediaResourceIdentifier, WebCore::ResourceRequest&&, WebCore::PlatformMediaResourceLoader::LoadOptions, CompletionHandler<void()>&&);
     void removeResource(MediaPlayerPrivateRemoteIdentifier, RemoteMediaResourceIdentifier);
 

Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in (254498 => 254499)


--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in	2020-01-14 07:55:01 UTC (rev 254498)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in	2020-01-14 08:16:00 UTC (rev 254499)
@@ -41,6 +41,10 @@
     RemoveRemoteAudioTrack(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID)
     RemoteAudioTrackConfigurationChanged(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
 
+    AddRemoteVideoTrack(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
+    RemoveRemoteVideoTrack(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID)
+    RemoteVideoTrackConfigurationChanged(WebKit::MediaPlayerPrivateRemoteIdentifier playerID, WebKit::TrackPrivateRemoteIdentifier trackID, struct WebKit::TrackPrivateRemoteConfiguration configuration)
+
     RequestResource(WebKit::MediaPlayerPrivateRemoteIdentifier mediaPlayerPrivateRemoteIdentifier, WebKit::RemoteMediaResourceIdentifier remoteMediaResourceIdentifier, WebCore::ResourceRequest request, enum:uint8_t WebCore::PlatformMediaResourceLoader::LoadOptions options) -> () Async
     RemoveResource(WebKit::MediaPlayerPrivateRemoteIdentifier mediaPlayerPrivateRemoteIdentifier, WebKit::RemoteMediaResourceIdentifier remoteMediaResourceIdentifier)
 }

Copied: trunk/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.cpp (from rev 254498, trunk/Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp) (0 => 254499)


--- trunk/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.cpp	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.cpp	2020-01-14 08:16:00 UTC (rev 254499)
@@ -0,0 +1,83 @@
+/*
+* Copyright (C) 2020 Apple Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in the
+*    documentation and/or other materials provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "config.h"
+#include "VideoTrackPrivateRemote.h"
+
+#if ENABLE(GPU_PROCESS)
+
+#include "MediaPlayerPrivateRemote.h"
+#include "RemoteMediaPlayerManagerProxyMessages.h"
+
+namespace WebKit {
+
+VideoTrackPrivateRemote::VideoTrackPrivateRemote(MediaPlayerPrivateRemote& player, TrackPrivateRemoteIdentifier idendifier, TrackPrivateRemoteConfiguration&& configuration)
+    : m_player(player)
+    , m_idendifier(idendifier)
+{
+    updateConfiguration(WTFMove(configuration));
+}
+
+void VideoTrackPrivateRemote::setSelected(bool selected)
+{
+    if (selected != this->selected())
+        m_player.connection().send(Messages::RemoteMediaPlayerManagerProxy::VideoTrackSetSelected(m_player.itentifier(), m_idendifier, selected), 0);
+
+    VideoTrackPrivate::setSelected(selected);
+}
+
+void VideoTrackPrivateRemote::updateConfiguration(TrackPrivateRemoteConfiguration&& configuration)
+{
+    if (configuration.id != m_id) {
+        auto changed = !m_id.isEmpty();
+        m_id = configuration.id;
+        if (changed && client())
+            client()->idChanged(m_id);
+    }
+
+    if (configuration.label != m_label) {
+        auto changed = !m_label.isEmpty();
+        m_label = configuration.label;
+        if (changed && client())
+            client()->labelChanged(m_label);
+    }
+
+    if (configuration.language != m_language) {
+        auto changed = !m_language.isEmpty();
+        m_language = configuration.language;
+        if (changed && client())
+            client()->languageChanged(m_language);
+    }
+
+    m_trackIndex = configuration.trackIndex;
+    m_startTimeVariance = configuration.startTimeVariance;
+    m_kind = configuration.videoKind;
+    setSelected(configuration.selected);
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Added: trunk/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.h (0 => 254499)


--- trunk/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.h	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.h	2020-01-14 08:16:00 UTC (rev 254499)
@@ -0,0 +1,74 @@
+/*
+* Copyright (C) 2020 Apple Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in the
+*    documentation and/or other materials provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include "TrackPrivateRemoteConfiguration.h"
+#include "TrackPrivateRemoteIdentifier.h"
+#include <WebCore/VideoTrackPrivate.h>
+
+namespace WebKit {
+
+class MediaPlayerPrivateRemote;
+struct TrackPrivateRemoteConfiguration;
+
+class VideoTrackPrivateRemote : public WebCore::VideoTrackPrivate {
+    WTF_MAKE_NONCOPYABLE(VideoTrackPrivateRemote)
+public:
+    static Ref<VideoTrackPrivateRemote> create(MediaPlayerPrivateRemote& player, TrackPrivateRemoteIdentifier idendifier, TrackPrivateRemoteConfiguration&& configuration)
+    {
+        return adoptRef(*new VideoTrackPrivateRemote(player, idendifier, WTFMove(configuration)));
+    }
+
+    void updateConfiguration(TrackPrivateRemoteConfiguration&&);
+
+    using VideoTrackKind = WebCore::VideoTrackPrivate::Kind;
+    VideoTrackKind kind() const final { return m_kind; }
+    AtomString id() const final { return m_id; }
+    AtomString label() const final { return m_label; }
+    AtomString language() const final { return m_language; }
+    int trackIndex() const final { return m_trackIndex; }
+
+protected:
+    VideoTrackPrivateRemote(MediaPlayerPrivateRemote&, TrackPrivateRemoteIdentifier, TrackPrivateRemoteConfiguration&&);
+
+    void setSelected(bool) final;
+
+    MediaPlayerPrivateRemote& m_player;
+    VideoTrackKind m_kind { None };
+    AtomString m_id;
+    AtomString m_label;
+    AtomString m_language;
+    int m_trackIndex { -1 };
+    MediaTime m_startTimeVariance { MediaTime::zeroTime() };
+    TrackPrivateRemoteIdentifier m_idendifier;
+};
+
+} // namespace WebKit
+
+#endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to