Title: [279267] trunk/Source
Revision
279267
Author
[email protected]
Date
2021-06-25 00:13:59 -0700 (Fri, 25 Jun 2021)

Log Message

[Model] Create a sandbox extension for a temporary directory to store model resources
https://bugs.webkit.org/show_bug.cgi?id=227359

Reviewed by Tim Horton.

The SPIs we will use to render <model> resources expect a file URL to load and render the model.
Before we adopt these SPIs, we extend the sandbox to allow writing to a temporary directory where
we will store these resources.

Source/WebCore:

* Modules/model-element/HTMLModelElement.cpp:
(WebCore::sharedModelElementCacheDirectory):
(WebCore::HTMLModelElement::setModelElementCacheDirectory):
(WebCore::HTMLModelElement::modelElementCacheDirectory):
* Modules/model-element/HTMLModelElement.h:

Source/WebKit:

* Shared/WebProcessDataStoreParameters.h:
(WebKit::WebProcessDataStoreParameters::encode const):
(WebKit::WebProcessDataStoreParameters::decode):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::webProcessDataStoreParameters):
* UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::defaultModelElementCacheDirectory):
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
* UIProcess/WebsiteData/WebsiteDataStore.h:
(WebKit::WebsiteDataStore::resolvedModelElementCacheDirectory const):
* UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
(WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
(WebKit::WebsiteDataStoreConfiguration::copy const):
* UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
(WebKit::WebsiteDataStoreConfiguration::modelElementCacheDirectory const):
(WebKit::WebsiteDataStoreConfiguration::setModelElementCacheDirectory):
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::setWebsiteDataStoreParameters):
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformSetWebsiteDataStoreParameters):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (279266 => 279267)


--- trunk/Source/WebCore/ChangeLog	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebCore/ChangeLog	2021-06-25 07:13:59 UTC (rev 279267)
@@ -1,3 +1,20 @@
+2021-06-24  Antoine Quint  <[email protected]>
+
+        [Model] Create a sandbox extension for a temporary directory to store model resources
+        https://bugs.webkit.org/show_bug.cgi?id=227359
+
+        Reviewed by Tim Horton.
+
+        The SPIs we will use to render <model> resources expect a file URL to load and render the model.
+        Before we adopt these SPIs, we extend the sandbox to allow writing to a temporary directory where
+        we will store these resources.
+
+        * Modules/model-element/HTMLModelElement.cpp:
+        (WebCore::sharedModelElementCacheDirectory):
+        (WebCore::HTMLModelElement::setModelElementCacheDirectory):
+        (WebCore::HTMLModelElement::modelElementCacheDirectory):
+        * Modules/model-element/HTMLModelElement.h:
+
 2021-06-24  Sihui Liu  <[email protected]>
 
         Remove references to order files

Modified: trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp (279266 => 279267)


--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.cpp	2021-06-25 07:13:59 UTC (rev 279267)
@@ -147,6 +147,22 @@
     return *this;
 }
 
+static String& sharedModelElementCacheDirectory()
+{
+    static NeverDestroyed<String> sharedModelElementCacheDirectory;
+    return sharedModelElementCacheDirectory;
+}
+
+void HTMLModelElement::setModelElementCacheDirectory(const String& path)
+{
+    sharedModelElementCacheDirectory() = path;
+}
+
+const String& HTMLModelElement::modelElementCacheDirectory()
+{
+    return sharedModelElementCacheDirectory();
+}
+
 // MARK: - DOM overrides.
 
 void HTMLModelElement::didMoveToNewDocument(Document& oldDocument, Document& newDocument)

Modified: trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h (279266 => 279267)


--- trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebCore/Modules/model-element/HTMLModelElement.h	2021-06-25 07:13:59 UTC (rev 279267)
@@ -56,6 +56,9 @@
     RefPtr<SharedBuffer> modelData() const;
     RefPtr<Model> model() const;
 
+    WEBCORE_EXPORT static void setModelElementCacheDirectory(const String&);
+    WEBCORE_EXPORT static const String& modelElementCacheDirectory();
+
 private:
     HTMLModelElement(const QualifiedName&, Document&);
 

Modified: trunk/Source/WebKit/ChangeLog (279266 => 279267)


