Changeset 251384 in webkit


Ignore:
Timestamp:
Oct 21, 2019 2:28:58 PM (4 years ago)
Author:
achristensen@apple.com
Message:

ServiceWorker tests should use TCPServer instead of WKURLSchemeHandler
https://bugs.webkit.org/show_bug.cgi?id=203141

Reviewed by Youenn Fablet.

Source/WebCore:

This makes the tests more like what users will see,
and it allows us to not consult custom schemes when loading service workers,
which is preventing us from moving logic to the NetworkProcess. See bug 203055.
Also, I now remove test-only code that's not used anymore.

  • workers/service/server/SWServer.cpp:

(WebCore::SWServer::SWServer):
(WebCore::SWServer::canHandleScheme const):

  • workers/service/server/SWServer.h:

Source/WebKit:

  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::initializeNetworkProcess):
(WebKit::NetworkProcess::addWebsiteDataStore):
(WebKit::NetworkProcess::swServerForSession):
(WebKit::NetworkProcess::addServiceWorkerSession):

  • NetworkProcess/NetworkProcess.h:
  • Shared/WebsiteDataStoreParameters.cpp:

(WebKit::WebsiteDataStoreParameters::encode const):
(WebKit::WebsiteDataStoreParameters::decode):

  • Shared/WebsiteDataStoreParameters.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:

(-[_WKWebsiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:]): Deleted.

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::initializeNewWebProcess):

  • UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:

(WebKit::WebsiteDataStore::parameters):

  • UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:

(WebKit::WebsiteDataStoreConfiguration::copy):

  • UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:

(WebKit::WebsiteDataStoreConfiguration::serviceWorkerRegisteredSchemes const): Deleted.
(WebKit::WebsiteDataStoreConfiguration::registerServiceWorkerScheme): Deleted.

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:

(-[SWMessageHandlerForRestoreFromDiskTest userContentController:didReceiveScriptMessage:]):
(-[SWSchemes handledRequests]): Deleted.
(-[SWSchemes webView:startURLSchemeTask:]): Deleted.
(-[SWSchemes webView:stopURLSchemeTask:]): Deleted.

  • TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerTCPServer.h: Added.

(ServiceWorkerTCPServer::ServiceWorkerTCPServer):
(ServiceWorkerTCPServer::request):
(ServiceWorkerTCPServer::requestWithLocalhost):
(ServiceWorkerTCPServer::requestWithFragment):
(ServiceWorkerTCPServer::userAgentsChecked):
(ServiceWorkerTCPServer::requestWithFormat):

  • TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:

(-[StorageSchemes webView:startURLSchemeTask:]): Deleted.
(-[StorageSchemes webView:stopURLSchemeTask:]): Deleted.

