Title: [276411] trunk
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]);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to