Title: [248901] trunk/Source
Revision
248901
Author
cdu...@apple.com
Date
2019-08-20 09:34:56 -0700 (Tue, 20 Aug 2019)

Log Message

Use a strongly typed identifier for StorageNamespace's identifier
https://bugs.webkit.org/show_bug.cgi?id=200895

Reviewed by Alex Christensen and Youenn Fablet.

Source/WebCore:

* storage/StorageNamespace.h:

Source/WebKit:

Use a strongly typed identifier for StorageNamespace's identifier instead of uint64_t, to
avoid type confusion.

* NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
(WebKit::LocalStorageNamespace::LocalStorageNamespace):
* NetworkProcess/WebStorage/LocalStorageNamespace.h:
* NetworkProcess/WebStorage/StorageManager.cpp:
(WebKit::StorageManager::createSessionStorageNamespace):
(WebKit::StorageManager::destroySessionStorageNamespace):
(WebKit::StorageManager::cloneSessionStorageNamespace):
(WebKit::StorageManager::createLocalStorageArea):
(WebKit::StorageManager::createTransientLocalStorageArea):
(WebKit::StorageManager::createSessionStorageArea):
(WebKit::StorageManager::getOrCreateLocalStorageNamespace):
(WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
(WebKit::StorageManager::getOrCreateSessionStorageNamespace):
* NetworkProcess/WebStorage/StorageManager.h:
* NetworkProcess/WebStorage/StorageManagerSet.cpp:
(WebKit::StorageManagerSet::connectToLocalStorageArea):
(WebKit::StorageManagerSet::connectToTransientLocalStorageArea):
(WebKit::StorageManagerSet::connectToSessionStorageArea):
(WebKit::StorageManagerSet::cloneSessionStorageNamespace):
* NetworkProcess/WebStorage/StorageManagerSet.h:
* NetworkProcess/WebStorage/StorageManagerSet.messages.in:
* Scripts/webkit/messages.py:
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/InjectedBundle/InjectedBundle.cpp:
(WebKit::InjectedBundle::setPrivateBrowsingEnabled):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::m_textAutoSizingAdjustmentTimer):
* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::sessionStorageNamespaceIdentifier const):
* WebProcess/WebPage/WebPageGroupProxy.h:
(WebKit::WebPageGroupProxy::localStorageNamespaceIdentifier const):
* WebProcess/WebStorage/StorageAreaMap.cpp:
(WebKit::StorageAreaMap::dispatchSessionStorageEvent):
(WebKit::StorageAreaMap::dispatchLocalStorageEvent):
* WebProcess/WebStorage/StorageNamespaceIdentifier.h: Copied from Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h.
* WebProcess/WebStorage/StorageNamespaceImpl.cpp:
(WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
(WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
(WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
(WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
(WebKit::StorageNamespaceImpl::copy):
(WebKit::StorageNamespaceImpl::sessionStoragePageID const):
(WebKit::StorageNamespaceImpl::pageGroupID const):
* WebProcess/WebStorage/StorageNamespaceImpl.h:
(WebKit::StorageNamespaceImpl::storageNamespaceID const):
* WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
(WebKit::WebStorageNamespaceProvider::getOrCreate):
(WebKit::WebStorageNamespaceProvider::WebStorageNamespaceProvider):
(WebKit::WebStorageNamespaceProvider::~WebStorageNamespaceProvider):
(WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
(WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
(WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
* WebProcess/WebStorage/WebStorageNamespaceProvider.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (248900 => 248901)


--- trunk/Source/WebCore/ChangeLog	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebCore/ChangeLog	2019-08-20 16:34:56 UTC (rev 248901)
@@ -1,3 +1,12 @@
+2019-08-20  Chris Dumez  <cdu...@apple.com>
+
+        Use a strongly typed identifier for StorageNamespace's identifier
+        https://bugs.webkit.org/show_bug.cgi?id=200895
+
+        Reviewed by Alex Christensen and Youenn Fablet.
+
+        * storage/StorageNamespace.h:
+
 2019-08-20  Youenn Fablet  <you...@apple.com>
 
         Make IDB quota check lambdas take a weak of UniqueIDBDatabaseTransaction instead of a ref

Modified: trunk/Source/WebCore/storage/StorageNamespace.h (248900 => 248901)


--- trunk/Source/WebCore/storage/StorageNamespace.h	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebCore/storage/StorageNamespace.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -42,6 +42,8 @@
 public:
     virtual ~StorageNamespace() = default;
     virtual Ref<StorageArea> storageArea(const SecurityOriginData&) = 0;
+
+    // FIXME: This is only valid for session storage and should probably be moved to a subclass.
     virtual Ref<StorageNamespace> copy(Page* newPage) = 0;
 
     virtual PAL::SessionID sessionID() const = 0;

Modified: trunk/Source/WebKit/ChangeLog (248900 => 248901)


--- trunk/Source/WebKit/ChangeLog	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/ChangeLog	2019-08-20 16:34:56 UTC (rev 248901)
@@ -1,3 +1,67 @@
+2019-08-20  Chris Dumez  <cdu...@apple.com>
+
+        Use a strongly typed identifier for StorageNamespace's identifier
+        https://bugs.webkit.org/show_bug.cgi?id=200895
+
+        Reviewed by Alex Christensen and Youenn Fablet.
+
+        Use a strongly typed identifier for StorageNamespace's identifier instead of uint64_t, to
+        avoid type confusion.
+
+        * NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
+        (WebKit::LocalStorageNamespace::LocalStorageNamespace):
+        * NetworkProcess/WebStorage/LocalStorageNamespace.h:
+        * NetworkProcess/WebStorage/StorageManager.cpp:
+        (WebKit::StorageManager::createSessionStorageNamespace):
+        (WebKit::StorageManager::destroySessionStorageNamespace):
+        (WebKit::StorageManager::cloneSessionStorageNamespace):
+        (WebKit::StorageManager::createLocalStorageArea):
+        (WebKit::StorageManager::createTransientLocalStorageArea):
+        (WebKit::StorageManager::createSessionStorageArea):
+        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
+        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
+        (WebKit::StorageManager::getOrCreateSessionStorageNamespace):
+        * NetworkProcess/WebStorage/StorageManager.h:
+        * NetworkProcess/WebStorage/StorageManagerSet.cpp:
+        (WebKit::StorageManagerSet::connectToLocalStorageArea):
+        (WebKit::StorageManagerSet::connectToTransientLocalStorageArea):
+        (WebKit::StorageManagerSet::connectToSessionStorageArea):
+        (WebKit::StorageManagerSet::cloneSessionStorageNamespace):
+        * NetworkProcess/WebStorage/StorageManagerSet.h:
+        * NetworkProcess/WebStorage/StorageManagerSet.messages.in:
+        * Scripts/webkit/messages.py:
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/InjectedBundle/InjectedBundle.cpp:
+        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::m_textAutoSizingAdjustmentTimer):
+        * WebProcess/WebPage/WebPage.h:
+        (WebKit::WebPage::sessionStorageNamespaceIdentifier const):
+        * WebProcess/WebPage/WebPageGroupProxy.h:
+        (WebKit::WebPageGroupProxy::localStorageNamespaceIdentifier const):
+        * WebProcess/WebStorage/StorageAreaMap.cpp:
+        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
+        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
+        * WebProcess/WebStorage/StorageNamespaceIdentifier.h: Copied from Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h.
+        * WebProcess/WebStorage/StorageNamespaceImpl.cpp:
+        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
+        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
+        (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
+        (WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
+        (WebKit::StorageNamespaceImpl::copy):
+        (WebKit::StorageNamespaceImpl::sessionStoragePageID const):
+        (WebKit::StorageNamespaceImpl::pageGroupID const):
+        * WebProcess/WebStorage/StorageNamespaceImpl.h:
+        (WebKit::StorageNamespaceImpl::storageNamespaceID const):
+        * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
+        (WebKit::WebStorageNamespaceProvider::getOrCreate):
+        (WebKit::WebStorageNamespaceProvider::WebStorageNamespaceProvider):
+        (WebKit::WebStorageNamespaceProvider::~WebStorageNamespaceProvider):
+        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
+        (WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
+        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
+        * WebProcess/WebStorage/WebStorageNamespaceProvider.h:
+
 2019-08-20  Dean Jackson  <d...@apple.com>
 
         REGRESSION: Open in New Tab is missing from context menu

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp (248900 => 248901)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp	2019-08-20 16:34:56 UTC (rev 248901)
@@ -35,7 +35,7 @@
 using namespace WebCore;
 
 // We should investigate a way to share it with WebCore.
-LocalStorageNamespace::LocalStorageNamespace(StorageManager& storageManager, uint64_t storageNamespaceID)
+LocalStorageNamespace::LocalStorageNamespace(StorageManager& storageManager, StorageNamespaceIdentifier storageNamespaceID)
     : m_storageManager(storageManager)
     , m_quotaInBytes(StorageManager::localStorageDatabaseQuotaInBytes)
 {

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h (248900 => 248901)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include "StorageNamespaceIdentifier.h"
 #include <WebCore/SecurityOriginData.h>
 #include <wtf/Forward.h>
 #include <wtf/HashMap.h>
@@ -40,7 +41,7 @@
     WTF_MAKE_NONCOPYABLE(LocalStorageNamespace);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    LocalStorageNamespace(StorageManager&, uint64_t storageManagerID);
+    LocalStorageNamespace(StorageManager&, StorageNamespaceIdentifier);
     ~LocalStorageNamespace();
 
     StorageManager* storageManager() const { return &m_storageManager; }

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp (248900 => 248901)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp	2019-08-20 16:34:56 UTC (rev 248901)
@@ -60,7 +60,7 @@
     ASSERT(!RunLoop::isMain());
 }
 
-void StorageManager::createSessionStorageNamespace(uint64_t storageNamespaceID, unsigned quotaInBytes)
+void StorageManager::createSessionStorageNamespace(StorageNamespaceIdentifier storageNamespaceID, unsigned quotaInBytes)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -69,7 +69,7 @@
     });
 }
 
-void StorageManager::destroySessionStorageNamespace(uint64_t storageNamespaceID)
+void StorageManager::destroySessionStorageNamespace(StorageNamespaceIdentifier storageNamespaceID)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -78,7 +78,7 @@
         m_sessionStorageNamespaces.remove(storageNamespaceID);
 }
 
-void StorageManager::cloneSessionStorageNamespace(uint64_t storageNamespaceID, uint64_t newStorageNamespaceID)
+void StorageManager::cloneSessionStorageNamespace(StorageNamespaceIdentifier storageNamespaceID, StorageNamespaceIdentifier newStorageNamespaceID)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -92,7 +92,7 @@
     sessionStorageNamespace->cloneTo(*newSessionStorageNamespace);
 }
 
-HashSet<WebCore::SecurityOriginData> StorageManager::getSessionStorageOriginsCrossThreadCopy() const
+HashSet<SecurityOriginData> StorageManager::getSessionStorageOriginsCrossThreadCopy() const
 {
     ASSERT(!RunLoop::isMain());
 
@@ -113,7 +113,7 @@
         sessionStorageNamespace->clearAllStorageAreas();
 }
 
-void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins)
+void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<SecurityOriginData>& origins)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -123,7 +123,7 @@
     }
 }
 
-HashSet<WebCore::SecurityOriginData> StorageManager::getLocalStorageOriginsCrossThreadCopy() const
+HashSet<SecurityOriginData> StorageManager::getLocalStorageOriginsCrossThreadCopy() const
 {
     ASSERT(!RunLoop::isMain());
 
@@ -176,7 +176,7 @@
     }
 }
 
-void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins)
+void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<SecurityOriginData>& origins)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -192,7 +192,7 @@
     }
 }
 
-StorageArea* StorageManager::createLocalStorageArea(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& origin, Ref<WorkQueue>&& workQueue)
+StorageArea* StorageManager::createLocalStorageArea(StorageNamespaceIdentifier storageNamespaceID, SecurityOriginData&& origin, Ref<WorkQueue>&& workQueue)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -202,10 +202,10 @@
     return nullptr;
 }
 
-StorageArea* StorageManager::createTransientLocalStorageArea(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& topLevelOrigin, WebCore::SecurityOriginData&& origin, Ref<WorkQueue>&& workQueue)
+StorageArea* StorageManager::createTransientLocalStorageArea(StorageNamespaceIdentifier storageNamespaceID, SecurityOriginData&& topLevelOrigin, SecurityOriginData&& origin, Ref<WorkQueue>&& workQueue)
 {
     ASSERT(!RunLoop::isMain());
-    ASSERT((HashMap<uint64_t, RefPtr<TransientLocalStorageNamespace>>::isValidKey(storageNamespaceID)));
+    ASSERT((HashMap<StorageNamespaceIdentifier, RefPtr<TransientLocalStorageNamespace>>::isValidKey(storageNamespaceID)));
 
     if (auto* transientLocalStorageNamespace = getOrCreateTransientLocalStorageNamespace(storageNamespaceID, WTFMove(topLevelOrigin)))
         return &transientLocalStorageNamespace->getOrCreateStorageArea(WTFMove(origin), WTFMove(workQueue));
@@ -213,10 +213,10 @@
     return nullptr;
 }
 
-StorageArea* StorageManager::createSessionStorageArea(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& origin, Ref<WorkQueue>&& workQueue)
+StorageArea* StorageManager::createSessionStorageArea(StorageNamespaceIdentifier storageNamespaceID, SecurityOriginData&& origin, Ref<WorkQueue>&& workQueue)
 {
     ASSERT(!RunLoop::isMain());
-    ASSERT((HashMap<uint64_t, RefPtr<SessionStorageNamespace>>::isValidKey(storageNamespaceID)));
+    ASSERT((HashMap<StorageNamespaceIdentifier, RefPtr<SessionStorageNamespace>>::isValidKey(storageNamespaceID)));
 
     if (auto* sessionStorageNamespace = getOrCreateSessionStorageNamespace(storageNamespaceID))
         return &sessionStorageNamespace->getOrCreateStorageArea(WTFMove(origin), WTFMove(workQueue));
@@ -224,7 +224,7 @@
     return nullptr;
 }
 
-LocalStorageNamespace* StorageManager::getOrCreateLocalStorageNamespace(uint64_t storageNamespaceID)
+LocalStorageNamespace* StorageManager::getOrCreateLocalStorageNamespace(StorageNamespaceIdentifier storageNamespaceID)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -236,7 +236,7 @@
     }).iterator->value.get();
 }
 
-TransientLocalStorageNamespace* StorageManager::getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& topLevelOrigin)
+TransientLocalStorageNamespace* StorageManager::getOrCreateTransientLocalStorageNamespace(StorageNamespaceIdentifier storageNamespaceID, SecurityOriginData&& topLevelOrigin)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -248,7 +248,7 @@
     }).iterator->value.get();
 }
 
-SessionStorageNamespace* StorageManager::getOrCreateSessionStorageNamespace(uint64_t storageNamespaceID)
+SessionStorageNamespace* StorageManager::getOrCreateSessionStorageNamespace(StorageNamespaceIdentifier storageNamespaceID)
 {
     ASSERT(!RunLoop::isMain());
 

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h (248900 => 248901)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -27,6 +27,7 @@
 
 #include "Connection.h"
 #include "LocalStorageDatabaseTracker.h"
+#include "StorageNamespaceIdentifier.h"
 #include <WebCore/SecurityOriginData.h>
 #include <WebCore/StorageMap.h>
 #include <wtf/Forward.h>
@@ -55,9 +56,9 @@
     explicit StorageManager(String&& localStorageDirectory);
     ~StorageManager();
 
-    void createSessionStorageNamespace(uint64_t storageNamespaceID, unsigned quotaInBytes);
-    void destroySessionStorageNamespace(uint64_t storageNamespaceID);
-    void cloneSessionStorageNamespace(uint64_t storageNamespaceID, uint64_t newStorageNamespaceID);
+    void createSessionStorageNamespace(StorageNamespaceIdentifier, unsigned quotaInBytes);
+    void destroySessionStorageNamespace(StorageNamespaceIdentifier);
+    void cloneSessionStorageNamespace(StorageNamespaceIdentifier oldStorageNamespaceID, StorageNamespaceIdentifier newStorageNamespaceID);
 
     HashSet<WebCore::SecurityOriginData> getSessionStorageOriginsCrossThreadCopy() const;
     void deleteSessionStorageOrigins();
@@ -77,19 +78,19 @@
     
     static const unsigned localStorageDatabaseQuotaInBytes;
 
-    StorageArea* createLocalStorageArea(uint64_t storageNamespaceID, WebCore::SecurityOriginData&&, Ref<WorkQueue>&&);
-    StorageArea* createTransientLocalStorageArea(uint64_t storageNamespaceID, WebCore::SecurityOriginData&&, WebCore::SecurityOriginData&&, Ref<WorkQueue>&&);
-    StorageArea* createSessionStorageArea(uint64_t storageNamespaceID, WebCore::SecurityOriginData&&, Ref<WorkQueue>&&);
+    StorageArea* createLocalStorageArea(StorageNamespaceIdentifier, WebCore::SecurityOriginData&&, Ref<WorkQueue>&&);
+    StorageArea* createTransientLocalStorageArea(StorageNamespaceIdentifier, WebCore::SecurityOriginData&&, WebCore::SecurityOriginData&&, Ref<WorkQueue>&&);
+    StorageArea* createSessionStorageArea(StorageNamespaceIdentifier, WebCore::SecurityOriginData&&, Ref<WorkQueue>&&);
 
 private:
-    LocalStorageNamespace* getOrCreateLocalStorageNamespace(uint64_t storageNamespaceID);
-    TransientLocalStorageNamespace* getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& topLevelOrigin);
-    SessionStorageNamespace* getOrCreateSessionStorageNamespace(uint64_t storageNamespaceID);
+    LocalStorageNamespace* getOrCreateLocalStorageNamespace(StorageNamespaceIdentifier);
+    TransientLocalStorageNamespace* getOrCreateTransientLocalStorageNamespace(StorageNamespaceIdentifier, WebCore::SecurityOriginData&& topLevelOrigin);
+    SessionStorageNamespace* getOrCreateSessionStorageNamespace(StorageNamespaceIdentifier);
 
     RefPtr<LocalStorageDatabaseTracker> m_localStorageDatabaseTracker;
-    HashMap<uint64_t, std::unique_ptr<LocalStorageNamespace>> m_localStorageNamespaces;
-    HashMap<std::pair<uint64_t, WebCore::SecurityOriginData>, std::unique_ptr<TransientLocalStorageNamespace>> m_transientLocalStorageNamespaces;
-    HashMap<uint64_t, std::unique_ptr<SessionStorageNamespace>> m_sessionStorageNamespaces;
+    HashMap<StorageNamespaceIdentifier, std::unique_ptr<LocalStorageNamespace>> m_localStorageNamespaces;
+    HashMap<std::pair<StorageNamespaceIdentifier, WebCore::SecurityOriginData>, std::unique_ptr<TransientLocalStorageNamespace>> m_transientLocalStorageNamespaces;
+    HashMap<StorageNamespaceIdentifier, std::unique_ptr<SessionStorageNamespace>> m_sessionStorageNamespaces;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp (248900 => 248901)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp	2019-08-20 16:34:56 UTC (rev 248901)
@@ -282,7 +282,7 @@
     });
 }
 
-void StorageManagerSet::connectToLocalStorageArea(IPC::Connection& connection, PAL::SessionID sessionID, uint64_t storageNamespaceID, SecurityOriginData&& originData, ConnectToStorageAreaCallback&& completionHandler)
+void StorageManagerSet::connectToLocalStorageArea(IPC::Connection& connection, PAL::SessionID sessionID, StorageNamespaceIdentifier storageNamespaceID, SecurityOriginData&& originData, ConnectToStorageAreaCallback&& completionHandler)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -307,7 +307,7 @@
     storageArea->addListener(connection.uniqueID());
 }
 
-void StorageManagerSet::connectToTransientLocalStorageArea(IPC::Connection& connection, PAL::SessionID sessionID, uint64_t storageNamespaceID, SecurityOriginData&& topLevelOriginData, SecurityOriginData&& originData, ConnectToStorageAreaCallback&& completionHandler)
+void StorageManagerSet::connectToTransientLocalStorageArea(IPC::Connection& connection, PAL::SessionID sessionID, StorageNamespaceIdentifier storageNamespaceID, SecurityOriginData&& topLevelOriginData, SecurityOriginData&& originData, ConnectToStorageAreaCallback&& completionHandler)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -332,7 +332,7 @@
     storageArea->addListener(connection.uniqueID());
 }
 
-void StorageManagerSet::connectToSessionStorageArea(IPC::Connection& connection, PAL::SessionID sessionID, uint64_t storageNamespaceID, SecurityOriginData&& originData, ConnectToStorageAreaCallback&& completionHandler)
+void StorageManagerSet::connectToSessionStorageArea(IPC::Connection& connection, PAL::SessionID sessionID, StorageNamespaceIdentifier storageNamespaceID, SecurityOriginData&& originData, ConnectToStorageAreaCallback&& completionHandler)
 {
     ASSERT(!RunLoop::isMain());
 
@@ -415,7 +415,7 @@
     connection.send(Messages::StorageAreaMap::DidClear(storageMapSeed), storageAreaID);
 }
 
