Diff
Modified: trunk/Source/WebCore/ChangeLog (274248 => 274249)
--- trunk/Source/WebCore/ChangeLog 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/ChangeLog 2021-03-11 00:05:12 UTC (rev 274249)
@@ -1,3 +1,44 @@
+2021-03-10 Devin Rousso <[email protected]>
+
+ Add plumbing for `defaultPlaybackRate` to AVKit
+ https://bugs.webkit.org/show_bug.cgi?id=222991
+ <rdar://problem/75012417>
+
+ Reviewed by Eric Carlson.
+
+ * platform/cocoa/PlaybackSessionModel.h:
+ (WebCore::PlaybackSessionModelClient::rateChanged):
+ * platform/cocoa/PlaybackSessionModelMediaElement.h:
+ * platform/cocoa/PlaybackSessionModelMediaElement.mm:
+ (WebCore::PlaybackSessionModelMediaElement::updateForEventName):
+ (WebCore::PlaybackSessionModelMediaElement::setDefaultPlaybackRate): Added.
+ (WebCore::PlaybackSessionModelMediaElement::defaultPlaybackRate const): Added.
+ (WebCore::PlaybackSessionModelMediaElement::playbackRate const):
+
+ * platform/ios/PlaybackSessionInterfaceAVKit.h:
+ * platform/ios/PlaybackSessionInterfaceAVKit.mm:
+ (WebCore::PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit):
+ (WebCore::PlaybackSessionInterfaceAVKit::rateChanged):
+ * platform/ios/WebVideoFullscreenControllerAVKit.mm:
+ (VideoFullscreenControllerContext::rateChanged):
+ (VideoFullscreenControllerContext::setDefaultPlaybackRate): Added.
+ (VideoFullscreenControllerContext::defaultPlaybackRate const): Added.
+ * platform/ios/WebAVPlayerController.h:
+ * platform/ios/WebAVPlayerController.mm:
+ (-[WebAVPlayerController init]):
+ (-[WebAVPlayerController dealloc]):
+ (-[WebAVPlayerController observeValueForKeyPath:ofObject:change:context:]):
+
+ * platform/mac/PlaybackSessionInterfaceMac.h:
+ * platform/mac/PlaybackSessionInterfaceMac.mm:
+ (WebCore::PlaybackSessionInterfaceMac::rateChanged):
+ (WebCore::PlaybackSessionInterfaceMac::setPlayBackControlsManager):
+ * platform/mac/VideoFullscreenInterfaceMac.h:
+ * platform/mac/VideoFullscreenInterfaceMac.mm:
+ (WebCore::VideoFullscreenInterfaceMac::rateChanged):
+ * platform/mac/WebPlaybackControlsManager.h:
+ * platform/mac/WebPlaybackControlsManager.mm:
+
2021-03-10 Antoine Quint <[email protected]>
Improve font-variation-settings interpolation
Modified: trunk/Source/WebCore/PAL/ChangeLog (274248 => 274249)
--- trunk/Source/WebCore/PAL/ChangeLog 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/PAL/ChangeLog 2021-03-11 00:05:12 UTC (rev 274249)
@@ -1,3 +1,13 @@
+2021-03-10 Devin Rousso <[email protected]>
+
+ Add plumbing for `defaultPlaybackRate` to AVKit
+ https://bugs.webkit.org/show_bug.cgi?id=222991
+ <rdar://problem/75012417>
+
+ Reviewed by Eric Carlson.
+
+ * pal/spi/cocoa/AVKitSPI.h:
+
2021-03-09 Ben Nham <[email protected]>
Adopt new NSURLSessionConfiguration SPI for connection cache configuration
Modified: trunk/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h (274248 => 274249)
--- trunk/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -230,6 +230,11 @@
#endif // USE(APPLE_INTERNAL_SDK)
+#if PLATFORM(IOS_FAMILY)
+@interface AVPlayerController ()
+@property (NS_NONATOMIC_IOSONLY) double defaultPlaybackRate;
+@end
+#endif // PLATFORM(IOS_FAMILY)
#if HAVE(AVOBSERVATIONCONTROLLER)
#if USE(APPLE_INTERNAL_SDK)
Modified: trunk/Source/WebCore/platform/cocoa/PlaybackSessionModel.h (274248 => 274249)
--- trunk/Source/WebCore/platform/cocoa/PlaybackSessionModel.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/cocoa/PlaybackSessionModel.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -55,6 +55,7 @@
virtual void beginScanningForward() = 0;
virtual void beginScanningBackward() = 0;
virtual void endScanning() = 0;
+ virtual void setDefaultPlaybackRate(float) = 0;
virtual void selectAudioMediaOption(uint64_t index) = 0;
virtual void selectLegibleMediaOption(uint64_t index) = 0;
virtual void togglePictureInPicture() = 0;
@@ -72,6 +73,7 @@
virtual double bufferedTime() const = 0;
virtual bool isPlaying() const = 0;
virtual bool isScrubbing() const = 0;
+ virtual float defaultPlaybackRate() const = 0;
virtual float playbackRate() const = 0;
virtual Ref<TimeRanges> seekableRanges() const = 0;
virtual double seekableTimeRangesLastModifiedTime() const = 0;
@@ -98,7 +100,7 @@
virtual void currentTimeChanged(double /* currentTime */, double /* anchorTime */) { }
virtual void bufferedTimeChanged(double) { }
virtual void playbackStartedTimeChanged(double /* playbackStartedTime */) { }
- virtual void rateChanged(bool /* isPlaying */, float /* playbackRate */) { }
+ virtual void rateChanged(bool /* isPlaying */, float /* playbackRate */, float /* defaultPlaybackRate */) { }
virtual void seekableRangesChanged(const TimeRanges&, double /* lastModified */, double /* liveInterval */) { }
virtual void canPlayFastReverseChanged(bool) { }
virtual void audioMediaSelectionOptionsChanged(const Vector<MediaSelectionOption>& /* options */, uint64_t /* selectedIndex */) { }
Modified: trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.h (274248 => 274249)
--- trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -68,6 +68,7 @@
WEBCORE_EXPORT void beginScanningForward() final;
WEBCORE_EXPORT void beginScanningBackward() final;
WEBCORE_EXPORT void endScanning() final;
+ WEBCORE_EXPORT void setDefaultPlaybackRate(float) final;
WEBCORE_EXPORT void selectAudioMediaOption(uint64_t index) final;
WEBCORE_EXPORT void selectLegibleMediaOption(uint64_t index) final;
WEBCORE_EXPORT void togglePictureInPicture() final;
@@ -82,6 +83,7 @@
double bufferedTime() const final;
bool isPlaying() const final;
bool isScrubbing() const final { return false; }
+ float defaultPlaybackRate() const final;
float playbackRate() const final;
Ref<TimeRanges> seekableRanges() const final;
double seekableTimeRangesLastModifiedTime() const final;
Modified: trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm (274248 => 274249)
--- trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -164,8 +164,9 @@
|| eventName == eventNames().canplayEvent) {
bool isPlaying = this->isPlaying();
float playbackRate = isStalled() ? StalledPlaybackRate : this->playbackRate();
+ float defaultPlaybackRate = this->defaultPlaybackRate();
for (auto client : m_clients)
- client->rateChanged(isPlaying, playbackRate);
+ client->rateChanged(isPlaying, playbackRate, defaultPlaybackRate);
}
if (all
@@ -301,6 +302,12 @@
m_mediaElement->endScanning();
}
+void PlaybackSessionModelMediaElement::setDefaultPlaybackRate(float defaultPlaybackRate)
+{
+ if (m_mediaElement)
+ m_mediaElement->setDefaultPlaybackRate(defaultPlaybackRate);
+}
+
void PlaybackSessionModelMediaElement::selectAudioMediaOption(uint64_t selectedAudioIndex)
{
if (!m_mediaElement)
@@ -468,9 +475,14 @@
return m_mediaElement && m_mediaElement->readyState() <= HTMLMediaElement::HAVE_CURRENT_DATA;
}
+float PlaybackSessionModelMediaElement::defaultPlaybackRate() const
+{
+ return m_mediaElement ? m_mediaElement->defaultPlaybackRate() : -1;
+}
+
float PlaybackSessionModelMediaElement::playbackRate() const
{
- return m_mediaElement ? m_mediaElement->playbackRate() : 0;
+ return m_mediaElement ? m_mediaElement->playbackRate() : -1;
}
Ref<TimeRanges> PlaybackSessionModelMediaElement::seekableRanges() const
Modified: trunk/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.h (274248 => 274249)
--- trunk/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -63,7 +63,7 @@
void durationChanged(double) override;
void currentTimeChanged(double currentTime, double anchorTime) override;
void bufferedTimeChanged(double) override;
- void rateChanged(bool isPlaying, float playbackRate) override;
+ void rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate) override;
void seekableRangesChanged(const TimeRanges&, double lastModifiedTime, double liveUpdateInterval) override;
void canPlayFastReverseChanged(bool) override;
void audioMediaSelectionOptionsChanged(const Vector<MediaSelectionOption>& options, uint64_t selectedIndex) override;
Modified: trunk/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm (274248 => 274249)
--- trunk/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -61,7 +61,7 @@
durationChanged(model.duration());
currentTimeChanged(model.currentTime(), [[NSProcessInfo processInfo] systemUptime]);
bufferedTimeChanged(model.bufferedTime());
- rateChanged(model.isPlaying(), model.playbackRate());
+ rateChanged(model.isPlaying(), model.playbackRate(), model.defaultPlaybackRate());
seekableRangesChanged(model.seekableRanges(), model.seekableTimeRangesLastModifiedTime(), model.liveUpdateInterval());
canPlayFastReverseChanged(model.canPlayFastReverse());
audioMediaSelectionOptionsChanged(model.audioMediaSelectionOptions(), model.audioMediaSelectedIndex());
@@ -124,9 +124,10 @@
playerController.loadedTimeRanges = @[@0, @(normalizedBufferedTime)];
}
-void PlaybackSessionInterfaceAVKit::rateChanged(bool isPlaying, float playbackRate)
+void PlaybackSessionInterfaceAVKit::rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate)
{
[m_playerController setRate:isPlaying ? playbackRate : 0.];
+ [m_playerController setDefaultPlaybackRate:defaultPlaybackRate];
}
void PlaybackSessionInterfaceAVKit::seekableRangesChanged(const TimeRanges& timeRanges, double lastModifiedTime, double liveUpdateInterval)
Modified: trunk/Source/WebCore/platform/ios/WebAVPlayerController.h (274248 => 274249)
--- trunk/Source/WebCore/platform/ios/WebAVPlayerController.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/ios/WebAVPlayerController.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -62,6 +62,7 @@
@property (getter=isPlaying) BOOL playing;
@property BOOL canPause;
@property BOOL canTogglePlayback;
+@property double defaultPlaybackRate;
@property double rate;
@property BOOL canSeek;
@property NSTimeInterval contentDuration;
Modified: trunk/Source/WebCore/platform/ios/WebAVPlayerController.mm (274248 => 274249)
--- trunk/Source/WebCore/platform/ios/WebAVPlayerController.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/ios/WebAVPlayerController.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -49,6 +49,7 @@
static void * WebAVPlayerControllerSeekableTimeRangesObserverContext = &WebAVPlayerControllerSeekableTimeRangesObserverContext;
static void * WebAVPlayerControllerHasLiveStreamingContentObserverContext = &WebAVPlayerControllerHasLiveStreamingContentObserverContext;
static void * WebAVPlayerControllerIsPlayingOnSecondScreenObserverContext = &WebAVPlayerControllerIsPlayingOnSecondScreenObserverContext;
+static void * WebAVPlayerControllerDefaultPlaybackRateObserverContext = &WebAVPlayerControllerDefaultPlaybackRateObserverContext;
static double WebAVPlayerControllerLiveStreamSeekableTimeRangeDurationHysteresisDelta = 3.0; // Minimum delta of time required to change the duration of the seekable time range.
static double WebAVPlayerControllerLiveStreamMinimumTargetDuration = 1.0; // Minimum segment duration to be considered valid.
@@ -75,6 +76,7 @@
[self addObserver:self forKeyPath:@"seekableTimeRanges" options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial) context:WebAVPlayerControllerSeekableTimeRangesObserverContext];
[self addObserver:self forKeyPath:@"hasLiveStreamingContent" options:NSKeyValueObservingOptionInitial context:WebAVPlayerControllerHasLiveStreamingContentObserverContext];
[self addObserver:self forKeyPath:@"playingOnSecondScreen" options:NSKeyValueObservingOptionNew context:WebAVPlayerControllerIsPlayingOnSecondScreenObserverContext];
+ [self addObserver:self forKeyPath:@"defaultPlaybackRate" options:NSKeyValueObservingOptionNew context:WebAVPlayerControllerDefaultPlaybackRateObserverContext];
return self;
}
@@ -84,6 +86,7 @@
[self removeObserver:self forKeyPath:@"seekableTimeRanges" context:WebAVPlayerControllerSeekableTimeRangesObserverContext];
[self removeObserver:self forKeyPath:@"hasLiveStreamingContent" context:WebAVPlayerControllerHasLiveStreamingContentObserverContext];
[self removeObserver:self forKeyPath:@"playingOnSecondScreen" context:WebAVPlayerControllerIsPlayingOnSecondScreenObserverContext];
+ [self removeObserver:self forKeyPath:@"defaultPlaybackRate" context:WebAVPlayerControllerDefaultPlaybackRateObserverContext];
[_playerControllerProxy release];
[_loadedTimeRanges release];
@@ -588,12 +591,27 @@
[self updateMinMaxTiming];
}
}
- } else if (WebAVPlayerControllerHasLiveStreamingContentObserverContext == context)
+ return;
+ }
+
+ if (WebAVPlayerControllerHasLiveStreamingContentObserverContext == context) {
[self updateMinMaxTiming];
- else if (WebAVPlayerControllerIsPlayingOnSecondScreenObserverContext == context) {
+ return;
+ }
+
+ if (WebAVPlayerControllerIsPlayingOnSecondScreenObserverContext == context) {
if (auto* delegate = self.delegate)
delegate->setPlayingOnSecondScreen(_playingOnSecondScreen);
+ return;
}
+
+ if (WebAVPlayerControllerDefaultPlaybackRateObserverContext == context) {
+ if (auto* delegate = self.delegate)
+ delegate->setDefaultPlaybackRate(_defaultPlaybackRate);
+ return;
+ }
+
+ ASSERT_NOT_REACHED();
}
- (void)updateMinMaxTiming
Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm (274248 => 274249)
--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -147,6 +147,7 @@
void beginScanningForward() override;
void beginScanningBackward() override;
void endScanning() override;
+ void setDefaultPlaybackRate(float) override;
void selectAudioMediaOption(uint64_t) override;
void selectLegibleMediaOption(uint64_t) override;
double duration() const override;
@@ -155,6 +156,7 @@
double bufferedTime() const override;
bool isPlaying() const override;
bool isScrubbing() const override { return false; }
+ float defaultPlaybackRate() const override;
float playbackRate() const override;
Ref<TimeRanges> seekableRanges() const override;
double seekableTimeRangesLastModifiedTime() const override;
@@ -178,7 +180,7 @@
void durationChanged(double) override;
void currentTimeChanged(double currentTime, double anchorTime) override;
void bufferedTimeChanged(double) override;
- void rateChanged(bool isPlaying, float playbackRate) override;
+ void rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate) override;
void seekableRangesChanged(const TimeRanges&, double lastModifiedTime, double liveUpdateInterval) override;
void canPlayFastReverseChanged(bool) override;
void audioMediaSelectionOptionsChanged(const Vector<MediaSelectionOption>& options, uint64_t selectedIndex) override;
@@ -411,17 +413,17 @@
client->bufferedTimeChanged(bufferedTime);
}
-void VideoFullscreenControllerContext::rateChanged(bool isPlaying, float playbackRate)
+void VideoFullscreenControllerContext::rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate)
{
if (WebThreadIsCurrent()) {
- RunLoop::main().dispatch([protectedThis = makeRefPtr(this), isPlaying, playbackRate] {
- protectedThis->rateChanged(isPlaying, playbackRate);
+ RunLoop::main().dispatch([protectedThis = makeRefPtr(this), isPlaying, playbackRate, defaultPlaybackRate] {
+ protectedThis->rateChanged(isPlaying, playbackRate, defaultPlaybackRate);
});
return;
}
for (auto& client : m_playbackClients)
- client->rateChanged(isPlaying, playbackRate);
+ client->rateChanged(isPlaying, playbackRate, defaultPlaybackRate);
}
void VideoFullscreenControllerContext::hasVideoChanged(bool hasVideo)
@@ -836,6 +838,15 @@
});
}
+void VideoFullscreenControllerContext::setDefaultPlaybackRate(float defaultPlaybackRate)
+{
+ ASSERT(isUIThread());
+ WebThreadRun([protectedThis = makeRefPtr(this), this, defaultPlaybackRate] {
+ if (m_playbackModel)
+ m_playbackModel->setDefaultPlaybackRate(defaultPlaybackRate);
+ });
+}
+
void VideoFullscreenControllerContext::selectAudioMediaOption(uint64_t index)
{
ASSERT(isUIThread());
@@ -878,6 +889,12 @@
return m_playbackModel ? m_playbackModel->isPlaying() : false;
}
+float VideoFullscreenControllerContext::defaultPlaybackRate() const
+{
+ ASSERT(isUIThread());
+ return m_playbackModel ? m_playbackModel->defaultPlaybackRate() : 0;
+}
+
float VideoFullscreenControllerContext::playbackRate() const
{
ASSERT(isUIThread());
Modified: trunk/Source/WebCore/platform/mac/PlaybackSessionInterfaceMac.h (274248 => 274249)
--- trunk/Source/WebCore/platform/mac/PlaybackSessionInterfaceMac.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/mac/PlaybackSessionInterfaceMac.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -52,7 +52,7 @@
// PlaybackSessionModelClient
void durationChanged(double) final;
void currentTimeChanged(double /*currentTime*/, double /*anchorTime*/) final;
- void rateChanged(bool /*isPlaying*/, float /*playbackRate*/) final;
+ void rateChanged(bool /*isPlaying*/, float /*playbackRate*/, float /* defaultPlaybackRate */) final;
void seekableRangesChanged(const TimeRanges&, double /*lastModifiedTime*/, double /*liveUpdateInterval*/) final;
void audioMediaSelectionOptionsChanged(const Vector<MediaSelectionOption>& /*options*/, uint64_t /*selectedIndex*/) final;
void legibleMediaSelectionOptionsChanged(const Vector<MediaSelectionOption>& /*options*/, uint64_t /*selectedIndex*/) final;
Modified: trunk/Source/WebCore/platform/mac/PlaybackSessionInterfaceMac.mm (274248 => 274249)
--- trunk/Source/WebCore/platform/mac/PlaybackSessionInterfaceMac.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/mac/PlaybackSessionInterfaceMac.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -92,11 +92,12 @@
#endif
}
-void PlaybackSessionInterfaceMac::rateChanged(bool isPlaying, float playbackRate)
+void PlaybackSessionInterfaceMac::rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate)
{
#if ENABLE(WEB_PLAYBACK_CONTROLS_MANAGER)
WebPlaybackControlsManager* controlsManager = playBackControlsManager();
[controlsManager setRate:isPlaying ? playbackRate : 0.];
+ [controlsManager setDefaultPlaybackRate:defaultPlaybackRate];
[controlsManager setPlaying:isPlaying];
updatePlaybackControlsManagerTiming(m_playbackSessionModel ? m_playbackSessionModel->currentTime() : 0, [[NSProcessInfo processInfo] systemUptime], playbackRate, isPlaying);
#else
@@ -237,6 +238,7 @@
manager.contentDuration = duration;
manager.hasEnabledAudio = duration > 0;
manager.hasEnabledVideo = duration > 0;
+ manager.defaultPlaybackRate = m_playbackSessionModel->defaultPlaybackRate();
manager.rate = m_playbackSessionModel->isPlaying() ? m_playbackSessionModel->playbackRate() : 0.;
manager.seekableTimeRanges = timeRangesToArray(m_playbackSessionModel->seekableRanges()).get();
manager.canTogglePlayback = YES;
Modified: trunk/Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.h (274248 => 274249)
--- trunk/Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -63,7 +63,7 @@
WEBCORE_EXPORT void setVideoFullscreenChangeObserver(VideoFullscreenChangeObserver*);
// PlaybackSessionModelClient
- WEBCORE_EXPORT void rateChanged(bool isPlaying, float playbackRate) override;
+ WEBCORE_EXPORT void rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate) override;
WEBCORE_EXPORT void externalPlaybackChanged(bool enabled, PlaybackSessionModel::ExternalPlaybackTargetType, const String& localizedDeviceName) override;
WEBCORE_EXPORT void ensureControlsManager() override;
Modified: trunk/Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.mm (274248 => 274249)
--- trunk/Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/mac/VideoFullscreenInterfaceMac.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -428,7 +428,7 @@
m_videoFullscreenModel->fullscreenModeChanged(m_mode);
}
-void VideoFullscreenInterfaceMac::rateChanged(bool isPlaying, float playbackRate)
+void VideoFullscreenInterfaceMac::rateChanged(bool isPlaying, float playbackRate, float /* defaultPlaybackRate */)
{
[videoFullscreenInterfaceObjC() updateIsPlaying:isPlaying newPlaybackRate:playbackRate];
}
Modified: trunk/Source/WebCore/platform/mac/WebPlaybackControlsManager.h (274248 => 274249)
--- trunk/Source/WebCore/platform/mac/WebPlaybackControlsManager.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/mac/WebPlaybackControlsManager.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -50,6 +50,7 @@
RetainPtr<NSArray<AVTouchBarMediaSelectionOption *>> _legibleTouchBarMediaSelectionOptions;
RetainPtr<AVTouchBarMediaSelectionOption> _currentLegibleTouchBarMediaSelectionOption;
RefPtr<WebCore::PlaybackSessionInterfaceMac> _playbackSessionInterfaceMac;
+ double _defaultPlaybackRate;
float _rate;
BOOL _playing;
BOOL _hasEnabledAudio;
@@ -66,6 +67,7 @@
@property (nonatomic) BOOL hasEnabledVideo;
@property (getter=isPlaying) BOOL playing;
@property BOOL canTogglePlayback;
+@property double defaultPlaybackRate;
@property (nonatomic) float rate;
@property BOOL allowsPictureInPicturePlayback;
@property (getter=isPictureInPictureActive) BOOL pictureInPictureActive;
Modified: trunk/Source/WebCore/platform/mac/WebPlaybackControlsManager.mm (274248 => 274249)
--- trunk/Source/WebCore/platform/mac/WebPlaybackControlsManager.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebCore/platform/mac/WebPlaybackControlsManager.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -48,6 +48,7 @@
@synthesize seekToTime = _seekToTime;
@synthesize hasEnabledAudio = _hasEnabledAudio;
@synthesize hasEnabledVideo = _hasEnabledVideo;
+@synthesize defaultPlaybackRate = _defaultPlaybackRate;
@synthesize rate = _rate;
@synthesize canTogglePlayback = _canTogglePlayback;
@synthesize allowsPictureInPicturePlayback;
Modified: trunk/Source/WebKit/ChangeLog (274248 => 274249)
--- trunk/Source/WebKit/ChangeLog 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebKit/ChangeLog 2021-03-11 00:05:12 UTC (rev 274249)
@@ -1,3 +1,29 @@
+2021-03-10 Devin Rousso <[email protected]>
+
+ Add plumbing for `defaultPlaybackRate` to AVKit
+ https://bugs.webkit.org/show_bug.cgi?id=222991
+ <rdar://problem/75012417>
+
+ Reviewed by Eric Carlson.
+
+ * WebProcess/cocoa/PlaybackSessionManager.messages.in:
+ * WebProcess/cocoa/PlaybackSessionManager.h:
+ * WebProcess/cocoa/PlaybackSessionManager.mm:
+ (WebKit::PlaybackSessionInterfaceContext::rateChanged):
+ (WebKit::PlaybackSessionManager::rateChanged):
+ (WebKit::PlaybackSessionManager::setDefaultPlaybackRate): Added.
+
+ * UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
+ * UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
+ * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
+ (WebKit::PlaybackSessionModelContext::setDefaultPlaybackRate): Added.
+ (WebKit::PlaybackSessionModelContext::rateChanged):
+ (WebKit::PlaybackSessionManagerProxy::rateChanged):
+ (WebKit::PlaybackSessionManagerProxy::setDefaultPlaybackRate): Added.
+
+ * UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
+ (WKFullScreenViewControllerPlaybackSessionModelClient::rateChanged):
+
2021-03-10 Per Arne Vollan <[email protected]>
[iOS] Adjust telemetry rule
Modified: trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h (274248 => 274249)
--- trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -75,7 +75,7 @@
void currentTimeChanged(double);
void bufferedTimeChanged(double);
void playbackStartedTimeChanged(double);
- void rateChanged(bool isPlaying, float playbackRate);
+ void rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate);
void seekableRangesChanged(WebCore::TimeRanges&, double lastModifiedTime, double liveUpdateInterval);
void canPlayFastReverseChanged(bool);
void audioMediaSelectionOptionsChanged(const Vector<WebCore::MediaSelectionOption>& options, uint64_t index);
@@ -111,6 +111,7 @@
void beginScanningForward() final;
void beginScanningBackward() final;
void endScanning() final;
+ void setDefaultPlaybackRate(float) final;
void selectAudioMediaOption(uint64_t) final;
void selectLegibleMediaOption(uint64_t) final;
void togglePictureInPicture() final;
@@ -126,6 +127,7 @@
double bufferedTime() const final { return m_bufferedTime; }
bool isPlaying() const final { return m_isPlaying; }
bool isScrubbing() const final { return m_isScrubbing; }
+ float defaultPlaybackRate() const final { return m_defaultPlaybackRate; }
float playbackRate() const final { return m_playbackRate; }
Ref<WebCore::TimeRanges> seekableRanges() const final { return m_seekableRanges.copyRef(); }
double seekableTimeRangesLastModifiedTime() const final { return m_seekableTimeRangesLastModifiedTime; }
@@ -153,6 +155,7 @@
double m_bufferedTime { 0 };
bool m_isPlaying { false };
bool m_isScrubbing { false };
+ float m_defaultPlaybackRate { 0 };
float m_playbackRate { 0 };
Ref<WebCore::TimeRanges> m_seekableRanges { WebCore::TimeRanges::create() };
double m_seekableTimeRangesLastModifiedTime { 0 };
@@ -217,7 +220,7 @@
void wirelessVideoPlaybackDisabledChanged(PlaybackSessionContextIdentifier, bool);
void durationChanged(PlaybackSessionContextIdentifier, double duration);
void playbackStartedTimeChanged(PlaybackSessionContextIdentifier, double playbackStartedTime);
- void rateChanged(PlaybackSessionContextIdentifier, bool isPlaying, double rate);
+ void rateChanged(PlaybackSessionContextIdentifier, bool isPlaying, double rate, double defaultPlaybackRate);
void handleControlledElementIDResponse(PlaybackSessionContextIdentifier, String) const;
void mutedChanged(PlaybackSessionContextIdentifier, bool muted);
void volumeChanged(PlaybackSessionContextIdentifier, double volume);
@@ -234,6 +237,7 @@
void beginScanningForward(PlaybackSessionContextIdentifier);
void beginScanningBackward(PlaybackSessionContextIdentifier);
void endScanning(PlaybackSessionContextIdentifier);
+ void setDefaultPlaybackRate(PlaybackSessionContextIdentifier, float);
void selectAudioMediaOption(PlaybackSessionContextIdentifier, uint64_t index);
void selectLegibleMediaOption(PlaybackSessionContextIdentifier, uint64_t index);
void togglePictureInPicture(PlaybackSessionContextIdentifier);
Modified: trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in (274248 => 274249)
--- trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in 2021-03-11 00:05:12 UTC (rev 274249)
@@ -34,7 +34,7 @@
WirelessVideoPlaybackDisabledChanged(WebKit::PlaybackSessionContextIdentifier contextId, bool disabled)
DurationChanged(WebKit::PlaybackSessionContextIdentifier contextId, double duration)
PlaybackStartedTimeChanged(WebKit::PlaybackSessionContextIdentifier contextId, double playbackStartedTime)
- RateChanged(WebKit::PlaybackSessionContextIdentifier contextId, bool isPlaying, double rate)
+ RateChanged(WebKit::PlaybackSessionContextIdentifier contextId, bool isPlaying, double rate, double defaultPlaybackRate)
MutedChanged(WebKit::PlaybackSessionContextIdentifier contextId, bool muted);
VolumeChanged(WebKit::PlaybackSessionContextIdentifier contextId, double volume);
PictureInPictureSupportedChanged(WebKit::PlaybackSessionContextIdentifier contextId, bool pictureInPictureSupported)
Modified: trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm (274248 => 274249)
--- trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -121,6 +121,12 @@
m_manager->endScanning(m_contextId);
}
+void PlaybackSessionModelContext::setDefaultPlaybackRate(float defaultPlaybackRate)
+{
+ if (m_manager)
+ m_manager->setDefaultPlaybackRate(m_contextId, defaultPlaybackRate);
+}
+
void PlaybackSessionModelContext::selectAudioMediaOption(uint64_t optionId)
{
if (m_manager)
@@ -194,12 +200,13 @@
client->bufferedTimeChanged(bufferedTime);
}
-void PlaybackSessionModelContext::rateChanged(bool isPlaying, float playbackRate)
+void PlaybackSessionModelContext::rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate)
{
m_isPlaying = isPlaying;
m_playbackRate = playbackRate;
+ m_defaultPlaybackRate = defaultPlaybackRate;
for (auto* client : m_clients)
- client->rateChanged(isPlaying, playbackRate);
+ client->rateChanged(m_isPlaying, m_playbackRate, m_defaultPlaybackRate);
}
void PlaybackSessionModelContext::seekableRangesChanged(WebCore::TimeRanges& seekableRanges, double lastModifiedTime, double liveUpdateInterval)
@@ -476,9 +483,9 @@
ensureModel(contextId).playbackStartedTimeChanged(playbackStartedTime);
}
-void PlaybackSessionManagerProxy::rateChanged(PlaybackSessionContextIdentifier contextId, bool isPlaying, double rate)
+void PlaybackSessionManagerProxy::rateChanged(PlaybackSessionContextIdentifier contextId, bool isPlaying, double rate, double defaultPlaybackRate)
{
- ensureModel(contextId).rateChanged(isPlaying, rate);
+ ensureModel(contextId).rateChanged(isPlaying, rate, defaultPlaybackRate);
}
void PlaybackSessionManagerProxy::pictureInPictureSupportedChanged(PlaybackSessionContextIdentifier contextId, bool supported)
@@ -550,6 +557,11 @@
m_page->send(Messages::PlaybackSessionManager::EndScanning(contextId));
}
+void PlaybackSessionManagerProxy::setDefaultPlaybackRate(PlaybackSessionContextIdentifier contextId, float defaultPlaybackRate)
+{
+ m_page->send(Messages::PlaybackSessionManager::SetDefaultPlaybackRate(contextId, defaultPlaybackRate));
+}
+
void PlaybackSessionManagerProxy::selectAudioMediaOption(PlaybackSessionContextIdentifier contextId, uint64_t index)
{
m_page->send(Messages::PlaybackSessionManager::SelectAudioMediaOption(contextId, index));
Modified: trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm (274248 => 274249)
--- trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -50,7 +50,7 @@
public:
void setParent(WKFullScreenViewController *parent) { m_parent = parent; }
- void rateChanged(bool isPlaying, float) override
+ void rateChanged(bool isPlaying, float /* playbackRate */, float /* defaultPlaybackRate */) override
{
m_parent.playing = isPlaying;
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.h (274248 => 274249)
--- trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.h 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.h 2021-03-11 00:05:12 UTC (rev 274249)
@@ -75,7 +75,7 @@
void currentTimeChanged(double currentTime, double anchorTime) final;
void bufferedTimeChanged(double) final;
void playbackStartedTimeChanged(double playbackStartedTime) final;
- void rateChanged(bool isPlaying, float playbackRate) final;
+ void rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate) final;
void seekableRangesChanged(const WebCore::TimeRanges&, double lastModifiedTime, double liveUpdateInterval) final;
void canPlayFastReverseChanged(bool value) final;
void audioMediaSelectionOptionsChanged(const Vector<WebCore::MediaSelectionOption>& options, uint64_t selectedIndex) final;
@@ -130,7 +130,7 @@
void currentTimeChanged(PlaybackSessionContextIdentifier, double currentTime, double anchorTime);
void bufferedTimeChanged(PlaybackSessionContextIdentifier, double bufferedTime);
void playbackStartedTimeChanged(PlaybackSessionContextIdentifier, double playbackStartedTime);
- void rateChanged(PlaybackSessionContextIdentifier, bool isPlaying, float playbackRate);
+ void rateChanged(PlaybackSessionContextIdentifier, bool isPlaying, float playbackRate, float defaultPlaybackRate);
void seekableRangesChanged(PlaybackSessionContextIdentifier, const WebCore::TimeRanges&, double lastModifiedTime, double liveUpdateInterval);
void canPlayFastReverseChanged(PlaybackSessionContextIdentifier, bool value);
void audioMediaSelectionOptionsChanged(PlaybackSessionContextIdentifier, const Vector<WebCore::MediaSelectionOption>& options, uint64_t selectedIndex);
@@ -154,6 +154,7 @@
void beginScanningForward(PlaybackSessionContextIdentifier);
void beginScanningBackward(PlaybackSessionContextIdentifier);
void endScanning(PlaybackSessionContextIdentifier);
+ void setDefaultPlaybackRate(PlaybackSessionContextIdentifier, float);
void selectAudioMediaOption(PlaybackSessionContextIdentifier, uint64_t index);
void selectLegibleMediaOption(PlaybackSessionContextIdentifier, uint64_t index);
void handleControlledElementIDRequest(PlaybackSessionContextIdentifier);
Modified: trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.messages.in (274248 => 274249)
--- trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.messages.in 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.messages.in 2021-03-11 00:05:12 UTC (rev 274249)
@@ -33,6 +33,7 @@
BeginScanningForward(WebKit::PlaybackSessionContextIdentifier contextId)
BeginScanningBackward(WebKit::PlaybackSessionContextIdentifier contextId)
EndScanning(WebKit::PlaybackSessionContextIdentifier contextId)
+ SetDefaultPlaybackRate(WebKit::PlaybackSessionContextIdentifier contextId, float defaultPlaybackRate)
SelectAudioMediaOption(WebKit::PlaybackSessionContextIdentifier contextId, uint64_t index)
SelectLegibleMediaOption(WebKit::PlaybackSessionContextIdentifier contextId, uint64_t index)
HandleControlledElementIDRequest(WebKit::PlaybackSessionContextIdentifier contextId)
Modified: trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm (274248 => 274249)
--- trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm 2021-03-11 00:01:13 UTC (rev 274248)
+++ trunk/Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm 2021-03-11 00:05:12 UTC (rev 274249)
@@ -76,10 +76,10 @@
m_manager->bufferedTimeChanged(m_contextId, bufferedTime);
}
-void PlaybackSessionInterfaceContext::rateChanged(bool isPlaying, float playbackRate)
+void PlaybackSessionInterfaceContext::rateChanged(bool isPlaying, float playbackRate, float defaultPlaybackRate)
{
if (m_manager)
- m_manager->rateChanged(m_contextId, isPlaying, playbackRate);
+ m_manager->rateChanged(m_contextId, isPlaying, playbackRate, defaultPlaybackRate);
}
void PlaybackSessionInterfaceContext::playbackStartedTimeChanged(double playbackStartedTime)
@@ -341,9 +341,9 @@
m_page->send(Messages::PlaybackSessionManagerProxy::PlaybackStartedTimeChanged(contextId, playbackStartedTime));
}
-void PlaybackSessionManager::rateChanged(PlaybackSessionContextIdentifier contextId, bool isPlaying, float playbackRate)
+void PlaybackSessionManager::rateChanged(PlaybackSessionContextIdentifier contextId, bool isPlaying, float playbackRate, float defaultPlaybackRate)
{
- m_page->send(Messages::PlaybackSessionManagerProxy::RateChanged(contextId, isPlaying, playbackRate));
+ m_page->send(Messages::PlaybackSessionManagerProxy::RateChanged(contextId, isPlaying, playbackRate, defaultPlaybackRate));
}
void PlaybackSessionManager::seekableRangesChanged(PlaybackSessionContextIdentifier contextId, const WebCore::TimeRanges& timeRanges, double lastModifiedTime, double liveUpdateInterval)
@@ -469,6 +469,12 @@
ensureModel(contextId).endScanning();
}
+void PlaybackSessionManager::setDefaultPlaybackRate(PlaybackSessionContextIdentifier contextId, float defaultPlaybackRate)
+{
+ UserGestureIndicator indicator(ProcessingUserGesture);
+ ensureModel(contextId).setDefaultPlaybackRate(defaultPlaybackRate);
+}
+
void PlaybackSessionManager::selectAudioMediaOption(PlaybackSessionContextIdentifier contextId, uint64_t index)
{
UserGestureIndicator indicator(ProcessingUserGesture);