Changeset 235954 in webkit
- Timestamp:
- Sep 12, 2018, 3:16:45 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 1 deleted
- 47 edited
- 3 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/storage/indexeddb/modern/opendatabase-after-storage-crash.html (modified) (1 diff)
-
Source/WebKit/CMakeLists.txt (modified) (4 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/DerivedSources.make (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/IndexedDB (added)
-
Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp (copied) (copied from trunk/Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.cpp ) (7 diffs)
-
Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h (copied) (copied from trunk/Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.h ) (4 diffs)
-
Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in (copied) (copied from trunk/Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.messages.in )
-
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (modified) (6 diffs)
-
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkProcess.cpp (modified) (8 diffs)
-
Source/WebKit/NetworkProcess/NetworkProcess.h (modified) (9 diffs)
-
Source/WebKit/NetworkProcess/NetworkProcess.messages.in (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h (modified) (1 diff)
-
Source/WebKit/Shared/Storage/StorageProcessCreationParameters.cpp (modified) (2 diffs)
-
Source/WebKit/Shared/Storage/StorageProcessCreationParameters.h (modified) (1 diff)
-
Source/WebKit/Shared/WebsiteDataStoreParameters.cpp (modified) (5 diffs)
-
Source/WebKit/Shared/WebsiteDataStoreParameters.h (modified) (1 diff)
-
Source/WebKit/Sources.txt (modified) (2 diffs)
-
Source/WebKit/StorageProcess/IndexedDB (deleted)
-
Source/WebKit/StorageProcess/StorageProcess.cpp (modified) (5 diffs)
-
Source/WebKit/StorageProcess/StorageProcess.h (modified) (6 diffs)
-
Source/WebKit/StorageProcess/StorageProcess.messages.in (modified) (1 diff)
-
Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp (modified) (4 diffs)
-
Source/WebKit/StorageProcess/StorageToWebProcessConnection.h (modified) (2 diffs)
-
Source/WebKit/StorageProcess/StorageToWebProcessConnection.messages.in (modified) (1 diff)
-
Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (modified) (2 diffs)
-
Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (modified) (2 diffs)
-
Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/Storage/StorageProcessProxy.h (modified) (1 diff)
-
Source/WebKit/UIProcess/Storage/StorageProcessProxy.messages.in (modified) (1 diff)
-
Source/WebKit/UIProcess/WebProcessPool.cpp (modified) (4 diffs)
-
Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (modified) (10 diffs)
-
Source/WebKit/WebKit.xcodeproj/project.pbxproj (modified) (7 diffs)
-
Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (modified) (3 diffs)
-
Source/WebKit/WebProcess/Databases/WebDatabaseProvider.cpp (modified) (3 diffs)
-
Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp (modified) (4 diffs)
-
Source/WebKit/WebProcess/Network/NetworkProcessConnection.h (modified) (3 diffs)
-
Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp (modified) (5 diffs)
-
Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.h (modified) (3 diffs)
-
Source/WebKit/WebProcess/WebProcess.cpp (modified) (3 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r235948 r235954 1 2018-09-12 Sihui Liu <sihui_liu@apple.com> 2 3 Move IndexedDB to Network Process 4 https://bugs.webkit.org/show_bug.cgi?id=189415 5 6 Reviewed by Geoffrey Garen. 7 8 * storage/indexeddb/modern/opendatabase-after-storage-crash.html: 9 1 10 2018-09-11 Dean Jackson <dino@apple.com> 2 11 -
trunk/LayoutTests/storage/indexeddb/modern/opendatabase-after-storage-crash.html
r235415 r235954 62 62 if (window.testRunner) { 63 63 testRunner.waitUntilDone(); 64 testRunner.terminate StorageProcess();64 testRunner.terminateNetworkProcess(); 65 65 } 66 66 } -
trunk/Source/WebKit/CMakeLists.txt
r235921 r235954 10 10 "${WEBKIT_DIR}/NetworkProcess/Downloads" 11 11 "${WEBKIT_DIR}/NetworkProcess/FileAPI" 12 "${WEBKIT_DIR}/NetworkProcess/IndexedDB" 12 13 "${WEBKIT_DIR}/NetworkProcess/cache" 13 14 "${WEBKIT_DIR}/NetworkProcess/capture" … … 33 34 "${WEBKIT_DIR}/Shared/WebsiteData" 34 35 "${WEBKIT_DIR}/StorageProcess" 35 "${WEBKIT_DIR}/StorageProcess/IndexedDB"36 36 "${WEBKIT_DIR}/StorageProcess/ServiceWorker" 37 37 "${WEBKIT_DIR}/UIProcess" … … 111 111 NetworkProcess/NetworkSocketStream.messages.in 112 112 113 NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in 114 113 115 NetworkProcess/cache/CacheStorageEngineConnection.messages.in 114 116 … … 131 133 StorageProcess/StorageProcess.messages.in 132 134 StorageProcess/StorageToWebProcessConnection.messages.in 133 134 StorageProcess/IndexedDB/WebIDBConnectionToClient.messages.in135 135 136 136 StorageProcess/ServiceWorker/WebSWServerConnection.messages.in -
trunk/Source/WebKit/ChangeLog
r235953 r235954 1 2018-09-12 Sihui Liu <sihui_liu@apple.com> 2 3 Move IndexedDB to Network Process 4 https://bugs.webkit.org/show_bug.cgi?id=189415 5 6 Reviewed by Geoffrey Garen. 7 8 We are going to eliminate storage process and move its functionality to network process. 9 The reasons why we want to do this: 10 1. Lower resource usage of having an additional process for storage operations, especially 11 memory. Single storage process takes about 5MB memory on macOS. 12 2. Reduce latency of Service Workers. After enabling Service Workers, we've seen 13 regression in app launch. The launch time of storage process is partly attributed to this: 14 Service Workers delay page loading until receiving response from storage process. 15 3. We choose network process because UI process may have broader access in file system 16 that we don't want the storage operations to have. 17 18 This patch is the first piece towards the goal. It mainly moves indexedDB from storage process 19 to corresponding components of network process. Moving of Service Worker and stopping to 20 launch storage process will be done in following patches. 21 22 We expect to see the higher cpu and memory usage of network process as it is taking more work, 23 but the overall gain in memory and latency after we completely remove storage process should be 24 positive. 25 26 27 * CMakeLists.txt: 28 * DerivedSources.make: 29 30 * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.cpp. 31 (WebKit::WebIDBConnectionToClient::create): 32 (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient): 33 (WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient): 34 (WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess): 35 (WebKit::WebIDBConnectionToClient::messageSenderConnection): 36 (WebKit::WebIDBConnectionToClient::connectionToClient): 37 (WebKit::WebIDBConnectionToClient::didDeleteDatabase): 38 (WebKit::WebIDBConnectionToClient::didOpenDatabase): 39 (WebKit::WebIDBConnectionToClient::didAbortTransaction): 40 (WebKit::WebIDBConnectionToClient::didCommitTransaction): 41 (WebKit::WebIDBConnectionToClient::didCreateObjectStore): 42 (WebKit::WebIDBConnectionToClient::didDeleteObjectStore): 43 (WebKit::WebIDBConnectionToClient::didRenameObjectStore): 44 (WebKit::WebIDBConnectionToClient::didClearObjectStore): 45 (WebKit::WebIDBConnectionToClient::didCreateIndex): 46 (WebKit::WebIDBConnectionToClient::didDeleteIndex): 47 (WebKit::WebIDBConnectionToClient::didRenameIndex): 48 (WebKit::WebIDBConnectionToClient::didPutOrAdd): 49 (WebKit::WebIDBConnectionToClient::handleGetResult): 50 (WebKit::WebIDBConnectionToClient::didGetRecord): 51 (WebKit::WebIDBConnectionToClient::didGetAllRecords): 52 (WebKit::WebIDBConnectionToClient::didGetCount): 53 (WebKit::WebIDBConnectionToClient::didDeleteRecord): 54 (WebKit::WebIDBConnectionToClient::didOpenCursor): 55 (WebKit::WebIDBConnectionToClient::didIterateCursor): 56 (WebKit::WebIDBConnectionToClient::fireVersionChangeEvent): 57 (WebKit::WebIDBConnectionToClient::didStartTransaction): 58 (WebKit::WebIDBConnectionToClient::didCloseFromServer): 59 (WebKit::WebIDBConnectionToClient::notifyOpenDBRequestBlocked): 60 (WebKit::WebIDBConnectionToClient::didGetAllDatabaseNames): 61 (WebKit::WebIDBConnectionToClient::deleteDatabase): 62 (WebKit::WebIDBConnectionToClient::openDatabase): 63 (WebKit::WebIDBConnectionToClient::abortTransaction): 64 (WebKit::WebIDBConnectionToClient::commitTransaction): 65 (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction): 66 (WebKit::WebIDBConnectionToClient::createObjectStore): 67 (WebKit::WebIDBConnectionToClient::deleteObjectStore): 68 (WebKit::WebIDBConnectionToClient::renameObjectStore): 69 (WebKit::WebIDBConnectionToClient::clearObjectStore): 70 (WebKit::WebIDBConnectionToClient::createIndex): 71 (WebKit::WebIDBConnectionToClient::deleteIndex): 72 (WebKit::WebIDBConnectionToClient::renameIndex): 73 (WebKit::WebIDBConnectionToClient::putOrAdd): 74 (WebKit::WebIDBConnectionToClient::getRecord): 75 (WebKit::WebIDBConnectionToClient::getAllRecords): 76 (WebKit::WebIDBConnectionToClient::getCount): 77 (WebKit::WebIDBConnectionToClient::deleteRecord): 78 (WebKit::WebIDBConnectionToClient::openCursor): 79 (WebKit::WebIDBConnectionToClient::iterateCursor): 80 (WebKit::WebIDBConnectionToClient::establishTransaction): 81 (WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose): 82 (WebKit::WebIDBConnectionToClient::databaseConnectionClosed): 83 (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded): 84 (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent): 85 (WebKit::WebIDBConnectionToClient::openDBRequestCancelled): 86 (WebKit::WebIDBConnectionToClient::confirmDidCloseFromServer): 87 (WebKit::WebIDBConnectionToClient::getAllDatabaseNames): 88 * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.h. 89 * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in: Renamed from Source/WebKit/StorageProcess/IndexedDB/WebIDBConnectionToClient.messages.in. 90 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 91 (WebKit::NetworkConnectionToWebProcess::didReceiveMessage): 92 93 Code moved from StorageToWebProcessConnection::didReceiveMessage. 94 95 (WebKit::NetworkConnectionToWebProcess::didClose): 96 (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles): 97 98 Network process receives and stores sandbox extension of temporary files for later indexedDB 99 use. 100 101 (WebKit::generateIDBConnectionToServerIdentifier): 102 (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer): 103 (WebKit::NetworkConnectionToWebProcess::removeIDBConnectionToServer): 104 * NetworkProcess/NetworkConnectionToWebProcess.h: 105 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 106 * NetworkProcess/NetworkProcess.cpp: 107 (WebKit::NetworkProcess::NetworkProcess): 108 (WebKit::NetworkProcess::initializeNetworkProcess): 109 (WebKit::NetworkProcess::addWebsiteDataStore): 110 (WebKit::NetworkProcess::fetchWebsiteData): 111 (WebKit::NetworkProcess::deleteWebsiteData): 112 (WebKit::NetworkProcess::deleteWebsiteDataForOrigins): 113 (WebKit::NetworkProcess::idbServer): 114 (WebKit::NetworkProcess::ensurePathExists): 115 (WebKit::NetworkProcess::postStorageTask): 116 (WebKit::NetworkProcess::performNextStorageTask): 117 (WebKit::NetworkProcess::prepareForAccessToTemporaryFile): 118 (WebKit::NetworkProcess::accessToTemporaryFileComplete): 119 (WebKit::NetworkProcess::indexedDatabaseOrigins): 120 (WebKit::NetworkProcess::addIndexedDatabaseSession): 121 (WebKit::NetworkProcess::getSandboxExtensionsForBlobFiles): 122 123 Instead of asking UI process to grant sandbox extension to storage process, now network 124 process just asks for sandbox extension fot itself. 125 126 (WebKit::NetworkProcess::didGetSandboxExtensionsForBlobFiles): 127 (WebKit::NetworkProcess::updateTemporaryFileSandboxExtensions): 128 (WebKit::NetworkProcess::grantSandboxExtensionsToStorageProcessForBlobs): Deleted. 129 (WebKit::NetworkProcess::didGrantSandboxExtensionsToStorageProcessForBlobs): Deleted. 130 * NetworkProcess/NetworkProcess.h: 131 (WebKit::NetworkProcess::queue): 132 * NetworkProcess/NetworkProcess.messages.in: 133 * NetworkProcess/NetworkProcessCreationParameters.cpp: 134 (WebKit::NetworkProcessCreationParameters::encode const): 135 (WebKit::NetworkProcessCreationParameters::decode): 136 * NetworkProcess/NetworkProcessCreationParameters.h: 137 * Shared/Storage/StorageProcessCreationParameters.cpp: 138 (WebKit::StorageProcessCreationParameters::encode const): 139 (WebKit::StorageProcessCreationParameters::decode): 140 * Shared/Storage/StorageProcessCreationParameters.h: 141 * Shared/WebsiteDataStoreParameters.cpp: 142 (WebKit::WebsiteDataStoreParameters::encode const): 143 (WebKit::WebsiteDataStoreParameters::decode): 144 (WebKit::WebsiteDataStoreParameters::privateSessionParameters): 145 * Shared/WebsiteDataStoreParameters.h: 146 * Sources.txt: 147 * StorageProcess/StorageProcess.cpp: 148 (WebKit::StorageProcess::initializeWebsiteDataStore): 149 (WebKit::StorageProcess::fetchWebsiteData): 150 (WebKit::StorageProcess::deleteWebsiteData): 151 (WebKit::StorageProcess::deleteWebsiteDataForOrigins): 152 (WebKit::StorageProcess::idbServer): Deleted. 153 (WebKit::StorageProcess::grantSandboxExtensionsForBlobs): Deleted. 154 (WebKit::StorageProcess::prepareForAccessToTemporaryFile): Deleted. 155 (WebKit::StorageProcess::accessToTemporaryFileComplete): Deleted. 156 (WebKit::StorageProcess::indexedDatabaseOrigins): Deleted. 157 (WebKit::StorageProcess::getSandboxExtensionsForBlobFiles): Deleted. 158 (WebKit::StorageProcess::didGetSandboxExtensionsForBlobFiles): Deleted. 159 * StorageProcess/StorageProcess.h: 160 (WebKit::StorageProcess::queue): Deleted. 161 * StorageProcess/StorageProcess.messages.in: 162 * StorageProcess/StorageToWebProcessConnection.cpp: 163 (WebKit::StorageToWebProcessConnection::didReceiveMessage): 164 (WebKit::StorageToWebProcessConnection::didClose): 165 (WebKit::generateIDBConnectionToServerIdentifier): Deleted. 166 (WebKit::StorageToWebProcessConnection::establishIDBConnectionToServer): Deleted. 167 (WebKit::StorageToWebProcessConnection::removeIDBConnectionToServer): Deleted. 168 * StorageProcess/StorageToWebProcessConnection.h: 169 * StorageProcess/StorageToWebProcessConnection.messages.in: 170 * UIProcess/Network/NetworkProcessProxy.cpp: 171 (WebKit::NetworkProcessProxy::getSandboxExtensionsForBlobFiles): 172 (WebKit::NetworkProcessProxy::grantSandboxExtensionsToStorageProcessForBlobs): Deleted. 173 * UIProcess/Network/NetworkProcessProxy.h: 174 * UIProcess/Network/NetworkProcessProxy.messages.in: 175 * UIProcess/Storage/StorageProcessProxy.cpp: 176 (WebKit::StorageProcessProxy::getSandboxExtensionsForBlobFiles): Deleted. 177 * UIProcess/Storage/StorageProcessProxy.h: 178 * UIProcess/Storage/StorageProcessProxy.messages.in: 179 * UIProcess/WebProcessPool.cpp: 180 (WebKit::WebProcessPool::ensureNetworkProcess): 181 (WebKit::WebProcessPool::ensureStorageProcessAndWebsiteDataStore): 182 (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore): 183 * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: 184 (WebKit::WebsiteDataStore::parameters): 185 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 186 (WebKit::computeNetworkProcessAccessTypeForDataFetch): 187 (WebKit::WebsiteDataStore::fetchDataAndApply): 188 (WebKit::computeNetworkProcessAccessTypeForDataRemoval): 189 (WebKit::WebsiteDataStore::removeData): 190 (WebKit::WebsiteDataStore::storageProcessParameters): 191 (WebKit::WebsiteDataStore::parameters): 192 * WebKit.xcodeproj/project.pbxproj: 193 * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp: 194 (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer): 195 (WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer): 196 (WebKit::WebIDBConnectionToServer::messageSenderConnection): 197 * WebProcess/Databases/WebDatabaseProvider.cpp: 198 (WebKit::WebDatabaseProvider::idbConnectionToServerForSession): 199 * WebProcess/Network/NetworkProcessConnection.cpp: 200 (WebKit::NetworkProcessConnection::didReceiveMessage): 201 (WebKit::NetworkProcessConnection::didClose): 202 (WebKit::NetworkProcessConnection::idbConnectionToServerForSession): 203 * WebProcess/Network/NetworkProcessConnection.h: 204 (WebKit::NetworkProcessConnection::existingIDBConnectionToServerForIdentifier): 205 * WebProcess/Storage/WebToStorageProcessConnection.cpp: 206 (WebKit::WebToStorageProcessConnection::didReceiveMessage): 207 208 Code moved from WebToStorageProcessConnection::didReceiveMessage. 209 210 (WebKit::WebToStorageProcessConnection::didClose): 211 (WebKit::WebToStorageProcessConnection::idbConnectionToServerForSession): Deleted. 212 * WebProcess/Storage/WebToStorageProcessConnection.h: 213 (WebKit::WebToStorageProcessConnection::existingIDBConnectionToServerForIdentifier): Deleted. 214 * WebProcess/WebProcess.cpp: 215 (WebKit::WebProcess::networkProcessConnectionClosed): 216 (WebKit::WebProcess::webToStorageProcessConnectionClosed): 217 1 218 2018-09-11 Simon Fraser <simon.fraser@apple.com> 2 219 -
trunk/Source/WebKit/DerivedSources.make
r235921 r235954 29 29 $(WebKit2)/NetworkProcess/mac \ 30 30 $(WebKit2)/NetworkProcess/webrtc \ 31 $(WebKit2)/NetworkProcess/IndexedDB \ 31 32 $(WebKit2)/PluginProcess \ 32 33 $(WebKit2)/PluginProcess/mac \ … … 37 38 $(WebKit2)/Shared/mac \ 38 39 $(WebKit2)/StorageProcess \ 39 $(WebKit2)/StorageProcess/IndexedDB \40 40 $(WebKit2)/StorageProcess/ServiceWorker \ 41 41 $(WebKit2)/StorageProcess/mac \ -
trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp
r235953 r235954 30 30 31 31 #include "DataReference.h" 32 #include " StorageProcess.h"32 #include "NetworkProcess.h" 33 33 #include "WebCoreArgumentCoders.h" 34 34 #include "WebIDBConnectionToServerMessages.h" … … 46 46 namespace WebKit { 47 47 48 Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create( StorageToWebProcessConnection& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)48 Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(NetworkConnectionToWebProcess& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID) 49 49 { 50 50 return adoptRef(*new WebIDBConnectionToClient(connection, serverConnectionIdentifier, sessionID)); 51 51 } 52 52 53 WebIDBConnectionToClient::WebIDBConnectionToClient( StorageToWebProcessConnection& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID)53 WebIDBConnectionToClient::WebIDBConnectionToClient(NetworkConnectionToWebProcess& connection, uint64_t serverConnectionIdentifier, PAL::SessionID sessionID) 54 54 : m_connection(connection) 55 55 , m_identifier(serverConnectionIdentifier) … … 58 58 relaxAdoptionRequirement(); 59 59 m_connectionToClient = IDBServer::IDBConnectionToClient::create(*this); 60 StorageProcess::singleton().idbServer(m_sessionID).registerConnection(*m_connectionToClient);60 NetworkProcess::singleton().idbServer(m_sessionID).registerConnection(*m_connectionToClient); 61 61 } 62 62 … … 67 67 void WebIDBConnectionToClient::disconnectedFromWebProcess() 68 68 { 69 StorageProcess::singleton().idbServer(m_sessionID).unregisterConnection(*m_connectionToClient);69 NetworkProcess::singleton().idbServer(m_sessionID).unregisterConnection(*m_connectionToClient); 70 70 } 71 71 … … 159 159 160 160 #if ENABLE(SANDBOX_EXTENSIONS) 161 StorageProcess::singleton().getSandboxExtensionsForBlobFiles(blobFilePaths, [protectedThis = makeRef(*this), this, resultData](SandboxExtension::HandleArray&& handles) {161 NetworkProcess::singleton().getSandboxExtensionsForBlobFiles(blobFilePaths, [protectedThis = makeRef(*this), this, resultData](SandboxExtension::HandleArray&& handles) { 162 162 send(MessageType({ resultData, WTFMove(handles) })); 163 163 }); … … 224 224 void WebIDBConnectionToClient::deleteDatabase(const IDBRequestData& request) 225 225 { 226 StorageProcess::singleton().idbServer(m_sessionID).deleteDatabase(request);226 NetworkProcess::singleton().idbServer(m_sessionID).deleteDatabase(request); 227 227 } 228 228 229 229 void WebIDBConnectionToClient::openDatabase(const IDBRequestData& request) 230 230 { 231 StorageProcess::singleton().idbServer(m_sessionID).openDatabase(request);231 NetworkProcess::singleton().idbServer(m_sessionID).openDatabase(request); 232 232 } 233 233 234 234 void WebIDBConnectionToClient::abortTransaction(const IDBResourceIdentifier& transactionIdentifier) 235 235 { 236 StorageProcess::singleton().idbServer(m_sessionID).abortTransaction(transactionIdentifier);236 NetworkProcess::singleton().idbServer(m_sessionID).abortTransaction(transactionIdentifier); 237 237 } 238 238 239 239 void WebIDBConnectionToClient::commitTransaction(const IDBResourceIdentifier& transactionIdentifier) 240 240 { 241 StorageProcess::singleton().idbServer(m_sessionID).commitTransaction(transactionIdentifier);241 NetworkProcess::singleton().idbServer(m_sessionID).commitTransaction(transactionIdentifier); 242 242 } 243 243 244 244 void WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) 245 245 { 246 StorageProcess::singleton().idbServer(m_sessionID).didFinishHandlingVersionChangeTransaction(databaseConnectionIdentifier, transactionIdentifier);246 NetworkProcess::singleton().idbServer(m_sessionID).didFinishHandlingVersionChangeTransaction(databaseConnectionIdentifier, transactionIdentifier); 247 247 } 248 248 249 249 void WebIDBConnectionToClient::createObjectStore(const IDBRequestData& request, const IDBObjectStoreInfo& info) 250 250 { 251 StorageProcess::singleton().idbServer(m_sessionID).createObjectStore(request, info);251 NetworkProcess::singleton().idbServer(m_sessionID).createObjectStore(request, info); 252 252 } 253 253 254 254 void WebIDBConnectionToClient::deleteObjectStore(const IDBRequestData& request, const String& name) 255 255 { 256 StorageProcess::singleton().idbServer(m_sessionID).deleteObjectStore(request, name);256 NetworkProcess::singleton().idbServer(m_sessionID).deleteObjectStore(request, name); 257 257 } 258 258 259 259 void WebIDBConnectionToClient::renameObjectStore(const IDBRequestData& request, uint64_t objectStoreIdentifier, const String& newName) 260 260 { 261 StorageProcess::singleton().idbServer(m_sessionID).renameObjectStore(request, objectStoreIdentifier, newName);261 NetworkProcess::singleton().idbServer(m_sessionID).renameObjectStore(request, objectStoreIdentifier, newName); 262 262 } 263 263 264 264 void WebIDBConnectionToClient::clearObjectStore(const IDBRequestData& request, uint64_t objectStoreIdentifier) 265 265 { 266 StorageProcess::singleton().idbServer(m_sessionID).clearObjectStore(request, objectStoreIdentifier);266 NetworkProcess::singleton().idbServer(m_sessionID).clearObjectStore(request, objectStoreIdentifier); 267 267 } 268 268 269 269 void WebIDBConnectionToClient::createIndex(const IDBRequestData& request, const IDBIndexInfo& info) 270 270 { 271 StorageProcess::singleton().idbServer(m_sessionID).createIndex(request, info);271 NetworkProcess::singleton().idbServer(m_sessionID).createIndex(request, info); 272 272 } 273 273 274 274 void WebIDBConnectionToClient::deleteIndex(const IDBRequestData& request, uint64_t objectStoreIdentifier, const String& name) 275 275 { 276 StorageProcess::singleton().idbServer(m_sessionID).deleteIndex(request, objectStoreIdentifier, name);276 NetworkProcess::singleton().idbServer(m_sessionID).deleteIndex(request, objectStoreIdentifier, name); 277 277 } 278 278 279 279 void WebIDBConnectionToClient::renameIndex(const IDBRequestData& request, uint64_t objectStoreIdentifier, uint64_t indexIdentifier, const String& newName) 280 280 { 281 StorageProcess::singleton().idbServer(m_sessionID).renameIndex(request, objectStoreIdentifier, indexIdentifier, newName);281 NetworkProcess::singleton().idbServer(m_sessionID).renameIndex(request, objectStoreIdentifier, indexIdentifier, newName); 282 282 } 283 283 … … 294 294 IndexedDB::ObjectStoreOverwriteMode mode = static_cast<IndexedDB::ObjectStoreOverwriteMode>(overwriteMode); 295 295 296 StorageProcess::singleton().idbServer(m_sessionID).putOrAdd(request, key, value, mode);296 NetworkProcess::singleton().idbServer(m_sessionID).putOrAdd(request, key, value, mode); 297 297 } 298 298 299 299 void WebIDBConnectionToClient::getRecord(const IDBRequestData& request, const IDBGetRecordData& getRecordData) 300 300 { 301 StorageProcess::singleton().idbServer(m_sessionID).getRecord(request, getRecordData);301 NetworkProcess::singleton().idbServer(m_sessionID).getRecord(request, getRecordData); 302 302 } 303 303 304 304 void WebIDBConnectionToClient::getAllRecords(const IDBRequestData& request, const IDBGetAllRecordsData& getAllRecordsData) 305 305 { 306 StorageProcess::singleton().idbServer(m_sessionID).getAllRecords(request, getAllRecordsData);306 NetworkProcess::singleton().idbServer(m_sessionID).getAllRecords(request, getAllRecordsData); 307 307 } 308 308 309 309 void WebIDBConnectionToClient::getCount(const IDBRequestData& request, const IDBKeyRangeData& range) 310 310 { 311 StorageProcess::singleton().idbServer(m_sessionID).getCount(request, range);311 NetworkProcess::singleton().idbServer(m_sessionID).getCount(request, range); 312 312 } 313 313 314 314 void WebIDBConnectionToClient::deleteRecord(const IDBRequestData& request, const IDBKeyRangeData& range) 315 315 { 316 StorageProcess::singleton().idbServer(m_sessionID).deleteRecord(request, range);316 NetworkProcess::singleton().idbServer(m_sessionID).deleteRecord(request, range); 317 317 } 318 318 319 319 void WebIDBConnectionToClient::openCursor(const IDBRequestData& request, const IDBCursorInfo& info) 320 320 { 321 StorageProcess::singleton().idbServer(m_sessionID).openCursor(request, info);321 NetworkProcess::singleton().idbServer(m_sessionID).openCursor(request, info); 322 322 } 323 323 324 324 void WebIDBConnectionToClient::iterateCursor(const IDBRequestData& request, const IDBIterateCursorData& data) 325 325 { 326 StorageProcess::singleton().idbServer(m_sessionID).iterateCursor(request, data);326 NetworkProcess::singleton().idbServer(m_sessionID).iterateCursor(request, data); 327 327 } 328 328 329 329 void WebIDBConnectionToClient::establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo& info) 330 330 { 331 StorageProcess::singleton().idbServer(m_sessionID).establishTransaction(databaseConnectionIdentifier, info);331 NetworkProcess::singleton().idbServer(m_sessionID).establishTransaction(databaseConnectionIdentifier, info); 332 332 } 333 333 334 334 void WebIDBConnectionToClient::databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier) 335 335 { 336 StorageProcess::singleton().idbServer(m_sessionID).databaseConnectionPendingClose(databaseConnectionIdentifier);336 NetworkProcess::singleton().idbServer(m_sessionID).databaseConnectionPendingClose(databaseConnectionIdentifier); 337 337 } 338 338 339 339 void WebIDBConnectionToClient::databaseConnectionClosed(uint64_t databaseConnectionIdentifier) 340 340 { 341 StorageProcess::singleton().idbServer(m_sessionID).databaseConnectionClosed(databaseConnectionIdentifier);341 NetworkProcess::singleton().idbServer(m_sessionID).databaseConnectionClosed(databaseConnectionIdentifier); 342 342 } 343 343 344 344 void WebIDBConnectionToClient::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) 345 345 { 346 StorageProcess::singleton().idbServer(m_sessionID).abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier);346 NetworkProcess::singleton().idbServer(m_sessionID).abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier); 347 347 } 348 348 349 349 void WebIDBConnectionToClient::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) 350 350 { 351 StorageProcess::singleton().idbServer(m_sessionID).didFireVersionChangeEvent(databaseConnectionIdentifier, transactionIdentifier);351 NetworkProcess::singleton().idbServer(m_sessionID).didFireVersionChangeEvent(databaseConnectionIdentifier, transactionIdentifier); 352 352 } 353 353 354 354 void WebIDBConnectionToClient::openDBRequestCancelled(const IDBRequestData& requestData) 355 355 { 356 StorageProcess::singleton().idbServer(m_sessionID).openDBRequestCancelled(requestData);356 NetworkProcess::singleton().idbServer(m_sessionID).openDBRequestCancelled(requestData); 357 357 } 358 358 359 359 void WebIDBConnectionToClient::confirmDidCloseFromServer(uint64_t databaseConnectionIdentifier) 360 360 { 361 StorageProcess::singleton().idbServer(m_sessionID).confirmDidCloseFromServer(databaseConnectionIdentifier);361 NetworkProcess::singleton().idbServer(m_sessionID).confirmDidCloseFromServer(databaseConnectionIdentifier); 362 362 } 363 363 364 364 void WebIDBConnectionToClient::getAllDatabaseNames(uint64_t serverConnectionIdentifier, const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID) 365 365 { 366 StorageProcess::singleton().idbServer(m_sessionID).getAllDatabaseNames(serverConnectionIdentifier, topOrigin, openingOrigin, callbackID);366 NetworkProcess::singleton().idbServer(m_sessionID).getAllDatabaseNames(serverConnectionIdentifier, topOrigin, openingOrigin, callbackID); 367 367 } 368 368 -
trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h
r235953 r235954 29 29 30 30 #include "MessageSender.h" 31 #include " StorageToWebProcessConnection.h"31 #include "NetworkConnectionToWebProcess.h" 32 32 #include <WebCore/IDBConnectionToClient.h> 33 33 #include <pal/SessionID.h> … … 53 53 class WebIDBConnectionToClient final : public WebCore::IDBServer::IDBConnectionToClientDelegate, public IPC::MessageSender, public RefCounted<WebIDBConnectionToClient> { 54 54 public: 55 static Ref<WebIDBConnectionToClient> create( StorageToWebProcessConnection&, uint64_t serverConnectionIdentifier, PAL::SessionID);55 static Ref<WebIDBConnectionToClient> create(NetworkConnectionToWebProcess&, uint64_t serverConnectionIdentifier, PAL::SessionID); 56 56 57 57 virtual ~WebIDBConnectionToClient(); … … 127 127 128 128 private: 129 WebIDBConnectionToClient( StorageToWebProcessConnection&, uint64_t serverConnectionIdentifier, PAL::SessionID);129 WebIDBConnectionToClient(NetworkConnectionToWebProcess&, uint64_t serverConnectionIdentifier, PAL::SessionID); 130 130 131 131 IPC::Connection* messageSenderConnection() final; … … 133 133 template<class MessageType> void handleGetResult(const WebCore::IDBResultData&); 134 134 135 Ref< StorageToWebProcessConnection> m_connection;135 Ref<NetworkConnectionToWebProcess> m_connection; 136 136 137 137 uint64_t m_identifier; -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r235101 r235954 50 50 #include "WebCoreArgumentCoders.h" 51 51 #include "WebErrors.h" 52 #include "WebIDBConnectionToClient.h" 53 #include "WebIDBConnectionToClientMessages.h" 52 54 #include "WebsiteDataStore.h" 53 55 #include "WebsiteDataStoreParameters.h" … … 57 59 #include <WebCore/SameSiteInfo.h> 58 60 #include <WebCore/SecurityPolicy.h> 59 #include <pal/SessionID.h>60 61 61 62 namespace WebKit { … … 147 148 } 148 149 150 #if ENABLE(INDEXED_DATABASE) 151 if (decoder.messageReceiverName() == Messages::WebIDBConnectionToClient::messageReceiverName()) { 152 auto iterator = m_webIDBConnections.find(decoder.destinationID()); 153 if (iterator != m_webIDBConnections.end()) 154 iterator->value->didReceiveMessage(connection, decoder); 155 return; 156 } 157 #endif 158 149 159 ASSERT_NOT_REACHED(); 150 160 } … … 197 207 } 198 208 #endif 209 210 #if ENABLE(INDEXED_DATABASE) 211 auto idbConnections = m_webIDBConnections; 212 for (auto& connection : idbConnections.values()) 213 connection->disconnectedFromWebProcess(); 214 215 m_webIDBConnections.clear(); 216 #endif 217 199 218 } 200 219 … … 484 503 file->revokeFileAccess(); 485 504 486 NetworkProcess::singleton().grantSandboxExtensionsToStorageProcessForBlobs(fileNames, [this, protectedThis = WTFMove(protectedThis), requestIdentifier, fileNames]() { 487 if (!m_connection->isValid()) 488 return; 489 490 m_connection->send(Messages::NetworkProcessConnection::DidWriteBlobsToTemporaryFiles(requestIdentifier, fileNames), 0); 505 #if ENABLE(SANDBOX_EXTENSIONS) 506 NetworkProcess::singleton().getSandboxExtensionsForBlobFiles(fileNames, [protectedThis = WTFMove(protectedThis), fileNames](SandboxExtension::HandleArray&& handles) { 507 ASSERT(fileNames.size() == handles.size()); 508 NetworkProcess::singleton().updateTemporaryFileSandboxExtensions(fileNames, handles); 491 509 }); 510 #endif 511 512 if (!m_connection->isValid()) 513 return; 514 m_connection->send(Messages::NetworkProcessConnection::DidWriteBlobsToTemporaryFiles(requestIdentifier, fileNames), 0); 492 515 }); 493 516 } … … 644 667 } 645 668 669 #if ENABLE(INDEXED_DATABASE) 670 static uint64_t generateIDBConnectionToServerIdentifier() 671 { 672 ASSERT(RunLoop::isMain()); 673 static uint64_t identifier = 0; 674 return ++identifier; 675 } 676 677 void NetworkConnectionToWebProcess::establishIDBConnectionToServer(PAL::SessionID sessionID, uint64_t& serverConnectionIdentifier) 678 { 679 serverConnectionIdentifier = generateIDBConnectionToServerIdentifier(); 680 LOG(IndexedDB, "StorageToWebProcessConnection::establishIDBConnectionToServer - %" PRIu64, serverConnectionIdentifier); 681 ASSERT(!m_webIDBConnections.contains(serverConnectionIdentifier)); 682 683 m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(*this, serverConnectionIdentifier, sessionID)); 684 } 685 686 void NetworkConnectionToWebProcess::removeIDBConnectionToServer(uint64_t serverConnectionIdentifier) 687 { 688 ASSERT(m_webIDBConnections.contains(serverConnectionIdentifier)); 689 690 auto connection = m_webIDBConnections.take(serverConnectionIdentifier); 691 connection->disconnectedFromWebProcess(); 692 } 693 #endif 694 646 695 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r233801 r235954 36 36 #include <WebCore/NetworkLoadInformation.h> 37 37 #include <WebCore/ResourceLoadPriority.h> 38 #include <pal/SessionID.h> 38 39 #include <wtf/RefCounted.h> 39 40 … … 55 56 class NetworkSocketStream; 56 57 class SyncNetworkResourceLoader; 58 class WebIDBConnectionToClient; 57 59 typedef uint64_t ResourceLoadIdentifier; 58 60 … … 239 241 240 242 RefPtr<CacheStorageEngineConnection> m_cacheStorageConnection; 243 244 #if ENABLE(INDEXED_DATABASE) 245 // Messages handlers (Modern IDB) 246 void establishIDBConnectionToServer(PAL::SessionID, uint64_t& serverConnectionIdentifier); 247 void removeIDBConnectionToServer(uint64_t serverConnectionIdentifier); 248 249 HashMap<uint64_t, RefPtr<WebIDBConnectionToClient>> m_webIDBConnections; 250 #endif 251 241 252 }; 242 253 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r235951 r235954 71 71 GetNetworkLoadIntermediateInformation(uint64_t resourceLoadIdentifier) -> (Vector<WebCore::NetworkTransactionInformation> transactions); 72 72 TakeNetworkLoadInformationMetrics(uint64_t resourceLoadIdentifier) -> (WebCore::NetworkLoadMetrics networkMetrics); 73 74 #if ENABLE(INDEXED_DATABASE) 75 EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier) 76 RemoveIDBConnectionToServer(uint64_t serverConnectionIdentifier) 77 #endif 78 73 79 } -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r235179 r235954 115 115 , m_clearCacheDispatchGroup(0) 116 116 #endif 117 , m_storageTaskQueue(WorkQueue::create("com.apple.WebKit.StorageTask")) 117 118 { 118 119 NetworkProcessPlatformStrategies::initialize(); … … 289 290 290 291 SessionTracker::setSession(PAL::SessionID::defaultSessionID(), NetworkSession::create(NetworkSessionCreationParameters())); 292 293 #if ENABLE(INDEXED_DATABASE) 294 addIndexedDatabaseSession(PAL::SessionID::defaultSessionID(), parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle); 295 #endif 291 296 292 297 auto* defaultSession = SessionTracker::networkSession(PAL::SessionID::defaultSessionID()); … … 389 394 void NetworkProcess::addWebsiteDataStore(WebsiteDataStoreParameters&& parameters) 390 395 { 396 #if ENABLE(INDEXED_DATABASE) 397 addIndexedDatabaseSession(parameters.networkSessionParameters.sessionID, parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle); 398 #endif 399 391 400 RemoteNetworkingContext::ensureWebsiteDataStoreSession(WTFMove(parameters)); 392 401 } … … 397 406 m_sessionsControlledByAutomation.remove(sessionID); 398 407 CacheStorage::Engine::destroyEngine(sessionID); 399 }400 401 void NetworkProcess::grantSandboxExtensionsToStorageProcessForBlobs(const Vector<String>& filenames, Function<void ()>&& completionHandler)402 {403 static uint64_t lastRequestID;404 405 uint64_t requestID = ++lastRequestID;406 m_sandboxExtensionForBlobsCompletionHandlers.set(requestID, WTFMove(completionHandler));407 parentProcessConnection()->send(Messages::NetworkProcessProxy::GrantSandboxExtensionsToStorageProcessForBlobs(requestID, filenames), 0);408 }409 410 void NetworkProcess::didGrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID)411 {412 if (auto handler = m_sandboxExtensionForBlobsCompletionHandlers.take(requestID))413 handler();414 408 } 415 409 … … 576 570 #endif 577 571 572 #if ENABLE(INDEXED_DATABASE) 573 auto path = m_idbDatabasePaths.get(sessionID); 574 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) { 575 // FIXME: Pick the right database store based on the session ID. 576 postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path)]() mutable { 577 RunLoop::main().dispatch([callbackAggregator = WTFMove(callbackAggregator), securityOrigins = indexedDatabaseOrigins(path)] { 578 for (const auto& securityOrigin : securityOrigins) 579 callbackAggregator->m_websiteData.entries.append({ securityOrigin, WebsiteDataType::IndexedDBDatabases, 0 }); 580 }); 581 })); 582 } 583 #endif 584 578 585 if (websiteDataTypes.contains(WebsiteDataType::DiskCache)) { 579 586 fetchDiskCacheEntries(sessionID, fetchOptions, [callbackAggregator = WTFMove(callbackAggregator)](auto entries) mutable { … … 608 615 if (websiteDataTypes.contains(WebsiteDataType::DOMCache)) 609 616 CacheStorage::Engine::clearAllCaches(sessionID, [clearTasksHandler = clearTasksHandler.copyRef()] { }); 617 618 #if ENABLE(INDEXED_DATABASE) 619 if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) 620 idbServer(sessionID).closeAndDeleteDatabasesModifiedSince(modifiedSince, [clearTasksHandler = clearTasksHandler.copyRef()] { }); 621 #endif 610 622 611 623 if (websiteDataTypes.contains(WebsiteDataType::DiskCache) && !sessionID.isEphemeral()) … … 660 672 CacheStorage::Engine::clearCachesForOrigin(sessionID, SecurityOriginData { originData }, [clearTasksHandler = clearTasksHandler.copyRef()] { }); 661 673 } 674 675 #if ENABLE(INDEXED_DATABASE) 676 if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) 677 idbServer(sessionID).closeAndDeleteDatabasesForOrigins(originDatas, [clearTasksHandler = clearTasksHandler.copyRef()] { }); 678 #endif 662 679 663 680 if (websiteDataTypes.contains(WebsiteDataType::DiskCache) && !sessionID.isEphemeral()) … … 949 966 } 950 967 968 #if ENABLE(INDEXED_DATABASE) 969 IDBServer::IDBServer& NetworkProcess::idbServer(PAL::SessionID sessionID) 970 { 971 auto addResult = m_idbServers.add(sessionID, nullptr); 972 if (!addResult.isNewEntry) { 973 ASSERT(addResult.iterator->value); 974 return *addResult.iterator->value; 975 } 976 977 auto path = m_idbDatabasePaths.get(sessionID); 978 // There should already be a registered path for this PAL::SessionID. 979 // If there's not, then where did this PAL::SessionID come from? 980 ASSERT(!path.isEmpty()); 981 982 addResult.iterator->value = IDBServer::IDBServer::create(path, NetworkProcess::singleton()); 983 return *addResult.iterator->value; 984 } 985 986 void NetworkProcess::ensurePathExists(const String& path) 987 { 988 ASSERT(!RunLoop::isMain()); 989 990 if (!FileSystem::makeAllDirectories(path)) 991 LOG_ERROR("Failed to make all directories for path '%s'", path.utf8().data()); 992 } 993 994 void NetworkProcess::postStorageTask(CrossThreadTask&& task) 995 { 996 ASSERT(RunLoop::isMain()); 997 998 LockHolder locker(m_storageTaskMutex); 999 1000 m_storageTasks.append(WTFMove(task)); 1001 1002 m_storageTaskQueue->dispatch([this] { 1003 performNextStorageTask(); 1004 }); 1005 } 1006 1007 void NetworkProcess::performNextStorageTask() 1008 { 1009 ASSERT(!RunLoop::isMain()); 1010 1011 CrossThreadTask task; 1012 { 1013 LockHolder locker(m_storageTaskMutex); 1014 ASSERT(!m_storageTasks.isEmpty()); 1015 task = m_storageTasks.takeFirst(); 1016 } 1017 1018 task.performTask(); 1019 } 1020 1021 void NetworkProcess::prepareForAccessToTemporaryFile(const String& path) 1022 { 1023 if (auto extension = m_blobTemporaryFileSandboxExtensions.get(path)) 1024 extension->consume(); 1025 } 1026 1027 void NetworkProcess::accessToTemporaryFileComplete(const String& path) 1028 { 1029 // We've either hard linked the temporary blob file to the database directory, copied it there, 1030 // or the transaction is being aborted. 1031 // In any of those cases, we can delete the temporary blob file now. 1032 FileSystem::deleteFile(path); 1033 1034 if (auto extension = m_blobTemporaryFileSandboxExtensions.take(path)) 1035 extension->revoke(); 1036 } 1037 1038 HashSet<WebCore::SecurityOriginData> NetworkProcess::indexedDatabaseOrigins(const String& path) 1039 { 1040 if (path.isEmpty()) 1041 return { }; 1042 1043 HashSet<WebCore::SecurityOriginData> securityOrigins; 1044 for (auto& topOriginPath : FileSystem::listDirectory(path, "*")) { 1045 auto databaseIdentifier = FileSystem::pathGetFileName(topOriginPath); 1046 if (auto securityOrigin = SecurityOriginData::fromDatabaseIdentifier(databaseIdentifier)) 1047 securityOrigins.add(WTFMove(*securityOrigin)); 1048 1049 for (auto& originPath : FileSystem::listDirectory(topOriginPath, "*")) { 1050 databaseIdentifier = FileSystem::pathGetFileName(originPath); 1051 if (auto securityOrigin = SecurityOriginData::fromDatabaseIdentifier(databaseIdentifier)) 1052 securityOrigins.add(WTFMove(*securityOrigin)); 1053 } 1054 } 1055 1056 return securityOrigins; 1057 } 1058 1059 void NetworkProcess::addIndexedDatabaseSession(PAL::SessionID sessionID, String& indexedDatabaseDirectory, SandboxExtension::Handle& handle) 1060 { 1061 // ********* 1062 // IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>) 1063 // ********* 1064 auto addResult = m_idbDatabasePaths.ensure(sessionID, [path = indexedDatabaseDirectory] { 1065 return path; 1066 }); 1067 if (addResult.isNewEntry) { 1068 SandboxExtension::consumePermanently(handle); 1069 if (!indexedDatabaseDirectory.isEmpty()) 1070 postStorageTask(createCrossThreadTask(*this, &NetworkProcess::ensurePathExists, indexedDatabaseDirectory)); 1071 } 1072 } 1073 1074 #endif // ENABLE(INDEXED_DATABASE) 1075 1076 #if ENABLE(SANDBOX_EXTENSIONS) 1077 void NetworkProcess::getSandboxExtensionsForBlobFiles(const Vector<String>& filenames, WTF::Function<void(SandboxExtension::HandleArray&&)>&& completionHandler) 1078 { 1079 1080 static uint64_t lastRequestID; 1081 1082 uint64_t requestID = ++lastRequestID; 1083 m_sandboxExtensionForBlobsCompletionHandlersStorageForNetworkProcess.set(requestID, WTFMove(completionHandler)); 1084 parentProcessConnection()->send(Messages::NetworkProcessProxy::GetSandboxExtensionsForBlobFiles(requestID, filenames), 0); 1085 } 1086 1087 void NetworkProcess::didGetSandboxExtensionsForBlobFiles(uint64_t requestID, SandboxExtension::HandleArray&& handles) 1088 { 1089 if (auto handler = m_sandboxExtensionForBlobsCompletionHandlersStorageForNetworkProcess.take(requestID)) 1090 handler(WTFMove(handles)); 1091 } 1092 1093 void NetworkProcess::updateTemporaryFileSandboxExtensions(const Vector<String>& paths, SandboxExtension::HandleArray& handles) 1094 { 1095 for (size_t i = 0; i < handles.size(); ++i) { 1096 auto result = m_blobTemporaryFileSandboxExtensions.add(paths[i], SandboxExtension::create(WTFMove(handles[i]))); 1097 ASSERT_UNUSED(result, result.isNewEntry); 1098 } 1099 } 1100 #endif // ENABLE(SANDBOX_EXTENSIONS) 1101 951 1102 #if !PLATFORM(COCOA) 952 1103 void NetworkProcess::initializeProcess(const ChildProcessInitializationParameters&) -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r234968 r235954 31 31 #include "MessageReceiverMap.h" 32 32 #include "NetworkContentRuleListManager.h" 33 #include "SandboxExtension.h" 33 34 #include <WebCore/DiagnosticLoggingClient.h> 35 #include <WebCore/IDBBackingStore.h> 36 #include <WebCore/IDBKeyData.h> 37 #include <WebCore/IDBServer.h> 38 #include <WebCore/UniqueIDBDatabase.h> 34 39 #include <memory> 35 40 #include <pal/SessionID.h> 36 #include <wtf/ Forward.h>41 #include <wtf/CrossThreadTask.h> 37 42 #include <wtf/Function.h> 38 43 #include <wtf/HashSet.h> … … 75 80 } 76 81 77 class NetworkProcess : public ChildProcess, private DownloadManager::Client { 82 class NetworkProcess : public ChildProcess, private DownloadManager::Client 83 #if ENABLE(INDEXED_DATABASE) 84 , public WebCore::IDBServer::IDBBackingStoreTemporaryFileHandler 85 #endif 86 { 78 87 WTF_MAKE_NONCOPYABLE(NetworkProcess); 79 88 friend NeverDestroyed<NetworkProcess>; … … 130 139 131 140 void addWebsiteDataStore(WebsiteDataStoreParameters&&); 132 133 void grantSandboxExtensionsToStorageProcessForBlobs(const Vector<String>& filenames, Function<void ()>&& completionHandler);134 141 135 142 #if HAVE(CFNETWORK_STORAGE_PARTITIONING) … … 160 167 #endif 161 168 169 WorkQueue& queue() { return m_storageTaskQueue.get(); } 170 void postStorageTask(CrossThreadTask&&); 171 #if ENABLE(INDEXED_DATABASE) 172 173 WebCore::IDBServer::IDBServer& idbServer(PAL::SessionID); 174 175 // WebCore::IDBServer::IDBBackingStoreFileHandler 176 void prepareForAccessToTemporaryFile(const String& path) final; 177 void accessToTemporaryFileComplete(const String& path) final; 178 #endif 179 180 #if ENABLE(SANDBOX_EXTENSIONS) 181 void getSandboxExtensionsForBlobFiles(const Vector<String>& filenames, WTF::Function<void(SandboxExtension::HandleArray&&)>&& completionHandler); 182 void updateTemporaryFileSandboxExtensions(const Vector<String>& paths, SandboxExtension::HandleArray&); 183 #endif 184 162 185 private: 163 186 NetworkProcess(); … … 211 234 void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, WallTime modifiedSince, uint64_t callbackID); 212 235 void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, const Vector<String>& HSTSCacheHostnames, uint64_t callbackID); 236 237 #if ENABLE(SANDBOX_EXTENSIONS) 238 void didGetSandboxExtensionsForBlobFiles(uint64_t requestID, SandboxExtension::HandleArray&&); 239 #endif 213 240 214 241 void clearCachedCredentials(); … … 235 262 void didSyncAllCookies(); 236 263 237 void didGrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID);238 239 264 void writeBlobToFilePath(const WebCore::URL&, const String& path, SandboxExtension::Handle&&, uint64_t requestID); 240 265 … … 258 283 void registerURLSchemeAsCORSEnabled(const String&) const; 259 284 void registerURLSchemeAsCanDisplayOnlyIfCanRequest(const String&) const; 285 286 // For execution on work queue thread only 287 void performNextStorageTask(); 288 void ensurePathExists(const String& path); 289 290 #if ENABLE(INDEXED_DATABASE) 291 void addIndexedDatabaseSession(PAL::SessionID, String&, SandboxExtension::Handle&); 292 HashSet<WebCore::SecurityOriginData> indexedDatabaseOrigins(const String& path); 293 #endif 260 294 261 295 // Connections to WebProcesses. … … 279 313 NetworkProcessSupplementMap m_supplements; 280 314 281 HashMap<uint64_t, Function<void()>> m_sandboxExtensionForBlobsCompletionHandlers;282 315 HashSet<PAL::SessionID> m_sessionsControlledByAutomation; 283 316 … … 299 332 NetworkContentRuleListManager m_NetworkContentRuleListManager; 300 333 #endif 334 335 Ref<WorkQueue> m_storageTaskQueue; 336 337 #if ENABLE(INDEXED_DATABASE) 338 HashMap<PAL::SessionID, String> m_idbDatabasePaths; 339 HashMap<PAL::SessionID, RefPtr<WebCore::IDBServer::IDBServer>> m_idbServers; 340 #endif 341 342 HashMap<String, RefPtr<SandboxExtension>> m_blobTemporaryFileSandboxExtensions; 343 HashMap<uint64_t, WTF::Function<void(SandboxExtension::HandleArray&&)>> m_sandboxExtensionForBlobsCompletionHandlersStorageForNetworkProcess; 344 345 Deque<CrossThreadTask> m_storageTasks; 346 Lock m_storageTaskMutex; 347 301 348 }; 302 349 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
r234941 r235954 74 74 ProcessDidResume() 75 75 76 DidGrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID) 76 #if ENABLE(SANDBOX_EXTENSIONS) 77 DidGetSandboxExtensionsForBlobFiles(uint64_t requestID, WebKit::SandboxExtension::HandleArray extensions) 78 #endif 77 79 78 80 WriteBlobToFilePath(WebCore::URL blobURL, String path, WebKit::SandboxExtension::Handle handle, uint64_t callbackID) -
trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.cpp
r235179 r235954 109 109 encoder << wirelessContextIdentifier; 110 110 #endif 111 112 #if ENABLE(INDEXED_DATABASE) 113 encoder << indexedDatabaseDirectory << indexedDatabaseDirectoryExtensionHandle; 114 #endif 115 111 116 } 112 117 … … 247 252 #endif 248 253 254 #if ENABLE(INDEXED_DATABASE) 255 if (!decoder.decode(result.indexedDatabaseDirectory)) 256 return false; 257 258 std::optional<SandboxExtension::Handle> indexedDatabaseDirectoryExtensionHandle; 259 decoder >> indexedDatabaseDirectoryExtensionHandle; 260 if (!indexedDatabaseDirectoryExtensionHandle) 261 return false; 262 result.indexedDatabaseDirectoryExtensionHandle = WTFMove(*indexedDatabaseDirectoryExtensionHandle); 263 #endif 264 249 265 return true; 250 266 } -
trunk/Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h
r235179 r235954 125 125 unsigned wirelessContextIdentifier { 0 }; 126 126 #endif 127 128 #if ENABLE(INDEXED_DATABASE) 129 String indexedDatabaseDirectory; 130 SandboxExtension::Handle indexedDatabaseDirectoryExtensionHandle; 131 #endif 132 127 133 }; 128 134 -
trunk/Source/WebKit/Shared/Storage/StorageProcessCreationParameters.cpp
r229927 r235954 38 38 { 39 39 encoder << sessionID; 40 #if ENABLE(INDEXED_DATABASE)41 encoder << indexedDatabaseDirectory << indexedDatabaseDirectoryExtensionHandle;42 #endif43 40 #if ENABLE(SERVICE_WORKER) 44 41 encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle << urlSchemesServiceWorkersCanHandle << shouldDisableServiceWorkerProcessTerminationDelay; … … 50 47 if (!decoder.decode(result.sessionID)) 51 48 return false; 52 #if ENABLE(INDEXED_DATABASE)53 if (!decoder.decode(result.indexedDatabaseDirectory))54 return false;55 49 56 std::optional<SandboxExtension::Handle> indexedDatabaseDirectoryExtensionHandle;57 decoder >> indexedDatabaseDirectoryExtensionHandle;58 if (!indexedDatabaseDirectoryExtensionHandle)59 return false;60 result.indexedDatabaseDirectoryExtensionHandle = WTFMove(*indexedDatabaseDirectoryExtensionHandle);61 #endif62 50 #if ENABLE(SERVICE_WORKER) 63 51 if (!decoder.decode(result.serviceWorkerRegistrationDirectory)) -
trunk/Source/WebKit/Shared/Storage/StorageProcessCreationParameters.h
r229927 r235954 45 45 46 46 PAL::SessionID sessionID; 47 48 #if ENABLE(INDEXED_DATABASE)49 String indexedDatabaseDirectory;50 SandboxExtension::Handle indexedDatabaseDirectoryExtensionHandle;51 #endif52 47 53 48 #if ENABLE(SERVICE_WORKER) -
trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp
r235127 r235954 42 42 encoder << cookieStoragePathExtensionHandle; 43 43 encoder << pendingCookies; 44 45 #if ENABLE(INDEXED_DATABASE) 46 encoder << indexedDatabaseDirectory << indexedDatabaseDirectoryExtensionHandle; 47 #endif 44 48 } 45 49 46 50 std::optional<WebsiteDataStoreParameters> WebsiteDataStoreParameters::decode(IPC::Decoder& decoder) 47 51 { 52 WebsiteDataStoreParameters parameters; 53 48 54 std::optional<NetworkSessionCreationParameters> networkSessionParameters; 49 55 decoder >> networkSessionParameters; 50 56 if (!networkSessionParameters) 51 57 return std::nullopt; 58 parameters.networkSessionParameters = WTFMove(*networkSessionParameters); 52 59 53 60 std::optional<Vector<uint8_t>> uiProcessCookieStorageIdentifier; … … 55 62 if (!uiProcessCookieStorageIdentifier) 56 63 return std::nullopt; 64 parameters.uiProcessCookieStorageIdentifier = WTFMove(*uiProcessCookieStorageIdentifier); 57 65 58 66 std::optional<SandboxExtension::Handle> cookieStoragePathExtensionHandle; … … 60 68 if (!cookieStoragePathExtensionHandle) 61 69 return std::nullopt; 70 parameters.cookieStoragePathExtensionHandle = WTFMove(*cookieStoragePathExtensionHandle); 62 71 63 72 std::optional<Vector<WebCore::Cookie>> pendingCookies; … … 65 74 if (!pendingCookies) 66 75 return std::nullopt; 67 return {{ WTFMove(*uiProcessCookieStorageIdentifier), WTFMove(*cookieStoragePathExtensionHandle), WTFMove(*pendingCookies), WTFMove(*networkSessionParameters)}}; 76 parameters.pendingCookies = WTFMove(*pendingCookies); 77 78 #if ENABLE(INDEXED_DATABASE) 79 std::optional<String> indexedDatabaseDirectory; 80 decoder >> indexedDatabaseDirectory; 81 if (!indexedDatabaseDirectory) 82 return std::nullopt; 83 parameters.indexedDatabaseDirectory = WTFMove(*indexedDatabaseDirectory); 84 85 std::optional<SandboxExtension::Handle> indexedDatabaseDirectoryExtensionHandle; 86 decoder >> indexedDatabaseDirectoryExtensionHandle; 87 if (!indexedDatabaseDirectoryExtensionHandle) 88 return std::nullopt; 89 parameters.indexedDatabaseDirectoryExtensionHandle = WTFMove(*indexedDatabaseDirectoryExtensionHandle); 90 #endif 91 92 return WTFMove(parameters); 68 93 } 69 94 … … 75 100 , nullptr , { } , { } 76 101 #endif 77 }}; 102 } 103 #if ENABLE(INDEXED_DATABASE) 104 , { }, { } 105 #endif 106 }; 78 107 } 79 108 -
trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h
r232863 r235954 56 56 Vector<WebCore::Cookie> pendingCookies; 57 57 NetworkSessionCreationParameters networkSessionParameters; 58 59 #if ENABLE(INDEXED_DATABASE) 60 String indexedDatabaseDirectory; 61 SandboxExtension::Handle indexedDatabaseDirectoryExtensionHandle; 62 #endif 58 63 }; 59 64 -
trunk/Source/WebKit/Sources.txt
r235921 r235954 47 47 48 48 NetworkProcess/FileAPI/NetworkBlobRegistry.cpp 49 50 NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp 49 51 50 52 NetworkProcess/cache/CacheStorageEngine.cpp … … 221 223 StorageProcess/StorageToWebProcessConnection.cpp @no-unify 222 224 223 StorageProcess/IndexedDB/WebIDBConnectionToClient.cpp @no-unify224 225 225 StorageProcess/ServiceWorker/WebSWOriginStore.cpp @no-unify 226 226 StorageProcess/ServiceWorker/WebSWServerConnection.cpp @no-unify -
trunk/Source/WebKit/StorageProcess/StorageProcess.cpp
r233853 r235954 39 39 #include "WebsiteData.h" 40 40 #include <WebCore/FileSystem.h> 41 #include <WebCore/IDBKeyData.h>42 41 #include <WebCore/NotImplemented.h> 43 42 #include <WebCore/SWServerWorker.h> … … 153 152 } 154 153 155 #if ENABLE(INDEXED_DATABASE)156 IDBServer::IDBServer& StorageProcess::idbServer(PAL::SessionID sessionID)157 {158 auto addResult = m_idbServers.add(sessionID, nullptr);159 if (!addResult.isNewEntry) {160 ASSERT(addResult.iterator->value);161 return *addResult.iterator->value;162 }163 164 auto path = m_idbDatabasePaths.get(sessionID);165 // There should already be a registered path for this PAL::SessionID.166 // If there's not, then where did this PAL::SessionID come from?167 ASSERT(!path.isEmpty());168 169 addResult.iterator->value = IDBServer::IDBServer::create(path, StorageProcess::singleton());170 return *addResult.iterator->value;171 }172 #endif173 174 154 void StorageProcess::initializeWebsiteDataStore(const StorageProcessCreationParameters& parameters) 175 155 { 176 #if ENABLE(INDEXED_DATABASE)177 // *********178 // IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>)179 // *********180 181 auto addResult = m_idbDatabasePaths.ensure(parameters.sessionID, [path = parameters.indexedDatabaseDirectory] {182 return path;183 });184 if (addResult.isNewEntry) {185 SandboxExtension::consumePermanently(parameters.indexedDatabaseDirectoryExtensionHandle);186 if (!parameters.indexedDatabaseDirectory.isEmpty())187 postStorageTask(createCrossThreadTask(*this, &StorageProcess::ensurePathExists, parameters.indexedDatabaseDirectory));188 }189 #endif190 156 #if ENABLE(SERVICE_WORKER) 191 157 if (!parentProcessHasServiceWorkerEntitlement()) 192 158 return; 193 159 194 a ddResult = m_swDatabasePaths.ensure(parameters.sessionID, [path = parameters.serviceWorkerRegistrationDirectory] {160 auto addResult = m_swDatabasePaths.ensure(parameters.sessionID, [path = parameters.serviceWorkerRegistrationDirectory] { 195 161 return path; 196 162 }); … … 325 291 } 326 292 #endif 327 328 #if ENABLE(INDEXED_DATABASE)329 path = m_idbDatabasePaths.get(sessionID);330 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {331 // FIXME: Pick the right database store based on the session ID.332 postStorageTask(CrossThreadTask([this, callbackAggregator = callbackAggregator.copyRef(), path = WTFMove(path), rawWebsiteData]() mutable {333 RunLoop::main().dispatch([callbackAggregator = WTFMove(callbackAggregator), rawWebsiteData, securityOrigins = indexedDatabaseOrigins(path)] {334 for (const auto& securityOrigin : securityOrigins)335 rawWebsiteData->entries.append({ securityOrigin, WebsiteDataType::IndexedDBDatabases, 0 });336 });337 }));338 }339 #endif340 293 } 341 294 … … 349 302 if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) 350 303 swServerForSession(sessionID).clearAll([callbackAggregator = callbackAggregator.copyRef()] { }); 351 #endif352 353 #if ENABLE(INDEXED_DATABASE)354 if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases))355 idbServer(sessionID).closeAndDeleteDatabasesModifiedSince(modifiedSince, [callbackAggregator = WTFMove(callbackAggregator)] { });356 304 #endif 357 305 } … … 370 318 } 371 319 #endif 372 373 #if ENABLE(INDEXED_DATABASE) 374 if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) 375 idbServer(sessionID).closeAndDeleteDatabasesForOrigins(securityOrigins, [callbackAggregator = WTFMove(callbackAggregator)] { }); 376 #endif 377 } 378 379 #if ENABLE(SANDBOX_EXTENSIONS) 380 void StorageProcess::grantSandboxExtensionsForBlobs(const Vector<String>& paths, SandboxExtension::HandleArray&& handles) 381 { 382 ASSERT(paths.size() == handles.size()); 383 384 for (size_t i = 0; i < paths.size(); ++i) { 385 auto result = m_blobTemporaryFileSandboxExtensions.add(paths[i], SandboxExtension::create(WTFMove(handles[i]))); 386 ASSERT_UNUSED(result, result.isNewEntry); 387 } 388 } 389 #endif 390 391 #if ENABLE(INDEXED_DATABASE) 392 void StorageProcess::prepareForAccessToTemporaryFile(const String& path) 393 { 394 if (auto extension = m_blobTemporaryFileSandboxExtensions.get(path)) 395 extension->consume(); 396 } 397 398 void StorageProcess::accessToTemporaryFileComplete(const String& path) 399 { 400 // We've either hard linked the temporary blob file to the database directory, copied it there, 401 // or the transaction is being aborted. 402 // In any of those cases, we can delete the temporary blob file now. 403 FileSystem::deleteFile(path); 404 405 if (auto extension = m_blobTemporaryFileSandboxExtensions.take(path)) 406 extension->revoke(); 407 } 408 409 HashSet<WebCore::SecurityOriginData> StorageProcess::indexedDatabaseOrigins(const String& path) 410 { 411 if (path.isEmpty()) 412 return { }; 413 414 HashSet<WebCore::SecurityOriginData> securityOrigins; 415 for (auto& topOriginPath : FileSystem::listDirectory(path, "*")) { 416 auto databaseIdentifier = FileSystem::pathGetFileName(topOriginPath); 417 if (auto securityOrigin = SecurityOriginData::fromDatabaseIdentifier(databaseIdentifier)) 418 securityOrigins.add(WTFMove(*securityOrigin)); 419 420 for (auto& originPath : FileSystem::listDirectory(topOriginPath, "*")) { 421 databaseIdentifier = FileSystem::pathGetFileName(originPath); 422 if (auto securityOrigin = SecurityOriginData::fromDatabaseIdentifier(databaseIdentifier)) 423 securityOrigins.add(WTFMove(*securityOrigin)); 424 } 425 } 426 427 return securityOrigins; 428 } 429 430 #endif 431 432 #if ENABLE(SANDBOX_EXTENSIONS) 433 void StorageProcess::getSandboxExtensionsForBlobFiles(const Vector<String>& filenames, WTF::Function<void (SandboxExtension::HandleArray&&)>&& completionHandler) 434 { 435 static uint64_t lastRequestID; 436 437 uint64_t requestID = ++lastRequestID; 438 m_sandboxExtensionForBlobsCompletionHandlers.set(requestID, WTFMove(completionHandler)); 439 parentProcessConnection()->send(Messages::StorageProcessProxy::GetSandboxExtensionsForBlobFiles(requestID, filenames), 0); 440 } 441 442 void StorageProcess::didGetSandboxExtensionsForBlobFiles(uint64_t requestID, SandboxExtension::HandleArray&& handles) 443 { 444 if (auto handler = m_sandboxExtensionForBlobsCompletionHandlers.take(requestID)) 445 handler(WTFMove(handles)); 446 } 447 #endif 320 } 448 321 449 322 #if ENABLE(SERVICE_WORKER) -
trunk/Source/WebKit/StorageProcess/StorageProcess.h
r234910 r235954 27 27 28 28 #include "ChildProcess.h" 29 #include "SandboxExtension.h"30 29 #include <WebCore/FetchIdentifier.h> 31 #include <WebCore/IDBBackingStore.h>32 #include <WebCore/IDBServer.h>33 30 #include <WebCore/SecurityOriginData.h> 34 31 #include <WebCore/ServiceWorkerIdentifier.h> 35 32 #include <WebCore/ServiceWorkerTypes.h> 36 #include <WebCore/UniqueIDBDatabase.h>37 33 #include <pal/SessionID.h> 38 34 #include <wtf/CrossThreadTask.h> … … 64 60 65 61 class StorageProcess : public ChildProcess 66 #if ENABLE(INDEXED_DATABASE)67 , public WebCore::IDBServer::IDBBackingStoreTemporaryFileHandler68 #endif69 62 { 70 63 WTF_MAKE_NONCOPYABLE(StorageProcess); … … 76 69 ~StorageProcess(); 77 70 78 WorkQueue& queue() { return m_queue.get(); }79 71 void postStorageTask(CrossThreadTask&&); 80 81 #if ENABLE(INDEXED_DATABASE)82 WebCore::IDBServer::IDBServer& idbServer(PAL::SessionID);83 84 // WebCore::IDBServer::IDBBackingStoreFileHandler85 void prepareForAccessToTemporaryFile(const String& path) final;86 void accessToTemporaryFileComplete(const String& path) final;87 #endif88 89 #if ENABLE(SANDBOX_EXTENSIONS)90 void getSandboxExtensionsForBlobFiles(const Vector<String>& filenames, WTF::Function<void (SandboxExtension::HandleArray&&)>&& completionHandler);91 #endif92 72 93 73 #if PLATFORM(IOS) … … 136 116 void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType> websiteDataTypes, WallTime modifiedSince, uint64_t callbackID); 137 117 void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebsiteDataType> websiteDataTypes, const Vector<WebCore::SecurityOriginData>& origins, uint64_t callbackID); 138 #if ENABLE(SANDBOX_EXTENSIONS) 139 void grantSandboxExtensionsForBlobs(const Vector<String>& paths, SandboxExtension::HandleArray&&); 140 void didGetSandboxExtensionsForBlobFiles(uint64_t requestID, SandboxExtension::HandleArray&&); 141 #endif 118 142 119 #if ENABLE(SERVICE_WORKER) 143 120 void didReceiveFetchResponse(WebCore::SWServerConnectionIdentifier, WebCore::FetchIdentifier, const WebCore::ResourceResponse&); … … 157 134 bool needsServerToContextConnectionForOrigin(const WebCore::SecurityOriginData&) const; 158 135 #endif 159 #if ENABLE(INDEXED_DATABASE)160 HashSet<WebCore::SecurityOriginData> indexedDatabaseOrigins(const String& path);161 #endif162 136 163 137 // For execution on work queue thread only … … 168 142 169 143 Ref<WorkQueue> m_queue; 170 171 #if ENABLE(INDEXED_DATABASE)172 HashMap<PAL::SessionID, String> m_idbDatabasePaths;173 HashMap<PAL::SessionID, RefPtr<WebCore::IDBServer::IDBServer>> m_idbServers;174 #endif175 HashMap<String, RefPtr<SandboxExtension>> m_blobTemporaryFileSandboxExtensions;176 HashMap<uint64_t, WTF::Function<void (SandboxExtension::HandleArray&&)>> m_sandboxExtensionForBlobsCompletionHandlers;177 144 178 145 Deque<CrossThreadTask> m_storageTasks; -
trunk/Source/WebKit/StorageProcess/StorageProcess.messages.in
r235951 r235954 31 31 DeleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, WallTime modifiedSince, uint64_t callbackID) 32 32 DeleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, Vector<WebCore::SecurityOriginData> origins, uint64_t callbackID) 33 #if ENABLE(SANDBOX_EXTENSIONS)34 GrantSandboxExtensionsForBlobs(Vector<String> paths, WebKit::SandboxExtension::HandleArray extensions)35 DidGetSandboxExtensionsForBlobFiles(uint64_t requestID, WebKit::SandboxExtension::HandleArray extensions)36 #endif37 33 38 34 DestroySession(PAL::SessionID sessionID) -
trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.cpp
r232824 r235954 31 31 #include "StorageProcessMessages.h" 32 32 #include "StorageToWebProcessConnectionMessages.h" 33 #include "WebIDBConnectionToClient.h"34 #include "WebIDBConnectionToClientMessages.h"35 33 #include "WebSWServerConnection.h" 36 34 #include "WebSWServerConnectionMessages.h" … … 70 68 void StorageToWebProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder) 71 69 { 72 if (decoder.messageReceiverName() == Messages::StorageToWebProcessConnection::messageReceiverName()) {73 didReceiveStorageToWebProcessConnectionMessage(connection, decoder);74 return;75 }76 77 70 if (decoder.messageReceiverName() == Messages::StorageProcess::messageReceiverName()) { 78 71 StorageProcess::singleton().didReceiveStorageProcessMessage(connection, decoder); 79 72 return; 80 73 } 81 82 #if ENABLE(INDEXED_DATABASE)83 if (decoder.messageReceiverName() == Messages::WebIDBConnectionToClient::messageReceiverName()) {84 auto iterator = m_webIDBConnections.find(decoder.destinationID());85 if (iterator != m_webIDBConnections.end())86 iterator->value->didReceiveMessage(connection, decoder);87 return;88 }89 #endif90 74 91 75 #if ENABLE(SERVICE_WORKER) … … 137 121 #endif 138 122 139 #if ENABLE(INDEXED_DATABASE)140 auto idbConnections = m_webIDBConnections;141 for (auto& connection : idbConnections.values())142 connection->disconnectedFromWebProcess();143 144 m_webIDBConnections.clear();145 #endif146 147 123 #if ENABLE(SERVICE_WORKER) 148 124 unregisterSWConnections(); … … 181 157 #endif 182 158 183 #if ENABLE(INDEXED_DATABASE)184 static uint64_t generateIDBConnectionToServerIdentifier()185 {186 ASSERT(RunLoop::isMain());187 static uint64_t identifier = 0;188 return ++identifier;189 }190 191 void StorageToWebProcessConnection::establishIDBConnectionToServer(SessionID sessionID, uint64_t& serverConnectionIdentifier)192 {193 serverConnectionIdentifier = generateIDBConnectionToServerIdentifier();194 LOG(IndexedDB, "StorageToWebProcessConnection::establishIDBConnectionToServer - %" PRIu64, serverConnectionIdentifier);195 ASSERT(!m_webIDBConnections.contains(serverConnectionIdentifier));196 197 m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(*this, serverConnectionIdentifier, sessionID));198 }199 200 void StorageToWebProcessConnection::removeIDBConnectionToServer(uint64_t serverConnectionIdentifier)201 {202 ASSERT(m_webIDBConnections.contains(serverConnectionIdentifier));203 204 auto connection = m_webIDBConnections.take(serverConnectionIdentifier);205 connection->disconnectedFromWebProcess();206 }207 #endif208 209 159 } // namespace WebKit -
trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.h
r232824 r235954 35 35 namespace WebKit { 36 36 37 class WebIDBConnectionToClient;38 37 class WebSWServerConnection; 39 38 class WebSWServerToContextConnection; … … 61 60 uint64_t messageSenderDestinationID() override { return 0; } 62 61 63 #if ENABLE(INDEXED_DATABASE)64 // Messages handlers (Modern IDB)65 void establishIDBConnectionToServer(PAL::SessionID, uint64_t& serverConnectionIdentifier);66 void removeIDBConnectionToServer(uint64_t serverConnectionIdentifier);67 68 HashMap<uint64_t, RefPtr<WebIDBConnectionToClient>> m_webIDBConnections;69 #endif // ENABLE(INDEXED_DATABASE)70 71 62 #if ENABLE(SERVICE_WORKER) 72 63 void establishSWServerConnection(PAL::SessionID, WebCore::SWServerConnectionIdentifier&); -
trunk/Source/WebKit/StorageProcess/StorageToWebProcessConnection.messages.in
r227907 r235954 22 22 23 23 messages -> StorageToWebProcessConnection LegacyReceiver { 24 #if ENABLE(INDEXED_DATABASE)25 EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier)26 RemoveIDBConnectionToServer(uint64_t serverConnectionIdentifier)27 #endif28 24 #if ENABLE(SERVICE_WORKER) 29 25 EstablishSWServerConnection(PAL::SessionID sessionID) -> (WebCore::SWServerConnectionIdentifier serverConnectionIdentifier) -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r235265 r235954 326 326 } 327 327 328 void NetworkProcessProxy::grantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID, const Vector<String>& paths)329 {330 #if ENABLE(SANDBOX_EXTENSIONS)331 SandboxExtension::HandleArray extensions;332 extensions.allocate(paths.size());333 for (size_t i = 0; i < paths.size(); ++i) {334 // ReadWrite is required for creating hard links as well as deleting the temporary file, which the StorageProcess will do.335 SandboxExtension::createHandle(paths[i], SandboxExtension::Type::ReadWrite, extensions[i]);336 }337 338 m_processPool.sendToStorageProcessRelaunchingIfNecessary(Messages::StorageProcess::GrantSandboxExtensionsForBlobs(paths, extensions));339 #endif340 connection()->send(Messages::NetworkProcess::DidGrantSandboxExtensionsToStorageProcessForBlobs(requestID), 0);341 }342 343 328 void NetworkProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier) 344 329 { … … 646 631 } 647 632 633 #if ENABLE(SANDBOX_EXTENSIONS) 634 void NetworkProcessProxy::getSandboxExtensionsForBlobFiles(uint64_t requestID, const Vector<String>& paths) 635 { 636 SandboxExtension::HandleArray extensions; 637 extensions.allocate(paths.size()); 638 for (size_t i = 0; i < paths.size(); ++i) { 639 // ReadWrite is required for creating hard links, which is something that might be done with these extensions. 640 SandboxExtension::createHandle(paths[i], SandboxExtension::Type::ReadWrite, extensions[i]); 641 } 642 643 send(Messages::NetworkProcess::DidGetSandboxExtensionsForBlobFiles(requestID, extensions), 0); 644 } 645 #endif 646 648 647 } // namespace WebKit 649 648 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r234941 r235954 140 140 void didDeleteWebsiteDataForOrigins(uint64_t callbackID); 141 141 void didWriteBlobToFilePath(bool success, uint64_t callbackID); 142 void grantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID, const Vector<String>& paths);143 142 void logDiagnosticMessage(uint64_t pageID, const String& message, const String& description, WebCore::ShouldSample); 144 143 void logDiagnosticMessageWithResult(uint64_t pageID, const String& message, const String& description, uint32_t result, WebCore::ShouldSample); … … 154 153 #if ENABLE(CONTENT_EXTENSIONS) 155 154 void contentExtensionRules(UserContentControllerIdentifier); 155 #endif 156 157 #if ENABLE(SANDBOX_EXTENSIONS) 158 void getSandboxExtensionsForBlobFiles(uint64_t requestID, const Vector<String>& paths); 156 159 #endif 157 160 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in
r234941 r235954 34 34 DidWriteBlobToFilePath(bool success, uint64_t callbackID) 35 35 36 GrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID, Vector<String> paths)37 38 36 ProcessReadyToSuspend() 39 37 SetIsHoldingLockedFiles(bool isHoldingLockedFiles) … … 55 53 56 54 RetrieveCacheStorageParameters(PAL::SessionID sessionID) 55 56 #if ENABLE(SANDBOX_EXTENSIONS) 57 GetSandboxExtensionsForBlobFiles(uint64_t requestID, Vector<String> paths) 58 #endif 57 59 } -
trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.cpp
r235521 r235954 222 222 } 223 223 224 #if ENABLE(SANDBOX_EXTENSIONS)225 void StorageProcessProxy::getSandboxExtensionsForBlobFiles(uint64_t requestID, const Vector<String>& paths)226 {227 SandboxExtension::HandleArray extensions;228 extensions.allocate(paths.size());229 for (size_t i = 0; i < paths.size(); ++i) {230 // ReadWrite is required for creating hard links, which is something that might be done with these extensions.231 SandboxExtension::createHandle(paths[i], SandboxExtension::Type::ReadWrite, extensions[i]);232 }233 234 send(Messages::StorageProcess::DidGetSandboxExtensionsForBlobFiles(requestID, extensions), 0);235 }236 #endif237 238 224 void StorageProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier) 239 225 { -
trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.h
r234261 r235954 80 80 void didDeleteWebsiteData(uint64_t callbackID); 81 81 void didDeleteWebsiteDataForOrigins(uint64_t callbackID); 82 #if ENABLE(SANDBOX_EXTENSIONS)83 void getSandboxExtensionsForBlobFiles(uint64_t requestID, const Vector<String>& paths);84 #endif85 82 #if ENABLE(SERVICE_WORKER) 86 83 void establishWorkerContextConnectionToStorageProcess(WebCore::SecurityOriginData&&); -
trunk/Source/WebKit/UIProcess/Storage/StorageProcessProxy.messages.in
r229735 r235954 28 28 DidDeleteWebsiteDataForOrigins(uint64_t callbackID) 29 29 30 #if ENABLE(SANDBOX_EXTENSIONS)31 GetSandboxExtensionsForBlobFiles(uint64_t requestID, Vector<String> paths)32 #endif33 34 30 #if ENABLE(SERVICE_WORKER) 35 31 EstablishWorkerContextConnectionToStorageProcess(struct WebCore::SecurityOriginData origin) -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r235952 r235954 525 525 parameters.urlSchemesRegisteredAsCanDisplayOnlyIfCanRequest = copyToVector(m_schemesToRegisterAsCanDisplayOnlyIfCanRequest); 526 526 527 #if ENABLE(INDEXED_DATABASE) 528 // ********* 529 // IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>) 530 // ********* 531 parameters.indexedDatabaseDirectory = m_configuration->indexedDBDatabaseDirectory(); 532 if (parameters.indexedDatabaseDirectory.isEmpty()) 533 parameters.indexedDatabaseDirectory = API::WebsiteDataStore::defaultDataStore()->websiteDataStore().parameters().indexedDatabaseDirectory; 534 535 SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle); 536 #endif 537 527 538 // Add any platform specific parameters 528 539 platformInitializeNetworkProcess(parameters); … … 585 596 void WebProcessPool::ensureStorageProcessAndWebsiteDataStore(WebsiteDataStore* relevantDataStore) 586 597 { 587 // *********588 // IMPORTANT: Do not change the directory structure for indexed databases on disk without first consulting a reviewer from Apple (<rdar://problem/17454712>)589 // *********590 591 598 if (!m_storageProcess) { 592 599 auto parameters = m_websiteDataStore ? m_websiteDataStore->websiteDataStore().storageProcessParameters() : (relevantDataStore ? relevantDataStore->storageProcessParameters() : API::WebsiteDataStore::defaultDataStore()->websiteDataStore().storageProcessParameters()); … … 594 601 ASSERT(parameters.sessionID.isValid()); 595 602 596 #if ENABLE(INDEXED_DATABASE)597 if (parameters.indexedDatabaseDirectory.isEmpty()) {598 parameters.indexedDatabaseDirectory = m_configuration->indexedDBDatabaseDirectory();599 SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle);600 }601 #endif602 603 #if ENABLE(SERVICE_WORKER) 603 604 if (parameters.serviceWorkerRegistrationDirectory.isEmpty()) { … … 1212 1213 page.websiteDataStore().clearPendingCookies(); 1213 1214 1214 #if ENABLE(INDEXED_DATABASE) 1215 if (!page.websiteDataStore().resolvedIndexedDatabaseDirectory().isEmpty()) 1216 ensureStorageProcessAndWebsiteDataStore(&page.websiteDataStore()); 1215 #if ENABLE(SERVICE_WORKER) 1216 ensureStorageProcessAndWebsiteDataStore(&page.websiteDataStore()); 1217 1217 #endif 1218 1218 } -
trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
r235127 r235954 86 86 SandboxExtension::createHandleForReadWriteDirectory(WebCore::FileSystem::directoryName(cookieFile), parameters.cookieStoragePathExtensionHandle); 87 87 88 #if ENABLE(INDEXED_DATABASE) 89 parameters.indexedDatabaseDirectory = resolvedIndexedDatabaseDirectory(); 90 if (!parameters.indexedDatabaseDirectory.isEmpty()) 91 SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle); 92 #endif 93 88 94 return parameters; 89 95 } -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r234440 r235954 224 224 if (dataTypes.contains(WebsiteDataType::DOMCache)) 225 225 processAccessType = std::max(processAccessType, ProcessAccessType::Launch); 226 227 if (dataTypes.contains(WebsiteDataType::IndexedDBDatabases) && !isNonPersistentStore) 228 processAccessType = std::max(processAccessType, ProcessAccessType::Launch); 226 229 227 230 return processAccessType; … … 511 514 } 512 515 513 if ((dataTypes.contains(WebsiteDataType::IndexedDBDatabases)514 516 #if ENABLE(SERVICE_WORKER) 515 || dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) 516 #endif 517 ) && isPersistent()) { 517 if (dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && isPersistent()) { 518 518 for (auto& processPool : processPools()) { 519 519 processPool->ensureStorageProcessAndWebsiteDataStore(this); … … 525 525 } 526 526 } 527 #endif 527 528 528 529 if (dataTypes.contains(WebsiteDataType::MediaKeys) && isPersistent()) { … … 657 658 processAccessType = std::max(processAccessType, ProcessAccessType::Launch); 658 659 660 if (dataTypes.contains(WebsiteDataType::IndexedDBDatabases) && !isNonPersistentStore) 661 processAccessType = std::max(processAccessType, ProcessAccessType::Launch); 662 659 663 return processAccessType; 660 664 } … … 821 825 } 822 826 823 if ((dataTypes.contains(WebsiteDataType::IndexedDBDatabases)824 827 #if ENABLE(SERVICE_WORKER) 825 || dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) 826 #endif 827 ) && isPersistent()) { 828 if (dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && isPersistent()) { 828 829 for (auto& processPool : processPools()) { 829 830 processPool->ensureStorageProcessAndWebsiteDataStore(this); … … 835 836 } 836 837 } 838 #endif 837 839 838 840 if (dataTypes.contains(WebsiteDataType::MediaKeys) && isPersistent()) { … … 1122 1124 } 1123 1125 1124 if ((dataTypes.contains(WebsiteDataType::IndexedDBDatabases)1125 1126 #if ENABLE(SERVICE_WORKER) 1126 || dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) 1127 #endif 1128 ) && isPersistent()) { 1127 if (dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && isPersistent()) { 1129 1128 for (auto& processPool : processPools()) { 1130 1129 processPool->ensureStorageProcessAndWebsiteDataStore(this); … … 1136 1135 } 1137 1136 } 1137 #endif 1138 1138 1139 1139 if (dataTypes.contains(WebsiteDataType::MediaKeys) && isPersistent()) { … … 1597 1597 parameters.sessionID = m_sessionID; 1598 1598 1599 #if ENABLE(SERVICE_WORKER) 1600 parameters.serviceWorkerRegistrationDirectory = resolvedServiceWorkerRegistrationDirectory(); 1601 if (!parameters.serviceWorkerRegistrationDirectory.isEmpty()) 1602 SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle); 1603 #endif 1604 1605 return parameters; 1606 } 1607 1608 Vector<WebCore::Cookie> WebsiteDataStore::pendingCookies() const 1609 { 1610 return copyToVector(m_pendingCookies); 1611 } 1612 1613 void WebsiteDataStore::addPendingCookie(const WebCore::Cookie& cookie) 1614 { 1615 m_pendingCookies.add(cookie); 1616 } 1617 1618 void WebsiteDataStore::removePendingCookie(const WebCore::Cookie& cookie) 1619 { 1620 m_pendingCookies.remove(cookie); 1621 } 1622 1623 void WebsiteDataStore::clearPendingCookies() 1624 { 1625 m_pendingCookies.clear(); 1626 } 1627 1628 #if !PLATFORM(COCOA) 1629 WebsiteDataStoreParameters WebsiteDataStore::parameters() 1630 { 1631 // FIXME: Implement cookies. 1632 WebsiteDataStoreParameters parameters; 1633 parameters.networkSessionParameters.sessionID = m_sessionID; 1634 1635 resolveDirectoriesIfNecessary(); 1636 1599 1637 #if ENABLE(INDEXED_DATABASE) 1600 1638 parameters.indexedDatabaseDirectory = resolvedIndexedDatabaseDirectory(); … … 1602 1640 SandboxExtension::createHandleForReadWriteDirectory(parameters.indexedDatabaseDirectory, parameters.indexedDatabaseDirectoryExtensionHandle); 1603 1641 #endif 1604 #if ENABLE(SERVICE_WORKER) 1605 parameters.serviceWorkerRegistrationDirectory = resolvedServiceWorkerRegistrationDirectory(); 1606 if (!parameters.serviceWorkerRegistrationDirectory.isEmpty()) 1607 SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle); 1608 #endif 1609 1610 return parameters; 1611 } 1612 1613 Vector<WebCore::Cookie> WebsiteDataStore::pendingCookies() const 1614 { 1615 return copyToVector(m_pendingCookies); 1616 } 1617 1618 void WebsiteDataStore::addPendingCookie(const WebCore::Cookie& cookie) 1619 { 1620 m_pendingCookies.add(cookie); 1621 } 1622 1623 void WebsiteDataStore::removePendingCookie(const WebCore::Cookie& cookie) 1624 { 1625 m_pendingCookies.remove(cookie); 1626 } 1627 1628 void WebsiteDataStore::clearPendingCookies() 1629 { 1630 m_pendingCookies.clear(); 1631 } 1632 1633 #if !PLATFORM(COCOA) 1634 WebsiteDataStoreParameters WebsiteDataStore::parameters() 1635 { 1636 // FIXME: Implement cookies. 1637 WebsiteDataStoreParameters parameters; 1638 parameters.networkSessionParameters.sessionID = m_sessionID; 1642 1639 1643 return parameters; 1640 1644 } -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r235951 r235954 891 891 4A3CC18F19B07B8A00D14AEF /* WKUserMediaPermissionRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A410F3619AF7AC3002EBAB5 /* WKUserMediaPermissionRequest.h */; settings = {ATTRIBUTES = (Private, ); }; }; 892 892 4F601432155C5AA2001FBDE0 /* BlockingResponseMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F601430155C5A32001FBDE0 /* BlockingResponseMap.h */; }; 893 5105236F1C739D42007993CB /* WebIDBConnectionToClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5105236D1C7393E9007993CB /* WebIDBConnectionToClient.cpp */; };894 510523701C739D42007993CB /* WebIDBConnectionToClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 5105236E1C7393E9007993CB /* WebIDBConnectionToClient.h */; };895 893 510523741C73D38B007993CB /* WebIDBConnectionToServerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 510523731C73D37B007993CB /* WebIDBConnectionToServerMessages.h */; }; 896 894 510523751C73D38F007993CB /* WebIDBConnectionToServerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510523721C73D37B007993CB /* WebIDBConnectionToServerMessageReceiver.cpp */; }; … … 1203 1201 9321D58A1A38F196008052BE /* WKImmediateActionTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9321D5891A38F196008052BE /* WKImmediateActionTypes.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1204 1202 9323611E1B015DA800FA9232 /* _WKOverlayScrollbarStyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9323611D1B015DA800FA9232 /* _WKOverlayScrollbarStyle.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1203 93261161214054F4000806E7 /* WebIDBConnectionToClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 939288DD21404D6C00EBBA33 /* WebIDBConnectionToClient.h */; }; 1205 1204 933DF82E1B3BC09000AEA9E3 /* WKImagePreviewViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 933DF82D1B3BC09000AEA9E3 /* WKImagePreviewViewController.h */; }; 1206 1205 934B724419F5B9BE00AE96D6 /* WKActionMenuItemTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 934B724319F5B9BE00AE96D6 /* WKActionMenuItemTypes.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 3713 3712 9391F283121B38F500EBF7E8 /* WebFrameNetworkingContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebFrameNetworkingContext.h; sourceTree = "<group>"; }; 3714 3713 9391F284121B38F500EBF7E8 /* WebFrameNetworkingContext.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebFrameNetworkingContext.mm; sourceTree = "<group>"; }; 3714 939288DD21404D6C00EBBA33 /* WebIDBConnectionToClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebIDBConnectionToClient.h; sourceTree = "<group>"; }; 3715 939288E121404E1000EBBA33 /* WebIDBConnectionToClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebIDBConnectionToClient.cpp; sourceTree = "<group>"; }; 3716 939288E221404E1000EBBA33 /* WebIDBConnectionToClient.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebIDBConnectionToClient.messages.in; sourceTree = "<group>"; }; 3715 3717 9395E6891BF2C33200F49BCE /* WKPreviewElementInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPreviewElementInfo.h; sourceTree = "<group>"; }; 3716 3718 9395E68B1BF2C35200F49BCE /* WKPreviewElementInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKPreviewElementInfo.mm; sourceTree = "<group>"; }; … … 6341 6343 BC82837C16B45DA500A278FE /* EntryPoint */, 6342 6344 E1798C7616E6815500240139 /* FileAPI */, 6345 939288E021404DF000EBBA33 /* IndexedDB */, 6343 6346 2DA944BB188511DD00ED86DB /* ios */, 6344 6347 510CC7DC16138E2900D03ED3 /* mac */, … … 6908 6911 ); 6909 6912 path = cocoa; 6913 sourceTree = "<group>"; 6914 }; 6915 939288E021404DF000EBBA33 /* IndexedDB */ = { 6916 isa = PBXGroup; 6917 children = ( 6918 939288E121404E1000EBBA33 /* WebIDBConnectionToClient.cpp */, 6919 939288DD21404D6C00EBBA33 /* WebIDBConnectionToClient.h */, 6920 939288E221404E1000EBBA33 /* WebIDBConnectionToClient.messages.in */, 6921 ); 6922 path = IndexedDB; 6910 6923 sourceTree = "<group>"; 6911 6924 }; … … 9323 9336 93A88B331BC6E9CD00ABA5C2 /* WebHitTestResultData.h in Headers */, 9324 9337 F44DFEB21E9E752F0038D196 /* WebIconUtilities.h in Headers */, 9325 510523701C739D42007993CB/* WebIDBConnectionToClient.h in Headers */,9338 93261161214054F4000806E7 /* WebIDBConnectionToClient.h in Headers */, 9326 9339 5105237A1C73DA77007993CB /* WebIDBConnectionToClientMessages.h in Headers */, 9327 9340 514129941C6428BB0059E714 /* WebIDBConnectionToServer.h in Headers */, … … 10940 10953 BC0E606112D6BA910012A72A /* WebGeolocationManagerMessageReceiver.cpp in Sources */, 10941 10954 BC0E618212D6CB1D0012A72A /* WebGeolocationManagerProxyMessageReceiver.cpp in Sources */, 10942 5105236F1C739D42007993CB /* WebIDBConnectionToClient.cpp in Sources */,10943 10955 510523791C73DA77007993CB /* WebIDBConnectionToClientMessageReceiver.cpp in Sources */, 10944 10956 510523751C73D38F007993CB /* WebIDBConnectionToServerMessageReceiver.cpp in Sources */, -
trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp
r235205 r235954 32 32 #include "NetworkConnectionToWebProcessMessages.h" 33 33 #include "NetworkProcessConnection.h" 34 #include "StorageToWebProcessConnectionMessages.h"35 34 #include "WebCoreArgumentCoders.h" 36 35 #include "WebIDBConnectionToClientMessages.h" 37 36 #include "WebIDBResult.h" 38 37 #include "WebProcess.h" 39 #include "WebToStorageProcessConnection.h"40 38 #include <WebCore/IDBConnectionToServer.h> 41 39 #include <WebCore/IDBCursorInfo.h> … … 65 63 relaxAdoptionRequirement(); 66 64 67 m_isOpenInServer = sendSync(Messages:: StorageToWebProcessConnection::EstablishIDBConnectionToServer(sessionID), Messages::StorageToWebProcessConnection::EstablishIDBConnectionToServer::Reply(m_identifier));65 m_isOpenInServer = sendSync(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer::Reply(m_identifier)); 68 66 69 67 // FIXME: This creates a reference cycle, so neither this object nor the IDBConnectionToServer will ever be deallocated. … … 74 72 { 75 73 if (m_isOpenInServer) 76 send(Messages:: StorageToWebProcessConnection::RemoveIDBConnectionToServer(m_identifier));74 send(Messages::NetworkConnectionToWebProcess::RemoveIDBConnectionToServer(m_identifier)); 77 75 } 78 76 79 77 IPC::Connection* WebIDBConnectionToServer::messageSenderConnection() 80 78 { 81 return &WebProcess::singleton().ensure WebToStorageProcessConnection(m_sessionID).connection();79 return &WebProcess::singleton().ensureNetworkProcessConnection().connection(); 82 80 } 83 81 -
trunk/Source/WebKit/WebProcess/Databases/WebDatabaseProvider.cpp
r235205 r235954 27 27 #include "WebDatabaseProvider.h" 28 28 29 #include "NetworkProcessConnection.h" 29 30 #include "WebProcess.h" 30 #include "WebToStorageProcessConnection.h"31 31 #include <pal/SessionID.h> 32 32 #include <wtf/HashMap.h> … … 68 68 69 69 #if ENABLE(INDEXED_DATABASE) 70 71 70 WebCore::IDBClient::IDBConnectionToServer& WebDatabaseProvider::idbConnectionToServerForSession(const PAL::SessionID& sessionID) 72 71 { … … 79 78 } 80 79 81 return WebProcess::singleton().ensure WebToStorageProcessConnection(sessionID).idbConnectionToServerForSession(sessionID).coreConnectionToServer();80 return WebProcess::singleton().ensureNetworkProcessConnection().idbConnectionToServerForSession(sessionID).coreConnectionToServer(); 82 81 } 83 84 82 #endif 85 83 -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
r235205 r235954 34 34 #include "WebCacheStorageProvider.h" 35 35 #include "WebCoreArgumentCoders.h" 36 #include "WebIDBConnectionToServerMessages.h" 36 37 #include "WebLoaderStrategy.h" 37 38 #include "WebMDNSRegisterMessages.h" … … 108 109 } 109 110 111 #if ENABLE(INDEXED_DATABASE) 112 if (decoder.messageReceiverName() == Messages::WebIDBConnectionToServer::messageReceiverName()) { 113 auto idbConnection = m_webIDBConnectionsByIdentifier.get(decoder.destinationID()); 114 if (idbConnection) 115 idbConnection->didReceiveMessage(connection, decoder); 116 return; 117 } 118 #endif 119 110 120 didReceiveNetworkProcessConnectionMessage(connection, decoder); 111 121 } … … 127 137 128 138 m_writeBlobToFileCompletionHandlers.clear(); 139 140 141 #if ENABLE(INDEXED_DATABASE) 142 for (auto& connection : m_webIDBConnectionsByIdentifier.values()) 143 connection->connectionToServerLost(); 144 145 m_webIDBConnectionsByIdentifier.clear(); 146 m_webIDBConnectionsBySession.clear(); 147 #endif 148 129 149 } 130 150 … … 182 202 #endif 183 203 204 #if ENABLE(INDEXED_DATABASE) 205 WebIDBConnectionToServer& NetworkProcessConnection::idbConnectionToServerForSession(PAL::SessionID sessionID) 206 { 207 return *m_webIDBConnectionsBySession.ensure(sessionID, [&] { 208 auto connection = WebIDBConnectionToServer::create(sessionID); 209 210 auto result = m_webIDBConnectionsByIdentifier.add(connection->identifier(), connection.copyRef()); 211 ASSERT_UNUSED(result, result.isNewEntry); 212 213 return connection; 214 }).iterator->value; 215 } 216 #endif 184 217 } // namespace WebKit -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h
r230007 r235954 29 29 #include "Connection.h" 30 30 #include "ShareableResource.h" 31 #include "WebIDBConnectionToServer.h" 31 32 #include <wtf/RefCounted.h> 32 33 #include <wtf/text/WTFString.h> … … 64 65 void writeBlobsToTemporaryFiles(const Vector<String>& blobURLs, Function<void (const Vector<String>& filePaths)>&& completionHandler); 65 66 67 #if ENABLE(INDEXED_DATABASE) 68 WebIDBConnectionToServer* existingIDBConnectionToServerForIdentifier(uint64_t identifier) { return m_webIDBConnectionsByIdentifier.get(identifier); }; 69 WebIDBConnectionToServer& idbConnectionToServerForSession(PAL::SessionID); 70 #endif 71 66 72 private: 67 73 NetworkProcessConnection(IPC::Connection::Identifier); … … 87 93 88 94 HashMap<uint64_t, Function<void (const Vector<String>&)>> m_writeBlobToFileCompletionHandlers; 95 96 #if ENABLE(INDEXED_DATABASE) 97 HashMap<PAL::SessionID, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsBySession; 98 HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsByIdentifier; 99 #endif 100 89 101 }; 90 102 -
trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.cpp
r235205 r235954 30 30 #include "ServiceWorkerClientFetchMessages.h" 31 31 #include "StorageToWebProcessConnectionMessages.h" 32 #include "WebIDBConnectionToServerMessages.h"33 32 #include "WebProcess.h" 34 33 #include "WebSWClientConnection.h" … … 56 55 void WebToStorageProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder) 57 56 { 58 #if ENABLE(INDEXED_DATABASE)59 if (decoder.messageReceiverName() == Messages::WebIDBConnectionToServer::messageReceiverName()) {60 auto idbConnection = m_webIDBConnectionsByIdentifier.get(decoder.destinationID());61 if (idbConnection)62 idbConnection->didReceiveMessage(connection, decoder);63 return;64 }65 #endif66 67 57 #if ENABLE(SERVICE_WORKER) 68 58 if (decoder.messageReceiverName() == Messages::WebSWClientConnection::messageReceiverName()) { … … 103 93 auto protectedThis = makeRef(*this); 104 94 105 #if ENABLE(INDEXED_DATABASE)106 for (auto& connection : m_webIDBConnectionsByIdentifier.values())107 connection->connectionToServerLost();108 #endif109 95 #if ENABLE(SERVICE_WORKER) 110 96 for (auto& connection : m_swConnectionsBySession.values()) … … 116 102 117 103 WebProcess::singleton().webToStorageProcessConnectionClosed(this); 118 119 #if ENABLE(INDEXED_DATABASE)120 m_webIDBConnectionsByIdentifier.clear();121 m_webIDBConnectionsBySession.clear();122 #endif123 104 } 124 105 … … 126 107 { 127 108 } 128 129 #if ENABLE(INDEXED_DATABASE)130 WebIDBConnectionToServer& WebToStorageProcessConnection::idbConnectionToServerForSession(SessionID sessionID)131 {132 return *m_webIDBConnectionsBySession.ensure(sessionID, [&] {133 auto connection = WebIDBConnectionToServer::create(sessionID);134 135 auto result = m_webIDBConnectionsByIdentifier.add(connection->identifier(), connection.copyRef());136 ASSERT_UNUSED(result, result.isNewEntry);137 138 return connection;139 }).iterator->value;140 }141 #endif142 109 143 110 #if ENABLE(SERVICE_WORKER) -
trunk/Source/WebKit/WebProcess/Storage/WebToStorageProcessConnection.h
r233562 r235954 29 29 #include "Connection.h" 30 30 #include "MessageSender.h" 31 #include "WebIDBConnectionToServer.h"32 31 #include "WebSWClientConnection.h" 33 32 #include <WebCore/SWServer.h> … … 51 50 IPC::Connection& connection() { return m_connection.get(); } 52 51 53 #if ENABLE(INDEXED_DATABASE)54 WebIDBConnectionToServer* existingIDBConnectionToServerForIdentifier(uint64_t identifier) { return m_webIDBConnectionsByIdentifier.get(identifier); };55 WebIDBConnectionToServer& idbConnectionToServerForSession(PAL::SessionID);56 #endif57 52 #if ENABLE(SERVICE_WORKER) 58 53 WebSWClientConnection* existingServiceWorkerConnectionForSession(PAL::SessionID sessionID) { return m_swConnectionsBySession.get(sessionID); } … … 75 70 Ref<IPC::Connection> m_connection; 76 71 77 #if ENABLE(INDEXED_DATABASE)78 HashMap<PAL::SessionID, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsBySession;79 HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsByIdentifier;80 #endif81 82 72 #if ENABLE(SERVICE_WORKER) 83 73 HashMap<PAL::SessionID, RefPtr<WebSWClientConnection>> m_swConnectionsBySession; -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r235758 r235954 1181 1181 ASSERT_UNUSED(connection, m_networkProcessConnection == connection); 1182 1182 1183 m_networkProcessConnection = nullptr;1184 1185 logDiagnosticMessageForNetworkProcessCrash();1186 1187 m_webLoaderStrategy.networkProcessCrashed();1188 WebSocketStream::networkProcessCrashed();1189 1190 for (auto& page : m_pageMap.values())1191 page->stopAllURLSchemeTasks();1192 }1193 1194 WebLoaderStrategy& WebProcess::webLoaderStrategy()1195 {1196 return m_webLoaderStrategy;1197 }1198 1199 void WebProcess::webToStorageProcessConnectionClosed(WebToStorageProcessConnection* connection)1200 {1201 ASSERT(m_webToStorageProcessConnection);1202 ASSERT(m_webToStorageProcessConnection == connection);1203 1204 1183 #if ENABLE(INDEXED_DATABASE) 1205 1184 for (auto& page : m_pageMap.values()) { … … 1207 1186 if (!idbConnection) 1208 1187 continue; 1209 1188 1210 1189 if (connection->existingIDBConnectionToServerForIdentifier(idbConnection->identifier())) { 1211 1190 ASSERT(idbConnection == &connection->existingIDBConnectionToServerForIdentifier(idbConnection->identifier())->coreConnectionToServer()); … … 1214 1193 } 1215 1194 #endif 1195 1196 m_networkProcessConnection = nullptr; 1197 1198 logDiagnosticMessageForNetworkProcessCrash(); 1199 1200 m_webLoaderStrategy.networkProcessCrashed(); 1201 WebSocketStream::networkProcessCrashed(); 1202 1203 for (auto& page : m_pageMap.values()) 1204 page->stopAllURLSchemeTasks(); 1205 } 1206 1207 WebLoaderStrategy& WebProcess::webLoaderStrategy() 1208 { 1209 return m_webLoaderStrategy; 1210 } 1211 1212 void WebProcess::webToStorageProcessConnectionClosed(WebToStorageProcessConnection* connection) 1213 { 1214 ASSERT(m_webToStorageProcessConnection); 1215 ASSERT(m_webToStorageProcessConnection == connection); 1216 1216 1217 #if ENABLE(SERVICE_WORKER) 1217 1218 if (SWContextManager::singleton().connection()) { -
trunk/Tools/ChangeLog
r235952 r235954 1 2018-09-12 Sihui Liu <sihui_liu@apple.com> 2 3 Move IndexedDB to Network Process 4 https://bugs.webkit.org/show_bug.cgi?id=189415 5 6 Reviewed by Geoffrey Garen. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm: 9 (TEST): 10 * TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm: 11 (TEST): 12 * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm: 13 (TEST): 14 * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm: 15 (TEST): 16 * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm: 17 (TEST): 18 1 19 2018-09-12 Chris Dumez <cdumez@apple.com> 2 20 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBDeleteRecovery.mm
r220105 r235954 60 60 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 61 61 62 [configuration.get().processPool _terminate StorageProcess];62 [configuration.get().processPool _terminateNetworkProcess]; 63 63 64 64 // Copy the inconsistent database files to the database directory -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IDBIndexUpgradeToV2.mm
r220105 r235954 60 60 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 61 61 62 [configuration.get().processPool _terminate StorageProcess];62 [configuration.get().processPool _terminateNetworkProcess]; 63 63 64 64 // Copy the inconsistent database files to the database directory -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBDatabaseProcessKill.mm
r220105 r235954 95 95 if (!killedDBProcess && openRequestUpgradeNeeded) { 96 96 killedDBProcess = true; 97 [configuration.get().processPool _terminate StorageProcess];97 [configuration.get().processPool _terminateNetworkProcess]; 98 98 } 99 99 } -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBMultiProcess.mm
r220105 r235954 72 72 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 73 73 74 [configuration.get().processPool _terminate StorageProcess];74 [configuration.get().processPool _terminateNetworkProcess]; 75 75 76 76 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm
r232258 r235954 77 77 webView = nil; 78 78 79 // Terminate the storageprocess80 [configuration.get().processPool _terminate StorageProcess];79 // Terminate the network process 80 [configuration.get().processPool _terminateNetworkProcess]; 81 81 82 82 // Make a new web view to finish the test
Note:
See TracChangeset
for help on using the changeset viewer.