-void StorageManagerSet::cloneSessionStorageNamespace(IPC::Connection&, PAL::SessionID sessionID, uint64_t fromStorageNamespaceID, uint64_t toStorageNamespaceID)
+void StorageManagerSet::cloneSessionStorageNamespace(IPC::Connection&, PAL::SessionID sessionID, StorageNamespaceIdentifier fromStorageNamespaceID, StorageNamespaceIdentifier toStorageNamespaceID)
 {
     ASSERT(!RunLoop::isMain());
 

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.h (248900 => 248901)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.h	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -76,15 +76,15 @@
     StorageManagerSet();
 
     // Message Handlers
-    void connectToLocalStorageArea(IPC::Connection&, PAL::SessionID , uint64_t storageNamespaceID, SecurityOriginData&&, ConnectToStorageAreaCallback&&);
-    void connectToTransientLocalStorageArea(IPC::Connection&, PAL::SessionID , uint64_t storageNamespaceID, SecurityOriginData&&, SecurityOriginData&&, ConnectToStorageAreaCallback&&);
-    void connectToSessionStorageArea(IPC::Connection&, PAL::SessionID, uint64_t storageNamespaceID, SecurityOriginData&&, ConnectToStorageAreaCallback&&);
+    void connectToLocalStorageArea(IPC::Connection&, PAL::SessionID , StorageNamespaceIdentifier, SecurityOriginData&&, ConnectToStorageAreaCallback&&);
+    void connectToTransientLocalStorageArea(IPC::Connection&, PAL::SessionID , StorageNamespaceIdentifier, SecurityOriginData&&, SecurityOriginData&&, ConnectToStorageAreaCallback&&);
+    void connectToSessionStorageArea(IPC::Connection&, PAL::SessionID, StorageNamespaceIdentifier, SecurityOriginData&&, ConnectToStorageAreaCallback&&);
     void disconnectFromStorageArea(IPC::Connection&, StorageAreaIdentifier);
     void getValues(IPC::Connection&, StorageAreaIdentifier, GetValuesCallback&&);
     void setItem(IPC::Connection&, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t storageMapSeed, const String& key, const String& value, const String& urlString);
     void removeItem(IPC::Connection&, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t storageMapSeed, const String& key, const String& urlString);
     void clear(IPC::Connection&, StorageAreaIdentifier, StorageAreaImplIdentifier, uint64_t storageMapSeed, const String& urlString);
-    void cloneSessionStorageNamespace(IPC::Connection&, PAL::SessionID, uint64_t fromStorageNamespaceID, uint64_t toStorageNamespaceID);
+    void cloneSessionStorageNamespace(IPC::Connection&, PAL::SessionID, StorageNamespaceIdentifier fromStorageNamespaceID, StorageNamespaceIdentifier toStorageNamespaceID);
 
     HashMap<PAL::SessionID, std::unique_ptr<StorageManager>> m_storageManagers;
     HashMap<PAL::SessionID, String> m_storageManagerPaths;

Modified: trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.messages.in (248900 => 248901)


--- trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.messages.in	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.messages.in	2019-08-20 16:34:56 UTC (rev 248901)
@@ -21,12 +21,12 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 messages -> StorageManagerSet {
-    ConnectToLocalStorageArea(PAL::SessionID sessionID, uint64_t storageNamespaceID, struct WebCore::SecurityOriginData securityOriginData) -> (Optional<WebKit::StorageAreaIdentifier> storageAreaID) Synchronous WantsConnection
-    ConnectToTransientLocalStorageArea(PAL::SessionID sessionID, uint64_t storageNamespaceID, struct WebCore::SecurityOriginData topLevelSecurityOriginData, struct WebCore::SecurityOriginData securityOriginData) -> (Optional<WebKit::StorageAreaIdentifier> storageAreaID) Synchronous WantsConnection
-    ConnectToSessionStorageArea(PAL::SessionID sessionID, uint64_t storageNamespaceID, struct WebCore::SecurityOriginData securityOriginData) -> (Optional<WebKit::StorageAreaIdentifier> storageAreaID) Synchronous WantsConnection
+    ConnectToLocalStorageArea(PAL::SessionID sessionID, WebKit::StorageNamespaceIdentifier storageNamespaceID, struct WebCore::SecurityOriginData securityOriginData) -> (Optional<WebKit::StorageAreaIdentifier> storageAreaID) Synchronous WantsConnection
+    ConnectToTransientLocalStorageArea(PAL::SessionID sessionID, WebKit::StorageNamespaceIdentifier storageNamespaceID, struct WebCore::SecurityOriginData topLevelSecurityOriginData, struct WebCore::SecurityOriginData securityOriginData) -> (Optional<WebKit::StorageAreaIdentifier> storageAreaID) Synchronous WantsConnection
+    ConnectToSessionStorageArea(PAL::SessionID sessionID, WebKit::StorageNamespaceIdentifier storageNamespaceID, struct WebCore::SecurityOriginData securityOriginData) -> (Optional<WebKit::StorageAreaIdentifier> storageAreaID) Synchronous WantsConnection
     DisconnectFromStorageArea(WebKit::StorageAreaIdentifier storageAreaID) WantsConnection
     GetValues(WebKit::StorageAreaIdentifier storageAreaID) -> (HashMap<String, String> values) Synchronous WantsConnection
-    CloneSessionStorageNamespace(PAL::SessionID sessionID, uint64_t fromStorageNamespaceID, uint64_t toStorageNamespaceID) WantsConnection
+    CloneSessionStorageNamespace(PAL::SessionID sessionID, WebKit::StorageNamespaceIdentifier fromStorageNamespaceID, WebKit::StorageNamespaceIdentifier toStorageNamespaceID) WantsConnection
 
     SetItem(WebKit::StorageAreaIdentifier storageAreaID, WebKit::StorageAreaImplIdentifier storageAreaImplID, uint64_t storageMapSeed, String key, String value, String urlString) WantsConnection
     RemoveItem(WebKit::StorageAreaIdentifier storageAreaID, WebKit::StorageAreaImplIdentifier storageAreaImplID, uint64_t storageMapSeed, String key, String urlString) WantsConnection

Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (248900 => 248901)


--- trunk/Source/WebKit/Scripts/webkit/messages.py	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py	2019-08-20 16:34:56 UTC (rev 248901)
@@ -219,6 +219,7 @@
         'WebKit::LayerHostingContextID',
         'WebKit::StorageAreaIdentifier',
         'WebKit::StorageAreaImplIdentifier',
+        'WebKit::StorageNamespaceIdentifier',
         'WebKit::UserContentControllerIdentifier',
     ])
 

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (248900 => 248901)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2019-08-20 16:34:56 UTC (rev 248901)
@@ -906,6 +906,7 @@
 		463FD4821EB94EC000A2982C /* ProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD4811EB94EAD00A2982C /* ProcessTerminationReason.h */; };
 		4657D88922664A2D005DE823 /* WKOrientationAccessAlert.h in Headers */ = {isa = PBXBuildFile; fileRef = 4657D88722664A19005DE823 /* WKOrientationAccessAlert.h */; };
 		4657D88A22664A2F005DE823 /* WKOrientationAccessAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4657D88822664A1A005DE823 /* WKOrientationAccessAlert.mm */; };
+		465F4E06230B2E95003CEDB7 /* StorageNamespaceIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 465F4E05230B2E7C003CEDB7 /* StorageNamespaceIdentifier.h */; };
 		466BC03C1FA266DA002FA9C1 /* WebSWContextManagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 466BC0391FA266C9002FA9C1 /* WebSWContextManagerConnection.h */; };
 		467E43E82243FF7D00B13924 /* WebProcessDataStoreParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 467E43E72243FF6D00B13924 /* WebProcessDataStoreParameters.h */; };
 		46A2B6091E5676A600C3DEDA /* BackgroundProcessResponsivenessTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 46A2B6071E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.h */; };
@@ -3190,6 +3191,7 @@
 		4657D88822664A1A005DE823 /* WKOrientationAccessAlert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKOrientationAccessAlert.mm; sourceTree = "<group>"; };
 		465F4E02230759D5003CEDB7 /* StorageAreaIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StorageAreaIdentifier.h; sourceTree = "<group>"; };
 		465F4E032307604E003CEDB7 /* StorageAreaImplIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StorageAreaImplIdentifier.h; sourceTree = "<group>"; };
+		465F4E05230B2E7C003CEDB7 /* StorageNamespaceIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StorageNamespaceIdentifier.h; sourceTree = "<group>"; };
 		466BC0381FA266C9002FA9C1 /* WebSWContextManagerConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSWContextManagerConnection.cpp; sourceTree = "<group>"; };
 		466BC0391FA266C9002FA9C1 /* WebSWContextManagerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSWContextManagerConnection.h; sourceTree = "<group>"; };
 		466BC03A1FA266C9002FA9C1 /* WebSWContextManagerConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSWContextManagerConnection.messages.in; sourceTree = "<group>"; };
@@ -5158,6 +5160,7 @@
 				1ACECD2217162DB1001FC9EF /* StorageAreaMap.cpp */,
 				1ACECD2317162DB1001FC9EF /* StorageAreaMap.h */,
 				1A334DEA16DE8B68006A8E38 /* StorageAreaMap.messages.in */,
+				465F4E05230B2E7C003CEDB7 /* StorageNamespaceIdentifier.h */,
 				1A17635416B1D5D000D88FD6 /* StorageNamespaceImpl.cpp */,
 				1A17635516B1D5D000D88FD6 /* StorageNamespaceImpl.h */,
 				1A52C0F51A38CDC70016160A /* WebStorageNamespaceProvider.cpp */,
@@ -9683,6 +9686,7 @@
 				93B2614D227D149E00B97A76 /* StorageManager.h in Headers */,
 				936B059823039097002FC06B /* StorageManagerSet.h in Headers */,
 				9368EEDF2303A9ED00BDB11A /* StorageManagerSetMessages.h in Headers */,
