Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/dom/IDBKeyRange.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
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef mozilla_dom_idbkeyrange_h__
8
#define mozilla_dom_idbkeyrange_h__
9
10
#include "js/RootingAPI.h"
11
#include "js/Value.h"
12
#include "mozilla/Attributes.h"
13
#include "mozilla/dom/IndexedDatabaseManager.h"
14
#include "mozilla/dom/indexedDB/Key.h"
15
#include "nsCOMPtr.h"
16
#include "nsCycleCollectionParticipant.h"
17
#include "nsISupports.h"
18
#include "nsString.h"
19
20
class mozIStorageStatement;
21
22
namespace mozilla {
23
24
class ErrorResult;
25
26
namespace dom {
27
28
class GlobalObject;
29
30
namespace indexedDB {
31
class SerializedKeyRange;
32
} // namespace indexedDB
33
34
class IDBKeyRange
35
  : public nsISupports
36
{
37
protected:
38
  nsCOMPtr<nsISupports> mGlobal;
39
  indexedDB::Key mLower;
40
  indexedDB::Key mUpper;
41
  JS::Heap<JS::Value> mCachedLowerVal;
42
  JS::Heap<JS::Value> mCachedUpperVal;
43
44
  const bool mLowerOpen : 1;
45
  const bool mUpperOpen : 1;
46
  const bool mIsOnly : 1;
47
  bool mHaveCachedLowerVal : 1;
48
  bool mHaveCachedUpperVal : 1;
49
  bool mRooted : 1;
50
51
public:
52
  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
53
  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(IDBKeyRange)
54
55
  // aCx is allowed to be null, but only if aVal.isUndefined().
56
  static nsresult
57
  FromJSVal(JSContext* aCx,
58
            JS::Handle<JS::Value> aVal,
59
            IDBKeyRange** aKeyRange);
60
61
  static already_AddRefed<IDBKeyRange>
62
  FromSerialized(const indexedDB::SerializedKeyRange& aKeyRange);
63
64
  static already_AddRefed<IDBKeyRange>
65
  Only(const GlobalObject& aGlobal,
66
       JS::Handle<JS::Value> aValue,
67
       ErrorResult& aRv);
68
69
  static already_AddRefed<IDBKeyRange>
70
  LowerBound(const GlobalObject& aGlobal,
71
             JS::Handle<JS::Value> aValue,
72
             bool aOpen,
73
             ErrorResult& aRv);
74
75
  static already_AddRefed<IDBKeyRange>
76
  UpperBound(const GlobalObject& aGlobal,
77
             JS::Handle<JS::Value> aValue,
78
             bool aOpen,
79
             ErrorResult& aRv);
80
81
  static already_AddRefed<IDBKeyRange>
82
  Bound(const GlobalObject& aGlobal,
83
        JS::Handle<JS::Value> aLower,
84
        JS::Handle<JS::Value> aUpper,
85
        bool aLowerOpen,
86
        bool aUpperOpen,
87
        ErrorResult& aRv);
88
89
  void
90
  AssertIsOnOwningThread() const
91
  {
92
    NS_ASSERT_OWNINGTHREAD(IDBKeyRange);
93
  }
94
95
  void
96
  ToSerialized(indexedDB::SerializedKeyRange& aKeyRange) const;
97
98
  const indexedDB::Key&
99
  Lower() const
100
  {
101
    return mLower;
102
  }
103
104
  indexedDB::Key&
105
  Lower()
106
  {
107
    return mLower;
108
  }
109
110
  const indexedDB::Key&
111
  Upper() const
112
  {
113
    return mIsOnly ? mLower : mUpper;
114
  }
115
116
  indexedDB::Key&
117
  Upper()
118
  {
119
    return mIsOnly ? mLower : mUpper;
120
  }
121
122
  bool
123
  Includes(JSContext* aCx,
124
           JS::Handle<JS::Value> aKey,
125
           ErrorResult& aRv) const;
126
127
  bool
128
  IsOnly() const
129
  {
130
    return mIsOnly;
131
  }
132
133
  void
134
  GetBindingClause(const nsACString& aKeyColumnName,
135
                   nsACString& _retval) const;
136
137
  nsresult
138
  BindToStatement(mozIStorageStatement* aStatement) const;
139
140
  void
141
  DropJSObjects();
142
143
  // WebIDL
144
  bool
145
  WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector);
146
147
  nsISupports*
148
  GetParentObject() const
149
0
  {
150
0
    return mGlobal;
151
0
  }
152
153
  void
154
  GetLower(JSContext* aCx, JS::MutableHandle<JS::Value> aResult,
155
           ErrorResult& aRv);
156
157
  void
158
  GetUpper(JSContext* aCx, JS::MutableHandle<JS::Value> aResult,
159
           ErrorResult& aRv);
160
161
  bool
162
  LowerOpen() const
163
0
  {
164
0
    return mLowerOpen;
165
0
  }
166
167
  bool
168
  UpperOpen() const
169
0
  {
170
0
    return mUpperOpen;
171
0
  }
172
173
protected:
174
  IDBKeyRange(nsISupports* aGlobal,
175
              bool aLowerOpen,
176
              bool aUpperOpen,
177
              bool aIsOnly);
178
179
  virtual ~IDBKeyRange();
180
};
181
182
class IDBLocaleAwareKeyRange final
183
  : public IDBKeyRange
184
{
185
  IDBLocaleAwareKeyRange(nsISupports* aGlobal,
186
                         bool aLowerOpen,
187
                         bool aUpperOpen,
188
                         bool aIsOnly);
189
190
  ~IDBLocaleAwareKeyRange();
191
192
public:
193
  static already_AddRefed<IDBLocaleAwareKeyRange>
194
  Bound(const GlobalObject& aGlobal,
195
        JS::Handle<JS::Value> aLower,
196
        JS::Handle<JS::Value> aUpper,
197
        bool aLowerOpen,
198
        bool aUpperOpen,
199
        ErrorResult& aRv);
200
201
  NS_INLINE_DECL_REFCOUNTING_INHERITED(IDBLocaleAwareKeyRange, IDBKeyRange)
202
203
  // WebIDL
204
  bool
205
  WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector);
206
};
207
208
} // namespace dom
209
} // namespace mozilla
210
211
#endif // mozilla_dom_idbkeyrange_h__