Title: [269647] trunk/Source/WebKit
Revision
269647
Author
[email protected]
Date
2020-11-10 14:20:18 -0800 (Tue, 10 Nov 2020)

Log Message

[Cocoa] Send GPU sandbox extensions in Web page creation parameters
https://bugs.webkit.org/show_bug.cgi?id=218708

Reviewed by Brent Fulgham.

To pick up correct runtime settings, the GPU sandbox extensions should be sent to the WebContent process as part of the Web page creation parameters.

No new tests, covered by existing tests.

* Shared/WebPageCreationParameters.cpp:
(WebKit::WebPageCreationParameters::encode const):
(WebKit::WebPageCreationParameters::decode):
* Shared/WebPageCreationParameters.h:
* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode const):
(WebKit::WebProcessCreationParameters::decode):
* Shared/WebProcessCreationParameters.h:
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::platformInitializeWebProcess):
(WebKit::mediaRelatedMachServices): Deleted.
(WebKit::gpuIOKitClasses): Deleted.
* UIProcess/WebPageProxy.cpp:
(WebKit::gpuIOKitClasses):
(WebKit::mediaRelatedMachServices):
(WebKit::WebPageProxy::creationParameters):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::m_limitsNavigationsToAppBoundDomains):
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformInitializeWebProcess):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (269646 => 269647)


--- trunk/Source/WebKit/ChangeLog	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/ChangeLog	2020-11-10 22:20:18 UTC (rev 269647)
@@ -1,5 +1,37 @@
 2020-11-10  Per Arne Vollan  <[email protected]>
 
+        [Cocoa] Send GPU sandbox extensions in Web page creation parameters
+        https://bugs.webkit.org/show_bug.cgi?id=218708
+
+        Reviewed by Brent Fulgham.
+
+        To pick up correct runtime settings, the GPU sandbox extensions should be sent to the WebContent process as part of the Web page creation parameters.
+
+        No new tests, covered by existing tests.
+
+        * Shared/WebPageCreationParameters.cpp:
+        (WebKit::WebPageCreationParameters::encode const):
+        (WebKit::WebPageCreationParameters::decode):
+        * Shared/WebPageCreationParameters.h:
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode const):
+        (WebKit::WebProcessCreationParameters::decode):
+        * Shared/WebProcessCreationParameters.h:
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::WebProcessPool::platformInitializeWebProcess):
+        (WebKit::mediaRelatedMachServices): Deleted.
+        (WebKit::gpuIOKitClasses): Deleted.
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::gpuIOKitClasses):
+        (WebKit::mediaRelatedMachServices):
+        (WebKit::WebPageProxy::creationParameters):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::m_limitsNavigationsToAppBoundDomains):
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::platformInitializeWebProcess):
+
+2020-11-10  Per Arne Vollan  <[email protected]>
+
         [macCatalyst] Add entitlement for message filtering
         https://bugs.webkit.org/show_bug.cgi?id=218768
         <rdar://problem/71247464>

Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp (269646 => 269647)


--- trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp	2020-11-10 22:20:18 UTC (rev 269647)
@@ -114,6 +114,9 @@
 #if PLATFORM(COCOA)
     encoder << smartInsertDeleteEnabled;
     encoder << additionalSupportedImageTypes;
+    // FIXME(207716): The following should be removed when the GPU process is complete.
+    encoder << mediaExtensionHandles;
+    encoder << gpuIOKitExtensionHandles;
 #endif
 #if HAVE(APP_ACCENT_COLORS)
     encoder << accentColor;
@@ -362,6 +365,20 @@
         return WTF::nullopt;
     if (!decoder.decode(parameters.additionalSupportedImageTypes))
         return WTF::nullopt;
+
+    // FIXME(207716): The following should be removed when the GPU process is complete.
+    Optional<SandboxExtension::HandleArray> mediaExtensionHandles;
+    decoder >> mediaExtensionHandles;
+    if (!mediaExtensionHandles)
+        return WTF::nullopt;
+    parameters.mediaExtensionHandles = WTFMove(*mediaExtensionHandles);
+    // FIXME(207716): End region to remove.
+
+    Optional<SandboxExtension::HandleArray> gpuIOKitExtensionHandles;
+    decoder >> gpuIOKitExtensionHandles;
+    if (!gpuIOKitExtensionHandles)
+        return WTF::nullopt;
+    parameters.gpuIOKitExtensionHandles = WTFMove(*gpuIOKitExtensionHandles);
 #endif
 
 #if HAVE(APP_ACCENT_COLORS)

Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.h (269646 => 269647)