+				465F4E06230B2E95003CEDB7 /* StorageNamespaceIdentifier.h in Headers */,
 				1AE00D6C18327C1200087DD7 /* StringReference.h in Headers */,
 				296BD85D15019BC30071F424 /* StringUtilities.h in Headers */,
 				57FD318622B3516C008D0E8B /* SubFrameSOAuthorizationSession.h in Headers */,

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp	2019-08-20 16:34:56 UTC (rev 248901)
@@ -354,7 +354,7 @@
 
     PageGroup::pageGroup(pageGroup->identifier())->enableLegacyPrivateBrowsingForTesting(enabled);
 
-    auto webStorageNameSpaceProvider = WebStorageNamespaceProvider::getOrCreate(pageGroup->pageGroupID());
+    auto webStorageNameSpaceProvider = WebStorageNamespaceProvider::getOrCreate(*pageGroup);
     webStorageNameSpaceProvider->enableLegacyPrivateBrowsingForTesting(enabled);
 }
 

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2019-08-20 16:34:56 UTC (rev 248901)
@@ -484,7 +484,7 @@
     pageConfiguration.applicationCacheStorage = &WebProcess::singleton().applicationCacheStorage();
     pageConfiguration.databaseProvider = WebDatabaseProvider::getOrCreate(m_pageGroup->pageGroupID());
     pageConfiguration.pluginInfoProvider = &WebPluginInfoProvider::singleton();
-    pageConfiguration.storageNamespaceProvider = WebStorageNamespaceProvider::getOrCreate(m_pageGroup->pageGroupID());
+    pageConfiguration.storageNamespaceProvider = WebStorageNamespaceProvider::getOrCreate(*m_pageGroup);
     pageConfiguration.userContentProvider = m_userContentController.ptr();
     pageConfiguration.visitedLinkStore = VisitedLinkTableController::getOrCreate(parameters.visitedLinkTableID);
 

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -47,6 +47,7 @@
 #include "SandboxExtension.h"
 #include "ShareSheetCallbackID.h"
 #include "SharedMemory.h"
+#include "StorageNamespaceIdentifier.h"
 #include "UserData.h"
 #include "WebBackForwardListProxy.h"
 #include "WebPageMessages.h"
@@ -291,6 +292,7 @@
 
     WebCore::Page* corePage() const { return m_page.get(); }
     WebCore::PageIdentifier pageID() const { return m_pageID; }
