Changeset 266951 in webkit


Ignore:
Timestamp:
Sep 11, 2020 3:01:54 PM (4 years ago)
Author:
achristensen@apple.com
Message:

Move _setCookieAcceptPolicy to WKHTTPCookieStore
https://bugs.webkit.org/show_bug.cgi?id=216375

Reviewed by Geoffrey Garen.

Source/WebCore:

  • platform/network/cocoa/HTTPCookieAcceptPolicyCocoa.h:

Source/WebKit:

It is only used by Safari, which I am changing along with this in rdar://problem/68659937
I need it to not be on the process pool for https://bugs.webkit.org/show_bug.cgi?id=216041
and because the cookie store's job is to manage cookie storage. The fact that it was on the process pool
is just a historical artifact of us trying to make it global.

WKContextUseTestingNetworkSession has had its important parts replaced by WKWebsiteDataStoreConfigurationSetTestingSessionEnabled
but it was still being used to determinte whether the UI process should persist the cookie accept policy. We don't need this
any more because we send a message to the network process and let it manage the cookie accept policy.

  • UIProcess/API/C/WKContext.cpp:

(WKContextUseTestingNetworkSession): Deleted.

  • UIProcess/API/C/WKContextPrivate.h:
  • UIProcess/API/Cocoa/WKHTTPCookieStore.mm:

(-[WKHTTPCookieStore _setCookieAcceptPolicy:completionHandler:]):

  • UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h:
  • UIProcess/API/Cocoa/WKProcessPool.mm:

(-[WKProcessPool _setCookieAcceptPolicy:]):

  • UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
  • UIProcess/WebCookieManagerProxy.cpp:

(WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::useTestingNetworkSession): Deleted.

  • UIProcess/WebProcessPool.h:

Tools:

  • TestWebKitAPI/Tests/WebKitCocoa/CookieAcceptPolicy.mm:

(TEST):

  • TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
  • WebKitTestRunner/TestController.cpp:

(WTR::TestController::generatePageConfiguration):

