From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- dom/xhr/XMLHttpRequestWorker.h | 257 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 dom/xhr/XMLHttpRequestWorker.h (limited to 'dom/xhr/XMLHttpRequestWorker.h') diff --git a/dom/xhr/XMLHttpRequestWorker.h b/dom/xhr/XMLHttpRequestWorker.h new file mode 100644 index 0000000000..0d4c92f04f --- /dev/null +++ b/dom/xhr/XMLHttpRequestWorker.h @@ -0,0 +1,257 @@ +/* -*- 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_XMLHttpRequestWorker_h +#define mozilla_dom_XMLHttpRequestWorker_h + +#include "XMLHttpRequest.h" +#include "XMLHttpRequestString.h" +#include "mozilla/WeakPtr.h" +#include "mozilla/dom/BodyExtractor.h" +#include "mozilla/dom/TypedArray.h" + +// XXX Avoid including this here by moving function bodies to the cpp file +#include "mozilla/dom/BlobImpl.h" + +namespace mozilla::dom { + +class Proxy; +class DOMString; +class SendRunnable; +class StrongWorkerRef; +class WorkerPrivate; + +class XMLHttpRequestWorker final : public SupportsWeakPtr, + public XMLHttpRequest { + public: + // This defines the xhr.response value. + struct ResponseData { + nsresult mResponseResult; + + // responseType is empty or text. + XMLHttpRequestStringSnapshot mResponseText; + + // responseType is blob + RefPtr mResponseBlobImpl; + + // responseType is arrayBuffer; + RefPtr mResponseArrayBufferBuilder; + + // responseType is json + nsString mResponseJSON; + + ResponseData() : mResponseResult(NS_OK) {} + }; + + struct StateData { + nsString mResponseURL; + uint32_t mStatus; + nsCString mStatusText; + uint16_t mReadyState; + bool mFlagSend; + nsresult mStatusResult; + + StateData() + : mStatus(0), mReadyState(0), mFlagSend(false), mStatusResult(NS_OK) {} + }; + + private: + RefPtr mUpload; + WorkerPrivate* mWorkerPrivate; + RefPtr mWorkerRef; + RefPtr mPinnedSelfRef; + RefPtr mProxy; + + XMLHttpRequestResponseType mResponseType; + + UniquePtr mStateData; + + UniquePtr mResponseData; + RefPtr mResponseBlob; + JS::Heap mResponseArrayBufferValue; + JS::Heap mResponseJSONValue; + + uint32_t mTimeout; + + bool mBackgroundRequest; + bool mWithCredentials; + bool mCanceled; + bool mFlagSendActive; + + bool mMozAnon; + bool mMozSystem; + + nsString mMimeTypeOverride; + + public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(XMLHttpRequestWorker, + XMLHttpRequest) + + static already_AddRefed Construct( + const GlobalObject& aGlobal, const MozXMLHttpRequestParameters& aParams, + ErrorResult& aRv); + + void Unpin(); + + virtual uint16_t ReadyState() const override { + return mStateData->mReadyState; + } + + virtual void Open(const nsACString& aMethod, const nsAString& aUrl, + ErrorResult& aRv) override { + Open(aMethod, aUrl, true, Optional(), Optional(), + aRv); + } + + virtual void Open(const nsACString& aMethod, const nsAString& aUrl, + bool aAsync, const nsAString& aUsername, + const nsAString& aPassword, ErrorResult& aRv) override { + Optional username; + username = &aUsername; + Optional password; + password = &aPassword; + Open(aMethod, aUrl, aAsync, username, password, aRv); + } + + void Open(const nsACString& aMethod, const nsAString& aUrl, bool aAsync, + const Optional& aUser, + const Optional& aPassword, ErrorResult& aRv); + + virtual void SetRequestHeader(const nsACString& aHeader, + const nsACString& aValue, + ErrorResult& aRv) override; + + virtual uint32_t Timeout() const override { return mTimeout; } + + virtual void SetTimeout(uint32_t aTimeout, ErrorResult& aRv) override; + + virtual bool WithCredentials() const override { return mWithCredentials; } + + virtual void SetWithCredentials(bool aWithCredentials, + ErrorResult& aRv) override; + + virtual bool MozBackgroundRequest() const override { + return mBackgroundRequest; + } + + virtual void SetMozBackgroundRequest(bool aBackgroundRequest, + ErrorResult& aRv) override; + + virtual nsIChannel* GetChannel() const override { + MOZ_CRASH("This method cannot be called on workers."); + } + + virtual XMLHttpRequestUpload* GetUpload(ErrorResult& aRv) override; + + virtual void Send( + const Nullable< + DocumentOrBlobOrArrayBufferViewOrArrayBufferOrFormDataOrURLSearchParamsOrUSVString>& + aData, + ErrorResult& aRv) override; + + virtual void SendInputStream(nsIInputStream* aInputStream, + ErrorResult& aRv) override { + MOZ_CRASH("nsIInputStream is not a valid argument for XHR in workers."); + } + + virtual void Abort(ErrorResult& aRv) override; + + virtual void GetResponseURL(nsAString& aUrl) override { + aUrl = mStateData->mResponseURL; + } + + uint32_t GetStatus(ErrorResult& aRv) override { + aRv = mStateData->mStatusResult; + return mStateData->mStatus; + } + + virtual void GetStatusText(nsACString& aStatusText, + ErrorResult& aRv) override { + aStatusText = mStateData->mStatusText; + } + + virtual void GetResponseHeader(const nsACString& aHeader, + nsACString& aResponseHeader, + ErrorResult& aRv) override; + + virtual void GetAllResponseHeaders(nsACString& aResponseHeaders, + ErrorResult& aRv) override; + + virtual void OverrideMimeType(const nsAString& aMimeType, + ErrorResult& aRv) override; + + virtual XMLHttpRequestResponseType ResponseType() const override { + return mResponseType; + } + + virtual void SetResponseType(XMLHttpRequestResponseType aResponseType, + ErrorResult& aRv) override; + + virtual void GetResponse(JSContext* /* unused */, + JS::MutableHandle aResponse, + ErrorResult& aRv) override; + + virtual void GetResponseText(DOMString& aResponseText, + ErrorResult& aRv) override; + + virtual Document* GetResponseXML(ErrorResult& aRv) override { + MOZ_CRASH("This method should not be called."); + } + + virtual void GetInterface(JSContext* aCx, JS::Handle aIID, + JS::MutableHandle aRetval, + ErrorResult& aRv) override { + aRv.Throw(NS_ERROR_FAILURE); + } + + virtual void SetOriginAttributes( + const mozilla::dom::OriginAttributesDictionary& aAttrs) override { + MOZ_CRASH("This method cannot be called on workers."); + } + + XMLHttpRequestUpload* GetUploadObjectNoCreate() const { return mUpload; } + + void UpdateState(UniquePtr&& aStateData, + UniquePtr&& aResponseData); + + virtual uint16_t ErrorCode() const override { + return 0; // eOK + } + + virtual bool MozAnon() const override { return mMozAnon; } + + virtual bool MozSystem() const override { return mMozSystem; } + + bool SendInProgress() const { return !!mWorkerRef; } + + private: + XMLHttpRequestWorker(WorkerPrivate* aWorkerPrivate, + nsIGlobalObject* aGlobalObject); + ~XMLHttpRequestWorker(); + + enum ReleaseType { Default, XHRIsGoingAway, WorkerIsGoingAway }; + + void ReleaseProxy(ReleaseType aType = Default); + + void MaybePin(ErrorResult& aRv); + + void MaybeDispatchPrematureAbortEvents(ErrorResult& aRv); + + void DispatchPrematureAbortEvent(EventTarget* aTarget, + const nsAString& aEventType, + bool aUploadTarget, ErrorResult& aRv); + + void Send(JSContext* aCx, JS::Handle aBody, ErrorResult& aRv); + + void SendInternal(const BodyExtractorBase* aBody, ErrorResult& aRv); + + void ResetResponseData(); +}; + +} // namespace mozilla::dom + +#endif // mozilla_dom_workers_xmlhttprequest_h__ -- cgit v1.2.3