Diff
Modified: trunk/Source/WebCore/ChangeLog (168340 => 168341)
--- trunk/Source/WebCore/ChangeLog 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebCore/ChangeLog 2014-05-06 01:49:29 UTC (rev 168341)
@@ -1,3 +1,46 @@
+2014-05-05 Jeremy Jones <[email protected]>
+
+ Implement scan backward and forward in video fullscreen.
+ https://bugs.webkit.org/show_bug.cgi?id=132517
+
+ Reviewed by Simon Fraser.
+
+ Implement scanning forward and backward. This implements methods in
+ WebAVPlayerController and forwards them through WebVideoFullscreenModelMediaElement
+ and on to HTMLMediaElement.
+
+ * WebCore.exp.in: necessary exports.
+ * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
+ (-[WebAVPlayerController seekToTime:]):
+ Use fastSeek in this case.
+ (-[WebAVPlayerController canScanForward]): If you can play, you can scan.
+ (+[WebAVPlayerController keyPathsForValuesAffectingCanScanForward]): ditto
+ (-[WebAVPlayerController beginScanningForward:]): ditto
+ (-[WebAVPlayerController endScanningForward:]): ditto
+ (-[WebAVPlayerController canScanBackward]): If you can play, you can scan.
+ (+[WebAVPlayerController keyPathsForValuesAffectingCanScanBackward]): ditto
+ (-[WebAVPlayerController beginScanningBackward:]): ditto
+ (-[WebAVPlayerController endScanningBackward:]): ditto
+ (-[WebAVPlayerController canSeekToBeginning]):
+ This looks at seekableRanges to determine if any seeking is possible.
+ (+[WebAVPlayerController keyPathsForValuesAffectingCanSeekToBeginning]):
+ depends on seekableRanges.
+ (-[WebAVPlayerController seekToBeginning:]): seek to -ininity
+ (-[WebAVPlayerController canSeekToEnd]):
+ This looks at seekableRanges to determine if any seeking is possible.
+ (+[WebAVPlayerController keyPathsForValuesAffectingCanSeekToEnd]):
+ depends on seekableRanges.
+ (-[WebAVPlayerController seekToEnd:]): seek to INFINITY.
+ * platform/ios/WebVideoFullscreenModel.h:
+ Add 4 new functions.
+ * platform/ios/WebVideoFullscreenModelMediaElement.h:
+ ditto
+ * platform/ios/WebVideoFullscreenModelMediaElement.mm:
+ (WebVideoFullscreenModelMediaElement::fastSeek): forwards to HTMLMediaEelement
+ (WebVideoFullscreenModelMediaElement::beginScanningForward): forwards to HTMLMediaEelement
+ (WebVideoFullscreenModelMediaElement::beginScanningBackward): forwards to HTMLMediaEelement
+ (WebVideoFullscreenModelMediaElement::endScanning): forwards to HTMLMediaEelement
+
2014-05-05 Benjamin Poulain <[email protected]>
[iOS][WK2] Prefetch DNS hostnames on tap highlight
Modified: trunk/Source/WebCore/WebCore.exp.in (168340 => 168341)
--- trunk/Source/WebCore/WebCore.exp.in 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebCore/WebCore.exp.in 2014-05-06 01:49:29 UTC (rev 168341)
@@ -3292,19 +3292,23 @@
#if ENABLE(VIDEO) && PLATFORM(IOS)
__ZN7WebCore35WebVideoFullscreenModelMediaElement10seekToTimeEd
+__ZN7WebCore35WebVideoFullscreenModelMediaElement11endScanningEv
__ZN7WebCore35WebVideoFullscreenModelMediaElement11handleEventEPNS_22ScriptExecutionContextEPNS_5EventE
__ZN7WebCore35WebVideoFullscreenModelMediaElement12endScrubbingEv
__ZN7WebCore35WebVideoFullscreenModelMediaElement14beginScrubbingEv
__ZN7WebCore35WebVideoFullscreenModelMediaElement15setMediaElementEPNS_16HTMLMediaElementE
__ZN7WebCore35WebVideoFullscreenModelMediaElement15togglePlayStateEv
__ZN7WebCore35WebVideoFullscreenModelMediaElement18setVideoLayerFrameENS_9FloatRectE
+__ZN7WebCore35WebVideoFullscreenModelMediaElement20beginScanningForwardEv
__ZN7WebCore35WebVideoFullscreenModelMediaElement20setVideoLayerGravityENS_23WebVideoFullscreenModel12VideoGravityE
+__ZN7WebCore35WebVideoFullscreenModelMediaElement21beginScanningBackwardEv
__ZN7WebCore35WebVideoFullscreenModelMediaElement21requestExitFullscreenEv
__ZN7WebCore35WebVideoFullscreenModelMediaElement22selectAudioMediaOptionEy
__ZN7WebCore35WebVideoFullscreenModelMediaElement23setVideoFullscreenLayerEP7CALayer
__ZN7WebCore35WebVideoFullscreenModelMediaElement24selectLegibleMediaOptionEy
__ZN7WebCore35WebVideoFullscreenModelMediaElement4playEv
__ZN7WebCore35WebVideoFullscreenModelMediaElement5pauseEv
+__ZN7WebCore35WebVideoFullscreenModelMediaElement8fastSeekEd
__ZN7WebCore35WebVideoFullscreenModelMediaElementC2Ev
__ZN7WebCore35WebVideoFullscreenModelMediaElementD2Ev
__ZNK7WebCore16HTMLVideoElement10videoWidthEv
Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm (168340 => 168341)
--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm 2014-05-06 01:49:29 UTC (rev 168341)
@@ -72,7 +72,12 @@
SOFT_LINK(CoreMedia, CMTimeRangeGetEnd, CMTime, (CMTimeRange range), (range))
SOFT_LINK(CoreMedia, CMTimeRangeMake, CMTimeRange, (CMTime start, CMTime duration), (start, duration))
SOFT_LINK(CoreMedia, CMTimeSubtract, CMTime, (CMTime minuend, CMTime subtrahend), (minuend, subtrahend))
+SOFT_LINK(CoreMedia, CMTimeMaximum, CMTime, (CMTime time1, CMTime time2), (time1, time2))
+SOFT_LINK(CoreMedia, CMTimeMinimum, CMTime, (CMTime time1, CMTime time2), (time1, time2))
+SOFT_LINK_CONSTANT(CoreMedia, kCMTimeIndefinite, CMTime)
+#define kCMTimeIndefinite getkCMTimeIndefinite()
+
@class WebAVMediaSelectionOption;
@interface WebAVPlayerController : NSObject <AVPlayerViewControllerDelegate>
@@ -84,6 +89,11 @@
@property(retain) AVPlayerController* playerControllerProxy;
@property(assign) WebVideoFullscreenModel* delegate;
+@property (readonly) BOOL canScanForward;
+@property (readonly) BOOL canScanBackward;
+@property (readonly) BOOL canSeekToBeginning;
+@property (readonly) BOOL canSeekToEnd;
+
@property BOOL canPlay;
@property(getter=isPlaying) BOOL playing;
@property BOOL canPause;
@@ -212,7 +222,7 @@
- (void)seekToTime:(NSTimeInterval)time
{
ASSERT(self.delegate);
- self.delegate->seekToTime(time);
+ self.delegate->fastSeek(time);
}
- (BOOL)hasLiveStreamingContent
@@ -261,6 +271,100 @@
[self seekToTime:timeAtEndOfSeekableTimeRanges];
}
+- (BOOL)canScanForward
+{
+ return [self canPlay];
+}
+
++ (NSSet *)keyPathsForValuesAffectingCanScanForward
+{
+ return [NSSet setWithObject:@"canPlay"];
+}
+
+- (void)beginScanningForward:(id)sender
+{
+ UNUSED_PARAM(sender);
+ ASSERT(self.delegate);
+ self.delegate->beginScanningForward();
+}
+
+- (void)endScanningForward:(id)sender
+{
+ UNUSED_PARAM(sender);
+ ASSERT(self.delegate);
+ self.delegate->endScanning();
+}
+
+- (BOOL)canScanBackward
+{
+ return [self canPlay];
+}
+
++ (NSSet *)keyPathsForValuesAffectingCanScanBackward
+{
+ return [NSSet setWithObject:@"canPlay"];
+}
+
+- (void)beginScanningBackward:(id)sender
+{
+ UNUSED_PARAM(sender);
+ ASSERT(self.delegate);
+ self.delegate->beginScanningBackward();
+}
+
+- (void)endScanningBackward:(id)sender
+{
+ UNUSED_PARAM(sender);
+ ASSERT(self.delegate);
+ self.delegate->endScanning();
+}
+
+- (BOOL)canSeekToBeginning
+{
+ CMTime minimumTime = kCMTimeIndefinite;
+
+ for (NSValue *value in [self seekableTimeRanges])
+ minimumTime = CMTimeMinimum([value CMTimeRangeValue].start, minimumTime);
+
+ return CMTIME_IS_NUMERIC(minimumTime);
+}
+
++ (NSSet *)keyPathsForValuesAffectingCanSeekToBeginning
+{
+ return [NSSet setWithObject:@"seekableTimeRanges"];
+}
+
+- (void)seekToBeginning:(id)sender
+{
+ UNUSED_PARAM(sender);
+ ASSERT(self.delegate);
+
+ self.delegate->seekToTime(-INFINITY);
+}
+
+- (BOOL)canSeekToEnd
+{
+ CMTime maximumTime = kCMTimeIndefinite;
+
+ for (NSValue *value in [self seekableTimeRanges])
+ maximumTime = CMTimeMaximum(CMTimeRangeGetEnd([value CMTimeRangeValue]), maximumTime);
+
+ return CMTIME_IS_NUMERIC(maximumTime);
+}
+
++ (NSSet *)keyPathsForValuesAffectingCanSeekToEnd
+{
+ return [NSSet setWithObject:@"seekableTimeRanges"];
+}
+
+- (void)seekToEnd:(id)sender
+{
+ UNUSED_PARAM(sender);
+ ASSERT(self.delegate);
+
+ self.delegate->seekToTime(INFINITY);
+}
+
- (BOOL)hasMediaSelectionOptions
{
return [self hasAudioMediaSelectionOptions] || [self hasLegibleMediaSelectionOptions];
Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h (168340 => 168341)
--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h 2014-05-06 01:49:29 UTC (rev 168341)
@@ -42,6 +42,10 @@
virtual void beginScrubbing() = 0;
virtual void endScrubbing() = 0;
virtual void seekToTime(double time) = 0;
+ virtual void fastSeek(double time) = 0;
+ virtual void beginScanningForward() = 0;
+ virtual void beginScanningBackward() = 0;
+ virtual void endScanning() = 0;
virtual void requestExitFullscreen() = 0;
virtual void setVideoLayerFrame(FloatRect) = 0;
enum VideoGravity { VideoGravityResize, VideoGravityResizeAspect, VideoGravityResizeAspectFill };
Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.h (168340 => 168341)
--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.h 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.h 2014-05-06 01:49:29 UTC (rev 168341)
@@ -60,6 +60,10 @@
virtual void beginScrubbing() override;
virtual void endScrubbing() override;
virtual void seekToTime(double time) override;
+ virtual void fastSeek(double time) override;
+ virtual void beginScanningForward() override;
+ virtual void beginScanningBackward() override;
+ virtual void endScanning() override;
virtual void requestExitFullscreen() override;
virtual void setVideoLayerFrame(FloatRect) override;
virtual void setVideoLayerGravity(WebVideoFullscreenModel::VideoGravity) override;
Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm (168340 => 168341)
--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm 2014-05-06 01:49:29 UTC (rev 168341)
@@ -193,6 +193,42 @@
});
}
+void WebVideoFullscreenModelMediaElement::fastSeek(double time)
+{
+ __block RefPtr<WebVideoFullscreenModelMediaElement> protect(this);
+ WebThreadRun(^{
+ m_mediaElement->fastSeek(time);
+ protect.clear();
+ });
+}
+
+void WebVideoFullscreenModelMediaElement::beginScanningForward()
+{
+ __block RefPtr<WebVideoFullscreenModelMediaElement> protect(this);
+ WebThreadRun(^{
+ m_mediaElement->beginScanning(MediaControllerInterface::Forward);
+ protect.clear();
+ });
+}
+
+void WebVideoFullscreenModelMediaElement::beginScanningBackward()
+{
+ __block RefPtr<WebVideoFullscreenModelMediaElement> protect(this);
+ WebThreadRun(^{
+ m_mediaElement->beginScanning(MediaControllerInterface::Backward);
+ protect.clear();
+ });
+}
+
+void WebVideoFullscreenModelMediaElement::endScanning()
+{
+ __block RefPtr<WebVideoFullscreenModelMediaElement> protect(this);
+ WebThreadRun(^{
+ m_mediaElement->endScanning();
+ protect.clear();
+ });
+}
+
void WebVideoFullscreenModelMediaElement::requestExitFullscreen()
{
__block RefPtr<WebVideoFullscreenModelMediaElement> protect(this);
Modified: trunk/Source/WebKit2/ChangeLog (168340 => 168341)
--- trunk/Source/WebKit2/ChangeLog 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebKit2/ChangeLog 2014-05-06 01:49:29 UTC (rev 168341)
@@ -1,3 +1,20 @@
+2014-05-05 Jeremy Jones <[email protected]>
+
+ Implement scan backward and forward in video fullscreen.
+ https://bugs.webkit.org/show_bug.cgi?id=132517
+
+ Reviewed by Simon Fraser.
+
+ Plumb through scanning/seeking functions.
+
+ * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
+ * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
+ (WebKit::WebVideoFullscreenManagerProxy::fastSeek):
+ (WebKit::WebVideoFullscreenManagerProxy::beginScanningForward):
+ (WebKit::WebVideoFullscreenManagerProxy::beginScanningBackward):
+ (WebKit::WebVideoFullscreenManagerProxy::endScanning):
+ * WebProcess/ios/WebVideoFullscreenManager.messages.in:
+
2014-05-05 Benjamin Poulain <[email protected]>
[iOS][WK2] Prefetch DNS hostnames on tap highlight
Modified: trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h (168340 => 168341)
--- trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h 2014-05-06 01:49:29 UTC (rev 168341)
@@ -69,6 +69,10 @@
virtual void beginScrubbing() override;
virtual void endScrubbing() override;
virtual void seekToTime(double) override;
+ virtual void fastSeek(double time) override;
+ virtual void beginScanningForward() override;
+ virtual void beginScanningBackward() override;
+ virtual void endScanning() override;
virtual void setVideoLayerFrame(WebCore::FloatRect) override;
virtual void setVideoLayerGravity(WebCore::WebVideoFullscreenModel::VideoGravity) override;
virtual void selectAudioMediaOption(uint64_t) override;
Modified: trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm (168340 => 168341)
--- trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm 2014-05-06 01:49:29 UTC (rev 168341)
@@ -139,6 +139,26 @@
m_page->send(Messages::WebVideoFullscreenManager::SeekToTime(time), m_page->pageID());
}
+void WebVideoFullscreenManagerProxy::fastSeek(double time)
+{
+ m_page->send(Messages::WebVideoFullscreenManager::FastSeek(time), m_page->pageID());
+}
+
+void WebVideoFullscreenManagerProxy::beginScanningForward()
+{
+ m_page->send(Messages::WebVideoFullscreenManager::BeginScanningForward(), m_page->pageID());
+}
+
+void WebVideoFullscreenManagerProxy::beginScanningBackward()
+{
+ m_page->send(Messages::WebVideoFullscreenManager::BeginScanningBackward(), m_page->pageID());
+}
+
+void WebVideoFullscreenManagerProxy::endScanning()
+{
+ m_page->send(Messages::WebVideoFullscreenManager::EndScanning(), m_page->pageID());
+}
+
void WebVideoFullscreenManagerProxy::setVideoLayerFrame(WebCore::FloatRect frame)
{
m_page->send(Messages::WebVideoFullscreenManager::SetVideoLayerFrame(frame), m_page->pageID());
Modified: trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in (168340 => 168341)
--- trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in 2014-05-06 01:22:02 UTC (rev 168340)
+++ trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in 2014-05-06 01:49:29 UTC (rev 168341)
@@ -28,6 +28,10 @@
BeginScrubbing()
EndScrubbing()
SeekToTime(double time)
+ FastSeek(double time)
+ BeginScanningForward()
+ BeginScanningBackward()
+ EndScanning()
RequestExitFullscreen()
DidExitFullscreen()
DidEnterFullscreen()