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"
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
)
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;
38 Preferences::AddBoolVarCache(&sPrefEnabled
, "dom.fetch.enabled");
39 sPrefCacheInit
= true;
43 WorkerPrivate
* workerPrivate
= GetWorkerPrivateFromContext(aCx
);
48 return workerPrivate
->DOMFetchEnabled();
52 already_AddRefed
<Headers
>
53 Headers::Constructor(const GlobalObject
& aGlobal
,
54 const Optional
<HeadersOrByteStringSequenceSequenceOrByteStringMozMap
>& aInit
,
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
);
76 return headers
.forget();
80 already_AddRefed
<Headers
>
81 Headers::Constructor(const GlobalObject
& aGlobal
,
82 const OwningHeadersOrByteStringSequenceSequenceOrByteStringMozMap
& aInit
,
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())) {
100 return headers
.forget();
104 Headers::WrapObject(JSContext
* aCx
)
106 return mozilla::dom::HeadersBinding::Wrap(aCx
, this);
113 } // namespace mozilla