Changeset 250728 in webkit
- Timestamp:
- Oct 4, 2019 9:43:17 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r250727 r250728 1 2019-10-04 Alex Christensen <achristensen@webkit.org> 2 3 Move WKProcessPool._registerURLSchemeServiceWorkersCanHandle to _WKWebsiteDataStoreConfiguration 4 https://bugs.webkit.org/show_bug.cgi?id=202553 5 6 Reviewed by Youenn Fablet. 7 8 * workers/service/server/SWServer.cpp: 9 (WebCore::SWServer::SWServer): 10 * workers/service/server/SWServer.h: 11 (WebCore::SWServer::registeredSchemes const): 12 * workers/service/server/SWServerJobQueue.cpp: 13 (WebCore::SWServerJobQueue::runRegisterJob): 14 1 15 2019-10-04 youenn fablet <youenn@apple.com> 2 16 -
trunk/Source/WebCore/workers/service/server/SWServer.cpp
r250426 r250728 300 300 } 301 301 302 SWServer::SWServer(UniqueRef<SWOriginStore>&& originStore, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID sessionID, CreateContextConnectionCallback&& callback)302 SWServer::SWServer(UniqueRef<SWOriginStore>&& originStore, HashSet<String>&& registeredSchemes, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID sessionID, CreateContextConnectionCallback&& callback) 303 303 : m_originStore(WTFMove(originStore)) 304 304 , m_sessionID(sessionID) 305 305 , m_isProcessTerminationDelayEnabled(processTerminationDelayEnabled) 306 , m_registeredSchemes(WTFMove(registeredSchemes)) 306 307 , m_createContextConnectionCallback(WTFMove(callback)) 307 308 { -
trunk/Source/WebCore/workers/service/server/SWServer.h
r250426 r250728 126 126 127 127 using CreateContextConnectionCallback = Function<void(const WebCore::RegistrableDomain&)>; 128 WEBCORE_EXPORT SWServer(UniqueRef<SWOriginStore>&&, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID, CreateContextConnectionCallback&&);128 WEBCORE_EXPORT SWServer(UniqueRef<SWOriginStore>&&, HashSet<String>&& registeredSchemes, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID, CreateContextConnectionCallback&&); 129 129 130 130 WEBCORE_EXPORT ~SWServer(); … … 165 165 166 166 const HashMap<SWServerConnectionIdentifier, std::unique_ptr<Connection>>& connections() const { return m_connections; } 167 const HashSet<String> registeredSchemes() const { return m_registeredSchemes; } 167 168 168 169 SWOriginStore& originStore() { return m_originStore; } … … 256 257 bool m_importCompleted { false }; 257 258 bool m_isProcessTerminationDelayEnabled { true }; 259 HashSet<String> m_registeredSchemes; 258 260 Vector<CompletionHandler<void()>> m_clearCompletionCallbacks; 259 261 Vector<Function<void(const HashSet<SecurityOriginData>&)>> m_getOriginsWithRegistrationsCallbacks; -
trunk/Source/WebCore/workers/service/server/SWServerJobQueue.cpp
r249627 r250728 261 261 ASSERT(job.type == ServiceWorkerJobType::Register); 262 262 263 if (!shouldTreatAsPotentiallyTrustworthy(job.scriptURL) && ! SchemeRegistry::isServiceWorkerContainerCustomScheme(job.scriptURL.protocol().toStringWithoutCopying()))263 if (!shouldTreatAsPotentiallyTrustworthy(job.scriptURL) && !m_server.registeredSchemes().contains(job.scriptURL.protocol().toStringWithoutCopying())) 264 264 return rejectCurrentJob(ExceptionData { SecurityError, "Script URL is not potentially trustworthy"_s }); 265 265 -
trunk/Source/WebKit/ChangeLog
r250726 r250728 1 2019-10-04 Alex Christensen <achristensen@webkit.org> 2 3 Move WKProcessPool._registerURLSchemeServiceWorkersCanHandle to _WKWebsiteDataStoreConfiguration 4 https://bugs.webkit.org/show_bug.cgi?id=202553 5 6 Reviewed by Youenn Fablet. 7 8 It was only used for testing, and all the tests that use it still pass with the new SPI. 9 10 * NetworkProcess/NetworkProcess.cpp: 11 (WebKit::NetworkProcess::initializeNetworkProcess): 12 (WebKit::NetworkProcess::addWebsiteDataStore): 13 (WebKit::NetworkProcess::swServerForSession): 14 (WebKit::NetworkProcess::addServiceWorkerSession): 15 * NetworkProcess/NetworkProcess.h: 16 * Shared/AuxiliaryProcess.cpp: 17 (WebKit::AuxiliaryProcess::registerURLSchemeServiceWorkersCanHandle const): Deleted. 18 * Shared/AuxiliaryProcess.h: 19 * Shared/AuxiliaryProcess.messages.in: 20 * Shared/WebsiteDataStoreParameters.cpp: 21 (WebKit::WebsiteDataStoreParameters::encode const): 22 (WebKit::WebsiteDataStoreParameters::decode): 23 * Shared/WebsiteDataStoreParameters.h: 24 * UIProcess/API/Cocoa/WKProcessPool.mm: 25 (-[WKProcessPool _registerURLSchemeServiceWorkersCanHandle:]): Deleted. 26 * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: 27 * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h: 28 * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm: 29 (-[_WKWebsiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:]): 30 * UIProcess/WebProcessPool.cpp: 31 (WebKit::WebProcessPool::ensureNetworkProcess): 32 (WebKit::WebProcessPool::initializeNewWebProcess): 33 (WebKit::WebProcessPool::registerURLSchemeServiceWorkersCanHandle): Deleted. 34 * UIProcess/WebProcessPool.h: 35 * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: 36 (WebKit::WebsiteDataStore::parameters): 37 * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp: 38 (WebKit::WebsiteDataStoreConfiguration::copy): 39 * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h: 40 (WebKit::WebsiteDataStoreConfiguration::serviceWorkerRegisteredSchemes const): 41 (WebKit::WebsiteDataStoreConfiguration::registerServiceWorkerScheme): 42 * WebProcess/WebProcess.cpp: 43 (WebKit::WebProcess::initializeWebProcess): 44 1 45 2019-10-04 youenn fablet <youenn@apple.com> 2 46 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r250621 r250728 324 324 if (parentProcessHasServiceWorkerEntitlement()) { 325 325 bool serviceWorkerProcessTerminationDelayEnabled = true; 326 addServiceWorkerSession(PAL::SessionID::defaultSessionID(), serviceWorkerProcessTerminationDelayEnabled, parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle); 327 328 for (auto& scheme : parameters.urlSchemesServiceWorkersCanHandle) 329 registerURLSchemeServiceWorkersCanHandle(scheme); 326 addServiceWorkerSession(PAL::SessionID::defaultSessionID(), serviceWorkerProcessTerminationDelayEnabled, { }, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle); 330 327 } 331 328 #endif … … 453 450 #if ENABLE(SERVICE_WORKER) 454 451 if (parentProcessHasServiceWorkerEntitlement()) 455 addServiceWorkerSession(parameters.networkSessionParameters.sessionID, parameters.serviceWorkerProcessTerminationDelayEnabled, parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);452 addServiceWorkerSession(parameters.networkSessionParameters.sessionID, parameters.serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegisteredSchemes), WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle); 456 453 #endif 457 454 … … 2394 2391 auto info = m_serviceWorkerInfo.get(sessionID); 2395 2392 auto path = info.databasePath; 2393 auto registeredSchemes = info.registeredSchemes; 2396 2394 // There should already be a registered path for this PAL::SessionID. 2397 2395 // If there's not, then where did this PAL::SessionID come from? 2398 2396 ASSERT(sessionID.isEphemeral() || !path.isEmpty()); 2399 2397 2400 return makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), info.processTerminationDelayEnabled, WTFMove(path), sessionID, [this, sessionID](auto& registrableDomain) {2398 return makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), WTFMove(registeredSchemes), info.processTerminationDelayEnabled, WTFMove(path), sessionID, [this, sessionID](auto& registrableDomain) { 2401 2399 ASSERT(!registrableDomain.isEmpty()); 2402 2400 parentProcessConnection()->send(Messages::NetworkProcessProxy::EstablishWorkerContextConnectionToNetworkProcess { registrableDomain, sessionID }, 0); … … 2429 2427 } 2430 2428 2431 void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, bool processTerminationDelayEnabled, String& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)2429 void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, bool processTerminationDelayEnabled, HashSet<String>&& registeredSchemes, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle) 2432 2430 { 2433 2431 ServiceWorkerInfo info { 2434 serviceWorkerRegistrationDirectory,2432 WTFMove(serviceWorkerRegistrationDirectory), 2435 2433 processTerminationDelayEnabled, 2434 WTFMove(registeredSchemes) 2436 2435 }; 2437 2436 auto addResult = m_serviceWorkerInfo.add(sessionID, WTFMove(info)); -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r250621 r250728 460 460 WebSWOriginStore* existingSWOriginStoreForSession(PAL::SessionID) const; 461 461 462 void addServiceWorkerSession(PAL::SessionID, bool processTerminationDelayEnabled, String& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle&);462 void addServiceWorkerSession(PAL::SessionID, bool processTerminationDelayEnabled, HashSet<String>&& registeredSchemes, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle&); 463 463 #endif 464 464 … … 528 528 String databasePath; 529 529 bool processTerminationDelayEnabled { true }; 530 HashSet<String> registeredSchemes; 530 531 }; 531 532 HashMap<PAL::SessionID, ServiceWorkerInfo> m_serviceWorkerInfo; -
trunk/Source/WebKit/Shared/AuxiliaryProcess.cpp
r248533 r250728 196 196 } 197 197 198 void AuxiliaryProcess::registerURLSchemeServiceWorkersCanHandle(const String& urlScheme) const199 {200 WebCore::SchemeRegistry::registerURLSchemeServiceWorkersCanHandle(urlScheme);201 }202 203 198 #if !PLATFORM(COCOA) 204 199 void AuxiliaryProcess::platformInitialize() -
trunk/Source/WebKit/Shared/AuxiliaryProcess.h
r245796 r250728 122 122 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override; 123 123 124 void registerURLSchemeServiceWorkersCanHandle(const String&) const;125 124 #if OS(LINUX) 126 125 void didReceiveMemoryPressureEvent(bool isCritical); -
trunk/Source/WebKit/Shared/AuxiliaryProcess.messages.in
r240683 r250728 23 23 messages -> AuxiliaryProcess { 24 24 ShutDown() 25 RegisterURLSchemeServiceWorkersCanHandle(String scheme)26 25 SetProcessSuppressionEnabled(bool flag) 27 26 -
trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp
r250426 r250728 52 52 #if ENABLE(SERVICE_WORKER) 53 53 encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle << serviceWorkerProcessTerminationDelayEnabled; 54 encoder << serviceWorkerRegisteredSchemes; 54 55 #endif 55 56 … … 128 129 return WTF::nullopt; 129 130 parameters.serviceWorkerProcessTerminationDelayEnabled = WTFMove(*serviceWorkerProcessTerminationDelayEnabled); 131 132 Optional<HashSet<String>> serviceWorkerRegisteredSchemes; 133 decoder >> serviceWorkerRegisteredSchemes; 134 if (!serviceWorkerRegisteredSchemes) 135 return WTF::nullopt; 136 parameters.serviceWorkerRegisteredSchemes = WTFMove(*serviceWorkerRegisteredSchemes); 130 137 #endif 131 138 -
trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h
r250426 r250728 67 67 SandboxExtension::Handle serviceWorkerRegistrationDirectoryExtensionHandle; 68 68 bool serviceWorkerProcessTerminationDelayEnabled { true }; 69 HashSet<String> serviceWorkerRegisteredSchemes; 69 70 #endif 70 71 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm
r250426 r250728 190 190 } 191 191 192 - (void)_registerURLSchemeServiceWorkersCanHandle:(NSString *)scheme193 {194 _processPool->registerURLSchemeServiceWorkersCanHandle(scheme);195 }196 197 192 - (void)_registerURLSchemeAsCanDisplayOnlyIfCanRequest:(NSString *)scheme 198 193 { -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h
r250426 r250728 123 123 // Test only. 124 124 - (void)_setAllowsAnySSLCertificateForServiceWorker:(BOOL)allows WK_API_AVAILABLE(macos(10.13.4), ios(11.3)); 125 - (void)_registerURLSchemeServiceWorkersCanHandle:(NSString *)scheme WK_API_AVAILABLE(macos(10.13.4), ios(11.3));126 125 - (void)_getActivePagesOriginsInWebProcessForTesting:(pid_t)pid completionHandler:(void(^)(NSArray<NSString *> *))completionHandler WK_API_AVAILABLE(macos(10.14.4), ios(12.2)); 127 126 - (BOOL)_networkProcessHasEntitlementForTesting:(NSString *)entitlement WK_API_AVAILABLE(macos(10.14.4), ios(12.2)); -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h
r250677 r250728 72 72 73 73 // Testing only. 74 - (void)registerURLSchemeServiceWorkersCanHandleForTesting:(NSString *)scheme WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 74 75 @property (nonatomic) BOOL allLoadsBlockedByDeviceManagementRestrictionsForTesting WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 75 76 -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm
r250677 r250728 401 401 } 402 402 403 - (void)registerURLSchemeServiceWorkersCanHandleForTesting:(NSString *)scheme 404 { 405 _configuration->registerServiceWorkerScheme(scheme); 406 } 407 403 408 - (API::Object&)_apiObject 404 409 { -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r250602 r250728 545 545 parameters.serviceWorkerRegistrationDirectory = WebKit::WebsiteDataStore::defaultServiceWorkerRegistrationDirectory(); 546 546 SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle); 547 548 if (!m_schemesServiceWorkersCanHandle.isEmpty())549 parameters.urlSchemesServiceWorkersCanHandle = copyToVector(m_schemesServiceWorkersCanHandle);550 547 #endif 551 548 … … 925 922 parameters.urlSchemesRegisteredAsAlwaysRevalidated = copyToVector(m_schemesToRegisterAsAlwaysRevalidated); 926 923 parameters.urlSchemesRegisteredAsCachePartitioned = copyToVector(m_schemesToRegisterAsCachePartitioned); 927 parameters.urlSchemesServiceWorkersCanHandle = copyToVector(m_schemesServiceWorkersCanHandle); 924 if (websiteDataStore) 925 parameters.urlSchemesServiceWorkersCanHandle = copyToVector(websiteDataStore->configuration().serviceWorkerRegisteredSchemes()); 928 926 parameters.urlSchemesRegisteredAsCanDisplayOnlyIfCanRequest = copyToVector(m_schemesToRegisterAsCanDisplayOnlyIfCanRequest); 929 927 … … 1535 1533 m_schemesToRegisterAsCachePartitioned.add(urlScheme); 1536 1534 sendToAllProcesses(Messages::WebProcess::RegisterURLSchemeAsCachePartitioned(urlScheme)); 1537 }1538 1539 void WebProcessPool::registerURLSchemeServiceWorkersCanHandle(const String& urlScheme)1540 {1541 m_schemesServiceWorkersCanHandle.add(urlScheme);1542 sendToAllProcesses(Messages::AuxiliaryProcess::RegisterURLSchemeServiceWorkersCanHandle(urlScheme));1543 if (m_networkProcess)1544 m_networkProcess->send(Messages::AuxiliaryProcess::RegisterURLSchemeServiceWorkersCanHandle(urlScheme), 0);1545 1535 } 1546 1536 -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r250457 r250728 273 273 void registerURLSchemeAsCORSEnabled(const String&); 274 274 void registerURLSchemeAsCachePartitioned(const String&); 275 void registerURLSchemeServiceWorkersCanHandle(const String&);276 275 void registerURLSchemeAsCanDisplayOnlyIfCanRequest(const String&); 277 276 … … 651 650 HashSet<String> m_schemesToRegisterAsAlwaysRevalidated; 652 651 HashSet<String> m_schemesToRegisterAsCachePartitioned; 653 HashSet<String> m_schemesServiceWorkersCanHandle;654 652 HashSet<String> m_schemesToRegisterAsCanDisplayOnlyIfCanRequest; 655 653 -
trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
r250677 r250728 181 181 SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle); 182 182 parameters.serviceWorkerProcessTerminationDelayEnabled = m_configuration->serviceWorkerProcessTerminationDelayEnabled(); 183 parameters.serviceWorkerRegisteredSchemes = m_configuration->serviceWorkerRegisteredSchemes(); 183 184 #endif 184 185 -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp
r250677 r250728 55 55 56 56 copy->m_serviceWorkerProcessTerminationDelayEnabled = this->m_serviceWorkerProcessTerminationDelayEnabled; 57 copy->m_serviceWorkerRegisteredSchemes = this->m_serviceWorkerRegisteredSchemes; 57 58 copy->m_fastServerTrustEvaluationEnabled = this->m_fastServerTrustEvaluationEnabled; 58 59 copy->m_networkCacheSpeculativeValidationEnabled = this->m_networkCacheSpeculativeValidationEnabled; -
trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h
r250677 r250728 118 118 void setServiceWorkerProcessTerminationDelayEnabled(bool enabled) { m_serviceWorkerProcessTerminationDelayEnabled = enabled; } 119 119 120 const HashSet<String> serviceWorkerRegisteredSchemes() const { return m_serviceWorkerRegisteredSchemes; } 121 void registerServiceWorkerScheme(String&& scheme) { m_serviceWorkerRegisteredSchemes.add(scheme); } 122 120 123 const String& sourceApplicationBundleIdentifier() const { return m_sourceApplicationBundleIdentifier; } 121 124 void setSourceApplicationBundleIdentifier(String&& identifier) { m_sourceApplicationBundleIdentifier = WTFMove(identifier); } … … 180 183 bool m_suppressesConnectionTerminationOnSystemChange { false }; 181 184 unsigned m_testSpeedMultiplier { 1 }; 185 HashSet<String> m_serviceWorkerRegisteredSchemes; 182 186 #if PLATFORM(COCOA) 183 187 RetainPtr<CFDictionaryRef> m_proxyConfiguration; -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r250713 r250728 380 380 381 381 for (auto& scheme : parameters.urlSchemesServiceWorkersCanHandle) 382 registerURLSchemeServiceWorkersCanHandle(scheme);382 WebCore::SchemeRegistry::registerURLSchemeServiceWorkersCanHandle(scheme); 383 383 384 384 for (auto& scheme : parameters.urlSchemesRegisteredAsCanDisplayOnlyIfCanRequest) -
trunk/Tools/ChangeLog
r250723 r250728 1 2019-10-04 Alex Christensen <achristensen@webkit.org> 2 3 Move WKProcessPool._registerURLSchemeServiceWorkersCanHandle to _WKWebsiteDataStoreConfiguration 4 https://bugs.webkit.org/show_bug.cgi?id=202553 5 6 Reviewed by Youenn Fablet. 7 8 * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: 9 * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm: 10 1 11 2019-10-04 Alex Christensen <achristensen@webkit.org> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
r250613 r250728 27 27 28 28 #import "PlatformUtilities.h" 29 #import "TCPServer.h" 29 30 #import "Test.h" 30 31 #import "TestNavigationDelegate.h" … … 470 471 )SWRESOURCE"; 471 472 473 static WKWebsiteDataStore *dataStoreWithRegisteredServiceWorkerScheme(NSString *scheme) 474 { 475 _WKWebsiteDataStoreConfiguration *configuration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]; 476 [configuration registerURLSchemeServiceWorkersCanHandleForTesting:scheme]; 477 return [[[WKWebsiteDataStore alloc] _initWithConfiguration:configuration] autorelease]; 478 } 479 472 480 TEST(ServiceWorkers, Basic) 473 481 { … … 477 485 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 478 486 487 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 488 479 489 // Start with a clean slate data store 480 [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 481 done = true; 482 }]; 483 TestWebKitAPI::Util::run(&done); 484 done = false; 485 486 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 490 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 491 done = true; 492 }]; 493 TestWebKitAPI::Util::run(&done); 494 done = false; 495 496 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 497 [configuration setWebsiteDataStore:dataStore]; 487 498 488 499 RetainPtr<SWMessageHandler> messageHandler = adoptNS([[SWMessageHandler alloc] init]); … … 495 506 496 507 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 497 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];498 508 499 509 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; 500 510 [webView loadRequest:request]; 511 512 TestWebKitAPI::Util::run(&done); 513 done = false; 514 515 webView = nullptr; 516 517 [dataStore fetchDataRecordsOfTypes:[NSSet setWithObject:WKWebsiteDataTypeServiceWorkerRegistrations] completionHandler:^(NSArray<WKWebsiteDataRecord *> *websiteDataRecords) { 518 EXPECT_EQ(1u, [websiteDataRecords count]); 519 EXPECT_TRUE([websiteDataRecords[0].displayName isEqualToString:@"sw host"]); 520 521 done = true; 522 }]; 523 524 TestWebKitAPI::Util::run(&done); 525 done = false; 526 } 527 528 TEST(ServiceWorkers, BasicDefaultSession) 529 { 530 using namespace TestWebKitAPI; 531 TCPServer server([] (int socket) { 532 NSString *format = @"HTTP/1.1 200 OK\r\n" 533 "Content-Type: %s\r\n" 534 "Content-Length: %d\r\n\r\n" 535 "%s"; 536 NSString *firstResponse = [NSString stringWithFormat:format, "text/html", strlen(mainBytes), mainBytes]; 537 NSString *secondResponse = [NSString stringWithFormat:format, "application/javascript", strlen(scriptBytes), scriptBytes]; 538 539 TCPServer::read(socket); 540 TCPServer::write(socket, firstResponse.UTF8String, firstResponse.length); 541 TCPServer::read(socket); 542 TCPServer::write(socket, secondResponse.UTF8String, secondResponse.length); 543 }); 544 545 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 546 547 // Start with a clean slate data store 548 [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 549 done = true; 550 }]; 551 TestWebKitAPI::Util::run(&done); 552 done = false; 553 554 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 555 556 auto messageHandler = adoptNS([[SWMessageHandler alloc] init]); 557 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; 558 559 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 560 561 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://127.0.0.1:%d/", server.port()]]]]; 501 562 502 563 TestWebKitAPI::Util::run(&done); … … 507 568 [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:[NSSet setWithObject:WKWebsiteDataTypeServiceWorkerRegistrations] completionHandler:^(NSArray<WKWebsiteDataRecord *> *websiteDataRecords) { 508 569 EXPECT_EQ(1u, [websiteDataRecords count]); 509 EXPECT_ TRUE([websiteDataRecords[0].displayName isEqualToString:@"sw host"]);570 EXPECT_WK_STREQ(websiteDataRecords[0].displayName, "127.0.0.1"); 510 571 511 572 done = true; … … 577 638 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 578 639 640 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 641 579 642 // Start with a clean slate data store 580 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {643 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 581 644 done = true; 582 645 }]; … … 585 648 586 649 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 650 [configuration setWebsiteDataStore:dataStore]; 587 651 588 652 auto messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] initWithExpectedMessage:@"Message from worker: Foo Custom UserAgent"]); … … 596 660 597 661 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 598 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];599 662 600 663 auto delegate = adoptNS([[SWCustomUserAgentDelegate alloc] initWithUserAgent:@"Foo Custom UserAgent"]); … … 615 678 616 679 configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 680 [configuration setWebsiteDataStore:dataStore]; 617 681 618 682 messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] initWithExpectedMessage:@"Message from worker: Bar Custom UserAgent"]); … … 626 690 627 691 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 628 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];629 692 630 693 delegate = adoptNS([[SWCustomUserAgentDelegate alloc] initWithUserAgent:@"Bar Custom UserAgent"]); … … 646 709 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 647 710 711 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 712 648 713 // Start with a clean slate data store 649 [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 650 done = true; 651 }]; 652 TestWebKitAPI::Util::run(&done); 653 done = false; 654 655 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 714 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 715 done = true; 716 }]; 717 TestWebKitAPI::Util::run(&done); 718 done = false; 719 720 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 721 [configuration setWebsiteDataStore:dataStore]; 656 722 657 723 RetainPtr<SWMessageHandlerForRestoreFromDiskTest> messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"PASS: Registration was successful and service worker was activated"]); … … 664 730 665 731 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 666 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];667 732 668 733 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; … … 679 744 680 745 configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 746 [configuration setWebsiteDataStore:dataStore]; 681 747 messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"PASS: Registration already has an active worker"]); 682 748 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; … … 688 754 689 755 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 690 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];691 756 692 757 request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; … … 702 767 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 703 768 769 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 770 704 771 // Start with a clean slate data store 705 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {772 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 706 773 done = true; 707 774 }]; … … 716 783 717 784 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 785 [configuration setWebsiteDataStore:dataStore]; 718 786 auto messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"No cache storage data"]); 719 787 … … 722 790 723 791 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 724 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];725 792 726 793 // Trigger creation of network process. … … 738 805 739 806 configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 807 [configuration setWebsiteDataStore:dataStore]; 740 808 messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"Some cache storage data: my cache"]); 741 809 … … 744 812 745 813 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 746 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];747 814 748 815 request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; … … 761 828 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 762 829 830 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 831 763 832 // Start with a clean slate data store 764 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {833 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 765 834 done = true; 766 835 }]; … … 769 838 770 839 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 840 [configuration setWebsiteDataStore:dataStore]; 771 841 772 842 RetainPtr<SWMessageHandlerForFetchTest> messageHandler = adoptNS([[SWMessageHandlerForFetchTest alloc] init]); … … 780 850 781 851 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 782 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];783 852 784 853 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; … … 795 864 796 865 configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 866 [configuration setWebsiteDataStore:dataStore]; 797 867 messageHandler = adoptNS([[SWMessageHandlerForFetchTest alloc] init]); 798 868 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; … … 805 875 806 876 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 807 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];808 877 809 878 request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; … … 821 890 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 822 891 892 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 893 823 894 // Start with a clean slate data store 824 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {895 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 825 896 done = true; 826 897 }]; … … 829 900 830 901 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 902 [configuration setWebsiteDataStore:dataStore]; 831 903 832 904 RetainPtr<SWMessageHandlerWithExpectedMessage> messageHandler = adoptNS([[SWMessageHandlerWithExpectedMessage alloc] init]); … … 839 911 840 912 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 841 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];842 913 843 914 expectedMessage = "Service Worker activated"; … … 855 926 856 927 configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 928 [configuration setWebsiteDataStore:dataStore]; 857 929 messageHandler = adoptNS([[SWMessageHandlerWithExpectedMessage alloc] init]); 858 930 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; … … 864 936 865 937 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 866 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];867 938 868 939 expectedMessage = "Intercepted by worker"; … … 878 949 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 879 950 951 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 952 880 953 // Start with a clean slate data store 881 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {954 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 882 955 done = true; 883 956 }]; … … 886 959 887 960 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 961 [configuration setWebsiteDataStore:dataStore]; 888 962 889 963 RetainPtr<SWMessageHandlerWithExpectedMessage> messageHandler = adoptNS([[SWMessageHandlerWithExpectedMessage alloc] init]); … … 896 970 897 971 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 898 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];899 972 900 973 // Register a service worker and activate it. … … 913 986 914 987 configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 988 [configuration setWebsiteDataStore:dataStore]; 915 989 messageHandler = adoptNS([[SWMessageHandlerWithExpectedMessage alloc] init]); 916 990 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; … … 922 996 923 997 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 924 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];925 998 926 999 // Verify service worker is intercepting load. … … 933 1006 934 1007 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 935 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];936 1008 auto delegate = adoptNS([[TestSWAsyncNavigationDelegate alloc] init]); 937 1009 [webView setNavigationDelegate:delegate.get()]; … … 950 1022 951 1023 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 952 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];953 1024 [webView setNavigationDelegate:delegate.get()]; 954 1025 [webView setUIDelegate:delegate.get()]; … … 971 1042 WKRetainPtr<WKContextRef> context = adoptWK(TestWebKitAPI::Util::createContextForInjectedBundleTest("InternalsInjectedBundleTest")); 972 1043 configuration.processPool = (WKProcessPool *)context.get(); 973 auto pool = configuration.processPool; 974 [pool _registerURLSchemeServiceWorkersCanHandle:@"sw"]; 1044 configuration.websiteDataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 975 1045 } 976 1046 … … 1334 1404 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"]; 1335 1405 1336 configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore]; 1337 [configuration.get().processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"]; 1406 _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] initNonPersistentConfiguration] autorelease]; 1407 [dataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"]; 1408 configuration.get().websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease]; 1338 1409 1339 1410 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); … … 1389 1460 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 1390 1461 1462 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 1463 1391 1464 // Start with a clean slate data store 1392 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {1465 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 1393 1466 done = true; 1394 1467 }]; … … 1397 1470 1398 1471 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1399 setConfigurationInjectedBundlePath(configuration.get()); 1472 1473 auto context = adoptWK(TestWebKitAPI::Util::createContextForInjectedBundleTest("InternalsInjectedBundleTest")); 1474 [configuration setProcessPool:(WKProcessPool *)context.get()]; 1475 [configuration setWebsiteDataStore:dataStore]; 1400 1476 1401 1477 auto defaultPreferences = [configuration preferences]; … … 1418 1494 TestWebKitAPI::Util::run(&openedCache); 1419 1495 1420 configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore]; 1496 _WKWebsiteDataStoreConfiguration *nonPersistentConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] initNonPersistentConfiguration] autorelease]; 1497 [nonPersistentConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"]; 1498 configuration.get().websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:nonPersistentConfiguration] autorelease]; 1421 1499 1422 1500 auto messageHandler = adoptNS([[SWMessageHandlerForCacheStorage alloc] init]); … … 1544 1622 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 1545 1623 1624 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 1625 1546 1626 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1627 [configuration setWebsiteDataStore:dataStore]; 1547 1628 setConfigurationInjectedBundlePath(configuration.get()); 1548 1629 … … 1566 1647 1567 1648 webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 1568 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];1569 1649 1570 1650 request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageGrabbingCacheStorageDirectory.html"]]; … … 1589 1669 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 1590 1670 1671 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 1672 1591 1673 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1674 [configuration setWebsiteDataStore:dataStore]; 1592 1675 1593 1676 configuration = adoptNS([[WKWebViewConfiguration alloc] init]); … … 1607 1690 1608 1691 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 1609 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];1610 1692 1611 1693 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; … … 1648 1730 websiteDataStoreConfiguration.get()._serviceWorkerRegistrationDirectory = serviceWorkersPath; 1649 1731 websiteDataStoreConfiguration.get()._indexedDBDatabaseDirectory = idbPath; 1732 [websiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"]; 1650 1733 1651 1734 configuration.get().websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()] autorelease]; … … 1661 1744 expectedMessage = "PASS: activation successful"; 1662 1745 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 1663 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];1664 1746 1665 1747 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]; … … 1705 1787 _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]; 1706 1788 dataStoreConfiguration.serviceWorkerProcessTerminationDelayEnabled = NO; 1789 [dataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw1"]; 1790 [dataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw2"]; 1791 1707 1792 auto dataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration]); 1708 1793 … … 1733 1818 1734 1819 WKProcessPool *processPool = configuration.get().processPool; 1735 [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw1"];1736 [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw2"];1737 1820 1738 1821 RetainPtr<WKWebView> webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); … … 1792 1875 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 1793 1876 1877 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw1"); 1878 1794 1879 // Start with a clean slate data store 1795 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {1880 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 1796 1881 done = true; 1797 1882 }]; … … 1800 1885 1801 1886 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1887 [configuration setWebsiteDataStore:dataStore]; 1802 1888 1803 1889 auto messageHandler = adoptNS([[SWMessageHandler alloc] init]); … … 1812 1898 1813 1899 auto *processPool = configuration.get().processPool; 1814 [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw1"];1815 1900 1816 1901 auto webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); … … 1833 1918 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 1834 1919 1920 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw1"); 1921 1835 1922 // Start with a clean slate data store 1836 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {1923 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 1837 1924 done = true; 1838 1925 }]; … … 1852 1939 1853 1940 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 1941 [configuration setWebsiteDataStore:dataStore]; 1854 1942 #if PLATFORM(MAC) 1855 1943 [[configuration preferences] _setAppNapEnabled:YES]; … … 1859 1947 1860 1948 auto *processPool = configuration.get().processPool; 1861 [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw1"];1862 1949 1863 1950 auto webView1 = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow: YES]); … … 1881 1968 #endif 1882 1969 [webView2Configuration setProcessPool:processPool]; 1970 [webView2Configuration setWebsiteDataStore:dataStore]; 1883 1971 [[webView2Configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; 1884 1972 [webView2Configuration setURLSchemeHandler:handler.get() forURLScheme:@"sw1"]; … … 1901 1989 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 1902 1990 1991 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 1992 1903 1993 // Start with a clean slate data store 1904 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {1994 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 1905 1995 done = true; 1906 1996 }]; … … 1909 1999 1910 2000 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 2001 [configuration setWebsiteDataStore:dataStore]; 1911 2002 1912 2003 RetainPtr<SWMessageHandler> messageHandler = adoptNS([[SWMessageHandler alloc] init]); … … 1919 2010 1920 2011 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 1921 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];1922 2012 1923 2013 auto delegate = adoptNS([[TestSWAsyncNavigationDelegate alloc] init]); … … 1964 2054 auto websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]); 1965 2055 websiteDataStoreConfiguration.get()._serviceWorkerRegistrationDirectory = swDBPath; 2056 [websiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"]; 1966 2057 auto nonDefaultDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]); 1967 2058 configuration.get().websiteDataStore = nonDefaultDataStore.get(); … … 1976 2067 1977 2068 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 1978 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];1979 2069 protectedProcessPool = webView.get().configuration.processPool; 1980 2070 … … 1992 2082 auto websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]); 1993 2083 websiteDataStoreConfiguration.get()._serviceWorkerRegistrationDirectory = swDBPath; 2084 [websiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"]; 1994 2085 auto nonDefaultDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]); 1995 2086 configuration.get().websiteDataStore = nonDefaultDataStore.get(); … … 2004 2095 2005 2096 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 2006 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];2007 2097 2008 2098 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]]; … … 2017 2107 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 2018 2108 2109 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw"); 2110 2019 2111 // Start with a clean slate data store 2020 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {2112 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 2021 2113 done = true; 2022 2114 }]; … … 2025 2117 2026 2118 RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 2119 [configuration setWebsiteDataStore:dataStore]; 2027 2120 2028 2121 RetainPtr<SWMessageHandler> messageHandler = adoptNS([[SWMessageHandler alloc] init]); … … 2035 2128 2036 2129 RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 2037 [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];2038 2130 2039 2131 auto delegate = adoptNS([[TestSWAsyncNavigationDelegate alloc] init]); … … 2102 2194 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 2103 2195 2196 auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw1"); 2197 2104 2198 // Start with a clean slate data store 2105 [ [WKWebsiteDataStore defaultDataStore]removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {2199 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 2106 2200 done = true; 2107 2201 }]; … … 2110 2204 2111 2205 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 2206 [configuration setWebsiteDataStore:dataStore]; 2112 2207 2113 2208 auto messageHandler = adoptNS([[SWMessageHandler alloc] init]); … … 2122 2217 2123 2218 WKProcessPool *processPool = configuration.get().processPool; 2124 [processPool _registerURLSchemeServiceWorkersCanHandle:@"sw1"];2125 2219 2126 2220 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw1://host/main.html"]]; 2127 2221 2128 configuration.get().websiteDataStore = [WKWebsiteDataStore defaultDataStore];2222 configuration.get().websiteDataStore = dataStore; 2129 2223 2130 2224 auto webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); … … 2135 2229 EXPECT_EQ(1U, processPool._serviceWorkerProcessCount); 2136 2230 2137 configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore]; 2231 _WKWebsiteDataStoreConfiguration *nonPersistentConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] initNonPersistentConfiguration] autorelease]; 2232 [nonPersistentConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw1"]; 2233 configuration.get().websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:nonPersistentConfiguration] autorelease]; 2138 2234 2139 2235 auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm
r250156 r250728 228 228 _WKWebsiteDataStoreConfiguration *storeConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]; 229 229 storeConfiguration.perOriginStorageQuota = 1024 * 400; 230 [storeConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"qt1"]; 231 [storeConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"qt2"]; 230 232 WKWebsiteDataStore *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:storeConfiguration] autorelease]; 231 233 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { … … 243 245 handler1->resources.set("qt1://test1.html", ResourceInfo { @"text/html", TestBytes }); 244 246 [configuration setURLSchemeHandler:handler1.get() forURLScheme:@"QT1"]; 245 [configuration.get().processPool _registerURLSchemeServiceWorkersCanHandle:@"qt1"];246 247 247 248 auto handler2 = adoptNS([[StorageSchemes alloc] init]); 248 249 handler2->resources.set("qt2://test2.html", ResourceInfo { @"text/html", TestBytes }); 249 250 [configuration setURLSchemeHandler:handler2.get() forURLScheme:@"QT2"]; 250 [configuration.get().processPool _registerURLSchemeServiceWorkersCanHandle:@"qt2"];251 251 252 252 auto webView1 = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]); … … 290 290 done = false; 291 291 _WKWebsiteDataStoreConfiguration *storeConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]; 292 storeConfiguration.perOriginStorageQuota = 1024 * 400; 293 [storeConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"qt"]; 294 WKWebsiteDataStore *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:storeConfiguration] autorelease]; 295 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 296 done = true; 297 }]; 298 TestWebKitAPI::Util::run(&done); 299 300 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 301 [configuration setWebsiteDataStore:dataStore]; 302 303 auto messageHandler = adoptNS([[QuotaMessageHandler alloc] init]); 304 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"qt"]; 305 306 auto handler = adoptNS([[StorageSchemes alloc] init]); 307 handler->resources.set("qt://test1.html", ResourceInfo { @"text/html", TestBytes }); 308 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"QT"]; 309 310 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]); 311 auto delegate = adoptNS([[QuotaDelegate alloc] init]); 312 [webView setUIDelegate:delegate.get()]; 313 setVisible(webView.get()); 314 315 receivedQuotaDelegateCalled = false; 316 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qt://test1.html"]]]; 317 Util::run(&receivedQuotaDelegateCalled); 318 319 [delegate denyQuota]; 320 321 [messageHandler setExpectedMessage: @"fail"]; 322 receivedMessage = false; 323 Util::run(&receivedMessage); 324 325 receivedQuotaDelegateCalled = false; 326 [webView reload]; 327 Util::run(&receivedQuotaDelegateCalled); 328 329 [delegate grantQuota]; 330 331 [messageHandler setExpectedMessage: @"pass"]; 332 receivedMessage = false; 333 Util::run(&receivedMessage); 334 } 335 336 TEST(WebKit, QuotaDelegateNavigateFragment) 337 { 338 done = false; 339 _WKWebsiteDataStoreConfiguration *storeConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]; 340 [storeConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"qt"]; 292 341 storeConfiguration.perOriginStorageQuota = 1024 * 400; 293 342 WKWebsiteDataStore *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:storeConfiguration] autorelease]; … … 296 345 }]; 297 346 TestWebKitAPI::Util::run(&done); 298 347 299 348 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 300 349 [configuration setWebsiteDataStore:dataStore]; 301 350 302 351 auto messageHandler = adoptNS([[QuotaMessageHandler alloc] init]); 303 352 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"qt"]; 304 353 305 354 auto handler = adoptNS([[StorageSchemes alloc] init]); 306 355 handler->resources.set("qt://test1.html", ResourceInfo { @"text/html", TestBytes }); 307 356 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"QT"]; 308 [configuration.get().processPool _registerURLSchemeServiceWorkersCanHandle:@"qt"]; 309 357 310 358 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]); 311 359 auto delegate = adoptNS([[QuotaDelegate alloc] init]); … … 324 372 325 373 receivedQuotaDelegateCalled = false; 326 [webView reload]; 327 Util::run(&receivedQuotaDelegateCalled); 328 329 [delegate grantQuota]; 330 331 [messageHandler setExpectedMessage: @"pass"]; 332 receivedMessage = false; 333 Util::run(&receivedMessage); 334 } 335 336 TEST(WebKit, QuotaDelegateNavigateFragment) 374 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qt://test1.html#fragment"]]]; 375 [webView stringByEvaluatingJavaScript:@"doTestAgain()"]; 376 377 [messageHandler setExpectedMessage: @"start"]; 378 receivedMessage = false; 379 Util::run(&receivedMessage); 380 381 [messageHandler setExpectedMessage: @"fail"]; 382 receivedMessage = false; 383 Util::run(&receivedMessage); 384 385 EXPECT_FALSE(receivedQuotaDelegateCalled); 386 } 387 388 TEST(WebKit, DefaultQuota) 337 389 { 338 390 done = false; 339 391 _WKWebsiteDataStoreConfiguration *storeConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease]; 340 storeConfiguration.perOriginStorageQuota = 1024 * 400;392 [storeConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"qt"]; 341 393 WKWebsiteDataStore *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:storeConfiguration] autorelease]; 394 342 395 [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 343 396 done = true; … … 352 405 353 406 auto handler = adoptNS([[StorageSchemes alloc] init]); 354 handler->resources.set("qt://test1.html", ResourceInfo { @"text/html", TestBytes });355 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"QT"];356 [configuration.get().processPool _registerURLSchemeServiceWorkersCanHandle:@"qt"];357 358 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]);359 auto delegate = adoptNS([[QuotaDelegate alloc] init]);360 [webView setUIDelegate:delegate.get()];361 setVisible(webView.get());362 363 receivedQuotaDelegateCalled = false;364 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qt://test1.html"]]];365 Util::run(&receivedQuotaDelegateCalled);366 367 [delegate denyQuota];368 369 [messageHandler setExpectedMessage: @"fail"];370 receivedMessage = false;371 Util::run(&receivedMessage);372 373 receivedQuotaDelegateCalled = false;374 [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qt://test1.html#fragment"]]];375 [webView stringByEvaluatingJavaScript:@"doTestAgain()"];376 377 [messageHandler setExpectedMessage: @"start"];378 receivedMessage = false;379 Util::run(&receivedMessage);380 381 [messageHandler setExpectedMessage: @"fail"];382 receivedMessage = false;383 Util::run(&receivedMessage);384 385 EXPECT_FALSE(receivedQuotaDelegateCalled);386 }387 388 TEST(WebKit, DefaultQuota)389 {390 done = false;391 [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {392 done = true;393 }];394 TestWebKitAPI::Util::run(&done);395 396 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);397 398 auto messageHandler = adoptNS([[QuotaMessageHandler alloc] init]);399 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"qt"];400 401 auto handler = adoptNS([[StorageSchemes alloc] init]);402 407 handler->resources.set("qt://test1.html", ResourceInfo { @"text/html", TestUrlBytes }); 403 408 [configuration setURLSchemeHandler:handler.get() forURLScheme:@"QT"]; 404 [configuration.get().processPool _registerURLSchemeServiceWorkersCanHandle:@"qt"];405 409 406 410 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]);
Note: See TracChangeset
for help on using the changeset viewer.