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