--- trunk/Source/WebKit/ChangeLog	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/ChangeLog	2021-06-25 07:13:59 UTC (rev 279267)
@@ -1,3 +1,36 @@
+2021-06-24  Antoine Quint  <[email protected]>
+
+        [Model] Create a sandbox extension for a temporary directory to store model resources
+        https://bugs.webkit.org/show_bug.cgi?id=227359
+
+        Reviewed by Tim Horton.
+
+        The SPIs we will use to render <model> resources expect a file URL to load and render the model.
+        Before we adopt these SPIs, we extend the sandbox to allow writing to a temporary directory where
+        we will store these resources.
+
+        * Shared/WebProcessDataStoreParameters.h:
+        (WebKit::WebProcessDataStoreParameters::encode const):
+        (WebKit::WebProcessDataStoreParameters::decode):
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::webProcessDataStoreParameters):
+        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
+        (WebKit::WebsiteDataStore::defaultModelElementCacheDirectory):
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
+        * UIProcess/WebsiteData/WebsiteDataStore.h:
+        (WebKit::WebsiteDataStore::resolvedModelElementCacheDirectory const):
+        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
+        (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration):
+        (WebKit::WebsiteDataStoreConfiguration::copy const):
+        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
+        (WebKit::WebsiteDataStoreConfiguration::modelElementCacheDirectory const):
+        (WebKit::WebsiteDataStoreConfiguration::setModelElementCacheDirectory):
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::setWebsiteDataStoreParameters):
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::platformSetWebsiteDataStoreParameters):
+
 2021-06-24  Sihui Liu  <[email protected]>
 
         Remove references to order files

Modified: trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h (279266 => 279267)


--- trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/Shared/WebProcessDataStoreParameters.h	2021-06-25 07:13:59 UTC (rev 279267)
@@ -50,8 +50,11 @@
     WebCore::ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode { WebCore::ThirdPartyCookieBlockingMode::All };
     HashSet<WebCore::RegistrableDomain> domainsWithUserInteraction;
     HashMap<TopFrameDomain, SubResourceDomain> domainsWithStorageAccessQuirk;
-
 #endif
+#if ENABLE(MODEL_ELEMENT)
+    String modelElementCacheDirectory;
+    SandboxExtension::Handle modelElementCacheDirectoryExtensionHandle;
+#endif
     bool resourceLoadStatisticsEnabled { false };
 
     template<class Encoder> void encode(Encoder&) const;
@@ -76,6 +79,10 @@
     encoder << domainsWithUserInteraction;
     encoder << domainsWithStorageAccessQuirk;
 #endif
+#if ENABLE(MODEL_ELEMENT)
+    encoder << modelElementCacheDirectory;
+    encoder << modelElementCacheDirectoryExtensionHandle;
+#endif
     encoder << resourceLoadStatisticsEnabled;
 }
 
@@ -143,7 +150,17 @@
     if (!domainsWithStorageAccessQuirk)
         return std::nullopt;
 #endif
+#if ENABLE(MODEL_ELEMENT)
+        String modelElementCacheDirectory;
+        if (!decoder.decode(modelElementCacheDirectory))
+            return std::nullopt;
 
+        std::optional<SandboxExtension::Handle> modelElementCacheDirectoryExtensionHandle;
+        decoder >> modelElementCacheDirectoryExtensionHandle;
+        if (!modelElementCacheDirectoryExtensionHandle)
+            return std::nullopt;
+#endif
+
     bool resourceLoadStatisticsEnabled = false;
     if (!decoder.decode(resourceLoadStatisticsEnabled))
         return std::nullopt;
@@ -164,6 +181,10 @@
         WTFMove(*domainsWithUserInteraction),
         WTFMove(*domainsWithStorageAccessQuirk),
 #endif
+#if ENABLE(MODEL_ELEMENT)
+        WTFMove(modelElementCacheDirectory),
+        WTFMove(*modelElementCacheDirectoryExtensionHandle),
+#endif
         resourceLoadStatisticsEnabled
     };
 }

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (279266 => 279267)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2021-06-25 07:13:59 UTC (rev 279267)
@@ -692,7 +692,14 @@
     SandboxExtension::Handle _javascript_ConfigurationDirectoryExtensionHandle;
     if (!_javascript_ConfigurationDirectory.isEmpty())
         SandboxExtension::createHandleWithoutResolvingPath(_javascript_ConfigurationDirectory, SandboxExtension::Type::ReadWrite, _javascript_ConfigurationDirectoryExtensionHandle);
