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

Issue 657113002: Add basic TCP socket mojo implementation (Closed)

Created:
6 years, 2 months ago by brettw
Modified:
6 years, 2 months ago
CC:
chromium-reviews, cbentzel+watch_chromium.org, qsr+mojo_chromium.org, viettrungluu+watch_chromium.org, yzshen+watch_chromium.org, abarth-chromium, Aaron Boodman, darin (slow to review), ben+mojo_chromium.org
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Project:
chromium
Visibility:
Public.

Description

Add TCP socket mojo implementation. This is a very preliminary pass and not tested very well. Open issues: It seems there is no way to wait on a mojo data pipe without using chromium message loops, which I was reluctant to do in my example. We'll need this before doing any nontrivial sending or receiving, including testing of the infrastructure. We need to be able to pass the net work type (IPv4 or v6) to the connect function that bypasses bind. I removed the code here and documented that it doesn't work yet. R=yzshen@chromium.org Committed: https://chromium.googlesource.com/chromium/src/+/4dea7b416c95292d14e2d2a2cfd18cd57268be11

Patch Set 1 #

Patch Set 2 : #

Patch Set 3 : #

Patch Set 4 : #

Total comments: 3

Patch Set 5 : review comments #

Total comments: 1

Patch Set 6 : more review comment #

Total comments: 2

Patch Set 7 : #

Total comments: 15
Unified diffs Side-by-side diffs Delta from patch set Stats (+383 lines, -43 lines) Patch
M mojo/examples/http_server/BUILD.gn View 1 1 chunk +1 line, -0 lines 0 comments Download
M mojo/examples/http_server/http_server.cc View 1 2 3 4 5 6 3 chunks +139 lines, -10 lines 3 comments Download
M mojo/services/network/network_service_impl.cc View 1 2 3 2 chunks +4 lines, -26 lines 0 comments Download
M mojo/services/network/tcp_bound_socket_impl.h View 1 2 2 chunks +11 lines, -0 lines 0 comments Download
M mojo/services/network/tcp_bound_socket_impl.cc View 1 2 3 3 chunks +45 lines, -6 lines 0 comments Download
M mojo/services/network/tcp_connected_socket_impl.h View 2 chunks +31 lines, -0 lines 5 comments Download
M mojo/services/network/tcp_connected_socket_impl.cc View 1 2 3 4 5 2 chunks +143 lines, -1 line 7 comments Download
M mojo/services/public/interfaces/network/network_service.mojom View 1 2 1 chunk +5 lines, -0 lines 0 comments Download
M mojo/services/public/interfaces/network/tcp_server_socket.mojom View 1 2 3 4 1 chunk +4 lines, -0 lines 0 comments Download

Messages

