Title: [275886] trunk/Source/WebKit
- Revision
- 275886
- Author
- sihui_...@apple.com
- Date
- 2021-04-13 08:55:34 -0700 (Tue, 13 Apr 2021)
Log Message
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):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (275885 => 275886)
--- trunk/Source/WebKit/ChangeLog 2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/ChangeLog 2021-04-13 15:55:34 UTC (rev 275886)
@@ -1,3 +1,21 @@
+2021-04-13 Sihui Liu <sihui_...@apple.com>
+
+ 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-04-13 Peng Liu <peng.l...@apple.com>
[macOS] Netflix videos opened in background tab never become playable after foregrounding
Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp (275885 => 275886)
--- trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp 2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp 2021-04-13 15:55:34 UTC (rev 275886)
@@ -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: trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h (275885 => 275886)
--- trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h 2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h 2021-04-13 15:55:34 UTC (rev 275886)
@@ -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: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp (275885 => 275886)
--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp 2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageArea.cpp 2021-04-13 15:55:34 UTC (rev 275886)
@@ -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: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp (275885 => 275886)
--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp 2021-04-13 15:30:48 UTC (rev 275885)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp 2021-04-13 15:55:34 UTC (rev 275886)
@@ -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);
});
}
@@ -383,8 +389,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
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes