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 --- .../protocol/http/HttpBackgroundChannelParent.h | 121 +++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 netwerk/protocol/http/HttpBackgroundChannelParent.h (limited to 'netwerk/protocol/http/HttpBackgroundChannelParent.h') diff --git a/netwerk/protocol/http/HttpBackgroundChannelParent.h b/netwerk/protocol/http/HttpBackgroundChannelParent.h new file mode 100644 index 0000000000..755505c181 --- /dev/null +++ b/netwerk/protocol/http/HttpBackgroundChannelParent.h @@ -0,0 +1,121 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set sw=2 ts=8 et 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_net_HttpBackgroundChannelParent_h +#define mozilla_net_HttpBackgroundChannelParent_h + +#include "mozilla/net/PHttpBackgroundChannelParent.h" +#include "mozilla/Atomics.h" +#include "mozilla/Mutex.h" +#include "nsID.h" +#include "nsISupportsImpl.h" + +class nsISerialEventTarget; + +namespace mozilla { +namespace net { + +class HttpChannelParent; + +class HttpBackgroundChannelParent final : public PHttpBackgroundChannelParent { + public: + explicit HttpBackgroundChannelParent(); + + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(HttpBackgroundChannelParent, final) + + // Try to find associated HttpChannelParent with the same + // channel Id. + nsresult Init(const uint64_t& aChannelId); + + // Callbacks for BackgroundChannelRegistrar to notify + // the associated HttpChannelParent is found. + void LinkToChannel(HttpChannelParent* aChannelParent); + + // Callbacks for HttpChannelParent to close the background + // IPC channel. + void OnChannelClosed(); + + // To send OnStartRequest message over background channel. + bool OnStartRequest(const nsHttpResponseHead& aResponseHead, + const bool& aUseResponseHead, + const nsHttpHeaderArray& aRequestHeaders, + const HttpChannelOnStartRequestArgs& aArgs, + const nsCOMPtr& aCacheEntry); + + // To send OnTransportAndData message over background channel. + bool OnTransportAndData(const nsresult& aChannelStatus, + const nsresult& aTransportStatus, + const uint64_t& aOffset, const uint32_t& aCount, + const nsCString& aData); + + // To send OnStopRequest message over background channel. + bool OnStopRequest(const nsresult& aChannelStatus, + const ResourceTimingStructArgs& aTiming, + const nsHttpHeaderArray& aResponseTrailers, + const nsTArray& aConsoleReports); + + // When ODA and OnStopRequest are sending from socket process to child + // process, this is the last IPC message sent from parent process. + bool OnConsoleReport(const nsTArray& aConsoleReports); + + // To send OnAfterLastPart message over background channel. + bool OnAfterLastPart(const nsresult aStatus); + + // To send OnProgress message over background channel. + bool OnProgress(const int64_t aProgress, const int64_t aProgressMax); + + // To send OnStatus message over background channel. + bool OnStatus(const nsresult aStatus); + + // To send FlushedForDiversion and DivertMessages messages + // over background channel. + bool OnDiversion(); + + // To send NotifyClassificationFlags message over background channel. + bool OnNotifyClassificationFlags(uint32_t aClassificationFlags, + bool aIsThirdParty); + + // To send SetClassifierMatchedInfo message over background channel. + bool OnSetClassifierMatchedInfo(const nsACString& aList, + const nsACString& aProvider, + const nsACString& aFullHash); + + // To send SetClassifierMatchedTrackingInfo message over background channel. + bool OnSetClassifierMatchedTrackingInfo(const nsACString& aLists, + const nsACString& aFullHashes); + + nsISerialEventTarget* GetBackgroundTarget(); + + using ChildEndpointPromise = + MozPromise, bool, true>; + [[nodiscard]] RefPtr AttachStreamFilter( + Endpoint&& aParentEndpoint, + Endpoint&& aChildEndpoint); + + [[nodiscard]] RefPtr DetachStreamFilters(); + + protected: + void ActorDestroy(ActorDestroyReason aWhy) override; + + private: + virtual ~HttpBackgroundChannelParent(); + + Atomic mIPCOpened; + + // Used to ensure atomicity of mBackgroundThread + Mutex mBgThreadMutex MOZ_UNANNOTATED; + + nsCOMPtr mBackgroundThread; + + // associated HttpChannelParent for generating the channel events + RefPtr mChannelParent; +}; + +} // namespace net +} // namespace mozilla + +#endif // mozilla_net_HttpBackgroundChannelParent_h -- cgit v1.2.3