Bumping manifests a=b2g-bump
[gecko.git] / dom / fetch / Headers.cpp
bloba56f62934a68c7fcf251bfcaf301e6281dec8043
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/. */
7 #include "mozilla/dom/Headers.h"
9 #include "mozilla/ErrorResult.h"
10 #include "mozilla/dom/WorkerPrivate.h"
11 #include "mozilla/Preferences.h"
13 namespace mozilla {
14 namespace dom {
16 NS_IMPL_CYCLE_COLLECTING_ADDREF(Headers)
17 NS_IMPL_CYCLE_COLLECTING_RELEASE(Headers)
18 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(Headers, mOwner)
20 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Headers)
21 NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
22 NS_INTERFACE_MAP_ENTRY(nsISupports)
23 NS_INTERFACE_MAP_END
25 // static
26 bool
27 Headers::PrefEnabled(JSContext* aCx, JSObject* aObj)
29 using mozilla::dom::workers::WorkerPrivate;
30 using mozilla::dom::workers::GetWorkerPrivateFromContext;
32 if (NS_IsMainThread()) {
33 static bool sPrefCacheInit = false;
34 static bool sPrefEnabled = false;
35 if (sPrefCacheInit) {
36 return sPrefEnabled;
38 Preferences::AddBoolVarCache(&sPrefEnabled, "dom.fetch.enabled");
39 sPrefCacheInit = true;
40 return sPrefEnabled;
43 WorkerPrivate* workerPrivate = GetWorkerPrivateFromContext(aCx);
44 if (!workerPrivate) {
45 return false;
48 return workerPrivate->DOMFetchEnabled();
51 // static
52 already_AddRefed<Headers>
53 Headers::Constructor(const GlobalObject& aGlobal,
54 const Optional<HeadersOrByteStringSequenceSequenceOrByteStringMozMap>& aInit,
55 ErrorResult& aRv)
57 nsRefPtr<InternalHeaders> ih = new InternalHeaders();
58 nsRefPtr<Headers> headers = new Headers(aGlobal.GetAsSupports(), ih);
60 if (!aInit.WasPassed()) {
61 return headers.forget();
64 if (aInit.Value().IsHeaders()) {
65 ih->Fill(*aInit.Value().GetAsHeaders().mInternalHeaders, aRv);
66 } else if (aInit.Value().IsByteStringSequenceSequence()) {
67 ih->Fill(aInit.Value().GetAsByteStringSequenceSequence(), aRv);
68 } else if (aInit.Value().IsByteStringMozMap()) {
69 ih->Fill(aInit.Value().GetAsByteStringMozMap(), aRv);
72 if (aRv.Failed()) {
73 return nullptr;
76 return headers.forget();
79 // static
80 already_AddRefed<Headers>
81 Headers::Constructor(const GlobalObject& aGlobal,
82 const OwningHeadersOrByteStringSequenceSequenceOrByteStringMozMap& aInit,
83 ErrorResult& aRv)
85 nsRefPtr<InternalHeaders> ih = new InternalHeaders();
86 nsRefPtr<Headers> headers = new Headers(aGlobal.GetAsSupports(), ih);
88 if (aInit.IsHeaders()) {
89 ih->Fill(*(aInit.GetAsHeaders().get()->mInternalHeaders), aRv);
90 } else if (aInit.IsByteStringSequenceSequence()) {
91 ih->Fill(aInit.GetAsByteStringSequenceSequence(), aRv);
92 } else if (aInit.IsByteStringMozMap()) {
93 ih->Fill(aInit.GetAsByteStringMozMap(), aRv);
96 if (NS_WARN_IF(aRv.Failed())) {
97 return nullptr;
100 return headers.forget();
103 JSObject*
104 Headers::WrapObject(JSContext* aCx)
106 return mozilla::dom::HeadersBinding::Wrap(aCx, this);
109 Headers::~Headers()
112 } // namespace dom
113 } // namespace mozilla