InitializationTypes.h (3431B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef DOM_QUOTA_INITIALIZATIONTYPES_H_ 8 #define DOM_QUOTA_INITIALIZATIONTYPES_H_ 9 10 #include "mozilla/TypedEnumBits.h" 11 #include "mozilla/dom/quota/FirstInitializationAttempts.h" 12 #include "nsLiteralString.h" 13 #include "nsStringFwd.h" 14 #include "nsTHashMap.h" 15 16 namespace mozilla { 17 struct CreateIfNonExistent; 18 } 19 20 namespace mozilla::dom::quota { 21 22 enum class Initialization { 23 None = 0, 24 Storage = 1 << 0, 25 TemporaryStorage = 1 << 1, 26 DefaultRepository = 1 << 2, 27 TemporaryRepository = 1 << 3, 28 UpgradeStorageFrom0_0To1_0 = 1 << 4, 29 UpgradeStorageFrom1_0To2_0 = 1 << 5, 30 UpgradeStorageFrom2_0To2_1 = 1 << 6, 31 UpgradeStorageFrom2_1To2_2 = 1 << 7, 32 UpgradeStorageFrom2_2To2_3 = 1 << 8, 33 UpgradeFromIndexedDBDirectory = 1 << 9, 34 UpgradeFromPersistentStorageDirectory = 1 << 10, 35 PersistentRepository = 1 << 11, 36 }; 37 38 enum class GroupInitialization { 39 None = 0, 40 PersistentGroup = 1 << 0, 41 TemporaryGroup = 1 << 1, 42 }; 43 44 enum class OriginInitialization { 45 None = 0, 46 PersistentOrigin = 1 << 0, 47 TemporaryOrigin = 1 << 1, 48 }; 49 50 MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(Initialization) 51 MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(GroupInitialization) 52 MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(OriginInitialization) 53 54 class StringGenerator final { 55 public: 56 // TODO: Use constexpr here once bug 1594094 is addressed. 57 static nsLiteralCString GetString(Initialization aInitialization); 58 59 // TODO: Use constexpr here once bug 1594094 is addressed. 60 static nsLiteralCString GetString(GroupInitialization aGroupInitialization); 61 62 // TODO: Use constexpr here once bug 1594094 is addressed. 63 static nsLiteralCString GetString(OriginInitialization aOriginInitialization); 64 }; 65 66 using OriginInitializationInfo = 67 FirstInitializationAttempts<OriginInitialization, StringGenerator>; 68 69 using GroupInitializationInfo = 70 FirstInitializationAttempts<GroupInitialization, StringGenerator>; 71 72 class InitializationInfo 73 : public FirstInitializationAttempts<Initialization, StringGenerator> { 74 nsTHashMap<nsCStringHashKey, GroupInitializationInfo> 75 mGroupInitializationInfos; 76 nsTHashMap<nsCStringHashKey, OriginInitializationInfo> 77 mOriginInitializationInfos; 78 79 public: 80 GroupInitializationInfo& MutableGroupInitializationInfoRef( 81 const nsACString& aGroup) { 82 return *mGroupInitializationInfos.Lookup(aGroup); 83 } 84 85 GroupInitializationInfo& MutableGroupInitializationInfoRef( 86 const nsACString& aGroup, const CreateIfNonExistent&) { 87 return mGroupInitializationInfos.LookupOrInsert(aGroup); 88 } 89 90 void ResetGroupInitializationInfos() { mGroupInitializationInfos.Clear(); } 91 92 OriginInitializationInfo& MutableOriginInitializationInfoRef( 93 const nsACString& aOrigin) { 94 return *mOriginInitializationInfos.Lookup(aOrigin); 95 } 96 97 OriginInitializationInfo& MutableOriginInitializationInfoRef( 98 const nsACString& aOrigin, const CreateIfNonExistent&) { 99 return mOriginInitializationInfos.LookupOrInsert(aOrigin); 100 } 101 102 void ResetOriginInitializationInfos() { mOriginInitializationInfos.Clear(); } 103 }; 104 105 } // namespace mozilla::dom::quota 106 107 #endif // DOM_QUOTA_INITIALIZATIONTYPES_H_