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 [style=dashed];
    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.
    HttpStreamFactory;
    HttpStreamRequest;
    HttpStream [style=dashed];
    HttpStreamFactory_Job [label="HttpStreamFactory::Job"];
    HttpStreamRequest_Delegate
	[label="HttpStreamRequest::Delegate",style=dashed];
    HttpBasicStream;
    QuicHttpStream;
    SpdyHttpStream;
    HttpBasicState;

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

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

    HttpStreamRequest_Delegate -> HttpStreamRequest
        [arrowhead=odiamond];
    HttpStreamFactory_Job -> HttpStreamFactory_Job
        [arrowhead=odiamond, label="blocking_job_\nwaiting_job_"];

    subgraph {
	rank=same;
	HttpStreamFactory -> 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 -> HttpStreamFactory_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;
	HttpStreamFactory_Job -> ClientSocketHandle [arrowhead=veevee];
    }
    subgraph {
        rank=same;
	TransportConnectJob -> StreamSocket [arrowhead=veevee];
    }
}
