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