WebKit Bugzilla
Attachment 339782 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-20180507174217.patch (text/plain), 9.38 KB, created by
Sihui Liu
on 2018-05-07 17:42:18 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Sihui Liu
Created:
2018-05-07 17:42:18 PDT
Size:
9.38 KB
patch
obsolete
>Subversion Revision: 231400 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 6bc61b61b4fa0246738dc1fa2eae9f8e23d6f533..689873fd2a435a7da9578604b3af36433a64045b 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,30 @@ >+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) >+ before cookies are fully synced to disk with process assertion. >+ >+ * NetworkProcess/NetworkProcess.cpp: >+ (WebKit::NetworkProcess::didSyncAllCookies): >+ (WebKit::NetworkProcess::initializeSandbox): >+ (WebKit::NetworkProcess::syncAllCookies): >+ * NetworkProcess/NetworkProcess.h: >+ * NetworkProcess/NetworkProcess.messages.in: >+ * NetworkProcess/cocoa/NetworkProcessCocoa.mm: >+ (WebKit::NetworkProcess::syncAllCookies): >+ * UIProcess/Network/NetworkProcessProxy.cpp: >+ (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..acebe2db81fe3d7eac60c5e16e008cacf13c1181 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&) > { >@@ -936,7 +941,7 @@ void NetworkProcess::initializeProcessName(const ChildProcessInitializationParam > void NetworkProcess::initializeSandbox(const ChildProcessInitializationParameters&, SandboxInitializationParameters&) > { > } >- >+ > void NetworkProcess::syncAllCookies() > { > } >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.h b/Source/WebKit/NetworkProcess/NetworkProcess.h >index ffa8b78c14ecef307e1ad3b10b4316262fc873b9..65603972ed761c82b2081f66d1d48e5a81ea4c17 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.h >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.h >@@ -30,6 +30,7 @@ > #include "DownloadManager.h" > #include "MessageReceiverMap.h" > #include "NetworkContentRuleListManager.h" >+#include "NetworkProcessMessages.h" > #include <WebCore/DiagnosticLoggingClient.h> > #include <memory> > #include <pal/SessionID.h> >@@ -227,7 +228,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..137164d3590e2de8f6621ed1117941d5869d3559 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> completionAggregator = CallbackAggregator::create([&] { >+ didSyncAllCookies(); >+ }); >+ WebCore::NetworkStorageSession::forEach([&] (const WebCore::NetworkStorageSession& networkStorageSession) { >+ [networkStorageSession.nsCookieStorage() _saveCookies:[completionAggregator] { }]; >+ }); >+#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..bac843ecd3ac96c2b2efcc046a80acc26f6762e8 100644 >--- a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp >+++ b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp >@@ -548,6 +548,24 @@ void NetworkProcessProxy::setIsHoldingLockedFiles(bool isHoldingLockedFiles) > } > } > >+void NetworkProcessProxy::syncAllCookies() >+{ >+ ++m_numPendingSyncCookiesCall; >+ if (m_tokenForSyncingCookies) >+ return; >+ >+ RELEASE_LOG(ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is syncing cookies", this); >+ m_tokenForSyncingCookies = throttler().backgroundActivityToken(); >+} >+ >+void NetworkProcessProxy::didSyncAllCookies() >+{ >+ --m_numPendingSyncCookiesCall; >+ if (!m_numPendingSyncCookiesCall) { >+ RELEASE_LOG(ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done syncing cookies", this); >+ m_tokenForSyncingCookies = 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..0810f90a5827cc17e62cfc6aa0c60389b140d129 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_tokenForSyncingCookies; >+ >+ unsigned m_numPendingSyncCookiesCall { 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..be90781a47ff353bf6066aaabf4f372e216f5dfd 100644 >--- a/Source/WebKit/UIProcess/WebProcessPool.cpp >+++ b/Source/WebKit/UIProcess/WebProcessPool.cpp >@@ -1599,7 +1599,8 @@ void WebProcessPool::terminateServiceWorkerProcesses() > > void WebProcessPool::syncNetworkProcessCookies() > { >- sendSyncToNetworkingProcess(Messages::NetworkProcess::SyncAllCookies(), Messages::NetworkProcess::SyncAllCookies::Reply()); >+ m_networkProcess->syncAllCookies(); >+ m_networkProcess->send(Messages::NetworkProcess::SyncAllCookies(), 0); > } > > 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