/* 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 HappyEyeballsConnMgrDelegate_h_ #define HappyEyeballsConnMgrDelegate_h_ #include "nsISupportsImpl.h" #include "mozilla/AlreadyAddRefed.h" class nsIDNSAddrRecord; namespace mozilla { namespace net { class ConnectionAttempt; class ConnectionEntry; class HttpConnectionBase; class PendingTransactionInfo; class nsAHttpTransaction; class nsHttpTransaction; // Seam over gHttpHandler->ConnMgr() and the ConnectionEntry so HE's dispatch // decisions can be intercepted in gtests. Default forwards verbatim; the test // fake records calls. Connections are HttpConnectionBase* (so a fake works); // the default impl narrows where the real API needs it (ReportSpdyConnection). class HappyEyeballsConnMgrDelegate { public: NS_INLINE_DECL_THREADSAFE_REFCOUNTING(HappyEyeballsConnMgrDelegate) // ConnMgr virtual already_AddRefed FindTransaction( bool aRemoveWhenFound, ConnectionEntry* aEntry, nsAHttpTransaction* aTrans) = 0; virtual nsresult DispatchTransaction(ConnectionEntry* aEntry, nsHttpTransaction* aTrans, HttpConnectionBase* aConn) = 0; virtual void AddTransaction(nsHttpTransaction* aTrans, int32_t aPriority) = 0; virtual void ReportSpdyConnection(HttpConnectionBase* aConn, bool aUsingSpdy, bool aDisallowHttp3) = 0; virtual void ReportHttp3Connection(HttpConnectionBase* aConn, ConnectionEntry* aEntry) = 0; virtual void ReclaimConnection(HttpConnectionBase* aConn) = 0; virtual void ProcessSpdyPendingQ(ConnectionEntry* aEntry) = 0; // ConnectionEntry virtual void InsertIntoActiveConns(ConnectionEntry* aEntry, HttpConnectionBase* aConn) = 0; virtual void RemoveConnectionAttempt(ConnectionEntry* aEntry, ConnectionAttempt* aAttempt, bool aAbandon) = 0; virtual void RecordIPFamilyPreference(ConnectionEntry* aEntry, uint16_t aFamily) = 0; virtual bool MaybeProcessCoalescingKeys(ConnectionEntry* aEntry, nsIDNSAddrRecord* aRecord, bool aIsHttp3) = 0; virtual bool RemoveTransFromPendingQ(ConnectionEntry* aEntry, nsHttpTransaction* aTrans) = 0; protected: virtual ~HappyEyeballsConnMgrDelegate() = default; }; } // namespace net } // namespace mozilla #endif // HappyEyeballsConnMgrDelegate_h_