Bug 1449132 [wpt PR 10194] - [css-grid] Fix resolution of percentage paddings and...
[gecko.git] / dom / fetch / Headers.h
blob1dd92f779f21d614296eaa5d250a4d02a528cc25
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 #ifndef mozilla_dom_Headers_h
8 #define mozilla_dom_Headers_h
10 #include "mozilla/dom/HeadersBinding.h"
12 #include "nsClassHashtable.h"
13 #include "nsWrapperCache.h"
15 #include "InternalHeaders.h"
17 namespace mozilla {
19 class ErrorResult;
21 namespace dom {
23 template<typename K, typename V> class Record;
24 class HeadersOrByteStringSequenceSequenceOrByteStringByteStringRecord;
25 class OwningHeadersOrByteStringSequenceSequenceOrByteStringByteStringRecord;
27 /**
28 * This Headers class is only used to represent the content facing Headers
29 * object. It is actually backed by an InternalHeaders implementation. Gecko
30 * code should NEVER use this, except in the Request and Response
31 * implementations, where they must always be created from the backing
32 * InternalHeaders object.
34 class Headers final : public nsISupports
35 , public nsWrapperCache
37 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
38 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Headers)
40 friend class Request;
41 friend class Response;
43 private:
44 nsCOMPtr<nsISupports> mOwner;
45 RefPtr<InternalHeaders> mInternalHeaders;
47 public:
48 explicit Headers(nsISupports* aOwner, InternalHeaders* aInternalHeaders)
49 : mOwner(aOwner)
50 , mInternalHeaders(aInternalHeaders)
54 explicit Headers(const Headers& aOther) = delete;
56 static bool PrefEnabled(JSContext* cx, JSObject* obj);
58 static already_AddRefed<Headers>
59 Constructor(const GlobalObject& aGlobal,
60 const Optional<HeadersOrByteStringSequenceSequenceOrByteStringByteStringRecord>& aInit,
61 ErrorResult& aRv);
63 static already_AddRefed<Headers>
64 Constructor(const GlobalObject& aGlobal,
65 const OwningHeadersOrByteStringSequenceSequenceOrByteStringByteStringRecord& aInit,
66 ErrorResult& aRv);
68 static already_AddRefed<Headers>
69 Create(nsIGlobalObject* aGlobalObject,
70 const OwningHeadersOrByteStringSequenceSequenceOrByteStringByteStringRecord& aInit,
71 ErrorResult& aRv);
73 void Append(const nsACString& aName, const nsACString& aValue,
74 ErrorResult& aRv)
76 mInternalHeaders->Append(aName, aValue, aRv);
79 void Delete(const nsACString& aName, ErrorResult& aRv)
81 mInternalHeaders->Delete(aName, aRv);
84 void Get(const nsACString& aName, nsACString& aValue, ErrorResult& aRv) const
86 mInternalHeaders->Get(aName, aValue, aRv);
89 void GetFirst(const nsACString& aName, nsACString& aValue, ErrorResult& aRv) const
91 mInternalHeaders->GetFirst(aName, aValue, aRv);
94 bool Has(const nsACString& aName, ErrorResult& aRv) const
96 return mInternalHeaders->Has(aName, aRv);
99 void Set(const nsACString& aName, const nsACString& aValue, ErrorResult& aRv)
101 mInternalHeaders->Set(aName, aValue, aRv);
104 uint32_t GetIterableLength() const
106 return mInternalHeaders->GetIterableLength();
108 const nsString GetKeyAtIndex(unsigned aIndex) const
110 return mInternalHeaders->GetKeyAtIndex(aIndex);
112 const nsString GetValueAtIndex(unsigned aIndex) const
114 return mInternalHeaders->GetValueAtIndex(aIndex);
117 // ChromeOnly
118 HeadersGuardEnum Guard() const
120 return mInternalHeaders->Guard();
123 void SetGuard(HeadersGuardEnum aGuard, ErrorResult& aRv)
125 mInternalHeaders->SetGuard(aGuard, aRv);
128 virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
129 nsISupports* GetParentObject() const { return mOwner; }
131 private:
132 virtual ~Headers();
134 InternalHeaders*
135 GetInternalHeaders() const
137 return mInternalHeaders;
141 } // namespace dom
142 } // namespace mozilla
144 #endif // mozilla_dom_Headers_h