SerializationHelpers.h (7594B)
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 mozilla_dom_quota_SerializationHelpers_h 8 #define mozilla_dom_quota_SerializationHelpers_h 9 10 #include "ipc/EnumSerializer.h" 11 #include "ipc/IPCMessageUtils.h" 12 #include "mozilla/OriginAttributes.h" 13 #include "mozilla/dom/quota/Client.h" 14 #include "mozilla/dom/quota/CommonMetadata.h" 15 #include "mozilla/dom/quota/PersistenceType.h" 16 #include "mozilla/dom/quota/UsageInfo.h" 17 18 namespace IPC { 19 20 template <> 21 struct ParamTraits<mozilla::dom::quota::PersistenceType> 22 : public ContiguousEnumSerializer< 23 mozilla::dom::quota::PersistenceType, 24 mozilla::dom::quota::PERSISTENCE_TYPE_PERSISTENT, 25 mozilla::dom::quota::PERSISTENCE_TYPE_INVALID> {}; 26 27 template <> 28 struct ParamTraits<mozilla::dom::quota::Client::Type> 29 : public ContiguousEnumSerializer<mozilla::dom::quota::Client::Type, 30 mozilla::dom::quota::Client::IDB, 31 mozilla::dom::quota::Client::TYPE_MAX> {}; 32 33 template <> 34 struct ParamTraits<mozilla::dom::quota::ClientUsageArray> { 35 using ParamType = mozilla::dom::quota::ClientUsageArray; 36 37 static void Write(MessageWriter* aWriter, const ParamType& aParam) { 38 for (size_t index = 0; index < mozilla::dom::quota::Client::TypeMax(); 39 index++) { 40 WriteParam(aWriter, aParam[index]); 41 } 42 } 43 44 static bool Read(MessageReader* aReader, ParamType* aResult) { 45 for (size_t index = 0; index < mozilla::dom::quota::Client::TypeMax(); 46 index++) { 47 if (!ReadParam(aReader, &aResult->operator[](index))) { 48 return false; 49 } 50 } 51 return true; 52 } 53 }; 54 55 template <> 56 struct ParamTraits<mozilla::dom::quota::FullOriginMetadata> { 57 using ParamType = mozilla::dom::quota::FullOriginMetadata; 58 59 static void Write(MessageWriter* aWriter, const ParamType& aParam) { 60 WriteParam(aWriter, aParam.mSuffix); 61 WriteParam(aWriter, aParam.mGroup); 62 WriteParam(aWriter, aParam.mOrigin); 63 WriteParam(aWriter, aParam.mStorageOrigin); 64 WriteParam(aWriter, aParam.mIsPrivate); 65 WriteParam(aWriter, aParam.mPersistenceType); 66 WriteParam(aWriter, aParam.mLastAccessTime); 67 WriteParam(aWriter, aParam.mLastMaintenanceDate); 68 WriteParam(aWriter, aParam.mAccessed); 69 WriteParam(aWriter, aParam.mPersisted); 70 WriteParam(aWriter, aParam.mClientUsages); 71 WriteParam(aWriter, aParam.mOriginUsage); 72 WriteParam(aWriter, aParam.mQuotaVersion); 73 } 74 75 static bool Read(MessageReader* aReader, ParamType* aResult) { 76 return ReadParam(aReader, &aResult->mSuffix) && 77 ReadParam(aReader, &aResult->mGroup) && 78 ReadParam(aReader, &aResult->mOrigin) && 79 ReadParam(aReader, &aResult->mStorageOrigin) && 80 ReadParam(aReader, &aResult->mIsPrivate) && 81 ReadParam(aReader, &aResult->mPersistenceType) && 82 ReadParam(aReader, &aResult->mLastAccessTime) && 83 ReadParam(aReader, &aResult->mLastMaintenanceDate) && 84 ReadParam(aReader, &aResult->mAccessed) && 85 ReadParam(aReader, &aResult->mPersisted) && 86 ReadParam(aReader, &aResult->mClientUsages) && 87 ReadParam(aReader, &aResult->mOriginUsage) && 88 ReadParam(aReader, &aResult->mQuotaVersion); 89 } 90 }; 91 92 template <> 93 struct ParamTraits<mozilla::dom::quota::OriginUsageMetadata> { 94 using ParamType = mozilla::dom::quota::OriginUsageMetadata; 95 96 static void Write(MessageWriter* aWriter, const ParamType& aParam) { 97 ParamTraits<mozilla::dom::quota::FullOriginMetadata>::Write(aWriter, 98 aParam); 99 WriteParam(aWriter, aParam.mUsage); 100 } 101 102 static bool Read(MessageReader* aReader, ParamType* aResult) { 103 return ParamTraits<mozilla::dom::quota::FullOriginMetadata>::Read( 104 aReader, aResult) && 105 ReadParam(aReader, &aResult->mUsage); 106 } 107 }; 108 109 template <> 110 struct ParamTraits<mozilla::OriginAttributesPattern> { 111 typedef mozilla::OriginAttributesPattern paramType; 112 113 static void Write(MessageWriter* aWriter, const paramType& aParam) { 114 WriteParam(aWriter, aParam.mFirstPartyDomain); 115 WriteParam(aWriter, aParam.mPrivateBrowsingId); 116 WriteParam(aWriter, aParam.mUserContextId); 117 WriteParam(aWriter, aParam.mGeckoViewSessionContextId); 118 WriteParam(aWriter, aParam.mPartitionKey); 119 WriteParam(aWriter, aParam.mPartitionKeyPattern); 120 } 121 122 static bool Read(MessageReader* aReader, paramType* aResult) { 123 return ReadParam(aReader, &aResult->mFirstPartyDomain) && 124 ReadParam(aReader, &aResult->mPrivateBrowsingId) && 125 ReadParam(aReader, &aResult->mUserContextId) && 126 ReadParam(aReader, &aResult->mGeckoViewSessionContextId) && 127 ReadParam(aReader, &aResult->mPartitionKey) && 128 ReadParam(aReader, &aResult->mPartitionKeyPattern); 129 } 130 }; 131 132 template <> 133 struct ParamTraits<mozilla::dom::PartitionKeyPatternDictionary> { 134 typedef mozilla::dom::PartitionKeyPatternDictionary paramType; 135 136 static void Write(MessageWriter* aWriter, const paramType& aParam) { 137 WriteParam(aWriter, aParam.mScheme); 138 WriteParam(aWriter, aParam.mBaseDomain); 139 WriteParam(aWriter, aParam.mPort); 140 WriteParam(aWriter, aParam.mForeignByAncestorContext); 141 } 142 143 static bool Read(MessageReader* aReader, paramType* aResult) { 144 return ReadParam(aReader, &aResult->mScheme) && 145 ReadParam(aReader, &aResult->mBaseDomain) && 146 ReadParam(aReader, &aResult->mPort) && 147 ReadParam(aReader, &aResult->mForeignByAncestorContext); 148 } 149 }; 150 151 template <> 152 struct ParamTraits<mozilla::dom::quota::DatabaseUsageType> { 153 using ParamType = mozilla::dom::quota::DatabaseUsageType; 154 155 static void Write(MessageWriter* aWriter, const ParamType& aParam) { 156 WriteParam(aWriter, aParam.GetValue()); 157 } 158 159 static bool Read(MessageReader* aReader, ParamType* aResult) { 160 mozilla::Maybe<uint64_t> value; 161 if (!ReadParam(aReader, &value)) { 162 return false; 163 } 164 165 *aResult += ParamType(value); 166 return true; 167 } 168 }; 169 170 template <> 171 struct ParamTraits<mozilla::dom::quota::FileUsageType> { 172 using ParamType = mozilla::dom::quota::FileUsageType; 173 174 static void Write(MessageWriter* aWriter, const ParamType& aParam) { 175 WriteParam(aWriter, aParam.GetValue()); 176 } 177 178 static bool Read(MessageReader* aReader, ParamType* aResult) { 179 mozilla::Maybe<uint64_t> value; 180 if (!ReadParam(aReader, &value)) { 181 return false; 182 } 183 184 *aResult += ParamType(value); 185 return true; 186 } 187 }; 188 189 template <> 190 struct ParamTraits<mozilla::dom::quota::UsageInfo> { 191 using ParamType = mozilla::dom::quota::UsageInfo; 192 193 static void Write(MessageWriter* aWriter, const ParamType& aParam) { 194 WriteParam(aWriter, aParam.DatabaseUsage()); 195 WriteParam(aWriter, aParam.FileUsage()); 196 } 197 198 static bool Read(MessageReader* aReader, ParamType* aResult) { 199 mozilla::Maybe<uint64_t> databaseUsage; 200 if (!ReadParam(aReader, &databaseUsage)) { 201 return false; 202 } 203 204 mozilla::Maybe<uint64_t> fileUsage; 205 if (!ReadParam(aReader, &fileUsage)) { 206 return false; 207 } 208 209 *aResult += mozilla::dom::quota::DatabaseUsageType(databaseUsage); 210 *aResult += mozilla::dom::quota::FileUsageType(fileUsage); 211 return true; 212 } 213 }; 214 215 } // namespace IPC 216 217 #endif // mozilla_dom_quota_SerializationHelpers_h