Title: [278487] branches/safari-611-branch/Source/WebKit
- Revision
- 278487
- Author
- [email protected]
- Date
- 2021-06-04 13:24:12 -0700 (Fri, 04 Jun 2021)
Log Message
Cherry-pick r275886. rdar://problem/78874996
StorageArea in LocalStorageNamespace can be abandoned
https://bugs.webkit.org/show_bug.cgi?id=224459
Reviewed by Geoffrey Garen.
Remove StorageArea from LocalStorageNamespace if it has no connection (no web page is using it).
* NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
(WebKit::LocalStorageNamespace::removeStorageArea):
* NetworkProcess/WebStorage/LocalStorageNamespace.h:
* NetworkProcess/WebStorage/StorageArea.cpp:
(WebKit::StorageArea::removeListener):
* NetworkProcess/WebStorage/StorageManagerSet.cpp:
(WebKit::StorageManagerSet::removeConnection):
(WebKit::StorageManagerSet::disconnectFromStorageArea):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275886 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Modified Paths
Diff
Modified: branches/safari-611-branch/Source/WebKit/ChangeLog (278486 => 278487)
--- branches/safari-611-branch/Source/WebKit/ChangeLog 2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/ChangeLog 2021-06-04 20:24:12 UTC (rev 278487)
@@ -1,5 +1,46 @@
2021-06-04 Alan Coon <[email protected]>
+ Cherry-pick r275886. rdar://problem/78874996
+
+ StorageArea in LocalStorageNamespace can be abandoned
+ https://bugs.webkit.org/show_bug.cgi?id=224459
+
+ Reviewed by Geoffrey Garen.
+
+ Remove StorageArea from LocalStorageNamespace if it has no connection (no web page is using it).
+
+ * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
+ (WebKit::LocalStorageNamespace::removeStorageArea):
+ * NetworkProcess/WebStorage/LocalStorageNamespace.h:
+ * NetworkProcess/WebStorage/StorageArea.cpp:
+ (WebKit::StorageArea::removeListener):
+ * NetworkProcess/WebStorage/StorageManagerSet.cpp:
+ (WebKit::StorageManagerSet::removeConnection):
+ (WebKit::StorageManagerSet::disconnectFromStorageArea):
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@275886 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-04-13 Sihui Liu <[email protected]>
+
+ StorageArea in LocalStorageNamespace can be abandoned
+ https://bugs.webkit.org/show_bug.cgi?id=224459
+
+ Reviewed by Geoffrey Garen.
+
+ Remove StorageArea from LocalStorageNamespace if it has no connection (no web page is using it).
+
+ * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
+ (WebKit::LocalStorageNamespace::removeStorageArea):
+ * NetworkProcess/WebStorage/LocalStorageNamespace.h:
+ * NetworkProcess/WebStorage/StorageArea.cpp:
+ (WebKit::StorageArea::removeListener):
+ * NetworkProcess/WebStorage/StorageManagerSet.cpp:
+ (WebKit::StorageManagerSet::removeConnection):
+ (WebKit::StorageManagerSet::disconnectFromStorageArea):
+
+2021-06-04 Alan Coon <[email protected]>
+
Cherry-pick r273141. rdar://problem/78875378
Norton Safe Web extension is causing crashes / hangs under [WKRemoteObjectEncoder encodeObject:forKey:]
Modified: branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp (278486 => 278487)
--- branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp 2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp 2021-06-04 20:24:12 UTC (rev 278487)
@@ -79,6 +79,13 @@
}
}
+
+void LocalStorageNamespace::removeStorageArea(const SecurityOriginData& origin)
+{
+ ASSERT(!RunLoop::isMain());
+ m_storageAreaMap.remove(origin);
+}
+
Vector<SecurityOriginData> LocalStorageNamespace::ephemeralOrigins() const
{
ASSERT(!RunLoop::isMain());
Modified: branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h (278486 => 278487)
--- branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h 2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h 2021-06-04 20:24:12 UTC (rev 278487)
@@ -52,6 +52,7 @@
void clearStorageAreasMatchingOrigin(const WebCore::SecurityOriginData&);
void clearAllStorageAreas();
+ void removeStorageArea(const WebCore::SecurityOriginData&);
void flushAndClose(const WebCore::SecurityOriginData&);
Vector<WebCore::SecurityOriginData> ephemeralOrigins() const;
Modified: branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp (278486 => 278487)
--- branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp 2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp 2021-06-04 20:24:12 UTC (rev 278487)
@@ -70,6 +70,15 @@
{
ASSERT(!RunLoop::isMain());
m_eventListeners.remove(connectionID);
+
+ if (!m_eventListeners.isEmpty())
+ return;
+
+ if (!m_localStorageNamespace)
+ return;
+
+ syncToDatabase();
+ m_localStorageNamespace->removeStorageArea(m_securityOrigin);
}
bool StorageArea::hasListener(IPC::Connection::UniqueID connectionID) const
Modified: branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp (278486 => 278487)
--- branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp 2021-06-04 20:24:08 UTC (rev 278486)
+++ branches/safari-611-branch/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp 2021-06-04 20:24:12 UTC (rev 278487)
@@ -115,11 +115,17 @@
connection.removeWorkQueueMessageReceiver(Messages::StorageManagerSet::messageReceiverName());
m_queue->dispatch([this, protectedThis = makeRef(*this), connectionID]() {
- for (const auto& storageArea : m_storageAreas.values()) {
- ASSERT(storageArea);
+ Vector<StorageAreaIdentifier> identifiersToRemove;
+ for (auto& [identifier, storageArea] : m_storageAreas) {
if (storageArea)
storageArea->removeListener(connectionID);
+
+ if (!storageArea)
+ identifiersToRemove.append(identifier);
}
+
+ for (auto identifier : identifiersToRemove)
+ m_storageAreas.remove(identifier);
});
}
@@ -388,8 +394,12 @@
ASSERT(storageArea);
ASSERT(storageArea->hasListener(connection.uniqueID()));
- if (storageArea)
- storageArea->removeListener(connection.uniqueID());
+ if (!storageArea)
+ return;
+
+ storageArea->removeListener(connection.uniqueID());
+ if (!storageArea)
+ m_storageAreas.remove(storageAreaID);
}
void StorageManagerSet::getValues(IPC::Connection& connection, StorageAreaIdentifier storageAreaID, GetValuesCallback&& completionHandler)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes