1 digraph URLRequestRoot {
2 subgraph cluster_legend {
5 ## The following legend is an attempt to match UML notation,
6 ## except for template_class and Factory->object, which are
7 ## invented for this diagram.
9 SubClass [label="Derived Class"];
14 Interface [label="Interface / ABC", style=dashed];
15 template_class [shape=diamond]; # Link will name parameter(s)
17 SubClass -> BaseClass [arrowhead="empty"];
18 SubClass -> Interface [arrowhead="empty", style=dashed];
19 Part -> Whole [arrowhead="diamond", label="ownership"];
20 Part -> Whole [arrowhead="odiamond", label="pointer"];
21 A -> B [arrowhead="none", headlabel="?..?", taillabel="?..?",
23 // Often a "subgraph { rank=same; .. }" is used to wrap the
24 // below to make the generative relationship distinctive
25 // from the other class relationships.
26 Factory -> object [arrowhead=veevee];
29 ## URLRequest, URLRequestJob, and subclasses
32 URLRequestJob [style=dashed];
33 URLRequestJob_Others [label="...other job types..."];
37 {URLRequestHttpJob, URLRequestJob_Others} -> URLRequestJob
40 URLRequestJob -> URLRequest [arrowhead="diamond"];
41 Filter -> URLRequestJob [arrowhead="diamond"];
42 Filter -> Filter [arrowhead="diamond", taillabel="0..1"];
46 URLRequestContext -> URLRequest [arrowhead=veevee];
50 URLRequestHttpJob -> Filter [arrowhead=veevee];
54 ## HttpTransaction, subclasses, and generative classes.
55 HttpTransactionFactory [style=dashed];
58 HttpTransaction [style=dashed];
59 HttpCache_Transaction [label="HttpCache::Transaction"];
60 HttpNetworkTransaction;
62 { HttpNetworkTransaction, HttpCache_Transaction } -> HttpTransaction
63 [style=dashed, arrowhead="empty"];
64 { HttpNetworkLayer, HttpCache } -> HttpTransactionFactory
65 [arrowhead=empty, style=dashed];
67 HttpTransaction -> HttpCache_Transaction [arrowhead=diamond];
68 HttpTransaction -> URLRequestHttpJob [arrowhead="diamond"]
72 HttpCache -> HttpCache_Transaction [arrowhead=veevee];
76 HttpTransactionFactory -> HttpTransaction [arrowhead=veevee];
80 HttpNetworkLayer -> HttpNetworkTransaction [arrowhead=veevee];
83 ## HttpStreamFactory and related.
86 HttpStream [style=dashed];
87 HttpStreamFactory_Job [label="HttpStreamFactory::Job"];
88 HttpStreamRequest_Delegate
89 [label="HttpStreamRequest::Delegate",style=dashed];
95 HttpNetworkTransaction -> HttpStreamRequest_Delegate
96 [style=dashed, arrowhead="empty"];
97 { HttpBasicStream, QuicHttpStream, SpdyHttpStream } -> HttpStream
98 [style=dashed, arrowhead="empty"];
100 HttpStreamRequest -> HttpNetworkTransaction [arrowhead="diamond"];
101 HttpStream -> HttpNetworkTransaction [arrowhead="diamond"];
102 HttpBasicState -> HttpBasicStream [arrowhead=diamond];
103 HttpStreamFactory_Job -> HttpStreamRequest
104 [arrowhead="diamond",taillabel="1..*"];
106 HttpStreamRequest_Delegate -> HttpStreamRequest
107 [arrowhead=odiamond];
108 HttpStreamFactory_Job -> HttpStreamFactory_Job
109 [arrowhead=odiamond, label="blocking_job_\nwaiting_job_"];
113 HttpStreamFactory -> HttpStreamRequest [arrowhead=veevee];
117 HttpStreamRequest -> HttpStream [arrowhead=veevee];
120 ## ClientSocketHandle and socket pools.
121 ClientSocketPool [style=dashed];
122 TransportClientSocketPool;
124 ClientSocketPool_Others [label="...others..."];
125 ClientSocketPoolBase [label="ClientSocketPoolBase", shape=diamond];
126 ClientSocketPoolBaseHelper;
129 ConnectJob [style=dashed];
132 ConnectJob_Others [label="...other connect job types..."];
133 ConnectJob_Delegate [label="ConnectJob::Delegate",style=dashed];
135 StreamSocket [style=dashed];
137 StreamSocket_Others [label="...other socket types..."];
139 TransportConnectJobHelper;
140 SingleRequestHostResolver;
142 { SSLClientSocketPool, TransportClientSocketPool,
143 ClientSocketPool_Others} -> ClientSocketPool
144 [style=dashed, arrowhead=empty];
145 ClientSocketPoolBaseHelper -> ConnectJob_Delegate
146 [arrowhead=empty, style=dashed];
147 StreamSocket -> Socket [arrowhead=empty, style=dashed];
148 { TCPClientSocket, StreamSocket_Others } -> StreamSocket
149 [arrowhead=empty, style=dashed];
150 {SSLConnectJob, TransportConnectJob, ConnectJob_Others} -> ConnectJob
151 [style=dashed, arrowhead=empty];
153 ClientSocketHandle -> HttpStreamFactory_Job [arrowhead="diamond"];
154 ClientSocketHandle -> HttpBasicState [arrowhead="diamond"];
155 ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
156 ClientSocketPoolBase -> TransportClientSocketPool
157 [arrowhead=diamond, label=TransportSocketParams];
158 ClientSocketPoolBase -> SSLClientSocketPool
159 [arrowhead=diamond, label=SSLSocketParams];
161 StreamSocket -> ClientSocketHandle [arrowhead=diamond];
162 ConnectJobFactory -> ClientSocketPoolBase [arrowhead=diamond];
163 StreamSocket -> ConnectJob [arrowhead=diamond];
164 SingleRequestHostResolver -> TransportConnectJobHelper
166 TransportConnectJobHelper -> TransportConnectJob [arrowhead=diamond];
168 ClientSocketPool -> ClientSocketHandle [arrowhead=odiamond];
169 ConnectJob_Delegate -> ConnectJob [arrowhead=odiamond];
173 ConnectJobFactory -> ConnectJob [arrowhead=veevee];
177 HttpStreamFactory_Job -> ClientSocketHandle [arrowhead=veevee];
181 TransportConnectJob -> StreamSocket [arrowhead=veevee];