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 (4a108e94d3e2)

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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
/* -*- 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;
};