tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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