-        
+
+#if ENABLE(MODEL_ELEMENT)
+    auto modelElementCacheDirectory = websiteDataStore.resolvedModelElementCacheDirectory();
+    SandboxExtension::Handle modelElementCacheDirectoryExtensionHandle;
+    if (!modelElementCacheDirectory.isEmpty())
+        SandboxExtension::createHandleWithoutResolvingPath(modelElementCacheDirectory, SandboxExtension::Type::ReadWrite, modelElementCacheDirectoryExtensionHandle);
+#endif
+
     return WebProcessDataStoreParameters {
         websiteDataStore.sessionID(),
         WTFMove(applicationCacheDirectory),
@@ -709,6 +716,10 @@
         m_domainsWithUserInteraction,
         m_domainsWithCrossPageStorageAccessQuirk,
 #endif
+#if ENABLE(MODEL_ELEMENT)
+        WTFMove(modelElementCacheDirectory),
+        WTFMove(modelElementCacheDirectoryExtensionHandle),
+#endif
         websiteDataStore.resourceLoadStatisticsEnabled()
     };
 }

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm (279266 => 279267)


--- trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm	2021-06-25 07:13:59 UTC (rev 279267)
@@ -321,6 +321,13 @@
     return tempDirectoryFileSystemRepresentation("_javascript_CoreDebug", ShouldCreateDirectory::No);
 }
 
+#if ENABLE(MODEL_ELEMENT)
+WTF::String WebsiteDataStore::defaultModelElementCacheDirectory()
+{
+    return tempDirectoryFileSystemRepresentation("ModelElement", ShouldCreateDirectory::No);
+}
+#endif
+
 WTF::String WebsiteDataStore::tempDirectoryFileSystemRepresentation(const WTF::String& directoryName, ShouldCreateDirectory shouldCreateDirectory)
 {
     static dispatch_once_t onceToken;

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (279266 => 279267)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2021-06-25 07:13:59 UTC (rev 279267)
@@ -265,6 +265,10 @@
         m_resolvedConfiguration->setCacheStorageDirectory(resolvePathForSandboxExtension(m_configuration->cacheStorageDirectory()));
     if (!m_configuration->hstsStorageDirectory().isEmpty() && m_resolvedConfiguration->hstsStorageDirectory().isEmpty())
         m_resolvedConfiguration->setHSTSStorageDirectory(resolvePathForSandboxExtension(m_configuration->hstsStorageDirectory()));
+#if ENABLE(MODEL_ELEMENT)
+    if (!m_configuration->modelElementCacheDirectory().isEmpty())
+        m_resolvedConfiguration->setModelElementCacheDirectory(resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration->modelElementCacheDirectory()));
+#endif
 
     // Resolve directories for file paths.
     if (!m_configuration->cookieStorageFile().isEmpty()) {

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (279266 => 279267)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2021-06-25 07:13:59 UTC (rev 279267)
@@ -253,6 +253,9 @@
     const String& resolvedServiceWorkerRegistrationDirectory() const { return m_resolvedConfiguration->serviceWorkerRegistrationDirectory(); }
     const String& resolvedResourceLoadStatisticsDirectory() const { return m_resolvedConfiguration->resourceLoadStatisticsDirectory(); }
     const String& resolvedHSTSStorageDirectory() const { return m_resolvedConfiguration->hstsStorageDirectory(); }
+#if ENABLE(MODEL_ELEMENT)
+    const String& resolvedModelElementCacheDirectory() const { return m_resolvedConfiguration->modelElementCacheDirectory(); }
+#endif
 
     void allowSpecificHTTPSCertificateForHost(const WebCertificateInfo*, const String& host);
 
@@ -329,6 +332,9 @@
 #if USE(GLIB)
     static WTF::String defaultHSTSDirectory();
 #endif
+#if ENABLE(MODEL_ELEMENT)
+    static WTF::String defaultModelElementCacheDirectory();
+#endif
     static WTF::String defaultIndexedDBDatabaseDirectory();
     static WTF::String defaultCacheStorageDirectory();
     static WTF::String defaultMediaCacheDirectory();

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp (279266 => 279267)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp	2021-06-25 07:13:59 UTC (rev 279267)
@@ -47,6 +47,9 @@
         setResourceLoadStatisticsDirectory(WebsiteDataStore::defaultResourceLoadStatisticsDirectory());
         setDeviceIdHashSaltsStorageDirectory(WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory());
         setJavaScriptConfigurationDirectory(WebsiteDataStore::defaultJavaScriptConfigurationDirectory());
+#if ENABLE(MODEL_ELEMENT)
+        setModelElementCacheDirectory(WebsiteDataStore::defaultModelElementCacheDirectory());
+#endif
     }
 }
 
