WebKit Bugzilla
Attachment 339904 Details for
Bug 185261
: Adopt new async _savecookies SPI for keeping networking process active during flushing cookies
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185261-20180508170535.patch (text/plain), 10.30 KB, created by
Sihui Liu
on 2018-05-08 17:05:37 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Sihui Liu
Created:
2018-05-08 17:05:37 PDT
Size:
10.30 KB
patch
obsolete
>Subversion Revision: 231523 >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index a0902a278f2d0a37b97ba7e7f41b395a69da8920..3dc17bba546b013a2d43f8736a01b431af15c194 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,13 @@ >+2018-05-08 Sihui Liu <sihui_liu@apple.com> >+ >+ 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 <dino@apple.com> > > Use thumbnails in System Previews >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index ad54cbd7085a5685ac3620e70808811dcfb5b575..63ec08ccf6d9fd589430522699f72cd156e7a488 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,29 @@ >+2018-05-08 Sihui Liu <sihui_liu@apple.com> >+ >+ 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 Daniel Bates <dabates@apple.com> > > Do not apply X-Frame-Options and CSP frame-ancestors to Quick Look-applicable responses in NetworkProcess >diff --git a/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h b/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h >index b993a9fa97fe6e005c5bd2f4ea57ab8a631cf2d2..b593cc9176e4583487a5cdac829c89f07e1b29f5 100644 >--- a/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h >+++ b/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h >@@ -323,6 +323,7 @@ WTF_EXTERN_C_END > - (id)_initWithCFHTTPCookieStorage:(CFHTTPCookieStorageRef)cfStorage; > - (CFHTTPCookieStorageRef)_cookieStorage; > - (void)_saveCookies; >+- (void)_saveCookies:(dispatch_block_t) completionHandler; > @end > #endif > >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.cpp b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >index 9713f96c88d217678ae4ff11420d97f5dac94ee6..9becb93c90b1a1be6a3620a8debedd5d1632f32c 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >@@ -924,6 +924,11 @@ void NetworkProcess::registerURLSchemeAsCanDisplayOnlyIfCanRequest(const String& > SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest(scheme); > } > >+void NetworkProcess::didSyncAllCookies() >+{ >+ parentProcessConnection()->send(Messages::NetworkProcessProxy::DidSyncAllCookies(), 0); >+} >+ > #if !PLATFORM(COCOA) > void NetworkProcess::initializeProcess(const ChildProcessInitializationParameters&) > { >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.h b/Source/WebKit/NetworkProcess/NetworkProcess.h >index ffa8b78c14ecef307e1ad3b10b4316262fc873b9..b1ab0b23bf0d088736e0aff505f3a5edcb5a04fd 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.h >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.h >@@ -227,7 +227,9 @@ private: > void getNetworkProcessStatistics(uint64_t callbackID); > void clearCacheForAllOrigins(uint32_t cachesToClear); > void setAllowsAnySSLCertificateForWebSocket(bool); >+ > void syncAllCookies(); >+ void didSyncAllCookies(); > > void didGrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID); > >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.messages.in b/Source/WebKit/NetworkProcess/NetworkProcess.messages.in >index 5e18035988149f9bdeeb62c9ba56da8ab5773c05..1ad1bb432b94be95db980eefe8c6aff190f45635 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.messages.in >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.messages.in >@@ -60,7 +60,7 @@ messages -> NetworkProcess LegacyReceiver { > #endif > SetAllowsAnySSLCertificateForWebSocket(bool enabled) -> () > >- SyncAllCookies() -> () >+ SyncAllCookies() > > AllowSpecificHTTPSCertificateForHost(WebCore::CertificateInfo certificate, String host) > SetCanHandleHTTPSServerTrustEvaluation(bool value) >diff --git a/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm b/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm >index 0f583d8f5a75700108e9d4e5d6191decbd9628e0..023c8a83fbb8df93940940406b8b1a2bf19dc711 100644 >--- a/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm >+++ b/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm >@@ -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 @@ void NetworkProcess::syncAllCookies() > 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 > } > >diff --git a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp >index bb5f4ebe2e9fe94af78d9d215dd2e28d28a0e406..72b3807c76f49e62b5dfef78bd6014b879628fb9 100644 >--- a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp >+++ b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp >@@ -264,6 +264,9 @@ void NetworkProcessProxy::didClose(IPC::Connection&) > #endif > > m_tokenForHoldingLockedFiles = nullptr; >+ >+ m_syncAllCookiesToken = nullptr; >+ m_syncAllCookiesCounter = 0; > > for (auto& callback : m_writeBlobToFilePathCallbackMap.values()) > callback(false); >@@ -548,6 +551,28 @@ void NetworkProcessProxy::setIsHoldingLockedFiles(bool isHoldingLockedFiles) > } > } > >+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) >diff --git a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h >index e3b32873660d8182bf1249c6d06b6702e73740b5..6c690f3ed8a827743ecff1fa2eae47e2e411216a 100644 >--- a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h >+++ b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h >@@ -92,6 +92,9 @@ public: > void processReadyToSuspend(); > > void setIsHoldingLockedFiles(bool); >+ >+ void syncAllCookies(); >+ void didSyncAllCookies(); > > ProcessThrottler& throttler() { return m_throttler; } > WebProcessPool& processPool() { return m_processPool; } >@@ -167,6 +170,9 @@ private: > #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; >diff --git a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in >index 468f7a4c2ae7b76d486d2a65bab1daf7353ccae3..108862afb63a8524b7c59b25246b3be0d6a9c40b 100644 >--- a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in >+++ b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in >@@ -29,6 +29,8 @@ messages -> NetworkProcessProxy LegacyReceiver { > DidDeleteWebsiteData(uint64_t callbackID) > DidDeleteWebsiteDataForOrigins(uint64_t callbackID) > >+ DidSyncAllCookies() >+ > DidWriteBlobToFilePath(bool success, uint64_t callbackID) > > GrantSandboxExtensionsToStorageProcessForBlobs(uint64_t requestID, Vector<String> paths) >diff --git a/Source/WebKit/UIProcess/WebProcessPool.cpp b/Source/WebKit/UIProcess/WebProcessPool.cpp >index 5abcf96fe789ab6c8f9a526767c8edeb73a7c0bb..0ddd8eab4afc804ba7aef5ff097b28d18563f9e5 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.cpp >+++ b/Source/WebKit/UIProcess/WebProcessPool.cpp >@@ -1599,7 +1599,7 @@ void WebProcessPool::terminateServiceWorkerProcesses() > > void WebProcessPool::syncNetworkProcessCookies() > { >- sendSyncToNetworkingProcess(Messages::NetworkProcess::SyncAllCookies(), Messages::NetworkProcess::SyncAllCookies::Reply()); >+ ensureNetworkProcess().syncAllCookies(); > } > > void WebProcessPool::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* certificate, const String& host)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185261
:
339454
|
339782
|
339801
|
339807
|
339825
|
339831
| 339904