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

interface nsIDOMNode;
interface nsIPrincipal;

/**
 * nsIIOService2 extends nsIIOService
 */
[scriptable, uuid(52c5804b-0d3c-4d4f-8654-1c36fd310e69)]
interface nsIIOService2 : nsIIOService
{
  /**
   * While this is set, IOService will monitor an nsINetworkLinkService
   * (if available) and set its offline status to "true" whenever
   * isLinkUp is false.
   *
   * Applications that want to control changes to the IOService's offline
   * status should set this to false, watch for network:link-status-changed
   * broadcasts, and change nsIIOService::offline as they see fit. Note
   * that this means during application startup, IOService may be offline
   * if there is no link, until application code runs and can turn off
   * this management.
   */
  attribute boolean manageOfflineStatus;

  /**
   * Creates a channel for a given URI.
   *
   * @param aURI
   *        nsIURI from which to make a channel
   * @param aProxyURI
   *        nsIURI to use for proxy resolution. Can be null in which
   *        case aURI is used
   * @param aProxyFlags flags from nsIProtocolProxyService to use
   *        when resolving proxies for this new channel
   * @param aLoadingNode
   * @param aLoadingPrincipal
   * @param aTriggeringPrincipal
   * @param aSecurityFlags
   * @param aContentPolicyType
   *        These will be used as values for the nsILoadInfo object on the
   *        created channel. For details, see nsILoadInfo in nsILoadInfo.idl
   * @return reference to the new nsIChannel object
   *
   * Please note, if you provide both a loadingNode and a loadingPrincipal,
   * then loadingPrincipal must be equal to loadingNode->NodePrincipal().
   * But less error prone is to just supply a loadingNode.
   */
  nsIChannel newChannelFromURIWithProxyFlags2(in nsIURI aURI,
                                              in nsIURI aProxyURI,
                                              in unsigned long aProxyFlags,
                                              in nsIDOMNode aLoadingNode,
                                              in nsIPrincipal aLoadingPrincipal,
                                              in nsIPrincipal aTriggeringPrincipal,
                                              in unsigned long aSecurityFlags,
                                              in unsigned long aContentPolicyType);

  /**
   * ***** DEPRECATED *****
   * Please use newChannelFromURIWithProxyFlags2()
   *
   * Creates a channel for a given URI.
   *
   * @param aURI nsIURI from which to make a channel
   * @param aProxyURI nsIURI to use for proxy resolution. Can be null in which
   *        case aURI is used
   * @param aProxyFlags flags from nsIProtocolProxyService to use
   *        when resolving proxies for this new channel
   * @return reference to the new nsIChannel object
   */
   nsIChannel newChannelFromURIWithProxyFlags(in nsIURI aURI,
                                              in nsIURI aProxyURI,
                                              in unsigned long aProxyFlags);

};
