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