Title: [231536] trunk/Source
Revision
231536
Author
[email protected]
Date
2018-05-08 18:48:44 -0700 (Tue, 08 May 2018)

Log Message

Adopt new async _savecookies SPI for keeping networking process active during flushing cookies
https://bugs.webkit.org/show_bug.cgi?id=185261
<rdar://problem/37214391>

Patch by Sihui Liu <[email protected]> on 2018-05-08
Reviewed by Chris Dumez.

Source/WebCore/PAL:

* pal/spi/cf/CFNetworkSPI.h:

Source/WebKit:

By adopting new async SPI _savecookies, we can keep networking process active(not suspended)
until cookies are fully synced to disk with process assertion.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::didSyncAllCookies):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::syncAllCookies):
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::didClose):
(WebKit::NetworkProcessProxy::syncAllCookies):
(WebKit::NetworkProcessProxy::didSyncAllCookies):
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/Network/NetworkProcessProxy.messages.in:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::syncNetworkProcessCookies):

Modified Paths

Diff

Modified: trunk/Source/WebCore/PAL/ChangeLog (231535 => 231536)


--- trunk/Source/WebCore/PAL/ChangeLog	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebCore/PAL/ChangeLog	2018-05-09 01:48:44 UTC (rev 231536)
@@ -1,3 +1,13 @@
+2018-05-08  Sihui Liu  <[email protected]>
+
+        Adopt new async _savecookies SPI for keeping networking process active during flushing cookies
+        https://bugs.webkit.org/show_bug.cgi?id=185261
+        <rdar://problem/37214391>
+
+        Reviewed by Chris Dumez.
+
+        * pal/spi/cf/CFNetworkSPI.h:
+
 2018-05-08  Dean Jackson  <[email protected]>
 
         Use thumbnails in System Previews

Modified: trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h (231535 => 231536)


--- trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h	2018-05-09 01:48:44 UTC (rev 231536)
@@ -323,6 +323,7 @@
 - (id)_initWithCFHTTPCookieStorage:(CFHTTPCookieStorageRef)cfStorage;
 - (CFHTTPCookieStorageRef)_cookieStorage;
 - (void)_saveCookies;
+- (void)_saveCookies:(dispatch_block_t) completionHandler;
 @end
 #endif
 

Modified: trunk/Source/WebKit/ChangeLog (231535 => 231536)


--- trunk/Source/WebKit/ChangeLog	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/ChangeLog	2018-05-09 01:48:44 UTC (rev 231536)
@@ -1,3 +1,29 @@
+2018-05-08  Sihui Liu  <[email protected]>
+
+        Adopt new async _savecookies SPI for keeping networking process active during flushing cookies
+        https://bugs.webkit.org/show_bug.cgi?id=185261
+        <rdar://problem/37214391>
+
+        Reviewed by Chris Dumez.
+
+        By adopting new async SPI _savecookies, we can keep networking process active(not suspended)
+        until cookies are fully synced to disk with process assertion.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::didSyncAllCookies):
+        * NetworkProcess/NetworkProcess.h:
+        * NetworkProcess/NetworkProcess.messages.in:
+        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+        (WebKit::NetworkProcess::syncAllCookies):
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::didClose):
+        (WebKit::NetworkProcessProxy::syncAllCookies):
+        (WebKit::NetworkProcessProxy::didSyncAllCookies):
+        * UIProcess/Network/NetworkProcessProxy.h:
+        * UIProcess/Network/NetworkProcessProxy.messages.in:
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::syncNetworkProcessCookies):
+
 2018-05-08  Per Arne Vollan  <[email protected]>
 
         Set colorspace in the PDF plugin.

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (231535 => 231536)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2018-05-09 01:48:44 UTC (rev 231536)
@@ -924,6 +924,11 @@
     SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest(scheme);
 }
 
+void NetworkProcess::didSyncAllCookies()
+{
+    parentProcessConnection()->send(Messages::NetworkProcessProxy::DidSyncAllCookies(), 0);
+}
+
 #if !PLATFORM(COCOA)
 void NetworkProcess::initializeProcess(const ChildProcessInitializationParameters&)
 {

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (231535 => 231536)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2018-05-09 01:48:44 UTC (rev 231536)
@@ -227,7 +227,9 @@
     void getNetworkProcessStatistics(uint64_t callbackID);
     void clearCacheForAllOrigins(uint32_t cachesToClear);
     void setAllowsAnySSLCertificateForWebSocket(bool);
+    
     void syncAllCookies();
+    void didSyncAllCookies();
 
     void didGrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID);
 

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (231535 => 231536)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in	2018-05-09 01:48:44 UTC (rev 231536)
@@ -60,7 +60,7 @@
 #endif
     SetAllowsAnySSLCertificateForWebSocket(bool enabled) -> ()
 
