digraph URLRequestRoot {
    subgraph cluster_legend {
	label="Legend";

	## The following legend is an attempt to match UML notation,
	## except for template_class and Factory->object, which are
	## invented for this diagram.
	BaseClass;
	SubClass [label="Derived Class"];
	Whole;
	Part;
	A;
	B;
	Interface [label="Interface / ABC", style=dashed];
	template_class [shape=diamond]; # Link will name parameter(s)

	SubClass -> BaseClass [arrowhead="empty"];
	SubClass -> Interface [arrowhead="empty", style=dashed];
	Part -> Whole [arrowhead="diamond", label="ownership"];
	Part -> Whole [arrowhead="odiamond", label="pointer"];
	A -> B [arrowhead="none", headlabel="?..?", taillabel="?..?",
		label="association"];
	// Often a "subgraph { rank=same; .. }" is used to wrap the
	// below to make the generative relationship distinctive
	// from the other class relationships.
	Factory -> object [arrowhead=veevee];
    };

    ## URLRequest, URLRequestJob, and subclasses
    URLRequestContext;
    URLRequest;
    URLRequestJob [style=dashed];
    URLRequestJob_Others [label="...other job types..."];
    URLRequestHttpJob;
    Filter;

    {URLRequestHttpJob, URLRequestJob_Others} -> URLRequestJob
	[arrowhead="empty"];

    URLRequestJob -> URLRequest [arrowhead="diamond"];
    Filter -> URLRequestJob [arrowhead="diamond"];
    Filter -> Filter [arrowhead="diamond", taillabel="0..1"];

    subgraph {
	rank=same;
	URLRequestContext -> URLRequest [arrowhead=veevee];
    }
    subgraph {
	rank=same;
	URLRequestHttpJob -> Filter [arrowhead=veevee];
    }


    ## HttpTransaction, subclasses, and generative classes.
    HttpTransactionFactory;
    HttpCache;
    HttpNetworkLayer;
    HttpTransaction [style=dashed];
    HttpCache_Transaction [label="HttpCache::Transaction"];
    HttpNetworkTransaction;

    { HttpNetworkTransaction, HttpCache_Transaction } -> HttpTransaction
	[style=dashed, arrowhead="empty"];
    { HttpNetworkLayer, HttpCache } -> HttpTransactionFactory
	[arrowhead=empty, style=dashed];

    HttpTransaction -> HttpCache_Transaction  [arrowhead=diamond];
    HttpTransaction -> URLRequestHttpJob [arrowhead="diamond"]

    subgraph {
	rank=same;
	HttpCache -> HttpCache_Transaction [arrowhead=veevee];
    }
    subgraph {
	rank=same;
	HttpTransactionFactory -> HttpTransaction [arrowhead=veevee];
    }
    subgraph {
	rank=same;
	HttpNetworkLayer -> HttpNetworkTransaction [arrowhead=veevee];
    }

    ## HttpStreamFactory and related.
    HttpStreamFactoryImpl;
    HttpStreamRequest [style=dashed];
    HttpStream [style=dashed];
    HttpStreamFactoryImpl_Request [label="HttpStreamFactoryImpl::Request"];
    HttpStreamFactoryImpl_Job [label="HttpStreamFactoryImpl::Job"];
    HttpStreamRequest_Delegate
	[label="HttpStreamRequest::Delegate",style=dashed];
    HttpBasicStream;
    QuicHttpStream;
    SpdyHttpStream;
    HttpBasicState;

    HttpNetworkTransaction -> HttpStreamRequest_Delegate
	[style=dashed, arrowhead="empty"];
    HttpStreamFactoryImpl_Request -> HttpStreamRequest
	[style=dashed, arrowhead="empty"];
    { HttpBasicStream, QuicHttpStream, SpdyHttpStream } -> HttpStream
	[style=dashed, arrowhead="empty"];

    HttpStreamRequest -> HttpNetworkTransaction [arrowhead="diamond"];
    HttpStream -> HttpNetworkTransaction [arrowhead="diamond"];
    HttpBasicState -> HttpBasicStream [arrowhead=diamond];
    HttpStreamFactoryImpl_Job -> HttpStreamFactoryImpl_Request
	[arrowhead="diamond",taillabel="1..*"];

    HttpStreamRequest_Delegate -> HttpStreamFactoryImpl_Request
        [arrowhead=odiamond];
    HttpStreamFactoryImpl_Job -> HttpStreamFactoryImpl_Job
        [arrowhead=odiamond, label="blocking_job_\nwaiting_job_"];

    subgraph {
	rank=same;
	HttpStreamFactoryImpl -> HttpStreamRequest [arrowhead=veevee];
    }
    subgraph {
	rank=same;
	HttpStreamRequest -> HttpStream [arrowhead=veevee];
    }

    ## ClientSocketHandle and socket pools.
    ClientSocketPool [style=dashed];
    TransportClientSocketPool;
    SSLClientSocketPool;
    ClientSocketPool_Others [label="...others..."];
    ClientSocketPoolBase [label="ClientSocketPoolBase", shape=diamond];
    ClientSocketPoolBaseHelper;

    ConnectJobFactory;
    ConnectJob [style=dashed];
    TransportConnectJob;
    SSLConnectJob;
    ConnectJob_Others [label="...other connect job types..."];
    ConnectJob_Delegate [label="ConnectJob::Delegate",style=dashed];

    StreamSocket [style=dashed];
    TCPClientSocket;
    StreamSocket_Others [label="...other socket types..."];

    TransportConnectJobHelper;
    SingleRequestHostResolver;

    { SSLClientSocketPool, TransportClientSocketPool,
      ClientSocketPool_Others} -> ClientSocketPool
	[style=dashed, arrowhead=empty];
    ClientSocketPoolBaseHelper -> ConnectJob_Delegate
	[arrowhead=empty, style=dashed];
    StreamSocket -> Socket [arrowhead=empty, style=dashed];
    { TCPClientSocket, StreamSocket_Others } -> StreamSocket
	[arrowhead=empty, style=dashed];
    {SSLConnectJob, TransportConnectJob, ConnectJob_Others} -> ConnectJob
	[style=dashed, arrowhead=empty];

    ClientSocketHandle -> HttpStreamFactoryImpl_Job [arrowhead="diamond"];
    ClientSocketHandle -> HttpBasicState [arrowhead="diamond"];
    ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
    ClientSocketPoolBase -> TransportClientSocketPool
	[arrowhead=diamond, label=TransportSocketParams];
    ClientSocketPoolBase -> SSLClientSocketPool
	[arrowhead=diamond, label=SSLSocketParams];

    StreamSocket -> ClientSocketHandle [arrowhead=diamond];
    ConnectJobFactory -> ClientSocketPoolBase [arrowhead=diamond];
    StreamSocket -> ConnectJob [arrowhead=diamond];
    SingleRequestHostResolver -> TransportConnectJobHelper
	[arrowhead=diamond];
    TransportConnectJobHelper -> TransportConnectJob [arrowhead=diamond];

    ClientSocketPool -> ClientSocketHandle  [arrowhead=odiamond];
    ConnectJob_Delegate -> ConnectJob  [arrowhead=odiamond];

    subgraph {
	rank=same;
	ConnectJobFactory -> ConnectJob [arrowhead=veevee];
    }
    subgraph {
	rank=same;
	HttpStreamFactoryImpl_Job -> ClientSocketHandle [arrowhead=veevee];
    }
    subgraph {
        rank=same;
	TransportConnectJob -> StreamSocket [arrowhead=veevee];
    }
}
