haikuwebkit/Source/WebCore/Modules/airplay/WebMediaSessionManagerClient.h

54 lines
2.3 KiB
C
Raw Permalink Normal View History

[Mac] Update AirPlay handling https://bugs.webkit.org/show_bug.cgi?id=142541 Reviewed by Sam Weinig. Source/WebCore: * WebCore.xcodeproj/project.pbxproj: * dom/Document.cpp: (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::configurePlaybackTargetMonitoring): (WebCore::Document::requiresPlaybackTargetRouteMonitoring): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::didChoosePlaybackTarget): * dom/Document.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::unregisterWithDocument): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::HTMLMediaSession): (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): * html/HTMLMediaSession.h: * page/ChromeClient.h: * page/Page.cpp: (WebCore::Page::didChoosePlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::configurePlaybackTargetMonitoring): * page/Page.h: (WebCore::Page::hasWirelessPlaybackTarget): (WebCore::Page::playbackTarget): * platform/audio/MediaSession.cpp: (WebCore::MediaSession::clientDataBufferingTimerFired): (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::didChoosePlaybackTarget): (WebCore::MediaSession::externalOutputDeviceAvailableDidChange): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setWirelessPlaybackTarget): * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Deleted. * platform/audio/MediaSessionManager.h: (WebCore::MediaSessionManager::configureWireLessTargetMonitoring): * platform/audio/ios/MediaSessionManagerIOS.h: * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange): (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): * platform/graphics/AVPlaybackTarget.h: Added. (WebCore::AVPlaybackTarget::~AVPlaybackTarget): (WebCore::AVPlaybackTarget::AVPlaybackTarget): (WebCore::AVPlaybackTarget::setDevicePickerContext): (WebCore::AVPlaybackTarget::devicePickerContext): * platform/graphics/AVPlaybackTargetPickerClient.h: Added. (WebCore::AVPlaybackTargetPickerClient::~AVPlaybackTargetPickerClient): * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setWirelessPlaybackTarget): * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget): * platform/graphics/avfoundation/AVPlaybackTargetMac.mm: Added. (WebCore::AVPlaybackTarget::encode): (WebCore::AVPlaybackTarget::decode): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback): (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Source/WebKit2: * Shared/WebCoreArgumentCoders.h: * Shared/mac/WebCoreArgumentCodersMac.mm: (IPC::ArgumentCoder<AVPlaybackTarget>::encode): (IPC::ArgumentCoder<AVPlaybackTarget>::decode): * UIProcess/PageClient.h: * UIProcess/WebAVPlaybackTargetPickerProxy.cpp: Added. (WebKit::WebAVPlaybackTargetPickerProxy::WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::~WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets): * UIProcess/WebAVPlaybackTargetPickerProxy.h: Added. (WebKit::WebAVPlaybackTargetPickerProxy::Client::~Client): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::devicePickerProxy): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): (WebKit::WebPageProxy::didChoosePlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::createPlaybackTargetPicker): * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.h: Added. * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.mm: Added. (WebKit::WebAVPlaybackTargetPickerProxyMac::create): (WebKit::WebAVPlaybackTargetPickerProxyMac::WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::~WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired): (WebKit::WebAVPlaybackTargetPickerProxyMac::availableDevicesDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::devicePicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::currentDeviceDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets): (-[WebAVOutputDevicePickerMenuControllerHelper initWithCallback:]): (-[WebAVOutputDevicePickerMenuControllerHelper clearCallback]): (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebAVPlaybackTargetPicker.cpp: Added. (WebKit::WebAVPlaybackTargetPicker::WebAVPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPicker::showPlaybackDevicePicker): (WebKit::WebAVPlaybackTargetPicker::configureWireLessTargetMonitoring): (WebKit::WebAVPlaybackTargetPicker::addClient): (WebKit::WebAVPlaybackTargetPicker::removeClient): (WebKit::WebAVPlaybackTargetPicker::didChoosePlaybackTarget): (WebKit::WebAVPlaybackTargetPicker::playbackTargetAvailabilityDidChange): * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): * WebProcess/com.apple.WebProcess.sb.in: Canonical link: https://commits.webkit.org/160640@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-12 01:54:06 +00:00
/*
[macOS] AirPlay sometimes stops after 60 minutes of playback https://bugs.webkit.org/show_bug.cgi?id=207056 Source/WebCore: <rdar://problem/53649508> Reviewed by Jer Noble. No new tests, this only reproduces when playing to an AirPlay device. AVPlayerItem.tracks is empty during AirPlay. If AirPlay is activated immediately after the item is created, as is typically the case when switching from an MSE to a url based player, MediaPlayerPrivateAVFoundationObjC doesn't know if the AVPlayerItem has audio or video so the state reported to the WebMediaSessionManager is incorrect. AirPlay can't actually be active if an item doesn't have audio or video, so always claim to have both during AirPlay. Converted WebMediaSessionManager logging from debug-only to runtime to make it easier to diagnose problems in the future. * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::mediaProducerStateString): (WebCore::WebMediaSessionLogger::create): (WebCore::WebMediaSessionLogger::WebMediaSessionLogger): (WebCore::WebMediaSessionLogger::log const): (WebCore::WebMediaSessionManager::logger): (WebCore::WebMediaSessionManager::alwaysOnLoggingAllowed const): (WebCore::WebMediaSessionManager::setMockMediaPlaybackTargetPickerEnabled): (WebCore::WebMediaSessionManager::setMockMediaPlaybackTargetPickerState): (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup): (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients): (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): (WebCore::WebMediaSessionManager::clientStateDidChange): (WebCore::WebMediaSessionManager::setPlaybackTarget): (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange): (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed): (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): (WebCore::WebMediaSessionManager::configureWatchdogTimer): (WebCore::WebMediaSessionManager::watchdogTimerFired): (WebCore::ClientState::logAlways const): Deleted. * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: (WebCore::WebMediaSessionManagerClient::alwaysOnLoggingAllowed): * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaState const): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::hasVideo const): (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAudio const): Source/WebKit: Reviewed by Jer Noble. * UIProcess/WebPageProxy.cpp: * UIProcess/WebPageProxy.h: Canonical link: https://commits.webkit.org/220133@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@255581 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-02-03 20:19:44 +00:00
* Copyright (C) 2015-2020 Apple Inc. All rights reserved.
[Mac] Update AirPlay handling https://bugs.webkit.org/show_bug.cgi?id=142541 Reviewed by Sam Weinig. Source/WebCore: * WebCore.xcodeproj/project.pbxproj: * dom/Document.cpp: (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::configurePlaybackTargetMonitoring): (WebCore::Document::requiresPlaybackTargetRouteMonitoring): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::didChoosePlaybackTarget): * dom/Document.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::unregisterWithDocument): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::HTMLMediaSession): (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): * html/HTMLMediaSession.h: * page/ChromeClient.h: * page/Page.cpp: (WebCore::Page::didChoosePlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::configurePlaybackTargetMonitoring): * page/Page.h: (WebCore::Page::hasWirelessPlaybackTarget): (WebCore::Page::playbackTarget): * platform/audio/MediaSession.cpp: (WebCore::MediaSession::clientDataBufferingTimerFired): (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::didChoosePlaybackTarget): (WebCore::MediaSession::externalOutputDeviceAvailableDidChange): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setWirelessPlaybackTarget): * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Deleted. * platform/audio/MediaSessionManager.h: (WebCore::MediaSessionManager::configureWireLessTargetMonitoring): * platform/audio/ios/MediaSessionManagerIOS.h: * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange): (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): * platform/graphics/AVPlaybackTarget.h: Added. (WebCore::AVPlaybackTarget::~AVPlaybackTarget): (WebCore::AVPlaybackTarget::AVPlaybackTarget): (WebCore::AVPlaybackTarget::setDevicePickerContext): (WebCore::AVPlaybackTarget::devicePickerContext): * platform/graphics/AVPlaybackTargetPickerClient.h: Added. (WebCore::AVPlaybackTargetPickerClient::~AVPlaybackTargetPickerClient): * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setWirelessPlaybackTarget): * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget): * platform/graphics/avfoundation/AVPlaybackTargetMac.mm: Added. (WebCore::AVPlaybackTarget::encode): (WebCore::AVPlaybackTarget::decode): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback): (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Source/WebKit2: * Shared/WebCoreArgumentCoders.h: * Shared/mac/WebCoreArgumentCodersMac.mm: (IPC::ArgumentCoder<AVPlaybackTarget>::encode): (IPC::ArgumentCoder<AVPlaybackTarget>::decode): * UIProcess/PageClient.h: * UIProcess/WebAVPlaybackTargetPickerProxy.cpp: Added. (WebKit::WebAVPlaybackTargetPickerProxy::WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::~WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets): * UIProcess/WebAVPlaybackTargetPickerProxy.h: Added. (WebKit::WebAVPlaybackTargetPickerProxy::Client::~Client): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::devicePickerProxy): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): (WebKit::WebPageProxy::didChoosePlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::createPlaybackTargetPicker): * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.h: Added. * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.mm: Added. (WebKit::WebAVPlaybackTargetPickerProxyMac::create): (WebKit::WebAVPlaybackTargetPickerProxyMac::WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::~WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired): (WebKit::WebAVPlaybackTargetPickerProxyMac::availableDevicesDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::devicePicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::currentDeviceDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets): (-[WebAVOutputDevicePickerMenuControllerHelper initWithCallback:]): (-[WebAVOutputDevicePickerMenuControllerHelper clearCallback]): (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebAVPlaybackTargetPicker.cpp: Added. (WebKit::WebAVPlaybackTargetPicker::WebAVPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPicker::showPlaybackDevicePicker): (WebKit::WebAVPlaybackTargetPicker::configureWireLessTargetMonitoring): (WebKit::WebAVPlaybackTargetPicker::addClient): (WebKit::WebAVPlaybackTargetPicker::removeClient): (WebKit::WebAVPlaybackTargetPicker::didChoosePlaybackTarget): (WebKit::WebAVPlaybackTargetPicker::playbackTargetAvailabilityDidChange): * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): * WebProcess/com.apple.WebProcess.sb.in: Canonical link: https://commits.webkit.org/160640@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-12 01:54:06 +00:00
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
[Mac] Update AirPlay handling https://bugs.webkit.org/show_bug.cgi?id=142541 Reviewed by Sam Weinig. Source/WebCore: * WebCore.xcodeproj/project.pbxproj: * dom/Document.cpp: (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::configurePlaybackTargetMonitoring): (WebCore::Document::requiresPlaybackTargetRouteMonitoring): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::didChoosePlaybackTarget): * dom/Document.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::unregisterWithDocument): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::HTMLMediaSession): (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): * html/HTMLMediaSession.h: * page/ChromeClient.h: * page/Page.cpp: (WebCore::Page::didChoosePlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::configurePlaybackTargetMonitoring): * page/Page.h: (WebCore::Page::hasWirelessPlaybackTarget): (WebCore::Page::playbackTarget): * platform/audio/MediaSession.cpp: (WebCore::MediaSession::clientDataBufferingTimerFired): (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::didChoosePlaybackTarget): (WebCore::MediaSession::externalOutputDeviceAvailableDidChange): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setWirelessPlaybackTarget): * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Deleted. * platform/audio/MediaSessionManager.h: (WebCore::MediaSessionManager::configureWireLessTargetMonitoring): * platform/audio/ios/MediaSessionManagerIOS.h: * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange): (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): * platform/graphics/AVPlaybackTarget.h: Added. (WebCore::AVPlaybackTarget::~AVPlaybackTarget): (WebCore::AVPlaybackTarget::AVPlaybackTarget): (WebCore::AVPlaybackTarget::setDevicePickerContext): (WebCore::AVPlaybackTarget::devicePickerContext): * platform/graphics/AVPlaybackTargetPickerClient.h: Added. (WebCore::AVPlaybackTargetPickerClient::~AVPlaybackTargetPickerClient): * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setWirelessPlaybackTarget): * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget): * platform/graphics/avfoundation/AVPlaybackTargetMac.mm: Added. (WebCore::AVPlaybackTarget::encode): (WebCore::AVPlaybackTarget::decode): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback): (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Source/WebKit2: * Shared/WebCoreArgumentCoders.h: * Shared/mac/WebCoreArgumentCodersMac.mm: (IPC::ArgumentCoder<AVPlaybackTarget>::encode): (IPC::ArgumentCoder<AVPlaybackTarget>::decode): * UIProcess/PageClient.h: * UIProcess/WebAVPlaybackTargetPickerProxy.cpp: Added. (WebKit::WebAVPlaybackTargetPickerProxy::WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::~WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets): * UIProcess/WebAVPlaybackTargetPickerProxy.h: Added. (WebKit::WebAVPlaybackTargetPickerProxy::Client::~Client): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::devicePickerProxy): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): (WebKit::WebPageProxy::didChoosePlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::createPlaybackTargetPicker): * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.h: Added. * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.mm: Added. (WebKit::WebAVPlaybackTargetPickerProxyMac::create): (WebKit::WebAVPlaybackTargetPickerProxyMac::WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::~WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired): (WebKit::WebAVPlaybackTargetPickerProxyMac::availableDevicesDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::devicePicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::currentDeviceDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets): (-[WebAVOutputDevicePickerMenuControllerHelper initWithCallback:]): (-[WebAVOutputDevicePickerMenuControllerHelper clearCallback]): (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebAVPlaybackTargetPicker.cpp: Added. (WebKit::WebAVPlaybackTargetPicker::WebAVPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPicker::showPlaybackDevicePicker): (WebKit::WebAVPlaybackTargetPicker::configureWireLessTargetMonitoring): (WebKit::WebAVPlaybackTargetPicker::addClient): (WebKit::WebAVPlaybackTargetPicker::removeClient): (WebKit::WebAVPlaybackTargetPicker::didChoosePlaybackTarget): (WebKit::WebAVPlaybackTargetPicker::playbackTargetAvailabilityDidChange): * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): * WebProcess/com.apple.WebProcess.sb.in: Canonical link: https://commits.webkit.org/160640@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-12 01:54:06 +00:00
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
#include "MediaPlaybackTarget.h"
[Mac] Use one playback target for all web processes https://bugs.webkit.org/show_bug.cgi?id=144009 Reviewed by Tim Horton. Source/WebCore: * Modules/mediacontrols/mediaControlsApple.js: (Controller.prototype.updateWirelessPlaybackStatus): Drive-by fix to show controls when we show the placeholder image. Instead of having each Page/Document pair manage access to the playback target for the videos in a web process, put all of the logic into a new class - WebMediaSessionManager. A singleton instance talks to the target picker and manages video element access for all web processes. All playback target logic was removed from Document, Page, and MediaSessionManager. * Modules/mediasession: Added. * Modules/mediasession/WebMediaSessionManager.cpp: Added. (WebCore::ClientState::ClientState): (WebCore::flagsAreSet): (WebCore::WebMediaSessionManager::WebMediaSessionManager): (WebCore::WebMediaSessionManager::~WebMediaSessionManager): (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients): (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): (WebCore::WebMediaSessionManager::clientStateDidChange): (WebCore::WebMediaSessionManager::setPlaybackTarget): (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange): (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): (WebCore::WebMediaSessionManager::taskTimerFired): (WebCore::WebMediaSessionManager::find): (WebCore::WebMediaSessionManager::forEachClient): * Modules/mediasession/WebMediaSessionManager.h: Added. * Modules/mediasession/WebMediaSessionManagerClient.h: Added. (WebCore::WebMediaSessionManagerClient::~WebMediaSessionManagerClient): * Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::mediaState): Replaces isPlayingAudio. (WebCore::AudioContext::isPlayingAudio): Deleted. * Modules/webaudio/AudioContext.h: * WebCore.xcodeproj/project.pbxproj: Added new files. * dom/Document.cpp: (WebCore::Document::Document): (WebCore::Document::addAudioProducer): Take a MediaProducer instead of an AudioProducer. (WebCore::Document::removeAudioProducer): (WebCore::Document::updateIsPlayingMedia): (WebCore::nextPlaybackTargetClientContextId): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::playbackTargetPickerClientStateDidChange): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::setPlaybackTarget): (WebCore::Document::setShouldPlayToPlaybackTarget): (WebCore::Document::configurePlaybackTargetMonitoring): Deleted. (WebCore::Document::requiresPlaybackTargetRouteMonitoring): Deleted. (WebCore::Document::didChoosePlaybackTarget): Deleted. * dom/Document.h: (WebCore::Document::mediaState): (WebCore::Document::isPlayingAudio): Deleted. * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::setMuted): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::setPlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::setShouldPlayToPlaybackTarget): (WebCore::HTMLMediaSession::mediaStateDidChange): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): Deleted. (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): Deleted. (WebCore::HTMLMediaSession::startPlayingToPlaybackTarget): Deleted. (WebCore::HTMLMediaSession::stopPlayingToPlaybackTarget): Deleted. * html/HTMLMediaSession.h: * page/AudioProducer.h: Removed. * page/ChromeClient.h: * page/MediaProducer.h: Copied from Source/WebCore/page/AudioProducer.h. (WebCore::MediaProducer::~MediaProducer): (WebCore::AudioProducer::~AudioProducer): Deleted. * page/Page.cpp: (WebCore::Page::Page): (WebCore::Page::updateIsPlayingMedia): (WebCore::Page::addPlaybackTargetPickerClient): (WebCore::Page::removePlaybackTargetPickerClient): (WebCore::Page::showPlaybackTargetPicker): (WebCore::Page::playbackTargetPickerClientStateDidChange): (WebCore::Page::setPlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::setShouldPlayToPlaybackTarget): (WebCore::Page::playbackTarget): Deleted. (WebCore::Page::didChoosePlaybackTarget): Deleted. (WebCore::Page::configurePlaybackTargetMonitoring): Deleted. * page/Page.h: (WebCore::Page::mediaState): (WebCore::Page::isPlayingAudio): Deleted. (WebCore::Page::hasWirelessPlaybackTarget): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::isPlayingToWirelessPlaybackTarget): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setShouldPlayToPlaybackTarget): (WebCore::MediaSession::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaSession::stopPlayingToPlaybackTarget): Deleted. (WebCore::MediaSessionClient::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaSessionClient::stopPlayingToPlaybackTarget): Deleted. * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::sessionWillBeginPlayback): (WebCore::MediaSessionManager::sessionCanLoadMedia): (WebCore::MediaSessionManager::sessionShouldBeginPlayingToWirelessPlaybackTarget): Deleted. * platform/audio/MediaSessionManager.h: * platform/graphics/MediaPlaybackTargetClient.h: Copied from Source/WebCore/platform/graphics/MediaPlaybackTargetPickerClient.h. (WebCore::MediaPlaybackTargetClient::~MediaPlaybackTargetClient): (WebCore::MediaPlaybackTargetPickerClient::~MediaPlaybackTargetPickerClient): Deleted. * platform/graphics/MediaPlaybackTargetPicker.cpp: (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker): (WebCore::MediaPlaybackTargetPicker::startingMonitoringPlaybackTargets): (WebCore::MediaPlaybackTargetPicker::stopMonitoringPlaybackTargets): * platform/graphics/MediaPlaybackTargetPicker.h: * platform/graphics/MediaPlaybackTargetPickerClient.h: Removed. * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayer::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayer::stopPlayingToPlaybackTarget): Deleted. * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayerPrivateInterface::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateInterface::stopPlayingToPlaybackTarget): Deleted. * platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp: Added. (WebCore::WebMediaSessionManagerMac::singleton): (WebCore::WebMediaSessionManagerMac::WebMediaSessionManagerMac): (WebCore::WebMediaSessionManagerMac::~WebMediaSessionManagerMac): (WebCore::WebMediaSessionManagerMac::targetPicker): * platform/graphics/avfoundation/WebMediaSessionManagerMac.h: Added. * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateAVFoundationObjC::stopPlayingToPlaybackTarget): Deleted. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::togglePlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::stopPlayingToPlaybackTarget): Deleted. * platform/graphics/mac/MediaPlayerPrivateQTKit.h: * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: (WebCore::MediaPlayerPrivateQTKit::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayerPrivateQTKit::togglePlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateQTKit::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateQTKit::stopPlayingToPlaybackTarget): Deleted. * testing/Internals.cpp: (WebCore::Internals::isPagePlayingAudio): Source/WebKit/mac: Update to use WebMediaSessionManager for playback target management. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::addPlaybackTargetPickerClient): (WebChromeClient::removePlaybackTargetPickerClient): (WebChromeClient::showPlaybackTargetPicker): (WebChromeClient::playbackTargetPickerClientStateDidChange): (WebChromeClient::startingMonitoringPlaybackTargets): Deleted. (WebChromeClient::stopMonitoringPlaybackTargets): Deleted. * WebView/WebMediaPlaybackTargetPicker.h: * WebView/WebMediaPlaybackTargetPicker.mm: (WebMediaPlaybackTargetPicker::addPlaybackTargetPickerClient): (WebMediaPlaybackTargetPicker::removePlaybackTargetPickerClient): (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker): (WebMediaPlaybackTargetPicker::playbackTargetPickerClientStateDidChange): (WebMediaPlaybackTargetPicker::setPlaybackTarget): (WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange): (WebMediaPlaybackTargetPicker::setShouldPlayToPlaybackTarget): (WebMediaPlaybackTargetPicker::invalidate): (WebMediaPlaybackTargetPicker::startingMonitoringPlaybackTargets): Deleted. (WebMediaPlaybackTargetPicker::stopMonitoringPlaybackTargets): Deleted. (WebMediaPlaybackTargetPicker::didChoosePlaybackTarget): Deleted. (WebMediaPlaybackTargetPicker::targetPicker): Deleted. * WebView/WebView.mm: (-[WebView _addPlaybackTargetPickerClient:]): (-[WebView _removePlaybackTargetPickerClient:]): (-[WebView _showPlaybackTargetPicker:location:hasVideo:]): (-[WebView _playbackTargetPickerClientStateDidChange:state:]): (-[WebView _showPlaybackTargetPicker:hasVideo:]): Deleted. (-[WebView _startingMonitoringPlaybackTargets]): Deleted. (-[WebView _stopMonitoringPlaybackTargets]): Deleted. * WebView/WebViewInternal.h: Source/WebKit2: Every WebPageProxy uses the WebMediaSessionManager singleton to talk to the playback target picker. * UIProcess/PageClient.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::WebPageProxy): (WebKit::WebPageProxy::resetState): (WebKit::WebPageProxy::isPlayingMediaDidChange): (WebKit::WebPageProxy::addPlaybackTargetPickerClient): (WebKit::WebPageProxy::removePlaybackTargetPickerClient): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange): (WebKit::WebPageProxy::setPlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget): (WebKit::WebPageProxy::devicePickerProxy): Deleted. (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): Deleted. (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): Deleted. (WebKit::WebPageProxy::didChoosePlaybackTarget): Deleted. * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::isPlayingAudio): * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::mediaSessionManager): (WebKit::PageClientImpl::createPlaybackTargetPicker): Deleted. * UIProcess/mac/WebMediaSessionManagerMac.cpp: Added. (WebKit::WebMediaSessionManagerMac::singleton): (WebKit::WebMediaSessionManagerMac::WebMediaSessionManagerMac): (WebKit::WebMediaSessionManagerMac::~WebMediaSessionManagerMac): (WebKit::WebMediaSessionManagerMac::targetPicker): * UIProcess/mac/WebMediaSessionManagerMac.h: Added. * WebProcess/Plugins/PluginView.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::isPlayingMediaDidChange): (WebKit::WebChromeClient::addPlaybackTargetPickerClient): (WebKit::WebChromeClient::removePlaybackTargetPickerClient): (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::playbackTargetPickerClientStateDidChange): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): Deleted. (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): Deleted. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): (WebKit::WebPage::setShouldPlayToPlaybackTarget): Canonical link: https://commits.webkit.org/161997@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183096 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-04-22 04:06:57 +00:00
#include "MediaProducer.h"
Use AVRoutePickerView when available for choosing AirPlay devices https://bugs.webkit.org/show_bug.cgi?id=213497 <rdar://problem/58610662> Reviewed by Jer Noble. Source/WebCore: Use an AVRoutePickerView, the replacement for AVOutputDeviceMenuController, when it is available to allow a user to pick an AirPlay device. To do this, create an AVPlaybackTargetPicker abstract base and create a concrete class from the AVOutputDeviceMenuController-specific code from MediaPlaybackTargetPickerMac, and create a new concrete class using AVRoutePickerView. Tested manually because these changes require an AirPlay device. * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Pass the view to the target picker. * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/RemotePlayback.cpp: (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): Drive-by fix: return early if there are no pending promises. * SourcesCocoa.txt: Add new files. * WebCore.xcodeproj/project.pbxproj: Ditto. * platform/graphics/MediaPlaybackTargetPicker.cpp: (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker): Add new parameter. * platform/graphics/MediaPlaybackTargetPicker.h: * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.h: Copied from Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h. * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.mm: Copied from Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm. (WebCore::AVOutputDeviceMenuControllerTargetPicker::AVOutputDeviceMenuControllerTargetPicker): (WebCore::AVOutputDeviceMenuControllerTargetPicker::~AVOutputDeviceMenuControllerTargetPicker): (WebCore::AVOutputDeviceMenuControllerTargetPicker::devicePicker): (WebCore::AVOutputDeviceMenuControllerTargetPicker::availableDevicesDidChange): (WebCore::AVOutputDeviceMenuControllerTargetPicker::currentDeviceDidChange): (WebCore::AVOutputDeviceMenuControllerTargetPicker::showPlaybackTargetPicker): (WebCore::AVOutputDeviceMenuControllerTargetPicker::startingMonitoringPlaybackTargets): (WebCore::AVOutputDeviceMenuControllerTargetPicker::stopMonitoringPlaybackTargets): (WebCore::AVOutputDeviceMenuControllerTargetPicker::invalidatePlaybackTargets): (WebCore::AVOutputDeviceMenuControllerTargetPicker::externalOutputDeviceAvailable): (WebCore::AVOutputDeviceMenuControllerTargetPicker::outputContext): (-[WebAVOutputDeviceMenuControllerHelper initWithCallback:]): (-[WebAVOutputDeviceMenuControllerHelper clearCallback]): (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * platform/graphics/avfoundation/objc/AVPlaybackTargetPicker.h: Added. (WebCore::AVPlaybackTargetPicker::AVPlaybackTargetPicker): (WebCore::AVPlaybackTargetPicker::client const): * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.h: Added. * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm: Added. (WebCore::AVRoutePickerViewTargetPicker::isAvailable): (WebCore::AVRoutePickerViewTargetPicker::AVRoutePickerViewTargetPicker): (WebCore::AVRoutePickerViewTargetPicker::~AVRoutePickerViewTargetPicker): (WebCore::AVRoutePickerViewTargetPicker::outputContextInternal): (WebCore::AVRoutePickerViewTargetPicker::devicePicker): (WebCore::AVRoutePickerViewTargetPicker::routeDetector): (WebCore::AVRoutePickerViewTargetPicker::showPlaybackTargetPicker): (WebCore::AVRoutePickerViewTargetPicker::startingMonitoringPlaybackTargets): (WebCore::AVRoutePickerViewTargetPicker::stopMonitoringPlaybackTargets): (WebCore::AVRoutePickerViewTargetPicker::externalOutputDeviceAvailable): (WebCore::AVRoutePickerViewTargetPicker::outputContext): (WebCore::AVRoutePickerViewTargetPicker::invalidatePlaybackTargets): (WebCore::AVRoutePickerViewTargetPicker::availableDevicesDidChange): (WebCore::AVRoutePickerViewTargetPicker::currentDeviceDidChange): (WebCore::AVRoutePickerViewTargetPicker::devicePickerWasDismissed): (-[WebAVRoutePickerViewHelper initWithCallback:]): (-[WebAVRoutePickerViewHelper dealloc]): (-[WebAVRoutePickerViewHelper clearCallback]): (-[WebAVRoutePickerViewHelper routePickerViewDidEndPresentingRoutes:]): (-[WebAVRoutePickerViewHelper notificationHandler:]): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac): (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac): (WebCore::MediaPlaybackTargetPickerMac::externalOutputDeviceAvailable): (WebCore::MediaPlaybackTargetPickerMac::playbackTarget): (WebCore::MediaPlaybackTargetPickerMac::routePicker): (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): (WebCore::MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets): (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets): (WebCore::MediaPlaybackTargetPickerMac::invalidatePlaybackTargets): (WebCore::MediaPlaybackTargetPickerMac::pickerWasDismissed): (WebCore::MediaPlaybackTargetPickerMac::availableDevicesChanged): (WebCore::MediaPlaybackTargetPickerMac::currentDeviceChanged): (WebCore::MediaPlaybackTargetPickerMac::devicePicker): Deleted. (-[WebAVOutputDeviceMenuControllerHelper initWithCallback:]): Deleted. (-[WebAVOutputDeviceMenuControllerHelper clearCallback]): Deleted. (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): Deleted. * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.h: Source/WebCore/PAL: * pal/cocoa/AVFoundationSoftLink.h: * pal/cocoa/AVFoundationSoftLink.mm: Soft link AVRoutePickerView. * pal/spi/cocoa/AVKitSPI.h: Declare AVRoutePickerView. Source/WebKit: * UIProcess/WebPageProxy.h: * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::platformView const): Add new override. Source/WebKitLegacy/mac: * WebView/WebMediaPlaybackTargetPicker.h: (WebMediaPlaybackTargetPicker::~WebMediaPlaybackTargetPicker): Deleted. * WebView/WebMediaPlaybackTargetPicker.mm: (WebMediaPlaybackTargetPicker::create): (WebMediaPlaybackTargetPicker::WebMediaPlaybackTargetPicker): (WebMediaPlaybackTargetPicker::invalidate): (WebMediaPlaybackTargetPicker::platformView const): New override. * WebView/WebView.mm: (-[WebView _devicePicker]): Pass view to WebMediaPlaybackTargetPicker factory. Source/WTF: * wtf/PlatformHave.h: Define HAVE_AVROUTEPICKERVIEW. Tools: * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm: (TestWebKitAPI::TEST): Test AVOutputContextOutputDevicesDidChangeNotification. Don't check AVRouteDetectorMultipleRoutesDetectedDidChangeNotification on watchOS, we don't use it there. Canonical link: https://commits.webkit.org/227408@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@264663 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-07-21 17:46:28 +00:00
#include "PlatformView.h"
Use ObjectIdentifier<>instead of WebCore::nextPlaybackTargetClientContextId() in Document.cpp <https://webkit.org/b/213546> <rdar://problem/61803576> Reviewed by Youenn Fablet. Switch from uint64_t to WebCore::PlaybackTargetClientContextIdentifier for contextId values. Source/WebCore: * Headers.cmake: * WebCore.xcodeproj/project.pbxproj: - Add PlaybackTargetClientContextIdentifier.h to the project. * Modules/mediasession/PlaybackTargetClientContextIdentifier.h: Add. * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::ClientState::ClientState): (WebCore::WebMediaSessionLogger::logAlways const): (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): (WebCore::WebMediaSessionManager::clientStateDidChange): (WebCore::WebMediaSessionManager::find): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * dom/Document.cpp: (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::setPlaybackTarget): (WebCore::Document::setShouldPlayToPlaybackTarget): (WebCore::Document::playbackTargetPickerWasDismissed): (WebCore::nextPlaybackTargetClientContextId): Delete. - Replace with PlaybackTargetClientContextIdentifier::generate(). * dom/Document.h: * page/ChromeClient.h: (WebCore::ChromeClient::addPlaybackTargetPickerClient): (WebCore::ChromeClient::removePlaybackTargetPickerClient): (WebCore::ChromeClient::showPlaybackTargetPicker): (WebCore::ChromeClient::playbackTargetPickerClientStateDidChange): * page/Page.cpp: (WebCore::Page::addPlaybackTargetPickerClient): (WebCore::Page::removePlaybackTargetPickerClient): (WebCore::Page::showPlaybackTargetPicker): (WebCore::Page::playbackTargetPickerClientStateDidChange): (WebCore::Page::setPlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::setShouldPlayToPlaybackTarget): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: Source/WebKit: * Scripts/webkit/messages.py: (types_that_cannot_be_forward_declared): - Add WebCore::PlaybackTargetClientContextIdentifier to list. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::addPlaybackTargetPickerClient): (WebKit::WebPageProxy::removePlaybackTargetPickerClient): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange): (WebKit::WebPageProxy::setPlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget): (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::addPlaybackTargetPickerClient): (WebKit::WebChromeClient::removePlaybackTargetPickerClient): (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::playbackTargetPickerClientStateDidChange): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected const): (WebKit::WebPage::playbackTargetAvailabilityDidChange): (WebKit::WebPage::setShouldPlayToPlaybackTarget): (WebKit::WebPage::playbackTargetPickerWasDismissed): Source/WebKitLegacy/mac: * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::addPlaybackTargetPickerClient): (WebChromeClient::removePlaybackTargetPickerClient): (WebChromeClient::showPlaybackTargetPicker): (WebChromeClient::playbackTargetPickerClientStateDidChange): * WebView/WebMediaPlaybackTargetPicker.h: * WebView/WebMediaPlaybackTargetPicker.mm: (WebMediaPlaybackTargetPicker::addPlaybackTargetPickerClient): (WebMediaPlaybackTargetPicker::removePlaybackTargetPickerClient): (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker): (WebMediaPlaybackTargetPicker::playbackTargetPickerClientStateDidChange): (WebMediaPlaybackTargetPicker::setPlaybackTarget): (WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange): (WebMediaPlaybackTargetPicker::setShouldPlayToPlaybackTarget): (WebMediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * WebView/WebView.mm: (-[WebView _addPlaybackTargetPickerClient:]): (-[WebView _removePlaybackTargetPickerClient:]): (-[WebView _showPlaybackTargetPicker:location:hasVideo:]): (-[WebView _playbackTargetPickerClientStateDidChange:state:]): * WebView/WebViewInternal.h: Canonical link: https://commits.webkit.org/226384@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@263498 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-06-25 04:25:05 +00:00
#include "PlaybackTargetClientContextIdentifier.h"
#include <wtf/Ref.h>
[Mac] Update AirPlay handling https://bugs.webkit.org/show_bug.cgi?id=142541 Reviewed by Sam Weinig. Source/WebCore: * WebCore.xcodeproj/project.pbxproj: * dom/Document.cpp: (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::configurePlaybackTargetMonitoring): (WebCore::Document::requiresPlaybackTargetRouteMonitoring): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::didChoosePlaybackTarget): * dom/Document.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::unregisterWithDocument): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::HTMLMediaSession): (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): * html/HTMLMediaSession.h: * page/ChromeClient.h: * page/Page.cpp: (WebCore::Page::didChoosePlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::configurePlaybackTargetMonitoring): * page/Page.h: (WebCore::Page::hasWirelessPlaybackTarget): (WebCore::Page::playbackTarget): * platform/audio/MediaSession.cpp: (WebCore::MediaSession::clientDataBufferingTimerFired): (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::didChoosePlaybackTarget): (WebCore::MediaSession::externalOutputDeviceAvailableDidChange): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setWirelessPlaybackTarget): * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Deleted. * platform/audio/MediaSessionManager.h: (WebCore::MediaSessionManager::configureWireLessTargetMonitoring): * platform/audio/ios/MediaSessionManagerIOS.h: * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange): (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): * platform/graphics/AVPlaybackTarget.h: Added. (WebCore::AVPlaybackTarget::~AVPlaybackTarget): (WebCore::AVPlaybackTarget::AVPlaybackTarget): (WebCore::AVPlaybackTarget::setDevicePickerContext): (WebCore::AVPlaybackTarget::devicePickerContext): * platform/graphics/AVPlaybackTargetPickerClient.h: Added. (WebCore::AVPlaybackTargetPickerClient::~AVPlaybackTargetPickerClient): * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setWirelessPlaybackTarget): * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget): * platform/graphics/avfoundation/AVPlaybackTargetMac.mm: Added. (WebCore::AVPlaybackTarget::encode): (WebCore::AVPlaybackTarget::decode): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback): (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Source/WebKit2: * Shared/WebCoreArgumentCoders.h: * Shared/mac/WebCoreArgumentCodersMac.mm: (IPC::ArgumentCoder<AVPlaybackTarget>::encode): (IPC::ArgumentCoder<AVPlaybackTarget>::decode): * UIProcess/PageClient.h: * UIProcess/WebAVPlaybackTargetPickerProxy.cpp: Added. (WebKit::WebAVPlaybackTargetPickerProxy::WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::~WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets): * UIProcess/WebAVPlaybackTargetPickerProxy.h: Added. (WebKit::WebAVPlaybackTargetPickerProxy::Client::~Client): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::devicePickerProxy): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): (WebKit::WebPageProxy::didChoosePlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::createPlaybackTargetPicker): * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.h: Added. * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.mm: Added. (WebKit::WebAVPlaybackTargetPickerProxyMac::create): (WebKit::WebAVPlaybackTargetPickerProxyMac::WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::~WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired): (WebKit::WebAVPlaybackTargetPickerProxyMac::availableDevicesDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::devicePicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::currentDeviceDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets): (-[WebAVOutputDevicePickerMenuControllerHelper initWithCallback:]): (-[WebAVOutputDevicePickerMenuControllerHelper clearCallback]): (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebAVPlaybackTargetPicker.cpp: Added. (WebKit::WebAVPlaybackTargetPicker::WebAVPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPicker::showPlaybackDevicePicker): (WebKit::WebAVPlaybackTargetPicker::configureWireLessTargetMonitoring): (WebKit::WebAVPlaybackTargetPicker::addClient): (WebKit::WebAVPlaybackTargetPicker::removeClient): (WebKit::WebAVPlaybackTargetPicker::didChoosePlaybackTarget): (WebKit::WebAVPlaybackTargetPicker::playbackTargetAvailabilityDidChange): * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): * WebProcess/com.apple.WebProcess.sb.in: Canonical link: https://commits.webkit.org/160640@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-12 01:54:06 +00:00
namespace WebCore {
[Mac] Use one playback target for all web processes https://bugs.webkit.org/show_bug.cgi?id=144009 Reviewed by Tim Horton. Source/WebCore: * Modules/mediacontrols/mediaControlsApple.js: (Controller.prototype.updateWirelessPlaybackStatus): Drive-by fix to show controls when we show the placeholder image. Instead of having each Page/Document pair manage access to the playback target for the videos in a web process, put all of the logic into a new class - WebMediaSessionManager. A singleton instance talks to the target picker and manages video element access for all web processes. All playback target logic was removed from Document, Page, and MediaSessionManager. * Modules/mediasession: Added. * Modules/mediasession/WebMediaSessionManager.cpp: Added. (WebCore::ClientState::ClientState): (WebCore::flagsAreSet): (WebCore::WebMediaSessionManager::WebMediaSessionManager): (WebCore::WebMediaSessionManager::~WebMediaSessionManager): (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients): (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): (WebCore::WebMediaSessionManager::clientStateDidChange): (WebCore::WebMediaSessionManager::setPlaybackTarget): (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange): (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): (WebCore::WebMediaSessionManager::taskTimerFired): (WebCore::WebMediaSessionManager::find): (WebCore::WebMediaSessionManager::forEachClient): * Modules/mediasession/WebMediaSessionManager.h: Added. * Modules/mediasession/WebMediaSessionManagerClient.h: Added. (WebCore::WebMediaSessionManagerClient::~WebMediaSessionManagerClient): * Modules/webaudio/AudioContext.cpp: (WebCore::AudioContext::mediaState): Replaces isPlayingAudio. (WebCore::AudioContext::isPlayingAudio): Deleted. * Modules/webaudio/AudioContext.h: * WebCore.xcodeproj/project.pbxproj: Added new files. * dom/Document.cpp: (WebCore::Document::Document): (WebCore::Document::addAudioProducer): Take a MediaProducer instead of an AudioProducer. (WebCore::Document::removeAudioProducer): (WebCore::Document::updateIsPlayingMedia): (WebCore::nextPlaybackTargetClientContextId): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::playbackTargetPickerClientStateDidChange): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::setPlaybackTarget): (WebCore::Document::setShouldPlayToPlaybackTarget): (WebCore::Document::configurePlaybackTargetMonitoring): Deleted. (WebCore::Document::requiresPlaybackTargetRouteMonitoring): Deleted. (WebCore::Document::didChoosePlaybackTarget): Deleted. * dom/Document.h: (WebCore::Document::mediaState): (WebCore::Document::isPlayingAudio): Deleted. * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::~HTMLMediaElement): (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::setMuted): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::setPlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::setShouldPlayToPlaybackTarget): (WebCore::HTMLMediaSession::mediaStateDidChange): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): Deleted. (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): Deleted. (WebCore::HTMLMediaSession::startPlayingToPlaybackTarget): Deleted. (WebCore::HTMLMediaSession::stopPlayingToPlaybackTarget): Deleted. * html/HTMLMediaSession.h: * page/AudioProducer.h: Removed. * page/ChromeClient.h: * page/MediaProducer.h: Copied from Source/WebCore/page/AudioProducer.h. (WebCore::MediaProducer::~MediaProducer): (WebCore::AudioProducer::~AudioProducer): Deleted. * page/Page.cpp: (WebCore::Page::Page): (WebCore::Page::updateIsPlayingMedia): (WebCore::Page::addPlaybackTargetPickerClient): (WebCore::Page::removePlaybackTargetPickerClient): (WebCore::Page::showPlaybackTargetPicker): (WebCore::Page::playbackTargetPickerClientStateDidChange): (WebCore::Page::setPlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::setShouldPlayToPlaybackTarget): (WebCore::Page::playbackTarget): Deleted. (WebCore::Page::didChoosePlaybackTarget): Deleted. (WebCore::Page::configurePlaybackTargetMonitoring): Deleted. * page/Page.h: (WebCore::Page::mediaState): (WebCore::Page::isPlayingAudio): Deleted. (WebCore::Page::hasWirelessPlaybackTarget): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::isPlayingToWirelessPlaybackTarget): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setShouldPlayToPlaybackTarget): (WebCore::MediaSession::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaSession::stopPlayingToPlaybackTarget): Deleted. (WebCore::MediaSessionClient::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaSessionClient::stopPlayingToPlaybackTarget): Deleted. * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::sessionWillBeginPlayback): (WebCore::MediaSessionManager::sessionCanLoadMedia): (WebCore::MediaSessionManager::sessionShouldBeginPlayingToWirelessPlaybackTarget): Deleted. * platform/audio/MediaSessionManager.h: * platform/graphics/MediaPlaybackTargetClient.h: Copied from Source/WebCore/platform/graphics/MediaPlaybackTargetPickerClient.h. (WebCore::MediaPlaybackTargetClient::~MediaPlaybackTargetClient): (WebCore::MediaPlaybackTargetPickerClient::~MediaPlaybackTargetPickerClient): Deleted. * platform/graphics/MediaPlaybackTargetPicker.cpp: (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker): (WebCore::MediaPlaybackTargetPicker::startingMonitoringPlaybackTargets): (WebCore::MediaPlaybackTargetPicker::stopMonitoringPlaybackTargets): * platform/graphics/MediaPlaybackTargetPicker.h: * platform/graphics/MediaPlaybackTargetPickerClient.h: Removed. * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayer::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayer::stopPlayingToPlaybackTarget): Deleted. * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayerPrivateInterface::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateInterface::stopPlayingToPlaybackTarget): Deleted. * platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp: Added. (WebCore::WebMediaSessionManagerMac::singleton): (WebCore::WebMediaSessionManagerMac::WebMediaSessionManagerMac): (WebCore::WebMediaSessionManagerMac::~WebMediaSessionManagerMac): (WebCore::WebMediaSessionManagerMac::targetPicker): * platform/graphics/avfoundation/WebMediaSessionManagerMac.h: Added. * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateAVFoundationObjC::stopPlayingToPlaybackTarget): Deleted. * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::togglePlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::stopPlayingToPlaybackTarget): Deleted. * platform/graphics/mac/MediaPlayerPrivateQTKit.h: * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: (WebCore::MediaPlayerPrivateQTKit::setShouldPlayToPlaybackTarget): (WebCore::MediaPlayerPrivateQTKit::togglePlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateQTKit::startPlayingToPlaybackTarget): Deleted. (WebCore::MediaPlayerPrivateQTKit::stopPlayingToPlaybackTarget): Deleted. * testing/Internals.cpp: (WebCore::Internals::isPagePlayingAudio): Source/WebKit/mac: Update to use WebMediaSessionManager for playback target management. * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::addPlaybackTargetPickerClient): (WebChromeClient::removePlaybackTargetPickerClient): (WebChromeClient::showPlaybackTargetPicker): (WebChromeClient::playbackTargetPickerClientStateDidChange): (WebChromeClient::startingMonitoringPlaybackTargets): Deleted. (WebChromeClient::stopMonitoringPlaybackTargets): Deleted. * WebView/WebMediaPlaybackTargetPicker.h: * WebView/WebMediaPlaybackTargetPicker.mm: (WebMediaPlaybackTargetPicker::addPlaybackTargetPickerClient): (WebMediaPlaybackTargetPicker::removePlaybackTargetPickerClient): (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker): (WebMediaPlaybackTargetPicker::playbackTargetPickerClientStateDidChange): (WebMediaPlaybackTargetPicker::setPlaybackTarget): (WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange): (WebMediaPlaybackTargetPicker::setShouldPlayToPlaybackTarget): (WebMediaPlaybackTargetPicker::invalidate): (WebMediaPlaybackTargetPicker::startingMonitoringPlaybackTargets): Deleted. (WebMediaPlaybackTargetPicker::stopMonitoringPlaybackTargets): Deleted. (WebMediaPlaybackTargetPicker::didChoosePlaybackTarget): Deleted. (WebMediaPlaybackTargetPicker::targetPicker): Deleted. * WebView/WebView.mm: (-[WebView _addPlaybackTargetPickerClient:]): (-[WebView _removePlaybackTargetPickerClient:]): (-[WebView _showPlaybackTargetPicker:location:hasVideo:]): (-[WebView _playbackTargetPickerClientStateDidChange:state:]): (-[WebView _showPlaybackTargetPicker:hasVideo:]): Deleted. (-[WebView _startingMonitoringPlaybackTargets]): Deleted. (-[WebView _stopMonitoringPlaybackTargets]): Deleted. * WebView/WebViewInternal.h: Source/WebKit2: Every WebPageProxy uses the WebMediaSessionManager singleton to talk to the playback target picker. * UIProcess/PageClient.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::WebPageProxy): (WebKit::WebPageProxy::resetState): (WebKit::WebPageProxy::isPlayingMediaDidChange): (WebKit::WebPageProxy::addPlaybackTargetPickerClient): (WebKit::WebPageProxy::removePlaybackTargetPickerClient): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange): (WebKit::WebPageProxy::setPlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget): (WebKit::WebPageProxy::devicePickerProxy): Deleted. (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): Deleted. (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): Deleted. (WebKit::WebPageProxy::didChoosePlaybackTarget): Deleted. * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::isPlayingAudio): * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::mediaSessionManager): (WebKit::PageClientImpl::createPlaybackTargetPicker): Deleted. * UIProcess/mac/WebMediaSessionManagerMac.cpp: Added. (WebKit::WebMediaSessionManagerMac::singleton): (WebKit::WebMediaSessionManagerMac::WebMediaSessionManagerMac): (WebKit::WebMediaSessionManagerMac::~WebMediaSessionManagerMac): (WebKit::WebMediaSessionManagerMac::targetPicker): * UIProcess/mac/WebMediaSessionManagerMac.h: Added. * WebProcess/Plugins/PluginView.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::isPlayingMediaDidChange): (WebKit::WebChromeClient::addPlaybackTargetPickerClient): (WebKit::WebChromeClient::removePlaybackTargetPickerClient): (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::playbackTargetPickerClientStateDidChange): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): Deleted. (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): Deleted. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): (WebKit::WebPage::setShouldPlayToPlaybackTarget): Canonical link: https://commits.webkit.org/161997@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183096 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-04-22 04:06:57 +00:00
class WebMediaSessionManagerClient {
[Mac] Update AirPlay handling https://bugs.webkit.org/show_bug.cgi?id=142541 Reviewed by Sam Weinig. Source/WebCore: * WebCore.xcodeproj/project.pbxproj: * dom/Document.cpp: (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::configurePlaybackTargetMonitoring): (WebCore::Document::requiresPlaybackTargetRouteMonitoring): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::didChoosePlaybackTarget): * dom/Document.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::unregisterWithDocument): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::HTMLMediaSession): (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): * html/HTMLMediaSession.h: * page/ChromeClient.h: * page/Page.cpp: (WebCore::Page::didChoosePlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::configurePlaybackTargetMonitoring): * page/Page.h: (WebCore::Page::hasWirelessPlaybackTarget): (WebCore::Page::playbackTarget): * platform/audio/MediaSession.cpp: (WebCore::MediaSession::clientDataBufferingTimerFired): (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::didChoosePlaybackTarget): (WebCore::MediaSession::externalOutputDeviceAvailableDidChange): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setWirelessPlaybackTarget): * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Deleted. * platform/audio/MediaSessionManager.h: (WebCore::MediaSessionManager::configureWireLessTargetMonitoring): * platform/audio/ios/MediaSessionManagerIOS.h: * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange): (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): * platform/graphics/AVPlaybackTarget.h: Added. (WebCore::AVPlaybackTarget::~AVPlaybackTarget): (WebCore::AVPlaybackTarget::AVPlaybackTarget): (WebCore::AVPlaybackTarget::setDevicePickerContext): (WebCore::AVPlaybackTarget::devicePickerContext): * platform/graphics/AVPlaybackTargetPickerClient.h: Added. (WebCore::AVPlaybackTargetPickerClient::~AVPlaybackTargetPickerClient): * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setWirelessPlaybackTarget): * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget): * platform/graphics/avfoundation/AVPlaybackTargetMac.mm: Added. (WebCore::AVPlaybackTarget::encode): (WebCore::AVPlaybackTarget::decode): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback): (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Source/WebKit2: * Shared/WebCoreArgumentCoders.h: * Shared/mac/WebCoreArgumentCodersMac.mm: (IPC::ArgumentCoder<AVPlaybackTarget>::encode): (IPC::ArgumentCoder<AVPlaybackTarget>::decode): * UIProcess/PageClient.h: * UIProcess/WebAVPlaybackTargetPickerProxy.cpp: Added. (WebKit::WebAVPlaybackTargetPickerProxy::WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::~WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets): * UIProcess/WebAVPlaybackTargetPickerProxy.h: Added. (WebKit::WebAVPlaybackTargetPickerProxy::Client::~Client): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::devicePickerProxy): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): (WebKit::WebPageProxy::didChoosePlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::createPlaybackTargetPicker): * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.h: Added. * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.mm: Added. (WebKit::WebAVPlaybackTargetPickerProxyMac::create): (WebKit::WebAVPlaybackTargetPickerProxyMac::WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::~WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired): (WebKit::WebAVPlaybackTargetPickerProxyMac::availableDevicesDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::devicePicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::currentDeviceDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets): (-[WebAVOutputDevicePickerMenuControllerHelper initWithCallback:]): (-[WebAVOutputDevicePickerMenuControllerHelper clearCallback]): (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebAVPlaybackTargetPicker.cpp: Added. (WebKit::WebAVPlaybackTargetPicker::WebAVPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPicker::showPlaybackDevicePicker): (WebKit::WebAVPlaybackTargetPicker::configureWireLessTargetMonitoring): (WebKit::WebAVPlaybackTargetPicker::addClient): (WebKit::WebAVPlaybackTargetPicker::removeClient): (WebKit::WebAVPlaybackTargetPicker::didChoosePlaybackTarget): (WebKit::WebAVPlaybackTargetPicker::playbackTargetAvailabilityDidChange): * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): * WebProcess/com.apple.WebProcess.sb.in: Canonical link: https://commits.webkit.org/160640@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-12 01:54:06 +00:00
public:
Use "= default" to denote default constructor or destructor https://bugs.webkit.org/show_bug.cgi?id=178528 Rubber-stamped by Andy Estes. Source/WebCore: * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h: * Modules/applepay/ApplePayError.cpp: * Modules/applepay/ApplePayPaymentAuthorizedEvent.cpp: * Modules/applepay/ApplePayPaymentMethodSelectedEvent.cpp: * Modules/applepay/ApplePaySession.cpp: * Modules/applepay/ApplePaySessionPaymentRequest.cpp: * Modules/applepay/ApplePayShippingContactSelectedEvent.cpp: * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp: * Modules/applepay/ApplePayValidateMerchantEvent.cpp: * Modules/applepay/Payment.h: * Modules/applepay/PaymentCoordinatorClient.h: * Modules/credentials/BasicCredential.cpp: * Modules/credentials/FederatedCredential.cpp: * Modules/credentials/NavigatorCredentials.cpp: * Modules/credentials/PasswordCredential.cpp: * Modules/encryptedmedia/CDMClient.h: * Modules/encryptedmedia/legacy/LegacyCDM.cpp: * Modules/encryptedmedia/legacy/LegacyCDM.h: * Modules/encryptedmedia/legacy/LegacyCDMPrivate.h: * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.h: * Modules/encryptedmedia/legacy/LegacyCDMPrivateMediaPlayer.h: * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp: * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp: * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp: * Modules/entriesapi/DOMFileSystem.cpp: * Modules/entriesapi/FileSystemDirectoryReader.cpp: * Modules/entriesapi/FileSystemEntry.cpp: * Modules/fetch/FetchLoaderClient.h: * Modules/gamepad/Gamepad.cpp: * Modules/gamepad/GamepadEvent.h: * Modules/gamepad/deprecated/Gamepad.cpp: [ truncated ] Source/WebCore/PAL: * pal/Logger.h: (PAL::Logger::Observer::~Observer): Deleted. * pal/crypto/gcrypt/CryptoDigestGCrypt.cpp: * pal/system/SleepDisabler.cpp: * pal/system/SystemSleepListener.h: Canonical link: https://commits.webkit.org/194740@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@223728 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-10-19 23:48:45 +00:00
virtual ~WebMediaSessionManagerClient() = default;
[Mac] Update AirPlay handling https://bugs.webkit.org/show_bug.cgi?id=142541 Reviewed by Sam Weinig. Source/WebCore: * WebCore.xcodeproj/project.pbxproj: * dom/Document.cpp: (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::configurePlaybackTargetMonitoring): (WebCore::Document::requiresPlaybackTargetRouteMonitoring): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::didChoosePlaybackTarget): * dom/Document.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::unregisterWithDocument): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::HTMLMediaSession): (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): * html/HTMLMediaSession.h: * page/ChromeClient.h: * page/Page.cpp: (WebCore::Page::didChoosePlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::configurePlaybackTargetMonitoring): * page/Page.h: (WebCore::Page::hasWirelessPlaybackTarget): (WebCore::Page::playbackTarget): * platform/audio/MediaSession.cpp: (WebCore::MediaSession::clientDataBufferingTimerFired): (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::didChoosePlaybackTarget): (WebCore::MediaSession::externalOutputDeviceAvailableDidChange): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setWirelessPlaybackTarget): * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Deleted. * platform/audio/MediaSessionManager.h: (WebCore::MediaSessionManager::configureWireLessTargetMonitoring): * platform/audio/ios/MediaSessionManagerIOS.h: * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange): (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): * platform/graphics/AVPlaybackTarget.h: Added. (WebCore::AVPlaybackTarget::~AVPlaybackTarget): (WebCore::AVPlaybackTarget::AVPlaybackTarget): (WebCore::AVPlaybackTarget::setDevicePickerContext): (WebCore::AVPlaybackTarget::devicePickerContext): * platform/graphics/AVPlaybackTargetPickerClient.h: Added. (WebCore::AVPlaybackTargetPickerClient::~AVPlaybackTargetPickerClient): * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setWirelessPlaybackTarget): * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget): * platform/graphics/avfoundation/AVPlaybackTargetMac.mm: Added. (WebCore::AVPlaybackTarget::encode): (WebCore::AVPlaybackTarget::decode): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback): (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Source/WebKit2: * Shared/WebCoreArgumentCoders.h: * Shared/mac/WebCoreArgumentCodersMac.mm: (IPC::ArgumentCoder<AVPlaybackTarget>::encode): (IPC::ArgumentCoder<AVPlaybackTarget>::decode): * UIProcess/PageClient.h: * UIProcess/WebAVPlaybackTargetPickerProxy.cpp: Added. (WebKit::WebAVPlaybackTargetPickerProxy::WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::~WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets): * UIProcess/WebAVPlaybackTargetPickerProxy.h: Added. (WebKit::WebAVPlaybackTargetPickerProxy::Client::~Client): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::devicePickerProxy): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): (WebKit::WebPageProxy::didChoosePlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::createPlaybackTargetPicker): * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.h: Added. * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.mm: Added. (WebKit::WebAVPlaybackTargetPickerProxyMac::create): (WebKit::WebAVPlaybackTargetPickerProxyMac::WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::~WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired): (WebKit::WebAVPlaybackTargetPickerProxyMac::availableDevicesDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::devicePicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::currentDeviceDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets): (-[WebAVOutputDevicePickerMenuControllerHelper initWithCallback:]): (-[WebAVOutputDevicePickerMenuControllerHelper clearCallback]): (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebAVPlaybackTargetPicker.cpp: Added. (WebKit::WebAVPlaybackTargetPicker::WebAVPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPicker::showPlaybackDevicePicker): (WebKit::WebAVPlaybackTargetPicker::configureWireLessTargetMonitoring): (WebKit::WebAVPlaybackTargetPicker::addClient): (WebKit::WebAVPlaybackTargetPicker::removeClient): (WebKit::WebAVPlaybackTargetPicker::didChoosePlaybackTarget): (WebKit::WebAVPlaybackTargetPicker::playbackTargetAvailabilityDidChange): * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): * WebProcess/com.apple.WebProcess.sb.in: Canonical link: https://commits.webkit.org/160640@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-12 01:54:06 +00:00
Use ObjectIdentifier<>instead of WebCore::nextPlaybackTargetClientContextId() in Document.cpp <https://webkit.org/b/213546> <rdar://problem/61803576> Reviewed by Youenn Fablet. Switch from uint64_t to WebCore::PlaybackTargetClientContextIdentifier for contextId values. Source/WebCore: * Headers.cmake: * WebCore.xcodeproj/project.pbxproj: - Add PlaybackTargetClientContextIdentifier.h to the project. * Modules/mediasession/PlaybackTargetClientContextIdentifier.h: Add. * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::ClientState::ClientState): (WebCore::WebMediaSessionLogger::logAlways const): (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient): (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): (WebCore::WebMediaSessionManager::clientStateDidChange): (WebCore::WebMediaSessionManager::find): * Modules/mediasession/WebMediaSessionManager.h: * Modules/mediasession/WebMediaSessionManagerClient.h: * dom/Document.cpp: (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::setPlaybackTarget): (WebCore::Document::setShouldPlayToPlaybackTarget): (WebCore::Document::playbackTargetPickerWasDismissed): (WebCore::nextPlaybackTargetClientContextId): Delete. - Replace with PlaybackTargetClientContextIdentifier::generate(). * dom/Document.h: * page/ChromeClient.h: (WebCore::ChromeClient::addPlaybackTargetPickerClient): (WebCore::ChromeClient::removePlaybackTargetPickerClient): (WebCore::ChromeClient::showPlaybackTargetPicker): (WebCore::ChromeClient::playbackTargetPickerClientStateDidChange): * page/Page.cpp: (WebCore::Page::addPlaybackTargetPickerClient): (WebCore::Page::removePlaybackTargetPickerClient): (WebCore::Page::showPlaybackTargetPicker): (WebCore::Page::playbackTargetPickerClientStateDidChange): (WebCore::Page::setPlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::setShouldPlayToPlaybackTarget): (WebCore::Page::playbackTargetPickerWasDismissed): * page/Page.h: Source/WebKit: * Scripts/webkit/messages.py: (types_that_cannot_be_forward_declared): - Add WebCore::PlaybackTargetClientContextIdentifier to list. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::addPlaybackTargetPickerClient): (WebKit::WebPageProxy::removePlaybackTargetPickerClient): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange): (WebKit::WebPageProxy::setPlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget): (WebKit::WebPageProxy::playbackTargetPickerWasDismissed): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::addPlaybackTargetPickerClient): (WebKit::WebChromeClient::removePlaybackTargetPickerClient): (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::playbackTargetPickerClientStateDidChange): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected const): (WebKit::WebPage::playbackTargetAvailabilityDidChange): (WebKit::WebPage::setShouldPlayToPlaybackTarget): (WebKit::WebPage::playbackTargetPickerWasDismissed): Source/WebKitLegacy/mac: * WebCoreSupport/WebChromeClient.h: * WebCoreSupport/WebChromeClient.mm: (WebChromeClient::addPlaybackTargetPickerClient): (WebChromeClient::removePlaybackTargetPickerClient): (WebChromeClient::showPlaybackTargetPicker): (WebChromeClient::playbackTargetPickerClientStateDidChange): * WebView/WebMediaPlaybackTargetPicker.h: * WebView/WebMediaPlaybackTargetPicker.mm: (WebMediaPlaybackTargetPicker::addPlaybackTargetPickerClient): (WebMediaPlaybackTargetPicker::removePlaybackTargetPickerClient): (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker): (WebMediaPlaybackTargetPicker::playbackTargetPickerClientStateDidChange): (WebMediaPlaybackTargetPicker::setPlaybackTarget): (WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange): (WebMediaPlaybackTargetPicker::setShouldPlayToPlaybackTarget): (WebMediaPlaybackTargetPicker::playbackTargetPickerWasDismissed): * WebView/WebView.mm: (-[WebView _addPlaybackTargetPickerClient:]): (-[WebView _removePlaybackTargetPickerClient:]): (-[WebView _showPlaybackTargetPicker:location:hasVideo:]): (-[WebView _playbackTargetPickerClientStateDidChange:state:]): * WebView/WebViewInternal.h: Canonical link: https://commits.webkit.org/226384@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@263498 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-06-25 04:25:05 +00:00
virtual void setPlaybackTarget(PlaybackTargetClientContextIdentifier, Ref<MediaPlaybackTarget>&&) = 0;
virtual void externalOutputDeviceAvailableDidChange(PlaybackTargetClientContextIdentifier, bool) = 0;
virtual void setShouldPlayToPlaybackTarget(PlaybackTargetClientContextIdentifier, bool) = 0;
virtual void playbackTargetPickerWasDismissed(PlaybackTargetClientContextIdentifier) = 0;
[macOS] Add internal preference to control how AVOutputContext is allocated https://bugs.webkit.org/show_bug.cgi?id=221583 <rdar://73830632> Reviewed by Jer Noble. Source/WebCore: No new tests, this can only be tested manually. * Modules/airplay/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): * Modules/airplay/WebMediaSessionManagerClient.h: (WebCore::WebMediaSessionManagerClient::alwaysOnLoggingAllowed const): (WebCore::WebMediaSessionManagerClient::useiTunesAVOutputContext const): (WebCore::WebMediaSessionManagerClient::alwaysOnLoggingAllowed): Deleted. * platform/graphics/MediaPlaybackTargetPicker.cpp: (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker): * platform/graphics/MediaPlaybackTargetPicker.h: * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.h: * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.mm: (WebCore::AVOutputDeviceMenuControllerTargetPicker::showPlaybackTargetPicker): * platform/graphics/avfoundation/objc/AVPlaybackTargetPicker.h: * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.h: * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm: (WebCore::AVRoutePickerViewTargetPicker::outputContextInternal): (WebCore::AVRoutePickerViewTargetPicker::showPlaybackTargetPicker): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.h: Source/WebKit: * UIProcess/WebPageProxy.h: * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::useiTunesAVOutputContext const): Source/WTF: * Scripts/Preferences/WebPreferencesInternal.yaml: Canonical link: https://commits.webkit.org/233874@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@272611 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-02-09 22:05:39 +00:00
virtual bool alwaysOnLoggingAllowed() const { return false; }
virtual bool useiTunesAVOutputContext() const { return true; }
Use AVRoutePickerView when available for choosing AirPlay devices https://bugs.webkit.org/show_bug.cgi?id=213497 <rdar://problem/58610662> Reviewed by Jer Noble. Source/WebCore: Use an AVRoutePickerView, the replacement for AVOutputDeviceMenuController, when it is available to allow a user to pick an AirPlay device. To do this, create an AVPlaybackTargetPicker abstract base and create a concrete class from the AVOutputDeviceMenuController-specific code from MediaPlaybackTargetPickerMac, and create a new concrete class using AVRoutePickerView. Tested manually because these changes require an AirPlay device. * Modules/mediasession/WebMediaSessionManager.cpp: (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Pass the view to the target picker. * Modules/mediasession/WebMediaSessionManagerClient.h: * Modules/remoteplayback/RemotePlayback.cpp: (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): Drive-by fix: return early if there are no pending promises. * SourcesCocoa.txt: Add new files. * WebCore.xcodeproj/project.pbxproj: Ditto. * platform/graphics/MediaPlaybackTargetPicker.cpp: (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker): Add new parameter. * platform/graphics/MediaPlaybackTargetPicker.h: * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.h: Copied from Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h. * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.mm: Copied from Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm. (WebCore::AVOutputDeviceMenuControllerTargetPicker::AVOutputDeviceMenuControllerTargetPicker): (WebCore::AVOutputDeviceMenuControllerTargetPicker::~AVOutputDeviceMenuControllerTargetPicker): (WebCore::AVOutputDeviceMenuControllerTargetPicker::devicePicker): (WebCore::AVOutputDeviceMenuControllerTargetPicker::availableDevicesDidChange): (WebCore::AVOutputDeviceMenuControllerTargetPicker::currentDeviceDidChange): (WebCore::AVOutputDeviceMenuControllerTargetPicker::showPlaybackTargetPicker): (WebCore::AVOutputDeviceMenuControllerTargetPicker::startingMonitoringPlaybackTargets): (WebCore::AVOutputDeviceMenuControllerTargetPicker::stopMonitoringPlaybackTargets): (WebCore::AVOutputDeviceMenuControllerTargetPicker::invalidatePlaybackTargets): (WebCore::AVOutputDeviceMenuControllerTargetPicker::externalOutputDeviceAvailable): (WebCore::AVOutputDeviceMenuControllerTargetPicker::outputContext): (-[WebAVOutputDeviceMenuControllerHelper initWithCallback:]): (-[WebAVOutputDeviceMenuControllerHelper clearCallback]): (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * platform/graphics/avfoundation/objc/AVPlaybackTargetPicker.h: Added. (WebCore::AVPlaybackTargetPicker::AVPlaybackTargetPicker): (WebCore::AVPlaybackTargetPicker::client const): * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.h: Added. * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm: Added. (WebCore::AVRoutePickerViewTargetPicker::isAvailable): (WebCore::AVRoutePickerViewTargetPicker::AVRoutePickerViewTargetPicker): (WebCore::AVRoutePickerViewTargetPicker::~AVRoutePickerViewTargetPicker): (WebCore::AVRoutePickerViewTargetPicker::outputContextInternal): (WebCore::AVRoutePickerViewTargetPicker::devicePicker): (WebCore::AVRoutePickerViewTargetPicker::routeDetector): (WebCore::AVRoutePickerViewTargetPicker::showPlaybackTargetPicker): (WebCore::AVRoutePickerViewTargetPicker::startingMonitoringPlaybackTargets): (WebCore::AVRoutePickerViewTargetPicker::stopMonitoringPlaybackTargets): (WebCore::AVRoutePickerViewTargetPicker::externalOutputDeviceAvailable): (WebCore::AVRoutePickerViewTargetPicker::outputContext): (WebCore::AVRoutePickerViewTargetPicker::invalidatePlaybackTargets): (WebCore::AVRoutePickerViewTargetPicker::availableDevicesDidChange): (WebCore::AVRoutePickerViewTargetPicker::currentDeviceDidChange): (WebCore::AVRoutePickerViewTargetPicker::devicePickerWasDismissed): (-[WebAVRoutePickerViewHelper initWithCallback:]): (-[WebAVRoutePickerViewHelper dealloc]): (-[WebAVRoutePickerViewHelper clearCallback]): (-[WebAVRoutePickerViewHelper routePickerViewDidEndPresentingRoutes:]): (-[WebAVRoutePickerViewHelper notificationHandler:]): * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: (WebCore::MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac): (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac): (WebCore::MediaPlaybackTargetPickerMac::externalOutputDeviceAvailable): (WebCore::MediaPlaybackTargetPickerMac::playbackTarget): (WebCore::MediaPlaybackTargetPickerMac::routePicker): (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): (WebCore::MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets): (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets): (WebCore::MediaPlaybackTargetPickerMac::invalidatePlaybackTargets): (WebCore::MediaPlaybackTargetPickerMac::pickerWasDismissed): (WebCore::MediaPlaybackTargetPickerMac::availableDevicesChanged): (WebCore::MediaPlaybackTargetPickerMac::currentDeviceChanged): (WebCore::MediaPlaybackTargetPickerMac::devicePicker): Deleted. (-[WebAVOutputDeviceMenuControllerHelper initWithCallback:]): Deleted. (-[WebAVOutputDeviceMenuControllerHelper clearCallback]): Deleted. (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): Deleted. * platform/mock/MediaPlaybackTargetPickerMock.cpp: (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker): * platform/mock/MediaPlaybackTargetPickerMock.h: Source/WebCore/PAL: * pal/cocoa/AVFoundationSoftLink.h: * pal/cocoa/AVFoundationSoftLink.mm: Soft link AVRoutePickerView. * pal/spi/cocoa/AVKitSPI.h: Declare AVRoutePickerView. Source/WebKit: * UIProcess/WebPageProxy.h: * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::platformView const): Add new override. Source/WebKitLegacy/mac: * WebView/WebMediaPlaybackTargetPicker.h: (WebMediaPlaybackTargetPicker::~WebMediaPlaybackTargetPicker): Deleted. * WebView/WebMediaPlaybackTargetPicker.mm: (WebMediaPlaybackTargetPicker::create): (WebMediaPlaybackTargetPicker::WebMediaPlaybackTargetPicker): (WebMediaPlaybackTargetPicker::invalidate): (WebMediaPlaybackTargetPicker::platformView const): New override. * WebView/WebView.mm: (-[WebView _devicePicker]): Pass view to WebMediaPlaybackTargetPicker factory. Source/WTF: * wtf/PlatformHave.h: Define HAVE_AVROUTEPICKERVIEW. Tools: * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm: (TestWebKitAPI::TEST): Test AVOutputContextOutputDevicesDidChangeNotification. Don't check AVRouteDetectorMultipleRoutesDetectedDidChangeNotification on watchOS, we don't use it there. Canonical link: https://commits.webkit.org/227408@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@264663 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-07-21 17:46:28 +00:00
virtual PlatformView* platformView() const = 0;
[Mac] Update AirPlay handling https://bugs.webkit.org/show_bug.cgi?id=142541 Reviewed by Sam Weinig. Source/WebCore: * WebCore.xcodeproj/project.pbxproj: * dom/Document.cpp: (WebCore::Document::showPlaybackTargetPicker): (WebCore::Document::addPlaybackTargetPickerClient): (WebCore::Document::removePlaybackTargetPickerClient): (WebCore::Document::configurePlaybackTargetMonitoring): (WebCore::Document::requiresPlaybackTargetRouteMonitoring): (WebCore::Document::playbackTargetAvailabilityDidChange): (WebCore::Document::didChoosePlaybackTarget): * dom/Document.h: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::registerWithDocument): (WebCore::HTMLMediaElement::unregisterWithDocument): (WebCore::HTMLMediaElement::parseAttribute): * html/HTMLMediaElement.h: * html/HTMLMediaSession.cpp: (WebCore::HTMLMediaSession::HTMLMediaSession): (WebCore::HTMLMediaSession::registerWithDocument): (WebCore::HTMLMediaSession::unregisterWithDocument): (WebCore::HTMLMediaSession::showPlaybackTargetPicker): (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets): (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): (WebCore::HTMLMediaSession::didChoosePlaybackTarget): (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): * html/HTMLMediaSession.h: * page/ChromeClient.h: * page/Page.cpp: (WebCore::Page::didChoosePlaybackTarget): (WebCore::Page::playbackTargetAvailabilityDidChange): (WebCore::Page::configurePlaybackTargetMonitoring): * page/Page.h: (WebCore::Page::hasWirelessPlaybackTarget): (WebCore::Page::playbackTarget): * platform/audio/MediaSession.cpp: (WebCore::MediaSession::clientDataBufferingTimerFired): (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Deleted. * platform/audio/MediaSession.h: (WebCore::MediaSession::didChoosePlaybackTarget): (WebCore::MediaSession::externalOutputDeviceAvailableDidChange): (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring): (WebCore::MediaSessionClient::setWirelessPlaybackTarget): * platform/audio/MediaSessionManager.cpp: (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Deleted. * platform/audio/MediaSessionManager.h: (WebCore::MediaSessionManager::configureWireLessTargetMonitoring): * platform/audio/ios/MediaSessionManagerIOS.h: * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange): (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): * platform/graphics/AVPlaybackTarget.h: Added. (WebCore::AVPlaybackTarget::~AVPlaybackTarget): (WebCore::AVPlaybackTarget::AVPlaybackTarget): (WebCore::AVPlaybackTarget::setDevicePickerContext): (WebCore::AVPlaybackTarget::devicePickerContext): * platform/graphics/AVPlaybackTargetPickerClient.h: Added. (WebCore::AVPlaybackTargetPickerClient::~AVPlaybackTargetPickerClient): * platform/graphics/MediaPlayer.cpp: (WebCore::MediaPlayer::setWirelessPlaybackTarget): * platform/graphics/MediaPlayer.h: * platform/graphics/MediaPlayerPrivate.h: (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget): * platform/graphics/avfoundation/AVPlaybackTargetMac.mm: Added. (WebCore::AVPlaybackTarget::encode): (WebCore::AVPlaybackTarget::decode): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback): (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Source/WebKit2: * Shared/WebCoreArgumentCoders.h: * Shared/mac/WebCoreArgumentCodersMac.mm: (IPC::ArgumentCoder<AVPlaybackTarget>::encode): (IPC::ArgumentCoder<AVPlaybackTarget>::decode): * UIProcess/PageClient.h: * UIProcess/WebAVPlaybackTargetPickerProxy.cpp: Added. (WebKit::WebAVPlaybackTargetPickerProxy::WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::~WebAVPlaybackTargetPickerProxy): (WebKit::WebAVPlaybackTargetPickerProxy::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets): * UIProcess/WebAVPlaybackTargetPickerProxy.h: Added. (WebKit::WebAVPlaybackTargetPickerProxy::Client::~Client): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::devicePickerProxy): (WebKit::WebPageProxy::showPlaybackTargetPicker): (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): (WebKit::WebPageProxy::didChoosePlaybackTarget): (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/mac/PageClientImpl.h: * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::createPlaybackTargetPicker): * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.h: Added. * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.mm: Added. (WebKit::WebAVPlaybackTargetPickerProxyMac::create): (WebKit::WebAVPlaybackTargetPickerProxyMac::WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::~WebAVPlaybackTargetPickerProxyMac): (WebKit::WebAVPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired): (WebKit::WebAVPlaybackTargetPickerProxyMac::availableDevicesDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::devicePicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::showPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPickerProxyMac::currentDeviceDidChange): (WebKit::WebAVPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets): (WebKit::WebAVPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets): (-[WebAVOutputDevicePickerMenuControllerHelper initWithCallback:]): (-[WebAVOutputDevicePickerMenuControllerHelper clearCallback]): (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): * WebKit2.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebAVPlaybackTargetPicker.cpp: Added. (WebKit::WebAVPlaybackTargetPicker::WebAVPlaybackTargetPicker): (WebKit::WebAVPlaybackTargetPicker::showPlaybackDevicePicker): (WebKit::WebAVPlaybackTargetPicker::configureWireLessTargetMonitoring): (WebKit::WebAVPlaybackTargetPicker::addClient): (WebKit::WebAVPlaybackTargetPicker::removeClient): (WebKit::WebAVPlaybackTargetPicker::didChoosePlaybackTarget): (WebKit::WebAVPlaybackTargetPicker::playbackTargetAvailabilityDidChange): * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::showPlaybackTargetPicker): (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::playbackTargetSelected): (WebKit::WebPage::playbackTargetAvailabilityDidChange): * WebProcess/com.apple.WebProcess.sb.in: Canonical link: https://commits.webkit.org/160640@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181423 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-03-12 01:54:06 +00:00
};
} // namespace WebCore
#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)