- Revision
- 276411
- Author
- [email protected]
- Date
- 2021-04-21 17:59:01 -0700 (Wed, 21 Apr 2021)
Log Message
Regression(r275887) open.spotify.com says Safari is not supported
https://bugs.webkit.org/show_bug.cgi?id=224905
<rdar://76982108>
Reviewed by Eric Carlson.
Source/WebKit:
Move legacyCDMFactory() getter from GPUProcessConnection to WebProcess so that
we can query it without having to launch the GPUProcess. This means we can
call legacyCDMFactory().registerFactory() inside of WebProcess::setUseGPUProcessForMedia()
(like before r275887) instead of doing it in the GPUProcessConnection constructor.
As a result, calls to WebKitMediaKeys.isTypeSupported() return accurate results
even if the GPUProcess is not launched yet. Calling WebKitMediaKeys.isTypeSupported() ends
up launching the GPU Process, as is expected.
* WebProcess/GPU/GPUProcessConnection.cpp:
(WebKit::GPUProcessConnection::GPUProcessConnection):
(WebKit::GPUProcessConnection::legacyCDMFactory): Deleted.
* WebProcess/GPU/GPUProcessConnection.h:
* WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
(WebKit::MediaPlayerPrivateRemote::setCDM):
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::setUseGPUProcessForMedia):
(WebKit::WebProcess::legacyCDMFactory):
* WebProcess/WebProcess.h:
Tools:
Add API test coverage.
* TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
(TEST):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (276410 => 276411)
--- trunk/Source/WebKit/ChangeLog 2021-04-22 00:53:31 UTC (rev 276410)
+++ trunk/Source/WebKit/ChangeLog 2021-04-22 00:59:01 UTC (rev 276411)
@@ -1,3 +1,31 @@
+2021-04-21 Chris Dumez <[email protected]>
+
+ Regression(r275887) open.spotify.com says Safari is not supported
+ https://bugs.webkit.org/show_bug.cgi?id=224905
+ <rdar://76982108>
+
+ Reviewed by Eric Carlson.
+
+ Move legacyCDMFactory() getter from GPUProcessConnection to WebProcess so that
+ we can query it without having to launch the GPUProcess. This means we can
+ call legacyCDMFactory().registerFactory() inside of WebProcess::setUseGPUProcessForMedia()
+ (like before r275887) instead of doing it in the GPUProcessConnection constructor.
+
+ As a result, calls to WebKitMediaKeys.isTypeSupported() return accurate results
+ even if the GPUProcess is not launched yet. Calling WebKitMediaKeys.isTypeSupported() ends
+ up launching the GPU Process, as is expected.
+
+ * WebProcess/GPU/GPUProcessConnection.cpp:
+ (WebKit::GPUProcessConnection::GPUProcessConnection):
+ (WebKit::GPUProcessConnection::legacyCDMFactory): Deleted.
+ * WebProcess/GPU/GPUProcessConnection.h:
+ * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
+ (WebKit::MediaPlayerPrivateRemote::setCDM):
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::setUseGPUProcessForMedia):
+ (WebKit::WebProcess::legacyCDMFactory):
+ * WebProcess/WebProcess.h:
+
2021-04-21 Wenson Hsieh <[email protected]>
Introduce helper methods to map FloatQuads to and from content and root view coordinates
Modified: trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp (276410 => 276411)
--- trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp 2021-04-22 00:53:31 UTC (rev 276410)
+++ trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp 2021-04-22 00:59:01 UTC (rev 276411)
@@ -40,7 +40,6 @@
#include "RemoteAudioSourceProviderManager.h"
#include "RemoteCDMFactory.h"
#include "RemoteCDMProxy.h"
-#include "RemoteLegacyCDMFactory.h"
#include "RemoteMediaEngineConfigurationFactory.h"
#include "RemoteMediaPlayerManager.h"
#include "RemoteRemoteCommandListenerMessages.h"
@@ -107,9 +106,6 @@
cdmFactories.clear();
cdmFactory().registerFactory(cdmFactories);
#endif
-#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
- legacyCDMFactory().registerFactory();
-#endif
mediaEngineConfigurationFactory().registerFactory();
#if ENABLE(VP9)
enableVP9Decoders(PlatformMediaSessionManager::shouldEnableVP8Decoder(), PlatformMediaSessionManager::shouldEnableVP9Decoder(), PlatformMediaSessionManager::shouldEnableVP9SWDecoder());
@@ -171,13 +167,6 @@
}
#endif
-#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
-RemoteLegacyCDMFactory& GPUProcessConnection::legacyCDMFactory()
-{
- return *WebProcess::singleton().supplement<RemoteLegacyCDMFactory>();
-}
-#endif
-
RemoteMediaEngineConfigurationFactory& GPUProcessConnection::mediaEngineConfigurationFactory()
{
return *WebProcess::singleton().supplement<RemoteMediaEngineConfigurationFactory>();
Modified: trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.h (276410 => 276411)
--- trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.h 2021-04-22 00:53:31 UTC (rev 276410)
+++ trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.h 2021-04-22 00:59:01 UTC (rev 276411)
@@ -43,7 +43,6 @@
class RemoteCDMFactory;
class RemoteMediaEngineConfigurationFactory;
class RemoteMediaPlayerManager;
-class RemoteLegacyCDMFactory;
class WebPage;
struct OverrideScreenDataForTesting;
struct WebPageCreationParameters;
@@ -77,10 +76,6 @@
RemoteCDMFactory& cdmFactory();
#endif
-#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
- RemoteLegacyCDMFactory& legacyCDMFactory();
-#endif
-
RemoteMediaEngineConfigurationFactory& mediaEngineConfigurationFactory();
void updateMediaConfiguration();
Modified: trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp (276410 => 276411)
--- trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp 2021-04-22 00:53:31 UTC (rev 276410)
+++ trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp 2021-04-22 00:59:01 UTC (rev 276411)
@@ -1046,7 +1046,7 @@
if (!cdm)
return;
- auto remoteCDM = m_manager.gpuProcessConnection().legacyCDMFactory().findCDM(cdm->cdmPrivate());
+ auto remoteCDM = WebProcess::singleton().legacyCDMFactory().findCDM(cdm->cdmPrivate());
if (!remoteCDM)
return;
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (276410 => 276411)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2021-04-22 00:53:31 UTC (rev 276410)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2021-04-22 00:59:01 UTC (rev 276411)
@@ -1993,7 +1993,9 @@
#endif
#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
- if (!useGPUProcessForMedia)
+ if (useGPUProcessForMedia)
+ legacyCDMFactory().registerFactory();
+ else
LegacyCDM::resetFactories();
#endif
@@ -2069,6 +2071,13 @@
}
#endif
+#if ENABLE(GPU_PROCESS) && ENABLE(LEGACY_ENCRYPTED_MEDIA)
+RemoteLegacyCDMFactory& WebProcess::legacyCDMFactory()
+{
+ return *supplement<RemoteLegacyCDMFactory>();
+}
+#endif
+
} // namespace WebKit
#undef RELEASE_LOG_SESSION_ID
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (276410 => 276411)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2021-04-22 00:53:31 UTC (rev 276410)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2021-04-22 00:59:01 UTC (rev 276411)
@@ -118,6 +118,7 @@
class NetworkProcessConnection;
class ObjCObjectGraph;
class ProcessAssertion;
+class RemoteLegacyCDMFactory;
struct ServiceWorkerInitializationData;
class StorageAreaMap;
class UserData;
@@ -240,6 +241,9 @@
#if PLATFORM(COCOA) && USE(LIBWEBRTC)
LibWebRTCCodecs& libWebRTCCodecs();
#endif
+#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
+ RemoteLegacyCDMFactory& legacyCDMFactory();
+#endif
#endif // ENABLE(GPU_PROCESS)
Modified: trunk/Tools/ChangeLog (276410 => 276411)
--- trunk/Tools/ChangeLog 2021-04-22 00:53:31 UTC (rev 276410)
+++ trunk/Tools/ChangeLog 2021-04-22 00:59:01 UTC (rev 276411)
@@ -1,3 +1,16 @@
+2021-04-21 Chris Dumez <[email protected]>
+
+ Regression(r275887) open.spotify.com says Safari is not supported
+ https://bugs.webkit.org/show_bug.cgi?id=224905
+ <rdar://76982108>
+
+ Reviewed by Eric Carlson.
+
+ Add API test coverage.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm:
+ (TEST):
+
2021-04-21 Aakash Jain <[email protected]>
[build.webkit.org] Disable unused parameters in force build dialog box
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm (276410 => 276411)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm 2021-04-22 00:53:31 UTC (rev 276410)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GPUProcess.mm 2021-04-22 00:59:01 UTC (rev 276411)
@@ -282,6 +282,32 @@
EXPECT_EQ([configuration.get().processPool _gpuProcessIdentifier], 0);
}
+#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
+TEST(GPUProcess, LegacyCDM)
+{
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ WKPreferencesSetBoolValueForKeyForTesting((__bridge WKPreferencesRef)[configuration preferences], true, WKStringCreateWithUTF8CString("UseGPUProcessForMediaEnabled"));
+ WKPreferencesSetBoolValueForKeyForTesting((__bridge WKPreferencesRef)[configuration preferences], true, WKStringCreateWithUTF8CString("CaptureVideoInGPUProcessEnabled"));
+ WKPreferencesSetBoolValueForKeyForTesting((__bridge WKPreferencesRef)[configuration preferences], true, WKStringCreateWithUTF8CString("UseGPUProcessForCanvasRenderingEnabled"));
+ WKPreferencesSetBoolValueForKeyForTesting((__bridge WKPreferencesRef)[configuration preferences], false, WKStringCreateWithUTF8CString("UseGPUProcessForDOMRenderingEnabled"));
+
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 400, 400) configuration:configuration.get()]);
+ [webView synchronouslyLoadTestPageNamed:@"simple"];
+
+ __block bool done = false;
+ [webView evaluateJavaScript:@"WebKitMediaKeys.isTypeSupported('com.apple.fps.1_0')" completionHandler:^(id result, NSError *error) {
+ EXPECT_TRUE(!error);
+ EXPECT_TRUE([result boolValue]);
+ done = true;
+ }];
+ TestWebKitAPI::Util::run(&done);
+
+ // This should not have launched a GPUProcess.
+ while (![configuration.get().processPool _gpuProcessIdentifier])
+ TestWebKitAPI::Util::spinRunLoop(1);
+}
+#endif // ENABLE(LEGACY_ENCRYPTED_MEDIA)
+
TEST(GPUProcess, CrashWhilePlayingVideo)
{
auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);