#include "config.h"
#include "QuotaTracker.h"
#include "PlatformSupport.h"
#if ENABLE(SQL_DATABASE)
#include <wtf/StdLibExtras.h>
namespace WebCore {
QuotaTracker& QuotaTracker::instance()
{
AtomicallyInitializedStatic(QuotaTracker&, tracker = *new QuotaTracker);
return tracker;
}
void QuotaTracker::getDatabaseSizeAndSpaceAvailableToOrigin(
const String& originIdentifier, const String& databaseName,
unsigned long long* databaseSize, unsigned long long* spaceAvailable)
{
{
MutexLocker lockData(m_dataGuard);
ASSERT(m_databaseSizes.contains(originIdentifier));
HashMap<String, SizeMap>::const_iterator it = m_databaseSizes.find(originIdentifier);
ASSERT(it->second.contains(databaseName));
*databaseSize = it->second.get(databaseName);
if (m_spaceAvailableToOrigins.contains(originIdentifier)) {
*spaceAvailable = m_spaceAvailableToOrigins.get(originIdentifier);
return;
}
}
*spaceAvailable = PlatformSupport::databaseGetSpaceAvailableForOrigin(originIdentifier);
}
void QuotaTracker::updateDatabaseSize(
const String& originIdentifier, const String& databaseName,
unsigned long long databaseSize)
{
MutexLocker lockData(m_dataGuard);
HashMap<String, SizeMap>::iterator it = m_databaseSizes.add(originIdentifier, SizeMap()).iterator;
it->second.set(databaseName, databaseSize);
}
void QuotaTracker::updateSpaceAvailableToOrigin(const String& originIdentifier, unsigned long long spaceAvailable)
{
MutexLocker lockData(m_dataGuard);
m_spaceAvailableToOrigins.set(originIdentifier, spaceAvailable);
}
void QuotaTracker::resetSpaceAvailableToOrigin(const String& originIdentifier)
{
MutexLocker lockData(m_dataGuard);
m_spaceAvailableToOrigins.remove(originIdentifier);
}
}
#endif // ENABLE(SQL_DATABASE)