haikuwebkit/LayoutTests/media/remoteplayback-prompt.html

98 lines
3.5 KiB
HTML
Raw Permalink Normal View History

Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
<html>
<head>
<script src='media-file.js'></script>
<script src='video-test.js'></script>
<script>
let pendingTimeout;
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
async function start()
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
{
findMediaElement();
if (window.internals) {
internals.setMockMediaPlaybackTargetPickerEnabled(true);
internals.settings.setAllowsAirPlayForMediaPlayback(true);
}
consoleWrite('<br>** prompt() when disableRemotePlayback is set should fail');
run('video.disableRemotePlayback = true');
try {
await video.remote.prompt();
failTest('prompt() succeeded when remote playback is disabled');
} catch(error) {
consoleWrite(`EXPECTED ERROR: ${ error }`);
}
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
run('video.disableRemotePlayback = false');
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
consoleWrite('<br>** prompt() outside of a user action should fail');
try {
await video.remote.prompt();
failTest('prompt() succeeded outside of a user action');
} catch(error) {
consoleWrite(`EXPECTED ERROR: ${ error }`);
}
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
consoleWrite('<br>** prompt() when no targets are available should fail');
runWithKeyDown(() => {
video.remote.prompt().then(failTest).catch(handleNoTargetError);
});
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
}
async function handleNoTargetError(error)
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
{
consoleWrite(`EXPECTED ERROR: ${ error }`);
consoleWrite('<br>** Simulate a device becoming available')
pendingTimeout = setTimeout(_ => {
failTest(`<br>Remote device not available after 8 seconds!`);
}, 8000);
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
if (window.internals)
internals.setMockMediaPlaybackTargetPickerState('', 'DeviceAvailable');
try {
await video.remote.watchAvailability(availabilityChanged);
} catch (error) {
failTest(`<br>'watchAvailability' threw error ${error}`);
}
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
}
async function availabilityChanged(available)
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
{
if (!available)
return;
video.remote.cancelWatchAvailability();
clearTimeout(pendingTimeout);
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
if (video.src)
return;
run('video.src = findMediaFile("video", "content/test")');
await waitForEventWithTimeout(video, 'canplaythrough', 8000, "'canplaythrough' not fired after 8 seconds");
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
consoleWrite('<br>** Simulate a device becoming selected');
runWithKeyDown(() => {
video.remote.prompt().catch(failTest);
});
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
if (window.internals)
internals.setMockMediaPlaybackTargetPickerState('Sleepy TV', 'DeviceAvailable');
await waitForEventWithTimeout(video.remote, 'connecting', 8000, "'connecting' not fired after 8 seconds");
await waitForEventWithTimeout(video.remote, 'connect', 8000, "'connect' not fired after 8 seconds");
endTest();
Implement the Remote Playback API. https://bugs.webkit.org/show_bug.cgi?id=162971 Reviewed by Youenn Fablet. Source/JavaScriptCore: Add RemotePlayback as a common identifier, needed for bindings due to "EnabledAtRuntime=RemotePlayback". * runtime/CommonIdentifiers.h: Source/WebCore: Tests: media/remoteplayback-cancel-invalid.html media/remoteplayback-prompt.html media/remoteplayback-target-availability.html media/remoteplayback-watch-disableremoteplayback.html imported/w3c/web-platform-tests/remote-playback/cancel-watch-availability.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-cancel-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-prompt-throws.html imported/w3c/web-platform-tests/remote-playback/disable-remote-playback-watch-availability-throws.html imported/w3c/web-platform-tests/remote-playback/idlharness.window.html imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html The Remote Playback API <https://w3c.github.io/remote-playback> allows page authors to control the presentation of <audio> and <video> elements to remote playback devices such as the Apple TV or Chromecast. WebKit already exposes a non-standardized API to initiate remote playback, and the Remote Playback API is largely congruent with the webkitShowPlaybackTargetPicker() API et. al. One addition provided by the Remote Playback API is an event in the case the user dismisses the picker UI without making a choice, so this concept needs to be plumbed through from the ChromeClient to the PlatformMediaSession. * DerivedSources.make: * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/HTMLMediaElementRemotePlayback.h: Added. (WebCore::HTMLMediaElementRemotePlayback::remote): (WebCore::HTMLMediaElementRemotePlayback::hasAttributeWithoutSynchronization): (WebCore::HTMLMediaElementRemotePlayback::setBooleanAttribute): * Modules/remoteplayback/HTMLMediaElementRemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlayback.cpp: Added. (WebCore::RemotePlayback::create): (WebCore::RemotePlayback::RemotePlayback): (WebCore::RemotePlayback::~RemotePlayback): (WebCore::RemotePlayback::watchAvailability): (WebCore::RemotePlayback::cancelWatchAvailability): (WebCore::RemotePlayback::prompt): (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged): (WebCore::RemotePlayback::setState): (WebCore::RemotePlayback::establishConnection): (WebCore::RemotePlayback::disconnect): (WebCore::RemotePlayback::updateAvailability): (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): (WebCore::RemotePlayback::isPlayingToRemoteTargetChanged): (WebCore::RemotePlayback::hasAvailabilityCallbacks): (WebCore::RemotePlayback::availabilityChanged): (WebCore::RemotePlayback::invalidate): (WebCore::RemotePlayback::activeDOMObjectName): (WebCore::RemotePlayback::canSuspendForDocumentSuspension): (WebCore::RemotePlayback::stop): * Modules/remoteplayback/RemotePlayback.h: Added. (WebCore::RemotePlayback::state): * Modules/remoteplayback/RemotePlayback.idl: Added. * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.h: Added. (WebCore::RemotePlaybackAvailabilityCallback::~RemotePlaybackAvailabilityCallback): * Modules/remoteplayback/RemotePlaybackAvailabilityCallback.idl: Added. * WebCore.xcodeproj/project.pbxproj: * bindings/generic/RuntimeEnabledFeatures.h: (WebCore::RuntimeEnabledFeatures::setRemotePlaybackEnabled): (WebCore::RuntimeEnabledFeatures::remotePlaybackEnabled): * dom/Document.cpp: (WebCore::Document::playbackTargetPickerWasDismissed): * dom/Document.h: * dom/EventNames.h: * dom/EventTargetFactory.in: * html/HTMLAttributeNames.in: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::clearMediaPlayer): (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): (WebCore::HTMLMediaElement::playbackTargetPickerWasDismissed): (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged): (WebCore::HTMLMediaElement::createMediaPlayer): * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::remote): * html/MediaElementSession.cpp: (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled): (WebCore::MediaElementSession::playbackTargetPickerWasDismissed): * html/MediaElementSession.h: * page/Page.cpp: (WebCore::Page::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: * page/Settings.in: * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSessionClient::playbackTargetPickerWasDismissed): * platform/graphics/MediaPlaybackTargetClient.h: * platform/graphics/MediaPlaybackTargetPicker.h: (WebCore::MediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::dismissPopup): * platform/mock/MediaPlaybackTargetPickerMock.h: * testing/Internals.cpp: (WebCore::Internals::mockMediaPlaybackTargetPickerDismissPopup): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: Add a preference to enable the Remote Playback API. Pass the playbackTargetPickerWasDismissed() notification on to Page. * Shared/WebPreferencesDefinitions.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesGetRemotePlaybackEnabled): (WKPreferencesSetRemotePlaybackEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::mockMediaPlaybackTargetPickerDismissPopup): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetPickerWasDismissed): Tools: Enable RemotePlayback for DumpRenderTree and WebKitTestRunner. * DumpRenderTree/mac/DumpRenderTree.mm: (resetWebPreferencesToConsistentValues): * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): LayoutTests: * media/remoteplayback-cancel-invalid-expected.txt: Added. * media/remoteplayback-cancel-invalid.html: Added. * media/remoteplayback-prompt-expected.txt: Added. * media/remoteplayback-prompt.html: Added. * media/remoteplayback-target-availability-expected.txt: Added. * media/remoteplayback-target-availability.html: Added. * media/remoteplayback-watch-disableremoteplayback-expected.txt: Added. * media/remoteplayback-watch-disableremoteplayback.html: Added. * platform/ios-wk2/TestExpectations: Canonical link: https://commits.webkit.org/216954@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@251737 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-10-29 21:54:07 +00:00
}
</script>
</head>
<body onload='start()'>
<video controls></video>
<p>Test the operation of prompt().</p>
</body>
</html>