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)