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