haikuwebkit/LayoutTests/media/audio-play.html

24 lines
594 B
HTML
Raw Permalink Normal View History

Add remote media resource loader for the GPU process https://bugs.webkit.org/show_bug.cgi?id=205379 Patch by Peng Liu <peng.liu6@apple.com> on 2019-12-31 Reviewed by Youenn Fablet. Source/WebCore: There are two definitions of ShouldContinue: WebCore::ScriptExecutionContext::ShouldContinue and WebCore::ShouldContinue. This patch moves WebCore::ShouldContinue to WebCore::PolicyChecker::ShouldContinue in order to support transmitting it in XPC messages. Tests: media/audio-play-with-video-element.html media/audio-play.html * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadURL): (WebCore::FrameLoader::load): (WebCore::FrameLoader::loadPostRequest): (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): * loader/FrameLoader.h: * loader/MediaResourceLoader.cpp: (WebCore::MediaResource::responseReceived): * loader/PolicyChecker.h: * platform/graphics/PlatformMediaResourceLoader.h: (WebCore::PlatformMediaResourceClient::responseReceived): * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp: (CachedResourceStreamingClient::responseReceived): * platform/network/cocoa/WebCoreNSURLSession.mm: (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived): (-[WebCoreNSURLSessionDataTask resource:receivedResponse:completionHandler:]): Source/WebKit: In the GPU process, the RemoteMediaResourceLoader creates RemoteMediaResource(s), which will notify the media resource clients (WebCoreNSURLSessionDataTaskClient). Then the data will be forwarded to AVFoundation. In the Web process, MeidaResourceLoader creates MediaResource(s), which take care of downloading media data through the network process. The received data will be forwarded to RemoteMediaResourceProxy, which will forward the data to the corresponding RemoteMediaResource through XPC messages. (WebKit::GPUConnectionToWebProcess::remoteMediaResourceManager): (WebKit::GPUConnectionToWebProcess::didReceiveMessage): * GPUProcess/GPUConnectionToWebProcess.h: * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp: * GPUProcess/media/RemoteMediaPlayerManagerProxy.h: * GPUProcess/media/RemoteMediaPlayerProxy.cpp: (WebKit::RemoteMediaPlayerProxy::~RemoteMediaPlayerProxy): (WebKit::RemoteMediaPlayerProxy::requestResource): (WebKit::RemoteMediaPlayerProxy::removeResource): (WebKit::RemoteMediaPlayerProxy::mediaPlayerCreateResourceLoader): * GPUProcess/media/RemoteMediaPlayerProxy.h: (WebKit::RemoteMediaPlayerProxy::~RemoteMediaPlayerProxy): Deleted. (WebKit::RemoteMediaPlayerProxy::mediaPlayerLogIdentifier): Deleted. * GPUProcess/media/RemoteMediaResource.cpp: Added. (WebKit::RemoteMediaResource::create): (WebKit::RemoteMediaResource::RemoteMediaResource): (WebKit::RemoteMediaResource::~RemoteMediaResource): (WebKit::RemoteMediaResource::stop): (WebKit::RemoteMediaResource::didPassAccessControlCheck const): (WebKit::RemoteMediaResource::responseReceived): (WebKit::RemoteMediaResource::redirectReceived): (WebKit::RemoteMediaResource::shouldCacheResponse): (WebKit::RemoteMediaResource::dataSent): (WebKit::RemoteMediaResource::dataReceived): (WebKit::RemoteMediaResource::accessControlCheckFailed): (WebKit::RemoteMediaResource::loadFailed): (WebKit::RemoteMediaResource::loadFinished): * GPUProcess/media/RemoteMediaResource.h: Added. (WebKit::RemoteMediaResource::ready const): (WebKit::RemoteMediaResource::setReady): * GPUProcess/media/RemoteMediaResourceIdentifier.h: Added. * GPUProcess/media/RemoteMediaResourceLoader.cpp: Added. (WebKit::RemoteMediaResourceLoader::RemoteMediaResourceLoader): (WebKit::RemoteMediaResourceLoader::~RemoteMediaResourceLoader): (WebKit::RemoteMediaResourceLoader::requestResource): * GPUProcess/media/RemoteMediaResourceLoader.h: Added. * GPUProcess/media/RemoteMediaResourceManager.cpp: Added. (WebKit::RemoteMediaResourceManager::RemoteMediaResourceManager): (WebKit::RemoteMediaResourceManager::~RemoteMediaResourceManager): (WebKit::RemoteMediaResourceManager::addMediaResource): (WebKit::RemoteMediaResourceManager::removeMediaResource): (WebKit::RemoteMediaResourceManager::responseReceived): (WebKit::RemoteMediaResourceManager::redirectReceived): (WebKit::RemoteMediaResourceManager::dataSent): (WebKit::RemoteMediaResourceManager::dataReceived): (WebKit::RemoteMediaResourceManager::accessControlCheckFailed): (WebKit::RemoteMediaResourceManager::loadFailed): (WebKit::RemoteMediaResourceManager::loadFinished): * GPUProcess/media/RemoteMediaResourceManager.h: Added. * GPUProcess/media/RemoteMediaResourceManager.messages.in: Added. * WebProcess/GPU/GPUProcessConnection.h: * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote): (WebKit::MediaPlayerPrivateRemote::requestResource): (WebKit::MediaPlayerPrivateRemote::removeResource): * WebProcess/GPU/media/MediaPlayerPrivateRemote.h: * WebProcess/GPU/media/MediaPlayerPrivateRemoteIdentifier.h: * WebProcess/GPU/media/RemoteMediaPlayerManager.cpp: (WebKit::RemoteMediaPlayerManager::supportsTypeAndCodecs): (WebKit::RemoteMediaPlayerManager::originsInMediaCache): (WebKit::RemoteMediaPlayerManager::clearMediaCacheForOrigins): (WebKit::RemoteMediaPlayerManager::networkStateChanged): (WebKit::RemoteMediaPlayerManager::readyStateChanged): (WebKit::RemoteMediaPlayerManager::volumeChanged): (WebKit::RemoteMediaPlayerManager::muteChanged): (WebKit::RemoteMediaPlayerManager::timeChanged): (WebKit::RemoteMediaPlayerManager::durationChanged): (WebKit::RemoteMediaPlayerManager::rateChanged): (WebKit::RemoteMediaPlayerManager::playbackStateChanged): (WebKit::RemoteMediaPlayerManager::engineFailedToLoad): (WebKit::RemoteMediaPlayerManager::requestResource): (WebKit::RemoteMediaPlayerManager::removeResource): * WebProcess/GPU/media/RemoteMediaPlayerManager.h: (WebKit::RemoteMediaPlayerManager::didReceiveMessageFromGPUProcess): (WebKit::RemoteMediaPlayerManager::didReceiveMessageFromWebProcess): Deleted. * WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in: * WebProcess/GPU/media/RemoteMediaResourceProxy.cpp: Added. (WebKit::RemoteMediaResourceProxy::RemoteMediaResourceProxy): (WebKit::RemoteMediaResourceProxy::~RemoteMediaResourceProxy): (WebKit::RemoteMediaResourceProxy::responseReceived): (WebKit::RemoteMediaResourceProxy::redirectReceived): (WebKit::RemoteMediaResourceProxy::shouldCacheResponse): (WebKit::RemoteMediaResourceProxy::dataSent): (WebKit::RemoteMediaResourceProxy::dataReceived): (WebKit::RemoteMediaResourceProxy::accessControlCheckFailed): (WebKit::RemoteMediaResourceProxy::loadFailed): (WebKit::RemoteMediaResourceProxy::loadFinished): * WebProcess/GPU/media/RemoteMediaResourceProxy.h: Added. LayoutTests: * gpu-process/TestExpectations: * media/audio-play-expected.txt: Added. * media/audio-play-with-video-element-expected.txt: Added. * media/audio-play-with-video-element.html: Added. * media/audio-play.html: Added. Canonical link: https://commits.webkit.org/218840@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@253964 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2020-01-01 02:27:01 +00:00
<!DOCTYPE html>
<html>
<head>
<title>'play' event</title>
<script src=media-file.js></script>
<script src=video-test.js></script>
<script>
function start() {
mediaElement = new Audio();
waitForEvent('loadedmetadata');
waitForEvent('play', function() { endTest(); });
run("mediaElement.src = findMediaFile('audio', 'content/test')");
run("mediaElement.play()");
}
</script>
</head>
<body onload="start()">
<p>Test that a 'play' event is fired when an audio element plays.</p>
</body>
</html>