blob: e7946efd386c193478b6d7d238b29f0a02792a60 [file] [log] [blame]
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];
TransportClientSocket [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 -> TransportClientSocket
[arrowhead=empty, style=dashed];
TransportClientSocket -> StreamSocket
[arrowhead=empty, style=dashed];
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];
}
}