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_InternalHeaders_h
8 #define mozilla_dom_InternalHeaders_h
10 // needed for HeadersGuardEnum.
11 #include "mozilla/dom/HeadersBinding.h"
12 #include "mozilla/dom/UnionTypes.h"
14 #include "nsClassHashtable.h"
15 #include "nsWrapperCache.h"
25 template<typename T
> class MozMap
;
26 class HeadersOrByteStringSequenceSequenceOrByteStringMozMap
;
28 class InternalHeaders MOZ_FINAL
30 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(InternalHeaders
)
35 Entry(const nsACString
& aName
, const nsACString
& aValue
)
46 HeadersGuardEnum mGuard
;
47 nsTArray
<Entry
> mList
;
50 explicit InternalHeaders(HeadersGuardEnum aGuard
= HeadersGuardEnum::None
)
55 explicit InternalHeaders(const InternalHeaders
& aOther
)
56 : mGuard(aOther
.mGuard
)
60 MOZ_ASSERT(!result
.Failed());
63 void Append(const nsACString
& aName
, const nsACString
& aValue
,
65 void Delete(const nsACString
& aName
, ErrorResult
& aRv
);
66 void Get(const nsACString
& aName
, nsCString
& aValue
, ErrorResult
& aRv
) const;
67 void GetAll(const nsACString
& aName
, nsTArray
<nsCString
>& aResults
,
68 ErrorResult
& aRv
) const;
69 bool Has(const nsACString
& aName
, ErrorResult
& aRv
) const;
70 void Set(const nsACString
& aName
, const nsACString
& aValue
, ErrorResult
& aRv
);
74 HeadersGuardEnum
Guard() const { return mGuard
; }
75 void SetGuard(HeadersGuardEnum aGuard
, ErrorResult
& aRv
);
77 void Fill(const InternalHeaders
& aInit
, ErrorResult
& aRv
);
78 void Fill(const Sequence
<Sequence
<nsCString
>>& aInit
, ErrorResult
& aRv
);
79 void Fill(const MozMap
<nsCString
>& aInit
, ErrorResult
& aRv
);
81 bool HasOnlySimpleHeaders() const;
83 static already_AddRefed
<InternalHeaders
>
84 BasicHeaders(InternalHeaders
* aHeaders
);
86 static already_AddRefed
<InternalHeaders
>
87 CORSHeaders(InternalHeaders
* aHeaders
);
89 virtual ~InternalHeaders();
91 static bool IsSimpleHeader(const nsACString
& aName
,
92 const nsACString
& aValue
);
93 static bool IsInvalidName(const nsACString
& aName
, ErrorResult
& aRv
);
94 static bool IsInvalidValue(const nsACString
& aValue
, ErrorResult
& aRv
);
95 bool IsImmutable(ErrorResult
& aRv
) const;
96 bool IsForbiddenRequestHeader(const nsACString
& aName
) const;
97 bool IsForbiddenRequestNoCorsHeader(const nsACString
& aName
) const;
98 bool IsForbiddenRequestNoCorsHeader(const nsACString
& aName
,
99 const nsACString
& aValue
) const;
100 bool IsForbiddenResponseHeader(const nsACString
& aName
) const;
102 bool IsInvalidMutableHeader(const nsACString
& aName
,
103 ErrorResult
& aRv
) const
105 return IsInvalidMutableHeader(aName
, EmptyCString(), aRv
);
108 bool IsInvalidMutableHeader(const nsACString
& aName
,
109 const nsACString
& aValue
,
110 ErrorResult
& aRv
) const
112 return IsInvalidName(aName
, aRv
) ||
113 IsInvalidValue(aValue
, aRv
) ||
115 IsForbiddenRequestHeader(aName
) ||
116 IsForbiddenRequestNoCorsHeader(aName
, aValue
) ||
117 IsForbiddenResponseHeader(aName
);
122 } // namespace mozilla
124 #endif // mozilla_dom_InternalHeaders_h