--- trunk/Source/WebKit/Shared/WebPageCreationParameters.h	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.h	2020-11-10 22:20:18 UTC (rev 269647)
@@ -174,6 +174,8 @@
 #if PLATFORM(COCOA)
     bool smartInsertDeleteEnabled;
     Vector<String> additionalSupportedImageTypes;
+    SandboxExtension::HandleArray mediaExtensionHandles; // FIXME(207716): Remove when GPU process is complete.
+    SandboxExtension::HandleArray gpuIOKitExtensionHandles;
 #endif
 #if HAVE(APP_ACCENT_COLORS)
     WebCore::Color accentColor;

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp (269646 => 269647)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.cpp	2020-11-10 22:20:18 UTC (rev 269647)
@@ -183,9 +183,6 @@
 #endif
 
 #if PLATFORM(COCOA)
-    // FIXME(207716): The following should be removed when the GPU process is complete.
-    encoder << mediaExtensionHandles;
-    encoder << gpuIOKitExtensionHandles;
 #if ENABLE(CFPREFS_DIRECT_MODE)
     encoder << preferencesExtensionHandles;
 #endif
@@ -505,20 +502,6 @@
 #endif
 
 #if PLATFORM(COCOA)
-    // FIXME(207716): The following should be removed when the GPU process is complete.
-    Optional<SandboxExtension::HandleArray> mediaExtensionHandles;
-    decoder >> mediaExtensionHandles;
-    if (!mediaExtensionHandles)
-        return false;
-    parameters.mediaExtensionHandles = WTFMove(*mediaExtensionHandles);
-
-    Optional<SandboxExtension::HandleArray> gpuIOKitExtensionHandles;
-    decoder >> gpuIOKitExtensionHandles;
-    if (!gpuIOKitExtensionHandles)
-        return false;
-    parameters.gpuIOKitExtensionHandles = WTFMove(*gpuIOKitExtensionHandles);
-    // FIXME(207716): End region to remove.
-
 #if ENABLE(CFPREFS_DIRECT_MODE)
     Optional<Optional<SandboxExtension::HandleArray>> preferencesExtensionHandles;
     decoder >> preferencesExtensionHandles;

Modified: trunk/Source/WebKit/Shared/WebProcessCreationParameters.h (269646 => 269647)


--- trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/Shared/WebProcessCreationParameters.h	2020-11-10 22:20:18 UTC (rev 269647)
@@ -222,8 +222,6 @@
 #endif
 
 #if PLATFORM(COCOA)
-    SandboxExtension::HandleArray mediaExtensionHandles; // FIXME(207716): Remove when GPU process is complete.
-    SandboxExtension::HandleArray gpuIOKitExtensionHandles;
 #if ENABLE(CFPREFS_DIRECT_MODE)
     Optional<SandboxExtension::HandleArray> preferencesExtensionHandles;
 #endif

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (269646 => 269647)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-11-10 22:20:18 UTC (rev 269647)
@@ -214,61 +214,7 @@
     return isInternal;
 }
 
