/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_dom_quota_persistencetype_h__ #define mozilla_dom_quota_persistencetype_h__ #include "mozilla/dom/quota/QuotaCommon.h" #include "mozilla/dom/StorageTypeBinding.h" BEGIN_QUOTA_NAMESPACE enum PersistenceType { PERSISTENCE_TYPE_PERSISTENT = 0, PERSISTENCE_TYPE_TEMPORARY, PERSISTENCE_TYPE_DEFAULT, // Only needed for IPC serialization helper, should never be used in code. PERSISTENCE_TYPE_INVALID }; static const PersistenceType kBestEffortPersistenceTypes[] = { PERSISTENCE_TYPE_TEMPORARY, PERSISTENCE_TYPE_DEFAULT}; static const PersistenceType kAllPersistenceTypes[] = { PERSISTENCE_TYPE_PERSISTENT, PERSISTENCE_TYPE_TEMPORARY, PERSISTENCE_TYPE_DEFAULT}; inline void PersistenceTypeToText(PersistenceType aPersistenceType, nsACString& aText) { switch (aPersistenceType) { case PERSISTENCE_TYPE_PERSISTENT: aText.AssignLiteral("persistent"); return; case PERSISTENCE_TYPE_TEMPORARY: aText.AssignLiteral("temporary"); return; case PERSISTENCE_TYPE_DEFAULT: aText.AssignLiteral("default"); return; case PERSISTENCE_TYPE_INVALID: default: MOZ_CRASH("Bad persistence type value!"); } } class PersistenceTypeString : public nsCString { public: explicit PersistenceTypeString(PersistenceType aPersistenceType) { PersistenceTypeToText(aPersistenceType, *this); } }; inline PersistenceType PersistenceTypeFromText(const nsACString& aText) { if (aText.EqualsLiteral("persistent")) { return PERSISTENCE_TYPE_PERSISTENT; } if (aText.EqualsLiteral("temporary")) { return PERSISTENCE_TYPE_TEMPORARY; } if (aText.EqualsLiteral("default")) { return PERSISTENCE_TYPE_DEFAULT; } MOZ_CRASH("Should never get here!"); } inline nsresult PersistenceTypeFromInt32(int32_t aInt, PersistenceType& aPersistenceType) { static_assert( PERSISTENCE_TYPE_PERSISTENT == 0 && PERSISTENCE_TYPE_TEMPORARY == 1 && PERSISTENCE_TYPE_DEFAULT == 2 && PERSISTENCE_TYPE_INVALID == 3, "Incorrect enum values!"); if (aInt < PERSISTENCE_TYPE_PERSISTENT || aInt > PERSISTENCE_TYPE_DEFAULT) { return NS_ERROR_FAILURE; } aPersistenceType = static_cast(aInt); return NS_OK; } inline nsresult NullablePersistenceTypeFromText( const nsACString& aText, Nullable* aPersistenceType) { if (aText.IsVoid()) { *aPersistenceType = Nullable(); return NS_OK; } if (aText.EqualsLiteral("persistent")) { *aPersistenceType = Nullable(PERSISTENCE_TYPE_PERSISTENT); return NS_OK; } if (aText.EqualsLiteral("temporary")) { *aPersistenceType = Nullable(PERSISTENCE_TYPE_TEMPORARY); return NS_OK; } if (aText.EqualsLiteral("default")) { *aPersistenceType = Nullable(PERSISTENCE_TYPE_DEFAULT); return NS_OK; } return NS_ERROR_FAILURE; } inline mozilla::dom::StorageType PersistenceTypeToStorage( PersistenceType aPersistenceType) { return mozilla::dom::StorageType(static_cast(aPersistenceType)); } inline PersistenceType PersistenceTypeFromStorage( const Optional& aStorage) { if (aStorage.WasPassed()) { return PersistenceType(static_cast(aStorage.Value())); } return PERSISTENCE_TYPE_DEFAULT; } inline PersistenceType ComplementaryPersistenceType( PersistenceType aPersistenceType) { MOZ_ASSERT(aPersistenceType == PERSISTENCE_TYPE_DEFAULT || aPersistenceType == PERSISTENCE_TYPE_TEMPORARY); if (aPersistenceType == PERSISTENCE_TYPE_DEFAULT) { return PERSISTENCE_TYPE_TEMPORARY; } return PERSISTENCE_TYPE_DEFAULT; } END_QUOTA_NAMESPACE #endif // mozilla_dom_quota_persistencetype_h__