WebStorageNamespaceProvider.cpp [plain text]
#include "config.h"
#include "WebStorageNamespaceProvider.h"
#include "StorageNamespaceImpl.h"
#include "WebPage.h"
#include <wtf/HashMap.h>
#include <wtf/NeverDestroyed.h>
using namespace WebCore;
namespace WebKit {
static HashMap<uint64_t, WebStorageNamespaceProvider*>& storageNamespaceProviders()
{
static NeverDestroyed<HashMap<uint64_t, WebStorageNamespaceProvider*>> storageNamespaceProviders;
return storageNamespaceProviders;
}
RefPtr<WebStorageNamespaceProvider> WebStorageNamespaceProvider::getOrCreate(uint64_t identifier)
{
auto& slot = storageNamespaceProviders().add(identifier, nullptr).iterator->value;
if (slot)
return slot;
RefPtr<WebStorageNamespaceProvider> storageNamespaceProvider = adoptRef(new WebStorageNamespaceProvider(identifier));
slot = storageNamespaceProvider.get();
return storageNamespaceProvider;
}
WebStorageNamespaceProvider::WebStorageNamespaceProvider(uint64_t identifier)
: m_identifier(identifier)
{
}
WebStorageNamespaceProvider::~WebStorageNamespaceProvider()
{
ASSERT(storageNamespaceProviders().contains(m_identifier));
storageNamespaceProviders().remove(m_identifier);
}
RefPtr<WebCore::StorageNamespace> WebStorageNamespaceProvider::createSessionStorageNamespace(Page& page, unsigned quota)
{
return StorageNamespaceImpl::createSessionStorageNamespace(WebPage::fromCorePage(&page)->pageID(), quota);
}
RefPtr<WebCore::StorageNamespace> WebStorageNamespaceProvider::createEphemeralLocalStorageNamespace(Page& page, unsigned quota)
{
return StorageNamespaceImpl::createEphemeralLocalStorageNamespace(WebPage::fromCorePage(&page)->pageID(), quota);
}
RefPtr<WebCore::StorageNamespace> WebStorageNamespaceProvider::createLocalStorageNamespace(unsigned quota)
{
return StorageNamespaceImpl::createLocalStorageNamespace(m_identifier, quota);
}
RefPtr<WebCore::StorageNamespace> WebStorageNamespaceProvider::createTransientLocalStorageNamespace(WebCore::SecurityOrigin& topLevelOrigin, unsigned quota)
{
return StorageNamespaceImpl::createTransientLocalStorageNamespace(m_identifier, topLevelOrigin, quota);
}
}