DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (409f3966645a)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* 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"

interface nsIApplicationReputationCallback;
interface nsIApplicationReputationQuery;
interface nsIArray;
interface nsIURI;

/*
 * A service for asynchronously querying an application reputation service
 * based on metadata of the downloaded file.
 */
[scriptable, uuid(c9f03479-fd68-4393-acb2-c88d4f563174)]
interface nsIApplicationReputationService : nsISupports {
  /**
   * Indicates the reason for the application reputation block.
   */
  const unsigned long VERDICT_SAFE = 0;
  const unsigned long VERDICT_DANGEROUS = 1;
  const unsigned long VERDICT_UNCOMMON = 2;
  const unsigned long VERDICT_POTENTIALLY_UNWANTED = 3;
  const unsigned long VERDICT_DANGEROUS_HOST = 4;

  /**
   * Start querying the application reputation service.
   *
   * @param aQuery
   *        The nsIApplicationReputationQuery containing metadata of the
   *        downloaded file.
   *
   * @param aCallback
   *        The callback for receiving the results of the query.
   *
   * @remarks aCallback may not be null.  onComplete is guaranteed to be called
   *          on aCallback. This function may not be called more than once with
   *          the same query object. If any of the attributes of aQuery have
   *          not been set or have been set with empty data (with the exception
   *          of sourceURI), then a valid request can still be constructed and
   *          will solicit a valid response, but won't produce any useful
   *          information.
   */
  void queryReputation(in nsIApplicationReputationQuery aQuery,
                       in nsIApplicationReputationCallback aCallback);
};

/**
 * A single-use, write-once interface for recording the metadata of the
 * downloaded file. nsIApplicationReputationService.Start() may only be called
 * once with a single query.
 */
[scriptable, uuid(812d7509-a9a3-446e-a66f-3ed8cc91ebd0)]
interface nsIApplicationReputationQuery : nsISupports {
  /*
   * The nsIURI from which the file was downloaded. This may not be null.
   */
  readonly attribute nsIURI sourceURI;

  /*
   * The reference, if any.
   */
  readonly attribute nsIURI referrerURI;

  /*
   * The target filename for the downloaded file, as inferred from the source
   * URI or provided by the Content-Disposition attachment file name. If this
   * is not set by the caller, it will be passed as an empty string but the
   * query won't produce any useful information.
   */
  readonly attribute AUTF8String suggestedFileName;

  /*
   * The size of the downloaded file in bytes.
   */
  readonly attribute unsigned long fileSize;

  /*
   * The SHA256 hash of the downloaded file in raw bytes. If this is not set by
   * the caller, it will be passed as an empty string but the query won't
   * produce any useful information.
   */
  readonly attribute ACString sha256Hash;

  /*
   * The nsIArray of nsIX509CertList of nsIX509Cert that verify for this
   * binary, if it is signed.
   */
  readonly attribute nsIArray signatureInfo;

  /*
   * The nsIArray of nsIPrincipal of redirects that lead to this download. The
   * most recent redirect is the last element.
   */
  readonly attribute nsIArray redirects;
};

[scriptable, function, uuid(9a228470-cfe5-11e2-8b8b-0800200c9a66)]
interface nsIApplicationReputationCallback : nsISupports {
  /**
   * Callback for the result of the application reputation query.
   * @param aStatus
   *        NS_OK if and only if the query succeeded. If it did, then
   *        shouldBlock is meaningful (otherwise it defaults to false). This
   *        may be NS_ERROR_FAILURE if the response cannot be parsed, or
   *        NS_ERROR_NOT_AVAILABLE if the service has been disabled or is not
   *        reachable.
   * @param aShouldBlock
   *        Whether or not the download should be blocked.
   * @param aVerdict
   *        Indicates the result of the lookup that determines whether the
   *        download should be blocked, according to the "VERDICT_" constants.
   *        This may be set to a value different than "VERDICT_SAFE" even if
   *        aShouldBlock is false, so you should always check aShouldBlock.
   */
  void onComplete(in bool aShouldBlock,
                  in nsresult aStatus,
                  in unsigned long aVerdict);
};