⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 271482 in webkit


Ignore:
Timestamp:
Jan 14, 2021, 7:31:19 AM (6 years ago)
Author:
pvollan@apple.com
Message:

[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.

Source/WebKit:

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

Source/WTF:

Add USE define for using sandbox extensions to grant access to cache and temp directory.

  • wtf/PlatformUse.h:
Location:
trunk/Source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r271468 r271482  
     12021-01-14  Per Arne Vollan  <pvollan@apple.com>
     2
     3        [GPUP][iOS] Create sandbox extensions for cache and temp directory
     4        https://bugs.webkit.org/show_bug.cgi?id=220595
     5        <rdar://problem/72450307>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Add USE define for using sandbox extensions to grant access to cache and temp directory.
     10
     11        * wtf/PlatformUse.h:
     12
    1132021-01-13  Myles C. Maxfield  <mmaxfield@apple.com>
    214
  • trunk/Source/WTF/wtf/PlatformUse.h

    r271267 r271482  
    327327#define USE_OPENXR 0
    328328#endif
     329
     330#if PLATFORM(IOS_FAMILY)
     331#define USE_SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS 1
     332#endif
  • trunk/Source/WebKit/ChangeLog

    r271479 r271482  
     12021-01-14  Per Arne Vollan  <pvollan@apple.com>
     2
     3        [GPUP][iOS] Create sandbox extensions for cache and temp directory
     4        https://bugs.webkit.org/show_bug.cgi?id=220595
     5        <rdar://problem/72450307>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Create sandbox extensions for GPU process access to cache and temp directory.
     10
     11        * GPUProcess/GPUProcess.cpp:
     12        (WebKit::GPUProcess::initializeGPUProcess):
     13        * GPUProcess/GPUProcessCreationParameters.cpp:
     14        (WebKit::GPUProcessCreationParameters::encode const):
     15        (WebKit::GPUProcessCreationParameters::decode):
     16        * GPUProcess/GPUProcessCreationParameters.h:
     17        * UIProcess/GPU/GPUProcessProxy.cpp:
     18        (WebKit::GPUProcessProxy::GPUProcessProxy):
     19
    1202021-01-13  Tim Horton  <timothy_horton@apple.com>
    221
  • trunk/Source/WebKit/GPUProcess/GPUProcess.cpp

    r270720 r271482  
    144144#endif
    145145
     146#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
     147    SandboxExtension::consumePermanently(parameters.containerCachesDirectoryExtensionHandle);
     148    SandboxExtension::consumePermanently(parameters.containerTemporaryDirectoryExtensionHandle);
     149#endif
     150   
    146151#if HAVE(VISIBILITY_PROPAGATION_VIEW)
    147152    m_contextForVisibilityPropagation = LayerHostingContext::createForExternalHostingProcess({
  • trunk/Source/WebKit/GPUProcess/GPUProcessCreationParameters.cpp

    r257385 r271482  
    5151#endif
    5252    encoder << parentPID;
     53
     54#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
     55    encoder << containerCachesDirectoryExtensionHandle;
     56    encoder << containerTemporaryDirectoryExtensionHandle;
     57#endif
    5358}
    5459
     
    6974    if (!decoder.decode(result.parentPID))
    7075        return false;
     76
     77#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
     78    Optional<SandboxExtension::Handle> containerCachesDirectoryExtensionHandle;
     79    decoder >> containerCachesDirectoryExtensionHandle;
     80    if (!containerCachesDirectoryExtensionHandle)
     81        return false;
     82    result.containerCachesDirectoryExtensionHandle = WTFMove(*containerCachesDirectoryExtensionHandle);
     83
     84    Optional<SandboxExtension::Handle> containerTemporaryDirectoryExtensionHandle;
     85    decoder >> containerTemporaryDirectoryExtensionHandle;
     86    if (!containerTemporaryDirectoryExtensionHandle)
     87        return false;
     88    result.containerTemporaryDirectoryExtensionHandle = WTFMove(*containerTemporaryDirectoryExtensionHandle);
     89#endif
     90
    7191    return true;
    7292}
  • trunk/Source/WebKit/GPUProcess/GPUProcessCreationParameters.h

    r260025 r271482  
    5050    ProcessID parentPID;
    5151
     52#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
     53    SandboxExtension::Handle containerCachesDirectoryExtensionHandle;
     54    SandboxExtension::Handle containerTemporaryDirectoryExtensionHandle;
     55#endif
     56
    5257    void encode(IPC::Encoder&) const;
    5358    static WARN_UNUSED_RETURN bool decode(IPC::Decoder&, GPUProcessCreationParameters&);
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp

    r270415 r271482  
    5050#endif
    5151
     52#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
     53#include "SandboxUtilities.h"
     54#include <wtf/FileSystem.h>
     55#endif
     56
    5257#define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, this->connection())
    5358
     
    106111    return singleton().get();
    107112}
     113
     114#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
     115static String gpuProcessCachesDirectory()
     116{
     117    String path = pathForProcessContainer() + "/Library/Caches/com.apple.WebKit.GPU/";
     118    path = stringByResolvingSymlinksInPath(path);
     119
     120    FileSystem::makeAllDirectories(path);
     121   
     122    return path;
     123}
     124#endif
    108125
    109126GPUProcessProxy::GPUProcessProxy()
     
    133150    parameters.parentPID = getCurrentProcessID();
    134151
     152#if USE(SANDBOX_EXTENSIONS_FOR_CACHE_AND_TEMP_DIRECTORY_ACCESS)
     153    auto containerCachesDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(gpuProcessCachesDirectory());
     154    auto containerTemporaryDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(WebProcessPool::containerTemporaryDirectory());
     155
     156    if (!containerCachesDirectory.isEmpty())
     157        SandboxExtension::createHandleWithoutResolvingPath(containerCachesDirectory, SandboxExtension::Type::ReadWrite, parameters.containerCachesDirectoryExtensionHandle);
     158
     159    if (!containerTemporaryDirectory.isEmpty())
     160        SandboxExtension::createHandleWithoutResolvingPath(containerTemporaryDirectory, SandboxExtension::Type::ReadWrite, parameters.containerTemporaryDirectoryExtensionHandle);
     161#endif
     162
    135163    // Initialize the GPU process.
    136164    send(Messages::GPUProcess::InitializeGPUProcess(parameters), 0);
Note: See TracChangeset for help on using the changeset viewer.