url_request.dot 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. digraph URLRequestRoot {
  2. subgraph cluster_legend {
  3. label="Legend";
  4. ## The following legend is an attempt to match UML notation,
  5. ## except for template_class and Factory->object, which are
  6. ## invented for this diagram.
  7. BaseClass;
  8. SubClass [label="Derived Class"];
  9. Whole;
  10. Part;
  11. A;
  12. B;
  13. Interface [label="Interface / ABC", style=dashed];
  14. template_class [shape=diamond]; # Link will name parameter(s)
  15. SubClass -> BaseClass [arrowhead="empty"];
  16. SubClass -> Interface [arrowhead="empty", style=dashed];
  17. Part -> Whole [arrowhead="diamond", label="ownership"];
  18. Part -> Whole [arrowhead="odiamond", label="pointer"];
  19. A -> B [arrowhead="none", headlabel="?..?", taillabel="?..?",
  20. label="association"];
  21. // Often a "subgraph { rank=same; .. }" is used to wrap the
  22. // below to make the generative relationship distinctive
  23. // from the other class relationships.
  24. Factory -> object [arrowhead=veevee];
  25. };
  26. ## URLRequest, URLRequestJob, and subclasses
  27. URLRequestContext;
  28. URLRequest;
  29. URLRequestJob [style=dashed];
  30. URLRequestJob_Others [label="...other job types..."];
  31. URLRequestHttpJob;
  32. Filter;
  33. {URLRequestHttpJob, URLRequestJob_Others} -> URLRequestJob
  34. [arrowhead="empty"];
  35. URLRequestJob -> URLRequest [arrowhead="diamond"];
  36. Filter -> URLRequestJob [arrowhead="diamond"];
  37. Filter -> Filter [arrowhead="diamond", taillabel="0..1"];
  38. subgraph {
  39. rank=same;
  40. URLRequestContext -> URLRequest [arrowhead=veevee];
  41. }
  42. subgraph {
  43. rank=same;
  44. URLRequestHttpJob -> Filter [arrowhead=veevee];
  45. }
  46. ## HttpTransaction, subclasses, and generative classes.
  47. HttpTransactionFactory [style=dashed];
  48. HttpCache;
  49. HttpNetworkLayer;
  50. HttpTransaction [style=dashed];
  51. HttpCache_Transaction [label="HttpCache::Transaction"];
  52. HttpNetworkTransaction;
  53. { HttpNetworkTransaction, HttpCache_Transaction } -> HttpTransaction
  54. [style=dashed, arrowhead="empty"];
  55. { HttpNetworkLayer, HttpCache } -> HttpTransactionFactory
  56. [arrowhead=empty, style=dashed];
  57. HttpTransaction -> HttpCache_Transaction [arrowhead=diamond];
  58. HttpTransaction -> URLRequestHttpJob [arrowhead="diamond"]
  59. subgraph {
  60. rank=same;
  61. HttpCache -> HttpCache_Transaction [arrowhead=veevee];
  62. }
  63. subgraph {
  64. rank=same;
  65. HttpTransactionFactory -> HttpTransaction [arrowhead=veevee];
  66. }
  67. subgraph {
  68. rank=same;
  69. HttpNetworkLayer -> HttpNetworkTransaction [arrowhead=veevee];
  70. }
  71. ## HttpStreamFactory and related.
  72. HttpStreamFactory;
  73. HttpStreamRequest;
  74. HttpStream [style=dashed];
  75. HttpStreamFactory_Job [label="HttpStreamFactory::Job"];
  76. HttpStreamRequest_Delegate
  77. [label="HttpStreamRequest::Delegate",style=dashed];
  78. HttpBasicStream;
  79. QuicHttpStream;
  80. SpdyHttpStream;
  81. HttpBasicState;
  82. HttpNetworkTransaction -> HttpStreamRequest_Delegate
  83. [style=dashed, arrowhead="empty"];
  84. { HttpBasicStream, QuicHttpStream, SpdyHttpStream } -> HttpStream
  85. [style=dashed, arrowhead="empty"];
  86. HttpStreamRequest -> HttpNetworkTransaction [arrowhead="diamond"];
  87. HttpStream -> HttpNetworkTransaction [arrowhead="diamond"];
  88. HttpBasicState -> HttpBasicStream [arrowhead=diamond];
  89. HttpStreamFactory_Job -> HttpStreamRequest
  90. [arrowhead="diamond",taillabel="1..*"];
  91. HttpStreamRequest_Delegate -> HttpStreamRequest
  92. [arrowhead=odiamond];
  93. HttpStreamFactory_Job -> HttpStreamFactory_Job
  94. [arrowhead=odiamond, label="blocking_job_\nwaiting_job_"];
  95. subgraph {
  96. rank=same;
  97. HttpStreamFactory -> HttpStreamRequest [arrowhead=veevee];
  98. }
  99. subgraph {
  100. rank=same;
  101. HttpStreamRequest -> HttpStream [arrowhead=veevee];
  102. }
  103. ## ClientSocketHandle and socket pools.
  104. ClientSocketPool [style=dashed];
  105. TransportClientSocketPool;
  106. SSLClientSocketPool;
  107. ClientSocketPool_Others [label="...others..."];
  108. ClientSocketPoolBase [label="ClientSocketPoolBase", shape=diamond];
  109. ClientSocketPoolBaseHelper;
  110. ConnectJobFactory;
  111. ConnectJob [style=dashed];
  112. TransportConnectJob;
  113. SSLConnectJob;
  114. ConnectJob_Others [label="...other connect job types..."];
  115. ConnectJob_Delegate [label="ConnectJob::Delegate",style=dashed];
  116. StreamSocket [style=dashed];
  117. TransportClientSocket [style=dashed];
  118. TCPClientSocket;
  119. StreamSocket_Others [label="...other socket types..."];
  120. TransportConnectJobHelper;
  121. SingleRequestHostResolver;
  122. { SSLClientSocketPool, TransportClientSocketPool,
  123. ClientSocketPool_Others} -> ClientSocketPool
  124. [style=dashed, arrowhead=empty];
  125. ClientSocketPoolBaseHelper -> ConnectJob_Delegate
  126. [arrowhead=empty, style=dashed];
  127. StreamSocket -> Socket [arrowhead=empty, style=dashed];
  128. TCPClientSocket -> TransportClientSocket
  129. [arrowhead=empty, style=dashed];
  130. TransportClientSocket -> StreamSocket
  131. [arrowhead=empty, style=dashed];
  132. StreamSocket_Others -> StreamSocket
  133. [arrowhead=empty, style=dashed];
  134. {SSLConnectJob, TransportConnectJob, ConnectJob_Others} -> ConnectJob
  135. [style=dashed, arrowhead=empty];
  136. ClientSocketHandle -> HttpStreamFactory_Job [arrowhead="diamond"];
  137. ClientSocketHandle -> HttpBasicState [arrowhead="diamond"];
  138. ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
  139. ClientSocketPoolBase -> TransportClientSocketPool
  140. [arrowhead=diamond, label=TransportSocketParams];
  141. ClientSocketPoolBase -> SSLClientSocketPool
  142. [arrowhead=diamond, label=SSLSocketParams];
  143. StreamSocket -> ClientSocketHandle [arrowhead=diamond];
  144. ConnectJobFactory -> ClientSocketPoolBase [arrowhead=diamond];
  145. StreamSocket -> ConnectJob [arrowhead=diamond];
  146. SingleRequestHostResolver -> TransportConnectJobHelper
  147. [arrowhead=diamond];
  148. TransportConnectJobHelper -> TransportConnectJob [arrowhead=diamond];
  149. ClientSocketPool -> ClientSocketHandle [arrowhead=odiamond];
  150. ConnectJob_Delegate -> ConnectJob [arrowhead=odiamond];
  151. subgraph {
  152. rank=same;
  153. ConnectJobFactory -> ConnectJob [arrowhead=veevee];
  154. }
  155. subgraph {
  156. rank=same;
  157. HttpStreamFactory_Job -> ClientSocketHandle [arrowhead=veevee];
  158. }
  159. subgraph {
  160. rank=same;
  161. TransportConnectJob -> StreamSocket [arrowhead=veevee];
  162. }
  163. }