+    StorageNamespaceIdentifier sessionStorageNamespaceIdentifier() const { return makeObjectIdentifier<StorageNamespaceIdentifierType>(m_pageID.toUInt64()); }
     PAL::SessionID sessionID() const { return m_page->sessionID(); }
     bool usesEphemeralSession() const { return m_page->usesEphemeralSession(); }
 

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPageGroupProxy.h (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPageGroupProxy.h	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPageGroupProxy.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -26,6 +26,7 @@
 #pragma once
 
 #include "APIObject.h"
+#include "StorageNamespaceIdentifier.h"
 #include "WebPageGroupData.h"
 #include <wtf/Ref.h>
 
@@ -44,6 +45,7 @@
 
     const String& identifier() const { return m_data.identifier; }
     uint64_t pageGroupID() const { return m_data.pageGroupID; }
+    StorageNamespaceIdentifier localStorageNamespaceIdentifier() const { return makeObjectIdentifier<StorageNamespaceIdentifierType>(pageGroupID()); }
     WebCore::PageGroup* corePageGroup() const { return m_pageGroup; }
 
     WebUserContentController& userContentController();

Modified: trunk/Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/WebStorage/StorageAreaMap.cpp	2019-08-20 16:34:56 UTC (rev 248901)
@@ -283,7 +283,7 @@
 {
     // Namespace IDs for session storage namespaces are equivalent to web page IDs
     // so we can get the right page here.
-    WebPage* webPage = WebProcess::singleton().webPage(makeObjectIdentifier<PageIdentifierType>(m_storageNamespace->storageNamespaceID()));
+    WebPage* webPage = WebProcess::singleton().webPage(m_storageNamespace->sessionStoragePageID());
     if (!webPage)
         return;
 
@@ -318,7 +318,7 @@
     Vector<RefPtr<Frame>> frames;
 
     // Namespace IDs for local storage namespaces are equivalent to web page group IDs.
-    PageGroup& pageGroup = *WebProcess::singleton().webPageGroup(m_storageNamespace->storageNamespaceID())->corePageGroup();
+    PageGroup& pageGroup = *WebProcess::singleton().webPageGroup(m_storageNamespace->pageGroupID())->corePageGroup();
     const HashSet<Page*>& pages = pageGroup.pages();
     for (HashSet<Page*>::const_iterator it = pages.begin(), end = pages.end(); it != end; ++it) {
         for (Frame* frame = &(*it)->mainFrame(); frame; frame = frame->tree().traverseNext()) {

Copied: trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceIdentifier.h (from rev 248900, trunk/Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h) (0 => 248901)


--- trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceIdentifier.h	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceIdentifier.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebKit {
+
+enum StorageNamespaceIdentifierType { };
+using StorageNamespaceIdentifier = ObjectIdentifier<StorageNamespaceIdentifierType>;
+
+}

Modified: trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.cpp (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.cpp	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.cpp	2019-08-20 16:34:56 UTC (rev 248901)
@@ -42,22 +42,22 @@
 namespace WebKit {
 using namespace WebCore;
 
-Ref<StorageNamespaceImpl> StorageNamespaceImpl::createSessionStorageNamespace(uint64_t identifier, unsigned quotaInBytes, PAL::SessionID sessionID)
+Ref<StorageNamespaceImpl> StorageNamespaceImpl::createSessionStorageNamespace(Identifier identifier, unsigned quotaInBytes, PAL::SessionID sessionID)
 {
     return adoptRef(*new StorageNamespaceImpl(StorageType::Session, identifier, nullptr, quotaInBytes, sessionID));
 }
 
-Ref<StorageNamespaceImpl> StorageNamespaceImpl::createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes, PAL::SessionID sessionID)
+Ref<StorageNamespaceImpl> StorageNamespaceImpl::createLocalStorageNamespace(Identifier identifier, unsigned quotaInBytes, PAL::SessionID sessionID)
 {
     return adoptRef(*new StorageNamespaceImpl(StorageType::Local, identifier, nullptr, quotaInBytes, sessionID));
 }
 
-Ref<StorageNamespaceImpl> StorageNamespaceImpl::createTransientLocalStorageNamespace(uint64_t identifier, WebCore::SecurityOrigin& topLevelOrigin, uint64_t quotaInBytes, PAL::SessionID sessionID)
+Ref<StorageNamespaceImpl> StorageNamespaceImpl::createTransientLocalStorageNamespace(Identifier identifier, WebCore::SecurityOrigin& topLevelOrigin, uint64_t quotaInBytes, PAL::SessionID sessionID)
 {
     return adoptRef(*new StorageNamespaceImpl(StorageType::TransientLocal, identifier, &topLevelOrigin, quotaInBytes, sessionID));
 }
 
-StorageNamespaceImpl::StorageNamespaceImpl(WebCore::StorageType storageType, uint64_t storageNamespaceID, WebCore::SecurityOrigin* topLevelOrigin, unsigned quotaInBytes, PAL::SessionID sessionID)
+StorageNamespaceImpl::StorageNamespaceImpl(WebCore::StorageType storageType, Identifier storageNamespaceID, WebCore::SecurityOrigin* topLevelOrigin, unsigned quotaInBytes, PAL::SessionID sessionID)
     : m_storageType(storageType)
     , m_storageNamespaceID(storageNamespaceID)
     , m_topLevelOrigin(topLevelOrigin)
@@ -93,11 +93,12 @@
 Ref<StorageNamespace> StorageNamespaceImpl::copy(Page* newPage)
 {
     ASSERT(m_storageNamespaceID);
+    ASSERT(m_storageType == StorageType::Session);
 
     if (auto networkProcessConnection = WebProcess::singleton().existingNetworkProcessConnection())
-        networkProcessConnection->connection().send(Messages::StorageManagerSet::CloneSessionStorageNamespace(newPage->sessionID(), m_storageNamespaceID, WebPage::fromCorePage(newPage)->pageID().toUInt64()), 0);
+        networkProcessConnection->connection().send(Messages::StorageManagerSet::CloneSessionStorageNamespace(newPage->sessionID(), m_storageNamespaceID, WebPage::fromCorePage(newPage)->sessionStorageNamespaceIdentifier()), 0);
 
-    return adoptRef(*new StorageNamespaceImpl(m_storageType, WebPage::fromCorePage(newPage)->pageID().toUInt64(), m_topLevelOrigin.get(), m_quotaInBytes, newPage->sessionID()));
+    return adoptRef(*new StorageNamespaceImpl(m_storageType, WebPage::fromCorePage(newPage)->sessionStorageNamespaceIdentifier(), m_topLevelOrigin.get(), m_quotaInBytes, newPage->sessionID()));
 }
 
 void StorageNamespaceImpl::setSessionIDForTesting(PAL::SessionID sessionID)
@@ -107,4 +108,16 @@
         storageAreaMap->disconnect();
 }
 
+PageIdentifier StorageNamespaceImpl::sessionStoragePageID() const
+{
+    ASSERT(m_storageType == StorageType::Session);
+    return makeObjectIdentifier<PageIdentifierType>(m_storageNamespaceID.toUInt64());
+}
+
+uint64_t StorageNamespaceImpl::pageGroupID() const
+{
+    ASSERT(m_storageType == StorageType::Local || m_storageType == StorageType::TransientLocal);
+    return m_storageNamespaceID.toUInt64();
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/WebStorage/StorageNamespaceImpl.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include "StorageNamespaceIdentifier.h"
 #include <WebCore/SecurityOriginData.h>
 #include <WebCore/SecurityOriginHash.h>
 #include <WebCore/StorageArea.h>
@@ -40,14 +41,18 @@
 
 class StorageNamespaceImpl : public WebCore::StorageNamespace {
 public:
-    static Ref<StorageNamespaceImpl> createSessionStorageNamespace(uint64_t identifier, unsigned quotaInBytes, PAL::SessionID);
-    static Ref<StorageNamespaceImpl> createLocalStorageNamespace(uint64_t identifier, unsigned quotaInBytes, PAL::SessionID);
-    static Ref<StorageNamespaceImpl> createTransientLocalStorageNamespace(uint64_t identifier, WebCore::SecurityOrigin& topLevelOrigin, uint64_t quotaInBytes, PAL::SessionID);
+    using Identifier = StorageNamespaceIdentifier;
 
+    static Ref<StorageNamespaceImpl> createSessionStorageNamespace(Identifier, unsigned quotaInBytes, PAL::SessionID);
+    static Ref<StorageNamespaceImpl> createLocalStorageNamespace(Identifier, unsigned quotaInBytes, PAL::SessionID);
+    static Ref<StorageNamespaceImpl> createTransientLocalStorageNamespace(Identifier, WebCore::SecurityOrigin& topLevelOrigin, uint64_t quotaInBytes, PAL::SessionID);
+
     virtual ~StorageNamespaceImpl();
 
     WebCore::StorageType storageType() const { return m_storageType; }
-    uint64_t storageNamespaceID() const { return m_storageNamespaceID; }
+    Identifier storageNamespaceID() const { return m_storageNamespaceID; }
+    WebCore::PageIdentifier sessionStoragePageID() const;
+    uint64_t pageGroupID() const;
     WebCore::SecurityOrigin* topLevelOrigin() const { return m_topLevelOrigin.get(); }
     unsigned quotaInBytes() const { return m_quotaInBytes; }
     PAL::SessionID sessionID() const override { return m_sessionID; }
@@ -57,13 +62,15 @@
     void setSessionIDForTesting(PAL::SessionID) override;
 
 private:
-    explicit StorageNamespaceImpl(WebCore::StorageType, uint64_t storageNamespaceID, WebCore::SecurityOrigin* topLevelOrigin, unsigned quotaInBytes, PAL::SessionID);
+    StorageNamespaceImpl(WebCore::StorageType, Identifier, WebCore::SecurityOrigin* topLevelOrigin, unsigned quotaInBytes, PAL::SessionID);
 
     Ref<WebCore::StorageArea> storageArea(const WebCore::SecurityOriginData&) override;
+
+    // FIXME: This is only valid for session storage and should probably be moved to a subclass.
     Ref<WebCore::StorageNamespace> copy(WebCore::Page*) override;
 
     const WebCore::StorageType m_storageType;
-    const uint64_t m_storageNamespaceID;
+    const Identifier m_storageNamespaceID;
 
     // Only used for transient local storage namespaces.
     const RefPtr<WebCore::SecurityOrigin> m_topLevelOrigin;

Modified: trunk/Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.cpp (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.cpp	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.cpp	2019-08-20 16:34:56 UTC (rev 248901)
@@ -28,6 +28,7 @@
 
 #include "StorageNamespaceImpl.h"
 #include "WebPage.h"
+#include "WebPageGroupProxy.h"
 #include <wtf/HashMap.h>
 #include <wtf/NeverDestroyed.h>
 
@@ -34,50 +35,48 @@
 namespace WebKit {
 using namespace WebCore;
 
-static HashMap<uint64_t, WebStorageNamespaceProvider*>& storageNamespaceProviders()
+static HashMap<StorageNamespaceIdentifier, WebStorageNamespaceProvider*>& storageNamespaceProviders()
 {
-    static NeverDestroyed<HashMap<uint64_t, WebStorageNamespaceProvider*>> storageNamespaceProviders;
+    static NeverDestroyed<HashMap<StorageNamespaceIdentifier, WebStorageNamespaceProvider*>> storageNamespaceProviders;
 
     return storageNamespaceProviders;
 }
 
-Ref<WebStorageNamespaceProvider> WebStorageNamespaceProvider::getOrCreate(uint64_t identifier)
+Ref<WebStorageNamespaceProvider> WebStorageNamespaceProvider::getOrCreate(WebPageGroupProxy& pageGroup)
 {
-    auto& slot = storageNamespaceProviders().add(identifier, nullptr).iterator->value;
-    if (slot)
-        return *slot;
-
-    auto storageNamespaceProvider = adoptRef(*new WebStorageNamespaceProvider(identifier));
-    slot = storageNamespaceProvider.ptr();
-
-    return storageNamespaceProvider;
+    RefPtr<WebStorageNamespaceProvider> storageNamespaceProvider;
+    auto* result = storageNamespaceProviders().ensure(pageGroup.localStorageNamespaceIdentifier(), [&]() {
+        storageNamespaceProvider = adoptRef(*new WebStorageNamespaceProvider(pageGroup.localStorageNamespaceIdentifier()));
+        return storageNamespaceProvider.get();
+    }).iterator->value;
+    return *result;
 }
 
-WebStorageNamespaceProvider::WebStorageNamespaceProvider(uint64_t identifier)
-    : m_identifier(identifier)
+WebStorageNamespaceProvider::WebStorageNamespaceProvider(StorageNamespaceIdentifier localStorageNamespaceIdentifier)
+    : m_localStorageNamespaceIdentifier(localStorageNamespaceIdentifier)
 {
 }
 
 WebStorageNamespaceProvider::~WebStorageNamespaceProvider()
 {
-    ASSERT(storageNamespaceProviders().contains(m_identifier));
+    ASSERT(storageNamespaceProviders().contains(m_localStorageNamespaceIdentifier));
 
-    storageNamespaceProviders().remove(m_identifier);
+    storageNamespaceProviders().remove(m_localStorageNamespaceIdentifier);
 }
 
 Ref<WebCore::StorageNamespace> WebStorageNamespaceProvider::createSessionStorageNamespace(Page& page, unsigned quota)
 {
-    return StorageNamespaceImpl::createSessionStorageNamespace(WebPage::fromCorePage(&page)->pageID().toUInt64(), quota, page.sessionID());
+    return StorageNamespaceImpl::createSessionStorageNamespace(WebPage::fromCorePage(&page)->sessionStorageNamespaceIdentifier(), quota, page.sessionID());
 }
 
 Ref<WebCore::StorageNamespace> WebStorageNamespaceProvider::createLocalStorageNamespace(unsigned quota, PAL::SessionID sessionID)
 {
-    return StorageNamespaceImpl::createLocalStorageNamespace(m_identifier, quota, sessionID);
+    return StorageNamespaceImpl::createLocalStorageNamespace(m_localStorageNamespaceIdentifier, quota, sessionID);
 }
 
 Ref<WebCore::StorageNamespace> WebStorageNamespaceProvider::createTransientLocalStorageNamespace(WebCore::SecurityOrigin& topLevelOrigin, unsigned quota, PAL::SessionID sessionID)
 {
-    return StorageNamespaceImpl::createTransientLocalStorageNamespace(m_identifier, topLevelOrigin, quota, sessionID);
+    return StorageNamespaceImpl::createTransientLocalStorageNamespace(m_localStorageNamespaceIdentifier, topLevelOrigin, quota, sessionID);
 }
 
 }

Modified: trunk/Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h (248900 => 248901)


--- trunk/Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h	2019-08-20 16:10:43 UTC (rev 248900)
+++ trunk/Source/WebKit/WebProcess/WebStorage/WebStorageNamespaceProvider.h	2019-08-20 16:34:56 UTC (rev 248901)
@@ -25,23 +25,26 @@
 
 #pragma once
 
+#include "StorageNamespaceIdentifier.h"
 #include <WebCore/StorageNamespaceProvider.h>
 
 namespace WebKit {
 
+class WebPageGroupProxy;
+
 class WebStorageNamespaceProvider final : public WebCore::StorageNamespaceProvider {
 public:
-    static Ref<WebStorageNamespaceProvider> getOrCreate(uint64_t identifier);
+    static Ref<WebStorageNamespaceProvider> getOrCreate(WebPageGroupProxy&);
     virtual ~WebStorageNamespaceProvider();
 
 private:
-    explicit WebStorageNamespaceProvider(uint64_t identifier);
+    explicit WebStorageNamespaceProvider(StorageNamespaceIdentifier localStorageIdentifier);
 
     Ref<WebCore::StorageNamespace> createSessionStorageNamespace(WebCore::Page&, unsigned quota) override;
     Ref<WebCore::StorageNamespace> createLocalStorageNamespace(unsigned quota, PAL::SessionID) override;
     Ref<WebCore::StorageNamespace> createTransientLocalStorageNamespace(WebCore::SecurityOrigin&, unsigned quota, PAL::SessionID) override;
 
-    const uint64_t m_identifier;
+    const StorageNamespaceIdentifier m_localStorageNamespaceIdentifier;
 };
 
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to