author Dennis Jackson <>
Sun, 26 Mar 2023 07:31:40 +0000
changeset 657950 dee1eb3308521b4cb7c8a3afe44520efcf582650
parent 635948 8a62d45d03cfe41d7f33b9e629d4ed03b9b4abba
permissions -rw-r--r--
Bug 1822876: Add H3 ECH Telemetry. r=kershaw,necko-reviewers This patch adds telemetry which records when H3 connections succeed / fail and what kind of ECH they used. Our H3 ECH tests are extended to test these different modes and that the telemetry is recorded correctly. Differential Revision:

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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
 * The origin of this IDL file is
 * Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
 * liability, trademark and document use rules apply.

interface InputStream;
interface MozChannel;

enum XMLHttpRequestResponseType {

 * Parameters for instantiating an XMLHttpRequest. They are passed as an
 * optional argument to the constructor:
 *  new XMLHttpRequest({anon: true, system: true});
dictionary MozXMLHttpRequestParameters
   * If true, the request will be sent without cookie and authentication
   * headers.
  boolean mozAnon = false;

   * If true, the same origin policy will not be enforced on the request.
  boolean mozSystem = false;

interface XMLHttpRequest : XMLHttpRequestEventTarget {
  constructor(optional MozXMLHttpRequestParameters params = {});
  // There are apparently callers, specifically CoffeeScript, who do
  // things like this:
  //   c = new(window.ActiveXObject || XMLHttpRequest)("Microsoft.XMLHTTP")
  // To handle that, we need a constructor that takes a string.
  constructor(DOMString ignored);

  // event handler
  attribute EventHandler onreadystatechange;

  // states
  const unsigned short UNSENT = 0;
  const unsigned short OPENED = 1;
  const unsigned short HEADERS_RECEIVED = 2;
  const unsigned short LOADING = 3;
  const unsigned short DONE = 4;

  readonly attribute unsigned short readyState;

  // request
  undefined open(ByteString method, USVString url);
  undefined open(ByteString method, USVString url, boolean async,
            optional USVString? user=null, optional USVString? password=null);
  undefined setRequestHeader(ByteString header, ByteString value);

  attribute unsigned long timeout;

  attribute boolean withCredentials;

  readonly attribute XMLHttpRequestUpload upload;

  undefined send(optional (Document or XMLHttpRequestBodyInit)? body = null);

  undefined abort();

  // response
  readonly attribute USVString responseURL;

  readonly attribute unsigned short status;

  readonly attribute ByteString statusText;

  ByteString? getResponseHeader(ByteString header);

  ByteString getAllResponseHeaders();

  undefined overrideMimeType(DOMString mime);

  attribute XMLHttpRequestResponseType responseType;
  readonly attribute any response;
  [Cached, Pure, Throws]
  readonly attribute USVString? responseText;

  [Throws, Exposed=Window]
  readonly attribute Document? responseXML;

  // Mozilla-specific stuff

  [ChromeOnly, SetterThrows]
  attribute boolean mozBackgroundRequest;

  [ChromeOnly, Exposed=Window]
  readonly attribute MozChannel? channel;

  [Throws, ChromeOnly, Exposed=Window]
  any getInterface(any iid);

  [ChromeOnly, Exposed=Window]
  undefined setOriginAttributes(optional OriginAttributesDictionary originAttributes = {});

  [ChromeOnly, Throws]
  undefined sendInputStream(InputStream body);

  // Only works on MainThread.
  // Its permanence is to be evaluated in bug 1368540 for Firefox 60.
  readonly attribute unsigned short errorCode;

  readonly attribute boolean mozAnon;
  readonly attribute boolean mozSystem;