Location:
trunk
Files:
1 added
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r251379 r251384  
     12019-10-21  Alex Christensen  <achristensen@webkit.org>
     2
     3        ServiceWorker tests should use TCPServer instead of WKURLSchemeHandler
     4        https://bugs.webkit.org/show_bug.cgi?id=203141
     5
     6        Reviewed by Youenn Fablet.
     7
     8        This makes the tests more like what users will see,
     9        and it allows us to not consult custom schemes when loading service workers,
     10        which is preventing us from moving logic to the NetworkProcess.  See bug 203055.
     11        Also, I now remove test-only code that's not used anymore.
     12
     13        * workers/service/server/SWServer.cpp:
     14        (WebCore::SWServer::SWServer):
     15        (WebCore::SWServer::canHandleScheme const):
     16        * workers/service/server/SWServer.h:
     17
    1182019-10-21  Joseph Pecoraro  <pecoraro@apple.com>
    219
  • trunk/Source/WebCore/workers/service/server/SWServer.cpp

    r251124 r251384  
    300300}
    301301
    302 SWServer::SWServer(UniqueRef<SWOriginStore>&& originStore, HashSet<String>&& registeredSchemes, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID sessionID, CreateContextConnectionCallback&& callback)
     302SWServer::SWServer(UniqueRef<SWOriginStore>&& originStore, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID sessionID, CreateContextConnectionCallback&& callback)
    303303    : m_originStore(WTFMove(originStore))
    304304    , m_sessionID(sessionID)
    305305    , m_isProcessTerminationDelayEnabled(processTerminationDelayEnabled)
    306     , m_registeredSchemes(WTFMove(registeredSchemes))
    307306    , m_createContextConnectionCallback(WTFMove(callback))
    308307{
     
    979978    if (scheme.isNull())
    980979        return false;
    981 
    982     if (equalLettersIgnoringASCIICase(scheme.substring(0, 4), "http")) {
    983         if (scheme.length() == 4)
    984             return true;
    985         if (scheme.length() == 5 && isASCIIAlphaCaselessEqual(scheme[4], 's'))
    986             return true;
    987     }
    988 
    989     return m_registeredSchemes.contains(scheme.toStringWithoutCopying());
     980    if (!equalLettersIgnoringASCIICase(scheme.substring(0, 4), "http"))
     981        return false;
     982    if (scheme.length() == 5 && isASCIIAlphaCaselessEqual(scheme[4], 's'))
     983        return true;
     984    return scheme.length() == 4;
    990985}
    991986
  • trunk/Source/WebCore/workers/service/server/SWServer.h

    r251124 r251384  
    126126
    127127    using CreateContextConnectionCallback = Function<void(const WebCore::RegistrableDomain&)>;
    128     WEBCORE_EXPORT SWServer(UniqueRef<SWOriginStore>&&, HashSet<String>&& registeredSchemes, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID, CreateContextConnectionCallback&&);
     128    WEBCORE_EXPORT SWServer(UniqueRef<SWOriginStore>&&, bool processTerminationDelayEnabled, String&& registrationDatabaseDirectory, PAL::SessionID, CreateContextConnectionCallback&&);
    129129
    130130    WEBCORE_EXPORT ~SWServer();
     
    257257    bool m_importCompleted { false };
    258258    bool m_isProcessTerminationDelayEnabled { true };
    259     HashSet<String> m_registeredSchemes;
    260259    Vector<CompletionHandler<void()>> m_clearCompletionCallbacks;
    261260    Vector<Function<void(const HashSet<SecurityOriginData>&)>> m_getOriginsWithRegistrationsCallbacks;
  • trunk/Source/WebKit/ChangeLog

    r251382 r251384  
     12019-10-21  Alex Christensen  <achristensen@webkit.org>
     2
     3        ServiceWorker tests should use TCPServer instead of WKURLSchemeHandler
     4        https://bugs.webkit.org/show_bug.cgi?id=203141
     5
     6        Reviewed by Youenn Fablet.
     7
     8        * NetworkProcess/NetworkProcess.cpp:
     9        (WebKit::NetworkProcess::initializeNetworkProcess):
     10        (WebKit::NetworkProcess::addWebsiteDataStore):
     11        (WebKit::NetworkProcess::swServerForSession):
     12        (WebKit::NetworkProcess::addServiceWorkerSession):
     13        * NetworkProcess/NetworkProcess.h:
     14        * Shared/WebsiteDataStoreParameters.cpp:
     15        (WebKit::WebsiteDataStoreParameters::encode const):
     16        (WebKit::WebsiteDataStoreParameters::decode):
     17        * Shared/WebsiteDataStoreParameters.h:
     18        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
     19        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
     20        (-[_WKWebsiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:]): Deleted.
     21        * UIProcess/WebProcessPool.cpp:
     22        (WebKit::WebProcessPool::initializeNewWebProcess):
     23        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
     24        (WebKit::WebsiteDataStore::parameters):
     25        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
     26        (WebKit::WebsiteDataStoreConfiguration::copy):
     27        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
     28        (WebKit::WebsiteDataStoreConfiguration::serviceWorkerRegisteredSchemes const): Deleted.
     29        (WebKit::WebsiteDataStoreConfiguration::registerServiceWorkerScheme): Deleted.
     30
    1312019-10-21  Tim Horton  <timothy_horton@apple.com>
    232
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r251213 r251384  
    324324    if (parentProcessHasServiceWorkerEntitlement()) {
    325325        bool serviceWorkerProcessTerminationDelayEnabled = true;
    326         addServiceWorkerSession(PAL::SessionID::defaultSessionID(), serviceWorkerProcessTerminationDelayEnabled, { }, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
     326        addServiceWorkerSession(PAL::SessionID::defaultSessionID(), serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
    327327    }
    328328#endif
     
    447447#if ENABLE(SERVICE_WORKER)
    448448    if (parentProcessHasServiceWorkerEntitlement())
    449         addServiceWorkerSession(parameters.networkSessionParameters.sessionID, parameters.serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegisteredSchemes), WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
     449        addServiceWorkerSession(parameters.networkSessionParameters.sessionID, parameters.serviceWorkerProcessTerminationDelayEnabled, WTFMove(parameters.serviceWorkerRegistrationDirectory), parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
    450450#endif
    451451
     
    23982398        auto info = m_serviceWorkerInfo.get(sessionID);
    23992399        auto path = info.databasePath;
    2400         auto registeredSchemes = info.registeredSchemes;
    24012400        // There should already be a registered path for this PAL::SessionID.
    24022401        // If there's not, then where did this PAL::SessionID come from?
    24032402        ASSERT(sessionID.isEphemeral() || !path.isEmpty());
    24042403
    2405         return makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), WTFMove(registeredSchemes), info.processTerminationDelayEnabled, WTFMove(path), sessionID, [this, sessionID](auto& registrableDomain) {
     2404        return makeUnique<SWServer>(makeUniqueRef<WebSWOriginStore>(), info.processTerminationDelayEnabled, WTFMove(path), sessionID, [this, sessionID](auto& registrableDomain) {
    24062405            ASSERT(!registrableDomain.isEmpty());
    24072406            parentProcessConnection()->send(Messages::NetworkProcessProxy::EstablishWorkerContextConnectionToNetworkProcess { registrableDomain, sessionID }, 0);
     
    24342433}
    24352434
    2436 void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, bool processTerminationDelayEnabled, HashSet<String>&& registeredSchemes, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)
     2435void NetworkProcess::addServiceWorkerSession(PAL::SessionID sessionID, bool processTerminationDelayEnabled, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle& handle)
    24372436{
    24382437    ServiceWorkerInfo info {
    24392438        WTFMove(serviceWorkerRegistrationDirectory),
    2440         processTerminationDelayEnabled,
    2441         WTFMove(registeredSchemes)
     2439        processTerminationDelayEnabled
    24422440    };
    24432441    auto addResult = m_serviceWorkerInfo.add(sessionID, WTFMove(info));
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r251213 r251384  
    464464    WebSWOriginStore* existingSWOriginStoreForSession(PAL::SessionID) const;
    465465
    466     void addServiceWorkerSession(PAL::SessionID, bool processTerminationDelayEnabled, HashSet<String>&& registeredSchemes, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle&);
     466    void addServiceWorkerSession(PAL::SessionID, bool processTerminationDelayEnabled, String&& serviceWorkerRegistrationDirectory, const SandboxExtension::Handle&);
    467467#endif
    468468
     
    532532        String databasePath;
    533533        bool processTerminationDelayEnabled { true };
    534         HashSet<String> registeredSchemes;
    535534    };
    536535    HashMap<PAL::SessionID, ServiceWorkerInfo> m_serviceWorkerInfo;
  • trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.cpp

    r250728 r251384  
    5252#if ENABLE(SERVICE_WORKER)
    5353    encoder << serviceWorkerRegistrationDirectory << serviceWorkerRegistrationDirectoryExtensionHandle << serviceWorkerProcessTerminationDelayEnabled;
    54     encoder << serviceWorkerRegisteredSchemes;
    5554#endif
    5655
     
    129128        return WTF::nullopt;
    130129    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);
    137130#endif
    138131
  • trunk/Source/WebKit/Shared/WebsiteDataStoreParameters.h

    r250728 r251384  
    6767    SandboxExtension::Handle serviceWorkerRegistrationDirectoryExtensionHandle;
    6868    bool serviceWorkerProcessTerminationDelayEnabled { true };
    69     HashSet<String> serviceWorkerRegisteredSchemes;
    7069#endif
    7170
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h

    r250728 r251384  
    7272
    7373// Testing only.
    74 - (void)registerURLSchemeServiceWorkersCanHandleForTesting:(NSString *)scheme WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    7574@property (nonatomic) BOOL allLoadsBlockedByDeviceManagementRestrictionsForTesting WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    7675
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm

    r250728 r251384  
    401401}
    402402
    403 - (void)registerURLSchemeServiceWorkersCanHandleForTesting:(NSString *)scheme
    404 {
    405     _configuration->registerServiceWorkerScheme(scheme);
    406 }
    407 
    408403- (API::Object&)_apiObject
    409404{
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r251220 r251384  
    953953    parameters.urlSchemesRegisteredAsAlwaysRevalidated = copyToVector(m_schemesToRegisterAsAlwaysRevalidated);
    954954    parameters.urlSchemesRegisteredAsCachePartitioned = copyToVector(m_schemesToRegisterAsCachePartitioned);
    955     if (websiteDataStore)
    956         parameters.urlSchemesServiceWorkersCanHandle = copyToVector(websiteDataStore->configuration().serviceWorkerRegisteredSchemes());
    957955    parameters.urlSchemesRegisteredAsCanDisplayOnlyIfCanRequest = copyToVector(m_schemesToRegisterAsCanDisplayOnlyIfCanRequest);
    958956
  • trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

    r251213 r251384  
    183183        SandboxExtension::createHandleForReadWriteDirectory(parameters.serviceWorkerRegistrationDirectory, parameters.serviceWorkerRegistrationDirectoryExtensionHandle);
    184184    parameters.serviceWorkerProcessTerminationDelayEnabled = m_configuration->serviceWorkerProcessTerminationDelayEnabled();
    185     parameters.serviceWorkerRegisteredSchemes = m_configuration->serviceWorkerRegisteredSchemes();
    186185#endif
    187186
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp

    r250728 r251384  
    5555
    5656    copy->m_serviceWorkerProcessTerminationDelayEnabled = this->m_serviceWorkerProcessTerminationDelayEnabled;
    57     copy->m_serviceWorkerRegisteredSchemes = this->m_serviceWorkerRegisteredSchemes;
    5857    copy->m_fastServerTrustEvaluationEnabled = this->m_fastServerTrustEvaluationEnabled;
    5958    copy->m_networkCacheSpeculativeValidationEnabled = this->m_networkCacheSpeculativeValidationEnabled;
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h

    r250728 r251384  
    118118    void setServiceWorkerProcessTerminationDelayEnabled(bool enabled) { m_serviceWorkerProcessTerminationDelayEnabled = enabled; }
    119119
    120     const HashSet<String> serviceWorkerRegisteredSchemes() const { return m_serviceWorkerRegisteredSchemes; }
    121     void registerServiceWorkerScheme(String&& scheme) { m_serviceWorkerRegisteredSchemes.add(scheme); }
    122    
    123120    const String& sourceApplicationBundleIdentifier() const { return m_sourceApplicationBundleIdentifier; }
    124121    void setSourceApplicationBundleIdentifier(String&& identifier) { m_sourceApplicationBundleIdentifier = WTFMove(identifier); }
     
    183180    bool m_suppressesConnectionTerminationOnSystemChange { false };
    184181    unsigned m_testSpeedMultiplier { 1 };
    185     HashSet<String> m_serviceWorkerRegisteredSchemes;
    186182#if PLATFORM(COCOA)
    187183    RetainPtr<CFDictionaryRef> m_proxyConfiguration;
  • trunk/Tools/ChangeLog

    r251383 r251384  
     12019-10-21  Alex Christensen  <achristensen@webkit.org>
     2
     3        ServiceWorker tests should use TCPServer instead of WKURLSchemeHandler
     4        https://bugs.webkit.org/show_bug.cgi?id=203141
     5
     6        Reviewed by Youenn Fablet.
     7
     8        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     9        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
     10        (-[SWMessageHandlerForRestoreFromDiskTest userContentController:didReceiveScriptMessage:]):
     11        (-[SWSchemes handledRequests]): Deleted.
     12        (-[SWSchemes webView:startURLSchemeTask:]): Deleted.
     13        (-[SWSchemes webView:stopURLSchemeTask:]): Deleted.
     14        * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerTCPServer.h: Added.
     15        (ServiceWorkerTCPServer::ServiceWorkerTCPServer):
     16        (ServiceWorkerTCPServer::request):
     17        (ServiceWorkerTCPServer::requestWithLocalhost):
     18        (ServiceWorkerTCPServer::requestWithFragment):
     19        (ServiceWorkerTCPServer::userAgentsChecked):
     20        (ServiceWorkerTCPServer::requestWithFormat):
     21        * TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm:
     22        (-[StorageSchemes webView:startURLSchemeTask:]): Deleted.
     23        (-[StorageSchemes webView:stopURLSchemeTask:]): Deleted.
     24
    1252019-10-21  Jonathan Bedard  <jbedard@apple.com>
    226
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r251377 r251384  
    19091909                5C4A84941F7EEFD400ACFC54 /* Configuration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Configuration.mm; sourceTree = "<group>"; };
    19101910                5C5E633D1D0B67940085A025 /* UniqueRef.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UniqueRef.cpp; sourceTree = "<group>"; };
     1911                5C683471235ACC7C0041E6B1 /* ServiceWorkerTCPServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerTCPServer.h; sourceTree = "<group>"; };
    19111912                5C69BDD41F82A7EB000F4F4B /* JavaScriptDuringNavigation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = JavaScriptDuringNavigation.mm; sourceTree = "<group>"; };
    19121913                5C6E27A6224EEBEA00128736 /* URLCanonicalization.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = URLCanonicalization.mm; sourceTree = "<group>"; };
     
    29252926                                CE0947362063223B003C9BA0 /* SchemeRegistry.mm */,
    29262927                                51EB12931FDF050500A5A1BD /* ServiceWorkerBasic.mm */,
     2928                                5C683471235ACC7C0041E6B1 /* ServiceWorkerTCPServer.h */,
    29272929                                5CCB10DF2134579D00AC5AF0 /* ShouldGoToBackForwardListItem.mm */,
    29282930                                37BCA61B1B596BA9002012CA /* ShouldOpenExternalURLsInNewWindowActions.mm */,
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm

    r251138 r251384  
    2727
    2828#import "PlatformUtilities.h"
    29 #import "TCPServer.h"
     29#import "ServiceWorkerTCPServer.h"
    3030#import "Test.h"
    3131#import "TestNavigationDelegate.h"
     
    5050#import <wtf/text/WTFString.h>
    5151
    52 struct ResourceInfo {
    53     RetainPtr<NSString> mimeType;
    54     const char* data;
    55 };
    56 
    5752static bool done;
    5853static bool didFinishNavigation;
     
    114109- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
    115110{
    116     EXPECT_TRUE([[message body] isEqualToString:_expectedMessage]);
     111    EXPECT_WK_STREQ(message.body, _expectedMessage);
    117112    done = true;
    118113}
    119 @end
    120 
    121 @interface SWSchemes : NSObject <WKURLSchemeHandler> {
    122 @public
    123     HashMap<String, ResourceInfo> resources;
    124     NSString *expectedUserAgent;
    125 }
    126 
    127 -(size_t)handledRequests;
    128 @end
    129 
    130 @implementation SWSchemes {
    131     size_t _handledRequests;
    132 }
    133 
    134 -(size_t)handledRequests
    135 {
    136     return _handledRequests;
    137 }
    138 
    139 - (void)webView:(WKWebView *)webView startURLSchemeTask:(id <WKURLSchemeTask>)task
    140 {
    141     if (expectedUserAgent)
    142         EXPECT_WK_STREQ(expectedUserAgent, [[task.request valueForHTTPHeaderField:@"User-Agent"] UTF8String]);
    143 
    144     auto entry = resources.find([task.request.URL absoluteString]);
    145     if (entry == resources.end()) {
    146         NSLog(@"Did not find resource entry for URL %@", task.request.URL);
    147         return;
    148     }
    149 
    150     ++_handledRequests;
    151     RetainPtr<NSURLResponse> response = adoptNS([[NSURLResponse alloc] initWithURL:task.request.URL MIMEType:entry->value.mimeType.get() expectedContentLength:1 textEncodingName:nil]);
    152     [task didReceiveResponse:response.get()];
    153 
    154     [task didReceiveData:[NSData dataWithBytesNoCopy:(void*)entry->value.data length:strlen(entry->value.data) freeWhenDone:NO]];
    155     [task didFinish];
    156 }
    157 
    158 - (void)webView:(WKWebView *)webView stopURLSchemeTask:(id <WKURLSchemeTask>)task
    159 {
    160 }
    161 
    162114@end
    163115
     
    358310</body>
    359311</html>
    360 )SWRESOURCE";
    361 
    362 static const char* testBytes = R"SWRESOURCE(
    363 <body>
    364 NOT intercepted by worker
    365 </body>
    366312)SWRESOURCE";
    367313
     
    471417)SWRESOURCE";
    472418
    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 
    480419TEST(ServiceWorkers, Basic)
    481420{
    482     ASSERT(mainBytes);
    483     ASSERT(scriptBytes);
    484 
    485     [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    486 
    487     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    488    
    489     // Start with a clean slate data store
    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];
    498 
    499     RetainPtr<SWMessageHandler> messageHandler = adoptNS([[SWMessageHandler alloc] init]);
    500     [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    501 
    502     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    503     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    504     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    505     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    506 
    507     RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    508 
    509     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    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);
     421    ServiceWorkerTCPServer server({
     422        { "text/html", mainBytes },
     423        { "application/javascript", scriptBytes},
    543424    });
    544425
     
    559440    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    560441
    561     [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://127.0.0.1:%d/", server.port()]]]];
     442    [webView loadRequest:server.request()];
    562443
    563444    TestWebKitAPI::Util::run(&done);
     
    638519    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    639520
    640     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    641 
    642521    // Start with a clean slate data store
    643     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     522    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    644523        done = true;
    645524    }];
     
    648527
    649528    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    650     [configuration setWebsiteDataStore:dataStore];
    651529
    652530    auto messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] initWithExpectedMessage:@"Message from worker: Foo Custom UserAgent"]);
    653531    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    654532
    655     auto handler = adoptNS([[SWSchemes alloc] init]);
    656     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    657     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", userAgentSWBytes });
    658     handler->expectedUserAgent = @"Foo Custom UserAgent";
    659     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     533    ServiceWorkerTCPServer server({
     534        { "text/html", mainBytes },
     535        { "application/javascript", userAgentSWBytes },
     536    }, {
     537        { "text/html", mainBytes },
     538        { "application/javascript", userAgentSWBytes },
     539    }, 2, { "Foo Custom UserAgent"_s, "Bar Custom UserAgent"_s });
    660540
    661541    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    664544    [webView setNavigationDelegate:delegate.get()];
    665545
    666     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    667     [webView loadRequest:request];
     546    [webView loadRequest:server.request()];
    668547
    669548    TestWebKitAPI::Util::run(&done);
     
    673552    webView = nullptr;
    674553    delegate = nullptr;
    675     handler = nullptr;
    676554    messageHandler = nullptr;
    677555    configuration = nullptr;
    678556
    679557    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    680     [configuration setWebsiteDataStore:dataStore];
    681558
    682559    messageHandler = adoptNS([[SWUserAgentMessageHandler alloc] initWithExpectedMessage:@"Message from worker: Bar Custom UserAgent"]);
    683560    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    684 
    685     handler = adoptNS([[SWSchemes alloc] init]);
    686     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    687     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", userAgentSWBytes });
    688     handler->expectedUserAgent = @"Bar Custom UserAgent";
    689     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    690561
    691562    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    694565    [webView setNavigationDelegate:delegate.get()];
    695566
    696     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    697     [webView loadRequest:request];
    698 
    699     TestWebKitAPI::Util::run(&done);
    700     done = false;
     567    [webView loadRequest:server.request()];
     568
     569    TestWebKitAPI::Util::run(&done);
     570    done = false;
     571    EXPECT_EQ(server.userAgentsChecked(), 3ull);
    701572}
    702573
    703574TEST(ServiceWorkers, RestoreFromDisk)
    704575{
    705     ASSERT(mainRegisteringWorkerBytes);
    706     ASSERT(scriptBytes);
    707     ASSERT(mainRegisteringAlreadyExistingWorkerBytes);
    708 
    709     [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    710 
    711     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
     576    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    712577   
    713578    // Start with a clean slate data store
    714     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     579    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    715580        done = true;
    716581    }];
     
    719584
    720585    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    721     [configuration setWebsiteDataStore:dataStore];
    722586
    723587    RetainPtr<SWMessageHandlerForRestoreFromDiskTest> messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"PASS: Registration was successful and service worker was activated"]);
    724588    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    725589
    726     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    727     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainRegisteringWorkerBytes });
    728     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    729     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     590    ServiceWorkerTCPServer server({
     591        { "text/html", mainRegisteringWorkerBytes },
     592        { "application/javascript", scriptBytes },
     593    }, {
     594        { "text/html", mainRegisteringAlreadyExistingWorkerBytes },
     595        { "application/javascript", scriptBytes },
     596    });
    730597
    731598    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    732599
    733     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    734     [webView loadRequest:request];
     600    [webView loadRequest:server.request()];
    735601
    736602    TestWebKitAPI::Util::run(&done);
     
    739605    configuration = nullptr;
    740606    messageHandler = nullptr;
    741     handler = nullptr;
    742607
    743608    done = false;
    744609
    745610    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    746     [configuration setWebsiteDataStore:dataStore];
    747611    messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"PASS: Registration already has an active worker"]);
    748612    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    749613
    750     handler = adoptNS([[SWSchemes alloc] init]);
    751     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainRegisteringAlreadyExistingWorkerBytes });
    752     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    753     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    754 
    755614    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    756615
    757     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    758     [webView loadRequest:request];
     616    [webView loadRequest:server.request()];
    759617
    760618    TestWebKitAPI::Util::run(&done);
     
    764622TEST(ServiceWorkers, CacheStorageRestoreFromDisk)
    765623{
    766     ASSERT(mainCacheStorageBytes);
    767     [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    768 
    769     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    770    
     624    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
     625
    771626    // Start with a clean slate data store
    772     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     627    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    773628        done = true;
    774629    }];
     
    779634    [WKWebsiteDataStore _deleteDefaultDataStoreForTesting];
    780635
    781     auto handler = adoptNS([[SWSchemes alloc] init]);
    782     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainCacheStorageBytes });
     636    ServiceWorkerTCPServer server({
     637        { "text/html", mainCacheStorageBytes }
     638    }, {
     639        { "text/html", mainCacheStorageBytes }
     640    });
    783641
    784642    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    785     [configuration setWebsiteDataStore:dataStore];
    786643    auto messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"No cache storage data"]);
    787644
    788645    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    789     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    790646
    791647    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    792648
    793     // Trigger creation of network process.
    794     [webView.get().configuration.processPool _syncNetworkProcessCookies];
    795 
    796     auto *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    797     [webView loadRequest:request];
     649    [webView loadRequest:server.request()];
    798650
    799651    TestWebKitAPI::Util::run(&done);
     
    805657
    806658    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    807     [configuration setWebsiteDataStore:dataStore];
    808659    messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"Some cache storage data: my cache"]);
    809660
    810661    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    811     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    812662
    813663    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    814664
    815     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    816     [webView loadRequest:request];
    817 
    818     TestWebKitAPI::Util::run(&done);
    819     done = false;
    820 }
    821 
     665    [webView loadRequest:server.request()];
     666
     667    TestWebKitAPI::Util::run(&done);
     668    done = false;
     669}
    822670
    823671TEST(ServiceWorkers, FetchAfterRestoreFromDisk)
    824672{
    825     ASSERT(mainForFetchTestBytes);
    826     ASSERT(scriptHandlingFetchBytes);
    827 
    828     [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    829 
    830     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    831    
     673    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
     674
    832675    // Start with a clean slate data store
    833     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     676    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    834677        done = true;
    835678    }];
     
    838681
    839682    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    840     [configuration setWebsiteDataStore:dataStore];
    841683
    842684    RetainPtr<SWMessageHandlerForFetchTest> messageHandler = adoptNS([[SWMessageHandlerForFetchTest alloc] init]);
    843685    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    844686
    845     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    846     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainForFetchTestBytes });
    847     handler->resources.set("sw://host/test.html", ResourceInfo { @"text/html", testBytes });
    848     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptHandlingFetchBytes });
    849     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     687    ServiceWorkerTCPServer server({
     688        { "text/html", mainForFetchTestBytes },
     689        { "application/javascript", scriptHandlingFetchBytes },
     690    }, {
     691        { "text/html", mainForFetchTestBytes },
     692        { "application/javascript", scriptHandlingFetchBytes },
     693    });
    850694
    851695    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    852696
    853     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    854     [webView loadRequest:request];
     697    [webView loadRequest:server.request()];
    855698
    856699    TestWebKitAPI::Util::run(&done);
     
    859702    configuration = nullptr;
    860703    messageHandler = nullptr;
    861     handler = nullptr;
    862704
    863705    done = false;
    864706
    865707    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    866     [configuration setWebsiteDataStore:dataStore];
    867708    messageHandler = adoptNS([[SWMessageHandlerForFetchTest alloc] init]);
    868709    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    869710
    870     handler = adoptNS([[SWSchemes alloc] init]);
    871     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainForFetchTestBytes });
    872     handler->resources.set("sw://host/test.html", ResourceInfo { @"text/html", testBytes });
    873     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptHandlingFetchBytes });
    874     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    875 
    876711    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    877712
    878     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    879     [webView loadRequest:request];
     713    [webView loadRequest:server.request()];
    880714
    881715    TestWebKitAPI::Util::run(&done);
     
    885719TEST(ServiceWorkers, InterceptFirstLoadAfterRestoreFromDisk)
    886720{
    887     ASSERT(mainForFirstLoadInterceptTestBytes);
    888     ASSERT(scriptHandlingFetchBytes);
    889 
    890     [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    891 
    892     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
     721    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    893722
    894723    // Start with a clean slate data store
    895     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     724    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    896725        done = true;
    897726    }];
     
    900729
    901730    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    902     [configuration setWebsiteDataStore:dataStore];
    903731
    904732    RetainPtr<SWMessageHandlerWithExpectedMessage> messageHandler = adoptNS([[SWMessageHandlerWithExpectedMessage alloc] init]);
    905733    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    906734
    907     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    908     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainForFirstLoadInterceptTestBytes });
    909     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptInterceptingFirstLoadBytes });
    910     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     735    ServiceWorkerTCPServer server({
     736        { "text/html", mainForFirstLoadInterceptTestBytes },
     737        { "application/javascript", scriptInterceptingFirstLoadBytes },
     738    }, {
     739        { "application/javascript", scriptInterceptingFirstLoadBytes },
     740    });
    911741
    912742    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    913743
    914744    expectedMessage = "Service Worker activated";
    915     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    916     [webView loadRequest:request];
     745    [webView loadRequest:server.request()];
    917746
    918747    TestWebKitAPI::Util::run(&done);
     
    921750    configuration = nullptr;
    922751    messageHandler = nullptr;
    923     handler = nullptr;
    924752
    925753    done = false;
    926754
    927755    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    928     [configuration setWebsiteDataStore:dataStore];
    929756    messageHandler = adoptNS([[SWMessageHandlerWithExpectedMessage alloc] init]);
    930757    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    931758
    932     handler = adoptNS([[SWSchemes alloc] init]);
    933     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainForFirstLoadInterceptTestBytes });
    934     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptInterceptingFirstLoadBytes });
    935     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    936 
    937759    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    938760
    939761    expectedMessage = "Intercepted by worker";
    940     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    941     [webView loadRequest:request];
     762    [webView loadRequest:server.request()];
    942763
    943764    TestWebKitAPI::Util::run(&done);
     
    949770    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    950771
    951     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    952 
    953772    // Start with a clean slate data store
    954     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     773    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    955774        done = true;
    956775    }];
     
    959778
    960779    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    961     [configuration setWebsiteDataStore:dataStore];
    962780
    963781    RetainPtr<SWMessageHandlerWithExpectedMessage> messageHandler = adoptNS([[SWMessageHandlerWithExpectedMessage alloc] init]);
    964782    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    965783
    966     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    967     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainForFirstLoadInterceptTestBytes });
    968     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptInterceptingFirstLoadBytes });
    969     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     784    ServiceWorkerTCPServer server({
     785        { "text/html", mainForFirstLoadInterceptTestBytes },
     786        { "application/javascript", scriptInterceptingFirstLoadBytes },
     787    }, {
     788        { "application/javascript", scriptInterceptingFirstLoadBytes },
     789    });
    970790
    971791    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    973793    // Register a service worker and activate it.
    974794    expectedMessage = "Service Worker activated";
    975     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    976     [webView loadRequest:request];
     795    [webView loadRequest:server.request()];
    977796
    978797    TestWebKitAPI::Util::run(&done);
     
    981800    configuration = nullptr;
    982801    messageHandler = nullptr;
    983     handler = nullptr;
    984802
    985803    done = false;
    986804
    987805    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    988     [configuration setWebsiteDataStore:dataStore];
    989806    messageHandler = adoptNS([[SWMessageHandlerWithExpectedMessage alloc] init]);
    990807    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    991 
    992     handler = adoptNS([[SWSchemes alloc] init]);
    993     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainForFirstLoadInterceptTestBytes });
    994     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptInterceptingFirstLoadBytes });
    995     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    996808
    997809    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    999811    // Verify service worker is intercepting load.
    1000812    expectedMessage = "Intercepted by worker";
    1001     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1002     [webView loadRequest:request];
     813    [webView loadRequest:server.request()];
    1003814
    1004815    TestWebKitAPI::Util::run(&done);
     
    1015826
    1016827    // Verify service worker load goes well when policy delegate is ok.
    1017     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1018     [webView loadRequest:request];
     828    [webView loadRequest:server.request()];
    1019829    TestWebKitAPI::Util::run(&navigationComplete);
    1020830
     
    1030840
    1031841    // Verify service worker load fails well when policy delegate is not ok.
    1032     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1033     [webView loadRequest:request];
     842    [webView loadRequest:server.request()];
    1034843    TestWebKitAPI::Util::run(&navigationComplete);
    1035844
    1036845    EXPECT_TRUE(navigationFailed);
    1037846}
     847
    1038848#if WK_HAVE_C_SPI
    1039849
     
    1042852    WKRetainPtr<WKContextRef> context = adoptWK(TestWebKitAPI::Util::createContextForInjectedBundleTest("InternalsInjectedBundleTest"));
    1043853    configuration.processPool = (WKProcessPool *)context.get();
    1044     configuration.websiteDataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    1045854}
    1046855
     
    1072881TEST(ServiceWorkers, SWProcessConnectionCreation)
    1073882{
    1074     ASSERT(mainBytes);
    1075     ASSERT(scriptBytes);
    1076 
    1077883    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    1078884
     
    1101907    [[configuration userContentController] addScriptMessageHandler:regularPageMessageHandler.get() name:@"regularPage"];
    1102908
    1103     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    1104     handler->resources.set("sw://host/regularPageWithoutConnection.html", ResourceInfo { @"text/html", regularPageWithoutConnectionBytes });
    1105     handler->resources.set("sw://host/regularPageWithConnection.html", ResourceInfo { @"text/html", regularPageWithConnectionBytes });
    1106     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1107     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1108     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     909    ServiceWorkerTCPServer server({
     910        { "text/html", regularPageWithoutConnectionBytes },
     911        { "text/html", mainBytes },
     912        { "application/javascript", scriptBytes },
     913        { "text/html", regularPageWithConnectionBytes },
     914        { "text/html", regularPageWithConnectionBytes },
     915    });
    1109916
    1110917    RetainPtr<WKWebView> regularPageWebView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    1113920
    1114921    // Test that a regular page does not trigger a service worker connection to network process if there is no registered service worker.
    1115     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageWithoutConnection.html"]];
    1116 
    1117     [regularPageWebView loadRequest:request];
     922    [regularPageWebView loadRequest:server.request()];
    1118923    TestWebKitAPI::Util::run(&done);
    1119924    done = false;
    1120925
    1121926    // Test that a sw scheme page can register a service worker.
    1122     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1123 
    1124     [webView loadRequest:request];
     927    [webView loadRequest:server.request()];
    1125928    TestWebKitAPI::Util::run(&done);
    1126929    done = false;
     
    1128931
    1129932    // Now that a service worker is registered, the regular page should have a service worker connection.
    1130     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageWithConnection.html"]];
    1131 
    1132     [regularPageWebView loadRequest:request];
     933    [regularPageWebView loadRequest:server.request()];
    1133934    TestWebKitAPI::Util::run(&done);
    1134935    done = false;
    1135936    regularPageWebView = nullptr;
    1136937
    1137     [newRegularPageWebView loadRequest:request];
     938    [newRegularPageWebView loadRequest:server.request()];
    1138939    TestWebKitAPI::Util::run(&done);
    1139940    done = false;
     
    1142943    [[configuration websiteDataStore] fetchDataRecordsOfTypes:[NSSet setWithObject:WKWebsiteDataTypeServiceWorkerRegistrations] completionHandler:^(NSArray<WKWebsiteDataRecord *> *websiteDataRecords) {
    1143944        EXPECT_EQ(1u, [websiteDataRecords count]);
    1144         EXPECT_TRUE([websiteDataRecords[0].displayName isEqualToString:@"sw host"]);
     945        EXPECT_WK_STREQ(websiteDataRecords[0].displayName, "127.0.0.1");
    1145946
    1146947        done = true;
     
    12091010    [[configuration userContentController] addScriptMessageHandler:regularPageMessageHandler.get() name:@"regularPage"];
    12101011
    1211     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    1212     handler->resources.set("sw://host/regularPageWithoutConnection.html", ResourceInfo { @"text/html", regularPageWithoutConnectionBytes });
    1213     handler->resources.set("sw://host/regularPageWithConnection.html", ResourceInfo { @"text/html", regularPageWithConnectionBytes });
    1214     handler->resources.set("sw://host/mainWithScope.html", ResourceInfo { @"text/html", mainBytesWithScope });
    1215     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1216     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1217     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1012    ServiceWorkerTCPServer server({
     1013        { "text/html", mainBytesWithScope },
     1014        { "application/javascript", scriptBytes },
     1015    }, {
     1016        { "text/html", regularPageWithConnectionBytes },
     1017        { "text/html", mainBytes },
     1018        { "application/javascript", scriptBytes },
     1019    });
    12181020
    12191021    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    12201022
    12211023    // Load a page that registers a service worker.
    1222     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/mainWithScope.html"]];
    1223 
    1224     [webView loadRequest:request];
     1024    [webView loadRequest:server.request()];
    12251025    TestWebKitAPI::Util::run(&done);
    12261026    done = false;
     
    12341034    [[newConfiguration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    12351035    [[newConfiguration userContentController] addScriptMessageHandler:regularPageMessageHandler.get() name:@"regularPage"];
    1236     [newConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    12371036
    12381037    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:newConfiguration.get()]);
    12391038    EXPECT_EQ(1u, webView.get().configuration.processPool._webProcessCountIgnoringPrewarmed);
    1240     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageWithConnection.html"]];
    1241     [webView loadRequest:request];
     1039    [webView loadRequest:server.request()];
    12421040    TestWebKitAPI::Util::run(&done);
    12431041    done = false;
     
    12481046    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:newConfiguration.get()]);
    12491047    EXPECT_EQ(2u, webView.get().configuration.processPool._webProcessCountIgnoringPrewarmed);
    1250     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1251     [webView loadRequest:request];
     1048    [webView loadRequest:server.request()];
    12521049    TestWebKitAPI::Util::run(&done);
    12531050    done = false;
     
    12901087    [[configuration userContentController] addScriptMessageHandler:regularPageMessageHandler.get() name:@"regularPage"];
    12911088
    1292     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    1293     handler->resources.set("sw://host/regularPageWithoutConnection.html", ResourceInfo { @"text/html", regularPageWithoutConnectionBytes });
    1294     handler->resources.set("sw://host/regularPageWithConnection.html", ResourceInfo { @"text/html", regularPageWithConnectionBytes });
    1295     handler->resources.set("sw://host/mainWithScope.html", ResourceInfo { @"text/html", mainBytesWithScope });
    1296     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1297     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1298     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1089    ServiceWorkerTCPServer server({
     1090        { "text/html", mainBytesWithScope },
     1091        { "application/javascript", scriptBytes },
     1092    }, {
     1093        { "text/html", regularPageWithoutConnectionBytes },
     1094    }, {
     1095        { "text/html", regularPageWithConnectionBytes }
     1096    });
    12991097
    13001098    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    13011099
    13021100    // Load a page that registers a service worker.
    1303     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/mainWithScope.html"]];
    1304 
    1305     [webView loadRequest:request];
     1101    [webView loadRequest:server.request()];
    13061102    TestWebKitAPI::Util::run(&done);
    13071103    done = false;
     
    13141110    [[newConfiguration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    13151111    [[newConfiguration userContentController] addScriptMessageHandler:regularPageMessageHandler.get() name:@"regularPage"];
    1316     [newConfiguration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    13171112
    13181113    newConfiguration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
     
    13201115
    13211116    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:newConfiguration.get()]);
    1322     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageWithoutConnection.html"]];
    1323     [webView loadRequest:request];
     1117    [webView loadRequest:server.request()];
    13241118    TestWebKitAPI::Util::run(&done);
    13251119    done = false;
     
    13301124    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:newConfiguration.get()]);
    13311125    EXPECT_EQ(2u, webView.get().configuration.processPool._webProcessCountIgnoringPrewarmed);
    1332     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageWithConnection.html"]];
    1333     [webView loadRequest:request];
     1126    [webView loadRequest:server.request()];
    13341127    TestWebKitAPI::Util::run(&done);
    13351128    done = false;
     
    13991192    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    14001193
    1401     auto handler = adoptNS([[SWSchemes alloc] init]);
    1402     handler->resources.set("sw://host/readCache.html", ResourceInfo { @"text/html", readCacheBytes });
    1403     handler->resources.set("sw://host/writeCache.html", ResourceInfo { @"text/html", writeCacheBytes });
    1404     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    1405 
    1406     _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] initNonPersistentConfiguration] autorelease];
    1407     [dataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"];
    1408     configuration.get().websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration] autorelease];
     1194    ServiceWorkerTCPServer server({
     1195        { "text/html", writeCacheBytes },
     1196        { "text/html", readCacheBytes },
     1197    });
     1198
     1199    configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
    14091200
    14101201    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1411     auto *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/writeCache.html"]];
    1412     [webView loadRequest:request];
     1202    [webView loadRequest:server.request()];
    14131203    TestWebKitAPI::Util::run(&done);
    14141204    done = false;
    14151205
    14161206    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1417     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/readCache.html"]];
    1418     [webView loadRequest:request];
     1207    [webView loadRequest:server.request()];
    14191208    TestWebKitAPI::Util::run(&done);
    14201209    done = false;
     
    14601249    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    14611250
    1462     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    1463    
    14641251    // Start with a clean slate data store
    1465     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     1252    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    14661253        done = true;
    14671254    }];
     
    14731260    auto context = adoptWK(TestWebKitAPI::Util::createContextForInjectedBundleTest("InternalsInjectedBundleTest"));
    14741261    [configuration setProcessPool:(WKProcessPool *)context.get()];
    1475     [configuration setWebsiteDataStore:dataStore];
    14761262   
    14771263    auto defaultPreferences = [configuration preferences];
    14781264    [defaultPreferences _setSecureContextChecksEnabled:NO];
    14791265   
    1480     auto handler = adoptNS([[SWSchemes alloc] init]);
    1481     handler->resources.set("sw://host/openCache.html", ResourceInfo { @"text/html", "foo" });
    1482     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", serviceWorkerCacheAccessEphemeralSessionMainBytes });
    1483     handler->resources.set("sw://host/serviceworker-private-browsing-worker.js", ResourceInfo { @"application/javascript", serviceWorkerCacheAccessEphemeralSessionSWBytes });
    1484     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1266    ServiceWorkerTCPServer server({
     1267        { "text/html", serviceWorkerCacheAccessEphemeralSessionMainBytes },
     1268        { "application/javascript", serviceWorkerCacheAccessEphemeralSessionSWBytes },
     1269    });
    14851270
    14861271    auto defaultWebView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1487     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/openCache.html"]];
    1488     [defaultWebView synchronouslyLoadRequest:request];
    1489    
     1272    [defaultWebView synchronouslyLoadHTMLString:@"foo" baseURL:server.request().URL];
     1273
    14901274    bool openedCache = false;
    14911275    [defaultWebView evaluateJavaScript:@"self.caches.open('test');" completionHandler: [&] (id innerText, NSError *error) {
     
    14941278    TestWebKitAPI::Util::run(&openedCache);
    14951279
    1496     _WKWebsiteDataStoreConfiguration *nonPersistentConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] initNonPersistentConfiguration] autorelease];
    1497     [nonPersistentConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"];
    1498     configuration.get().websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:nonPersistentConfiguration] autorelease];
     1280    configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
    14991281
    15001282    auto messageHandler = adoptNS([[SWMessageHandlerForCacheStorage alloc] init]);
     
    15021284
    15031285    auto ephemeralWebView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1504     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1505 
    1506     [ephemeralWebView loadRequest:request];
     1286
     1287    [ephemeralWebView loadRequest:server.request()];
    15071288    TestWebKitAPI::Util::run(&done);
    15081289    done = false;
     
    15641345    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    15651346   
    1566     auto handler = adoptNS([[SWSchemes alloc] init]);
    1567     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", differentSessionsUseDifferentRegistrationsMainBytes });
    1568     handler->resources.set("sw://host/main2.html", ResourceInfo { @"text/html", defaultPageMainBytes });
    1569     handler->resources.set("sw://host/empty-worker.js", ResourceInfo { @"application/javascript", "" });
    1570     handler->resources.set("sw://host/private.html", ResourceInfo { @"text/html", privatePageMainBytes });
    1571     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1347    ServiceWorkerTCPServer server({
     1348        { "text/html", differentSessionsUseDifferentRegistrationsMainBytes },
     1349        { "application/javascript", "" },
     1350        { "text/html", defaultPageMainBytes }
     1351    }, {
     1352        { "text/html", privatePageMainBytes }
     1353    });
    15721354
    15731355    auto defaultWebView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1574     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1575     [defaultWebView synchronouslyLoadRequest:request];
    1576    
    1577     TestWebKitAPI::Util::run(&done);
    1578     done = false;
    1579    
    1580     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main2.html"]];
    1581     [defaultWebView synchronouslyLoadRequest:request];
    1582    
    1583     TestWebKitAPI::Util::run(&done);
    1584     done = false;
    1585    
     1356    [defaultWebView synchronouslyLoadRequest:server.request()];
     1357
     1358    TestWebKitAPI::Util::run(&done);
     1359    done = false;
     1360
     1361    [defaultWebView synchronouslyLoadRequest:server.request()];
     1362
     1363    TestWebKitAPI::Util::run(&done);
     1364    done = false;
     1365
    15861366    configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
    15871367    auto ephemeralWebView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1588     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/private.html"]];
    1589     [ephemeralWebView synchronouslyLoadRequest:request];
     1368    [ephemeralWebView synchronouslyLoadRequest:server.request()];
    15901369
    15911370    TestWebKitAPI::Util::run(&done);
     
    16171396TEST(ServiceWorkers, ServiceWorkerAndCacheStorageDefaultDirectories)
    16181397{
    1619     ASSERT(mainBytes);
    1620     ASSERT(scriptBytes);
    1621 
    1622     [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    1623 
    1624     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
     1398    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    16251399
    16261400    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    1627     [configuration setWebsiteDataStore:dataStore];
    16281401    setConfigurationInjectedBundlePath(configuration.get());
    16291402
     
    16311404    [[configuration userContentController] addScriptMessageHandler:directoryPageMessageHandler.get() name:@"sw"];
    16321405
    1633     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    1634     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1635     handler->resources.set("sw://host/regularPageGrabbingCacheStorageDirectory.html", ResourceInfo { @"text/html", regularPageGrabbingCacheStorageDirectory });
    1636     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1637     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1406    ServiceWorkerTCPServer server({
     1407        { "text/html", mainBytes },
     1408        { "application/javascript", scriptBytes },
     1409        { "text/html", regularPageGrabbingCacheStorageDirectory },
     1410    });
    16381411
    16391412    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1640     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1641 
    1642     [webView loadRequest:request];
     1413
     1414    [webView loadRequest:server.request()];
    16431415    TestWebKitAPI::Util::run(&done);
    16441416    done = false;
     
    16481420    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    16491421
    1650     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageGrabbingCacheStorageDirectory.html"]];
    1651     [webView loadRequest:request];
     1422    [webView loadRequest:server.request()];
    16521423    TestWebKitAPI::Util::run(&done);
    16531424    done = false;
     
    16631434TEST(ServiceWorkers, ServiceWorkerAndCacheStorageSpecificDirectories)
    16641435{
    1665     ASSERT(mainBytes);
    1666     ASSERT(scriptBytes);
    1667 
    16681436    [WKWebsiteDataStore defaultDataStore];
    16691437    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    16701438
    1671     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    1672 
    16731439    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    1674     [configuration setWebsiteDataStore:dataStore];
    16751440
    16761441    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     
    16831448    [[configuration userContentController] addScriptMessageHandler:directoryPageMessageHandler.get() name:@"sw"];
    16841449
    1685     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    1686     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1687     handler->resources.set("sw://host/regularPageGrabbingCacheStorageDirectory.html", ResourceInfo { @"text/html", regularPageGrabbingCacheStorageDirectory });
    1688     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1689     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1450    ServiceWorkerTCPServer server({
     1451        { "text/html", mainBytes },
     1452        { "application/javascript", scriptBytes },
     1453        { "text/html", regularPageGrabbingCacheStorageDirectory },
     1454    });
    16901455
    16911456    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    16921457
    1693     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1694     [webView loadRequest:request];
     1458    [webView loadRequest:server.request()];
    16951459    TestWebKitAPI::Util::run(&done);
    16961460    done = false;
    16971461    while (![websiteDataStore _hasRegisteredServiceWorker])
    1698         TestWebKitAPI::Util::spinRunLoop(0.1);
     1462        TestWebKitAPI::Util::spinRunLoop();
    16991463
    17001464    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1701     request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/regularPageGrabbingCacheStorageDirectory.html"]];
    1702 
    1703     [webView loadRequest:request];
     1465
     1466    [webView loadRequest:server.request()];
    17041467    TestWebKitAPI::Util::run(&done);
    17051468    done = false;
     
    17301493    websiteDataStoreConfiguration.get()._serviceWorkerRegistrationDirectory = serviceWorkersPath;
    17311494    websiteDataStoreConfiguration.get()._indexedDBDatabaseDirectory = idbPath;
    1732     [websiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"];
    17331495
    17341496    configuration.get().websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()] autorelease];
     
    17371499    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    17381500
    1739     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    1740     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytesForSessionIDTest });
    1741     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytesForSessionIDTest });
    1742     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1501    ServiceWorkerTCPServer server({
     1502        { "text/html", mainBytesForSessionIDTest },
     1503        { "application/javascript", scriptBytesForSessionIDTest },
     1504    });
    17431505
    17441506    expectedMessage = "PASS: activation successful";
    17451507    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    17461508
    1747     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1748     [webView loadRequest:request];
     1509    [webView loadRequest:server.request()];
    17491510
    17501511    TestWebKitAPI::Util::run(&done);
     
    17581519    [configuration.get().websiteDataStore fetchDataRecordsOfTypes:[NSSet setWithObject:WKWebsiteDataTypeServiceWorkerRegistrations] completionHandler:^(NSArray<WKWebsiteDataRecord *> *websiteDataRecords) {
    17591520        EXPECT_EQ(1u, [websiteDataRecords count]);
    1760         EXPECT_TRUE([websiteDataRecords[0].displayName isEqualToString:@"sw host"]);
     1521        EXPECT_WK_STREQ(websiteDataRecords[0].displayName, "127.0.0.1");
    17611522
    17621523        done = true;
     
    17781539TEST(ServiceWorkers, ProcessPerSite)
    17791540{
    1780     ASSERT(mainBytes);
    1781     ASSERT(scriptBytes);
    1782 
    17831541    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    17841542
     
    17871545    _WKWebsiteDataStoreConfiguration *dataStoreConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease];
    17881546    dataStoreConfiguration.serviceWorkerProcessTerminationDelayEnabled = NO;
    1789     [dataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw1"];
    1790     [dataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw2"];
    17911547
    17921548    auto dataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:dataStoreConfiguration]);
     
    18051561    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    18061562
    1807     RetainPtr<SWSchemes> handler1 = adoptNS([[SWSchemes alloc] init]);
    1808     handler1->resources.set("sw1://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1809     handler1->resources.set("sw1://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1810     handler1->resources.set("sw1://host2/main.html", ResourceInfo { @"text/html", mainBytes });
    1811     handler1->resources.set("sw1://host2/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1812     [configuration setURLSchemeHandler:handler1.get() forURLScheme:@"sw1"];
    1813 
    1814     RetainPtr<SWSchemes> handler2 = adoptNS([[SWSchemes alloc] init]);
    1815     handler2->resources.set("sw2://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1816     handler2->resources.set("sw2://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1817     [configuration setURLSchemeHandler:handler2.get() forURLScheme:@"sw2"];
     1563    ServiceWorkerTCPServer server1({
     1564        { "text/html", mainBytes },
     1565        { "application/javascript", scriptBytes },
     1566        { "text/html", mainBytes },
     1567        { "text/html", mainBytes },
     1568    });
     1569    ServiceWorkerTCPServer server2({
     1570        { "text/html", mainBytes },
     1571        { "application/javascript", scriptBytes },
     1572    });
    18181573
    18191574    WKProcessPool *processPool = configuration.get().processPool;
     
    18211576    RetainPtr<WKWebView> webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    18221577
    1823     NSURLRequest *request1 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw1://host/main.html"]];
    1824     [webView1 loadRequest:request1];
     1578    [webView1 loadRequest:server1.request()];
    18251579
    18261580    TestWebKitAPI::Util::run(&done);
     
    18301584
    18311585    RetainPtr<WKWebView> webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1832     [webView2 loadRequest:request1];
     1586    [webView2 loadRequest:server1.request()];
    18331587
    18341588    TestWebKitAPI::Util::run(&done);
     
    18381592
    18391593    RetainPtr<WKWebView> webView3 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1840     NSURLRequest *request2 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw2://host/main.html"]];
    1841     [webView3 loadRequest:request2];
     1594    [webView3 loadRequest:server1.request()];
    18421595
    18431596    TestWebKitAPI::Util::run(&done);
     
    18471600
    18481601    RetainPtr<WKWebView> webView4 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1849     NSURLRequest *request3 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw1://host2/main.html"]];
    1850     [webView4 loadRequest:request3];
     1602    [webView4 loadRequest:server2.requestWithLocalhost()];
    18511603
    18521604    TestWebKitAPI::Util::run(&done);
     
    18751627    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    18761628
    1877     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw1");
    1878 
    18791629    // Start with a clean slate data store
    1880     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     1630    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    18811631        done = true;
    18821632    }];
     
    18851635
    18861636    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    1887     [configuration setWebsiteDataStore:dataStore];
    18881637
    18891638    auto messageHandler = adoptNS([[SWMessageHandler alloc] init]);
    18901639    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    18911640
    1892     auto handler1 = adoptNS([[SWSchemes alloc] init]);
    1893     handler1->resources.set("sw1://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1894     handler1->resources.set("sw1://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1895     handler1->resources.set("sw1://host2/main.html", ResourceInfo { @"text/html", mainBytes });
    1896     handler1->resources.set("sw1://host2/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1897     [configuration setURLSchemeHandler:handler1.get() forURLScheme:@"sw1"];
     1641    ServiceWorkerTCPServer server1({
     1642        { "text/html", mainBytes },
     1643        { "application/javascript", scriptBytes },
     1644    });
     1645    ServiceWorkerTCPServer server2({
     1646        { "text/html", mainBytes },
     1647        { "application/javascript", scriptBytes },
     1648    });
    18981649
    18991650    auto *processPool = configuration.get().processPool;
    19001651
    19011652    auto webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1902     NSURLRequest *request1 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw1://host/main.html"]];
    19031653
    19041654    auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1905     NSURLRequest *request2 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw1://host2/main.html"]];
    1906 
    1907     [webView1 loadRequest:request1];
    1908     [webView2 loadRequest:request2];
     1655
     1656    [webView1 loadRequest:server1.request()];
     1657    [webView2 loadRequest:server2.requestWithLocalhost()];
    19091658
    19101659    waitUntilServiceWorkerProcessCount(processPool, 2);
     
    19151664    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    19161665
    1917     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    1918 
    19191666    // Start with a clean slate data store
    1920     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     1667    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    19211668        done = true;
    19221669    }];
     
    19251672
    19261673    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    1927     [configuration setWebsiteDataStore:dataStore];
    19281674
    19291675    auto messageHandler = adoptNS([[SWMessageHandler alloc] init]);
    19301676    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    19311677
    1932     auto handler1 = adoptNS([[SWSchemes alloc] init]);
    1933     handler1->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1934     handler1->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1935     handler1->resources.set("sw://host2/main.html", ResourceInfo { @"text/html", mainBytes });
    1936     handler1->resources.set("sw://host2/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    1937     [configuration setURLSchemeHandler:handler1.get() forURLScheme:@"sw"];
     1678    ServiceWorkerTCPServer server({
     1679        { "text/html", mainBytes },
     1680        { "application/javascript", scriptBytes },
     1681    });
    19381682
    19391683    auto *processPool = configuration.get().processPool;
     
    19411685
    19421686    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    1943     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    1944 
    1945     [webView loadRequest:request];
     1687
     1688    [webView loadRequest:server.request()];
    19461689
    19471690    waitUntilServiceWorkerProcessCount(processPool, 1);
     
    19601703TEST(ServiceWorkers, ThrottleCrash)
    19611704{
    1962     ASSERT(mainBytes);
    1963     ASSERT(scriptBytes);
    1964 
    1965     [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    1966 
    1967     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw1");
     1705    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    19681706
    19691707    // Start with a clean slate data store
    1970     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     1708    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    19711709        done = true;
    19721710    }];
     
    19761714    auto messageHandler = adoptNS([[SWMessageHandler alloc] init]);
    19771715
    1978     auto handler = adoptNS([[SWSchemes alloc] init]);
    1979     handler->resources.set("sw1://host/main.html", ResourceInfo { @"text/html", mainBytes });
    1980     handler->resources.set("sw1://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
     1716    ServiceWorkerTCPServer server({
     1717        { "text/html", mainBytes },
     1718        { "application/javascript", scriptBytes },
     1719        { "text/html", mainBytes },
     1720    });
    19811721
    19821722    auto navigationDelegate = adoptNS([[TestNavigationDelegate alloc] init]);
     
    19861726
    19871727    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    1988     [configuration setWebsiteDataStore:dataStore];
    19891728#if PLATFORM(MAC)
    19901729    [[configuration preferences] _setAppNapEnabled:YES];
    19911730#endif
    19921731    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    1993     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"sw1"];
    19941732
    19951733    auto *processPool = configuration.get().processPool;
     
    20041742#endif
    20051743
    2006     auto *request1 = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw1://host/main.html"]];
    2007     [webView1 loadRequest:request1];
     1744    [webView1 loadRequest:server.request()];
    20081745
    20091746    didFinishNavigation = false;
    20101747    TestWebKitAPI::Util::run(&didFinishNavigation);
     1748    TestWebKitAPI::Util::run(&done);
     1749    done = false;
    20111750
    20121751    auto webView2Configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     
    20151754#endif
    20161755    [webView2Configuration setProcessPool:processPool];
    2017     [webView2Configuration setWebsiteDataStore:dataStore];
    20181756    [[webView2Configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    2019     [webView2Configuration setURLSchemeHandler:handler.get() forURLScheme:@"sw1"];
    20201757    webView2Configuration.get()._relatedWebView = webView1.get();
    20211758
     
    20231760    [webView2 setNavigationDelegate:navigationDelegate.get()];
    20241761
    2025     [webView2 loadRequest:request1];
     1762    [webView2 loadRequest:server.request()];
    20261763
    20271764    didFinishNavigation = false;
     
    20311768TEST(ServiceWorkers, LoadData)
    20321769{
    2033     ASSERT(mainBytes);
    2034     ASSERT(scriptBytes);
    2035 
    2036     [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    2037 
    2038     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
     1770    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    20391771
    20401772    // Start with a clean slate data store
    2041     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     1773    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    20421774        done = true;
    20431775    }];
     
    20461778
    20471779    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    2048     [configuration setWebsiteDataStore:dataStore];
    20491780
    20501781    RetainPtr<SWMessageHandler> messageHandler = adoptNS([[SWMessageHandler alloc] init]);
    20511782    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    20521783
    2053     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    2054     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    2055     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    2056     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1784    ServiceWorkerTCPServer server({
     1785        { "text/html", mainBytes },
     1786        { "application/javascript", scriptBytes },
     1787    });
    20571788
    20581789    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    20651796
    20661797    // Normal load to get SW registered.
    2067     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    2068     [webView loadRequest:request];
     1798    [webView loadRequest:server.request()];
    20691799
    20701800    TestWebKitAPI::Util::run(&done);
     
    20731803    // Now try a data load.
    20741804    NSData *data = [NSData dataWithBytes:mainBytes length:strlen(mainBytes)];
    2075     [webView loadData:data MIMEType:@"text/html" characterEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@"sw://host/main.html"]];
     1805    [webView loadData:data MIMEType:@"text/html" characterEncodingName:@"UTF-8" baseURL:server.request().URL];
    20761806
    20771807    TestWebKitAPI::Util::run(&done);
     
    20811811TEST(ServiceWorkers, RestoreFromDiskNonDefaultStore)
    20821812{
    2083     ASSERT(mainRegisteringWorkerBytes);
    2084     ASSERT(scriptBytes);
    2085     ASSERT(mainRegisteringAlreadyExistingWorkerBytes);
    2086 
    20871813    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    20881814
     
    20961822    RetainPtr<WKProcessPool> protectedProcessPool;
    20971823
     1824    ServiceWorkerTCPServer server({
     1825        { "text/html", mainRegisteringWorkerBytes },
     1826        { "application/javascript", scriptBytes },
     1827    }, {
     1828        { "text/html", mainRegisteringAlreadyExistingWorkerBytes },
     1829        { "application/javascript", scriptBytes },
     1830    });
     1831
    20981832    @autoreleasepool {
    20991833        auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     
    21011835        auto websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]);
    21021836        websiteDataStoreConfiguration.get()._serviceWorkerRegistrationDirectory = swDBPath;
    2103         [websiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"];
    21041837        auto nonDefaultDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]);
    21051838        configuration.get().websiteDataStore = nonDefaultDataStore.get();
     
    21081841        [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    21091842
    2110         auto handler = adoptNS([[SWSchemes alloc] init]);
    2111         handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainRegisteringWorkerBytes });
    2112         handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    2113         [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    2114 
    21151843        auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    21161844        protectedProcessPool = webView.get().configuration.processPool;
    21171845
    2118         [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]];
     1846        [webView loadRequest:server.request()];
    21191847
    21201848        TestWebKitAPI::Util::run(&done);
     
    21291857        auto websiteDataStoreConfiguration = adoptNS([[_WKWebsiteDataStoreConfiguration alloc] init]);
    21301858        websiteDataStoreConfiguration.get()._serviceWorkerRegistrationDirectory = swDBPath;
    2131         [websiteDataStoreConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw"];
    21321859        auto nonDefaultDataStore = adoptNS([[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration.get()]);
    21331860        configuration.get().websiteDataStore = nonDefaultDataStore.get();
     
    21361863        [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    21371864
    2138         auto handler = adoptNS([[SWSchemes alloc] init]);
    2139         handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainRegisteringAlreadyExistingWorkerBytes });
    2140         handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    2141         [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
    2142 
    21431865        auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    21441866
    2145         [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]]];
     1867        [webView loadRequest:server.request()];
    21461868
    21471869        TestWebKitAPI::Util::run(&done);
     
    21541876    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    21551877
    2156     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw");
    2157    
    21581878    // Start with a clean slate data store
    2159     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     1879    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    21601880        done = true;
    21611881    }];
     
    21641884
    21651885    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    2166     [configuration setWebsiteDataStore:dataStore];
    21671886
    21681887    RetainPtr<SWMessageHandler> messageHandler = adoptNS([[SWMessageHandler alloc] init]);
    21691888    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    21701889
    2171     RetainPtr<SWSchemes> handler = adoptNS([[SWSchemes alloc] init]);
    2172     handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainBytes });
    2173     handler->resources.set("sw://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    2174     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
     1890    ServiceWorkerTCPServer server({
     1891        { "text/html", mainBytes },
     1892        { "application/javascript", scriptBytes },
     1893        { "text/html", mainBytes },
     1894    });
    21751895
    21761896    RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     
    21831903
    21841904    // Normal load to get SW registered.
    2185     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
    2186     [webView loadRequest:request];
     1905    [webView loadRequest:server.request()];
    21871906
    21881907    TestWebKitAPI::Util::run(&done);
     
    22031922    [ webView.get().configuration.processPool _sendNetworkProcessDidResume];
    22041923
    2205     [webView loadRequest:request];
     1924    [webView loadRequest:server.request()];
    22061925    TestWebKitAPI::Util::run(&done);
    22071926    done = false;
     
    22411960    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
    22421961
    2243     auto* dataStore = dataStoreWithRegisteredServiceWorkerScheme(@"sw1");
    2244    
    22451962    // Start with a clean slate data store
    2246     [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     1963    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    22471964        done = true;
    22481965    }];
     
    22511968
    22521969    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    2253     [configuration setWebsiteDataStore:dataStore];
    22541970
    22551971    auto messageHandler = adoptNS([[SWMessageHandler alloc] init]);
    22561972    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
    22571973
    2258     auto handler1 = adoptNS([[SWSchemes alloc] init]);
    2259     handler1->resources.set("sw1://host/main.html", ResourceInfo { @"text/html", mainBytes });
    2260     handler1->resources.set("sw1://host/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    2261     handler1->resources.set("sw1://host2/main.html", ResourceInfo { @"text/html", mainBytes });
    2262     handler1->resources.set("sw1://host2/sw.js", ResourceInfo { @"application/javascript", scriptBytes });
    2263     [configuration setURLSchemeHandler:handler1.get() forURLScheme:@"sw1"];
     1974    ServiceWorkerTCPServer server1({
     1975        { "text/html", mainBytes },
     1976        { "application/javascript", scriptBytes },
     1977    });
    22641978
    22651979    WKProcessPool *processPool = configuration.get().processPool;
    22661980
    2267     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw1://host/main.html"]];
    2268 
    2269     configuration.get().websiteDataStore = dataStore;
    2270 
    22711981    auto webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    2272     [webView1 loadRequest:request];
     1982    [webView1 loadRequest:server1.request()];
    22731983    TestWebKitAPI::Util::run(&done);
    22741984    done = false;
     
    22761986    EXPECT_EQ(1U, processPool._serviceWorkerProcessCount);
    22771987
    2278     _WKWebsiteDataStoreConfiguration *nonPersistentConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] initNonPersistentConfiguration] autorelease];
    2279     [nonPersistentConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"sw1"];
    2280     configuration.get().websiteDataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:nonPersistentConfiguration] autorelease];
     1988    configuration.get().websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
     1989
     1990    ServiceWorkerTCPServer server2({
     1991        { "text/html", mainBytes },
     1992        { "application/javascript", scriptBytes },
     1993    });
    22811994
    22821995    auto webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    2283     [webView2 loadRequest:request];
     1996    [webView2 loadRequest:server2.requestWithLocalhost()];
    22841997    TestWebKitAPI::Util::run(&done);
    22851998    done = false;
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/StorageQuota.mm

    r250728 r251384  
    2828
    2929#import "PlatformUtilities.h"
     30#import "ServiceWorkerTCPServer.h"
    3031#import "Test.h"
    3132#import "TestNavigationDelegate.h"
     
    110111};
    111112
    112 @interface StorageSchemes : NSObject <WKURLSchemeHandler> {
    113 @public
    114     HashMap<String, ResourceInfo> resources;
    115 }
    116 @end
    117 
    118 @implementation StorageSchemes {
    119 }
    120 
    121 - (void)webView:(WKWebView *)webView startURLSchemeTask:(id <WKURLSchemeTask>)task
    122 {
    123     auto entry = resources.find([task.request.URL absoluteString]);
    124     if (entry == resources.end()) {
    125         NSLog(@"Did not find resource entry for URL %@", task.request.URL);
    126         return;
    127     }
    128    
    129     RetainPtr<NSURLResponse> response = adoptNS([[NSURLResponse alloc] initWithURL:task.request.URL MIMEType:entry->value.mimeType.get() expectedContentLength:1 textEncodingName:nil]);
    130     [task didReceiveResponse:response.get()];
    131    
    132     [task didReceiveData:[NSData dataWithBytesNoCopy:(void*)entry->value.data length:strlen(entry->value.data) freeWhenDone:NO]];
    133     [task didFinish];
    134 }
    135 
    136 - (void)webView:(WKWebView *)webView stopURLSchemeTask:(id <WKURLSchemeTask>)task
    137 {
    138 }
    139 
    140 @end
    141 
    142113static bool receivedMessage;
    143114
     
    228199    _WKWebsiteDataStoreConfiguration *storeConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease];
    229200    storeConfiguration.perOriginStorageQuota = 1024 * 400;
    230     [storeConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"qt1"];
    231     [storeConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"qt2"];
    232201    WKWebsiteDataStore *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:storeConfiguration] autorelease];
    233202    [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     
    242211    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"qt"];
    243212
    244     auto handler1 = adoptNS([[StorageSchemes alloc] init]);
    245     handler1->resources.set("qt1://test1.html", ResourceInfo { @"text/html", TestBytes });
    246     [configuration setURLSchemeHandler:handler1.get() forURLScheme:@"QT1"];
    247 
    248     auto handler2 = adoptNS([[StorageSchemes alloc] init]);
    249     handler2->resources.set("qt2://test2.html", ResourceInfo { @"text/html", TestBytes });
    250     [configuration setURLSchemeHandler:handler2.get() forURLScheme:@"QT2"];
     213    ServiceWorkerTCPServer server({
     214        { "text/html", TestBytes }
     215    }, {
     216        { "text/html", TestBytes }
     217    });
    251218
    252219    auto webView1 = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]);
     
    256223   
    257224    receivedQuotaDelegateCalled = false;
    258     [webView1 loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qt1://test1.html"]]];
     225    [webView1 loadRequest:server.request()];
    259226    Util::run(&receivedQuotaDelegateCalled);
    260227
     
    265232
    266233    receivedMessage = false;
    267     [webView2 loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qt2://test2.html"]]];
     234    [webView2 loadRequest:server.requestWithLocalhost()];
    268235    [messageHandler setExpectedMessage: @"start"];
    269236    Util::run(&receivedMessage);
     
    290257    done = false;
    291258    _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"];
    341259    storeConfiguration.perOriginStorageQuota = 1024 * 400;
    342260    WKWebsiteDataStore *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:storeConfiguration] autorelease];
     
    345263    }];
    346264    TestWebKitAPI::Util::run(&done);
    347 
     265   
    348266    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    349267    [configuration setWebsiteDataStore:dataStore];
    350 
     268   
    351269    auto messageHandler = adoptNS([[QuotaMessageHandler alloc] init]);
    352270    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"qt"];
    353 
    354     auto handler = adoptNS([[StorageSchemes alloc] init]);
    355     handler->resources.set("qt://test1.html", ResourceInfo { @"text/html", TestBytes });
    356     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"QT"];
    357 
     271   
     272    ServiceWorkerTCPServer server({
     273        { "text/html", TestBytes },
     274        { "text/html", TestBytes }
     275    });
     276   
    358277    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]);
    359278    auto delegate = adoptNS([[QuotaDelegate alloc] init]);
     
    362281
    363282    receivedQuotaDelegateCalled = false;
    364     [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qt://test1.html"]]];
     283    [webView loadRequest:server.request()];
    365284    Util::run(&receivedQuotaDelegateCalled);
    366285
     
    372291
    373292    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)
     293    [webView reload];
     294    Util::run(&receivedQuotaDelegateCalled);
     295
     296    [delegate grantQuota];
     297
     298    [messageHandler setExpectedMessage: @"pass"];
     299    receivedMessage = false;
     300    Util::run(&receivedMessage);
     301}
     302
     303TEST(WebKit, QuotaDelegateNavigateFragment)
    389304{
    390305    done = false;
    391306    _WKWebsiteDataStoreConfiguration *storeConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease];
    392     [storeConfiguration registerURLSchemeServiceWorkersCanHandleForTesting:@"qt"];
     307    storeConfiguration.perOriginStorageQuota = 1024 * 400;
    393308    WKWebsiteDataStore *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:storeConfiguration] autorelease];
    394 
    395309    [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
    396310        done = true;
     
    404318    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"qt"];
    405319
    406     auto handler = adoptNS([[StorageSchemes alloc] init]);
    407     handler->resources.set("qt://test1.html", ResourceInfo { @"text/html", TestUrlBytes });
    408     [configuration setURLSchemeHandler:handler.get() forURLScheme:@"QT"];
     320    ServiceWorkerTCPServer server({
     321        { "text/html", TestBytes }
     322    });
     323
     324    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]);
     325    auto delegate = adoptNS([[QuotaDelegate alloc] init]);
     326    [webView setUIDelegate:delegate.get()];
     327    setVisible(webView.get());
     328
     329    receivedQuotaDelegateCalled = false;
     330    [webView loadRequest:server.request()];
     331    Util::run(&receivedQuotaDelegateCalled);
     332
     333    [delegate denyQuota];
     334
     335    [messageHandler setExpectedMessage: @"fail"];
     336    receivedMessage = false;
     337    Util::run(&receivedMessage);
     338
     339    receivedQuotaDelegateCalled = false;
     340    [webView loadRequest:server.requestWithFragment()];
     341    [webView stringByEvaluatingJavaScript:@"doTestAgain()"];
     342
     343    [messageHandler setExpectedMessage: @"start"];
     344    receivedMessage = false;
     345    Util::run(&receivedMessage);
     346
     347    [messageHandler setExpectedMessage: @"fail"];
     348    receivedMessage = false;
     349    Util::run(&receivedMessage);
     350
     351    EXPECT_FALSE(receivedQuotaDelegateCalled);
     352}
     353
     354TEST(WebKit, DefaultQuota)
     355{
     356    done = false;
     357    _WKWebsiteDataStoreConfiguration *storeConfiguration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease];
     358    WKWebsiteDataStore *dataStore = [[[WKWebsiteDataStore alloc] _initWithConfiguration:storeConfiguration] autorelease];
     359
     360    [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
     361        done = true;
     362    }];
     363    TestWebKitAPI::Util::run(&done);
     364
     365    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     366    [configuration setWebsiteDataStore:dataStore];
     367
     368    auto messageHandler = adoptNS([[QuotaMessageHandler alloc] init]);
     369    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"qt"];
     370
     371    ServiceWorkerTCPServer server({
     372        { "text/html", TestUrlBytes }
     373    });
    409374
    410375    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get() addToWindow:YES]);
     
    420385
    421386    didFinishNavigation = false;
    422     [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"qt://test1.html"]]];
     387    [webView loadRequest:server.request()];
    423388    Util::run(&didFinishNavigation);
    424389
Note: See TracChangeset for help on using the changeset viewer.