@@ -97,6 +100,9 @@
     if (m_proxyConfiguration)
         copy->m_proxyConfiguration = adoptCF(CFDictionaryCreateCopy(nullptr, this->m_proxyConfiguration.get()));
 #endif
+#if ENABLE(MODEL_ELEMENT)
+    copy->m_modelElementCacheDirectory = this->m_modelElementCacheDirectory;
+#endif
 
     return copy;
 }

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h (279266 => 279267)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h	2021-06-25 07:13:59 UTC (rev 279267)
@@ -74,6 +74,11 @@
     const String& localStorageDirectory() const { return m_localStorageDirectory; }
     void setLocalStorageDirectory(String&& directory) { m_localStorageDirectory = WTFMove(directory); }
 
+#if ENABLE(MODEL_ELEMENT)
+    const String& modelElementCacheDirectory() const { return m_modelElementCacheDirectory; }
+    void setModelElementCacheDirectory(String&& directory) { m_modelElementCacheDirectory = WTFMove(directory); }
+#endif
+
     const String& boundInterfaceIdentifier() const { return m_boundInterfaceIdentifier; }
     void setBoundInterfaceIdentifier(String&& identifier) { m_boundInterfaceIdentifier = WTFMove(identifier); }
 
@@ -179,6 +184,9 @@
     String m_serviceWorkerRegistrationDirectory;
     String m_webSQLDatabaseDirectory;
     String m_hstsStorageDirectory;
+#if ENABLE(MODEL_ELEMENT)
+    String m_modelElementCacheDirectory;
+#endif
 #if USE(GLIB)
     bool m_networkCacheSpeculativeValidationEnabled { true };
 #else

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (279266 => 279267)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-06-25 07:13:59 UTC (rev 279267)
@@ -141,6 +141,10 @@
 #include <wtf/URLParser.h>
 #include <wtf/text/StringHash.h>
 
+#if ENABLE(MODEL_ELEMENT)
+#include <WebCore/HTMLModelElement.h>
+#endif
+
 #if !OS(WINDOWS)
 #include <unistd.h>
 #endif
@@ -568,6 +572,11 @@
         WebCore::HTMLMediaElement::setMediaCacheDirectory(parameters.mediaCacheDirectory);
 #endif
 
+#if ENABLE(MODEL_ELEMENT)
+    if (!parameters.modelElementCacheDirectory.isEmpty())
+        WebCore::HTMLModelElement::setModelElementCacheDirectory(parameters.modelElementCacheDirectory);
+#endif
+
     setResourceLoadStatisticsEnabled(parameters.resourceLoadStatisticsEnabled);
 
 #if ENABLE(RESOURCE_LOAD_STATISTICS)

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (279266 => 279267)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2021-06-25 03:30:00 UTC (rev 279266)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2021-06-25 07:13:59 UTC (rev 279267)
@@ -481,7 +481,10 @@
     SandboxExtension::consumePermanently(parameters.mediaCacheDirectoryExtensionHandle);
     SandboxExtension::consumePermanently(parameters.mediaKeyStorageDirectoryExtensionHandle);
     SandboxExtension::consumePermanently(parameters._javascript_ConfigurationDirectoryExtensionHandle);
+#if ENABLE(MODEL_ELEMENT)
+    SandboxExtension::consumePermanently(parameters.modelElementCacheDirectoryExtensionHandle);
 #endif
+#endif
 
     if (!parameters._javascript_ConfigurationDirectory.isEmpty()) {
         String _javascript_ConfigFile = parameters._javascript_ConfigurationDirectory + "/JSC.config";
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to