SessionStorageNamespace.cpp [plain text]
#include "config.h"
#include "SessionStorageNamespace.h"
#include "StorageArea.h"
namespace WebKit {
using namespace WebCore;
SessionStorageNamespace::SessionStorageNamespace(unsigned quotaInBytes)
: m_quotaInBytes(quotaInBytes)
{
ASSERT(!RunLoop::isMain());
}
SessionStorageNamespace::~SessionStorageNamespace()
{
ASSERT(!RunLoop::isMain());
}
StorageArea& SessionStorageNamespace::getOrCreateStorageArea(SecurityOriginData&& securityOrigin, Ref<WorkQueue>&& workQueue)
{
ASSERT(!RunLoop::isMain());
return *m_storageAreaMap.ensure(securityOrigin, [&]() mutable {
return makeUnique<StorageArea>(nullptr, WTFMove(securityOrigin), m_quotaInBytes, WTFMove(workQueue));
}).iterator->value.get();
}
void SessionStorageNamespace::cloneTo(SessionStorageNamespace& newSessionStorageNamespace)
{
ASSERT(!RunLoop::isMain());
ASSERT_UNUSED(newSessionStorageNamespace, newSessionStorageNamespace.isEmpty());
for (auto& pair : m_storageAreaMap)
newSessionStorageNamespace.m_storageAreaMap.add(pair.key, pair.value->clone());
}
Vector<SecurityOriginData> SessionStorageNamespace::origins() const
{
ASSERT(!RunLoop::isMain());
Vector<SecurityOriginData> origins;
for (const auto& storageArea : m_storageAreaMap.values()) {
if (!storageArea->items().isEmpty())
origins.append(storageArea->securityOrigin());
}
return origins;
}
void SessionStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin)
{
ASSERT(!RunLoop::isMain());
auto originAndStorageArea = m_storageAreaMap.find(securityOrigin);
if (originAndStorageArea != m_storageAreaMap.end())
originAndStorageArea->value->clear();
}
void SessionStorageNamespace::clearAllStorageAreas()
{
ASSERT(!RunLoop::isMain());
for (auto& storageArea : m_storageAreaMap.values())
storageArea->clear();
}
Vector<StorageAreaIdentifier> SessionStorageNamespace::storageAreaIdentifiers() const
{
Vector<StorageAreaIdentifier> identifiers;
for (auto& storageArea : m_storageAreaMap.values())
identifiers.append(storageArea->identifier());
return identifiers;
}
}