fune/dom/fetch/Request.h
Ziran Sun aa6bf5aefc Bug 1839319 - Add fetchpriority support for fetch() API. r=valentin,necko-reviewers,webidl,saschanaz,fredw
This is to add basic fetch priority support. It introduces preference of
fetch priority adjustment as per to recent discussions. We need to refine the
fetchpriority mapping taking into account of destination, which will be
addressed in Bug 1881040.

In addition, this changes the relervant prefs type to atomic type to accommodate
the access of the prefs off the main thread in the worker case.

Differential Revision: https://phabricator.services.mozilla.com/D200778
2024-02-23 15:14:17 +00:00

144 lines
4.4 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_Request_h
#define mozilla_dom_Request_h
#include "nsISupportsImpl.h"
#include "nsWrapperCache.h"
#include "mozilla/dom/Fetch.h"
#include "mozilla/dom/InternalRequest.h"
// Required here due to certain WebIDL enums/classes being declared in both
// files.
#include "mozilla/dom/RequestBinding.h"
#include "mozilla/dom/SafeRefPtr.h"
namespace mozilla::dom {
class Headers;
class InternalHeaders;
class RequestOrUSVString;
class Request final : public FetchBody<Request>, public nsWrapperCache {
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED(Request,
FetchBody<Request>)
public:
Request(nsIGlobalObject* aOwner, SafeRefPtr<InternalRequest> aRequest,
AbortSignal* aSignal);
JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override {
return Request_Binding::Wrap(aCx, this, aGivenProto);
}
void GetUrl(nsAString& aUrl) const {
nsAutoCString url;
mRequest->GetURL(url);
CopyUTF8toUTF16(url, aUrl);
}
void GetMethod(nsCString& aMethod) const { aMethod = mRequest->mMethod; }
RequestMode Mode() const { return mRequest->mMode; }
RequestCredentials Credentials() const { return mRequest->mCredentialsMode; }
RequestCache Cache() const { return mRequest->GetCacheMode(); }
RequestRedirect Redirect() const { return mRequest->GetRedirectMode(); }
RequestPriority Priority() const { return mRequest->GetPriorityMode(); }
void GetIntegrity(nsAString& aIntegrity) const {
aIntegrity = mRequest->GetIntegrity();
}
bool MozErrors() const { return mRequest->MozErrors(); }
RequestDestination Destination() const { return mRequest->Destination(); }
void OverrideContentPolicyType(uint32_t aContentPolicyType) {
mRequest->OverrideContentPolicyType(
static_cast<nsContentPolicyType>(aContentPolicyType));
}
bool IsContentPolicyTypeOverridden() const {
return mRequest->IsContentPolicyTypeOverridden();
}
void GetReferrer(nsAString& aReferrer) const {
mRequest->GetReferrer(aReferrer);
}
ReferrerPolicy ReferrerPolicy_() const { return mRequest->ReferrerPolicy_(); }
InternalHeaders* GetInternalHeaders() const { return mRequest->Headers(); }
Headers* Headers_();
using FetchBody::GetBody;
void GetBody(nsIInputStream** aStream, int64_t* aBodyLength = nullptr) {
mRequest->GetBody(aStream, aBodyLength);
}
void SetBody(nsIInputStream* aStream, int64_t aBodyLength) {
mRequest->SetBody(aStream, aBodyLength);
}
using FetchBody::BodyBlobURISpec;
const nsACString& BodyBlobURISpec() const {
return mRequest->BodyBlobURISpec();
}
using FetchBody::BodyLocalPath;
const nsAString& BodyLocalPath() const { return mRequest->BodyLocalPath(); }
static SafeRefPtr<Request> Constructor(const GlobalObject& aGlobal,
const RequestOrUSVString& aInput,
const RequestInit& aInit,
ErrorResult& rv);
static SafeRefPtr<Request> Constructor(nsIGlobalObject* aGlobal,
JSContext* aCx,
const RequestOrUSVString& aInput,
const RequestInit& aInit,
ErrorResult& rv);
nsIGlobalObject* GetParentObject() const { return mOwner; }
SafeRefPtr<Request> Clone(ErrorResult& aRv);
SafeRefPtr<InternalRequest> GetInternalRequest();
const UniquePtr<mozilla::ipc::PrincipalInfo>& GetPrincipalInfo() const {
return mRequest->GetPrincipalInfo();
}
AbortSignal* GetOrCreateSignal();
// This can return a null AbortSignalImpl.
AbortSignalImpl* GetSignalImpl() const override;
AbortSignalImpl* GetSignalImplToConsumeBody() const final;
private:
~Request();
SafeRefPtr<InternalRequest> mRequest;
// Lazily created.
RefPtr<Headers> mHeaders;
RefPtr<AbortSignal> mSignal;
};
} // namespace mozilla::dom
#endif // mozilla_dom_Request_h