Location:
trunk
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r266936 r266951  
     12020-09-11  Alex Christensen  <achristensen@webkit.org>
     2
     3        Move _setCookieAcceptPolicy to WKHTTPCookieStore
     4        https://bugs.webkit.org/show_bug.cgi?id=216375
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        * platform/network/cocoa/HTTPCookieAcceptPolicyCocoa.h:
     9
    1102020-09-11  Myles C. Maxfield  <mmaxfield@apple.com>
    211
  • trunk/Source/WebCore/platform/network/cocoa/HTTPCookieAcceptPolicyCocoa.h

    r265953 r266951  
    2727
    2828#include "HTTPCookieAcceptPolicy.h"
     29#include <pal/spi/cf/CFNetworkSPI.h>
    2930
    3031namespace WebCore {
  • trunk/Source/WebKit/ChangeLog

    r266932 r266951  
     12020-09-11  Alex Christensen  <achristensen@webkit.org>
     2
     3        Move _setCookieAcceptPolicy to WKHTTPCookieStore
     4        https://bugs.webkit.org/show_bug.cgi?id=216375
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        It is only used by Safari, which I am changing along with this in rdar://problem/68659937
     9        I need it to not be on the process pool for https://bugs.webkit.org/show_bug.cgi?id=216041
     10        and because the cookie store's job is to manage cookie storage.  The fact that it was on the process pool
     11        is just a historical artifact of us trying to make it global.
     12
     13        WKContextUseTestingNetworkSession has had its important parts replaced by WKWebsiteDataStoreConfigurationSetTestingSessionEnabled
     14        but it was still being used to determinte whether the UI process should persist the cookie accept policy.  We don't need this
     15        any more because we send a message to the network process and let it manage the cookie accept policy.
     16
     17        * UIProcess/API/C/WKContext.cpp:
     18        (WKContextUseTestingNetworkSession): Deleted.
     19        * UIProcess/API/C/WKContextPrivate.h:
     20        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
     21        (-[WKHTTPCookieStore _setCookieAcceptPolicy:completionHandler:]):
     22        * UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h:
     23        * UIProcess/API/Cocoa/WKProcessPool.mm:
     24        (-[WKProcessPool _setCookieAcceptPolicy:]):
     25        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
     26        * UIProcess/WebCookieManagerProxy.cpp:
     27        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
     28        * UIProcess/WebProcessPool.cpp:
     29        (WebKit::WebProcessPool::useTestingNetworkSession): Deleted.
     30        * UIProcess/WebProcessPool.h:
     31
    1322020-09-11  Ben Nham  <nham@apple.com>
    233
  • trunk/Source/WebKit/UIProcess/API/C/WKContext.cpp

    r263060 r266951  
    544544}
    545545
    546 void WKContextUseTestingNetworkSession(WKContextRef context)
    547 {
    548     WebKit::toImpl(context)->useTestingNetworkSession();
    549 }
    550 
    551546void WKContextSetAllowsAnySSLCertificateForWebSocketTesting(WKContextRef context, bool allows)
    552547{
  • trunk/Source/WebKit/UIProcess/API/C/WKContextPrivate.h

    r263060 r266951  
    9090WK_EXPORT void WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting(WKContextRef, bool);
    9191
    92 // Test only. Should be called before any secondary processes are started.
    93 WK_EXPORT void WKContextUseTestingNetworkSession(WKContextRef context);
    94 
    9592// Test only. Should be called before running a test.
    9693WK_EXPORT void WKContextClearCachedCredentials(WKContextRef context);
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStore.mm

    r260485 r266951  
    2929#import <WebCore/Cookie.h>
    3030#import <WebCore/HTTPCookieAcceptPolicy.h>
     31#import <WebCore/HTTPCookieAcceptPolicyCocoa.h>
    3132#import <pal/spi/cf/CFNetworkSPI.h>
    3233#import <wtf/BlockPtr.h>
     
    139140}
    140141
     142- (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy completionHandler:(void (^)())completionHandler
     143{
     144    _cookieStore->setHTTPCookieAcceptPolicy(WebCore::toHTTPCookieAcceptPolicy(policy), [completionHandler = makeBlockPtr(completionHandler)] {
     145        completionHandler.get()();
     146    });
     147}
     148
    141149@end
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h

    r260334 r266951  
    2828@interface WKHTTPCookieStore (WKPrivate)
    2929- (void)_getCookiesForURL:(NSURL *)url completionHandler:(void (^)(NSArray<NSHTTPCookie *> *))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     30- (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy completionHandler:(void (^)())completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    3031@end
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm

    r264874 r266951  
    202202- (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy
    203203{
    204     _processPool->supplement<WebKit::WebCookieManagerProxy>()->setHTTPCookieAcceptPolicy(PAL::SessionID::defaultSessionID(), WebCore::toHTTPCookieAcceptPolicy(policy), []() { });
    205204}
    206205
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h

    r264874 r266951  
    5151- (void)_setAllowsSpecificHTTPSCertificate:(NSArray *)certificateChain forHost:(NSString *)host;
    5252- (void)_setCanHandleHTTPSServerTrustEvaluation:(BOOL)value WK_API_DEPRECATED_WITH_REPLACEMENT("_WKWebsiteDataStoreConfiguration.fastServerTrustEvaluationEnabled", macos(10.11, WK_MAC_TBA), ios(9.0, WK_IOS_TBA));
    53 - (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy;
     53- (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy WK_API_DEPRECATED_WITH_REPLACEMENT("WKHTTPCookieStore._setCookieAcceptPolicy:completionHandler:", macos(10.10, WK_MAC_TBA), ios(8.0, WK_IOS_TBA));
    5454
    5555- (id)_objectForBundleParameter:(NSString *)parameter;
  • trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.cpp

    r261288 r266951  
    212212void WebCookieManagerProxy::setHTTPCookieAcceptPolicy(PAL::SessionID, HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& callbackFunction)
    213213{
    214 #if PLATFORM(COCOA)
    215     if (!processPool()->isUsingTestingNetworkSession())
    216         persistHTTPCookieAcceptPolicy(policy);
    217 #endif
    218214#if USE(SOUP)
    219215    processPool()->setInitialHTTPCookieAcceptPolicy(policy);
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r266829 r266951  
    17691769}
    17701770
    1771 void WebProcessPool::useTestingNetworkSession()
    1772 {
    1773     ASSERT(m_processes.isEmpty());
    1774     ASSERT(!m_networkProcess);
    1775 
    1776     if (m_networkProcess)
    1777         return;
    1778 
    1779     if (!m_processes.isEmpty())
    1780         return;
    1781 
    1782     m_shouldUseTestingNetworkSession = true;
    1783 }
    1784 
    17851771template<typename T, typename U>
    17861772void WebProcessPool::sendSyncToNetworkingProcess(T&& message, U&& reply)
  • trunk/Source/WebKit/UIProcess/WebProcessPool.h

    r266214 r266951  
    319319    static Statistics& statistics();   
    320320
    321     void useTestingNetworkSession();
    322     bool isUsingTestingNetworkSession() const { return m_shouldUseTestingNetworkSession; }
    323 
    324321    void setAllowsAnySSLCertificateForWebSocket(bool);
    325322
     
    726723#endif
    727724
    728     bool m_shouldUseTestingNetworkSession { false };
    729 
    730725    bool m_processTerminationEnabled { true };
    731726
  • trunk/Tools/ChangeLog

    r266937 r266951  
     12020-09-11  Alex Christensen  <achristensen@webkit.org>
     2
     3        Move _setCookieAcceptPolicy to WKHTTPCookieStore
     4        https://bugs.webkit.org/show_bug.cgi?id=216375
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        * TestWebKitAPI/Tests/WebKitCocoa/CookieAcceptPolicy.mm:
     9        (TEST):
     10        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
     11        * WebKitTestRunner/TestController.cpp:
     12        (WTR::TestController::generatePageConfiguration):
     13
    1142020-09-11  Zhifei Fang  <zhifei_fang@apple.com>
    215
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/CookieAcceptPolicy.mm

    r260366 r266951  
    2727
    2828#import "PlatformUtilities.h"
    29 #import <WebKit/WKProcessPool.h>
     29#import <WebKit/WKHTTPCookieStorePrivate.h>
    3030#import <WebKit/WKProcessPoolPrivate.h>
    3131#import <WebKit/WKWebView.h>
     
    3333#import <pal/spi/cf/CFNetworkSPI.h>
    3434#import <wtf/RetainPtr.h>
    35 
    36 // FIXME: This test is causing flakiness in API tests. It sets the cookie accept policy to 'Never'
    37 // and following tests often are unable to set cookies.
    38 #if !PLATFORM(IOS_FAMILY)
    3935
    4036static bool receivedScriptMessage = false;
     
    5753{
    5854    auto originalCookieAcceptPolicy = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy];
    59    
    60     RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
    61    
    62     RetainPtr<WKProcessPool> processPool = adoptNS([[WKProcessPool alloc] init]);
    63     [configuration setProcessPool:processPool.get()];
    64    
    65     RetainPtr<CookieAcceptPolicyMessageHandler> handler = adoptNS([[CookieAcceptPolicyMessageHandler alloc] init]);
     55
     56    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     57
     58    auto handler = adoptNS([[CookieAcceptPolicyMessageHandler alloc] init]);
    6659    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
    67    
    68     RetainPtr<WKWebView> webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
    69    
     60
     61    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     62
    7063    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"CookieMessage" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
    71     [processPool _setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];
     64    __block bool setPolicy = false;
     65    [configuration.get().websiteDataStore.httpCookieStore _setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever completionHandler:^{
     66        setPolicy = true;
     67    }];
     68    TestWebKitAPI::Util::run(&setPolicy);
    7269    [webView loadRequest:request];
    7370    TestWebKitAPI::Util::run(&receivedScriptMessage);
    7471    EXPECT_STREQ([(NSString *)[lastScriptMessage body] UTF8String], "COOKIE:");
    75    
    76     [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:originalCookieAcceptPolicy];
    77     [[NSHTTPCookieStorage sharedHTTPCookieStorage] _saveCookies];
     72
     73    setPolicy = false;
     74    [configuration.get().websiteDataStore.httpCookieStore _setCookieAcceptPolicy:originalCookieAcceptPolicy completionHandler:^{
     75        setPolicy = true;
     76    }];
     77    TestWebKitAPI::Util::run(&setPolicy);
    7878}
    79 
    80 #endif // !PLATFORM(IOS_FAMILY)
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm

    r262226 r266951  
    3232#import <WebKit/WKBackForwardListItemPrivate.h>
    3333#import <WebKit/WKContentRuleListStore.h>
     34#import <WebKit/WKHTTPCookieStorePrivate.h>
    3435#import <WebKit/WKNavigationDelegatePrivate.h>
    3536#import <WebKit/WKNavigationPrivate.h>
     
    53985399TEST(ProcessSwap, UseSessionCookiesAfterProcessSwapInPrivateBrowsing)
    53995400{
     5401    auto originalCookieAcceptPolicy = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy];
     5402
    54005403    auto processPoolConfiguration = psonProcessPoolConfiguration();
    54015404    auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
     
    54165419    [webView setNavigationDelegate:delegate.get()];
    54175420
    5418     [processPool _setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
     5421    __block bool setPolicy = false;
     5422    [webView.get().configuration.websiteDataStore.httpCookieStore _setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways completionHandler:^{
     5423        setPolicy = true;
     5424    }];
     5425    TestWebKitAPI::Util::run(&setPolicy);
    54195426
    54205427    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"SetSessionCookie" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
     
    54515458    EXPECT_EQ(1u, [receivedMessages count]);
    54525459    EXPECT_WK_STREQ(@"foo=bar", receivedMessages.get()[0]);
     5460   
     5461    setPolicy = false;
     5462    [webView.get().configuration.websiteDataStore.httpCookieStore _setCookieAcceptPolicy:originalCookieAcceptPolicy completionHandler:^{
     5463        setPolicy = true;
     5464    }];
     5465    TestWebKitAPI::Util::run(&setPolicy);
    54535466}
    54545467
    54555468TEST(ProcessSwap, UseSessionCookiesAfterProcessSwapInNonDefaultPersistentSession)
    54565469{
     5470    auto originalCookieAcceptPolicy = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookieAcceptPolicy];
     5471
    54575472    auto processPoolConfiguration = psonProcessPoolConfiguration();
    54585473
     
    54825497    [webView setNavigationDelegate:delegate.get()];
    54835498
    5484     [processPool _setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
     5499    __block bool setPolicy = false;
     5500    [webView.get().configuration.websiteDataStore.httpCookieStore _setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways completionHandler:^{
     5501        setPolicy = true;
     5502    }];
     5503    TestWebKitAPI::Util::run(&setPolicy);
    54855504
    54865505    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"SetSessionCookie" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
     
    55185537    EXPECT_EQ(1u, [receivedMessages count]);
    55195538    EXPECT_WK_STREQ(@"foo=bar", receivedMessages.get()[0]);
     5539
     5540    setPolicy = false;
     5541    [webView.get().configuration.websiteDataStore.httpCookieStore _setCookieAcceptPolicy:originalCookieAcceptPolicy completionHandler:^{
     5542        setPolicy = true;
     5543    }];
     5544    TestWebKitAPI::Util::run(&setPolicy);
    55205545}
    55215546
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r266743 r266951  
    580580        }
    581581
    582         WKContextUseTestingNetworkSession(m_context.get());
    583582        WKContextSetCacheModel(m_context.get(), kWKCacheModelDocumentBrowser);
    584583
Note: See TracChangeset for help on using the changeset viewer.