IDBTransactionInfo.cpp [plain text]
#include "config.h"
#include "IDBTransactionInfo.h"
#if ENABLE(INDEXED_DATABASE)
#include "IDBTransaction.h"
namespace WebCore {
IDBTransactionInfo::IDBTransactionInfo()
{
}
IDBTransactionInfo::IDBTransactionInfo(const IDBResourceIdentifier& identifier)
: m_identifier(identifier)
{
}
IDBTransactionInfo IDBTransactionInfo::clientTransaction(const IDBClient::IDBConnectionProxy& connectionProxy, const Vector<String>& objectStores, IndexedDB::TransactionMode mode)
{
IDBTransactionInfo result((IDBResourceIdentifier(connectionProxy)));
result.m_mode = mode;
result.m_objectStores = objectStores;
return result;
}
IDBTransactionInfo IDBTransactionInfo::versionChange(const IDBServer::IDBConnectionToClient& connection, const IDBDatabaseInfo& originalDatabaseInfo, uint64_t newVersion)
{
IDBTransactionInfo result((IDBResourceIdentifier(connection)));
result.m_mode = IndexedDB::TransactionMode::VersionChange;
result.m_newVersion = newVersion;
result.m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(originalDatabaseInfo);
return result;
}
IDBTransactionInfo::IDBTransactionInfo(const IDBTransactionInfo& info)
: m_identifier(info.identifier())
, m_mode(info.m_mode)
, m_newVersion(info.m_newVersion)
, m_objectStores(info.m_objectStores)
{
if (info.m_originalDatabaseInfo)
m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(*info.m_originalDatabaseInfo);
}
IDBTransactionInfo::IDBTransactionInfo(const IDBTransactionInfo& that, IsolatedCopyTag)
{
isolatedCopy(that, *this);
}
IDBTransactionInfo IDBTransactionInfo::isolatedCopy() const
{
return { *this, IsolatedCopy };
}
void IDBTransactionInfo::isolatedCopy(const IDBTransactionInfo& source, IDBTransactionInfo& destination)
{
destination.m_identifier = source.m_identifier.isolatedCopy();
destination.m_mode = source.m_mode;
destination.m_newVersion = source.m_newVersion;
destination.m_objectStores.reserveCapacity(source.m_objectStores.size());
for (auto& objectStore : source.m_objectStores)
destination.m_objectStores.uncheckedAppend(objectStore.isolatedCopy());
if (source.m_originalDatabaseInfo)
destination.m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(*source.m_originalDatabaseInfo, IDBDatabaseInfo::IsolatedCopy);
}
#if !LOG_DISABLED
String IDBTransactionInfo::loggingString() const
{
String modeString;
switch (m_mode) {
case IndexedDB::TransactionMode::ReadOnly:
modeString = IDBTransaction::modeReadOnly();
break;
case IndexedDB::TransactionMode::ReadWrite:
modeString = IDBTransaction::modeReadWrite();
break;
case IndexedDB::TransactionMode::VersionChange:
modeString = IDBTransaction::modeVersionChange();
break;
default:
ASSERT_NOT_REACHED();
}
return makeString("Transaction: ", m_identifier.loggingString(), " mode ", modeString, " newVersion ", String::number(m_newVersion));
}
#endif
}
#endif // ENABLE(INDEXED_DATABASE)