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