Diff
Modified: trunk/Source/WebCore/ChangeLog (199707 => 199708)
--- trunk/Source/WebCore/ChangeLog 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebCore/ChangeLog 2016-04-19 06:02:04 UTC (rev 199708)
@@ -1,3 +1,28 @@
+2016-04-18 Brady Eidson <beid...@apple.com>
+
+ Modern IDB (Blob support): When reading Blobs from the database, grant the Networking process sandbox access to the files.
+ https://bugs.webkit.org/show_bug.cgi?id=156640
+
+ Reviewed by Alex Christensen.
+
+ No new tests (No change in behavior, as blobs in IDB are not yet enabled,
+ but when they are enabled testing will cover this).
+
+ * Modules/indexeddb/shared/IDBResultData.h: Export some stuff
+
+ * fileapi/ThreadableBlobRegistry.cpp:
+ (WebCore::ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked): Account for
+ BlobRegistry change described below.
+
+ * platform/network/BlobRegistry.h: Change registerBlobURLOptionallyFileBacked to take a
+ BlobDataFileReference instead of a raw path, to allow WK2 to include a sandbox extension.
+
+ * platform/network/BlobRegistryImpl.cpp:
+ (WebCore::BlobRegistryImpl::registerBlobURL): Account for BlobRegistry change described above.
+ (WebCore::BlobRegistryImpl::registerBlobURLOptionallyFileBacked): Use the passed in
+ BlobDataFileHandle, and also register the BlobResourceHandle constructor.
+ * platform/network/BlobRegistryImpl.h:
+
2016-04-18 Alex Christensen <achristen...@webkit.org>
Fix iOS build after r199701
Modified: trunk/Source/WebCore/Modules/indexeddb/shared/IDBResultData.h (199707 => 199708)
--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBResultData.h 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBResultData.h 2016-04-19 06:02:04 UTC (rev 199708)
@@ -82,7 +82,7 @@
static IDBResultData openCursorSuccess(const IDBResourceIdentifier&, const IDBGetResult&);
static IDBResultData iterateCursorSuccess(const IDBResourceIdentifier&, const IDBGetResult&);
- IDBResultData(const IDBResultData&);
+ WEBCORE_EXPORT IDBResultData(const IDBResultData&);
IDBResultType type() const { return m_type; }
IDBResourceIdentifier requestIdentifier() const { return m_requestIdentifier; }
@@ -96,7 +96,7 @@
const IDBKeyData* resultKey() const { return m_resultKey.get(); }
uint64_t resultInteger() const { return m_resultInteger; }
- const IDBGetResult& getResult() const;
+ WEBCORE_EXPORT const IDBGetResult& getResult() const;
WEBCORE_EXPORT IDBResultData();
template<class Encoder> void encode(Encoder&) const;
Modified: trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp (199707 => 199708)
--- trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebCore/fileapi/ThreadableBlobRegistry.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -160,7 +160,7 @@
void ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked(const URL& url, const URL& srcURL, const String& fileBackedPath)
{
if (isMainThread())
- blobRegistry().registerBlobURLOptionallyFileBacked(url, srcURL, fileBackedPath);
+ blobRegistry().registerBlobURLOptionallyFileBacked(url, srcURL, BlobDataFileReference::create(fileBackedPath));
else {
threadableQueue().append(createCrossThreadTask(ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked, url, srcURL, fileBackedPath));
Modified: trunk/Source/WebCore/platform/network/BlobRegistry.h (199707 => 199708)
--- trunk/Source/WebCore/platform/network/BlobRegistry.h 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebCore/platform/network/BlobRegistry.h 2016-04-19 06:02:04 UTC (rev 199708)
@@ -58,7 +58,7 @@
virtual void registerBlobURL(const URL&, const URL& srcURL) = 0;
// Registers a new blob URL referring to the blob data identified by the specified srcURL or, if none found, referring to the file found at the given path.
- virtual void registerBlobURLOptionallyFileBacked(const URL&, const URL& srcURL, const String& fileBackedPath) = 0;
+ virtual void registerBlobURLOptionallyFileBacked(const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&) = 0;
// Negative start and end values select from the end.
virtual void registerBlobURLForSlice(const URL&, const URL& srcURL, long long start, long long end) = 0;
Modified: trunk/Source/WebCore/platform/network/BlobRegistryImpl.cpp (199707 => 199708)
--- trunk/Source/WebCore/platform/network/BlobRegistryImpl.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebCore/platform/network/BlobRegistryImpl.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -160,12 +160,13 @@
void BlobRegistryImpl::registerBlobURL(const URL& url, const URL& srcURL)
{
- registerBlobURLOptionallyFileBacked(url, srcURL, { });
+ registerBlobURLOptionallyFileBacked(url, srcURL, nullptr);
}
-void BlobRegistryImpl::registerBlobURLOptionallyFileBacked(const URL& url, const URL& srcURL, const String& fileBackedPath)
+void BlobRegistryImpl::registerBlobURLOptionallyFileBacked(const URL& url, const URL& srcURL, RefPtr<BlobDataFileReference>&& file)
{
ASSERT(isMainThread());
+ registerBlobResourceHandleConstructor();
BlobData* src = ""
if (src) {
@@ -173,11 +174,11 @@
return;
}
- if (fileBackedPath.isEmpty())
+ if (file == nullptr || file->path().isEmpty())
return;
RefPtr<BlobData> backingFile = BlobData::create({ });
- backingFile->appendFile(BlobDataFileReference::create(fileBackedPath));
+ backingFile->appendFile(WTFMove(file));
m_blobs.set(url.string(), backingFile.release());
}
Modified: trunk/Source/WebCore/platform/network/BlobRegistryImpl.h (199707 => 199708)
--- trunk/Source/WebCore/platform/network/BlobRegistryImpl.h 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebCore/platform/network/BlobRegistryImpl.h 2016-04-19 06:02:04 UTC (rev 199708)
@@ -61,7 +61,7 @@
void registerFileBlobURL(const URL&, RefPtr<BlobDataFileReference>&&, const String& contentType) override;
void registerBlobURL(const URL&, Vector<BlobPart>, const String& contentType) override;
void registerBlobURL(const URL&, const URL& srcURL) override;
- void registerBlobURLOptionallyFileBacked(const URL&, const URL& srcURL, const String& fileBackedPath) override;
+ void registerBlobURLOptionallyFileBacked(const URL&, const URL& srcURL, RefPtr<BlobDataFileReference>&&) override;
void registerBlobURLForSlice(const URL&, const URL& srcURL, long long start, long long end) override;
void unregisterBlobURL(const URL&) override;
bool isBlobRegistryImpl() const override { return true; }
Modified: trunk/Source/WebKit2/ChangeLog (199707 => 199708)
--- trunk/Source/WebKit2/ChangeLog 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/ChangeLog 2016-04-19 06:02:04 UTC (rev 199708)
@@ -1,3 +1,49 @@
+2016-04-18 Brady Eidson <beid...@apple.com>
+
+ Modern IDB (Blob support): When reading Blobs from the database, grant the Networking process sandbox access to the files.
+ https://bugs.webkit.org/show_bug.cgi?id=156640
+
+ Reviewed by Alex Christensen.
+
+ * DatabaseProcess/DatabaseProcess.cpp:
+ (WebKit::DatabaseProcess::getSandboxExtensionsForBlobFiles): Utility function to ask the UI process for
+ SandboxExtensions for a list of files.
+ (WebKit::DatabaseProcess::didGetSandboxExtensionsForBlobFiles): Take the SandboxExtensions from the UI process
+ and pass them along to the completion handler.
+ * DatabaseProcess/DatabaseProcess.h:
+ * DatabaseProcess/DatabaseProcess.messages.in:
+
+ * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
+ (WebKit::WebIDBConnectionToClient::didGetRecord): If the value returned from the database doesn't have Blob files,
+ pass the result directly on to WebCore. If it does, ask the UI process for SandboxExtensions first.
+
+ * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
+ (WebKit::NetworkBlobRegistry::registerBlobURLOptionallyFileBacked): Grab the BlobDataFileReference from the
+ NetworkConnectionToWebProcess to pass along to the BlobRegistry.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob): Add this message
+ so the WebProcess can preflight the creation of some blob URLs by passing along the SandboxExtensions for their files.
+ (WebKit::NetworkConnectionToWebProcess::takeBlobDataFileReferenceForPath):
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+
+ * UIProcess/Databases/DatabaseProcessProxy.cpp:
+ (WebKit::DatabaseProcessProxy::getSandboxExtensionsForBlobFiles): Create SandboxExtensions for the passed in files and
+ return them to the DatabaseProcess.
+ * UIProcess/Databases/DatabaseProcessProxy.h:
+ * UIProcess/Databases/DatabaseProcessProxy.messages.in:
+
+ * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
+ (WebKit::WebIDBConnectionToServer::didGetRecordWithSandboxExtensions): New form of "didGetRecord" that handles passing
+ the SandboxExtensions to the Networking process before they are needed.
+ * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
+ * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:
+
+ * WebProcess/FileAPI/BlobRegistryProxy.cpp:
+ (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked):
+ * WebProcess/FileAPI/BlobRegistryProxy.h:
+
2016-04-18 Dean Jackson <d...@apple.com>
New SPI to export a dictionary of runtime features
Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp (199707 => 199708)
--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -32,6 +32,7 @@
#include "DatabaseProcessMessages.h"
#include "DatabaseProcessProxyMessages.h"
#include "DatabaseToWebProcessConnection.h"
+#include "WebCoreArgumentCoders.h"
#include "WebCrossThreadCopier.h"
#include "WebsiteData.h"
#include <WebCore/CrossThreadTask.h>
@@ -348,9 +349,7 @@
return securityOrigins;
}
-#endif
-#if ENABLE(INDEXED_DATABASE)
static void removeAllDatabasesForOriginPath(const String& originPath, std::chrono::system_clock::time_point modifiedSince)
{
// FIXME: We should also close/invalidate any live handles to the database files we are about to delete.
@@ -406,6 +405,21 @@
}
#endif
+void DatabaseProcess::getSandboxExtensionsForBlobFiles(const Vector<String>& filenames, std::function<void (const SandboxExtension::HandleArray&)> completionHandler)
+{
+ static uint64_t lastRequestID;
+
+ uint64_t requestID = ++lastRequestID;
+ m_sandboxExtensionForBlobsCompletionHandlers.set(requestID, completionHandler);
+ parentProcessConnection()->send(Messages::DatabaseProcessProxy::GetSandboxExtensionsForBlobFiles(requestID, filenames), 0);
+}
+
+void DatabaseProcess::didGetSandboxExtensionsForBlobFiles(uint64_t requestID, const SandboxExtension::HandleArray& handles)
+{
+ if (auto handler = m_sandboxExtensionForBlobsCompletionHandlers.take(requestID))
+ handler(handles);
+}
+
#if !PLATFORM(COCOA)
void DatabaseProcess::initializeProcess(const ChildProcessInitializationParameters&)
{
Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h (199707 => 199708)
--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h 2016-04-19 06:02:04 UTC (rev 199708)
@@ -77,6 +77,8 @@
void accessToTemporaryFileComplete(const String& path) final;
#endif
+ void getSandboxExtensionsForBlobFiles(const Vector<String>& filenames, std::function<void (const SandboxExtension::HandleArray&)> completionHandler);
+
private:
DatabaseProcess();
@@ -104,6 +106,8 @@
void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebsiteDataType> websiteDataTypes, const Vector<WebCore::SecurityOriginData>& origins, uint64_t callbackID);
void grantSandboxExtensionsForBlobs(const Vector<String>& paths, const SandboxExtension::HandleArray&);
+ void didGetSandboxExtensionsForBlobFiles(uint64_t requestID, const SandboxExtension::HandleArray&);
+
#if ENABLE(INDEXED_DATABASE)
Vector<RefPtr<WebCore::SecurityOrigin>> indexedDatabaseOrigins();
void deleteIndexedDatabaseEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>&);
@@ -123,6 +127,7 @@
RefPtr<WebCore::IDBServer::IDBServer> m_idbServer;
#endif
HashMap<String, RefPtr<SandboxExtension>> m_blobTemporaryFileSandboxExtensions;
+ HashMap<uint64_t, std::function<void (const SandboxExtension::HandleArray&)>> m_sandboxExtensionForBlobsCompletionHandlers;
Deque<std::unique_ptr<WebCore::CrossThreadTask>> m_databaseTasks;
Lock m_databaseTaskMutex;
Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.messages.in (199707 => 199708)
--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.messages.in 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.messages.in 2016-04-19 06:02:04 UTC (rev 199708)
@@ -33,6 +33,8 @@
DeleteWebsiteData(WebCore::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID)
DeleteWebsiteDataForOrigins(WebCore::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, Vector<WebCore::SecurityOriginData> origins, uint64_t callbackID)
GrantSandboxExtensionsForBlobs(Vector<String> paths, WebKit::SandboxExtension::HandleArray extensions)
+
+ DidGetSandboxExtensionsForBlobFiles(uint64_t requestID, WebKit::SandboxExtension::HandleArray extensions)
}
#endif // ENABLE(DATABASE_PROCESS)
Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp (199707 => 199708)
--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -127,7 +127,16 @@
void WebIDBConnectionToClient::didGetRecord(const WebCore::IDBResultData& resultData)
{
- send(Messages::WebIDBConnectionToServer::DidGetRecord(resultData));
+ auto& blobFilePaths = resultData.getResult().value().blobFilePaths();
+ if (blobFilePaths.isEmpty()) {
+ send(Messages::WebIDBConnectionToServer::DidGetRecord(resultData));
+ return;
+ }
+
+ RefPtr<WebIDBConnectionToClient> protector(this);
+ DatabaseProcess::singleton().getSandboxExtensionsForBlobFiles(blobFilePaths, [protector, this, resultData](const SandboxExtension::HandleArray& handles) {
+ send(Messages::WebIDBConnectionToServer::DidGetRecordWithSandboxExtensions(resultData, handles));
+ });
}
void WebIDBConnectionToClient::didGetCount(const WebCore::IDBResultData& resultData)
Modified: trunk/Source/WebKit2/NetworkProcess/FileAPI/NetworkBlobRegistry.cpp (199707 => 199708)
--- trunk/Source/WebKit2/NetworkProcess/FileAPI/NetworkBlobRegistry.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/NetworkProcess/FileAPI/NetworkBlobRegistry.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -27,6 +27,7 @@
#include "NetworkBlobRegistry.h"
#include "BlobDataFileReferenceWithSandboxExtension.h"
+#include "NetworkConnectionToWebProcess.h"
#include "SandboxExtension.h"
#include <WebCore/BlobPart.h>
#include <WebCore/BlobRegistryImpl.h>
@@ -85,8 +86,11 @@
void NetworkBlobRegistry::registerBlobURLOptionallyFileBacked(NetworkConnectionToWebProcess* connection, const URL& url, const URL& srcURL, const String& fileBackedPath)
{
- blobRegistry().registerBlobURLOptionallyFileBacked(url, srcURL, fileBackedPath);
+ auto fileReference = connection->takeBlobDataFileReferenceForPath(fileBackedPath);
+ ASSERT(fileReference);
+ blobRegistry().registerBlobURLOptionallyFileBacked(url, srcURL, WTFMove(fileReference));
+
ASSERT(!m_blobsForConnection.get(connection).contains(url));
BlobForConnectionMap::iterator mapIterator = m_blobsForConnection.find(connection);
if (mapIterator == m_blobsForConnection.end())
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp (199707 => 199708)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -26,6 +26,7 @@
#include "config.h"
#include "NetworkConnectionToWebProcess.h"
+#include "BlobDataFileReferenceWithSandboxExtension.h"
#include "NetworkBlobRegistry.h"
#include "NetworkConnectionToWebProcessMessages.h"
#include "NetworkLoad.h"
@@ -271,6 +272,23 @@
NetworkBlobRegistry::singleton().registerBlobURL(this, url, srcURL);
}
+void NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob(const Vector<String>& filePaths, const SandboxExtension::HandleArray& handles)
+{
+ ASSERT(filePaths.size() == handles.size());
+
+ for (size_t i = 0; i < filePaths.size(); ++i) {
+ auto result = m_blobDataFileReferences.add(filePaths[i], BlobDataFileReferenceWithSandboxExtension::create(filePaths[i], SandboxExtension::create(handles[i])));
+ ASSERT_UNUSED(result, result.isNewEntry);
+ }
+}
+
+RefPtr<WebCore::BlobDataFileReference> NetworkConnectionToWebProcess::takeBlobDataFileReferenceForPath(const String& path)
+{
+ auto fileReference = m_blobDataFileReferences.take(path);
+ ASSERT(fileReference);
+ return fileReference;
+}
+
void NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked(const URL& url, const URL& srcURL, const String& fileBackedPath)
{
NetworkBlobRegistry::singleton().registerBlobURLOptionallyFileBacked(this, url, srcURL, fileBackedPath);
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h (199707 => 199708)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h 2016-04-19 06:02:04 UTC (rev 199708)
@@ -35,6 +35,7 @@
#include <wtf/RefCounted.h>
namespace WebCore {
+class BlobDataFileReference;
class ResourceRequest;
}
@@ -54,6 +55,8 @@
void didCleanupResourceLoader(NetworkResourceLoader&);
+ RefPtr<WebCore::BlobDataFileReference> takeBlobDataFileReferenceForPath(const String& path);
+
private:
NetworkConnectionToWebProcess(IPC::Connection::Identifier);
@@ -91,6 +94,7 @@
void registerFileBlobURL(const WebCore::URL&, const String& path, const SandboxExtension::Handle&, const String& contentType);
void registerBlobURL(const WebCore::URL&, Vector<WebCore::BlobPart>, const String& contentType);
void registerBlobURLFromURL(const WebCore::URL&, const WebCore::URL& srcURL);
+ void preregisterSandboxExtensionsForOptionallyFileBackedBlob(const Vector<String>& fileBackedPath, const SandboxExtension::HandleArray&);
void registerBlobURLOptionallyFileBacked(const WebCore::URL&, const WebCore::URL& srcURL, const String& fileBackedPath);
void registerBlobURLForSlice(const WebCore::URL&, const WebCore::URL& srcURL, int64_t start, int64_t end);
void blobSize(const WebCore::URL&, uint64_t& resultSize);
@@ -102,6 +106,7 @@
RefPtr<IPC::Connection> m_connection;
HashMap<ResourceLoadIdentifier, RefPtr<NetworkResourceLoader>> m_networkResourceLoaders;
+ HashMap<String, RefPtr<WebCore::BlobDataFileReference>> m_blobDataFileReferences;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in (199707 => 199708)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2016-04-19 06:02:04 UTC (rev 199708)
@@ -43,6 +43,7 @@
RegisterFileBlobURL(WebCore::URL url, String path, WebKit::SandboxExtension::Handle extensionHandle, String contentType)
RegisterBlobURL(WebCore::URL url, Vector<WebCore::BlobPart> blobParts, String contentType)
RegisterBlobURLFromURL(WebCore::URL url, WebCore::URL srcURL)
+ PreregisterSandboxExtensionsForOptionallyFileBackedBlob(Vector<String> filePaths, WebKit::SandboxExtension::HandleArray extensionHandles)
RegisterBlobURLOptionallyFileBacked(WebCore::URL url, WebCore::URL srcURL, String fileBackedPath)
RegisterBlobURLForSlice(WebCore::URL url, WebCore::URL srcURL, int64_t start, int64_t end)
UnregisterBlobURL(WebCore::URL url)
Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp (199707 => 199708)
--- trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -28,6 +28,7 @@
#include "DatabaseProcessMessages.h"
#include "DatabaseProcessProxyMessages.h"
+#include "NetworkProcessMessages.h"
#include "WebProcessPool.h"
#include "WebsiteData.h"
#include <WebCore/NotImplemented.h>
@@ -195,6 +196,18 @@
callback();
}
+void DatabaseProcessProxy::getSandboxExtensionsForBlobFiles(uint64_t requestID, const Vector<String>& paths)
+{
+ SandboxExtension::HandleArray extensions;
+ extensions.allocate(paths.size());
+ for (size_t i = 0; i < paths.size(); ++i) {
+ // ReadWrite is required for creating hard links, which is something that might be done with these extensions.
+ SandboxExtension::createHandle(paths[i], SandboxExtension::ReadWrite, extensions[i]);
+ }
+
+ send(Messages::DatabaseProcess::DidGetSandboxExtensionsForBlobFiles(requestID, extensions), 0);
+}
+
void DatabaseProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier)
{
ChildProcessProxy::didFinishLaunching(launcher, connectionIdentifier);
Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h (199707 => 199708)
--- trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h 2016-04-19 06:02:04 UTC (rev 199708)
@@ -76,6 +76,7 @@
void didFetchWebsiteData(uint64_t callbackID, const WebsiteData&);
void didDeleteWebsiteData(uint64_t callbackID);
void didDeleteWebsiteDataForOrigins(uint64_t callbackID);
+ void getSandboxExtensionsForBlobFiles(uint64_t requestID, const Vector<String>& paths);
// ProcessLauncher::Client
void didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier) override;
Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.messages.in (199707 => 199708)
--- trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.messages.in 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.messages.in 2016-04-19 06:02:04 UTC (rev 199708)
@@ -28,6 +28,8 @@
DidFetchWebsiteData(uint64_t callbackID, struct WebKit::WebsiteData websiteData)
DidDeleteWebsiteData(uint64_t callbackID)
DidDeleteWebsiteDataForOrigins(uint64_t callbackID)
+
+ GetSandboxExtensionsForBlobFiles(uint64_t requestID, Vector<String> paths)
}
#endif // ENABLE(DATABASE_PROCESS)
Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (199707 => 199708)
--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -30,6 +30,8 @@
#include "DataReference.h"
#include "DatabaseToWebProcessConnectionMessages.h"
+#include "NetworkConnectionToWebProcessMessages.h"
+#include "NetworkProcessConnection.h"
#include "WebIDBConnectionToClientMessages.h"
#include "WebProcess.h"
#include "WebToDatabaseProcessConnection.h"
@@ -235,6 +237,17 @@
m_connectionToServer->didGetRecord(result);
}
+void WebIDBConnectionToServer::didGetRecordWithSandboxExtensions(const WebCore::IDBResultData& result, const SandboxExtension::HandleArray& handles)
+{
+ const auto& filePaths = result.getResult().value().blobFilePaths();
+
+ ASSERT(filePaths.size() == handles.size());
+
+ WebProcess::singleton().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::PreregisterSandboxExtensionsForOptionallyFileBackedBlob(filePaths, handles), 0);
+
+ m_connectionToServer->didGetRecord(result);
+}
+
void WebIDBConnectionToServer::didGetCount(const IDBResultData& result)
{
m_connectionToServer->didGetCount(result);
Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h (199707 => 199708)
--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h 2016-04-19 06:02:04 UTC (rev 199708)
@@ -29,6 +29,7 @@
#if ENABLE(INDEXED_DATABASE)
#include "MessageSender.h"
+#include "SandboxExtension.h"
#include <WebCore/IDBConnectionToServer.h>
namespace WebKit {
@@ -80,6 +81,7 @@
void didDeleteIndex(const WebCore::IDBResultData&);
void didPutOrAdd(const WebCore::IDBResultData&);
void didGetRecord(const WebCore::IDBResultData&);
+ void didGetRecordWithSandboxExtensions(const WebCore::IDBResultData&, const SandboxExtension::HandleArray&);
void didGetCount(const WebCore::IDBResultData&);
void didDeleteRecord(const WebCore::IDBResultData&);
void didOpenCursor(const WebCore::IDBResultData&);
Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in (199707 => 199708)
--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in 2016-04-19 06:02:04 UTC (rev 199708)
@@ -34,6 +34,7 @@
DidDeleteIndex(WebCore::IDBResultData result)
DidPutOrAdd(WebCore::IDBResultData result)
DidGetRecord(WebCore::IDBResultData result)
+ DidGetRecordWithSandboxExtensions(WebCore::IDBResultData result, WebKit::SandboxExtension::HandleArray extensions)
DidGetCount(WebCore::IDBResultData result)
DidDeleteRecord(WebCore::IDBResultData result)
DidOpenCursor(WebCore::IDBResultData result)
Modified: trunk/Source/WebKit2/WebProcess/FileAPI/BlobRegistryProxy.cpp (199707 => 199708)
--- trunk/Source/WebKit2/WebProcess/FileAPI/BlobRegistryProxy.cpp 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/WebProcess/FileAPI/BlobRegistryProxy.cpp 2016-04-19 06:02:04 UTC (rev 199708)
@@ -57,9 +57,10 @@
WebProcess::singleton().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLFromURL(url, srcURL), 0);
}
-void BlobRegistryProxy::registerBlobURLOptionallyFileBacked(const URL& url, const URL& srcURL, const String& fileBackedPath)
+void BlobRegistryProxy::registerBlobURLOptionallyFileBacked(const URL& url, const URL& srcURL, RefPtr<WebCore::BlobDataFileReference>&& file)
{
- WebProcess::singleton().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLOptionallyFileBacked(url, srcURL, fileBackedPath), 0);
+ ASSERT(file);
+ WebProcess::singleton().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::RegisterBlobURLOptionallyFileBacked(url, srcURL, file->path()), 0);
}
void BlobRegistryProxy::unregisterBlobURL(const URL& url)
Modified: trunk/Source/WebKit2/WebProcess/FileAPI/BlobRegistryProxy.h (199707 => 199708)
--- trunk/Source/WebKit2/WebProcess/FileAPI/BlobRegistryProxy.h 2016-04-19 05:08:53 UTC (rev 199707)
+++ trunk/Source/WebKit2/WebProcess/FileAPI/BlobRegistryProxy.h 2016-04-19 06:02:04 UTC (rev 199708)
@@ -35,7 +35,7 @@
void registerFileBlobURL(const WebCore::URL&, RefPtr<WebCore::BlobDataFileReference>&&, const String& contentType) override;
void registerBlobURL(const WebCore::URL&, Vector<WebCore::BlobPart>, const String& contentType) override;
void registerBlobURL(const WebCore::URL&, const WebCore::URL& srcURL) override;
- void registerBlobURLOptionallyFileBacked(const WebCore::URL&, const WebCore::URL& srcURL, const String& fileBackedPath) override;
+ void registerBlobURLOptionallyFileBacked(const WebCore::URL&, const WebCore::URL& srcURL, RefPtr<WebCore::BlobDataFileReference>&&) override;
void unregisterBlobURL(const WebCore::URL&) override;
void registerBlobURLForSlice(const WebCore::URL&, const WebCore::URL& srcURL, long long start, long long end) override;
unsigned long long blobSize(const WebCore::URL&) override;