/* -*- Mode: C++; tab-width: 2; 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 "nsIRequest.idl" interface nsISimpleEnumerator; interface nsIRequestObserver; interface nsIInterfaceRequestor; interface nsILoadGroupConnectionInfo; typedef unsigned long nsLoadFlags; /** * A load group maintains a collection of nsIRequest objects. */ [scriptable, uuid(afb57ac2-bce5-4ee3-bb34-385089a9ba5c)] 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. * * The load group inherits its load flags from the default load request. * If the default load request is NULL, then the group's load flags are * not changed. */ attribute nsIRequest defaultLoadRequest; /** * Adds a new request to the group. This will cause the default load * flags to be applied to the request. If this is a foreground * request then the groupObserver's onStartRequest will be called. * * If the request is the default load request or if the default load * request is null, then the load group will inherit its load flags from * the request. */ void addRequest(in nsIRequest aRequest, in nsISupports aContext); /** * Removes a request from the group. If this is a foreground request * then the groupObserver's onStopRequest will be called. * * By the time this call ends, aRequest will have been removed from the * loadgroup, even if this function throws an exception. */ void removeRequest(in nsIRequest aRequest, in nsISupports aContext, in nsresult aStatus); /** * 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; /** * Connection information for managing things like js/css * connection blocking, and per-tab connection grouping */ readonly attribute nsILoadGroupConnectionInfo connectionInfo; /** * The set of load flags that will be added to all new requests added to * this group. Any existing requests in the load group are not modified, * so it is expected these flags will be added before requests are added * to the group - typically via nsIDocShell::defaultLoadFlags on a new * docShell. * Note that these flags are *not* added to the default request for the * load group; it is expected the default request will already have these * flags (again, courtesy of setting nsIDocShell::defaultLoadFlags before * the docShell has created the default request.) */ attribute nsLoadFlags defaultLoadFlags; }; %{C++ // Forward-declare mozilla::net::SpdyPushCache namespace mozilla { namespace net { class SpdyPushCache; } } %} [ptr] native SpdyPushCachePtr(mozilla::net::SpdyPushCache); /** * Used to maintain state about the connections of a load group and * how they interact with blocking items like HEAD css/js loads. */ [uuid(fdc9659c-b597-4ac0-9c9e-14b04dbb682f)] interface nsILoadGroupConnectionInfo : nsISupports { /** * Number of active blocking transactions associated with this load group */ readonly attribute unsigned long blockingTransactionCount; /** * Increase the number of active blocking transactions associated * with this load group by one. */ void addBlockingTransaction(); /** * Decrease the number of active blocking transactions associated * with this load group by one. The return value is the number of remaining * blockers. */ unsigned long removeBlockingTransaction(); /* reading this attribute gives out weak pointers to the push * cache. The nsILoadGroupConnectionInfo implemenation owns the cache * and will destroy it when overwritten or when the load group * ends. */ [noscript] attribute SpdyPushCachePtr spdyPushCache; };