Diff
Modified: trunk/Source/WTF/ChangeLog (271481 => 271482)
--- trunk/Source/WTF/ChangeLog 2021-01-14 14:30:19 UTC (rev 271481)
+++ trunk/Source/WTF/ChangeLog 2021-01-14 15:31:19 UTC (rev 271482)
@@ -1,3 +1,15 @@
+2021-01-14 Per Arne Vollan <[email protected]>
+
+ [GPUP][iOS] Create sandbox extensions for cache and temp directory
+ https://bugs.webkit.org/show_bug.cgi?id=220595
+ <rdar://problem/72450307>
+
+ Reviewed by Chris Dumez.
+
+ Add USE define for using sandbox extensions to grant access to cache and temp directory.
+
+ * wtf/PlatformUse.h:
+
2021-01-13 Myles C. Maxfield <[email protected]>
Delete sexist comment
Modified: trunk/Source/WTF/wtf/PlatformUse.h (271481 => 271482)
--- trunk/Source/WTF/wtf/PlatformUse.h 2021-01-14 14:30:19 UTC (rev 271481)
+++ trunk/Source/WTF/wtf/PlatformUse.h 2021-01-14 15:31:19 UTC (rev 271482)
@@ -326,3 +326,7 @@
#if PLATFORM(COCOA)
#define USE_OPENXR 0
#endif
+
+#if PLATFORM(IOS_FAMILY)
+#define USE_SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS 1
+#endif
Modified: trunk/Source/WebKit/ChangeLog (271481 => 271482)
--- trunk/Source/WebKit/ChangeLog 2021-01-14 14:30:19 UTC (rev 271481)
+++ trunk/Source/WebKit/ChangeLog 2021-01-14 15:31:19 UTC (rev 271482)
@@ -1,3 +1,22 @@
+2021-01-14 Per Arne Vollan <[email protected]>
+
+ [GPUP][iOS] Create sandbox extensions for cache and temp directory
+ https://bugs.webkit.org/show_bug.cgi?id=220595
+ <rdar://problem/72450307>
+
+ Reviewed by Chris Dumez.
+
+ Create sandbox extensions for GPU process access to cache and temp directory.
+
+ * GPUProcess/GPUProcess.cpp:
+ (WebKit::GPUProcess::initializeGPUProcess):
+ * GPUProcess/GPUProcessCreationParameters.cpp:
+ (WebKit::GPUProcessCreationParameters::encode const):
+ (WebKit::GPUProcessCreationParameters::decode):
+ * GPUProcess/GPUProcessCreationParameters.h:
+ * UIProcess/GPU/GPUProcessProxy.cpp:
+ (WebKit::GPUProcessProxy::GPUProcessProxy):
+
2021-01-13 Tim Horton <[email protected]>
REGRESSION (r266634): Messages crashes sometimes while scrolling around and playing YouTube videos
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.cpp (271481 => 271482)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2021-01-14 14:30:19 UTC (rev 271481)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2021-01-14 15:31:19 UTC (rev 271482)
@@ -143,6 +143,11 @@
#endif
#endif
+#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
+ SandboxExtension::consumePermanently(parameters.containerCachesDirectoryExtensionHandle);
+ SandboxExtension::consumePermanently(parameters.containerTemporaryDirectoryExtensionHandle);
+#endif
+
#if HAVE(VISIBILITY_PROPAGATION_VIEW)
m_contextForVisibilityPropagation = LayerHostingContext::createForExternalHostingProcess({
m_canShowWhileLocked
Modified: trunk/Source/WebKit/GPUProcess/GPUProcessCreationParameters.cpp (271481 => 271482)
--- trunk/Source/WebKit/GPUProcess/GPUProcessCreationParameters.cpp 2021-01-14 14:30:19 UTC (rev 271481)
+++ trunk/Source/WebKit/GPUProcess/GPUProcessCreationParameters.cpp 2021-01-14 15:31:19 UTC (rev 271482)
@@ -50,6 +50,11 @@
#endif
#endif
encoder << parentPID;
+
+#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
+ encoder << containerCachesDirectoryExtensionHandle;
+ encoder << containerTemporaryDirectoryExtensionHandle;
+#endif
}
bool GPUProcessCreationParameters::decode(IPC::Decoder& decoder, GPUProcessCreationParameters& result)
@@ -68,6 +73,21 @@
#endif
if (!decoder.decode(result.parentPID))
return false;
+
+#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
+ Optional<SandboxExtension::Handle> containerCachesDirectoryExtensionHandle;
+ decoder >> containerCachesDirectoryExtensionHandle;
+ if (!containerCachesDirectoryExtensionHandle)
+ return false;
+ result.containerCachesDirectoryExtensionHandle = WTFMove(*containerCachesDirectoryExtensionHandle);
+
+ Optional<SandboxExtension::Handle> containerTemporaryDirectoryExtensionHandle;
+ decoder >> containerTemporaryDirectoryExtensionHandle;
+ if (!containerTemporaryDirectoryExtensionHandle)
+ return false;
+ result.containerTemporaryDirectoryExtensionHandle = WTFMove(*containerTemporaryDirectoryExtensionHandle);
+#endif
+
return true;
}
Modified: trunk/Source/WebKit/GPUProcess/GPUProcessCreationParameters.h (271481 => 271482)
--- trunk/Source/WebKit/GPUProcess/GPUProcessCreationParameters.h 2021-01-14 14:30:19 UTC (rev 271481)
+++ trunk/Source/WebKit/GPUProcess/GPUProcessCreationParameters.h 2021-01-14 15:31:19 UTC (rev 271482)
@@ -49,6 +49,11 @@
#endif
ProcessID parentPID;
+#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
+ SandboxExtension::Handle containerCachesDirectoryExtensionHandle;
+ SandboxExtension::Handle containerTemporaryDirectoryExtensionHandle;
+#endif
+
void encode(IPC::Encoder&) const;
static WARN_UNUSED_RETURN bool decode(IPC::Decoder&, GPUProcessCreationParameters&);
};
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (271481 => 271482)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2021-01-14 14:30:19 UTC (rev 271481)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2021-01-14 15:31:19 UTC (rev 271482)
@@ -49,6 +49,11 @@
#include <wtf/spi/darwin/XPCSPI.h>
#endif
+#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
+#include "SandboxUtilities.h"
+#include <wtf/FileSystem.h>
+#endif
+
#define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, this->connection())
namespace WebKit {
@@ -106,6 +111,18 @@
return singleton().get();
}
+#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
+static String gpuProcessCachesDirectory()
+{
+ String path = pathForProcessContainer() + "/Library/Caches/com.apple.WebKit.GPU/";
+ path = stringByResolvingSymlinksInPath(path);
+
+ FileSystem::makeAllDirectories(path);
+
+ return path;
+}
+#endif
+
GPUProcessProxy::GPUProcessProxy()
: AuxiliaryProcessProxy()
, m_throttler(*this, false)
@@ -132,6 +149,17 @@
#endif
parameters.parentPID = getCurrentProcessID();
+#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
+ auto containerCachesDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(gpuProcessCachesDirectory());
+ auto containerTemporaryDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(WebProcessPool::containerTemporaryDirectory());
+
+ if (!containerCachesDirectory.isEmpty())
+ SandboxExtension::createHandleWithoutResolvingPath(containerCachesDirectory, SandboxExtension::Type::ReadWrite, parameters.containerCachesDirectoryExtensionHandle);
+
+ if (!containerTemporaryDirectory.isEmpty())
+ SandboxExtension::createHandleWithoutResolvingPath(containerTemporaryDirectory, SandboxExtension::Type::ReadWrite, parameters.containerTemporaryDirectoryExtensionHandle);
+#endif
+
// Initialize the GPU process.
send(Messages::GPUProcess::InitializeGPUProcess(parameters), 0);
updateProcessAssertion();