Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/dom/IDBFileHandleBinding.h
Line
Count
Source (jump to first uncovered line)
1
/* THIS FILE IS AUTOGENERATED FROM IDBFileHandle.webidl BY Codegen.py - DO NOT EDIT */
2
3
#ifndef mozilla_dom_IDBFileHandleBinding_h
4
#define mozilla_dom_IDBFileHandleBinding_h
5
6
#include "FileModeBinding.h"
7
#include "GeckoProfiler.h"
8
#include "js/RootingAPI.h"
9
#include "jsfriendapi.h"
10
#include "jspubtd.h"
11
#include "mozilla/ErrorResult.h"
12
#include "mozilla/dom/BindingDeclarations.h"
13
#include "mozilla/dom/FakeString.h"
14
#include "mozilla/dom/Nullable.h"
15
#include "mozilla/dom/PrototypeList.h"
16
#include "mozilla/dom/TypedArray.h"
17
#include "mozilla/dom/UnionMember.h"
18
19
namespace mozilla {
20
namespace dom {
21
22
class Blob;
23
class IDBFileHandle;
24
struct IDBFileHandleAtoms;
25
struct IDBFileMetadataParametersAtoms;
26
struct NativePropertyHooks;
27
class OwningStringOrArrayBufferOrArrayBufferViewOrBlob;
28
class ProtoAndIfaceCache;
29
30
} // namespace dom
31
} // namespace mozilla
32
33
namespace mozilla {
34
namespace dom {
35
36
void
37
ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback, OwningStringOrArrayBufferOrArrayBufferViewOrBlob& aUnion, const char* aName, uint32_t aFlags = 0);
38
39
40
void
41
ImplCycleCollectionUnlink(OwningStringOrArrayBufferOrArrayBufferViewOrBlob& aUnion);
42
43
44
struct IDBFileMetadataParameters : public DictionaryBase
45
{
46
  MOZ_INIT_OUTSIDE_CTOR bool mLastModified;
47
  MOZ_INIT_OUTSIDE_CTOR bool mSize;
48
49
  IDBFileMetadataParameters();
50
51
  explicit inline IDBFileMetadataParameters(const FastDictionaryInitializer& )
52
0
  {
53
0
    // Do nothing here; this is used by our "Fast" subclass
54
0
  }
55
56
  explicit inline IDBFileMetadataParameters(const IDBFileMetadataParameters& aOther)
57
0
  {
58
0
    *this = aOther;
59
0
  }
60
61
  bool
62
  Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
63
64
  bool
65
  Init(const nsAString& aJSON);
66
67
  bool
68
  ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const;
69
70
  bool
71
  ToJSON(nsAString& aJSON) const;
72
73
  void
74
  TraceDictionary(JSTracer* trc);
75
76
  IDBFileMetadataParameters&
77
  operator=(const IDBFileMetadataParameters& aOther);
78
79
private:
80
  static bool
81
  InitIds(JSContext* cx, IDBFileMetadataParametersAtoms* atomsCache);
82
};
83
84
namespace binding_detail {
85
struct FastIDBFileMetadataParameters : public IDBFileMetadataParameters
86
{
87
  inline FastIDBFileMetadataParameters()
88
    : IDBFileMetadataParameters(FastDictionaryInitializer())
89
0
  {
90
0
    // Doesn't matter what int we pass to the parent constructor
91
0
  }
92
};
93
} // namespace binding_detail
94
95
96
class StringOrArrayBufferOrArrayBufferViewOrBlob
97
{
98
  friend class StringOrArrayBufferOrArrayBufferViewOrBlobArgument;
99
  enum Type
100
  {
101
    eUninitialized,
102
    eString,
103
    eArrayBuffer,
104
    eArrayBufferView,
105
    eBlob
106
  };
107
108
  union Value
109
  {
110
    UnionMember<binding_detail::FakeString > mString;
111
    UnionMember<RootedSpiderMonkeyInterface<ArrayBuffer> > mArrayBuffer;
112
    UnionMember<RootedSpiderMonkeyInterface<ArrayBufferView> > mArrayBufferView;
113
    UnionMember<NonNull<mozilla::dom::Blob> > mBlob;
114
115
  };
116
117
  Type mType;
118
  Value mValue;
119
120
  StringOrArrayBufferOrArrayBufferViewOrBlob(const StringOrArrayBufferOrArrayBufferViewOrBlob&) = delete;
121
  StringOrArrayBufferOrArrayBufferViewOrBlob& operator=(const StringOrArrayBufferOrArrayBufferViewOrBlob&) = delete;
122
public:
123
  explicit inline StringOrArrayBufferOrArrayBufferViewOrBlob()
124
    : mType(eUninitialized)
125
0
  {
126
0
  }
127
128
  inline ~StringOrArrayBufferOrArrayBufferViewOrBlob()
129
0
  {
130
0
    Uninit();
131
0
  }
132
133
  inline binding_detail::FakeString&
134
  RawSetAsString()
135
0
  {
136
0
    if (mType == eString) {
137
0
      return mValue.mString.Value();
138
0
    }
139
0
    MOZ_ASSERT(mType == eUninitialized);
140
0
    mType = eString;
141
0
    return mValue.mString.SetValue();
142
0
  }
143
144
  inline binding_detail::FakeString&
145
  SetAsString()
146
0
  {
147
0
    if (mType == eString) {
148
0
      return mValue.mString.Value();
149
0
    }
150
0
    Uninit();
151
0
    mType = eString;
152
0
    return mValue.mString.SetValue();
153
0
  }
154
155
  inline bool
156
  IsString() const
157
0
  {
158
0
    return mType == eString;
159
0
  }
160
161
  inline binding_detail::FakeString&
162
  GetAsString()
163
0
  {
164
0
    MOZ_ASSERT(IsString(), "Wrong type!");
165
0
    return mValue.mString.Value();
166
0
  }
167
168
  inline const nsAString&
169
  GetAsString() const
170
0
  {
171
0
    MOZ_ASSERT(IsString(), "Wrong type!");
172
0
    return mValue.mString.Value();
173
0
  }
174
175
  inline RootedSpiderMonkeyInterface<ArrayBuffer>&
176
  RawSetAsArrayBuffer(JSContext* cx)
177
0
  {
178
0
    if (mType == eArrayBuffer) {
179
0
      return mValue.mArrayBuffer.Value();
180
0
    }
181
0
    MOZ_ASSERT(mType == eUninitialized);
182
0
    mType = eArrayBuffer;
183
0
    return mValue.mArrayBuffer.SetValue(cx);
184
0
  }
185
186
  inline RootedSpiderMonkeyInterface<ArrayBuffer>&
187
  SetAsArrayBuffer(JSContext* cx)
188
0
  {
189
0
    if (mType == eArrayBuffer) {
190
0
      return mValue.mArrayBuffer.Value();
191
0
    }
192
0
    Uninit();
193
0
    mType = eArrayBuffer;
194
0
    return mValue.mArrayBuffer.SetValue(cx);
195
0
  }
196
197
  inline bool
198
  IsArrayBuffer() const
199
0
  {
200
0
    return mType == eArrayBuffer;
201
0
  }
202
203
  inline RootedSpiderMonkeyInterface<ArrayBuffer>&
204
  GetAsArrayBuffer()
205
0
  {
206
0
    MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
207
0
    return mValue.mArrayBuffer.Value();
208
0
  }
209
210
  inline ArrayBuffer const &
211
  GetAsArrayBuffer() const
212
0
  {
213
0
    MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
214
0
    return mValue.mArrayBuffer.Value();
215
0
  }
216
217
  inline RootedSpiderMonkeyInterface<ArrayBufferView>&
218
  RawSetAsArrayBufferView(JSContext* cx)
219
0
  {
220
0
    if (mType == eArrayBufferView) {
221
0
      return mValue.mArrayBufferView.Value();
222
0
    }
223
0
    MOZ_ASSERT(mType == eUninitialized);
224
0
    mType = eArrayBufferView;
225
0
    return mValue.mArrayBufferView.SetValue(cx);
226
0
  }
227
228
  inline RootedSpiderMonkeyInterface<ArrayBufferView>&
229
  SetAsArrayBufferView(JSContext* cx)
230
0
  {
231
0
    if (mType == eArrayBufferView) {
232
0
      return mValue.mArrayBufferView.Value();
233
0
    }
234
0
    Uninit();
235
0
    mType = eArrayBufferView;
236
0
    return mValue.mArrayBufferView.SetValue(cx);
237
0
  }
238
239
  inline bool
240
  IsArrayBufferView() const
241
0
  {
242
0
    return mType == eArrayBufferView;
243
0
  }
244
245
  inline RootedSpiderMonkeyInterface<ArrayBufferView>&
246
  GetAsArrayBufferView()
247
0
  {
248
0
    MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
249
0
    return mValue.mArrayBufferView.Value();
250
0
  }
251
252
  inline ArrayBufferView const &
253
  GetAsArrayBufferView() const
254
0
  {
255
0
    MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
256
0
    return mValue.mArrayBufferView.Value();
257
0
  }
258
259
  inline NonNull<mozilla::dom::Blob>&
260
  RawSetAsBlob()
261
0
  {
262
0
    if (mType == eBlob) {
263
0
      return mValue.mBlob.Value();
264
0
    }
265
0
    MOZ_ASSERT(mType == eUninitialized);
266
0
    mType = eBlob;
267
0
    return mValue.mBlob.SetValue();
268
0
  }
269
270
  inline NonNull<mozilla::dom::Blob>&
271
  SetAsBlob()
272
0
  {
273
0
    if (mType == eBlob) {
274
0
      return mValue.mBlob.Value();
275
0
    }
276
0
    Uninit();
277
0
    mType = eBlob;
278
0
    return mValue.mBlob.SetValue();
279
0
  }
280
281
  inline bool
282
  IsBlob() const
283
0
  {
284
0
    return mType == eBlob;
285
0
  }
286
287
  inline NonNull<mozilla::dom::Blob>&
288
  GetAsBlob()
289
0
  {
290
0
    MOZ_ASSERT(IsBlob(), "Wrong type!");
291
0
    return mValue.mBlob.Value();
292
0
  }
293
294
  inline mozilla::dom::Blob&
295
  GetAsBlob() const
296
0
  {
297
0
    MOZ_ASSERT(IsBlob(), "Wrong type!");
298
0
    return mValue.mBlob.Value();
299
0
  }
300
301
  inline void
302
  Uninit()
303
  {
304
    switch (mType) {
305
      case eUninitialized: {
306
        break;
307
      }
308
      case eString: {
309
        DestroyString();
310
        break;
311
      }
312
      case eArrayBuffer: {
313
        DestroyArrayBuffer();
314
        break;
315
      }
316
      case eArrayBufferView: {
317
        DestroyArrayBufferView();
318
        break;
319
      }
320
      case eBlob: {
321
        DestroyBlob();
322
        break;
323
      }
324
    }
325
  }
326
327
  bool
328
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
329
330
private:
331
  inline void
332
  DestroyString()
333
0
  {
334
0
    MOZ_ASSERT(IsString(), "Wrong type!");
335
0
    mValue.mString.Destroy();
336
0
    mType = eUninitialized;
337
0
  }
338
339
  inline void
340
  DestroyArrayBuffer()
341
0
  {
342
0
    MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
343
0
    mValue.mArrayBuffer.Destroy();
344
0
    mType = eUninitialized;
345
0
  }
346
347
  inline void
348
  DestroyArrayBufferView()
349
0
  {
350
0
    MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
351
0
    mValue.mArrayBufferView.Destroy();
352
0
    mType = eUninitialized;
353
0
  }
354
355
  inline void
356
  DestroyBlob()
357
0
  {
358
0
    MOZ_ASSERT(IsBlob(), "Wrong type!");
359
0
    mValue.mBlob.Destroy();
360
0
    mType = eUninitialized;
361
0
  }
362
};
363
364
365
class OwningStringOrArrayBufferOrArrayBufferViewOrBlob : public AllOwningUnionBase
366
{
367
  friend void ImplCycleCollectionUnlink(OwningStringOrArrayBufferOrArrayBufferViewOrBlob& aUnion);
368
  enum Type
369
  {
370
    eUninitialized,
371
    eString,
372
    eArrayBuffer,
373
    eArrayBufferView,
374
    eBlob
375
  };
376
377
  union Value
378
  {
379
    UnionMember<nsString > mString;
380
    UnionMember<ArrayBuffer > mArrayBuffer;
381
    UnionMember<ArrayBufferView > mArrayBufferView;
382
    UnionMember<OwningNonNull<mozilla::dom::Blob> > mBlob;
383
384
  };
385
386
  Type mType;
387
  Value mValue;
388
389
  OwningStringOrArrayBufferOrArrayBufferViewOrBlob(const OwningStringOrArrayBufferOrArrayBufferViewOrBlob&) = delete;
390
  OwningStringOrArrayBufferOrArrayBufferViewOrBlob& operator=(const OwningStringOrArrayBufferOrArrayBufferViewOrBlob&) = delete;
391
public:
392
  explicit inline OwningStringOrArrayBufferOrArrayBufferViewOrBlob()
393
    : mType(eUninitialized)
394
0
  {
395
0
  }
396
397
  inline ~OwningStringOrArrayBufferOrArrayBufferViewOrBlob()
398
0
  {
399
0
    Uninit();
400
0
  }
401
402
  nsString&
403
  RawSetAsString();
404
405
  nsString&
406
  SetAsString();
407
408
  bool
409
  TrySetToString(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
410
411
  inline void
412
  SetStringData(const nsString::char_type* aData, nsString::size_type aLength)
413
0
  {
414
0
    RawSetAsString().Assign(aData, aLength);
415
0
  }
416
417
  inline bool
418
  IsString() const
419
0
  {
420
0
    return mType == eString;
421
0
  }
422
423
  inline nsString&
424
  GetAsString()
425
0
  {
426
0
    MOZ_ASSERT(IsString(), "Wrong type!");
427
0
    return mValue.mString.Value();
428
0
  }
429
430
  inline nsString const &
431
  GetAsString() const
432
0
  {
433
0
    MOZ_ASSERT(IsString(), "Wrong type!");
434
0
    return mValue.mString.Value();
435
0
  }
436
437
  ArrayBuffer&
438
  RawSetAsArrayBuffer();
439
440
  ArrayBuffer&
441
  SetAsArrayBuffer();
442
443
  bool
444
  TrySetToArrayBuffer(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
445
446
  inline bool
447
  IsArrayBuffer() const
448
0
  {
449
0
    return mType == eArrayBuffer;
450
0
  }
451
452
  inline ArrayBuffer&
453
  GetAsArrayBuffer()
454
0
  {
455
0
    MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
456
0
    return mValue.mArrayBuffer.Value();
457
0
  }
458
459
  inline ArrayBuffer const &
460
  GetAsArrayBuffer() const
461
0
  {
462
0
    MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
463
0
    return mValue.mArrayBuffer.Value();
464
0
  }
465
466
  ArrayBufferView&
467
  RawSetAsArrayBufferView();
468
469
  ArrayBufferView&
470
  SetAsArrayBufferView();
471
472
  bool
473
  TrySetToArrayBufferView(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
474
475
  inline bool
476
  IsArrayBufferView() const
477
0
  {
478
0
    return mType == eArrayBufferView;
479
0
  }
480
481
  inline ArrayBufferView&
482
  GetAsArrayBufferView()
483
0
  {
484
0
    MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
485
0
    return mValue.mArrayBufferView.Value();
486
0
  }
487
488
  inline ArrayBufferView const &
489
  GetAsArrayBufferView() const
490
0
  {
491
0
    MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
492
0
    return mValue.mArrayBufferView.Value();
493
0
  }
494
495
  OwningNonNull<mozilla::dom::Blob>&
496
  RawSetAsBlob();
497
498
  OwningNonNull<mozilla::dom::Blob>&
499
  SetAsBlob();
500
501
  bool
502
  TrySetToBlob(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
503
504
  inline bool
505
  IsBlob() const
506
0
  {
507
0
    return mType == eBlob;
508
0
  }
509
510
  inline OwningNonNull<mozilla::dom::Blob>&
511
  GetAsBlob()
512
0
  {
513
0
    MOZ_ASSERT(IsBlob(), "Wrong type!");
514
0
    return mValue.mBlob.Value();
515
0
  }
516
517
  inline OwningNonNull<mozilla::dom::Blob> const &
518
  GetAsBlob() const
519
0
  {
520
0
    MOZ_ASSERT(IsBlob(), "Wrong type!");
521
0
    return mValue.mBlob.Value();
522
0
  }
523
524
  void
525
  Uninit();
526
527
  bool
528
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
529
530
  void
531
  TraceUnion(JSTracer* trc);
532
533
private:
534
  void
535
  DestroyString();
536
537
  void
538
  DestroyArrayBuffer();
539
540
  void
541
  DestroyArrayBufferView();
542
543
  void
544
  DestroyBlob();
545
};
546
547
548
namespace IDBFileHandle_Binding {
549
550
  typedef mozilla::dom::IDBFileHandle NativeType;
551
552
  const JSClass*
553
  GetJSClass();
554
555
  bool
556
  Wrap(JSContext* aCx, mozilla::dom::IDBFileHandle* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector);
557
558
  template <class T>
559
  inline JSObject* Wrap(JSContext* aCx, T* aObject, JS::Handle<JSObject*> aGivenProto)
560
0
  {
561
0
    JS::Rooted<JSObject*> reflector(aCx);
562
0
    return Wrap(aCx, aObject, aObject, aGivenProto, &reflector) ? reflector.get() : nullptr;
563
0
  }
564
565
  // We declare this as an array so that retrieving a pointer to this
566
  // binding's property hooks only requires compile/link-time resolvable
567
  // address arithmetic.  Declaring it as a pointer instead would require
568
  // doing a run-time load to fetch a pointer to this binding's property
569
  // hooks.  And then structures which embedded a pointer to this structure
570
  // would require a run-time load for proper initialization, which would
571
  // then induce static constructors.  Lots of static constructors.
572
  extern const NativePropertyHooks sNativePropertyHooks[];
573
574
  void
575
  CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal);
576
577
  inline JS::Handle<JSObject*> GetProtoObjectHandle(JSContext* aCx)
578
0
  {
579
0
    /* Get the interface prototype object for this class.  This will create the
580
0
       object as needed. */
581
0
    return GetPerInterfaceObjectHandle(aCx, prototypes::id::IDBFileHandle,
582
0
                                       &CreateInterfaceObjects,
583
0
                                       /* aDefineOnGlobal = */ true);
584
0
585
0
  }
586
587
  inline JS::Handle<JSObject*> GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal = true)
588
0
  {
589
0
    /* Get the interface object for this class.  This will create the object as
590
0
       needed. */
591
0
592
0
    return GetPerInterfaceObjectHandle(aCx, constructors::id::IDBFileHandle,
593
0
                                       &CreateInterfaceObjects,
594
0
                                       aDefineOnGlobal);
595
0
  }
596
597
  JSObject*
598
  GetConstructorObject(JSContext* aCx);
599
600
} // namespace IDBFileHandle_Binding
601
602
603
604
} // namespace dom
605
} // namespace mozilla
606
607
#endif // mozilla_dom_IDBFileHandleBinding_h