• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1digraph URLRequestRoot {
2    subgraph cluster_legend {
3	label="Legend";
4
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.
8	BaseClass;
9	SubClass [label="Derived Class"];
10	Whole;
11	Part;
12	A;
13	B;
14	Interface [label="Interface / ABC", style=dashed];
15	template_class [shape=diamond]; # Link will name parameter(s)
16
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="?..?",
22		label="association"];
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];
27    };
28
29    ## URLRequest, URLRequestJob, and subclasses
30    URLRequestContext;
31    URLRequest;
32    URLRequestJob [style=dashed];
33    URLRequestJob_Others [label="...other job types..."];
34    URLRequestHttpJob;
35    Filter;
36
37    {URLRequestHttpJob, URLRequestJob_Others} -> URLRequestJob
38	[arrowhead="empty"];
39
40    URLRequestJob -> URLRequest [arrowhead="diamond"];
41    Filter -> URLRequestJob [arrowhead="diamond"];
42    Filter -> Filter [arrowhead="diamond", taillabel="0..1"];
43
44    subgraph {
45	rank=same;
46	URLRequestContext -> URLRequest [arrowhead=veevee];
47    }
48    subgraph {
49	rank=same;
50	URLRequestHttpJob -> Filter [arrowhead=veevee];
51    }
52
53
54    ## HttpTransaction, subclasses, and generative classes.
55    HttpTransactionFactory [style=dashed];
56    HttpCache;
57    HttpNetworkLayer;
58    HttpTransaction [style=dashed];
59    HttpCache_Transaction [label="HttpCache::Transaction"];
60    HttpNetworkTransaction;
61
62    { HttpNetworkTransaction, HttpCache_Transaction } -> HttpTransaction
63	[style=dashed, arrowhead="empty"];
64    { HttpNetworkLayer, HttpCache } -> HttpTransactionFactory
65	[arrowhead=empty, style=dashed];
66
67    HttpTransaction -> HttpCache_Transaction  [arrowhead=diamond];
68    HttpTransaction -> URLRequestHttpJob [arrowhead="diamond"]
69
70    subgraph {
71	rank=same;
72	HttpCache -> HttpCache_Transaction [arrowhead=veevee];
73    }
74    subgraph {
75	rank=same;
76	HttpTransactionFactory -> HttpTransaction [arrowhead=veevee];
77    }
78    subgraph {
79	rank=same;
80	HttpNetworkLayer -> HttpNetworkTransaction [arrowhead=veevee];
81    }
82
83    ## HttpStreamFactory and related.
84    HttpStreamFactory;
85    HttpStreamRequest;
86    HttpStream [style=dashed];
87    HttpStreamFactory_Job [label="HttpStreamFactory::Job"];
88    HttpStreamRequest_Delegate
89	[label="HttpStreamRequest::Delegate",style=dashed];
90    HttpBasicStream;
91    QuicHttpStream;
92    SpdyHttpStream;
93    HttpBasicState;
94
95    HttpNetworkTransaction -> HttpStreamRequest_Delegate
96	[style=dashed, arrowhead="empty"];
97    { HttpBasicStream, QuicHttpStream, SpdyHttpStream } -> HttpStream
98	[style=dashed, arrowhead="empty"];
99
100    HttpStreamRequest -> HttpNetworkTransaction [arrowhead="diamond"];
101    HttpStream -> HttpNetworkTransaction [arrowhead="diamond"];
102    HttpBasicState -> HttpBasicStream [arrowhead=diamond];
103    HttpStreamFactory_Job -> HttpStreamRequest
104	[arrowhead="diamond",taillabel="1..*"];
105
106    HttpStreamRequest_Delegate -> HttpStreamRequest
107        [arrowhead=odiamond];
108    HttpStreamFactory_Job -> HttpStreamFactory_Job
109        [arrowhead=odiamond, label="blocking_job_\nwaiting_job_"];
110
111    subgraph {
112	rank=same;
113	HttpStreamFactory -> HttpStreamRequest [arrowhead=veevee];
114    }
115    subgraph {
116	rank=same;
117	HttpStreamRequest -> HttpStream [arrowhead=veevee];
118    }
119
120    ## ClientSocketHandle and socket pools.
121    ClientSocketPool [style=dashed];
122    TransportClientSocketPool;
123    SSLClientSocketPool;
124    ClientSocketPool_Others [label="...others..."];
125    ClientSocketPoolBase [label="ClientSocketPoolBase", shape=diamond];
126    ClientSocketPoolBaseHelper;
127
128    ConnectJobFactory;
129    ConnectJob [style=dashed];
130    TransportConnectJob;
131    SSLConnectJob;
132    ConnectJob_Others [label="...other connect job types..."];
133    ConnectJob_Delegate [label="ConnectJob::Delegate",style=dashed];
134
135    StreamSocket [style=dashed];
136    TransportClientSocket [style=dashed];
137    TCPClientSocket;
138    StreamSocket_Others [label="...other socket types..."];
139
140    TransportConnectJobHelper;
141    SingleRequestHostResolver;
142
143    { SSLClientSocketPool, TransportClientSocketPool,
144      ClientSocketPool_Others} -> ClientSocketPool
145	[style=dashed, arrowhead=empty];
146    ClientSocketPoolBaseHelper -> ConnectJob_Delegate
147	[arrowhead=empty, style=dashed];
148    StreamSocket -> Socket [arrowhead=empty, style=dashed];
149    TCPClientSocket -> TransportClientSocket
150        [arrowhead=empty, style=dashed];
151    TransportClientSocket -> StreamSocket
152        [arrowhead=empty, style=dashed];
153    StreamSocket_Others -> StreamSocket
154	[arrowhead=empty, style=dashed];
155    {SSLConnectJob, TransportConnectJob, ConnectJob_Others} -> ConnectJob
156	[style=dashed, arrowhead=empty];
157
158    ClientSocketHandle -> HttpStreamFactory_Job [arrowhead="diamond"];
159    ClientSocketHandle -> HttpBasicState [arrowhead="diamond"];
160    ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
161    ClientSocketPoolBase -> TransportClientSocketPool
162	[arrowhead=diamond, label=TransportSocketParams];
163    ClientSocketPoolBase -> SSLClientSocketPool
164	[arrowhead=diamond, label=SSLSocketParams];
165
166    StreamSocket -> ClientSocketHandle [arrowhead=diamond];
167    ConnectJobFactory -> ClientSocketPoolBase [arrowhead=diamond];
168    StreamSocket -> ConnectJob [arrowhead=diamond];
169    SingleRequestHostResolver -> TransportConnectJobHelper
170	[arrowhead=diamond];
171    TransportConnectJobHelper -> TransportConnectJob [arrowhead=diamond];
172
173    ClientSocketPool -> ClientSocketHandle  [arrowhead=odiamond];
174    ConnectJob_Delegate -> ConnectJob  [arrowhead=odiamond];
175
176    subgraph {
177	rank=same;
178	ConnectJobFactory -> ConnectJob [arrowhead=veevee];
179    }
180    subgraph {
181	rank=same;
182	HttpStreamFactory_Job -> ClientSocketHandle [arrowhead=veevee];
183    }
184    subgraph {
185        rank=same;
186	TransportConnectJob -> StreamSocket [arrowhead=veevee];
187    }
188}
189