Title: [288924] trunk/Source/WebKit
Revision
288924
Author
[email protected]
Date
2022-02-01 16:10:11 -0800 (Tue, 01 Feb 2022)

Log Message

Write origin file when OriginStorageManager is destroyed
https://bugs.webkit.org/show_bug.cgi?id=235897
rdar://87163253

Reviewed by Darin Adler.

The first WebStorage message sent from web process to network process is sync, and writing origin file when
creating OriginStorageManager will delay the reply. Since we can get the origin information from in-memory map
when OriginStorageManager is present, we may delay the write to until when OriginStorageManager is destroyed.
This fixes the PLT regression from r286936.

* NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::localOriginStorageManager):
* NetworkProcess/storage/OriginStorageManager.cpp:
(WebKit::OriginStorageManager::OriginStorageManager):
(WebKit::OriginStorageManager::~OriginStorageManager):
* NetworkProcess/storage/OriginStorageManager.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (288923 => 288924)


--- trunk/Source/WebKit/ChangeLog	2022-02-02 00:09:11 UTC (rev 288923)
+++ trunk/Source/WebKit/ChangeLog	2022-02-02 00:10:11 UTC (rev 288924)
@@ -1,3 +1,23 @@
+2022-02-01  Sihui Liu  <[email protected]>
+
+        Write origin file when OriginStorageManager is destroyed
+        https://bugs.webkit.org/show_bug.cgi?id=235897
+        rdar://87163253
+
+        Reviewed by Darin Adler.
+
+        The first WebStorage message sent from web process to network process is sync, and writing origin file when 
+        creating OriginStorageManager will delay the reply. Since we can get the origin information from in-memory map 
+        when OriginStorageManager is present, we may delay the write to until when OriginStorageManager is destroyed.
+        This fixes the PLT regression from r286936.
+
+        * NetworkProcess/storage/NetworkStorageManager.cpp:
+        (WebKit::NetworkStorageManager::localOriginStorageManager):
+        * NetworkProcess/storage/OriginStorageManager.cpp:
+        (WebKit::OriginStorageManager::OriginStorageManager):
+        (WebKit::OriginStorageManager::~OriginStorageManager):
+        * NetworkProcess/storage/OriginStorageManager.h:
+
 2022-02-01  Per Arne Vollan  <[email protected]>
 
         [WP] Remove PostScript conversion code

Modified: trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp (288923 => 288924)


--- trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp	2022-02-02 00:09:11 UTC (rev 288923)
+++ trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp	2022-02-02 00:10:11 UTC (rev 288924)
@@ -210,8 +210,12 @@
 
     return *m_localOriginStorageManagers.ensure(origin, [&] {
         auto originDirectory = originDirectoryPath(m_path, origin, m_salt);
-        writeOriginToFileIfNecessary(originFilePath(originDirectory), origin);
-        return makeUnique<OriginStorageManager>(WTFMove(originDirectory), LocalStorageManager::localStorageFilePath(m_customLocalStoragePath, origin));
+        // We write origin file at when OriginStorageManager is destroyed to avoid delay
+        // in replying sync messages for Web Storage API.
+        auto writeOriginFileFunction = [originFile = originFilePath(originDirectory), origin]() {
+            writeOriginToFileIfNecessary(originFile, origin);
+        };
+        return makeUnique<OriginStorageManager>(WTFMove(writeOriginFileFunction), WTFMove(originDirectory), LocalStorageManager::localStorageFilePath(m_customLocalStoragePath, origin));
     }).iterator->value;
 }
 

Modified: trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp (288923 => 288924)


--- trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp	2022-02-02 00:09:11 UTC (rev 288923)
+++ trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp	2022-02-02 00:10:11 UTC (rev 288924)
@@ -269,14 +269,19 @@
     std::unique_ptr<SessionStorageManager> m_sessionStorageManager;
 };
 
-OriginStorageManager::OriginStorageManager(String&& path, String&& localStoragePath)
-    : m_path(WTFMove(path))
+OriginStorageManager::OriginStorageManager(Function<void()>&& writeOriginFileFunction, String&& path, String&& localStoragePath)
+    : m_writeOriginFileFunction(WTFMove(writeOriginFileFunction))
+    , m_path(WTFMove(path))
     , m_localStoragePath(WTFMove(localStoragePath))
 {
     ASSERT(!RunLoop::isMain());
 }
 
-OriginStorageManager::~OriginStorageManager() = default;
+OriginStorageManager::~OriginStorageManager()
+{
+    if (m_writeOriginFileFunction)
+        m_writeOriginFileFunction();
+}
 
 void OriginStorageManager::connectionClosed(IPC::Connection::UniqueID connection)
 {

Modified: trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.h (288923 => 288924)


--- trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.h	2022-02-02 00:09:11 UTC (rev 288923)
+++ trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.h	2022-02-02 00:10:11 UTC (rev 288924)
@@ -44,7 +44,7 @@
 class OriginStorageManager {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    OriginStorageManager(String&& path, String&& localStoragePath);
+    OriginStorageManager(Function<void()>&&, String&& path, String&& localStoragePath);
     ~OriginStorageManager();
 
     void connectionClosed(IPC::Connection::UniqueID);
@@ -69,6 +69,7 @@
     void createOriginFileIfNecessary(const WebCore::ClientOrigin&);
     void deleteOriginFileIfNecessary();
 
+    Function<void()> m_writeOriginFileFunction;
     std::unique_ptr<StorageBucket> m_defaultBucket;
     String m_path;
     bool m_persisted { false };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to