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;
};
}