/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* vim:expandtab:shiftwidth=4:tabstop=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"

/**
 * nsIIOService2 extends nsIIOService
 */
[scriptable, uuid(b2344926-d194-41d5-b749-e6591a257428)]
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
   * @return reference to the new nsIChannel object
   */
  nsIChannel newChannelFromURIWithProxyFlags(in nsIURI aURI,
                                             in nsIURI aProxyURI,
                                             in unsigned long aProxyFlags);

  /**
   * Returns a string ID for the current network. This ID should be
   * refreshed when the network link changes.
   */
  readonly attribute ACString networkLinkID;
};
