/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
/* 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 "nsIObserver.idl"

interface nsIFile;

[scriptable, uuid(32fbb784-a20c-49aa-9db9-9a0da1c2f7d8)]
interface nsITelemetryPing : nsIObserver {
  /**
   * Return the current telemetry payload.
   */
  jsval getPayload();

  /**
   * Save histograms to a file.
   *
   * @param aFile - File to load from.
   * @param aSync - Use sync writes.
   */
  void saveHistograms(in nsIFile aFile, in boolean aSync);

  /**
   * Collect and store information about startup.
   */
  void gatherStartup();

  /**
   * Notify observers when loads and saves finish. Used only for testing.
   */
  void enableLoadSaveNotifications();

  /**
   * Cache the profile directory for later use.
   */
  void cacheProfileDirectory();

  /**
   * Inform the ping which AddOns are installed.
   *
   * @param aAddOns - The AddOns.
   */
  void setAddOns(in AString aAddOns);

  /**
   * Send a ping to a test server. Used only for testing.
   *
   * @param aServer - The server.
   */
  void testPing(in AString aServer);

  /**
   * Load histograms from a file.
   *
   * @param aFile - File to load from.
   * @param aSync - Use sync reads.
   */
  void testLoadHistograms(in nsIFile aFile, in boolean aSync);

  /**
   * Return the path component of the current submission URL.
   */
  AString submissionPath();
};
