diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /netwerk/protocol/http/EarlyHintRegistrar.h | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'netwerk/protocol/http/EarlyHintRegistrar.h')
-rw-r--r-- | netwerk/protocol/http/EarlyHintRegistrar.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/netwerk/protocol/http/EarlyHintRegistrar.h b/netwerk/protocol/http/EarlyHintRegistrar.h new file mode 100644 index 0000000000..1accf27840 --- /dev/null +++ b/netwerk/protocol/http/EarlyHintRegistrar.h @@ -0,0 +1,80 @@ +/* -*- 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_net_EarlyHintRegistrar_h__ +#define mozilla_net_EarlyHintRegistrar_h__ + +#include "mozilla/RefCounted.h" +#include "nsRefPtrHashtable.h" +#include "mozilla/AlreadyAddRefed.h" + +class nsIParentChannel; + +namespace mozilla::net { + +class EarlyHintPreloader; + +/* + * Registrar for pairing EarlyHintPreloader and HttpChannelParent via + * earlyHintPreloaderId. EarlyHintPreloader has to be registered first. + * EarlyHintPreloader::OnParentReady will be invoked to notify the + * EarlyHintpreloader about the existence of the associated HttpChannelParent. + */ +class EarlyHintRegistrar final : public RefCounted<EarlyHintRegistrar> { + using EarlyHintHashtable = + nsRefPtrHashtable<nsUint64HashKey, EarlyHintPreloader>; + + public: + MOZ_DECLARE_REFCOUNTED_TYPENAME(EarlyHintRegistrar) + + EarlyHintRegistrar(); + ~EarlyHintRegistrar(); + + /* + * Store EarlyHintPreloader for the HttpChannelParent to connect back to. + * + * @param aEarlyHintPreloaderId identifying the EarlyHintPreloader + * @param aEhp the EarlyHintPreloader to store + */ + void RegisterEarlyHint(uint64_t aEarlyHintPreloaderId, + EarlyHintPreloader* aEhp); + + /* + * Link the provided nsIParentChannel with the associated EarlyHintPreloader. + * + * @param aEarlyHintPreloaderId identifying the EarlyHintPreloader + * @param aParent the nsIParentChannel to be paired + * @param aChannelId the id of the nsIChannel connecting to the + * EarlyHintPreloader. + */ + bool LinkParentChannel(uint64_t aEarlyHintPreloaderId, + nsIParentChannel* aParent, uint64_t aChannelId); + + /* + * Delete previous stored EarlyHintPreloader + * + * @param aEarlyHintPreloaderId identifying the EarlyHintPreloader + */ + void DeleteEntry(uint64_t aEarlyHintPreloaderId); + + /* + * This is called when "profile-change-net-teardown" is observed. We use this + * to cancel the ongoing preload and clear the linked EarlyHintPreloader + * objects. + */ + static void CleanUp(); + + // Singleton accessor + static already_AddRefed<EarlyHintRegistrar> GetOrCreate(); + + private: + // Store unlinked EarlyHintPreloader objects. + EarlyHintHashtable mEarlyHint; +}; + +} // namespace mozilla::net + +#endif // mozilla_net_EarlyHintRegistrar_h__ |