/* 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/. */

/**
 * Provide the detailed options for specifying different kinds of data filtering
 * in getSamples function.
 */
dictionary NetworkStatsGetOptions
{
  /**
   * App manifest URL is used to filter network stats by app, while service type
   * is used to filter stats by system service.
   * Note that, these two options cannot be specified at the same time for now;
   * others, an NS_ERROR_NOT_IMPLMENTED exception will be thrown.
   */
  DOMString? appManifestURL = null;
  DOMString serviceType = "";
  /**
   * If it is set as true, only the browsing traffic, which is generated from
   * the mozbrowser iframe element within an app, is returned in result.
   * If it is set as false or not set, the total traffic, which is generated
   * from both the mozapp and mozbrowser iframe elements, is returned.
   */
  boolean browsingTrafficOnly = false;
};

dictionary NetworkStatsAlarmOptions
{
  Date startTime;
  Date data;
};

[JSImplementation="@mozilla.org/networkstats;1",
 ChromeOnly,
 Pref="dom.mozNetworkStats.enabled"]
interface MozNetworkStats {
  /**
   * App manifest URL of an application for specifying the per-app stats of the
   * specified app.
   */
  readonly attribute DOMString    appManifestURL;

  /**
   * True if this stats is the browsing traffic of an app (the traffic generated
   * by a mozbrowser iframe element).
   * Otherwise this stats represents the total traffic of an app.
   */
  readonly attribute boolean      browsingTrafficOnly;

  /**
   * Service type is used to retrieve the corresponding "system-only" stats.
   * E.g., "Tethering", "OTA", etc.
   */
  readonly attribute DOMString    serviceType;

  /**
   * Network the returned data belongs to.
   */
  readonly attribute MozNetworkStatsInterface network;

  /**
   * Stats for a network.
   */
  [Cached, Pure]
  readonly attribute sequence<MozNetworkStatsData> data;

  /**
   * Dates
   */
  readonly attribute object start;
  readonly attribute object end;
};