Changeset 245540 in webkit
- Timestamp:
- May 20, 2019 5:07:39 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 1 deleted
- 46 edited
- 8 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/CMakeLists.txt
r245492 r245540 21 21 "${WEBKIT_DIR}/NetworkProcess/IndexedDB" 22 22 "${WEBKIT_DIR}/NetworkProcess/ServiceWorker" 23 "${WEBKIT_DIR}/NetworkProcess/WebStorage" 23 24 "${WEBKIT_DIR}/NetworkProcess/cache" 24 25 "${WEBKIT_DIR}/NetworkProcess/watchos" … … 59 60 "${WEBKIT_DIR}/UIProcess/WebAuthentication" 60 61 "${WEBKIT_DIR}/UIProcess/WebAuthentication/Mock" 61 "${WEBKIT_DIR}/UIProcess/WebStorage"62 62 "${WEBKIT_DIR}/UIProcess/WebsiteData" 63 63 "${WEBKIT_DIR}/WebProcess" … … 118 118 NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in 119 119 120 NetworkProcess/WebStorage/StorageManager.messages.in 121 120 122 NetworkProcess/cache/CacheStorageEngineConnection.messages.in 121 123 … … 157 159 158 160 UIProcess/UserContent/WebUserContentControllerProxy.messages.in 159 160 UIProcess/WebStorage/StorageManager.messages.in161 161 162 162 WebProcess/WebProcess.messages.in -
trunk/Source/WebKit/ChangeLog
r245536 r245540 1 2019-05-20 Sihui Liu <sihui_liu@apple.com> 2 3 Move Web Storage to Network Process 4 https://bugs.webkit.org/show_bug.cgi?id=197636 5 6 Reviewed by Youenn Fablet. 7 8 * CMakeLists.txt: 9 * DerivedSources.make: 10 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 11 (WebKit::NetworkConnectionToWebProcess::didReceiveMessage): 12 (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage): 13 (WebKit::NetworkConnectionToWebProcess::didClose): 14 (WebKit::NetworkConnectionToWebProcess::webPageWasAdded): 15 (WebKit::NetworkConnectionToWebProcess::webPageWasRemoved): 16 (WebKit::NetworkConnectionToWebProcess::webProcessSessionChanged): 17 * NetworkProcess/NetworkConnectionToWebProcess.h: 18 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 19 * NetworkProcess/NetworkProcess.cpp: 20 (WebKit::NetworkProcess::networkSessionByConnection const): 21 (WebKit::NetworkProcess::hasLocalStorage): 22 (WebKit::NetworkProcess::fetchWebsiteData): 23 (WebKit::NetworkProcess::deleteWebsiteData): 24 (WebKit::NetworkProcess::deleteWebsiteDataForOrigins): 25 (WebKit::filterForRegistrableDomains): 26 (WebKit::NetworkProcess::deleteWebsiteDataForRegistrableDomains): 27 (WebKit::NetworkProcess::webPageWasAdded): 28 (WebKit::NetworkProcess::webPageWasRemoved): 29 (WebKit::NetworkProcess::webProcessWasDisconnected): 30 (WebKit::NetworkProcess::webProcessSessionChanged): 31 (WebKit::NetworkProcess::getLocalStorageOriginDetails): 32 * NetworkProcess/NetworkProcess.h: 33 * NetworkProcess/NetworkProcess.messages.in: 34 * NetworkProcess/NetworkSession.cpp: 35 (WebKit::NetworkSession::NetworkSession): 36 (WebKit::NetworkSession::~NetworkSession): 37 * NetworkProcess/NetworkSession.h: 38 (WebKit::NetworkSession::storageManager): 39 * NetworkProcess/NetworkSessionCreationParameters.cpp: 40 (WebKit::NetworkSessionCreationParameters::privateSessionParameters): 41 (WebKit::NetworkSessionCreationParameters::encode const): 42 (WebKit::NetworkSessionCreationParameters::decode): 43 * NetworkProcess/NetworkSessionCreationParameters.h: 44 * NetworkProcess/WebStorage/LocalStorageDatabase.cpp: Renamed from Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp. 45 (WebKit::LocalStorageDatabase::create): 46 (WebKit::LocalStorageDatabase::LocalStorageDatabase): 47 (WebKit::LocalStorageDatabase::~LocalStorageDatabase): 48 (WebKit::LocalStorageDatabase::openDatabase): 49 (WebKit::LocalStorageDatabase::tryToOpenDatabase): 50 (WebKit::LocalStorageDatabase::migrateItemTableIfNeeded): 51 (WebKit::LocalStorageDatabase::importItems): 52 (WebKit::LocalStorageDatabase::setItem): 53 (WebKit::LocalStorageDatabase::removeItem): 54 (WebKit::LocalStorageDatabase::clear): 55 (WebKit::LocalStorageDatabase::close): 56 (WebKit::LocalStorageDatabase::itemDidChange): 57 (WebKit::LocalStorageDatabase::scheduleDatabaseUpdate): 58 (WebKit::LocalStorageDatabase::updateDatabase): 59 (WebKit::LocalStorageDatabase::updateDatabaseWithChangedItems): 60 (WebKit::LocalStorageDatabase::databaseIsEmpty): 61 * NetworkProcess/WebStorage/LocalStorageDatabase.h: Renamed from Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.h. 62 * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp: Renamed from Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp. 63 (WebKit::LocalStorageDatabaseTracker::create): 64 (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker): 65 (WebKit::LocalStorageDatabaseTracker::~LocalStorageDatabaseTracker): 66 (WebKit::LocalStorageDatabaseTracker::databasePath const): 67 (WebKit::LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin): 68 (WebKit::LocalStorageDatabaseTracker::deleteDatabaseWithOrigin): 69 (WebKit::LocalStorageDatabaseTracker::deleteAllDatabases): 70 (WebKit::LocalStorageDatabaseTracker::databasesModifiedSince): 71 (WebKit::LocalStorageDatabaseTracker::origins const): 72 (WebKit::LocalStorageDatabaseTracker::originDetails): 73 * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h: Renamed from Source/WebKit/UIProcess/WebStorage/LocalStorageDatabaseTracker.h. 74 * NetworkProcess/WebStorage/StorageManager.cpp: Renamed from Source/WebKit/UIProcess/WebStorage/StorageManager.cpp. 75 (WebKit::StorageManager::StorageArea::securityOrigin const): 76 (WebKit::StorageManager::StorageArea::isSessionStorage const): 77 (WebKit::StorageManager::LocalStorageNamespace::storageManager const): 78 (WebKit::StorageManager::TransientLocalStorageNamespace::create): 79 (WebKit::StorageManager::TransientLocalStorageNamespace::~TransientLocalStorageNamespace): 80 (WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea): 81 (WebKit::StorageManager::TransientLocalStorageNamespace::origins const): 82 (WebKit::StorageManager::TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin): 83 (WebKit::StorageManager::TransientLocalStorageNamespace::clearAllStorageAreas): 84 (WebKit::StorageManager::TransientLocalStorageNamespace::TransientLocalStorageNamespace): 85 (WebKit::StorageManager::StorageArea::create): 86 (WebKit::StorageManager::StorageArea::StorageArea): 87 (WebKit::StorageManager::StorageArea::~StorageArea): 88 (WebKit::StorageManager::StorageArea::addListener): 89 (WebKit::StorageManager::StorageArea::removeListener): 90 (WebKit::StorageManager::StorageArea::hasListener const): 91 (WebKit::StorageManager::StorageArea::clone const): 92 (WebKit::StorageManager::StorageArea::setItem): 93 (WebKit::StorageManager::StorageArea::removeItem): 94 (WebKit::StorageManager::StorageArea::clear): 95 (WebKit::StorageManager::StorageArea::items const): 96 (WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded const): 97 (WebKit::StorageManager::StorageArea::dispatchEvents const): 98 (WebKit::StorageManager::LocalStorageNamespace::create): 99 (WebKit::StorageManager::LocalStorageNamespace::LocalStorageNamespace): 100 (WebKit::StorageManager::LocalStorageNamespace::~LocalStorageNamespace): 101 (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea): 102 (WebKit::StorageManager::LocalStorageNamespace::didDestroyStorageArea): 103 (WebKit::StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin): 104 (WebKit::StorageManager::LocalStorageNamespace::clearAllStorageAreas): 105 (WebKit::StorageManager::SessionStorageNamespace::isEmpty const): 106 (WebKit::StorageManager::SessionStorageNamespace::allowedConnections const): 107 (WebKit::StorageManager::SessionStorageNamespace::origins const): 108 (WebKit::StorageManager::SessionStorageNamespace::clearStorageAreasMatchingOrigin): 109 (WebKit::StorageManager::SessionStorageNamespace::clearAllStorageAreas): 110 (WebKit::StorageManager::SessionStorageNamespace::create): 111 (WebKit::StorageManager::SessionStorageNamespace::SessionStorageNamespace): 112 (WebKit::StorageManager::SessionStorageNamespace::~SessionStorageNamespace): 113 (WebKit::StorageManager::SessionStorageNamespace::addAllowedConnection): 114 (WebKit::StorageManager::SessionStorageNamespace::removeAllowedConnection): 115 (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea): 116 (WebKit::StorageManager::SessionStorageNamespace::cloneTo): 117 (WebKit::StorageManager::create): 118 (WebKit::StorageManager::StorageManager): 119 (WebKit::StorageManager::~StorageManager): 120 (WebKit::StorageManager::createSessionStorageNamespace): 121 (WebKit::StorageManager::destroySessionStorageNamespace): 122 (WebKit::StorageManager::addAllowedSessionStorageNamespaceConnection): 123 (WebKit::StorageManager::removeAllowedSessionStorageNamespaceConnection): 124 (WebKit::StorageManager::cloneSessionStorageNamespace): 125 (WebKit::StorageManager::processWillOpenConnection): 126 (WebKit::StorageManager::processDidCloseConnection): 127 (WebKit::StorageManager::getSessionStorageOrigins): 128 (WebKit::StorageManager::deleteSessionStorageOrigins): 129 (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins): 130 (WebKit::StorageManager::getLocalStorageOrigins): 131 (WebKit::StorageManager::getLocalStorageOriginDetails): 132 (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin): 133 (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince): 134 (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins): 135 (WebKit::StorageManager::createLocalStorageMap): 136 (WebKit::StorageManager::createTransientLocalStorageMap): 137 (WebKit::StorageManager::createSessionStorageMap): 138 (WebKit::StorageManager::destroyStorageMap): 139 (WebKit::StorageManager::getValues): 140 (WebKit::StorageManager::setItem): 141 (WebKit::StorageManager::removeItem): 142 (WebKit::StorageManager::clear): 143 (WebKit::StorageManager::applicationWillTerminate): 144 (WebKit::StorageManager::findStorageArea const): 145 (WebKit::StorageManager::getOrCreateLocalStorageNamespace): 146 (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace): 147 * NetworkProcess/WebStorage/StorageManager.h: Renamed from Source/WebKit/UIProcess/WebStorage/StorageManager.h. 148 * NetworkProcess/WebStorage/StorageManager.messages.in: Renamed from Source/WebKit/UIProcess/WebStorage/StorageManager.messages.in. 149 * NetworkProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm: Copied from Source/WebKit/UIProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm. 150 (WebKit::LocalStorageDatabaseTracker::platformMaybeExcludeFromBackup const): 151 * NetworkProcess/cocoa/NetworkSessionCocoa.mm: 152 (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): 153 * NetworkProcess/curl/NetworkSessionCurl.cpp: 154 (WebKit::NetworkSessionCurl::NetworkSessionCurl): 155 * NetworkProcess/soup/NetworkSessionSoup.cpp: 156 (WebKit::NetworkSessionSoup::NetworkSessionSoup): 157 * PlatformMac.cmake: 158 * PlatformWin.cmake: 159 * Shared/WebPageCreationParameters.cpp: 160 (WebKit::WebPageCreationParameters::encode const): 161 (WebKit::WebPageCreationParameters::decode): 162 * Shared/WebPageCreationParameters.h: 163 * Shared/WebsiteData/WebsiteData.cpp: 164 (WebKit::WebsiteData::ownerProcess): 165 * Sources.txt: 166 * SourcesCocoa.txt: 167 * UIProcess/API/C/WKKeyValueStorageManager.cpp: 168 (WKKeyValueStorageManagerGetKeyValueStorageOrigins): 169 (WKKeyValueStorageManagerGetStorageDetailsByOrigin): 170 (WKKeyValueStorageManagerDeleteEntriesForOrigin): 171 (WKKeyValueStorageManagerDeleteAllEntries): 172 * UIProcess/Network/NetworkProcessProxy.cpp: 173 (WebKit::NetworkProcessProxy::hasLocalStorage): 174 (WebKit::NetworkProcessProxy::getLocalStorageDetails): 175 * UIProcess/Network/NetworkProcessProxy.h: 176 * UIProcess/WebPageProxy.cpp: 177 (WebKit::WebPageProxy::createNewPage): 178 * UIProcess/WebProcessPool.cpp: 179 (WebKit::WebProcessPool::ensureNetworkProcess): 180 * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: 181 (WebKit::WebsiteDataStore::parameters): 182 (WebKit::WebsiteDataStore::platformInitialize): 183 (WebKit::WebsiteDataStore::platformDestroy): 184 * UIProcess/WebsiteData/WebsiteDataStore.cpp: 185 (WebKit::WebsiteDataStore::WebsiteDataStore): 186 (WebKit::computeNetworkProcessAccessTypeForDataFetch): 187 (WebKit::WebsiteDataStore::fetchDataAndApply): 188 (WebKit::WebsiteDataStore::removeData): 189 (WebKit::WebsiteDataStore::hasLocalStorageForTesting const): 190 (WebKit::WebsiteDataStore::parameters): 191 (WebKit::WebsiteDataStore::getLocalStorageDetails): 192 (WebKit::m_client): Deleted. 193 (WebKit::WebsiteDataStore::cloneSessionData): Deleted. 194 (WebKit::WebsiteDataStore::webPageWasAdded): Deleted. 195 (WebKit::WebsiteDataStore::webPageWasInvalidated): Deleted. 196 (WebKit::WebsiteDataStore::webProcessWillOpenConnection): Deleted. 197 (WebKit::WebsiteDataStore::webPageWillOpenConnection): Deleted. 198 (WebKit::WebsiteDataStore::webPageDidCloseConnection): Deleted. 199 (WebKit::WebsiteDataStore::webProcessDidCloseConnection): Deleted. 200 * UIProcess/WebsiteData/WebsiteDataStore.h: 201 (WebKit::WebsiteDataStore::resolvedLocalStorageDirectory const): 202 (WebKit::WebsiteDataStore::storageManager): Deleted. 203 * WebKit.xcodeproj/project.pbxproj: 204 * WebProcess/InjectedBundle/InjectedBundle.cpp: 205 (WebKit::InjectedBundle::setPrivateBrowsingEnabled): 206 * WebProcess/Network/NetworkProcessConnection.cpp: 207 (WebKit::NetworkProcessConnection::didReceiveMessage): 208 * WebProcess/WebCoreSupport/WebChromeClient.cpp: 209 (WebKit::WebChromeClient::createWindow): 210 * WebProcess/WebPage/WebPage.cpp: 211 (WebKit::WebPage::close): 212 * WebProcess/WebProcess.cpp: 213 (WebKit::WebProcess::createWebPage): 214 (WebKit::WebProcess::removeWebPage): 215 (WebKit::WebProcess::ensureNetworkProcessConnection): 216 (WebKit::WebProcess::networkProcessConnectionClosed): 217 (WebKit::WebProcess::registerStorageAreaMap): 218 (WebKit::WebProcess::unregisterStorageAreaMap): 219 (WebKit::WebProcess::storageAreaMap const): 220 (WebKit::WebProcess::enablePrivateBrowsingForTesting): 221 * WebProcess/WebProcess.h: 222 * WebProcess/WebStorage/StorageAreaMap.cpp: 223 (WebKit::StorageAreaMap::StorageAreaMap): 224 (WebKit::StorageAreaMap::~StorageAreaMap): 225 (WebKit::StorageAreaMap::setItem): 226 (WebKit::StorageAreaMap::removeItem): 227 (WebKit::StorageAreaMap::clear): 228 (WebKit::StorageAreaMap::loadValuesIfNeeded): 229 (WebKit::StorageAreaMap::connect): 230 (WebKit::StorageAreaMap::disconnect): 231 * WebProcess/WebStorage/StorageAreaMap.h: 232 (WebKit::StorageAreaMap::identifier const): 233 1 234 2019-05-20 Ross Kirsling <ross.kirsling@sony.com> 2 235 -
trunk/Source/WebKit/DerivedSources-input.xcfilelist
r244100 r245540 25 25 $(PROJECT_DIR)/NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in 26 26 $(PROJECT_DIR)/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in 27 $(PROJECT_DIR)/NetworkProcess/WebStorage/StorageManager.messages.in 27 28 $(PROJECT_DIR)/NetworkProcess/cache/CacheStorageEngineConnection.messages.in 28 29 $(PROJECT_DIR)/NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in -
trunk/Source/WebKit/DerivedSources.make
r244696 r245540 31 31 $(WebKit2)/NetworkProcess/IndexedDB \ 32 32 $(WebKit2)/NetworkProcess/ServiceWorker \ 33 $(WebKit2)/NetworkProcess/WebStorage \ 33 34 $(WebKit2)/PluginProcess \ 34 35 $(WebKit2)/PluginProcess/mac \ … … 80 81 $(WebKit2)/UIProcess/UserContent \ 81 82 $(WebKit2)/UIProcess/WebAuthentication \ 82 $(WebKit2)/UIProcess/WebStorage \83 83 $(WebKit2)/UIProcess/mac \ 84 84 $(WebKit2)/UIProcess/ios \ -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r245427 r245540 47 47 #include "PreconnectTask.h" 48 48 #include "ServiceWorkerFetchTaskMessages.h" 49 #include "StorageManager.h" 50 #include "StorageManagerMessages.h" 49 51 #include "WebCoreArgumentCoders.h" 50 52 #include "WebErrors.h" … … 224 226 #endif 225 227 228 if (decoder.messageReceiverName() == Messages::StorageManager::messageReceiverName()) { 229 if (auto* session = m_networkProcess->networkSessionByConnection(connection)) { 230 session->storageManager().dispatchMessageToQueue(connection, decoder); 231 return; 232 } 233 } 234 226 235 ASSERT_NOT_REACHED(); 227 236 } … … 263 272 #endif 264 273 274 if (decoder.messageReceiverName() == Messages::StorageManager::messageReceiverName()) { 275 if (auto* session = m_networkProcess->networkSessionByConnection(connection)) { 276 session->storageManager().dispatchSyncMessageToQueue(connection, decoder, reply); 277 return; 278 } 279 } 280 265 281 ASSERT_NOT_REACHED(); 266 282 } … … 288 304 // root activity trackers. 289 305 stopAllNetworkActivityTracking(); 306 307 m_networkProcess->webProcessWasDisconnected(connection); 290 308 291 309 m_networkProcess->networkBlobRegistry().connectionToWebProcessDidClose(*this); … … 886 904 } 887 905 906 void NetworkConnectionToWebProcess::webPageWasAdded(PAL::SessionID sessionID, uint64_t pageID, uint64_t oldPageID) 907 { 908 m_networkProcess->webPageWasAdded(m_connection.get(), sessionID, pageID, oldPageID); 909 } 910 911 void NetworkConnectionToWebProcess::webPageWasRemoved(PAL::SessionID sessionID, uint64_t pageID) 912 { 913 m_networkProcess->webPageWasRemoved(m_connection.get(), sessionID, pageID); 914 } 915 916 void NetworkConnectionToWebProcess::webProcessSessionChanged(PAL::SessionID newSessionID, const Vector<uint64_t>& pages) 917 { 918 m_networkProcess->webProcessSessionChanged(m_connection.get(), newSessionID, pages); 919 } 920 888 921 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r245025 r245540 145 145 void clearConnectionHasUploads(); 146 146 147 void webPageWasAdded(PAL::SessionID, uint64_t pageID, uint64_t oldPageID); 148 void webPageWasRemoved(PAL::SessionID, uint64_t pageID); 149 void webProcessSessionChanged(PAL::SessionID newSessionID, const Vector<uint64_t>& pages); 150 147 151 private: 148 152 NetworkConnectionToWebProcess(NetworkProcess&, IPC::Connection::Identifier); -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r245025 r245540 87 87 88 88 SetWebProcessIdentifier(WebCore::ProcessIdentifier processIdentifier) 89 90 WebPageWasAdded(PAL::SessionID sessionID, uint64_t pageID, uint64_t oldPageID) 91 WebPageWasRemoved(PAL::SessionID sessionID, uint64_t pageID) 92 WebProcessSessionChanged(PAL::SessionID newSessionID, Vector<uint64_t> pages) 89 93 } -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r245334 r245540 54 54 #include "StatisticsData.h" 55 55 #include "StorageAccessStatus.h" 56 #include "StorageManager.h" 57 #include "StorageManagerMessages.h" 56 58 #include "WebCookieManager.h" 57 59 #include "WebPageProxyMessages.h" … … 561 563 } 562 564 565 NetworkSession* NetworkProcess::networkSessionByConnection(IPC::Connection& connection) const 566 { 567 if (!m_sessionByConnection.contains(connection.uniqueID())) 568 return nullptr; 569 570 return networkSession(m_sessionByConnection.get(connection.uniqueID())); 571 } 572 563 573 void NetworkProcess::setSession(const PAL::SessionID& sessionID, Ref<NetworkSession>&& session) 564 574 { … … 1012 1022 } 1013 1023 1024 void NetworkProcess::hasLocalStorage(PAL::SessionID sessionID, const RegistrableDomain& domain, CompletionHandler<void(bool)>&& completionHandler) 1025 { 1026 if (auto* session = networkSession(sessionID)) { 1027 session->storageManager().getLocalStorageOrigins([domain, completionHandler = WTFMove(completionHandler)](auto&& origins) mutable { 1028 completionHandler(WTF::anyOf(origins, [&domain](auto& origin) { 1029 return domain.matches(origin); 1030 })); 1031 }); 1032 return; 1033 } 1034 completionHandler(false); 1035 } 1036 1014 1037 void NetworkProcess::removePrevalentDomains(PAL::SessionID sessionID, const Vector<RegistrableDomain>& domains) 1015 1038 { … … 1258 1281 CacheStorage::Engine::fetchEntries(*this, sessionID, fetchOptions.contains(WebsiteDataFetchOption::ComputeSizes), [callbackAggregator = callbackAggregator.copyRef()](auto entries) mutable { 1259 1282 callbackAggregator->m_websiteData.entries.appendVector(entries); 1283 }); 1284 } 1285 1286 auto* session = networkSession(sessionID); 1287 if (websiteDataTypes.contains(WebsiteDataType::SessionStorage) && session) { 1288 session->storageManager().getSessionStorageOrigins([callbackAggregator = callbackAggregator.copyRef()](auto&& origins) { 1289 while (!origins.isEmpty()) 1290 callbackAggregator->m_websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataType::SessionStorage, 0 }); 1291 }); 1292 } 1293 1294 if (websiteDataTypes.contains(WebsiteDataType::LocalStorage) && session) { 1295 session->storageManager().getLocalStorageOrigins([callbackAggregator = callbackAggregator.copyRef()](auto&& origins) { 1296 while (!origins.isEmpty()) 1297 callbackAggregator->m_websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataType::LocalStorage, 0 }); 1260 1298 }); 1261 1299 } … … 1323 1361 if (websiteDataTypes.contains(WebsiteDataType::DOMCache)) 1324 1362 CacheStorage::Engine::clearAllCaches(*this, sessionID, [clearTasksHandler = clearTasksHandler.copyRef()] { }); 1363 1364 auto* session = networkSession(sessionID); 1365 if (websiteDataTypes.contains(WebsiteDataType::SessionStorage) && session) 1366 session->storageManager().deleteSessionStorageOrigins([clearTasksHandler = clearTasksHandler.copyRef()] { }); 1367 1368 if (websiteDataTypes.contains(WebsiteDataType::LocalStorage) && session) 1369 session->storageManager().deleteLocalStorageOriginsModifiedSince(modifiedSince, [clearTasksHandler = clearTasksHandler.copyRef()] { }); 1325 1370 1326 1371 #if ENABLE(INDEXED_DATABASE) … … 1417 1462 } 1418 1463 1464 auto* session = networkSession(sessionID); 1465 if (websiteDataTypes.contains(WebsiteDataType::SessionStorage) && session) 1466 session->storageManager().deleteSessionStorageEntriesForOrigins(originDatas, [clearTasksHandler = clearTasksHandler.copyRef()] { }); 1467 1468 if (websiteDataTypes.contains(WebsiteDataType::LocalStorage) && session) 1469 session->storageManager().deleteLocalStorageEntriesForOrigins(originDatas, [clearTasksHandler = clearTasksHandler.copyRef()] { }); 1470 1419 1471 #if ENABLE(INDEXED_DATABASE) 1420 1472 if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases) && !sessionID.isEphemeral()) … … 1475 1527 1476 1528 return result; 1529 } 1530 1531 static Vector<WebCore::SecurityOriginData> filterForRegistrableDomains(const HashSet<WebCore::SecurityOriginData>& origins, const Vector<RegistrableDomain>& domainsToDelete, HashSet<RegistrableDomain>& domainsDeleted) 1532 { 1533 Vector<SecurityOriginData> originsDeleted; 1534 for (const auto& origin : origins) { 1535 auto domain = RegistrableDomain::uncheckedCreateFromHost(origin.host); 1536 if (!domainsToDelete.contains(domain)) 1537 continue; 1538 originsDeleted.append(origin); 1539 domainsDeleted.add(domain); 1540 } 1541 1542 return originsDeleted; 1477 1543 } 1478 1544 … … 1585 1651 }); 1586 1652 } 1587 1653 1654 auto* session = networkSession(sessionID); 1655 if (session) { 1656 auto& storageManager = session->storageManager(); 1657 if (websiteDataTypes.contains(WebsiteDataType::SessionStorage)) { 1658 storageManager.getSessionStorageOrigins([storageManager = makeRefPtr(storageManager), callbackAggregator = callbackAggregator.copyRef(), domainsToDeleteAllButCookiesFor](auto&& origins) { 1659 auto originsToDelete = filterForRegistrableDomains(origins, domainsToDeleteAllButCookiesFor, callbackAggregator->m_domains); 1660 storageManager->deleteSessionStorageEntriesForOrigins(originsToDelete, [callbackAggregator = callbackAggregator.copyRef()] { }); 1661 }); 1662 } 1663 1664 if (websiteDataTypes.contains(WebsiteDataType::LocalStorage)) { 1665 storageManager.getLocalStorageOrigins([storageManager = makeRefPtr(storageManager), callbackAggregator = callbackAggregator.copyRef(), domainsToDeleteAllButCookiesFor](auto&& origins) { 1666 auto originsToDelete = filterForRegistrableDomains(origins, domainsToDeleteAllButCookiesFor, callbackAggregator->m_domains); 1667 storageManager->deleteLocalStorageEntriesForOrigins(originsToDelete, [callbackAggregator = callbackAggregator.copyRef()] { }); 1668 }); 1669 } 1670 } 1671 1588 1672 #if ENABLE(INDEXED_DATABASE) 1589 1673 auto path = m_idbDatabasePaths.get(sessionID); … … 2536 2620 } 2537 2621 2622 void NetworkProcess::webPageWasAdded(IPC::Connection& connection, PAL::SessionID sessionID, uint64_t pageID, uint64_t oldPageID) 2623 { 2624 if (!pageID || !oldPageID) { 2625 LOG_ERROR("Cannot add page with invalid id"); 2626 return; 2627 } 2628 2629 auto* session = networkSession(sessionID); 2630 if (!session) { 2631 LOG_ERROR("Cannot add page to an unknown session"); 2632 return; 2633 } 2634 auto& storageManager = session->storageManager(); 2635 2636 auto connectionID = connection.uniqueID(); 2637 m_sessionByConnection.ensure(connectionID, [&]() { 2638 storageManager.processWillOpenConnection(connection); 2639 return sessionID; 2640 }); 2641 2642 storageManager.createSessionStorageNamespace(pageID, std::numeric_limits<unsigned>::max()); 2643 storageManager.addAllowedSessionStorageNamespaceConnection(pageID, connection); 2644 if (pageID != oldPageID) 2645 storageManager.cloneSessionStorageNamespace(oldPageID, pageID); 2646 } 2647 2648 void NetworkProcess::webPageWasRemoved(IPC::Connection& connection, PAL::SessionID sessionID, uint64_t pageID) 2649 { 2650 if (!pageID) { 2651 LOG_ERROR("Cannot remove page with invalid id"); 2652 return; 2653 } 2654 2655 auto* session = networkSession(sessionID); 2656 // Session can be destroyed before page gets removed. 2657 if (!session) 2658 return; 2659 2660 auto& storageManager = session->storageManager(); 2661 storageManager.removeAllowedSessionStorageNamespaceConnection(pageID, connection); 2662 storageManager.destroySessionStorageNamespace(pageID); 2663 } 2664 2665 void NetworkProcess::webProcessWasDisconnected(IPC::Connection& connection) 2666 { 2667 auto connectionID = connection.uniqueID(); 2668 if (!m_sessionByConnection.contains(connectionID)) 2669 return; 2670 2671 auto sessionID = m_sessionByConnection.take(connectionID); 2672 if (!m_networkSessions.contains(sessionID)) 2673 return; 2674 2675 networkSession(sessionID)->storageManager().processDidCloseConnection(connection); 2676 } 2677 2678 void NetworkProcess::webProcessSessionChanged(IPC::Connection& connection, PAL::SessionID newSessionID, const Vector<uint64_t>& pageIDs) 2679 { 2680 auto connectionID = connection.uniqueID(); 2681 ASSERT(m_sessionByConnection.contains(connectionID)); 2682 if (m_sessionByConnection.get(connectionID) == newSessionID) 2683 return; 2684 2685 webProcessWasDisconnected(connection); 2686 for (auto& pageID : pageIDs) 2687 webPageWasAdded(connection, newSessionID, pageID, pageID); 2688 } 2689 2690 void NetworkProcess::getLocalStorageOriginDetails(PAL::SessionID sessionID, CompletionHandler<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&& completionHandler) 2691 { 2692 auto* session = networkSession(sessionID); 2693 if (!session) { 2694 LOG_ERROR("Cannot get local storage information for an unknown session"); 2695 return; 2696 } 2697 2698 auto& storageManager = session->storageManager(); 2699 storageManager.getLocalStorageOriginDetails([completionHandler = WTFMove(completionHandler)](auto&& details) mutable { 2700 completionHandler(WTFMove(details)); 2701 }); 2702 } 2703 2538 2704 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r245334 r245540 29 29 #include "CacheModel.h" 30 30 #include "DownloadManager.h" 31 #include "LocalStorageDatabaseTracker.h" 31 32 #include "NetworkBlobRegistry.h" 32 33 #include "NetworkContentRuleListManager.h" … … 165 166 void setSession(const PAL::SessionID&, Ref<NetworkSession>&&); 166 167 NetworkSession* networkSession(const PAL::SessionID&) const override; 168 NetworkSession* networkSessionByConnection(IPC::Connection&) const; 167 169 void destroySession(const PAL::SessionID&); 168 170 … … 228 230 void setPruneEntriesDownTo(PAL::SessionID, uint64_t pruneTargetCount, CompletionHandler<void()>&&); 229 231 void hadUserInteraction(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void(bool)>&&); 232 void hasLocalStorage(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void(bool)>&&); 230 233 void getAllStorageAccessEntries(PAL::SessionID, CompletionHandler<void(Vector<String> domains)>&&); 231 234 void logFrameNavigation(PAL::SessionID, const NavigatedToDomain&, const TopFrameDomain&, const NavigatedFromDomain&, bool isRedirect, bool isMainFrame); … … 269 272 bool sessionIsControlledByAutomation(PAL::SessionID) const; 270 273 274 void webPageWasAdded(IPC::Connection&, PAL::SessionID, uint64_t pageID, uint64_t oldPageID); 275 void webPageWasRemoved(IPC::Connection&, PAL::SessionID, uint64_t pageID); 276 void webProcessWasDisconnected(IPC::Connection&); 277 void webProcessSessionChanged(IPC::Connection&, PAL::SessionID, const Vector<uint64_t>&); 278 void getLocalStorageOriginDetails(PAL::SessionID, CompletionHandler<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&&); 279 271 280 #if ENABLE(CONTENT_EXTENSIONS) 272 281 NetworkContentRuleListManager& networkContentRuleListManager() { return m_networkContentRuleListManager; } … … 559 568 HashMap<PAL::SessionID, StorageQuotaManagers> m_storageQuotaManagers; 560 569 uint32_t m_downloadMonitorSpeedMultiplier { 1 }; 570 571 HashMap<IPC::Connection::UniqueID, PAL::SessionID> m_sessionByConnection; 561 572 }; 562 573 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
r245334 r245540 99 99 SetPrevalentResourceForDebugMode(PAL::SessionID sessionID, WebCore::RegistrableDomain resourceDomain) -> () Async 100 100 HadUserInteraction(PAL::SessionID sessionID, WebCore::RegistrableDomain resourceDomain) -> (bool hadUserInteraction) Async 101 HasLocalStorage(PAL::SessionID sessionID, WebCore::RegistrableDomain resourceDomain) -> (bool hadUserInteraction) Async 101 102 GetAllStorageAccessEntries(PAL::SessionID sessionID) -> (Vector<String> domains) Async 102 103 IsRegisteredAsRedirectingTo(PAL::SessionID sessionID, WebCore::RegistrableDomain redirectedFromDomain, WebCore::RegistrableDomain redirectedToDomain) -> (bool isRedirectingTo) Async … … 170 171 OriginsWithPersistentCredentials() -> (Vector<WebCore::SecurityOriginData> origins) Async 171 172 RemoveCredentialsWithOrigins(Vector<WebCore::SecurityOriginData> origins) -> () Async 173 GetLocalStorageOriginDetails(PAL::SessionID sessionID) -> (Vector<WebKit::LocalStorageDatabaseTracker::OriginDetails> details) Async 172 174 } -
trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp
r244818 r245540 33 33 #include "NetworkResourceLoader.h" 34 34 #include "PingLoad.h" 35 #include "StorageManager.h" 35 36 #include "WebPageProxy.h" 36 37 #include "WebPageProxyMessages.h" … … 73 74 } 74 75 75 NetworkSession::NetworkSession(NetworkProcess& networkProcess, PAL::SessionID sessionID )76 NetworkSession::NetworkSession(NetworkProcess& networkProcess, PAL::SessionID sessionID, const String& localStorageDirectory, SandboxExtension::Handle& handle) 76 77 : m_sessionID(sessionID) 77 78 , m_networkProcess(networkProcess) 78 79 , m_adClickAttribution(makeUniqueRef<AdClickAttributionManager>(sessionID)) 79 { 80 , m_storageManager(StorageManager::create(localStorageDirectory)) 81 { 82 SandboxExtension::consumePermanently(handle); 80 83 m_adClickAttribution->setPingLoadFunction([this, weakThis = makeWeakPtr(this)](NetworkResourceLoadParameters&& loadParameters, CompletionHandler<void(const WebCore::ResourceError&, const WebCore::ResourceResponse&)>&& completionHandler) { 81 84 if (!weakThis) … … 88 91 NetworkSession::~NetworkSession() 89 92 { 93 m_storageManager->waitUntilWritesFinished(); 90 94 } 91 95 -
trunk/Source/WebKit/NetworkProcess/NetworkSession.h
r245053 r245540 27 27 28 28 #include "PrefetchCache.h" 29 #include "SandboxExtension.h" 29 30 #include "WebResourceLoadStatisticsStore.h" 30 31 #include <WebCore/AdClickAttribution.h> … … 52 53 class NetworkProcess; 53 54 class NetworkResourceLoader; 55 class StorageManager; 54 56 class WebResourceLoadStatisticsStore; 55 57 struct NetworkSessionCreationParameters; … … 73 75 void registerNetworkDataTask(NetworkDataTask& task) { m_dataTaskSet.add(&task); } 74 76 void unregisterNetworkDataTask(NetworkDataTask& task) { m_dataTaskSet.remove(&task); } 77 78 StorageManager& storageManager() { return m_storageManager.get(); } 75 79 76 80 #if ENABLE(RESOURCE_LOAD_STATISTICS) … … 99 103 100 104 protected: 101 NetworkSession(NetworkProcess&, PAL::SessionID );105 NetworkSession(NetworkProcess&, PAL::SessionID, const String& localStorageDirectory, SandboxExtension::Handle&); 102 106 103 107 PAL::SessionID m_sessionID; … … 116 120 117 121 PrefetchCache m_prefetchCache; 122 123 Ref<StorageManager> m_storageManager; 118 124 }; 119 125 -
trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp
r243829 r245540 51 51 , { }, { } 52 52 #endif 53 , { }, { }, false 53 , { }, { }, false, { }, { }, { }, { }, { } 54 54 }; 55 55 } … … 84 84 encoder << enableResourceLoadStatisticsDebugMode; 85 85 encoder << resourceLoadStatisticsManualPrevalentResource; 86 87 encoder << localStorageDirectory << localStorageDirectoryExtensionHandle; 86 88 } 87 89 … … 195 197 decoder >> resourceLoadStatisticsManualPrevalentResource; 196 198 if (!resourceLoadStatisticsManualPrevalentResource) 199 return WTF::nullopt; 200 201 Optional<String> localStorageDirectory; 202 decoder >> localStorageDirectory; 203 if (!localStorageDirectory) 204 return WTF::nullopt; 205 206 Optional<SandboxExtension::Handle> localStorageDirectoryExtensionHandle; 207 decoder >> localStorageDirectoryExtensionHandle; 208 if (!localStorageDirectoryExtensionHandle) 197 209 return WTF::nullopt; 198 210 … … 225 237 , WTFMove(*enableResourceLoadStatisticsDebugMode) 226 238 , WTFMove(*resourceLoadStatisticsManualPrevalentResource) 239 , WTFMove(*localStorageDirectory) 240 , WTFMove(*localStorageDirectoryExtensionHandle) 227 241 }}; 228 242 } -
trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h
r243829 r245540 88 88 bool enableResourceLoadStatisticsDebugMode { false }; 89 89 WebCore::RegistrableDomain resourceLoadStatisticsManualPrevalentResource { }; 90 91 String localStorageDirectory; 92 SandboxExtension::Handle localStorageDirectoryExtensionHandle; 90 93 }; 91 94 -
trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.cpp
r245539 r245540 1 1 /* 2 * Copyright (C) 2008, 2009, 2010, 2013 Apple Inc. All rights reserved.2 * Copyright (C) 2008, 2009, 2010, 2013, 2019 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 85 85 bool LocalStorageDatabase::tryToOpenDatabase(DatabaseOpeningStrategy openingStrategy) 86 86 { 87 ASSERT(!RunLoop::isMain()); 87 88 if (!FileSystem::fileExists(m_databasePath) && openingStrategy == SkipIfNonExistent) 88 89 return true; … … 249 250 m_didScheduleDatabaseUpdate = true; 250 251 251 m_queue->dispatch After(databaseUpdateInterval,[protectedThis = makeRef(*this)] {252 m_queue->dispatch([protectedThis = makeRef(*this)] { 252 253 protectedThis->updateDatabase(); 253 254 }); -
trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabase.h
r245539 r245540 1 1 /* 2 * Copyright (C) 2008, 2009, 2010, 2013 Apple Inc. All rights reserved.2 * Copyright (C) 2008, 2009, 2010, 2013, 2019 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without -
trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp
r245539 r245540 1 1 /* 2 * Copyright (C) 2011, 2013 Apple Inc. All rights reserved.2 * Copyright (C) 2011, 2013, 2019 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without -
trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h
r245539 r245540 1 1 /* 2 * Copyright (C) 2011, 2013 Apple Inc. All rights reserved.2 * Copyright (C) 2011, 2013, 2019 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 36 36 namespace WebKit { 37 37 38 struct LocalStorageDetails;39 40 38 class LocalStorageDatabaseTracker : public ThreadSafeRefCounted<LocalStorageDatabaseTracker> { 41 39 public: … … 56 54 struct OriginDetails { 57 55 String originIdentifier; 58 Markable<WallTime, WallTime::MarkableTraits> creationTime; 59 Markable<WallTime, WallTime::MarkableTraits> modificationTime; 56 Optional<WallTime> creationTime; 57 Optional<WallTime> modificationTime; 58 59 template<class Encoder> void encode(Encoder&) const; 60 template<class Decoder> static Optional<OriginDetails> decode(Decoder&); 60 61 }; 61 62 Vector<OriginDetails> originDetails(); … … 71 72 }; 72 73 73 Ref Ptr<WorkQueue> m_queue;74 Ref<WorkQueue> m_queue; 74 75 String m_localStorageDirectory; 75 76 … … 81 82 }; 82 83 84 template<class Encoder> 85 void LocalStorageDatabaseTracker::OriginDetails::encode(Encoder& encoder) const 86 { 87 encoder << originIdentifier << creationTime << modificationTime; 88 } 89 90 template<class Decoder> 91 Optional<LocalStorageDatabaseTracker::OriginDetails> LocalStorageDatabaseTracker::OriginDetails::decode(Decoder& decoder) 92 { 93 LocalStorageDatabaseTracker::OriginDetails result; 94 if (!decoder.decode(result.originIdentifier)) 95 return WTF::nullopt; 96 97 if (!decoder.decode(result.creationTime)) 98 return WTF::nullopt; 99 100 if (!decoder.decode(result.modificationTime)) 101 return WTF::nullopt; 102 103 return result; 104 } 105 83 106 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp
r245539 r245540 1 1 /* 2 * Copyright (C) 2013-201 6Apple Inc. All rights reserved.2 * Copyright (C) 2013-2019 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 57 57 58 58 void setItem(IPC::Connection::UniqueID sourceConnection, uint64_t sourceStorageAreaID, const String& key, const String& value, const String& urlString, bool& quotaException); 59 void setItems(const HashMap<String, String>&); 59 60 void removeItem(IPC::Connection::UniqueID sourceConnection, uint64_t sourceStorageAreaID, const String& key, const String& urlString); 60 61 void clear(IPC::Connection::UniqueID sourceConnection, uint64_t sourceStorageAreaID, const String& urlString); … … 86 87 class StorageManager::LocalStorageNamespace : public ThreadSafeRefCounted<LocalStorageNamespace> { 87 88 public: 88 static Ref<LocalStorageNamespace> create(StorageManager *, uint64_t storageManagerID);89 static Ref<LocalStorageNamespace> create(StorageManager&, uint64_t storageManagerID); 89 90 ~LocalStorageNamespace(); 90 91 91 StorageManager* storageManager() const { return m_storageManager; }92 StorageManager* storageManager() const { return &m_storageManager; } 92 93 93 94 Ref<StorageArea> getOrCreateStorageArea(SecurityOriginData&&); … … 98 99 99 100 private: 100 explicit LocalStorageNamespace(StorageManager*, uint64_t storageManagerID);101 102 StorageManager *m_storageManager;101 LocalStorageNamespace(StorageManager&, uint64_t storageManagerID); 102 103 StorageManager& m_storageManager; 103 104 uint64_t m_storageNamespaceID; 104 105 unsigned m_quotaInBytes; … … 124 125 Ref<StorageArea> getOrCreateStorageArea(SecurityOriginData&& securityOrigin) 125 126 { 126 return *m_storageAreaMap.ensure(securityOrigin, [this, securityOrigin]() mutable {127 return *m_storageAreaMap.ensure(securityOrigin, [this, &securityOrigin]() mutable { 127 128 return StorageArea::create(nullptr, WTFMove(securityOrigin), m_quotaInBytes); 128 129 }).iterator->value.copyRef(); … … 143 144 void clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin) 144 145 { 145 for (auto& storageArea : m_storageAreaMap.values()) { 146 if (storageArea->securityOrigin() == securityOrigin) 147 storageArea->clear(); 148 } 146 auto originAndStorageArea = m_storageAreaMap.find(securityOrigin); 147 if (originAndStorageArea != m_storageAreaMap.end()) 148 originAndStorageArea->value->clear(); 149 149 } 150 150 … … 235 235 } 236 236 237 void StorageManager::StorageArea::setItems(const HashMap<String, String>& items) 238 { 239 ASSERT(!m_localStorageDatabase); 240 for (auto& item : items) { 241 String oldValue; 242 bool quotaException; 243 auto newStorageMap = m_storageMap->setItem(item.key, item.value, oldValue, quotaException); 244 if (newStorageMap) 245 m_storageMap = WTFMove(newStorageMap); 246 247 if (quotaException) 248 return; 249 } 250 } 251 237 252 void StorageManager::StorageArea::removeItem(IPC::Connection::UniqueID sourceConnection, uint64_t sourceStorageAreaID, const String& key, const String& urlString) 238 253 { … … 320 335 } 321 336 322 Ref<StorageManager::LocalStorageNamespace> StorageManager::LocalStorageNamespace::create(StorageManager *storageManager, uint64_t storageNamespaceID)337 Ref<StorageManager::LocalStorageNamespace> StorageManager::LocalStorageNamespace::create(StorageManager& storageManager, uint64_t storageNamespaceID) 323 338 { 324 339 return adoptRef(*new LocalStorageNamespace(storageManager, storageNamespaceID)); … … 327 342 // FIXME: The quota value is copied from GroupSettings.cpp. 328 343 // We should investigate a way to share it with WebCore. 329 StorageManager::LocalStorageNamespace::LocalStorageNamespace(StorageManager *storageManager, uint64_t storageNamespaceID)344 StorageManager::LocalStorageNamespace::LocalStorageNamespace(StorageManager& storageManager, uint64_t storageNamespaceID) 330 345 : m_storageManager(storageManager) 331 346 , m_storageNamespaceID(storageNamespaceID) … … 341 356 auto StorageManager::LocalStorageNamespace::getOrCreateStorageArea(SecurityOriginData&& securityOrigin) -> Ref<StorageArea> 342 357 { 343 auto& slot = m_storageAreaMap.add(securityOrigin, nullptr).iterator->value; 344 if (slot) 345 return *slot; 346 347 auto storageArea = StorageArea::create(this, WTFMove(securityOrigin), m_quotaInBytes); 348 slot = &storageArea.get(); 349 350 return storageArea; 358 RefPtr<StorageArea> protectedStorageArea; 359 return *m_storageAreaMap.ensure(securityOrigin, [&]() mutable { 360 protectedStorageArea = StorageArea::create(this, WTFMove(securityOrigin), m_quotaInBytes); 361 return protectedStorageArea.get(); 362 }).iterator->value; 351 363 } 352 364 … … 359 371 return; 360 372 361 ASSERT(m_storageManager ->m_localStorageNamespaces.contains(m_storageNamespaceID));362 m_storageManager ->m_localStorageNamespaces.remove(m_storageNamespaceID);373 ASSERT(m_storageManager.m_localStorageNamespaces.contains(m_storageNamespaceID)); 374 m_storageManager.m_localStorageNamespaces.remove(m_storageNamespaceID); 363 375 } 364 376 365 377 void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin) 366 378 { 367 for (const auto& originAndStorageArea : m_storageAreaMap) { 368 if (originAndStorageArea.key == securityOrigin) 369 originAndStorageArea.value->clear(); 370 } 379 auto originAndStorageArea = m_storageAreaMap.find(securityOrigin); 380 if (originAndStorageArea != m_storageAreaMap.end()) 381 originAndStorageArea->value->clear(); 371 382 } 372 383 … … 384 395 bool isEmpty() const { return m_storageAreaMap.isEmpty(); } 385 396 386 Vector<IPC::Connection::UniqueID> allowedConnections() const { return m_allowedConnections; }397 HashSet<IPC::Connection::UniqueID> allowedConnections() const { return m_allowedConnections; } 387 398 void addAllowedConnection(IPC::Connection::UniqueID); 388 399 void removeAllowedConnection(IPC::Connection::UniqueID); … … 406 417 void clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin) 407 418 { 408 for (auto& storageArea : m_storageAreaMap.values()) { 409 if (storageArea->securityOrigin() == securityOrigin) 410 storageArea->clear(); 411 } 419 auto originAndStorageArea = m_storageAreaMap.find(securityOrigin); 420 if (originAndStorageArea != m_storageAreaMap.end()) 421 originAndStorageArea->value->clear(); 412 422 } 413 423 … … 421 431 explicit SessionStorageNamespace(unsigned quotaInBytes); 422 432 423 Vector<IPC::Connection::UniqueID> m_allowedConnections;433 HashSet<IPC::Connection::UniqueID> m_allowedConnections; 424 434 unsigned m_quotaInBytes; 425 435 … … 443 453 void StorageManager::SessionStorageNamespace::addAllowedConnection(IPC::Connection::UniqueID allowedConnection) 444 454 { 445 ASSERT(!m_allowedConnections.contains(allowedConnection)); 446 m_allowedConnections.append(allowedConnection); 455 m_allowedConnections.add(allowedConnection); 447 456 } 448 457 … … 451 460 { 452 461 ASSERT(m_allowedConnections.contains(allowedConnection)); 453 m_allowedConnections.remove All(allowedConnection);462 m_allowedConnections.remove(allowedConnection); 454 463 } 455 464 auto StorageManager::SessionStorageNamespace::getOrCreateStorageArea(SecurityOriginData&& securityOrigin) -> Ref<StorageArea> 456 465 { 457 return *m_storageAreaMap.ensure(securityOrigin, [this, securityOrigin]() mutable {466 return *m_storageAreaMap.ensure(securityOrigin, [this, &securityOrigin]() mutable { 458 467 return StorageArea::create(nullptr, WTFMove(securityOrigin), m_quotaInBytes); 459 468 }).iterator->value.copyRef(); … … 489 498 { 490 499 m_queue->dispatch([this, protectedThis = makeRef(*this), storageNamespaceID, quotaInBytes]() mutable { 491 ASSERT(!m_sessionStorageNamespaces.contains(storageNamespaceID)); 500 if (m_sessionStorageNamespaces.contains(storageNamespaceID)) 501 return; 492 502 493 503 m_sessionStorageNamespaces.set(storageNamespaceID, SessionStorageNamespace::create(quotaInBytes)); … … 499 509 m_queue->dispatch([this, protectedThis = makeRef(*this), storageNamespaceID] { 500 510 ASSERT(m_sessionStorageNamespaces.contains(storageNamespaceID)); 501 m_sessionStorageNamespaces.remove(storageNamespaceID); 511 if (m_sessionStorageNamespaces.get(storageNamespaceID)->allowedConnections().isEmpty()) 512 m_sessionStorageNamespaces.remove(storageNamespaceID); 502 513 }); 503 514 } … … 541 552 } 542 553 543 void StorageManager::processWillOpenConnection( WebProcessProxy& process,IPC::Connection& connection)554 void StorageManager::processWillOpenConnection(IPC::Connection& connection) 544 555 { 545 556 connection.addWorkQueueMessageReceiver(Messages::StorageManager::messageReceiverName(), m_queue.get(), this); 546 557 } 547 558 548 void StorageManager::processDidCloseConnection( WebProcessProxy& process,IPC::Connection& connection)559 void StorageManager::processDidCloseConnection(IPC::Connection& connection) 549 560 { 550 561 connection.removeWorkQueueMessageReceiver(Messages::StorageManager::messageReceiverName()); … … 555 566 if (storageArea.key.first != connectionID) 556 567 continue; 557 568 558 569 storageArea.value->removeListener(storageArea.key.first, storageArea.key.second); 559 570 connectionAndStorageMapIDPairsToRemove.append(storageArea.key); 560 571 } 561 572 562 573 for (auto& pair : connectionAndStorageMapIDPairsToRemove) 563 574 m_storageAreasByConnection.remove(pair); 575 576 Vector<uint64_t> sessionStorageNameSpaceIDsToRemove; 577 for (auto& sessionStorageNamespace : m_sessionStorageNamespaces) { 578 if (sessionStorageNamespace.value->allowedConnections().contains(connectionID)) 579 sessionStorageNamespace.value->removeAllowedConnection(connectionID); 580 581 if (sessionStorageNamespace.value->allowedConnections().isEmpty()) 582 sessionStorageNameSpaceIDsToRemove.append(sessionStorageNamespace.key); 583 } 584 585 for (auto id : sessionStorageNameSpaceIDsToRemove) 586 m_sessionStorageNamespaces.remove(id); 564 587 }); 565 588 } … … 628 651 } 629 652 630 void StorageManager::getLocalStorageOriginDetails(Function<void (Vector<LocalStorageDatabaseTracker::OriginDetails>)>&& completionHandler)653 void StorageManager::getLocalStorageOriginDetails(Function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&& completionHandler) 631 654 { 632 655 m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable { … … 696 719 void StorageManager::createLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& securityOriginData) 697 720 { 721 // FIXME: Replace this check if https://bugs.webkit.org/show_bug.cgi?id=198048 is done. 722 ASSERT(!RunLoop::isMain()); 698 723 ASSERT(!m_isEphemeral); 699 724 std::pair<IPC::Connection::UniqueID, uint64_t> connectionAndStorageMapIDPair(connection.uniqueID(), storageMapID); … … 721 746 void StorageManager::createTransientLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& topLevelOriginData, SecurityOriginData&& origin) 722 747 { 748 ASSERT(!RunLoop::isMain()); 749 723 750 // FIXME: This should be a message check. 724 751 ASSERT(m_storageAreasByConnection.isValidKey({ connection.uniqueID(), storageMapID })); … … 750 777 ASSERT(!slot); 751 778 752 TransientLocalStorageNamespace* transientLocalStorageNamespace = getOrCreateTransientLocalStorageNamespace(storageNamespaceID, WTFMove(topLevelOriginData));779 auto* transientLocalStorageNamespace = getOrCreateTransientLocalStorageNamespace(storageNamespaceID, WTFMove(topLevelOriginData)); 753 780 754 781 auto storageArea = transientLocalStorageNamespace->getOrCreateStorageArea(WTFMove(origin)); … … 760 787 void StorageManager::createSessionStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& securityOriginData) 761 788 { 789 ASSERT(!RunLoop::isMain()); 790 762 791 if (m_isEphemeral) { 763 792 m_ephemeralStorage.add(securityOriginData, WebCore::StorageMap::create(localStorageDatabaseQuotaInBytes)); … … 793 822 void StorageManager::destroyStorageMap(IPC::Connection& connection, uint64_t storageMapID) 794 823 { 824 ASSERT(!RunLoop::isMain()); 825 795 826 std::pair<IPC::Connection::UniqueID, uint64_t> connectionAndStorageMapIDPair(connection.uniqueID(), storageMapID); 796 827 … … 815 846 void StorageManager::getValues(IPC::Connection& connection, WebCore::SecurityOriginData&& securityOriginData, uint64_t storageMapID, uint64_t storageMapSeed, CompletionHandler<void(const HashMap<String, String>&)>&& completionHandler) 816 847 { 817 StorageArea* storageArea = findStorageArea(connection, storageMapID); 848 ASSERT(!RunLoop::isMain()); 849 850 auto* storageArea = findStorageArea(connection, storageMapID); 818 851 if (!storageArea) { 819 852 if (m_isEphemeral) { … … 831 864 void StorageManager::setItem(IPC::Connection& connection, WebCore::SecurityOriginData&& securityOriginData, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& key, const String& value, const String& urlString) 832 865 { 833 StorageArea* storageArea = findStorageArea(connection, storageMapID); 866 ASSERT(!RunLoop::isMain()); 867 868 auto* storageArea = findStorageArea(connection, storageMapID); 834 869 if (!storageArea) { 835 870 if (m_isEphemeral) { … … 849 884 } 850 885 886 void StorageManager::setItems(IPC::Connection& connection, uint64_t storageMapID, const HashMap<String, String>& items) 887 { 888 ASSERT(!RunLoop::isMain()); 889 890 if (auto* storageArea = findStorageArea(connection, storageMapID)) 891 storageArea->setItems(items); 892 } 893 851 894 void StorageManager::removeItem(IPC::Connection& connection, WebCore::SecurityOriginData&& securityOriginData, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& key, const String& urlString) 852 895 { 853 StorageArea* storageArea = findStorageArea(connection, storageMapID); 896 ASSERT(!RunLoop::isMain()); 897 898 auto* storageArea = findStorageArea(connection, storageMapID); 854 899 if (!storageArea) { 855 900 if (m_isEphemeral) { … … 869 914 void StorageManager::clear(IPC::Connection& connection, WebCore::SecurityOriginData&& securityOriginData, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& urlString) 870 915 { 871 StorageArea* storageArea = findStorageArea(connection, storageMapID); 916 ASSERT(!RunLoop::isMain()); 917 918 auto* storageArea = findStorageArea(connection, storageMapID); 872 919 if (!storageArea) { 873 920 if (m_isEphemeral) … … 881 928 } 882 929 883 void StorageManager:: applicationWillTerminate()930 void StorageManager::waitUntilWritesFinished() 884 931 { 885 932 BinarySemaphore semaphore; … … 914 961 return nullptr; 915 962 916 auto& slot = m_localStorageNamespaces.add(storageNamespaceID, nullptr).iterator->value; 917 if (!slot) 918 slot = LocalStorageNamespace::create(this, storageNamespaceID); 919 920 return slot.get(); 963 return m_localStorageNamespaces.ensure(storageNamespaceID, [this, storageNamespaceID]() { 964 return LocalStorageNamespace::create(*this, storageNamespaceID); 965 }).iterator->value.get(); 921 966 } 922 967 … … 926 971 return nullptr; 927 972 928 auto& slot = m_transientLocalStorageNamespaces.add({ storageNamespaceID, WTFMove(topLevelOrigin) }, nullptr).iterator->value; 929 if (!slot) 930 slot = TransientLocalStorageNamespace::create(); 931 932 return slot.get(); 973 return m_transientLocalStorageNamespaces.ensure({ storageNamespaceID, WTFMove(topLevelOrigin) }, [](){ 974 return TransientLocalStorageNamespace::create(); 975 }).iterator->value.get(); 976 } 977 978 void StorageManager::dispatchMessageToQueue(IPC::Connection& connection, IPC::Decoder& decoder) 979 { 980 m_queue->dispatch([this, protectedThis = makeRef(*this), &connection, &decoder] { 981 didReceiveMessage(connection, decoder); 982 }); 983 } 984 985 void StorageManager::dispatchSyncMessageToQueue(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& replyEncoder) 986 { 987 m_queue->dispatch([this, protectedThis = makeRef(*this), &connection, &decoder, replyEncoder = WTFMove(replyEncoder)] () mutable { 988 didReceiveSyncMessage(connection, decoder, replyEncoder); 989 }); 933 990 } 934 991 -
trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h
r245539 r245540 1 1 /* 2 * Copyright (C) 2013 Apple Inc. All rights reserved.2 * Copyright (C) 2013-2019 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 33 33 #include <wtf/Function.h> 34 34 #include <wtf/HashSet.h> 35 #include <wtf/ThreadSafeRefCounted.h>36 35 #include <wtf/text/StringHash.h> 37 36 … … 56 55 void cloneSessionStorageNamespace(uint64_t storageNamespaceID, uint64_t newStorageNamespaceID); 57 56 58 void processWillOpenConnection( WebProcessProxy&,IPC::Connection&);59 void processDidCloseConnection( WebProcessProxy&,IPC::Connection&);60 void applicationWillTerminate();57 void processWillOpenConnection(IPC::Connection&); 58 void processDidCloseConnection(IPC::Connection&); 59 void waitUntilWritesFinished(); 61 60 62 61 void getSessionStorageOrigins(Function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler); … … 70 69 void deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>&, Function<void()>&& completionHandler); 71 70 72 void getLocalStorageOriginDetails(Function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>)>&& completionHandler); 71 void getLocalStorageOriginDetails(Function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&& completionHandler); 72 73 void dispatchMessageToQueue(IPC::Connection&, IPC::Decoder&); 74 void dispatchSyncMessageToQueue(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>& replyEncoder); 73 75 74 76 private: … … 86 88 87 89 void getValues(IPC::Connection&, WebCore::SecurityOriginData&&, uint64_t storageMapID, uint64_t storageMapSeed, CompletionHandler<void(const HashMap<String, String>&)>&&); 88 void setItem(IPC::Connection&, WebCore::SecurityOriginData&&, uint64_t storageAreaID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& key, const String& value, const String& urlString); 90 void setItem(IPC::Connection&, WebCore::SecurityOriginData&&, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& key, const String& value, const String& urlString); 91 void setItems(IPC::Connection&, uint64_t storageMapID, const HashMap<String, String>& items); 89 92 void removeItem(IPC::Connection&, WebCore::SecurityOriginData&&, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& key, const String& urlString); 90 93 void clear(IPC::Connection&, WebCore::SecurityOriginData&&, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, const String& urlString); … … 113 116 HashMap<WebCore::SecurityOriginData, Ref<WebCore::StorageMap>> m_ephemeralStorage; 114 117 bool m_isEphemeral { false }; 118 115 119 }; 116 120 -
trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.messages.in
r245539 r245540 1 # Copyright (C) 2013 Apple Inc. All rights reserved.1 # Copyright (C) 2013-2019 Apple Inc. All rights reserved. 2 2 # 3 3 # Redistribution and use in source and binary forms, with or without … … 30 30 31 31 SetItem(struct WebCore::SecurityOriginData securityOriginData, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, String key, String value, String urlString) WantsConnection 32 SetItems(uint64_t storageMapID, HashMap<String, String> items) WantsConnection 32 33 RemoveItem(struct WebCore::SecurityOriginData securityOriginData, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, String key, String urlString) WantsConnection 33 34 Clear(struct WebCore::SecurityOriginData securityOriginData, uint64_t storageMapID, uint64_t sourceStorageAreaID, uint64_t storageMapSeed, String urlString) WantsConnection -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm
r244475 r245540 876 876 877 877 NetworkSessionCocoa::NetworkSessionCocoa(NetworkProcess& networkProcess, NetworkSessionCreationParameters&& parameters) 878 : NetworkSession(networkProcess, parameters.sessionID )878 : NetworkSession(networkProcess, parameters.sessionID, parameters.localStorageDirectory, parameters.localStorageDirectoryExtensionHandle) 879 879 , m_boundInterfaceIdentifier(parameters.boundInterfaceIdentifier) 880 880 , m_sourceApplicationBundleIdentifier(parameters.sourceApplicationBundleIdentifier) -
trunk/Source/WebKit/NetworkProcess/curl/NetworkSessionCurl.cpp
r239680 r245540 39 39 40 40 NetworkSessionCurl::NetworkSessionCurl(NetworkProcess& networkProcess, NetworkSessionCreationParameters&& parameters) 41 : NetworkSession(networkProcess, parameters.sessionID )41 : NetworkSession(networkProcess, parameters.sessionID, parameters.localStorageDirectory, parameters.localStorageDirectoryExtensionHandle) 42 42 { 43 43 if (!parameters.cookiePersistentStorageFile.isEmpty()) -
trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp
r240785 r245540 38 38 39 39 NetworkSessionSoup::NetworkSessionSoup(NetworkProcess& networkProcess, NetworkSessionCreationParameters&& parameters) 40 : NetworkSession(networkProcess, parameters.sessionID )40 : NetworkSession(networkProcess, parameters.sessionID, parameters.localStorageDirectory, parameters.localStorageDirectoryExtensionHandle) 41 41 { 42 42 networkStorageSession().setCookieObserverHandler([this] { -
trunk/Source/WebKit/PlatformMac.cmake
r245241 r245540 32 32 33 33 NetworkProcess/Downloads/cocoa/DownloadCocoa.mm 34 35 NetworkProcess/WebStorage/StorageManager.cpp 34 36 35 37 NetworkProcess/cache/NetworkCacheDataCocoa.mm -
trunk/Source/WebKit/PlatformWin.cmake
r245536 r245540 9 9 NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp 10 10 NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp 11 12 NetworkProcess/WebStorage/StorageManager.cpp 11 13 12 14 NetworkProcess/win/NetworkProcessMainWin.cpp -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r245183 r245540 132 132 #endif 133 133 encoder << backgroundColor; 134 encoder << oldPageID; 134 135 } 135 136 … … 392 393 parameters.backgroundColor = WTFMove(*backgroundColor); 393 394 395 Optional<Optional<uint64_t>> oldPageID; 396 decoder >> oldPageID; 397 if (!oldPageID) 398 return WTF::nullopt; 399 parameters.oldPageID = WTFMove(*oldPageID); 400 394 401 return parameters; 395 402 } -
trunk/Source/WebKit/Shared/WebPageCreationParameters.h
r245183 r245540 202 202 203 203 Optional<WebCore::Color> backgroundColor; 204 205 Optional<uint64_t> oldPageID; 204 206 }; 205 207 -
trunk/Source/WebKit/Shared/WebsiteData/WebsiteData.cpp
r244572 r245540 100 100 return WebsiteDataProcessType::UI; 101 101 case WebsiteDataType::SessionStorage: 102 return WebsiteDataProcessType:: UI;102 return WebsiteDataProcessType::Network; 103 103 case WebsiteDataType::LocalStorage: 104 return WebsiteDataProcessType:: UI;104 return WebsiteDataProcessType::Network; 105 105 case WebsiteDataType::WebSQLDatabases: 106 106 return WebsiteDataProcessType::UI; -
trunk/Source/WebKit/Sources.txt
r245241 r245540 65 65 NetworkProcess/ServiceWorker/WebSWServerConnection.cpp @no-unify 66 66 NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp @no-unify 67 68 NetworkProcess/WebStorage/LocalStorageDatabase.cpp 69 NetworkProcess/WebStorage/LocalStorageDatabaseTracker.cpp 70 NetworkProcess/WebStorage/StorageManager.cpp 67 71 68 72 NetworkProcess/cache/CacheStorageEngine.cpp … … 411 415 UIProcess/WebAuthentication/WebAuthenticatorCoordinatorProxy.cpp 412 416 413 UIProcess/WebStorage/LocalStorageDatabase.cpp414 UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp415 UIProcess/WebStorage/StorageManager.cpp416 417 417 UIProcess/WebsiteData/WebDeviceOrientationAndMotionAccessController.cpp 418 418 UIProcess/WebsiteData/WebsiteDataRecord.cpp -
trunk/Source/WebKit/SourcesCocoa.txt
r245501 r245540 42 42 NetworkProcess/EntryPoint/Cocoa/Daemon/DaemonEntryPoint.mm 43 43 NetworkProcess/EntryPoint/Cocoa/XPCService/NetworkServiceEntryPoint.mm 44 45 NetworkProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm 44 46 45 47 NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm … … 489 491 UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm 490 492 491 UIProcess/WebStorage/ios/LocalStorageDatabaseTrackerIOS.mm492 493 493 WebProcess/API/Cocoa/WKWebProcess.cpp 494 494 -
trunk/Source/WebKit/UIProcess/API/C/WKKeyValueStorageManager.cpp
r238802 r245540 32 32 #include "StorageManager.h" 33 33 #include "WKAPICast.h" 34 #include "WebsiteDataRecord.h" 34 35 #include "WebsiteDataStore.h" 35 36 #include <wtf/RunLoop.h> … … 63 64 64 65 { 65 StorageManager* storageManager = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore().storageManager();66 if (!storageManager) {67 RunLoop::main().dispatch([context, callback] {68 callback(toAPI(API::Array::create().ptr()), nullptr, context);69 });70 return;71 }66 auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore(); 67 websiteDataStore.fetchData({ WebsiteDataType::LocalStorage, WebsiteDataType::SessionStorage }, { }, [context, callback](auto dataRecords) { 68 Vector<RefPtr<API::Object>> securityOrigins; 69 for (const auto& dataRecord : dataRecords) { 70 for (const auto& origin : dataRecord.origins) 71 securityOrigins.append(API::SecurityOrigin::create(origin.securityOrigin())); 72 } 72 73 73 storageManager->getLocalStorageOrigins([context, callback](auto&& securityOrigins) { 74 Vector<RefPtr<API::Object>> webSecurityOrigins; 75 webSecurityOrigins.reserveInitialCapacity(securityOrigins.size()); 76 for (auto& origin : securityOrigins) 77 webSecurityOrigins.uncheckedAppend(API::SecurityOrigin::create(origin.securityOrigin())); 78 79 callback(toAPI(API::Array::create(WTFMove(webSecurityOrigins)).ptr()), nullptr, context); 74 callback(toAPI(API::Array::create(WTFMove(securityOrigins)).ptr()), nullptr, context); 80 75 }); 81 76 } … … 83 78 void WKKeyValueStorageManagerGetStorageDetailsByOrigin(WKKeyValueStorageManagerRef keyValueStorageManager, void* context, WKKeyValueStorageManagerGetStorageDetailsByOriginFunction callback) 84 79 { 85 StorageManager* storageManager = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore().storageManager(); 86 if (!storageManager) { 87 RunLoop::main().dispatch([context, callback] { 88 callback(toAPI(API::Array::create().ptr()), nullptr, context); 89 }); 90 return; 91 } 80 auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore(); 81 websiteDataStore.getLocalStorageDetails([context, callback](auto&& details) { 82 Vector<RefPtr<API::Object>> result; 83 result.reserveInitialCapacity(details.size()); 92 84 93 storageManager->getLocalStorageOriginDetails([context, callback](auto storageDetails) { 94 HashMap<String, RefPtr<API::Object>> detailsMap; 95 Vector<RefPtr<API::Object>> result; 96 result.reserveInitialCapacity(storageDetails.size()); 85 for (const auto& detail : details) { 86 HashMap<String, RefPtr<API::Object>> detailMap; 87 RefPtr<API::Object> origin = API::SecurityOrigin::create(WebCore::SecurityOriginData::fromDatabaseIdentifier(detail.originIdentifier)->securityOrigin()); 97 88 98 for (const auto& originDetails : storageDetails) { 99 HashMap<String, RefPtr<API::Object>> detailsMap; 89 detailMap.set(toImpl(WKKeyValueStorageManagerGetOriginKey())->string(), origin); 90 if (detail.creationTime) 91 detailMap.set(toImpl(WKKeyValueStorageManagerGetCreationTimeKey())->string(), API::Double::create(detail.creationTime->secondsSinceEpoch().value())); 92 if (detail.modificationTime) 93 detailMap.set(toImpl(WKKeyValueStorageManagerGetModificationTimeKey())->string(), API::Double::create(detail.modificationTime->secondsSinceEpoch().value())); 100 94 101 RefPtr<API::Object> origin = API::SecurityOrigin::create(WebCore::SecurityOriginData::fromDatabaseIdentifier(originDetails.originIdentifier)->securityOrigin()); 102 103 detailsMap.set(toImpl(WKKeyValueStorageManagerGetOriginKey())->string(), origin); 104 if (originDetails.creationTime) 105 detailsMap.set(toImpl(WKKeyValueStorageManagerGetCreationTimeKey())->string(), API::Double::create(originDetails.creationTime->secondsSinceEpoch().value())); 106 if (originDetails.modificationTime) 107 detailsMap.set(toImpl(WKKeyValueStorageManagerGetModificationTimeKey())->string(), API::Double::create(originDetails.modificationTime->secondsSinceEpoch().value())); 108 109 result.uncheckedAppend(API::Dictionary::create(WTFMove(detailsMap))); 95 result.uncheckedAppend(API::Dictionary::create(WTFMove(detailMap))); 110 96 } 111 97 … … 116 102 void WKKeyValueStorageManagerDeleteEntriesForOrigin(WKKeyValueStorageManagerRef keyValueStorageManager, WKSecurityOriginRef origin) 117 103 { 118 StorageManager* storageManager = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore().storageManager();119 if (!storageManager)120 return;121 122 storageManager->deleteLocalStorageEntriesForOrigin(toImpl(origin)->securityOrigin().data());104 auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore(); 105 WebsiteDataRecord dataRecord; 106 dataRecord.add(WebsiteDataType::LocalStorage, toImpl(origin)->securityOrigin().data()); 107 dataRecord.add(WebsiteDataType::SessionStorage, toImpl(origin)->securityOrigin().data()); 108 websiteDataStore.removeData({ WebsiteDataType::LocalStorage, WebsiteDataType::SessionStorage }, { dataRecord }, [] { }); 123 109 } 124 110 125 111 void WKKeyValueStorageManagerDeleteAllEntries(WKKeyValueStorageManagerRef keyValueStorageManager) 126 112 { 127 StorageManager* storageManager = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore().storageManager(); 128 if (!storageManager) 129 return; 130 131 storageManager->deleteLocalStorageOriginsModifiedSince(-WallTime::infinity(), [] { }); 113 auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore(); 114 websiteDataStore.removeData({ WebsiteDataType::LocalStorage, WebsiteDataType::SessionStorage }, -WallTime::infinity(), [] { }); 132 115 } -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r245334 r245540 567 567 } 568 568 569 void NetworkProcessProxy::hasLocalStorage(PAL::SessionID sessionID, const RegistrableDomain& resourceDomain, CompletionHandler<void(bool)>&& completionHandler) 570 { 571 if (!canSendMessage()) { 572 completionHandler(false); 573 return; 574 } 575 576 sendWithAsyncReply(Messages::NetworkProcess::HasLocalStorage(sessionID, resourceDomain), WTFMove(completionHandler)); 577 } 578 569 579 void NetworkProcessProxy::setAgeCapForClientSideCookies(PAL::SessionID sessionID, Optional<Seconds> seconds, CompletionHandler<void()>&& completionHandler) 570 580 { … … 1197 1207 #endif 1198 1208 1209 void NetworkProcessProxy::getLocalStorageDetails(PAL::SessionID sessionID, CompletionHandler<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&& completionHandler) 1210 { 1211 if (!canSendMessage()) { 1212 completionHandler({ }); 1213 return; 1214 } 1215 1216 sendWithAsyncReply(Messages::NetworkProcess::GetLocalStorageOriginDetails(sessionID), WTFMove(completionHandler)); 1217 } 1218 1199 1219 } // namespace WebKit 1200 1220 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r245025 r245540 97 97 void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebKit::WebsiteDataType>, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, const Vector<String>& HSTSCacheHostNames, CompletionHandler<void()>&&); 98 98 99 void getLocalStorageDetails(PAL::SessionID, CompletionHandler<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&&); 100 99 101 #if ENABLE(RESOURCE_LOAD_STATISTICS) 100 102 void clearPrevalentResource(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void()>&&); … … 103 105 void updatePrevalentDomainsToBlockCookiesFor(PAL::SessionID, const Vector<RegistrableDomain>&, CompletionHandler<void()>&&); 104 106 void hasHadUserInteraction(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void(bool)>&&); 107 void hasLocalStorage(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void(bool)>&&); 105 108 void isGrandfathered(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void(bool)>&&); 106 109 void isPrevalentResource(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void(bool)>&&); -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r245507 r245540 5029 5029 reply(newPage->pageID(), newPage->creationParameters(m_process, *newPage->drawingArea())); 5030 5030 5031 WebsiteDataStore::cloneSessionData(*this, *newPage);5032 5031 newPage->m_shouldSuppressAppLinksInNextNavigationPolicyDecision = hostsAreEqual(URL({ }, mainFrameURL), request.url()); 5033 5032 -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r245255 r245540 575 575 #endif 576 576 577 auto localStorageDirectory = m_websiteDataStore ? m_websiteDataStore->websiteDataStore().resolvedLocalStorageDirectory() : nullString(); 578 if (!localStorageDirectory) 579 localStorageDirectory = API::WebsiteDataStore::defaultLocalStorageDirectory(); 580 parameters.defaultDataStoreParameters.networkSessionParameters.localStorageDirectory = localStorageDirectory; 581 SandboxExtension::createHandleForReadWriteDirectory(localStorageDirectory, parameters.defaultDataStoreParameters.networkSessionParameters.localStorageDirectoryExtensionHandle); 582 577 583 if (m_websiteDataStore) 578 584 parameters.defaultDataStoreParameters.networkSessionParameters.resourceLoadStatisticsDirectory = m_websiteDataStore->websiteDataStore().resolvedResourceLoadStatisticsDirectory(); -
trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
r243911 r245540 49 49 static id terminationObserver; 50 50 51 static Vector<WebsiteDataStore*>& dataStoresWithStorageManagers()52 { 53 static NeverDestroyed< Vector<WebsiteDataStore*>> dataStoresWithStorageManagers;54 55 return dataStores WithStorageManagers;51 static HashSet<WebsiteDataStore*>& dataStores() 52 { 53 static NeverDestroyed<HashSet<WebsiteDataStore*>> dataStores; 54 55 return dataStores; 56 56 } 57 57 … … 107 107 if (!resourceLoadStatisticsDirectory.isEmpty()) 108 108 SandboxExtension::createHandleForReadWriteDirectory(resourceLoadStatisticsDirectory, resourceLoadStatisticsDirectoryHandle); 109 110 auto localStorageDirectory = resolvedLocalStorageDirectory(); 111 SandboxExtension::Handle localStorageDirectoryExtensionHandle; 112 if (!localStorageDirectory.isEmpty()) 113 SandboxExtension::createHandleForReadWriteDirectory(localStorageDirectory, localStorageDirectoryExtensionHandle); 109 114 110 115 bool shouldIncludeLocalhostInResourceLoadStatistics = isSafari; … … 127 132 shouldIncludeLocalhostInResourceLoadStatistics, 128 133 enableResourceLoadStatisticsDebugMode, 129 WTFMove(resourceLoadStatisticsManualPrevalentResource) 134 WTFMove(resourceLoadStatisticsManualPrevalentResource), 135 WTFMove(localStorageDirectory), 136 WTFMove(localStorageDirectoryExtensionHandle) 130 137 }; 131 138 networkingHasBegun(); … … 169 176 void WebsiteDataStore::platformInitialize() 170 177 { 171 if (!m_storageManager)172 return;173 174 178 if (!terminationObserver) { 175 ASSERT(dataStores WithStorageManagers().isEmpty());179 ASSERT(dataStores().isEmpty()); 176 180 177 181 #if PLATFORM(MAC) … … 181 185 #endif 182 186 terminationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:notificationName object:nil queue:nil usingBlock:^(NSNotification *note) { 183 for (auto& dataStore : dataStoresWithStorageManagers()) { 184 dataStore->m_storageManager->applicationWillTerminate(); 187 for (auto& dataStore : dataStores()) { 185 188 #if ENABLE(RESOURCE_LOAD_STATISTICS) 186 189 if (dataStore->m_resourceLoadStatistics) … … 191 194 } 192 195 193 ASSERT(!dataStores WithStorageManagers().contains(this));194 dataStores WithStorageManagers().append(this);196 ASSERT(!dataStores().contains(this)); 197 dataStores().add(this); 195 198 } 196 199 … … 202 205 #endif 203 206 204 if (!m_storageManager) 205 return; 206 207 // FIXME: Rename applicationWillTerminate to something that better indicates what StorageManager does (waits for pending writes to finish). 208 m_storageManager->applicationWillTerminate(); 209 210 ASSERT(dataStoresWithStorageManagers().contains(this)); 211 dataStoresWithStorageManagers().removeFirst(this); 212 213 if (dataStoresWithStorageManagers().isEmpty()) { 207 ASSERT(dataStores().contains(this)); 208 dataStores().remove(this); 209 210 if (dataStores().isEmpty()) { 214 211 [[NSNotificationCenter defaultCenter] removeObserver:terminationObserver]; 215 212 terminationObserver = nil; -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
r245025 r245540 36 36 #include "ShouldGrandfatherStatistics.h" 37 37 #include "StorageAccessStatus.h" 38 #include "StorageManager.h"39 38 #include "WebProcessCache.h" 40 39 #include "WebProcessMessages.h" … … 97 96 , m_resolvedConfiguration(WTFMove(configuration)) 98 97 , m_configuration(m_resolvedConfiguration->copy()) 99 , m_storageManager(StorageManager::create(m_configuration->localStorageDirectory()))100 98 , m_deviceIdHashSaltStorage(DeviceIdHashSaltStorage::create(isPersistent() ? m_configuration->deviceIdHashSaltsStorageDirectory() : String())) 101 99 , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore")) … … 121 119 , m_resolvedConfiguration(WebsiteDataStoreConfiguration::create()) 122 120 , m_configuration(m_resolvedConfiguration->copy()) 123 , m_storageManager(StorageManager::create({ }))124 121 , m_deviceIdHashSaltStorage(DeviceIdHashSaltStorage::create(isPersistent() ? m_configuration->deviceIdHashSaltsStorageDirectory() : String())) 125 122 , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore")) … … 208 205 } 209 206 210 void WebsiteDataStore::cloneSessionData(WebPageProxy& sourcePage, WebPageProxy& newPage)211 {212 auto& sourceDataStore = sourcePage.websiteDataStore();213 auto& newDataStore = newPage.websiteDataStore();214 215 // FIXME: Handle this.216 if (&sourceDataStore != &newDataStore)217 return;218 219 if (!sourceDataStore.m_storageManager)220 return;221 222 sourceDataStore.m_storageManager->cloneSessionStorageNamespace(sourcePage.pageID(), newPage.pageID());223 }224 225 207 enum class ProcessAccessType { 226 208 None, … … 246 228 processAccessType = std::max(processAccessType, ProcessAccessType::Launch); 247 229 230 if (dataTypes.contains(WebsiteDataType::SessionStorage)) 231 processAccessType = std::max(processAccessType, ProcessAccessType::OnlyIfLaunched); 232 233 if (dataTypes.contains(WebsiteDataType::LocalStorage)) { 234 if (isNonPersistentStore) 235 processAccessType = std::max(processAccessType, ProcessAccessType::OnlyIfLaunched); 236 else 237 processAccessType = std::max(processAccessType, ProcessAccessType::Launch); 238 } 239 240 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=198050. 248 241 if (dataTypes.contains(WebsiteDataType::DOMCache)) 249 242 processAccessType = std::max(processAccessType, ProcessAccessType::Launch); … … 482 475 }); 483 476 } 484 }485 486 if (dataTypes.contains(WebsiteDataType::SessionStorage) && m_storageManager) {487 callbackAggregator->addPendingCallback();488 489 m_storageManager->getSessionStorageOrigins([callbackAggregator](HashSet<WebCore::SecurityOriginData>&& origins) {490 WebsiteData websiteData;491 492 while (!origins.isEmpty())493 websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataType::SessionStorage, 0 });494 495 callbackAggregator->removePendingCallback(WTFMove(websiteData));496 });497 }498 499 if (dataTypes.contains(WebsiteDataType::LocalStorage) && m_storageManager) {500 callbackAggregator->addPendingCallback();501 502 m_storageManager->getLocalStorageOrigins([callbackAggregator](HashSet<WebCore::SecurityOriginData>&& origins) {503 WebsiteData websiteData;504 505 while (!origins.isEmpty())506 websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataType::LocalStorage, 0 });507 508 callbackAggregator->removePendingCallback(WTFMove(websiteData));509 });510 477 } 511 478 … … 822 789 } 823 790 824 if (dataTypes.contains(WebsiteDataType::SessionStorage) && m_storageManager) {825 callbackAggregator->addPendingCallback();826 827 m_storageManager->deleteSessionStorageOrigins([callbackAggregator] {828 callbackAggregator->removePendingCallback();829 });830 }831 832 if (dataTypes.contains(WebsiteDataType::LocalStorage) && m_storageManager) {833 callbackAggregator->addPendingCallback();834 835 m_storageManager->deleteLocalStorageOriginsModifiedSince(modifiedSince, [callbackAggregator] {836 callbackAggregator->removePendingCallback();837 });838 }839 840 791 if (dataTypes.contains(WebsiteDataType::DeviceIdHashSalt) || (dataTypes.contains(WebsiteDataType::Cookies))) { 841 792 callbackAggregator->addPendingCallback(); … … 1102 1053 } 1103 1054 1104 if (dataTypes.contains(WebsiteDataType::SessionStorage) && m_storageManager) {1105 callbackAggregator->addPendingCallback();1106 1107 m_storageManager->deleteSessionStorageEntriesForOrigins(origins, [callbackAggregator] {1108 callbackAggregator->removePendingCallback();1109 });1110 }1111 1112 if (dataTypes.contains(WebsiteDataType::LocalStorage) && m_storageManager) {1113 callbackAggregator->addPendingCallback();1114 1115 m_storageManager->deleteLocalStorageEntriesForOrigins(origins, [callbackAggregator] {1116 callbackAggregator->removePendingCallback();1117 });1118 }1119 1120 1055 if (dataTypes.contains(WebsiteDataType::DeviceIdHashSalt) || (dataTypes.contains(WebsiteDataType::Cookies))) { 1121 1056 callbackAggregator->addPendingCallback(); … … 1796 1731 void WebsiteDataStore::hasLocalStorageForTesting(const URL& url, CompletionHandler<void(bool)>&& completionHandler) const 1797 1732 { 1798 if (!m_storageManager) { 1799 completionHandler(false); 1800 return; 1801 } 1802 1803 m_storageManager->getLocalStorageOrigins([url, completionHandler = WTFMove(completionHandler)](HashSet<WebCore::SecurityOriginData>&& origins) mutable { 1804 for (auto& origin : origins) { 1805 if (origin.host == url.host()) { 1806 completionHandler(true); 1807 return; 1808 } 1809 } 1810 1811 completionHandler(false); 1812 }); 1733 for (auto& processPool : processPools()) { 1734 if (auto* networkProcess = processPool->networkProcess()) { 1735 networkProcess->hasLocalStorage(m_sessionID, WebCore::RegistrableDomain { url }, WTFMove(completionHandler)); 1736 ASSERT(processPools().size() == 1); 1737 break; 1738 } 1739 } 1740 ASSERT(!completionHandler); 1813 1741 } 1814 1742 #endif // ENABLE(RESOURCE_LOAD_STATISTICS) … … 1841 1769 } 1842 1770 1843 void WebsiteDataStore::webPageWasAdded(WebPageProxy& webPageProxy)1844 {1845 if (m_storageManager)1846 m_storageManager->createSessionStorageNamespace(webPageProxy.pageID(), std::numeric_limits<unsigned>::max());1847 }1848 1849 void WebsiteDataStore::webPageWasInvalidated(WebPageProxy& webPageProxy)1850 {1851 if (m_storageManager)1852 m_storageManager->destroySessionStorageNamespace(webPageProxy.pageID());1853 }1854 1855 void WebsiteDataStore::webProcessWillOpenConnection(WebProcessProxy& webProcessProxy, IPC::Connection& connection)1856 {1857 if (m_storageManager)1858 m_storageManager->processWillOpenConnection(webProcessProxy, connection);1859 }1860 1861 void WebsiteDataStore::webPageWillOpenConnection(WebPageProxy& webPageProxy, IPC::Connection& connection)1862 {1863 if (m_storageManager)1864 m_storageManager->addAllowedSessionStorageNamespaceConnection(webPageProxy.pageID(), connection);1865 }1866 1867 void WebsiteDataStore::webPageDidCloseConnection(WebPageProxy& webPageProxy, IPC::Connection& connection)1868 {1869 if (m_storageManager)1870 m_storageManager->removeAllowedSessionStorageNamespaceConnection(webPageProxy.pageID(), connection);1871 }1872 1873 void WebsiteDataStore::webProcessDidCloseConnection(WebProcessProxy& webProcessProxy, IPC::Connection& connection)1874 {1875 if (m_storageManager)1876 m_storageManager->processDidCloseConnection(webProcessProxy, connection);1877 }1878 1879 1771 bool WebsiteDataStore::isAssociatedProcessPool(WebProcessPool& processPool) const 1880 1772 { … … 2108 2000 resolveDirectoriesIfNecessary(); 2109 2001 2002 auto localStorageDirectory = resolvedLocalStorageDirectory(); 2003 if (!localStorageDirectory.isEmpty()) { 2004 parameters.networkSessionParameters.localStorageDirectory = localStorageDirectory; 2005 SandboxExtension::createHandleForReadWriteDirectory(localStorageDirectory, parameters.networkSessionParameters.localStorageDirectoryExtensionHandle); 2006 } 2007 2110 2008 #if ENABLE(INDEXED_DATABASE) 2111 2009 parameters.indexedDatabaseDirectory = resolvedIndexedDatabaseDirectory(); … … 2183 2081 } 2184 2082 2185 } 2083 void WebsiteDataStore::getLocalStorageDetails(Function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&& completionHandler) 2084 { 2085 if (!isPersistent()) { 2086 completionHandler({ }); 2087 return; 2088 } 2089 2090 for (auto& processPool : processPools()) { 2091 processPool->ensureNetworkProcess(this); 2092 processPool->networkProcess()->getLocalStorageDetails(m_sessionID, [completionHandler = WTFMove(completionHandler)](auto&& details) { 2093 completionHandler(WTFMove(details)); 2094 }); 2095 // FIXME: Support fetching from multiple pools. 2096 break; 2097 } 2098 ASSERT(!completionHandler); 2099 } 2100 2101 } -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
r245025 r245540 26 26 #pragma once 27 27 28 #include "LocalStorageDatabaseTracker.h" 28 29 #include "NetworkSessionCreationParameters.h" 29 30 #include "WebDeviceOrientationAndMotionAccessController.h" … … 72 73 class AuthenticatorManager; 73 74 class SecKeyProxyStore; 74 class StorageManager;75 75 class DeviceIdHashSaltStorage; 76 76 class WebPageProxy; … … 123 123 #endif 124 124 125 static void cloneSessionData(WebPageProxy& sourcePage, WebPageProxy& newPage);126 127 125 void fetchData(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, Function<void(Vector<WebsiteDataRecord>)>&& completionHandler); 128 126 void removeData(OptionSet<WebsiteDataType>, WallTime modifiedSince, Function<void()>&& completionHandler); 129 127 void removeData(OptionSet<WebsiteDataType>, const Vector<WebsiteDataRecord>&, Function<void()>&& completionHandler); 128 129 void getLocalStorageDetails(Function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>&&); 130 130 131 131 #if ENABLE(RESOURCE_LOAD_STATISTICS) … … 180 180 void resolveDirectoriesIfNecessary(); 181 181 const String& resolvedApplicationCacheDirectory() const { return m_resolvedConfiguration->applicationCacheDirectory(); } 182 const String& resolvedLocalStorageDirectory() const { return m_resolvedConfiguration->localStorageDirectory(); } 182 183 const String& resolvedMediaCacheDirectory() const { return m_resolvedConfiguration->mediaCacheDirectory(); } 183 184 const String& resolvedMediaKeysDirectory() const { return m_resolvedConfiguration->mediaKeysStorageDirectory(); } … … 189 190 const String& resolvedResourceLoadStatisticsDirectory() const { return m_resolvedConfiguration->resourceLoadStatisticsDirectory(); } 190 191 191 StorageManager* storageManager() { return m_storageManager.get(); }192 193 192 DeviceIdHashSaltStorage& deviceIdHashSaltStorage() { return m_deviceIdHashSaltStorage.get(); } 194 193 … … 266 265 void fetchDataAndApply(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, RefPtr<WorkQueue>&&, Function<void(Vector<WebsiteDataRecord>)>&& apply); 267 266 268 // WebProcessLifetimeObserver.269 void webPageWasAdded(WebPageProxy&) override;270 void webPageWasInvalidated(WebPageProxy&) override;271 void webProcessWillOpenConnection(WebProcessProxy&, IPC::Connection&) override;272 void webPageWillOpenConnection(WebPageProxy&, IPC::Connection&) override;273 void webPageDidCloseConnection(WebPageProxy&, IPC::Connection&) override;274 void webProcessDidCloseConnection(WebProcessProxy&, IPC::Connection&) override;275 276 267 void platformInitialize(); 277 268 void platformDestroy(); … … 300 291 bool m_hasResolvedDirectories { false }; 301 292 302 const RefPtr<StorageManager> m_storageManager;303 293 const Ref<DeviceIdHashSaltStorage> m_deviceIdHashSaltStorage; 304 294 -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r245501 r245540 153 153 1A1B0EB618A424950038481A /* WKNavigationResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1B0EB418A424950038481A /* WKNavigationResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; 154 154 1A1B0EB818A424CD0038481A /* WKNavigationResponseInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1B0EB718A424CD0038481A /* WKNavigationResponseInternal.h */; }; 155 1A1D8BA21731A36300141DA4 /* LocalStorageDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1D8BA01731A36300141DA4 /* LocalStorageDatabase.h */; };156 155 1A1DC340196346D700FF7059 /* LegacySessionStateCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 31607F3819627002009B87DA /* LegacySessionStateCoding.h */; }; 157 156 1A1E093418861D3800D2DC49 /* WebProgressTrackerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1E093218861D3800D2DC49 /* WebProgressTrackerClient.h */; }; … … 196 195 1A445BA3184D5FCF004B3414 /* WKContextDownloadClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A445BA2184D5FCF004B3414 /* WKContextDownloadClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 197 196 1A445BA5184D5FDA004B3414 /* WKContextConnectionClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A445BA4184D5FDA004B3414 /* WKContextConnectionClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 198 1A44B95C16B73F9F00B7BBD8 /* StorageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A44B95A16B73F9F00B7BBD8 /* StorageManager.h */; };199 197 1A4832CC1A9BC465008B4DFE /* WKWebsiteDataRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4832CA1A9BC465008B4DFE /* WKWebsiteDataRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; 200 198 1A4832CE1A9BC484008B4DFE /* WKWebsiteDataRecordInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A4832CD1A9BC484008B4DFE /* WKWebsiteDataRecordInternal.h */; }; … … 246 244 1A8B66B01BC43C860082DF77 /* PageLoadStateObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A8B66AE1BC43C860082DF77 /* PageLoadStateObserver.h */; }; 247 245 1A8B66B41BC45B010082DF77 /* WKBundleMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A8B66B21BC45B010082DF77 /* WKBundleMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; 248 1A8C728D1738477C000A6554 /* LocalStorageDatabaseTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A8C728B1738477C000A6554 /* LocalStorageDatabaseTracker.h */; };249 246 1A8E7D3C18C15149005A702A /* VisitedLinkTableControllerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A8E7D3A18C15149005A702A /* VisitedLinkTableControllerMessageReceiver.cpp */; }; 250 247 1A8E7D3D18C15149005A702A /* VisitedLinkTableControllerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A8E7D3B18C15149005A702A /* VisitedLinkTableControllerMessages.h */; }; … … 1260 1257 93A88B3B1BC710D900ABA5C2 /* _WKHitTestResultInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 93A88B3A1BC710D900ABA5C2 /* _WKHitTestResultInternal.h */; }; 1261 1258 93A88B461BC8829300ABA5C2 /* APIHitTestResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 93A88B431BC8828C00ABA5C2 /* APIHitTestResult.h */; }; 1259 93B2614D227D149E00B97A76 /* StorageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B26149227D147200B97A76 /* StorageManager.h */; }; 1260 93B2614E227D14B100B97A76 /* LocalStorageDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B26145227D147000B97A76 /* LocalStorageDatabase.h */; }; 1261 93B2614F227D14B100B97A76 /* LocalStorageDatabaseTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B26146227D147100B97A76 /* LocalStorageDatabaseTracker.h */; }; 1262 1262 93BDEB01171DD7AF00BFEE1B /* WKPageLoadTypesPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 93BDEB00171DD7AF00BFEE1B /* WKPageLoadTypesPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1263 1263 93E6A4EE1BC5DD3900F8A0E7 /* _WKHitTestResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 93E6A4ED1BC5DD3900F8A0E7 /* _WKHitTestResult.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 2019 2019 1A1D2116191D995C0001619F /* postprocess-framework-headers.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = "postprocess-framework-headers.sh"; path = "mac/postprocess-framework-headers.sh"; sourceTree = "<group>"; }; 2020 2020 1A1D2117191D996C0001619F /* MigrateHeadersFromWebKitLegacy.make */ = {isa = PBXFileReference; lastKnownFileType = text; name = MigrateHeadersFromWebKitLegacy.make; path = mac/MigrateHeadersFromWebKitLegacy.make; sourceTree = "<group>"; }; 2021 1A1D8B9F1731A36300141DA4 /* LocalStorageDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalStorageDatabase.cpp; sourceTree = "<group>"; };2022 1A1D8BA01731A36300141DA4 /* LocalStorageDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalStorageDatabase.h; sourceTree = "<group>"; };2023 2021 1A1E093118861D3800D2DC49 /* WebProgressTrackerClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebProgressTrackerClient.cpp; sourceTree = "<group>"; }; 2024 2022 1A1E093218861D3800D2DC49 /* WebProgressTrackerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebProgressTrackerClient.h; sourceTree = "<group>"; }; … … 2097 2095 1A445BA2184D5FCF004B3414 /* WKContextDownloadClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKContextDownloadClient.h; sourceTree = "<group>"; }; 2098 2096 1A445BA4184D5FDA004B3414 /* WKContextConnectionClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKContextConnectionClient.h; sourceTree = "<group>"; }; 2099 1A44B95916B73F9F00B7BBD8 /* StorageManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageManager.cpp; sourceTree = "<group>"; };2100 1A44B95A16B73F9F00B7BBD8 /* StorageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageManager.h; sourceTree = "<group>"; };2101 2097 1A4832C11A965A3C008B4DFE /* WebsiteDataStoreCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebsiteDataStoreCocoa.mm; sourceTree = "<group>"; }; 2102 2098 1A4832C91A9BC465008B4DFE /* WKWebsiteDataRecord.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebsiteDataRecord.mm; sourceTree = "<group>"; }; … … 2185 2181 1A8B66B11BC45B010082DF77 /* WKBundleMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKBundleMac.mm; sourceTree = "<group>"; }; 2186 2182 1A8B66B21BC45B010082DF77 /* WKBundleMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundleMac.h; sourceTree = "<group>"; }; 2187 1A8C728A1738477C000A6554 /* LocalStorageDatabaseTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalStorageDatabaseTracker.cpp; sourceTree = "<group>"; };2188 1A8C728B1738477C000A6554 /* LocalStorageDatabaseTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalStorageDatabaseTracker.h; sourceTree = "<group>"; };2189 2183 1A8E7D3818C150BF005A702A /* VisitedLinkTableController.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VisitedLinkTableController.messages.in; sourceTree = "<group>"; }; 2190 2184 1A8E7D3A18C15149005A702A /* VisitedLinkTableControllerMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VisitedLinkTableControllerMessageReceiver.cpp; path = DerivedSources/WebKit2/VisitedLinkTableControllerMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; … … 2282 2276 1AB1F7941D1B3613007C9BD1 /* WebPaymentCoordinatorProxyMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebPaymentCoordinatorProxyMessageReceiver.cpp; path = DerivedSources/WebKit2/WebPaymentCoordinatorProxyMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; 2283 2277 1AB1F7951D1B3613007C9BD1 /* WebPaymentCoordinatorProxyMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebPaymentCoordinatorProxyMessages.h; path = DerivedSources/WebKit2/WebPaymentCoordinatorProxyMessages.h; sourceTree = BUILT_PRODUCTS_DIR; }; 2284 1AB31A9316BC65AB00F6DBC9 /* StorageManager.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = StorageManager.messages.in; sourceTree = "<group>"; };2285 2278 1AB31A9416BC688100F6DBC9 /* StorageManagerMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StorageManagerMessageReceiver.cpp; path = DerivedSources/WebKit2/StorageManagerMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; 2286 2279 1AB31A9516BC688100F6DBC9 /* StorageManagerMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StorageManagerMessages.h; path = DerivedSources/WebKit2/StorageManagerMessages.h; sourceTree = BUILT_PRODUCTS_DIR; }; … … 3209 3202 511F8A77138B460900A95F44 /* SecItemShimLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SecItemShimLibrary.h; path = ../../WebProcess/mac/SecItemShimLibrary.h; sourceTree = "<group>"; }; 3210 3203 511F8A78138B460900A95F44 /* SecItemShimLibrary.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SecItemShimLibrary.mm; path = ../../WebProcess/mac/SecItemShimLibrary.mm; sourceTree = "<group>"; }; 3211 5120C8301E54E2650025B250 /* LocalStorageDatabaseTrackerIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LocalStorageDatabaseTrackerIOS.mm; sourceTree = "<group>"; };3212 3204 5120C8331E5B71570025B250 /* _WKWebsiteDataStoreConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKWebsiteDataStoreConfiguration.h; sourceTree = "<group>"; }; 3213 3205 5120C8341E5B71570025B250 /* _WKWebsiteDataStoreConfiguration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKWebsiteDataStoreConfiguration.mm; sourceTree = "<group>"; }; … … 3851 3843 93A88B421BC8828C00ABA5C2 /* APIHitTestResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = APIHitTestResult.cpp; sourceTree = "<group>"; }; 3852 3844 93A88B431BC8828C00ABA5C2 /* APIHitTestResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIHitTestResult.h; sourceTree = "<group>"; }; 3845 93B26145227D147000B97A76 /* LocalStorageDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalStorageDatabase.h; sourceTree = "<group>"; }; 3846 93B26146227D147100B97A76 /* LocalStorageDatabaseTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalStorageDatabaseTracker.h; sourceTree = "<group>"; }; 3847 93B26147227D147100B97A76 /* LocalStorageDatabaseTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalStorageDatabaseTracker.cpp; sourceTree = "<group>"; }; 3848 93B26148227D147100B97A76 /* ios */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ios; sourceTree = "<group>"; }; 3849 93B26149227D147200B97A76 /* StorageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageManager.h; sourceTree = "<group>"; }; 3850 93B2614A227D147200B97A76 /* StorageManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageManager.cpp; sourceTree = "<group>"; }; 3851 93B2614B227D147200B97A76 /* StorageManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = StorageManager.messages.in; sourceTree = "<group>"; }; 3852 93B2614C227D147200B97A76 /* LocalStorageDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalStorageDatabase.cpp; sourceTree = "<group>"; }; 3853 3853 93BA04DA2151ADF3007F455F /* WebSWServerConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSWServerConnection.messages.in; sourceTree = "<group>"; }; 3854 3854 93BA04DB2151ADF3007F455F /* WebSWServerToContextConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSWServerToContextConnection.h; sourceTree = "<group>"; }; … … 4897 4897 sourceTree = "<group>"; 4898 4898 }; 4899 1A44B95816B73F8C00B7BBD8 /* WebStorage */ = {4900 isa = PBXGroup;4901 children = (4902 5120C82D1E54E2040025B250 /* ios */,4903 1A1D8B9F1731A36300141DA4 /* LocalStorageDatabase.cpp */,4904 1A1D8BA01731A36300141DA4 /* LocalStorageDatabase.h */,4905 1A8C728A1738477C000A6554 /* LocalStorageDatabaseTracker.cpp */,4906 1A8C728B1738477C000A6554 /* LocalStorageDatabaseTracker.h */,4907 1A44B95916B73F9F00B7BBD8 /* StorageManager.cpp */,4908 1A44B95A16B73F9F00B7BBD8 /* StorageManager.h */,4909 1AB31A9316BC65AB00F6DBC9 /* StorageManager.messages.in */,4910 );4911 path = WebStorage;4912 sourceTree = "<group>";4913 };4914 4899 1A4832C01A965A33008B4DFE /* Cocoa */ = { 4915 4900 isa = PBXGroup; … … 6593 6578 93BA04D92151ADCD007F455F /* ServiceWorker */, 6594 6579 413075971DE84ED70039EC69 /* webrtc */, 6580 93B26143227D143100B97A76 /* WebStorage */, 6595 6581 6BD05864220CE8C2000BED5C /* AdClickAttributionManager.cpp */, 6596 6582 6BD05863220CE8C2000BED5C /* AdClickAttributionManager.h */, … … 6703 6689 sourceTree = "<group>"; 6704 6690 }; 6705 5120C82D1E54E2040025B250 /* ios */ = {6706 isa = PBXGroup;6707 children = (6708 5120C8301E54E2650025B250 /* LocalStorageDatabaseTrackerIOS.mm */,6709 );6710 path = ios;6711 sourceTree = "<group>";6712 };6713 6691 5123CF18133D25E60056F800 /* cg */ = { 6714 6692 isa = PBXGroup; … … 7183 7161 ); 7184 7162 path = mac; 7163 sourceTree = "<group>"; 7164 }; 7165 93B26143227D143100B97A76 /* WebStorage */ = { 7166 isa = PBXGroup; 7167 children = ( 7168 93B26148227D147100B97A76 /* ios */, 7169 93B2614C227D147200B97A76 /* LocalStorageDatabase.cpp */, 7170 93B26145227D147000B97A76 /* LocalStorageDatabase.h */, 7171 93B26147227D147100B97A76 /* LocalStorageDatabaseTracker.cpp */, 7172 93B26146227D147100B97A76 /* LocalStorageDatabaseTracker.h */, 7173 93B2614A227D147200B97A76 /* StorageManager.cpp */, 7174 93B26149227D147200B97A76 /* StorageManager.h */, 7175 93B2614B227D147200B97A76 /* StorageManager.messages.in */, 7176 ); 7177 path = WebStorage; 7185 7178 sourceTree = "<group>"; 7186 7179 }; … … 7519 7512 57608294202BD84900116678 /* WebAuthentication */, 7520 7513 1A53C2A31A325691004E8C70 /* WebsiteData */, 7521 1A44B95816B73F8C00B7BBD8 /* WebStorage */,7522 7514 7CD102D91866770600ED429D /* AutoCorrectionCallback.h */, 7523 7515 E1513C64166EABB200149FCB /* AuxiliaryProcessProxy.cpp */, … … 9318 9310 57DCEDAD214C602C0016B847 /* LocalConnection.h in Headers */, 9319 9311 57DCEDAE214C60330016B847 /* LocalService.h in Headers */, 9320 1A1D8BA21731A36300141DA4/* LocalStorageDatabase.h in Headers */,9321 1A8C728D1738477C000A6554/* LocalStorageDatabaseTracker.h in Headers */,9312 93B2614E227D14B100B97A76 /* LocalStorageDatabase.h in Headers */, 9313 93B2614F227D14B100B97A76 /* LocalStorageDatabaseTracker.h in Headers */, 9322 9314 51A7F2F3125BF820008AEB1D /* Logging.h in Headers */, 9323 9315 0FDCD7F71D47E92A009F08BC /* LogInitialization.h in Headers */, … … 9535 9527 1ACECD2517162DB1001FC9EF /* StorageAreaMap.h in Headers */, 9536 9528 1A334DEE16DE8F88006A8E38 /* StorageAreaMapMessages.h in Headers */, 9537 1A44B95C16B73F9F00B7BBD8/* StorageManager.h in Headers */,9529 93B2614D227D149E00B97A76 /* StorageManager.h in Headers */, 9538 9530 1AB31A9716BC688100F6DBC9 /* StorageManagerMessages.h in Headers */, 9539 9531 1AE00D6C18327C1200087DD7 /* StringReference.h in Headers */, -
trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp
r243666 r245540 349 349 { 350 350 ASSERT(!hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies)); 351 if (enabled) 352 WebProcess::singleton().ensureLegacyPrivateBrowsingSessionInNetworkProcess(); 351 WebProcess::singleton().enablePrivateBrowsingForTesting(enabled); 353 352 354 353 const HashSet<Page*>& pages = PageGroup::pageGroup(pageGroup->identifier())->pages(); -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
r242748 r245540 31 31 #include "NetworkConnectionToWebProcessMessages.h" 32 32 #include "ServiceWorkerClientFetchMessages.h" 33 #include "StorageAreaMap.h" 34 #include "StorageAreaMapMessages.h" 33 35 #include "WebCacheStorageConnection.h" 34 36 #include "WebCacheStorageConnectionMessages.h" … … 94 96 return; 95 97 } 98 if (decoder.messageReceiverName() == Messages::StorageAreaMap::messageReceiverName()) { 99 if (auto* stoargeAreaMap = WebProcess::singleton().storageAreaMap(decoder.destinationID())) 100 stoargeAreaMap->didReceiveMessage(connection, decoder); 101 return; 102 } 96 103 97 104 #if USE(LIBWEBRTC) -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
r245366 r245540 297 297 return nullptr; 298 298 ASSERT(parameters); 299 if (parameters->sessionID == m_page.sessionID()) 300 parameters->oldPageID = m_page.pageID(); 299 301 300 302 webProcess.createWebPage(newPageID, WTFMove(*parameters)); -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r245335 r245540 1406 1406 m_drawingArea = nullptr; 1407 1407 1408 auto sessionID = this->sessionID(); 1408 1409 DeferredPageDestructor::createDeferredPageDestructor(WTFMove(m_page), this); 1409 1410 … … 1433 1434 1434 1435 // The WebPage can be destroyed by this call. 1435 WebProcess::singleton().removeWebPage( m_pageID);1436 WebProcess::singleton().removeWebPage(sessionID, m_pageID); 1436 1437 1437 1438 WebProcess::singleton().updateActivePages(); -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r245335 r245540 43 43 #include "PluginProcessConnectionManager.h" 44 44 #include "StatisticsData.h" 45 #include "StorageAreaMap.h" 45 46 #include "UserData.h" 46 47 #include "WebAutomationSessionProxy.h" … … 57 58 #include "WebMessagePortChannelProvider.h" 58 59 #include "WebPage.h" 60 #include "WebPageCreationParameters.h" 59 61 #include "WebPageGroupProxy.h" 60 62 #include "WebPaymentCoordinator.h" … … 676 678 // link) the WebPage gets created both in the synchronous handler and through the normal way. 677 679 HashMap<uint64_t, RefPtr<WebPage>>::AddResult result = m_pageMap.add(pageID, nullptr); 680 auto oldPageID = parameters.oldPageID ? parameters.oldPageID.value() : pageID; 678 681 if (result.isNewEntry) { 679 682 ASSERT(!result.iterator->value); … … 686 689 result.iterator->value->reinitializeWebPage(WTFMove(parameters)); 687 690 691 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::WebPageWasAdded(result.iterator->value->sessionID(), pageID, oldPageID), 0); 692 688 693 ASSERT(result.iterator->value); 689 694 } 690 695 691 void WebProcess::removeWebPage( uint64_t pageID)696 void WebProcess::removeWebPage(PAL::SessionID sessionID, uint64_t pageID) 692 697 { 693 698 ASSERT(m_pageMap.contains(pageID)); 694 699 700 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::WebPageWasRemoved(sessionID, pageID), 0); 695 701 pageWillLeaveWindow(pageID); 696 702 m_pageMap.remove(pageID); … … 1242 1248 m_networkProcessConnection = NetworkProcessConnection::create(connectionIdentifier); 1243 1249 m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::SetWebProcessIdentifier(Process::identifier()), 0); 1250 1251 // To recover web storage, network process needs to know active webpages to prepare session storage. 1252 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=198051. 1253 // Webpage should be added when Storage is used, not when connection is re-established. 1254 for (auto& page : m_pageMap) { 1255 if (!page.value) 1256 continue; 1257 1258 m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::WebPageWasAdded(page.value->sessionID(), page.key, page.key), 0); 1259 } 1244 1260 } 1245 1261 … … 1271 1287 ASSERT(m_networkProcessConnection); 1272 1288 ASSERT_UNUSED(connection, m_networkProcessConnection == connection); 1289 1290 for (auto* storageAreaMap : m_storageAreaMaps.values()) 1291 storageAreaMap->disconnect(); 1273 1292 1274 1293 #if ENABLE(INDEXED_DATABASE) … … 1631 1650 } 1632 1651 1652 void WebProcess::registerStorageAreaMap(StorageAreaMap& storageAreaMap) 1653 { 1654 ASSERT(!m_storageAreaMaps.contains(storageAreaMap.identifier())); 1655 m_storageAreaMaps.set(storageAreaMap.identifier(), &storageAreaMap); 1656 } 1657 1658 void WebProcess::unregisterStorageAreaMap(StorageAreaMap& storageAreaMap) 1659 { 1660 ASSERT(m_storageAreaMaps.contains(storageAreaMap.identifier())); 1661 ASSERT(m_storageAreaMaps.get(storageAreaMap.identifier()) == &storageAreaMap); 1662 m_storageAreaMaps.remove(storageAreaMap.identifier()); 1663 } 1664 1665 StorageAreaMap* WebProcess::storageAreaMap(uint64_t identifier) const 1666 { 1667 ASSERT(m_storageAreaMaps.contains(identifier)); 1668 return m_storageAreaMaps.get(identifier); 1669 } 1670 1671 void WebProcess::enablePrivateBrowsingForTesting(bool enable) 1672 { 1673 if (enable) 1674 ensureLegacyPrivateBrowsingSessionInNetworkProcess(); 1675 1676 Vector<uint64_t> pageIDs; 1677 for (auto& page : m_pageMap) { 1678 if (page.value) 1679 pageIDs.append(page.key); 1680 } 1681 1682 if (!pageIDs.isEmpty()) 1683 ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::WebProcessSessionChanged(enable ? PAL::SessionID::legacyPrivateSessionID() : PAL::SessionID::defaultSessionID(), pageIDs), 0); 1684 } 1685 1633 1686 void WebProcess::setResourceLoadStatisticsEnabled(bool enabled) 1634 1687 { -
trunk/Source/WebKit/WebProcess/WebProcess.h
r245334 r245540 98 98 class NetworkProcessConnection; 99 99 class ObjCObjectGraph; 100 class StorageAreaMap; 100 101 class UserData; 101 102 class WaylandCompositorDisplay; … … 147 148 WebPage* webPage(uint64_t pageID) const; 148 149 void createWebPage(uint64_t pageID, WebPageCreationParameters&&); 149 void removeWebPage( uint64_t pageID);150 void removeWebPage(PAL::SessionID, uint64_t pageID); 150 151 WebPage* focusedWebPage() const; 151 152 … … 203 204 204 205 void nonVisibleProcessCleanupTimerFired(); 206 207 void registerStorageAreaMap(StorageAreaMap&); 208 void unregisterStorageAreaMap(StorageAreaMap&); 209 StorageAreaMap* storageAreaMap(uint64_t identifier) const; 210 211 void enablePrivateBrowsingForTesting(bool); 205 212 206 213 #if PLATFORM(COCOA) … … 555 562 float m_backlightLevel { 0 }; 556 563 #endif 564 565 HashMap<uint64_t, StorageAreaMap*> m_storageAreaMaps; 557 566 }; 558 567 -
trunk/Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp
r242122 r245540 27 27 #include "StorageAreaMap.h" 28 28 29 #include "NetworkProcessConnection.h" 29 30 #include "StorageAreaImpl.h" 30 31 #include "StorageAreaMapMessages.h" … … 70 71 , m_hasPendingGetValues(false) 71 72 { 72 switch (m_storageType) { 73 case StorageType::Local: 74 case StorageType::TransientLocal: 75 if (SecurityOrigin* topLevelOrigin = storageNamespace->topLevelOrigin()) 76 WebProcess::singleton().parentProcessConnection()->send(Messages::StorageManager::CreateTransientLocalStorageMap(m_storageMapID, storageNamespace->storageNamespaceID(), topLevelOrigin->data(), m_securityOrigin->data()), 0); 77 else 78 WebProcess::singleton().parentProcessConnection()->send(Messages::StorageManager::CreateLocalStorageMap(m_storageMapID, storageNamespace->storageNamespaceID(), m_securityOrigin->data()), 0); 79 80 break; 81 82 case StorageType::Session: 83 WebProcess::singleton().parentProcessConnection()->send(Messages::StorageManager::CreateSessionStorageMap(m_storageMapID, storageNamespace->storageNamespaceID(), m_securityOrigin->data()), 0); 84 break; 85 86 case StorageType::EphemeralLocal: 87 ASSERT_NOT_REACHED(); 88 return; 89 } 90 91 WebProcess::singleton().addMessageReceiver(Messages::StorageAreaMap::messageReceiverName(), m_storageMapID, *this); 73 WebProcess::singleton().registerStorageAreaMap(*this); 74 connect(); 92 75 } 93 76 94 77 StorageAreaMap::~StorageAreaMap() 95 78 { 96 if (m_storageType != StorageType::EphemeralLocal) { 97 WebProcess::singleton().parentProcessConnection()->send(Messages::StorageManager::DestroyStorageMap(m_storageMapID), 0); 98 WebProcess::singleton().removeMessageReceiver(Messages::StorageAreaMap::messageReceiverName(), m_storageMapID); 99 } 79 if (m_storageType != StorageType::EphemeralLocal) 80 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::StorageManager::DestroyStorageMap(m_storageMapID), 0); 100 81 101 82 m_storageNamespace->didDestroyStorageAreaMap(*this); 83 84 WebProcess::singleton().unregisterStorageAreaMap(*this); 102 85 } 103 86 … … 140 123 m_pendingValueChanges.add(key); 141 124 142 WebProcess::singleton(). parentProcessConnection()->send(Messages::StorageManager::SetItem(m_securityOrigin->data(), m_storageMapID, sourceArea->storageAreaID(), m_currentSeed, key, value, sourceFrame->document()->url()), 0);125 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::StorageManager::SetItem(m_securityOrigin->data(), m_storageMapID, sourceArea->storageAreaID(), m_currentSeed, key, value, sourceFrame->document()->url()), 0); 143 126 } 144 127 … … 156 139 m_pendingValueChanges.add(key); 157 140 158 WebProcess::singleton(). parentProcessConnection()->send(Messages::StorageManager::RemoveItem(m_securityOrigin->data(), m_storageMapID, sourceArea->storageAreaID(), m_currentSeed, key, sourceFrame->document()->url()), 0);141 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::StorageManager::RemoveItem(m_securityOrigin->data(), m_storageMapID, sourceArea->storageAreaID(), m_currentSeed, key, sourceFrame->document()->url()), 0); 159 142 } 160 143 … … 165 148 m_hasPendingClear = true; 166 149 m_storageMap = StorageMap::create(m_quotaInBytes); 167 WebProcess::singleton(). parentProcessConnection()->send(Messages::StorageManager::Clear(m_securityOrigin->data(), m_storageMapID, sourceArea->storageAreaID(), m_currentSeed, sourceFrame->document()->url()), 0);150 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::StorageManager::Clear(m_securityOrigin->data(), m_storageMapID, sourceArea->storageAreaID(), m_currentSeed, sourceFrame->document()->url()), 0); 168 151 } 169 152 … … 187 170 void StorageAreaMap::loadValuesIfNeeded() 188 171 { 172 connect(); 173 189 174 if (m_storageMap) 190 175 return; … … 194 179 // (This flag does not yet exist). Since loadValuesIfNeeded() ends up being called from within JavaScript code, processing incoming synchronous messages 195 180 // could lead to weird reentrency bugs otherwise. 196 WebProcess::singleton(). parentProcessConnection()->sendSync(Messages::StorageManager::GetValues(m_securityOrigin->data(), m_storageMapID, m_currentSeed), Messages::StorageManager::GetValues::Reply(values), 0);181 WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::StorageManager::GetValues(m_securityOrigin->data(), m_storageMapID, m_currentSeed), Messages::StorageManager::GetValues::Reply(values), 0); 197 182 198 183 m_storageMap = StorageMap::create(m_quotaInBytes); … … 386 371 } 387 372 373 void StorageAreaMap::connect() 374 { 375 if (!m_isDisconnected) 376 return; 377 378 switch (m_storageType) { 379 case StorageType::Local: 380 case StorageType::TransientLocal: 381 if (SecurityOrigin* topLevelOrigin = m_storageNamespace->topLevelOrigin()) 382 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::StorageManager::CreateTransientLocalStorageMap(m_storageMapID, m_storageNamespace->storageNamespaceID(), topLevelOrigin->data(), m_securityOrigin->data()), 0); 383 else 384 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::StorageManager::CreateLocalStorageMap(m_storageMapID, m_storageNamespace->storageNamespaceID(), m_securityOrigin->data()), 0); 385 break; 386 case StorageType::Session: 387 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::StorageManager::CreateSessionStorageMap(m_storageMapID, m_storageNamespace->storageNamespaceID(), m_securityOrigin->data()), 0); 388 if (m_storageMap) 389 WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::StorageManager::SetItems(m_storageMapID, m_storageMap->items()), 0); 390 break; 391 case StorageType::EphemeralLocal: 392 ASSERT_NOT_REACHED(); 393 return; 394 } 395 396 m_isDisconnected = false; 397 } 398 399 void StorageAreaMap::disconnect() 400 { 401 m_isDisconnected = true; 402 if (m_storageType == StorageType::Session && m_storageMap) { 403 m_pendingValueChanges.clear(); 404 m_hasPendingClear = false; 405 } else 406 resetValues(); 407 } 408 388 409 } // namespace WebKit -
trunk/Source/WebKit/WebProcess/WebStorage/StorageAreaMap.h
r219966 r245540 59 59 bool contains(const String& key); 60 60 61 // IPC::MessageReceiver 62 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override; 63 61 64 const WebCore::SecurityOrigin& securityOrigin() const { return m_securityOrigin.get(); } 65 66 void connect(); 67 void disconnect(); 68 uint64_t identifier() const { return m_storageMapID; } 62 69 63 70 private: 64 71 StorageAreaMap(StorageNamespaceImpl*, Ref<WebCore::SecurityOrigin>&&); 65 66 // IPC::MessageReceiver67 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;68 72 69 73 void didGetValues(uint64_t storageMapSeed); … … 99 103 bool m_hasPendingGetValues; 100 104 HashCountedSet<String> m_pendingValueChanges; 105 106 bool m_isDisconnected { true }; 101 107 }; 102 108 -
trunk/Tools/ChangeLog
r245531 r245540 1 2019-05-20 Sihui Liu <sihui_liu@apple.com> 2 3 Move Web Storage to Network Process 4 https://bugs.webkit.org/show_bug.cgi?id=197636 5 6 Reviewed by Youenn Fablet. 7 8 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 9 * TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm: Remove the wait for database file update. 10 (TEST): 11 * TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm: Add a test for network process crash recovery. 12 (TEST): 13 * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Fix a typo and add a test case to cover it. 14 * TestWebKitAPI/Tests/WebKitCocoa/local-storage-process-crashes.html: Added. 15 1 16 2019-05-20 Keith Rollin <krollin@apple.com> 2 17 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r245328 r245540 793 793 CA5B94D32190C0F40059FE38 /* IndexedDBTempFileSize-2.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CA5B94D12190C0E00059FE38 /* IndexedDBTempFileSize-2.html */; }; 794 794 CA5B94D72191005B0059FE38 /* IndexedDBTempFileSize.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA5B94D62191005B0059FE38 /* IndexedDBTempFileSize.mm */; }; 795 CA7787FF228CEFDB00E50463 /* local-storage-process-crashes.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CA7787FE228CEFC700E50463 /* local-storage-process-crashes.html */; }; 795 796 CA97B394219366600045DF6F /* IndexedDBUserDelete.mm in Sources */ = {isa = PBXBuildFile; fileRef = CA97B3922193663B0045DF6F /* IndexedDBUserDelete.mm */; }; 796 797 CA97B3952193667A0045DF6F /* IndexedDBUserDelete.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CA97B393219366470045DF6F /* IndexedDBUserDelete.html */; }; … … 1227 1228 573255A722139BC700396AE8 /* load-web-archive-2.html in Copy Resources */, 1228 1229 57901FB11CAF142D00ED64F9 /* LoadInvalidURLRequest.html in Copy Resources */, 1230 CA7787FF228CEFDB00E50463 /* local-storage-process-crashes.html in Copy Resources */, 1229 1231 8C10AF98206467920018FD90 /* localstorage-empty-string-value.html in Copy Resources */, 1230 1232 51E6A8961D2F1CA700C004B6 /* LocalStorageClear.html in Copy Resources */, … … 2149 2151 CA5B94D12190C0E00059FE38 /* IndexedDBTempFileSize-2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "IndexedDBTempFileSize-2.html"; sourceTree = "<group>"; }; 2150 2152 CA5B94D62191005B0059FE38 /* IndexedDBTempFileSize.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = IndexedDBTempFileSize.mm; sourceTree = "<group>"; }; 2153 CA7787FE228CEFC700E50463 /* local-storage-process-crashes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "local-storage-process-crashes.html"; sourceTree = "<group>"; }; 2151 2154 CA97B3922193663B0045DF6F /* IndexedDBUserDelete.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = IndexedDBUserDelete.mm; sourceTree = "<group>"; }; 2152 2155 CA97B393219366470045DF6F /* IndexedDBUserDelete.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = IndexedDBUserDelete.html; sourceTree = "<group>"; }; … … 3045 3048 F41AB99D1EF4692C0083FA08 /* link-and-target-div.html */, 3046 3049 F46128D1211E2D2500D9FADB /* link-in-iframe-and-input.html */, 3050 CA7787FE228CEFC700E50463 /* local-storage-process-crashes.html */, 3047 3051 8C10AF97206467830018FD90 /* localstorage-empty-string-value.html */, 3048 3052 51E6A8951D2F1C7700C004B6 /* LocalStorageClear.html */, -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageDatabaseTracker.mm
r242339 r245540 61 61 TestWebKitAPI::Util::run(&readyToContinue); 62 62 63 // Local storage database update interval is 1 second.64 TestWebKitAPI::Util::sleep(1);65 66 63 readyToContinue = false; 67 64 [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) { -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm
r242339 r245540 54 54 @end 55 55 56 TEST(WKWebView, LocalStorageProcessCrashes) 57 { 58 readyToContinue = false; 59 [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 60 readyToContinue = true; 61 }]; 62 TestWebKitAPI::Util::run(&readyToContinue); 63 64 RetainPtr<LocalStorageMessageHandler> handler = adoptNS([[LocalStorageMessageHandler alloc] init]); 65 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 66 [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"]; 67 [configuration _setAllowUniversalAccessFromFileURLs:YES]; 68 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 69 NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"local-storage-process-crashes" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]; 70 [webView loadRequest:request]; 71 72 receivedScriptMessage = false; 73 [webView loadRequest:request]; 74 TestWebKitAPI::Util::run(&receivedScriptMessage); 75 EXPECT_WK_STREQ(@"local:storage", [lastScriptMessage body]); 76 77 receivedScriptMessage = false; 78 [webView loadRequest:request]; 79 TestWebKitAPI::Util::run(&receivedScriptMessage); 80 EXPECT_WK_STREQ(@"session:storage", [lastScriptMessage body]); 81 82 [configuration.get().processPool _terminateNetworkProcess]; 83 84 receivedScriptMessage = false; 85 [webView loadRequest:request]; 86 TestWebKitAPI::Util::run(&receivedScriptMessage); 87 EXPECT_WK_STREQ(@"Network Process Crashed", [lastScriptMessage body]); 88 89 readyToContinue = false; 90 [webView evaluateJavaScript:@"window.localStorage.getItem('local')" completionHandler:^(id result, NSError *) { 91 EXPECT_TRUE([@"storage" isEqualToString:result]); 92 readyToContinue = true; 93 }]; 94 TestWebKitAPI::Util::run(&readyToContinue); 95 96 readyToContinue = false; 97 [webView evaluateJavaScript:@"window.sessionStorage.getItem('session')" completionHandler:^(id result, NSError *) { 98 EXPECT_TRUE([@"storage" isEqualToString:result]); 99 readyToContinue = true; 100 }]; 101 TestWebKitAPI::Util::run(&readyToContinue); 102 } 56 103 57 104 TEST(WKWebView, LocalStorageEmptyString) -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
r245323 r245540 5000 5000 5001 5001 done = false; 5002 [webView evaluateJavaScript:@"window.sessionStorage.setItem('b ,'a')" completionHandler:^(id, NSError *) {5002 [webView evaluateJavaScript:@"window.sessionStorage.setItem('b','a')" completionHandler:^(id, NSError *) { 5003 5003 done = true; 5004 5004 }]; … … 5016 5016 [webView evaluateJavaScript:@"window.localStorage.getItem('a')" completionHandler:^(id result, NSError *) { 5017 5017 EXPECT_TRUE([@"b" isEqualToString:result]); 5018 done = true; 5019 }]; 5020 TestWebKitAPI::Util::run(&done); 5021 5022 done = false; 5023 [webView evaluateJavaScript:@"window.sessionStorage.getItem('b')" completionHandler:^(id result, NSError *) { 5024 EXPECT_TRUE([@"a" isEqualToString:result]); 5018 5025 done = true; 5019 5026 }];
Note: See TracChangeset
for help on using the changeset viewer.