/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 *
 * The contents of this file are subject to the Netscape Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/NPL/
 *
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation. All
 * Rights Reserved.
 *
 * Contributor(s): 
 */

#include "nsIRequest.idl"

interface nsISimpleEnumerator;
interface nsIRequestObserver;
interface nsIInterfaceRequestor;

/**
 * A load group maintains a collection of active URL requests. 
 *
 * @status UNDER_REVIEW
 */
[scriptable, uuid(19845248-29ab-11d3-8cce-0060b0fc14a3)]
interface nsILoadGroup : nsIRequest
{
    /**
     * The group observer is notified when requests are added to and removed
     * from this load group.  The groupObserver is weak referenced.
     */
    attribute nsIRequestObserver groupObserver;

    /**
     * Accesses the default load request for the group.  Each time a number
     * of requests are added to a group, the defaultLoadRequest may be set
     * to indicate that all of the requests are related to a base request.
     */
    attribute nsIRequest defaultLoadRequest;

    /**
     * Adds a new request to the group.  This will cause the default load
     * attributes to be applied to the request.  If this is a foreground
     * request then the groupObserver's onStartRequest will be called.
     */
    void addRequest(in nsIRequest request,
                    in nsISupports ctxt);

    /**
     * Removes a request from the group.  If this is a foreground request
     * then the groupObserver's onStopRequest will be called.
     */
    void removeRequest(in nsIRequest request, 
                       in nsISupports ctxt,
                       in nsresult status);

    /**
     * Returns the requests contained directly in this group.
     * Enumerator element type: nsIRequest.
     */
    readonly attribute nsISimpleEnumerator requests;

    /**
     * Returns the count of "active" requests (ie. requests without the
     * LOAD_BACKGROUND bit set).
     */
	readonly attribute unsigned long activeCount;

    /**
     * Notification callbacks for the load group.
     */
    attribute nsIInterfaceRequestor notificationCallbacks;
};
