Title: [247092] trunk/Source/WebKit
Revision
247092
Author
you...@apple.com
Date
2019-07-03 10:28:53 -0700 (Wed, 03 Jul 2019)

Log Message

Make sure to cross-thread copy in StorageManager when hopping back to the main thread
https://bugs.webkit.org/show_bug.cgi?id=199423

Reviewed by Chris Dumez.

Make sure to isolate copy some strings that may not be isolated in case of ephemeral sessions.
Small refactoring to use crossThreadCopy instead of doing vector copy ourselves.

* NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h:
(WebKit::LocalStorageDatabaseTracker::OriginDetails::isolatedCopy const):
* NetworkProcess/WebStorage/StorageManager.cpp:
(WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
(WebKit::StorageManager::getLocalStorageOrigins):
(WebKit::StorageManager::getLocalStorageOriginDetails):
(WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (247091 => 247092)


--- trunk/Source/WebKit/ChangeLog	2019-07-03 12:26:11 UTC (rev 247091)
+++ trunk/Source/WebKit/ChangeLog	2019-07-03 17:28:53 UTC (rev 247092)
@@ -1,3 +1,21 @@
+2019-07-03  Youenn Fablet  <you...@apple.com>
+
+        Make sure to cross-thread copy in StorageManager when hopping back to the main thread
+        https://bugs.webkit.org/show_bug.cgi?id=199423
+
+        Reviewed by Chris Dumez.
+
+        Make sure to isolate copy some strings that may not be isolated in case of ephemeral sessions.
+        Small refactoring to use crossThreadCopy instead of doing vector copy ourselves.
+
+        * NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h:
+        (WebKit::LocalStorageDatabaseTracker::OriginDetails::isolatedCopy const):
+        * NetworkProcess/WebStorage/StorageManager.cpp:
+        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
+        (WebKit::StorageManager::getLocalStorageOrigins):
+        (WebKit::StorageManager::getLocalStorageOriginDetails):
+        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
+
 2019-07-02  Joonghun Park  <jh718.p...@samsung.com>
 
         Unreviewed. Fix build break introduced in r247058.

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h (247091 => 247092)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h	2019-07-03 12:26:11 UTC (rev 247091)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageDatabaseTracker.h	2019-07-03 17:28:53 UTC (rev 247092)
@@ -58,6 +58,8 @@
 
         template<class Encoder> void encode(Encoder&) const;
         template<class Decoder> static Optional<OriginDetails> decode(Decoder&);
+
+        OriginDetails isolatedCopy() const { return { originIdentifier.isolatedCopy(), creationTime, modificationTime }; }
     };
     Vector<OriginDetails> originDetails();
 

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp (247091 => 247092)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp	2019-07-03 12:26:11 UTC (rev 247091)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp	2019-07-03 17:28:53 UTC (rev 247092)
@@ -621,13 +621,7 @@
 
 void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, Function<void()>&& completionHandler)
 {
-    Vector<WebCore::SecurityOriginData> copiedOrigins;
-    copiedOrigins.reserveInitialCapacity(origins.size());
-
-    for (auto& origin : origins)
-        copiedOrigins.uncheckedAppend(origin.isolatedCopy());
-
-    m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = WTFMove(copiedOrigins), completionHandler = WTFMove(completionHandler)]() mutable {
+    m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = crossThreadCopy(origins), completionHandler = WTFMove(completionHandler)]() mutable {
         for (auto& origin : copiedOrigins) {
             for (auto& sessionStorageNamespace : m_sessionStorageNamespaces.values())
                 sessionStorageNamespace->clearStorageAreasMatchingOrigin(origin);
@@ -644,17 +638,17 @@
 
         if (m_localStorageDatabaseTracker) {
             for (auto& origin : m_localStorageDatabaseTracker->origins())
-                origins.add(origin);
+                origins.add(origin.isolatedCopy());
         } else {
             for (const auto& localStorageNameSpace : m_localStorageNamespaces.values()) {
                 for (auto& origin : localStorageNameSpace->ephemeralOrigins())
-                    origins.add(origin);
+                    origins.add(origin.isolatedCopy());
             }
         }
 
         for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values()) {
             for (auto& origin : transientLocalStorageNamespace->origins())
-                origins.add(origin);
+                origins.add(origin.isolatedCopy());
         }
 
         RunLoop::main().dispatch([origins = WTFMove(origins), completionHandler = WTFMove(completionHandler)]() mutable {
@@ -668,7 +662,7 @@
     m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
         Vector<LocalStorageDatabaseTracker::OriginDetails> originDetails;
         if (m_localStorageDatabaseTracker)
-            originDetails = m_localStorageDatabaseTracker->originDetails();
+            originDetails = m_localStorageDatabaseTracker->originDetails().isolatedCopy();
 
         RunLoop::main().dispatch([originDetails = WTFMove(originDetails), completionHandler = WTFMove(completionHandler)]() mutable {
             completionHandler(WTFMove(originDetails));
@@ -716,13 +710,7 @@
 
 void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, Function<void()>&& completionHandler)
 {
-    Vector<SecurityOriginData> copiedOrigins;
-    copiedOrigins.reserveInitialCapacity(origins.size());
-
-    for (auto& origin : origins)
-        copiedOrigins.uncheckedAppend(origin.isolatedCopy());
-
-    m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = WTFMove(copiedOrigins), completionHandler = WTFMove(completionHandler)]() mutable {
+    m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = crossThreadCopy(origins), completionHandler = WTFMove(completionHandler)]() mutable {
         for (auto& origin : copiedOrigins) {
             for (auto& localStorageNamespace : m_localStorageNamespaces.values())
                 localStorageNamespace->clearStorageAreasMatchingOrigin(origin);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to