-    SyncAllCookies() -> ()
+    SyncAllCookies()
 
     AllowSpecificHTTPSCertificateForHost(WebCore::CertificateInfo certificate, String host)
     SetCanHandleHTTPSServerTrustEvaluation(bool value)

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (231535 => 231536)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm	2018-05-09 01:48:44 UTC (rev 231536)
@@ -41,6 +41,7 @@
 #import <WebCore/SecurityOriginData.h>
 #import <pal/spi/cf/CFNetworkSPI.h>
 #import <wtf/BlockPtr.h>
+#import <wtf/CallbackAggregator.h>
 #import <wtf/ProcessPrivilege.h>
 
 namespace WebKit {
@@ -229,7 +230,19 @@
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000)
+    RefPtr<CallbackAggregator> callbackAggregator = CallbackAggregator::create([this] {
+        didSyncAllCookies();
+    });
+    WebCore::NetworkStorageSession::forEach([&] (auto& networkStorageSession) {
+        [networkStorageSession.nsCookieStorage() _saveCookies:[callbackAggregator] { }];
+    });
+#else
     _CFHTTPCookieStorageFlushCookieStores();
+    didSyncAllCookies();
+#endif
+
 #pragma clang diagnostic pop
 }
 

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (231535 => 231536)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2018-05-09 01:48:44 UTC (rev 231536)
@@ -264,6 +264,9 @@
 #endif
 
     m_tokenForHoldingLockedFiles = nullptr;
+    
+    m_syncAllCookiesToken = nullptr;
+    m_syncAllCookiesCounter = 0;
 
     for (auto& callback : m_writeBlobToFilePathCallbackMap.values())
         callback(false);
@@ -548,7 +551,29 @@
     }
 }
 
+void NetworkProcessProxy::syncAllCookies()
+{
+    send(Messages::NetworkProcess::SyncAllCookies(), 0);
+    
+    ++m_syncAllCookiesCounter;
+    if (m_syncAllCookiesToken)
+        return;
+    
+    RELEASE_LOG(ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is syncing cookies", this);
+    m_syncAllCookiesToken = throttler().backgroundActivityToken();
+}
+    
+void NetworkProcessProxy::didSyncAllCookies()
+{
+    ASSERT(m_syncAllCookiesCounter);
 
+    --m_syncAllCookiesCounter;
+    if (!m_syncAllCookiesCounter) {
+        RELEASE_LOG(ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done syncing cookies", this);
+        m_syncAllCookiesToken = nullptr;
+    }
+}
+
 #if ENABLE(CONTENT_EXTENSIONS)
 void NetworkProcessProxy::contentExtensionRules(UserContentControllerIdentifier identifier)
 {

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (231535 => 231536)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2018-05-09 01:48:44 UTC (rev 231536)
@@ -92,6 +92,9 @@
     void processReadyToSuspend();
 
     void setIsHoldingLockedFiles(bool);
+    
+    void syncAllCookies();
+    void didSyncAllCookies();
 
     ProcessThrottler& throttler() { return m_throttler; }
     WebProcessPool& processPool() { return m_processPool; }
@@ -167,6 +170,9 @@
 #endif
     ProcessThrottler m_throttler;
     ProcessThrottler::BackgroundActivityToken m_tokenForHoldingLockedFiles;
+    ProcessThrottler::BackgroundActivityToken m_syncAllCookiesToken;
+    
+    unsigned m_syncAllCookiesCounter { 0 };
 
     HashMap<uint64_t, CompletionHandler<void(bool success)>> m_writeBlobToFilePathCallbackMap;
     HashMap<uint64_t, WTF::CompletionHandler<void(bool wasGranted)>> m_storageAccessResponseCallbackMap;

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (231535 => 231536)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2018-05-09 01:48:44 UTC (rev 231536)
@@ -29,6 +29,8 @@
     DidDeleteWebsiteData(uint64_t callbackID)
     DidDeleteWebsiteDataForOrigins(uint64_t callbackID)
 
+    DidSyncAllCookies()
+
     DidWriteBlobToFilePath(bool success, uint64_t callbackID)
 
     GrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID, Vector<String> paths)

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (231535 => 231536)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2018-05-09 01:34:56 UTC (rev 231535)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2018-05-09 01:48:44 UTC (rev 231536)
@@ -1599,7 +1599,7 @@
 
 void WebProcessPool::syncNetworkProcessCookies()
 {
-    sendSyncToNetworkingProcess(Messages::NetworkProcess::SyncAllCookies(), Messages::NetworkProcess::SyncAllCookies::Reply());
+    ensureNetworkProcess().syncAllCookies();
 }
 
 void WebProcessPool::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* certificate, const String& host)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to