haikuwebkit/LayoutTests/media/media-usage-state-expected.txt

67 lines
3.0 KiB
Plaintext
Raw Permalink Normal View History

[macOS] Update ScreenTime as playback state changes https://bugs.webkit.org/show_bug.cgi?id=210518 <rdar://problem/61181092> Reviewed by Jer Noble. Source/WebCore: Test: media/media-usage-state.html Pass media element state to the UI process whenever it changes. * Headers.cmake: * WebCore.xcodeproj/project.pbxproj: * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): (WebCore::HTMLMediaElement::mediaSessionUniqueIdentifier const): * html/HTMLMediaElement.h: * html/MediaElementSession.cpp: (WebCore::MediaElementSession::MediaElementSession): (WebCore::MediaElementSession::~MediaElementSession): (WebCore::MediaElementSession::updateMediaUsageIfChanged): * html/MediaElementSession.h: * page/ChromeClient.h: (WebCore::ChromeClient::addMediaUsageManagerSession): (WebCore::ChromeClient::updateMediaUsageManagerSessionState): (WebCore::ChromeClient::removeMediaUsageManagerSession): * platform/audio/PlatformMediaSession.cpp: (WebCore::PlatformMediaSession::PlatformMediaSession): * platform/audio/PlatformMediaSession.h: (WebCore::PlatformMediaSession::updateMediaUsageIfChanged): (WebCore::PlatformMediaSession::mediaSessionIdentifier const): * platform/audio/PlatformMediaSessionManager.cpp: (WebCore::PlatformMediaSessionManager::updateNowPlayingInfoIfNecessary): * platform/audio/PlatformMediaSessionManager.h: (WebCore::PlatformMediaSessionManager::scheduleUpdateSessionStatus): (WebCore::PlatformMediaSessionManager::sessionDidEndRemoteScrubbing): (WebCore::PlatformMediaSessionManager::scheduleUpdateNowPlayingInfo): Deleted. * platform/audio/cocoa/MediaSessionManagerCocoa.h: * platform/audio/cocoa/MediaSessionManagerCocoa.mm: (WebCore::MediaSessionManagerCocoa::scheduleUpdateSessionStatus): (WebCore::MediaSessionManagerCocoa::sessionWillBeginPlayback): (WebCore::MediaSessionManagerCocoa::sessionDidEndRemoteScrubbing): (WebCore::MediaSessionManagerCocoa::removeSession): (WebCore::MediaSessionManagerCocoa::sessionWillEndPlayback): (WebCore::MediaSessionManagerCocoa::clientCharacteristicsChanged): (WebCore::MediaSessionManagerCocoa::sessionCanProduceAudioChanged): (WebCore::MediaSessionManagerCocoa::scheduleUpdateNowPlayingInfo): Deleted. * platform/audio/ios/MediaSessionManagerIOS.mm: (WebCore::MediaSessionManageriOS::resetRestrictions): (WebCore::MediaSessionManageriOS::sessionWillBeginPlayback): * platform/graphics/MediaUsageInfo.h: Added. (WebCore::MediaUsageInfo::operator== const): (WebCore::MediaUsageInfo::operator!= const): (WebCore::MediaUsageInfo::encode const): (WebCore::MediaUsageInfo::decode): * testing/Internals.cpp: (WebCore::Internals::setMediaElementRestrictions): (WebCore::Internals::mediaUsageState const): * testing/Internals.h: * testing/Internals.idl: Source/WebCore/PAL: Soft link the UsageTracking framework. * PAL.xcodeproj/project.pbxproj: * pal/cocoa/UsageTrackingSoftLink.h: Added. * pal/cocoa/UsageTrackingSoftLink.mm: Added. Source/WebKit: Add a manager that gets media element state changes, and a Cocoa-specific implementation that passes that state to ScreenTime. * Scripts/webkit/messages.py: * Sources.txt: * SourcesCocoa.txt: * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::mediaUsageManager): (WebKit::WebPageProxy::addMediaUsageManagerSession): (WebKit::WebPageProxy::updateMediaUsageManagerSessionState): (WebKit::WebPageProxy::removeMediaUsageManagerSession): * UIProcess/Media/MediaUsageManager.cpp: Added. (WebKit::MediaUsageManager::create): (WebKit::reset): (WebKit::MediaUsageManager::addMediaSession): (WebKit::MediaUsageManager::removeMediaSession): (WebKit::MediaUsageManager::updateMediaUsage): * UIProcess/Media/MediaUsageManager.h: Added. * UIProcess/Media/cocoa/MediaUsageManagerCocoa.h: Added. (WebKit::MediaUsageManagerCocoa::SessionMediaUsage::SessionMediaUsage): * UIProcess/Media/cocoa/MediaUsageManagerCocoa.mm: Added. (WebKit::usageTrackingAvailable): (WebKit::MediaUsageManager::create): (WebKit::MediaUsageManagerCocoa::~MediaUsageManagerCocoa): (WebKit::MediaUsageManagerCocoa::reset): (WebKit::MediaUsageManagerCocoa::addMediaSession): (WebKit::MediaUsageManagerCocoa::removeMediaSession): (WebKit::MediaUsageManagerCocoa::updateMediaUsage): * UIProcess/WebAuthentication/AuthenticatorManager.cpp: * UIProcess/WebAuthentication/Mock/MockLocalConnection.mm: * UIProcess/WebPageProxy.cpp: * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::addMediaUsageManagerSession): (WebKit::WebChromeClient::updateMediaUsageManagerSessionState): (WebKit::WebChromeClient::removeMediaUsageManagerSession): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::addMediaUsageManagerSession): (WebKit::WebPage::updateMediaUsageManagerSessionState): (WebKit::WebPage::removeMediaUsageManagerSession): * WebProcess/WebPage/WebPage.h: Source/WTF: Define HAVE_MEDIA_USAGE_FRAMEWORK and ENABLE_MEDIA_USAGE * wtf/PlatformEnableCocoa.h: * wtf/PlatformHave.h: LayoutTests: * media/media-usage-state-expected.txt: Added. * media/media-usage-state.html: Added. * platform/gtk/TestExpectations: Skip new test. * platform/win/TestExpectations: Ditto. * platform/wpe/TestExpectations: Ditto. Canonical link: https://commits.webkit.org/223468@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@260182 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-04-16 13:36:07 +00:00
Test mediaUsageState.
RUN(internals.setMediaElementRestrictions(video, "RequireUserGestureForAudioRateChange,RequireUserGestureForVideoRateChange,RequireUserGestureToControlControlsManager"))
EVENT(canplaythrough)
** Check state before playback.
EXPECTED (usage.mediaURL.indexOf('content/test.mp4') > '-1') OK
EXPECTED (usage.isPlaying == 'false') OK
EXPECTED (usage.canShowControlsManager == 'false') OK
EXPECTED (usage.canShowNowPlayingControls == 'false') OK
EXPECTED (usage.isSuspended == 'false') OK
EXPECTED (usage.isInActiveDocument == 'true') OK
EXPECTED (usage.isFullscreen == 'false') OK
EXPECTED (usage.isMuted == 'false') OK
EXPECTED (usage.isMediaDocumentInMainFrame == 'false') OK
EXPECTED (usage.isVideo == 'true') OK
EXPECTED (usage.isAudio == 'false') OK
EXPECTED (usage.hasVideo == 'true') OK
EXPECTED (usage.hasAudio == 'true') OK
EXPECTED (usage.hasRenderer == 'true') OK
EXPECTED (usage.audioElementWithUserGesture == 'false') OK
EXPECTED (usage.userHasPlayedAudioBefore == 'false') OK
EXPECTED (usage.isElementRectMostlyInMainFrame == 'true') OK
EXPECTED (usage.playbackPermitted == 'false') OK
EXPECTED (usage.pageMediaPlaybackSuspended == 'false') OK
EXPECTED (usage.isMediaDocumentAndNotOwnerElement == 'false') OK
EXPECTED (usage.pageExplicitlyAllowsElementToAutoplayInline == 'false') OK
EXPECTED (usage.requiresFullscreenForVideoPlaybackAndFullscreenNotPermitted == 'false') OK
EXPECTED (usage.hasHadUserInteractionAndQuirksContainsShouldAutoplayForArbitraryUserGesture == 'false') OK
EXPECTED (usage.isVideoAndRequiresUserGestureForVideoRateChange == 'true') OK
EXPECTED (usage.isAudioAndRequiresUserGestureForAudioRateChange == 'false') OK
EXPECTED (usage.isVideoAndRequiresUserGestureForVideoDueToLowPowerMode == 'false') OK
EXPECTED (usage.noUserGestureRequired == 'false') OK
EXPECTED (usage.requiresPlaybackAndIsNotPlaying == 'false') OK
EXPECTED (usage.hasEverNotifiedAboutPlaying == 'false') OK
EXPECTED (usage.outsideOfFullscreen == 'false') OK
EXPECTED (usage.isLargeEnoughForMainContent == 'false') OK
** Mute video.
RUN(video.muted = true)
EXPECTED (usage.isMuted == 'true') OK
** Unmute video.
RUN(video.muted = false)
EXPECTED (usage.isMuted == 'false') OK
** Try to play without user gesture, should reject and state should not change.
Promise rejected correctly OK
EXPECTED (usage.isPlaying == 'false') OK
EXPECTED (usage.canShowControlsManager == 'false') OK
EXPECTED (usage.userHasPlayedAudioBefore == 'false') OK
EXPECTED (usage.playbackPermitted == 'false') OK
EXPECTED (usage.isVideoAndRequiresUserGestureForVideoRateChange == 'true') OK
EXPECTED (usage.noUserGestureRequired == 'false') OK
** Try to play without user gesture, should succeed and state should change.
EVENT(playing)
EXPECTED (usage.isPlaying == 'true') OK
EXPECTED (usage.canShowControlsManager == 'true') OK
EXPECTED (usage.userHasPlayedAudioBefore == 'true') OK
EXPECTED (usage.playbackPermitted == 'true') OK
EXPECTED (usage.isVideoAndRequiresUserGestureForVideoRateChange == 'false') OK
EXPECTED (usage.noUserGestureRequired == 'true') OK
END OF TEST