-// FIXME(207716): The following should be removed when the GPU process is complete.
-static const Vector<ASCIILiteral>& mediaRelatedMachServices()
-{
-    ASSERT(isMainThread());
-    static const auto services = makeNeverDestroyed(Vector<ASCIILiteral> {
-        "com.apple.audio.AudioComponentPrefs"_s, "com.apple.audio.AudioComponentRegistrar"_s,
-        "com.apple.audio.AudioQueueServer"_s, "com.apple.audio.toolbox.reporting.service"_s, "com.apple.coremedia.endpoint.xpc"_s,
-        "com.apple.coremedia.routediscoverer.xpc"_s, "com.apple.coremedia.routingcontext.xpc"_s,
-        "com.apple.coremedia.volumecontroller.xpc"_s, "com.apple.accessibility.mediaaccessibilityd"_s,
-        "com.apple.mediaremoted.xpc"_s,
 #if PLATFORM(IOS_FAMILY)
-        "com.apple.audio.AudioSession"_s, "com.apple.MediaPlayer.RemotePlayerService"_s,
-        "com.apple.coremedia.admin"_s,
-        "com.apple.coremedia.asset.xpc"_s, "com.apple.coremedia.assetimagegenerator.xpc"_s,
-        "com.apple.coremedia.audiodeviceclock.xpc"_s, "com.apple.coremedia.audioprocessingtap.xpc"_s,
-        "com.apple.coremedia.capturesession"_s, "com.apple.coremedia.capturesource"_s,
-        "com.apple.coremedia.compressionsession"_s, "com.apple.coremedia.cpe.xpc"_s,
-        "com.apple.coremedia.cpeprotector.xpc"_s, "com.apple.coremedia.customurlloader.xpc"_s,
-        "com.apple.coremedia.decompressionsession"_s, "com.apple.coremedia.figcontentkeysession.xpc"_s,
-        "com.apple.coremedia.figcpecryptor"_s, "com.apple.coremedia.formatreader.xpc"_s,
-        "com.apple.coremedia.player.xpc"_s, "com.apple.coremedia.remaker"_s,
-        "com.apple.coremedia.remotequeue"_s, "com.apple.coremedia.routingsessionmanager.xpc"_s,
-        "com.apple.coremedia.samplebufferaudiorenderer.xpc"_s, "com.apple.coremedia.samplebufferrendersynchronizer.xpc"_s,
-        "com.apple.coremedia.sandboxserver.xpc"_s, "com.apple.coremedia.sts"_s,
-        "com.apple.coremedia.systemcontroller.xpc"_s, "com.apple.coremedia.videoqueue"_s,
-        "com.apple.coremedia.visualcontext.xpc"_s, "com.apple.airplay.apsynccontroller.xpc"_s,
-        "com.apple.audio.AURemoteIOServer"_s
-#endif
-#if PLATFORM(MAC) || PLATFORM(MACCATALYST)
-        "com.apple.coremedia.endpointstream.xpc"_s, "com.apple.coremedia.endpointplaybacksession.xpc"_s,
-        "com.apple.coremedia.endpointremotecontrolsession.xpc"_s, "com.apple.coremedia.videodecoder"_s,
-        "com.apple.coremedia.videoencoder"_s, "com.apple.BluetoothServices"_s
-#endif
-    });
-    return services;
-}
-
-static const Vector<ASCIILiteral>& gpuIOKitClasses()
-{
-    ASSERT(isMainThread());
-    static const auto services = makeNeverDestroyed(Vector<ASCIILiteral> {
-#if PLATFORM(IOS_FAMILY)
-        "AGXDeviceUserClient"_s,
-        "AppleJPEGDriverUserClient"_s,
-        "IOGPU"_s,
-        "IOMobileFramebufferUserClient"_s,
-        "IOSurfaceAcceleratorClient"_s,
-        "IOSurfaceRootUserClient"_s,
-#endif
-    });
-    return services;
-
-}
-
-#if PLATFORM(IOS_FAMILY)
 static const Vector<ASCIILiteral>& nonBrowserServices()
 {
     ASSERT(isMainThread());
@@ -472,23 +418,6 @@
     parameters.localizedDeviceModel = localizedDeviceModel();
 #endif
 
-    // Allow microphone access if either preference is set because WebRTC requires microphone access.
-    bool needWebProcessExtensions = !m_defaultPageGroup->preferences().useGPUProcessForMediaEnabled()
-        || !m_defaultPageGroup->preferences().captureAudioInGPUProcessEnabled()
-        || !m_defaultPageGroup->preferences().captureVideoInGPUProcessEnabled();
-
-    if (needWebProcessExtensions) {
-        // FIXME(207716): The following should be removed when the GPU process is complete.
-        parameters.mediaExtensionHandles = SandboxExtension::createHandlesForMachLookup(mediaRelatedMachServices(), WTF::nullopt);
-    }
-
-    if (!m_defaultPageGroup->preferences().useGPUProcessForMediaEnabled()
-        || (!m_defaultPageGroup->preferences().captureVideoInGPUProcessEnabled() && !m_defaultPageGroup->preferences().captureVideoInUIProcessEnabled())
-        || !m_defaultPageGroup->preferences().useGPUProcessForCanvasRenderingEnabled()
-        || !m_defaultPageGroup->preferences().useGPUProcessForDOMRenderingEnabled()
-        || !m_defaultPageGroup->preferences().useGPUProcessForWebGLEnabled())
-        parameters.gpuIOKitExtensionHandles = SandboxExtension::createHandlesForIOKitClassExtensions(gpuIOKitClasses(), WTF::nullopt);
-
 #if ENABLE(CFPREFS_DIRECT_MODE) && PLATFORM(IOS_FAMILY)
     if (_AXSApplicationAccessibilityEnabled())
         parameters.preferencesExtensionHandles = SandboxExtension::createHandlesForMachLookup({ "com.apple.cfprefsd.agent"_s, "com.apple.cfprefsd.daemon"_s }, WTF::nullopt);

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (269646 => 269647)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-11-10 22:20:18 UTC (rev 269647)
@@ -7701,6 +7701,61 @@
 }
 #endif
 
+#if PLATFORM(COCOA)
+static const Vector<ASCIILiteral>& gpuIOKitClasses()
+{
+    ASSERT(isMainThread());
+    static const auto services = makeNeverDestroyed(Vector<ASCIILiteral> {
+#if PLATFORM(IOS_FAMILY)
+        "AGXDeviceUserClient"_s,
+        "AppleJPEGDriverUserClient"_s,
+        "IOGPU"_s,
+        "IOMobileFramebufferUserClient"_s,
+        "IOSurfaceAcceleratorClient"_s,
+        "IOSurfaceRootUserClient"_s,
+#endif
+    });
+    return services;
+}
+
+// FIXME(207716): The following should be removed when the GPU process is complete.
+static const Vector<ASCIILiteral>& mediaRelatedMachServices()
+{
+    ASSERT(isMainThread());
+    static const auto services = makeNeverDestroyed(Vector<ASCIILiteral> {
+        "com.apple.audio.AudioComponentPrefs"_s, "com.apple.audio.AudioComponentRegistrar"_s,
+        "com.apple.audio.AudioQueueServer"_s, "com.apple.audio.toolbox.reporting.service"_s, "com.apple.coremedia.endpoint.xpc"_s,
+        "com.apple.coremedia.routediscoverer.xpc"_s, "com.apple.coremedia.routingcontext.xpc"_s,
+        "com.apple.coremedia.volumecontroller.xpc"_s, "com.apple.accessibility.mediaaccessibilityd"_s,
+        "com.apple.mediaremoted.xpc"_s,
+#if PLATFORM(IOS_FAMILY)
+        "com.apple.audio.AudioSession"_s, "com.apple.MediaPlayer.RemotePlayerService"_s,
+        "com.apple.coremedia.admin"_s,
+        "com.apple.coremedia.asset.xpc"_s, "com.apple.coremedia.assetimagegenerator.xpc"_s,
+        "com.apple.coremedia.audiodeviceclock.xpc"_s, "com.apple.coremedia.audioprocessingtap.xpc"_s,
+        "com.apple.coremedia.capturesession"_s, "com.apple.coremedia.capturesource"_s,
+        "com.apple.coremedia.compressionsession"_s, "com.apple.coremedia.cpe.xpc"_s,
+        "com.apple.coremedia.cpeprotector.xpc"_s, "com.apple.coremedia.customurlloader.xpc"_s,
+        "com.apple.coremedia.decompressionsession"_s, "com.apple.coremedia.figcontentkeysession.xpc"_s,
+        "com.apple.coremedia.figcpecryptor"_s, "com.apple.coremedia.formatreader.xpc"_s,
+        "com.apple.coremedia.player.xpc"_s, "com.apple.coremedia.remaker"_s,
+        "com.apple.coremedia.remotequeue"_s, "com.apple.coremedia.routingsessionmanager.xpc"_s,
+        "com.apple.coremedia.samplebufferaudiorenderer.xpc"_s, "com.apple.coremedia.samplebufferrendersynchronizer.xpc"_s,
+        "com.apple.coremedia.sandboxserver.xpc"_s, "com.apple.coremedia.sts"_s,
+        "com.apple.coremedia.systemcontroller.xpc"_s, "com.apple.coremedia.videoqueue"_s,
+        "com.apple.coremedia.visualcontext.xpc"_s, "com.apple.airplay.apsynccontroller.xpc"_s,
+        "com.apple.audio.AURemoteIOServer"_s
+#endif
+#if PLATFORM(MAC) || PLATFORM(MACCATALYST)
+        "com.apple.coremedia.endpointstream.xpc"_s, "com.apple.coremedia.endpointplaybacksession.xpc"_s,
+        "com.apple.coremedia.endpointremotecontrolsession.xpc"_s, "com.apple.coremedia.videodecoder"_s,
+        "com.apple.coremedia.videoencoder"_s, "com.apple.BluetoothServices"_s
+#endif
+    });
+    return services;
+}
+#endif
+
 WebPageCreationParameters WebPageProxy::creationParameters(WebProcessProxy& process, DrawingAreaProxy& drawingArea, RefPtr<API::WebsitePolicies>&& websitePolicies)
 {
     WebPageCreationParameters parameters;
@@ -7797,6 +7852,24 @@
 #if PLATFORM(COCOA)
     parameters.smartInsertDeleteEnabled = m_isSmartInsertDeleteEnabled;
     parameters.additionalSupportedImageTypes = m_configuration->additionalSupportedImageTypes();
+    
+    // Allow microphone access if either preference is set because WebRTC requires microphone access.
+    bool needWebProcessExtensions = !preferences().useGPUProcessForMediaEnabled()
+        || !preferences().captureAudioInGPUProcessEnabled()
+        || !preferences().captureVideoInGPUProcessEnabled();
+
+    if (needWebProcessExtensions) {
+        // FIXME(207716): The following should be removed when the GPU process is complete.
+        parameters.mediaExtensionHandles = SandboxExtension::createHandlesForMachLookup(mediaRelatedMachServices(), WTF::nullopt);
+    }
+
+    if (!preferences().useGPUProcessForMediaEnabled()
+        || (!preferences().captureVideoInGPUProcessEnabled() && !preferences().captureVideoInUIProcessEnabled())
+        || (!preferences().captureAudioInGPUProcessEnabled() && !preferences().captureAudioInUIProcessEnabled())
+        || !preferences().useGPUProcessForCanvasRenderingEnabled()
+        || !preferences().useGPUProcessForDOMRenderingEnabled()
+        || !preferences().useGPUProcessForWebGLEnabled())
+        parameters.gpuIOKitExtensionHandles = SandboxExtension::createHandlesForIOKitClassExtensions(gpuIOKitClasses(), WTF::nullopt);
 #endif
 #if HAVE(APP_ACCENT_COLORS)
     parameters.accentColor = pageClient().accentColor();

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (269646 => 269647)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-11-10 22:20:18 UTC (rev 269647)
@@ -741,6 +741,18 @@
     m_page->settings().setContentDispositionAttachmentSandboxEnabled(true);
     setSmartInsertDeleteEnabled(parameters.smartInsertDeleteEnabled);
     WebCore::setAdditionalSupportedImageTypes(parameters.additionalSupportedImageTypes);
+
+    // FIXME(207716): The following should be removed when the GPU process is complete.
+    static bool hasConsumedMediaExtensionHandles = false;
+    if (!hasConsumedMediaExtensionHandles && parameters.mediaExtensionHandles.size()) {
+        SandboxExtension::consumePermanently(parameters.mediaExtensionHandles);
+        hasConsumedMediaExtensionHandles = true;
+    }
+    static bool hasConsumedGPUIOKitExtensionHandles = false;
+    if (!hasConsumedGPUIOKitExtensionHandles && parameters.gpuIOKitExtensionHandles.size()) {
+        SandboxExtension::consumePermanently(parameters.gpuIOKitExtensionHandles);
+        hasConsumedGPUIOKitExtensionHandles = true;
+    }
 #endif
 
 #if HAVE(APP_ACCENT_COLORS)

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (269646 => 269647)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-11-10 21:36:24 UTC (rev 269646)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2020-11-10 22:20:18 UTC (rev 269647)
@@ -344,10 +344,6 @@
     RenderThemeIOS::setFocusRingColor(parameters.focusRingColor);
 #endif
 
-    // FIXME(207716): The following should be removed when the GPU process is complete.
-    SandboxExtension::consumePermanently(parameters.mediaExtensionHandles);
-    SandboxExtension::consumePermanently(parameters.gpuIOKitExtensionHandles);
-
 #if ENABLE(CFPREFS_DIRECT_MODE)
     if (parameters.preferencesExtensionHandles) {
         SandboxExtension::consumePermanently(*parameters.preferencesExtensionHandles);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to