TransientLocalStorageNamespace.cpp [plain text]
#include "config.h"
#include "TransientLocalStorageNamespace.h"
#include "StorageArea.h"
#include "StorageManager.h"
namespace WebKit {
using namespace WebCore;
TransientLocalStorageNamespace::TransientLocalStorageNamespace()
: m_quotaInBytes(StorageManager::localStorageDatabaseQuotaInBytes)
{
ASSERT(!RunLoop::isMain());
}
TransientLocalStorageNamespace::~TransientLocalStorageNamespace()
{
ASSERT(!RunLoop::isMain());
}
StorageArea& TransientLocalStorageNamespace::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();
}
Vector<SecurityOriginData> TransientLocalStorageNamespace::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 TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin)
{
ASSERT(!RunLoop::isMain());
auto originAndStorageArea = m_storageAreaMap.find(securityOrigin);
if (originAndStorageArea != m_storageAreaMap.end())
originAndStorageArea->value->clear();
}
void TransientLocalStorageNamespace::clearAllStorageAreas()
{
ASSERT(!RunLoop::isMain());
for (auto& storageArea : m_storageAreaMap.values())
storageArea->clear();
}
Vector<StorageAreaIdentifier> TransientLocalStorageNamespace::storageAreaIdentifiers() const
{
Vector<StorageAreaIdentifier> identifiers;
for (auto& storageArea : m_storageAreaMap.values())
identifiers.append(storageArea->identifier());
return identifiers;
}
}