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_Request_h
8 #define mozilla_dom_Request_h
10 #include "nsISupportsImpl.h"
11 #include "nsWrapperCache.h"
13 #include "mozilla/dom/Fetch.h"
14 #include "mozilla/dom/InternalRequest.h"
15 // Required here due to certain WebIDL enums/classes being declared in both
17 #include "mozilla/dom/RequestBinding.h"
18 #include "mozilla/dom/SafeRefPtr.h"
20 namespace mozilla::dom
{
23 class InternalHeaders
;
24 class RequestOrUSVString
;
26 class Request final
: public FetchBody
<Request
>, public nsWrapperCache
{
27 NS_DECL_ISUPPORTS_INHERITED
28 NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED(Request
,
32 Request(nsIGlobalObject
* aOwner
, SafeRefPtr
<InternalRequest
> aRequest
,
33 AbortSignal
* aSignal
);
35 JSObject
* WrapObject(JSContext
* aCx
,
36 JS::Handle
<JSObject
*> aGivenProto
) override
{
37 return Request_Binding::Wrap(aCx
, this, aGivenProto
);
40 void GetUrl(nsAString
& aUrl
) const {
42 mRequest
->GetURL(url
);
43 CopyUTF8toUTF16(url
, aUrl
);
46 void GetMethod(nsCString
& aMethod
) const { aMethod
= mRequest
->mMethod
; }
48 RequestMode
Mode() const { return mRequest
->mMode
; }
50 RequestCredentials
Credentials() const { return mRequest
->mCredentialsMode
; }
52 RequestCache
Cache() const { return mRequest
->GetCacheMode(); }
54 RequestRedirect
Redirect() const { return mRequest
->GetRedirectMode(); }
56 RequestPriority
Priority() const { return mRequest
->GetPriorityMode(); }
58 void GetIntegrity(nsAString
& aIntegrity
) const {
59 aIntegrity
= mRequest
->GetIntegrity();
62 bool MozErrors() const { return mRequest
->MozErrors(); }
64 RequestDestination
Destination() const { return mRequest
->Destination(); }
66 void OverrideContentPolicyType(uint32_t aContentPolicyType
) {
67 mRequest
->OverrideContentPolicyType(
68 static_cast<nsContentPolicyType
>(aContentPolicyType
));
71 bool IsContentPolicyTypeOverridden() const {
72 return mRequest
->IsContentPolicyTypeOverridden();
75 void GetReferrer(nsAString
& aReferrer
) const {
76 mRequest
->GetReferrer(aReferrer
);
79 ReferrerPolicy
ReferrerPolicy_() const { return mRequest
->ReferrerPolicy_(); }
81 InternalHeaders
* GetInternalHeaders() const { return mRequest
->Headers(); }
85 using FetchBody::GetBody
;
87 void GetBody(nsIInputStream
** aStream
, int64_t* aBodyLength
= nullptr) {
88 mRequest
->GetBody(aStream
, aBodyLength
);
91 void SetBody(nsIInputStream
* aStream
, int64_t aBodyLength
) {
92 mRequest
->SetBody(aStream
, aBodyLength
);
95 using FetchBody::BodyBlobURISpec
;
97 const nsACString
& BodyBlobURISpec() const {
98 return mRequest
->BodyBlobURISpec();
101 using FetchBody::BodyLocalPath
;
103 const nsAString
& BodyLocalPath() const { return mRequest
->BodyLocalPath(); }
105 static SafeRefPtr
<Request
> Constructor(const GlobalObject
& aGlobal
,
106 const RequestOrUSVString
& aInput
,
107 const RequestInit
& aInit
,
110 static SafeRefPtr
<Request
> Constructor(nsIGlobalObject
* aGlobal
,
112 const RequestOrUSVString
& aInput
,
113 const RequestInit
& aInit
,
116 nsIGlobalObject
* GetParentObject() const { return mOwner
; }
118 SafeRefPtr
<Request
> Clone(ErrorResult
& aRv
);
120 SafeRefPtr
<InternalRequest
> GetInternalRequest();
122 const UniquePtr
<mozilla::ipc::PrincipalInfo
>& GetPrincipalInfo() const {
123 return mRequest
->GetPrincipalInfo();
126 AbortSignal
* GetOrCreateSignal();
128 // This can return a null AbortSignalImpl.
129 AbortSignalImpl
* GetSignalImpl() const override
;
130 AbortSignalImpl
* GetSignalImplToConsumeBody() const final
;
135 SafeRefPtr
<InternalRequest
> mRequest
;
138 RefPtr
<Headers
> mHeaders
;
139 RefPtr
<AbortSignal
> mSignal
;
142 } // namespace mozilla::dom
144 #endif // mozilla_dom_Request_h