Total messages: 19 (7 generated)
brettw
6 years, 2 months ago (2014-10-15 20:20:13 UTC) #2
yzshen1
https://codereview.chromium.org/657113002/diff/60001/mojo/examples/http_server/http_server.cc File mojo/examples/http_server/http_server.cc (right): https://codereview.chromium.org/657113002/diff/60001/mojo/examples/http_server/http_server.cc#newcode79 mojo/examples/http_server/http_server.cc:79: // specified above. This call won't work because the ...
6 years, 2 months ago (2014-10-15 21:07:58 UTC) #3
brettw
Review comments addressed. I sprinkled Close() calls around the various error cases.
6 years, 2 months ago (2014-10-15 22:30:15 UTC) #4
yzshen1
LGTM https://codereview.chromium.org/657113002/diff/80001/mojo/services/network/tcp_connected_socket_impl.cc File mojo/services/network/tcp_connected_socket_impl.cc (right): https://codereview.chromium.org/657113002/diff/80001/mojo/services/network/tcp_connected_socket_impl.cc#newcode140 mojo/services/network/tcp_connected_socket_impl.cc:140: if (result < 0) { I wonder why ...
6 years, 2 months ago (2014-10-15 22:35:07 UTC) #5
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/657113002/100001
6 years, 2 months ago (2014-10-16 16:45:34 UTC) #7
commit-bot: I haz the power
Try jobs failed on following builders: android_chromium_gn_compile_rel on tryserver.chromium.linux (http://build.chromium.org/p/tryserver.chromium.linux/builders/android_chromium_gn_compile_rel/builds/25068)
6 years, 2 months ago (2014-10-16 17:58:00 UTC) #9
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/657113002/120001
6 years, 2 months ago (2014-10-16 19:51:44 UTC) #11
commit-bot: I haz the power
Try jobs failed on following builders: win_gpu_triggered_tests on tryserver.chromium.gpu (http://build.chromium.org/p/tryserver.chromium.gpu/builders/win_gpu_triggered_tests/builds/64410)
6 years, 2 months ago (2014-10-16 21:46:21 UTC) #13
commit-bot: I haz the power
Patchset 7 (id:??) landed as https://crrev.com/4dea7b416c95292d14e2d2a2cfd18cd57268be11 Cr-Commit-Position: refs/heads/master@{#300003}
6 years, 2 months ago (2014-10-16 23:13:55 UTC) #14
brettw
Committed patchset #7 (id:120001) manually as 4dea7b416c95292d14e2d2a2cfd18cd57268be11 (presubmit successful).
6 years, 2 months ago (2014-10-16 23:14:48 UTC) #15
willchan no longer on Chromium
https://codereview.chromium.org/657113002/diff/100001/mojo/services/network/tcp_bound_socket_impl.cc File mojo/services/network/tcp_bound_socket_impl.cc (right): https://codereview.chromium.org/657113002/diff/100001/mojo/services/network/tcp_bound_socket_impl.cc#newcode80 mojo/services/network/tcp_bound_socket_impl.cc:80: callback.Run(MakeNetworkError(net::ERR_FAILED)); We use ERR_UNEXPECTED for places where we believe ...
6 years, 2 months ago (2014-10-17 00:41:01 UTC) #17
mmenke
6 years, 2 months ago (2014-10-17 16:49:56 UTC) #19
Message was sent while issue was closed.
https://codereview.chromium.org/657113002/diff/120001/mojo/examples/http_serv...
File mojo/examples/http_server/http_server.cc (right):

https://codereview.chromium.org/657113002/diff/120001/mojo/examples/http_serv...
mojo/examples/http_server/http_server.cc:6: #include <arpa/inet.h>
alphabetize.

https://codereview.chromium.org/657113002/diff/120001/mojo/examples/http_serv...
mojo/examples/http_server/http_server.cc:26: "Hello, world\n";
Suggest using CRLFs, per spec.

https://codereview.chromium.org/657113002/diff/120001/mojo/examples/http_serv...
mojo/examples/http_server/http_server.cc:32: Connection(TCPConnectedSocketPtr
conn,
nit:  Google style guide discourages abbreviations, so I suggest just writing
out connection.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
File mojo/services/network/tcp_connected_socket_impl.cc (right):

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.cc:60: } else if (read_result >=
0) {
Early return is generally preferred over using "else" in Chrome code.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.cc:62: DidReceive(true,
read_result);
Can't we call this on the read_result < 0 case, too?  DidReceive has to handle
errors, too.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.cc:65: // TODO(brettw) notify
caller of error.
Is there a reason not to have "pending_receive_ = NULL" here?

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.cc:77: if (result < 0) {
A 0-byte read means the socket was closed.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.cc:89: if
(completed_synchronously) {
optional:  Just a matter of personal preference, but I think it's a bit prettier
for methods like this not to have a variable indicating what the stack looks
like when they're called.  Does require an extra method, though, and a couple
more if's.

I think the code is a bit cleaner as:

void ReadMore() {
  ...
  if (result == ERR_IO_PENDING)
    return;
  if (HandleReadResult(result) == net::OK) {
    // PostTask to call ReadMore asynchronously.
  }
}

void OnReadComplete(int result) {
  if (HandleReadResult(result)== net::OK)
    ReadMore();
}

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.cc:126: // Pending I/O, wait for
result in DidSend().
Again, early return is generally preferred.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.cc:129: DidSend(true,
write_result);
Should handle error case here.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
File mojo/services/network/tcp_connected_socket_impl.h (right):

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.h:13: #include
"net/socket/tcp_socket.h"
Think we can just forward declare this.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.h:30: void ReceiveMore();
Really could use some more method-level docs.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.h:31: void
OnReceiveStreamReady(MojoResult result);
Include header for MojoResult?

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.h:54:
scoped_refptr<MojoToNetPendingBuffer> pending_send_;
Need to include ref_counted.h.

https://codereview.chromium.org/657113002/diff/120001/mojo/services/network/t...
mojo/services/network/tcp_connected_socket_impl.h:56:
base::WeakPtrFactory<TCPConnectedSocketImpl> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN?

Powered by Google App Engine
This is Rietveld 408576698