Changeset 250377 in webkit


Ignore:
Timestamp:
Sep 25, 2019, 9:24:23 PM (6 years ago)
Author:
achristensen@apple.com
Message:

Add replacement SPI on _WKWebsiteDataStoreConfiguration for enabling speculative cache validation and IPC-free server trust evaluation
https://bugs.webkit.org/show_bug.cgi?id=202251

Reviewed by Tim Horton.

Source/WebKit:

These are two performance optimizations that are currently per-ProcessPool that need to be per-WebsiteDataStore.
This makes replacement SPI and deprecates the old SPI. I'm going to adopt the new SPI then remove the old SPI.

  • NetworkProcess/NetworkSession.cpp:

(WebKit::NetworkSession::NetworkSession):

  • NetworkProcess/NetworkSessionCreationParameters.cpp:

(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):

  • NetworkProcess/NetworkSessionCreationParameters.h:
  • NetworkProcess/cocoa/NetworkSessionCocoa.h:
  • NetworkProcess/cocoa/NetworkSessionCocoa.mm:

(-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
(WebKit::NetworkSessionCocoa::NetworkSessionCocoa):

  • UIProcess/API/C/WKContextPrivate.h:
  • UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
  • UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
  • UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:

(-[_WKWebsiteDataStoreConfiguration networkCacheSpeculativeValidationEnabled]):
(-[_WKWebsiteDataStoreConfiguration setNetworkCacheSpeculativeValidationEnabled:]):
(-[_WKWebsiteDataStoreConfiguration fastServerTrustEvaluationEnabled]):
(-[_WKWebsiteDataStoreConfiguration setFastServerTrustEvaluationEnabled:]):

  • UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:

(WebKit::WebsiteDataStore::parameters):

  • UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:

(WebKit::WebsiteDataStoreConfiguration::copy):

  • UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:

(WebKit::WebsiteDataStoreConfiguration::fastServerTrustEvaluationEnabled const):
(WebKit::WebsiteDataStoreConfiguration::setFastServerTrustEvaluationEnabled):
(WebKit::WebsiteDataStoreConfiguration::networkCacheSpeculativeValidationEnabled const):
(WebKit::WebsiteDataStoreConfiguration::setNetworkCacheSpeculativeValidationEnabled):

Tools:

Adopt new SPI instead of deprecated SPI.

  • MiniBrowser/mac/AppDelegate.m:

(persistentDataStore):
(defaultConfiguration):
(-[BrowserAppDelegate fetchDefaultStoreWebsiteData:]):
(-[BrowserAppDelegate fetchAndClearDefaultStoreWebsiteData:]):
(-[BrowserAppDelegate clearDefaultStoreWebsiteData:]):

Location:
trunk
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r250373 r250377  
     12019-09-25  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add replacement SPI on _WKWebsiteDataStoreConfiguration for enabling speculative cache validation and IPC-free server trust evaluation
     4        https://bugs.webkit.org/show_bug.cgi?id=202251
     5
     6        Reviewed by Tim Horton.
     7
     8        These are two performance optimizations that are currently per-ProcessPool that need to be per-WebsiteDataStore.
     9        This makes replacement SPI and deprecates the old SPI.  I'm going to adopt the new SPI then remove the old SPI.
     10
     11        * NetworkProcess/NetworkSession.cpp:
     12        (WebKit::NetworkSession::NetworkSession):
     13        * NetworkProcess/NetworkSessionCreationParameters.cpp:
     14        (WebKit::NetworkSessionCreationParameters::encode const):
     15        (WebKit::NetworkSessionCreationParameters::decode):
     16        * NetworkProcess/NetworkSessionCreationParameters.h:
     17        * NetworkProcess/cocoa/NetworkSessionCocoa.h:
     18        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
     19        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
     20        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
     21        * UIProcess/API/C/WKContextPrivate.h:
     22        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
     23        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
     24        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
     25        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
     26        (-[_WKWebsiteDataStoreConfiguration networkCacheSpeculativeValidationEnabled]):
     27        (-[_WKWebsiteDataStoreConfiguration setNetworkCacheSpeculativeValidationEnabled:]):
     28        (-[_WKWebsiteDataStoreConfiguration fastServerTrustEvaluationEnabled]):
     29        (-[_WKWebsiteDataStoreConfiguration setFastServerTrustEvaluationEnabled:]):
     30        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
     31        (WebKit::WebsiteDataStore::parameters):
     32        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
     33        (WebKit::WebsiteDataStoreConfiguration::copy):
     34        * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
     35        (WebKit::WebsiteDataStoreConfiguration::fastServerTrustEvaluationEnabled const):
     36        (WebKit::WebsiteDataStoreConfiguration::setFastServerTrustEvaluationEnabled):
     37        (WebKit::WebsiteDataStoreConfiguration::networkCacheSpeculativeValidationEnabled const):
     38        (WebKit::WebsiteDataStoreConfiguration::setNetworkCacheSpeculativeValidationEnabled):
     39
    1402019-09-25  Wenson Hsieh  <wenson_hsieh@apple.com>
    241
  • trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp

    r250344 r250377  
    9191            SandboxExtension::consumePermanently(parameters.networkCacheDirectoryExtensionHandle);
    9292
    93         m_cache = NetworkCache::Cache::open(networkProcess, networkCacheDirectory, networkProcess.cacheOptions(), m_sessionID);
     93        auto cacheOptions = networkProcess.cacheOptions();
     94#if ENABLE(NETWORK_CACHE_SPECULATIVE_REVALIDATION)
     95        if (parameters.networkCacheSpeculativeValidationEnabled)
     96            cacheOptions.add(NetworkCache::CacheOption::SpeculativeRevalidation);
     97#endif
     98
     99        m_cache = NetworkCache::Cache::open(networkProcess, networkCacheDirectory, cacheOptions, m_sessionID);
    94100        if (!m_cache)
    95101            RELEASE_LOG_ERROR(NetworkCache, "Failed to initialize the WebKit network disk cache");
  • trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.cpp

    r250351 r250377  
    7676    encoder << allLoadsBlockedByDeviceManagementRestrictionsForTesting;
    7777    encoder << dataConnectionServiceType;
     78    encoder << fastServerTrustEvaluationEnabled;
     79    encoder << networkCacheSpeculativeValidationEnabled;
    7880}
    7981
     
    223225    decoder >> dataConnectionServiceType;
    224226    if (!dataConnectionServiceType)
     227        return WTF::nullopt;
     228   
     229    Optional<bool> fastServerTrustEvaluationEnabled;
     230    decoder >> fastServerTrustEvaluationEnabled;
     231    if (!fastServerTrustEvaluationEnabled)
     232        return WTF::nullopt;
     233   
     234    Optional<bool> networkCacheSpeculativeValidationEnabled;
     235    decoder >> networkCacheSpeculativeValidationEnabled;
     236    if (!networkCacheSpeculativeValidationEnabled)
    225237        return WTF::nullopt;
    226238   
     
    259271        , WTFMove(*networkCacheDirectory)
    260272        , WTFMove(*networkCacheDirectoryExtensionHandle)
    261         , WTFMove(*dataConnectionServiceType),
     273        , WTFMove(*dataConnectionServiceType)
     274        , WTFMove(*fastServerTrustEvaluationEnabled)
     275        , WTFMove(*networkCacheSpeculativeValidationEnabled)
    262276    }};
    263277}
  • trunk/Source/WebKit/NetworkProcess/NetworkSessionCreationParameters.h

    r250351 r250377  
    9494    SandboxExtension::Handle networkCacheDirectoryExtensionHandle;
    9595    String dataConnectionServiceType;
     96    bool fastServerTrustEvaluationEnabled { false };
     97    bool networkCacheSpeculativeValidationEnabled { false };
    9698};
    9799
  • trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.h

    r249619 r250377  
    8080    void continueDidReceiveChallenge(const WebCore::AuthenticationChallenge&, NetworkDataTaskCocoa::TaskIdentifier, NetworkDataTaskCocoa*, CompletionHandler<void(WebKit::AuthenticationChallengeDisposition, const WebCore::Credential&)>&&);
    8181
     82    bool fastServerTrustEvaluationEnabled() const { return m_fastServerTrustEvaluationEnabled; }
    8283    bool deviceManagementRestrictionsEnabled() const { return m_deviceManagementRestrictionsEnabled; }
    8384    bool allLoadsBlockedByDeviceManagementRestrictionsForTesting() const { return m_allLoadsBlockedByDeviceManagementRestrictionsForTesting; }
     
    137138    bool m_shouldLogCookieInformation { false };
    138139    Seconds m_loadThrottleLatency;
     140    bool m_fastServerTrustEvaluationEnabled { false };
    139141};
    140142
  • trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm

    r250349 r250377  
    579579
    580580        // Handle server trust evaluation at platform-level if requested, for performance reasons and to use ATS defaults.
    581         if (!_session->networkProcess().canHandleHTTPSServerTrustEvaluation()) {
     581        if (!_session->networkProcess().canHandleHTTPSServerTrustEvaluation() || _session->fastServerTrustEvaluationEnabled()) {
    582582#if HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE)
    583583            if (canNSURLSessionTrustEvaluate()) {
     
    923923    , m_shouldLogCookieInformation(parameters.shouldLogCookieInformation)
    924924    , m_loadThrottleLatency(parameters.loadThrottleLatency)
     925    , m_fastServerTrustEvaluationEnabled(parameters.fastServerTrustEvaluationEnabled)
    925926{
    926927    ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
  • trunk/Source/WebKit/UIProcess/API/C/WKContextPrivate.h

    r249671 r250377  
    6868WK_EXPORT void WKContextSetDomainRelaxationForbiddenForURLScheme(WKContextRef context, WKStringRef urlScheme);
    6969
    70 WK_EXPORT void WKContextSetCanHandleHTTPSServerTrustEvaluation(WKContextRef context, bool value);
     70WK_EXPORT void WKContextSetCanHandleHTTPSServerTrustEvaluation(WKContextRef context, bool value) WK_C_API_DEPRECATED;
    7171
    7272WK_EXPORT void WKContextSetPrewarmsProcessesAutomatically(WKContextRef context, bool value);
    7373
    74 WK_EXPORT void WKContextSetDiskCacheSpeculativeValidationEnabled(WKContextRef context, bool value);
     74WK_EXPORT void WKContextSetDiskCacheSpeculativeValidationEnabled(WKContextRef context, bool value) WK_C_API_DEPRECATED;
    7575
    7676WK_EXPORT void WKContextSetIconDatabasePath(WKContextRef context, WKStringRef iconDatabasePath);
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h

    r250292 r250377  
    4949
    5050- (void)_setAllowsSpecificHTTPSCertificate:(NSArray *)certificateChain forHost:(NSString *)host;
    51 - (void)_setCanHandleHTTPSServerTrustEvaluation:(BOOL)value WK_API_AVAILABLE(macos(10.11), ios(9.0));
     51- (void)_setCanHandleHTTPSServerTrustEvaluation:(BOOL)value WK_API_DEPRECATED_WITH_REPLACEMENT("_WKWebsiteDataStoreConfiguration.fastServerTrustEvaluationEnabled", macos(10.11, WK_MAC_TBA), ios(9.0, WK_IOS_TBA));
    5252- (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy;
    5353
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h

    r250349 r250377  
    5353@property (nonatomic, copy) NSArray *cachePartitionedURLSchemes;
    5454@property (nonatomic, copy) NSArray<NSString *> *alwaysRevalidatedURLSchemes WK_API_AVAILABLE(macos(10.12), ios(10.0));
    55 @property (nonatomic) BOOL diskCacheSpeculativeValidationEnabled WK_API_AVAILABLE(macos(10.12), ios(10.0));
     55@property (nonatomic) BOOL diskCacheSpeculativeValidationEnabled WK_API_DEPRECATED_WITH_REPLACEMENT("_WKWebsiteDataStoreConfiguration.networkCacheSpeculativeValidationEnabled", macos(10.12, WK_MAC_TBA), ios(10.0, WK_IOS_TBA));
    5656@property (nonatomic, nullable, copy) NSString *sourceApplicationBundleIdentifier WK_API_DEPRECATED_WITH_REPLACEMENT("_WKWebsiteDataStoreConfiguration.sourceApplicationBundleIdentifier", macos(10.12.3, 10.14.4), ios(10.3, 12.2));
    5757@property (nonatomic, nullable, copy) NSString *sourceApplicationSecondaryIdentifier WK_API_DEPRECATED_WITH_REPLACEMENT("_WKWebsiteDataStoreConfiguration.sourceApplicationSecondaryIdentifier", macos(10.12.3, 10.14.4), ios(10.3, 12.2));
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h

    r250349 r250377  
    4444@property (nonatomic, nullable, copy, setter=setHTTPSProxy:) NSURL *httpsProxy WK_API_AVAILABLE(macos(10.14.4), ios(12.2));
    4545@property (nonatomic) BOOL deviceManagementRestrictionsEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     46@property (nonatomic) BOOL networkCacheSpeculativeValidationEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     47@property (nonatomic) BOOL fastServerTrustEvaluationEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    4648@property (nonatomic) NSUInteger perOriginStorageQuota WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    4749@property (nonatomic, nullable, copy) NSString *boundInterfaceIdentifier WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm

    r250352 r250377  
    291291}
    292292
     293- (BOOL)networkCacheSpeculativeValidationEnabled
     294{
     295    return _configuration->networkCacheSpeculativeValidationEnabled();
     296}
     297
     298- (void)setNetworkCacheSpeculativeValidationEnabled:(BOOL)enabled
     299{
     300    _configuration->setNetworkCacheSpeculativeValidationEnabled(enabled);
     301}
     302
     303- (BOOL)fastServerTrustEvaluationEnabled
     304{
     305    return _configuration->fastServerTrustEvaluationEnabled();
     306}
     307
     308- (void)setFastServerTrustEvaluationEnabled:(BOOL)enabled
     309{
     310    return _configuration->setFastServerTrustEvaluationEnabled(enabled);
     311}
     312
    293313- (NSUInteger)perOriginStorageQuota
    294314{
  • trunk/Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm

    r250349 r250377  
    144144        WTFMove(networkCacheDirectoryExtensionHandle),
    145145        m_configuration->dataConnectionServiceType(),
     146        m_configuration->fastServerTrustEvaluationEnabled(),
     147        m_configuration->networkCacheSpeculativeValidationEnabled(),
    146148    };
    147149    networkingHasBegun();
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp

    r250352 r250377  
    5454    auto copy = WebsiteDataStoreConfiguration::create(m_isPersistent);
    5555
     56    copy->m_fastServerTrustEvaluationEnabled = this->m_fastServerTrustEvaluationEnabled;
     57    copy->m_networkCacheSpeculativeValidationEnabled = this->m_networkCacheSpeculativeValidationEnabled;
    5658    copy->m_cacheStorageDirectory = this->m_cacheStorageDirectory;
    5759    copy->m_perOriginStorageQuota = this->m_perOriginStorageQuota;
  • trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h

    r250352 r250377  
    7777    void setAllowsCellularAccess(bool allows) { m_allowsCellularAccess = allows; }
    7878
     79    bool fastServerTrustEvaluationEnabled() const { return m_fastServerTrustEvaluationEnabled; }
     80    void setFastServerTrustEvaluationEnabled(bool enabled) { m_fastServerTrustEvaluationEnabled = enabled; }
     81
     82    bool networkCacheSpeculativeValidationEnabled() const { return m_networkCacheSpeculativeValidationEnabled; }
     83    void setNetworkCacheSpeculativeValidationEnabled(bool enabled) { m_networkCacheSpeculativeValidationEnabled = enabled; }
     84
    7985#if PLATFORM(COCOA)
    8086    CFDictionaryRef proxyConfiguration() const { return m_proxyConfiguration.get(); }
     
    154160    bool m_allLoadsBlockedByDeviceManagementRestrictionsForTesting { false };
    155161    bool m_allowsCellularAccess { true };
     162    bool m_fastServerTrustEvaluationEnabled { false };
     163    bool m_networkCacheSpeculativeValidationEnabled { false };
    156164#if PLATFORM(COCOA)
    157165    RetainPtr<CFDictionaryRef> m_proxyConfiguration;
  • trunk/Tools/ChangeLog

    r250375 r250377  
     12019-09-25  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add replacement SPI on _WKWebsiteDataStoreConfiguration for enabling speculative cache validation and IPC-free server trust evaluation
     4        https://bugs.webkit.org/show_bug.cgi?id=202251
     5
     6        Reviewed by Tim Horton.
     7
     8        Adopt new SPI instead of deprecated SPI.
     9
     10        * MiniBrowser/mac/AppDelegate.m:
     11        (persistentDataStore):
     12        (defaultConfiguration):
     13        (-[BrowserAppDelegate fetchDefaultStoreWebsiteData:]):
     14        (-[BrowserAppDelegate fetchAndClearDefaultStoreWebsiteData:]):
     15        (-[BrowserAppDelegate clearDefaultStoreWebsiteData:]):
     16
    1172019-09-25  Jonathan Bedard  <jbedard@apple.com>
    218
  • trunk/Tools/MiniBrowser/mac/AppDelegate.m

    r242339 r250377  
    4040#import <WebKit/_WKProcessPoolConfiguration.h>
    4141#import <WebKit/_WKUserContentExtensionStore.h>
     42#import <WebKit/_WKWebsiteDataStoreConfiguration.h>
    4243
    4344enum {
     
    7980}
    8081
     82static WKWebsiteDataStore *persistentDataStore()
     83{
     84    static WKWebsiteDataStore *dataStore;
     85
     86    if (!dataStore) {
     87        _WKWebsiteDataStoreConfiguration *configuration = [[[_WKWebsiteDataStoreConfiguration alloc] init] autorelease];
     88        configuration.networkCacheSpeculativeValidationEnabled = YES;
     89        dataStore = [[WKWebsiteDataStore alloc] _initWithConfiguration:configuration];
     90    }
     91   
     92    return dataStore;
     93}
     94
    8195static WKWebViewConfiguration *defaultConfiguration()
    8296{
     
    8599    if (!configuration) {
    86100        configuration = [[WKWebViewConfiguration alloc] init];
     101        configuration.websiteDataStore = persistentDataStore();
    87102        configuration.preferences._fullScreenEnabled = YES;
    88103        configuration.preferences._developerExtrasEnabled = YES;
     
    91106
    92107        _WKProcessPoolConfiguration *processConfiguration = [[[_WKProcessPoolConfiguration alloc] init] autorelease];
    93         processConfiguration.diskCacheSpeculativeValidationEnabled = ![SettingsController shared].networkCacheSpeculativeRevalidationDisabled;
    94108        if ([SettingsController shared].perWindowWebProcessesDisabled)
    95109            processConfiguration.usesSingleWebProcess = YES;
     
    309323- (IBAction)fetchDefaultStoreWebsiteData:(id)sender
    310324{
    311     [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] completionHandler:^(NSArray *websiteDataRecords) {
     325    [persistentDataStore() fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] completionHandler:^(NSArray *websiteDataRecords) {
    312326        NSLog(@"did fetch default store website data %@.", websiteDataRecords);
    313327    }];
     
    316330- (IBAction)fetchAndClearDefaultStoreWebsiteData:(id)sender
    317331{
    318     [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] completionHandler:^(NSArray *websiteDataRecords) {
    319         [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] forDataRecords:websiteDataRecords completionHandler:^{
    320             [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] completionHandler:^(NSArray *websiteDataRecords) {
     332    [persistentDataStore() fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] completionHandler:^(NSArray *websiteDataRecords) {
     333        [persistentDataStore() removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] forDataRecords:websiteDataRecords completionHandler:^{
     334            [persistentDataStore() fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] completionHandler:^(NSArray *websiteDataRecords) {
    321335                NSLog(@"did clear default store website data, after clearing data is %@.", websiteDataRecords);
    322336            }];
     
    327341- (IBAction)clearDefaultStoreWebsiteData:(id)sender
    328342{
    329     [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^{
     343    [persistentDataStore() removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^{
    330344        NSLog(@"Did clear default store website data.");
    331345    }];
Note: See TracChangeset for help on using the changeset viewer.