WebKit Bugzilla
Attachment 339831 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-20180508104510.patch (text/plain), 9.07 KB, created by
Sihui Liu
on 2018-05-08 10:45:12 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Sihui Liu
Created:
2018-05-08 10:45:12 PDT
Size:
9.07 KB
patch
obsolete
>Subversion Revision: 231400 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 6bc61b61b4fa0246738dc1fa2eae9f8e23d6f533..a10833e10f53141836dfe43c0eeb0cb12e88287b 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,29 @@ >+2018-05-07 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 NOBODY (OOPS!). >+ >+ 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-04 Tim Horton <timothy_horton@apple.com> > > Shift to a lower-level framework for simplifying URLs >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 184c2fd5441f8d870436d15b76a4d2dff637286f..1f6955d9cd8959a90aff7df971fab81bf7b4d0b1 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 a63c75b0811e7d757e3a75ea3495f5f8305fec1e..4187585126d150e687f5834f19dad97faa9a3e77 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