Title: [291334] trunk/Source/WebKit
Revision
291334
Author
sihui_...@apple.com
Date
2022-03-16 00:20:01 -0700 (Wed, 16 Mar 2022)

Log Message

Suspend newly created NetworkStorageManager if network process is or will be suspended
https://bugs.webkit.org/show_bug.cgi?id=237915

Reviewed by Chris Dumez.

When network process receives prepareToSuspend message, we suspend existing NetworkStorageManagers (so no more
database operation can be performed). We should do the same thing for new NetworkStorageManager created between
prepareToSuspend and processDidResume messages.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::addWebsiteDataStore):
(WebKit::NetworkProcess::prepareToSuspend):
(WebKit::NetworkProcess::processDidResume):
(WebKit::NetworkProcess::resume): Deleted.
* NetworkProcess/NetworkProcess.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (291333 => 291334)


--- trunk/Source/WebKit/ChangeLog	2022-03-16 06:07:28 UTC (rev 291333)
+++ trunk/Source/WebKit/ChangeLog	2022-03-16 07:20:01 UTC (rev 291334)
@@ -1,3 +1,21 @@
+2022-03-16  Sihui Liu  <sihui_...@apple.com>
+
+        Suspend newly created NetworkStorageManager if network process is or will be suspended
+        https://bugs.webkit.org/show_bug.cgi?id=237915
+
+        Reviewed by Chris Dumez.
+
+        When network process receives prepareToSuspend message, we suspend existing NetworkStorageManagers (so no more
+        database operation can be performed). We should do the same thing for new NetworkStorageManager created between
+        prepareToSuspend and processDidResume messages.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::addWebsiteDataStore):
+        (WebKit::NetworkProcess::prepareToSuspend):
+        (WebKit::NetworkProcess::processDidResume):
+        (WebKit::NetworkProcess::resume): Deleted.
+        * NetworkProcess/NetworkProcess.h:
+
 2022-03-15  Simon Fraser  <simon.fra...@apple.com>
 
         REGRESSION (r291191): [iOS] ASSERTION FAILED: m_contentsBufferHandle in WebKit::RemoteLayerBackingStore::paintContents()

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (291333 => 291334)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2022-03-16 06:07:28 UTC (rev 291333)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2022-03-16 07:20:01 UTC (rev 291334)
@@ -442,10 +442,12 @@
     auto sessionID = parameters.networkSessionParameters.sessionID;
     addStorageSession(sessionID, parameters.networkSessionParameters.shouldUseTestingNetworkSession, parameters.uiProcessCookieStorageIdentifier, parameters.cookieStoragePathExtensionHandle);
 
-    m_networkSessions.ensure(sessionID, [&]() {
+    auto& session = m_networkSessions.ensure(sessionID, [&]() {
         return NetworkSession::create(*this, parameters.networkSessionParameters);
-    });
-    
+    }).iterator->value;
+
+    if (m_isSuspended)
+        session->storageManager().suspend([] { });
 }
 
 void NetworkProcess::forEachNetworkSession(const Function<void(NetworkSession&)>& functor)
@@ -2114,6 +2116,7 @@
 {
     RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(), isSuspensionImminent=%d", this, isSuspensionImminent);
 
+    m_isSuspended = true;
     lowMemoryHandler(Critical::Yes);
 
     RefPtr<CallbackAggregator> callbackAggregator = CallbackAggregator::create([this, completionHandler = WTFMove(completionHandler)]() mutable {
@@ -2153,11 +2156,9 @@
 void NetworkProcess::processDidResume()
 {
     RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::processDidResume()", this);
-    resume();
-}
 
-void NetworkProcess::resume()
-{
+    m_isSuspended = false;
+
     for (auto& connection : m_webProcessConnections.values())
         connection->endSuspension();
 

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (291333 => 291334)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2022-03-16 06:07:28 UTC (rev 291333)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2022-03-16 07:20:01 UTC (rev 291334)
@@ -175,7 +175,6 @@
     void processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&&);
     void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
     void processDidResume();
-    void resume();
 
     CacheModel cacheModel() const { return m_cacheModel; }
 
@@ -524,6 +523,7 @@
 
     bool m_privateClickMeasurementEnabled { true };
     bool m_ftpEnabled { false };
+    bool m_isSuspended { false };
 };
 
 #if !PLATFORM(COCOA)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to