Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(828)

Unified Diff: net/docs/url_request.dot

Issue 1859793002: Include class relationship diagrams in network stack documentation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleaned up and regularized .dot files. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/docs/url_request.dot
diff --git a/net/docs/url_request.dot b/net/docs/url_request.dot
new file mode 100644
index 0000000000000000000000000000000000000000..2b7c29f4fd8afc2a8dbe40b3076800cd56e0f195
--- /dev/null
+++ b/net/docs/url_request.dot
@@ -0,0 +1,185 @@
+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;
+ URLRequestJobManager;
mmenke 2016/04/07 16:00:11 Suggest removing this one - we want to get rid of
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 Done.
+ URLRequest;
+ URLRequestJob [style=dashed];
+ URLRequestJob_Others [label="...others..."];
mmenke 2016/04/07 16:00:11 Don't suppose we could squeeze in a more complete
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 Doesn't seem to hurt the diagram too much; done.
mmenke 2016/04/07 20:02:25 I think it makes sense to make the other other(s)
Randy Smith (Not in Mondays) 2016/04/07 21:37:14 Done.
+ URLRequestHttpJob;
mmenke 2016/04/07 16:00:11 There's no link between the URLRequestHttpJob and
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 Yeah. This diagram is a (semi- :-}) static object
+ 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;
+ URLRequestJobManager -> URLRequestJob [arrowhead=veevee];
+ }
+ subgraph {
+ rank=same;
+ URLRequestHttpJob -> Filter [arrowhead=veevee];
+ }
+
+
+ ## HttpTransaction, subclasses, and generative classes.
+ HttpTransactionFactory;
+ HttpCache;
+ HttpNetworkLayer;
+ HttpTransaction [style=dashed];
+ HttpCache_Transaction [label="HttpCache::Transaction"];
+ HttpNetworkTransaction;
+ HttpTransaction_Others [label="...others..."];
mmenke 2016/04/07 16:00:11 The only others here are dev tool's network simula
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 Done.
+
+ { HttpNetworkTransaction, HttpCache_Transaction,
+ HttpTransaction_Others } -> 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.
+ HttpStreamFactoryImpl;
+ HttpStreamRequest [style=dashed];
+ HttpStream [style=dashed];
+ HttpStreamFactoryImpl_Request [label="HttpStreamFactoryImpl::Request"];
+ HttpStreamFactoryImpl_Job [label="HttpStreamFactoryImpl::Job"];
mmenke 2016/04/07 16:00:11 When we create two jobs, they talk to each other (
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 I've put in an associative link labeled with the d
+ HttpStreamRequest_Delegate
+ [label="HttpStreamRequest::Delegate",style=dashed];
+ HttpBasicStream;
+ QuicHttpStream;
+ SpdyHttpStream;
+ HttpBasicState;
mmenke 2016/04/07 16:00:11 Wonder if it's even worth including this one.
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 Well, on the one hand it doesn't really add much,
mmenke 2016/04/07 20:02:25 My thinking here is that we are (Are should be) fo
mmenke 2016/04/07 20:03:17 Are should be == Or should be
Randy Smith (Not in Mondays) 2016/04/07 21:37:14 Understood and agreed with the adding noise; I'm j
+
+ HttpNetworkTransaction -> HttpStreamRequest_Delegate
+ [style=dashed, arrowhead="empty"];
+ HttpStreamFactoryImpl_Request -> HttpStreamRequest
+ [style=dashed, arrowhead="empty"];
+ { HttpBasicStream, QuicHttpStream, SpdyHttpStream } -> HttpStream
+ [style=dashed, arrowhead="empty"];
+
+ HttpStreamRequest -> HttpNetworkTransaction [arrowhead="diamond"];
+ HttpStream -> HttpNetworkTransaction [arrowhead="diamond"];
+ HttpBasicState -> HttpBasicStream [arrowhead=diamond];
+ HttpStreamFactoryImpl_Job -> HttpStreamFactoryImpl_Request
+ [arrowhead="diamond",taillabel="1..*"];
+
+ HttpStreamRequest_Delegate -> HttpStreamFactoryImpl_Request
+ [arrowhead=odiamond];
+
+ subgraph {
+ rank=same;
+ HttpStreamFactoryImpl -> 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="...others..."];
+ ConnectJob_Delegate [label="ConnectJob::Delegate",style=dashed];
+
+ StreamSocket [style=dashed];
+ TCPClientSocket;
mmenke 2016/04/07 16:00:11 Seems a little weird that you have nothing creatin
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 More lack of knowledge when I originally did the d
+ StreamSocket_Others [label="...others..."];
+
+ 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, StreamSocket_Others } -> StreamSocket
+ [arrowhead=empty, style=dashed];
+ {SSLConnectJob, TransportConnectJob, ConnectJob_Others} -> ConnectJob
+ [style=dashed, arrowhead=empty];
+
+ ClientSocketHandle -> HttpStreamFactoryImpl_Job [arrowhead="diamond"];
+ ClientSocketHandle -> HttpBasicState [arrowhead="diamond"];
+ ClientSocketPoolBaseHelper -> ClientSocketPoolBase [arrowhead=diamond];
+ ClientSocketPoolBase -> TransportClientSocketPool
+ [arrowhead=diamond, label=TransportSocketParams];
mmenke 2016/04/07 16:00:11 SSLClientSocketPool should have this same relation
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 Done. (I had thought of this diagram as doing a
+
+ 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;
+ TransportClientSocketPool -> ClientSocketHandle [arrowhead=veevee];
mmenke 2016/04/07 16:00:11 This one is incorrect - ClientSocketHandles are cr
Randy Smith (Not in Mondays) 2016/04/07 18:31:02 So one think I've realized in doing these diagrams
mmenke 2016/04/07 20:02:25 I agree the ownership is really weird here. It ma
mmenke 2016/04/07 20:04:35 By changing creation here I mean in the code, not
+ }
+}
« net/docs/pools.dot ('K') | « net/docs/pools.svg ('k') | net/docs/url_request.svg » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698