diff options
Diffstat (limited to 'netwerk/protocol/http/nsIHttpActivityObserver.idl')
-rw-r--r-- | netwerk/protocol/http/nsIHttpActivityObserver.idl | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/netwerk/protocol/http/nsIHttpActivityObserver.idl b/netwerk/protocol/http/nsIHttpActivityObserver.idl new file mode 100644 index 0000000000..533e6af135 --- /dev/null +++ b/netwerk/protocol/http/nsIHttpActivityObserver.idl @@ -0,0 +1,214 @@ +/* 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/. */ + +#include "nsISupports.idl" + +%{ C++ +namespace mozilla { +namespace net { +class HttpActivityArgs; +} // namespace net +} // namespace mozilla +%} + +[ref] native HttpActivityArgs(const mozilla::net::HttpActivityArgs); + +/** + * nsIHttpActivityObserver + * + * This interface provides a way for http activities to be reported + * to observers. + */ +[scriptable, uuid(412880C8-6C36-48d8-BF8F-84F91F892503)] +interface nsIHttpActivityObserver : nsISupports +{ + /** + * observe activity from the http transport + * + * @param aHttpChannel + * nsISupports interface for the the http channel that + * generated this activity + * @param aActivityType + * The value of this aActivityType will be one of + * ACTIVITY_TYPE_SOCKET_TRANSPORT or + * ACTIVITY_TYPE_HTTP_TRANSACTION + * @param aActivitySubtype + * The value of this aActivitySubtype, will be depend + * on the value of aActivityType. When aActivityType + * is ACTIVITY_TYPE_SOCKET_TRANSPORT + * aActivitySubtype will be one of the + * nsISocketTransport::STATUS_???? values defined in + * nsISocketTransport.idl + * OR when aActivityType + * is ACTIVITY_TYPE_HTTP_TRANSACTION + * aActivitySubtype will be one of the + * nsIHttpActivityObserver::ACTIVITY_SUBTYPE_???? values + * defined below + * @param aTimestamp + * microseconds past the epoch of Jan 1, 1970 + * @param aExtraSizeData + * Any extra size data optionally available with + * this activity + * @param aExtraStringData + * Any extra string data optionally available with + * this activity + */ + [must_use] + void observeActivity(in nsISupports aHttpChannel, + in uint32_t aActivityType, + in uint32_t aActivitySubtype, + in PRTime aTimestamp, + in uint64_t aExtraSizeData, + in ACString aExtraStringData); + + /** + * This attribute is true when this interface is active and should + * observe http activities. When false, observeActivity() should not + * be called. It is present for compatibility reasons and should be + * implemented only by nsHttpActivityDistributor. + */ + [must_use] readonly attribute boolean isActive; + + /** + * This function is for internal use only. Every time a http transaction + * is created in socket process, we use this function to set the value of + * |isActive|. We need this since the real value of |isActive| is + * only available in parent process. + */ + [noscript] void setIsActive(in boolean aActived); + + /** + * This function is used when the real http channel is not available. + * We use the information in |HttpActivityArgs| to get the http channel or + * create a |NullHttpChannel|. + * + * @param aArgs + * See the definition of |HttpActivityArgs| in PSocketProcess.ipdl. + */ + [noscript, must_use] + void observeActivityWithArgs(in HttpActivityArgs aArgs, + in uint32_t aActivityType, + in uint32_t aActivitySubtype, + in PRTime aTimestamp, + in uint64_t aExtraSizeData, + in ACString aExtraStringData); + + /** + * This function is for testing only. We use this function to observe the + * activities of HTTP connections. To receive this notification, + * observeConnection should be set to true. + */ + [must_use] + void observeConnectionActivity(in ACString aHost, + in int32_t aPort, + in boolean aSSL, + in boolean aHasECH, + in boolean aIsHttp3, + in uint32_t aActivityType, + in uint32_t aActivitySubtype, + in PRTime aTimestamp, + in ACString aExtraStringData); + + const unsigned long ACTIVITY_TYPE_SOCKET_TRANSPORT = 0x0001; + const unsigned long ACTIVITY_TYPE_HTTP_TRANSACTION = 0x0002; + const unsigned long ACTIVITY_TYPE_HTTP_CONNECTION = 0x0003; + + const unsigned long ACTIVITY_SUBTYPE_REQUEST_HEADER = 0x5001; + const unsigned long ACTIVITY_SUBTYPE_REQUEST_BODY_SENT = 0x5002; + const unsigned long ACTIVITY_SUBTYPE_RESPONSE_START = 0x5003; + const unsigned long ACTIVITY_SUBTYPE_RESPONSE_HEADER = 0x5004; + const unsigned long ACTIVITY_SUBTYPE_RESPONSE_COMPLETE = 0x5005; + const unsigned long ACTIVITY_SUBTYPE_TRANSACTION_CLOSE = 0x5006; + const unsigned long ACTIVITY_SUBTYPE_PROXY_RESPONSE_HEADER = 0x5007; + const unsigned long ACTIVITY_SUBTYPE_DNSANDSOCKET_CREATED = 0x5008; + const unsigned long ACTIVITY_SUBTYPE_SPECULATIVE_DNSANDSOCKET_CREATED = 0x5009; + const unsigned long ACTIVITY_SUBTYPE_ECH_SET = 0x500A; + const unsigned long ACTIVITY_SUBTYPE_CONNECTION_CREATED = 0x500B; + + /** + * When aActivityType is ACTIVITY_TYPE_SOCKET_TRANSPORT + * and aActivitySubtype is STATUS_SENDING_TO + * aExtraSizeData will contain the count of bytes sent + * There may be more than one of these activities reported + * for a single http transaction, each aExtraSizeData + * represents only that portion of the total bytes sent + * + * When aActivityType is ACTIVITY_TYPE_HTTP_TRANSACTION + * and aActivitySubtype is ACTIVITY_SUBTYPE_REQUEST_HEADER + * aExtraStringData will contain the text of the header + * + * When aActivityType is ACTIVITY_TYPE_HTTP_TRANSACTION + * and aActivitySubtype is ACTIVITY_SUBTYPE_RESPONSE_HEADER + * aExtraStringData will contain the text of the header + * + * When aActivityType is ACTIVITY_TYPE_HTTP_TRANSACTION + * and aActivitySubtype is ACTIVITY_SUBTYPE_RESPONSE_COMPLETE + * aExtraSizeData will contain the count of total bytes received + */ +}; + +%{C++ + +#define NS_HTTP_ACTIVITY_TYPE_SOCKET_TRANSPORT \ + nsIHttpActivityObserver::ACTIVITY_TYPE_SOCKET_TRANSPORT +#define NS_HTTP_ACTIVITY_TYPE_HTTP_TRANSACTION \ + nsIHttpActivityObserver::ACTIVITY_TYPE_HTTP_TRANSACTION +#define NS_ACTIVITY_TYPE_HTTP_CONNECTION \ + nsIHttpActivityObserver::ACTIVITY_TYPE_HTTP_CONNECTION + +#define NS_HTTP_ACTIVITY_SUBTYPE_REQUEST_HEADER \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_REQUEST_HEADER +#define NS_HTTP_ACTIVITY_SUBTYPE_REQUEST_BODY_SENT \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_REQUEST_BODY_SENT +#define NS_HTTP_ACTIVITY_SUBTYPE_RESPONSE_START \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_RESPONSE_START +#define NS_HTTP_ACTIVITY_SUBTYPE_RESPONSE_HEADER \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_RESPONSE_HEADER +#define NS_HTTP_ACTIVITY_SUBTYPE_RESPONSE_COMPLETE \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_RESPONSE_COMPLETE +#define NS_HTTP_ACTIVITY_SUBTYPE_TRANSACTION_CLOSE \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_TRANSACTION_CLOSE +#define NS_HTTP_ACTIVITY_SUBTYPE_PROXY_RESPONSE_HEADER \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_PROXY_RESPONSE_HEADER +#define NS_HTTP_ACTIVITY_SUBTYPE_DNSANDSOCKET_CREATED \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_DNSANDSOCKET_CREATED +#define NS_HTTP_ACTIVITY_SUBTYPE_SPECULATIVE_DNSANDSOCKET_CREATED \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_SPECULATIVE_DNSANDSOCKET_CREATED +#define NS_HTTP_ACTIVITY_SUBTYPE_ECH_SET \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_ECH_SET +#define NS_HTTP_ACTIVITY_SUBTYPE_CONNECTION_CREATED \ + nsIHttpActivityObserver::ACTIVITY_SUBTYPE_CONNECTION_CREATED +%} + +/** + * nsIHttpActivityDistributor + * + * This interface provides a way to register and unregister observers to the + * http activities. + */ +[scriptable, builtinclass, uuid(7C512CB8-582A-4625-B5B6-8639755271B5)] +interface nsIHttpActivityDistributor : nsIHttpActivityObserver +{ + void addObserver(in nsIHttpActivityObserver aObserver); + void removeObserver(in nsIHttpActivityObserver aObserver); + + /** + * C++ friendly getter + */ + [noscript, notxpcom] bool Activated(); + [noscript, notxpcom] bool ObserveProxyResponseEnabled(); + [noscript, notxpcom] bool ObserveConnectionEnabled(); + + /** + * When true, the ACTIVITY_SUBTYPE_PROXY_RESPONSE_HEADER will be sent to + * the observers. + */ + [must_use] attribute boolean observeProxyResponse; + + /** + * When true, the ACTIVITY_TYPE_HTTP_CONNECTION will be sent to + * the observers. + */ + [must_use] attribute boolean observeConnection; +}; |