Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/quota/UsageInfo.h
Line
Count
Source (jump to first uncovered line)
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_usageinfo_h__
8
#define mozilla_dom_quota_usageinfo_h__
9
10
#include "mozilla/dom/quota/QuotaCommon.h"
11
12
#include "mozilla/Atomics.h"
13
#include "mozilla/CheckedInt.h"
14
15
BEGIN_QUOTA_NAMESPACE
16
17
class UsageInfo
18
{
19
public:
20
  UsageInfo()
21
    : mDatabaseUsage(0)
22
    , mFileUsage(0)
23
    , mLimit(0)
24
0
  { }
25
26
  virtual ~UsageInfo()
27
0
  { }
28
29
  void
30
  Append(const UsageInfo& aUsageInfo)
31
0
  {
32
0
    IncrementUsage(&mDatabaseUsage, aUsageInfo.mDatabaseUsage);
33
0
    IncrementUsage(&mFileUsage, aUsageInfo.mFileUsage);
34
0
  }
35
36
  void
37
  AppendToDatabaseUsage(uint64_t aUsage)
38
  {
39
    IncrementUsage(&mDatabaseUsage, aUsage);
40
  }
41
42
  void
43
  AppendToFileUsage(uint64_t aUsage)
44
  {
45
    IncrementUsage(&mFileUsage, aUsage);
46
  }
47
48
  void
49
  SetLimit(uint64_t aLimit)
50
0
  {
51
0
    mLimit = aLimit;
52
0
  }
53
54
  uint64_t
55
  DatabaseUsage()
56
  {
57
    return mDatabaseUsage;
58
  }
59
60
  uint64_t
61
  FileUsage()
62
0
  {
63
0
    return mFileUsage;
64
0
  }
65
66
  uint64_t
67
  Limit()
68
0
  {
69
0
    return mLimit;
70
0
  }
71
72
  uint64_t
73
  TotalUsage()
74
0
  {
75
0
    uint64_t totalUsage = mDatabaseUsage;
76
0
    IncrementUsage(&totalUsage, mFileUsage);
77
0
    return totalUsage;
78
0
  }
79
80
  void
81
  ResetUsage()
82
0
  {
83
0
    mDatabaseUsage = 0;
84
0
    mFileUsage = 0;
85
0
  }
86
87
  static void
88
  IncrementUsage(uint64_t* aUsage, uint64_t aDelta)
89
  {
90
    MOZ_ASSERT(aUsage);
91
    CheckedUint64 value = *aUsage;
92
    value += aDelta;
93
    if (value.isValid()) {
94
      *aUsage = value.value();
95
    } else {
96
      *aUsage = UINT64_MAX;
97
    }
98
  }
99
100
private:
101
  uint64_t mDatabaseUsage;
102
  uint64_t mFileUsage;
103
  uint64_t mLimit;
104
};
105
106
END_QUOTA_NAMESPACE
107
108
#endif // mozilla_dom_quota_usageinfo_h__