Title: [184356] trunk/Source/WebKit2
Revision
184356
Author
ander...@apple.com
Date
2015-05-14 14:43:30 -0700 (Thu, 14 May 2015)

Log Message

Local storage origins should include origins with transient local storage
https://bugs.webkit.org/show_bug.cgi?id=145017
rdar://problem/10690447

Reviewed by Sam Weinig.

The transient local storage namespaces are used for third party data blocking and will stay
around until the UI process exits so we need to be able to include website data from transient storage
in the website data store APIs.

* UIProcess/Storage/StorageManager.cpp:
(WebKit::StorageManager::TransientLocalStorageNamespace::origins):
(WebKit::StorageManager::getLocalStorageOrigins):
* UIProcess/Storage/StorageManager.h:
* UIProcess/WebKeyValueStorageManager.cpp:
(WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::fetchData):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (184355 => 184356)


--- trunk/Source/WebKit2/ChangeLog	2015-05-14 21:39:50 UTC (rev 184355)
+++ trunk/Source/WebKit2/ChangeLog	2015-05-14 21:43:30 UTC (rev 184356)
@@ -1,3 +1,24 @@
+2015-05-14  Anders Carlsson  <ander...@apple.com>
+
+        Local storage origins should include origins with transient local storage
+        https://bugs.webkit.org/show_bug.cgi?id=145017
+        rdar://problem/10690447
+
+        Reviewed by Sam Weinig.
+
+        The transient local storage namespaces are used for third party data blocking and will stay
+        around until the UI process exits so we need to be able to include website data from transient storage
+        in the website data store APIs.
+
+        * UIProcess/Storage/StorageManager.cpp:
+        (WebKit::StorageManager::TransientLocalStorageNamespace::origins):
+        (WebKit::StorageManager::getLocalStorageOrigins):
+        * UIProcess/Storage/StorageManager.h:
+        * UIProcess/WebKeyValueStorageManager.cpp:
+        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::fetchData):
+
 2015-05-14  Beth Dakin  <bda...@apple.com>
 
         Change range of possible forces for mouseforcechanged DOM event

Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (184355 => 184356)


--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp	2015-05-14 21:39:50 UTC (rev 184355)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp	2015-05-14 21:43:30 UTC (rev 184356)
@@ -129,6 +129,18 @@
         return storageArea;
     }
 
+    Vector<RefPtr<SecurityOrigin>> origins() const
+    {
+        Vector<RefPtr<SecurityOrigin>> origins;
+
+        for (const auto& storageArea : m_storageAreaMap.values()) {
+            if (!storageArea->items().isEmpty())
+                origins.append(storageArea->securityOrigin());
+        }
+
+        return origins;
+    }
+
     void clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
     {
         for (auto& storageArea : m_storageAreaMap.values()) {
@@ -514,13 +526,21 @@
     });
 }
 
-void StorageManager::getLocalStorageOrigins(std::function<void (Vector<RefPtr<WebCore::SecurityOrigin>>)> completionHandler)
+void StorageManager::getLocalStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)> completionHandler)
 {
     RefPtr<StorageManager> storageManager(this);
 
     m_queue->dispatch([storageManager, completionHandler] {
-        auto origins = storageManager->m_localStorageDatabaseTracker->origins();
+        HashSet<RefPtr<SecurityOrigin>> origins;
 
+        for (auto& origin : storageManager->m_localStorageDatabaseTracker->origins())
+            origins.add(WTF::move(origin));
+
+        for (auto& transientLocalStorageNamespace : storageManager->m_transientLocalStorageNamespaces.values()) {
+            for (auto& origin : transientLocalStorageNamespace->origins())
+                origins.add(WTF::move(origin));
+        }
+
         RunLoop::main().dispatch([origins, completionHandler]() mutable {
             completionHandler(WTF::move(origins));
         });

Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (184355 => 184356)


--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h	2015-05-14 21:39:50 UTC (rev 184355)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h	2015-05-14 21:43:30 UTC (rev 184356)
@@ -27,8 +27,10 @@
 #define StorageManager_h
 
 #include "Connection.h"
+#include <WebCore/SecurityOriginHash.h>
 #include <chrono>
 #include <wtf/Forward.h>
+#include <wtf/HashSet.h>
 #include <wtf/ThreadSafeRefCounted.h>
 #include <wtf/text/StringHash.h>
 
@@ -57,7 +59,7 @@
     void processDidCloseConnection(WebProcessProxy&, IPC::Connection&);
     void applicationWillTerminate();
 
-    void getLocalStorageOrigins(std::function<void (Vector<RefPtr<WebCore::SecurityOrigin>>)> completionHandler);
+    void getLocalStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)> completionHandler);
     void getLocalStorageDetailsByOrigin(std::function<void (Vector<LocalStorageDetails>)> completionHandler);
     void deleteLocalStorageEntriesForOrigin(const WebCore::SecurityOrigin&);
     void deleteAllLocalStorageEntries();

Modified: trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp (184355 => 184356)


--- trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp	2015-05-14 21:39:50 UTC (rev 184355)
+++ trunk/Source/WebKit2/UIProcess/WebKeyValueStorageManager.cpp	2015-05-14 21:43:30 UTC (rev 184356)
@@ -98,11 +98,11 @@
         return;
     }
 
-    storageManager->getLocalStorageOrigins([callbackFunction](Vector<RefPtr<SecurityOrigin>> securityOrigins) {
+    storageManager->getLocalStorageOrigins([callbackFunction](HashSet<RefPtr<SecurityOrigin>>&& securityOrigins) {
         Vector<RefPtr<API::Object>> webSecurityOrigins;
         webSecurityOrigins.reserveInitialCapacity(securityOrigins.size());
         for (auto& origin : securityOrigins)
-            webSecurityOrigins.uncheckedAppend(API::SecurityOrigin::create(WTF::move(origin)));
+            webSecurityOrigins.uncheckedAppend(API::SecurityOrigin::create(origin));
 
         callbackFunction(API::Array::create(WTF::move(webSecurityOrigins)).ptr(), CallbackBase::Error::None);
     });

Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (184355 => 184356)


--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2015-05-14 21:39:50 UTC (rev 184355)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp	2015-05-14 21:43:30 UTC (rev 184356)
@@ -269,11 +269,12 @@
     if (dataTypes & WebsiteDataTypeLocalStorage && m_storageManager) {
         callbackAggregator->addPendingCallback();
 
-        m_storageManager->getLocalStorageOrigins([callbackAggregator](Vector<RefPtr<WebCore::SecurityOrigin>> origins) {
+        m_storageManager->getLocalStorageOrigins([callbackAggregator](HashSet<RefPtr<WebCore::SecurityOrigin>>&& origins) {
             WebsiteData websiteData;
-            for (auto& origin : origins)
-                websiteData.entries.append(WebsiteData::Entry { WTF::move(origin), WebsiteDataTypeLocalStorage });
 
+            while (!origins.isEmpty())
+                websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataTypeLocalStorage });
+
             callbackAggregator->removePendingCallback(WTF::move(websiteData));
         });
     }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to