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);