Use RecvMsgWithPid to find real PID for zygote children

The new PID discovery protocol now works as follows:

1. The ZygoteHost allocates a UNIX socket pair and includes one end
with its fork request to the zygote process.

2. After forking, the zygote child process sends a message over the
UNIX socket pair.

3. The ZygoteHost receives the message and a PID for the sender (i.e.,
child), and writes the PID back over the control socket to the zygote.
If the zygote fails to fork a child, its end of the socket pair will
be closed, and the ZygoteHost will receive EOF instead of a message.

4. In the non-NaCl case, the zygote writes the child's PID over a pipe
for the child to receive.  (In the NaCl case, this pipe is no longer
used and no PID value is sent to the NaCl child process.)

5. Finally, the zygote sends its normal pickled response back to the
ZygoteHost.

Two manual tests to make sure this works:

1. Make sure that the "End Process" button in the "Task Manager" dialog
still terminates renderer and NaCl processes correctly under Linux.

2. Make sure that Linux Chrome release builds gracefully fail (i.e.,
don't crash) when nacl_helper is missing at chrome startup and the user
navigates to a page that uses NaCl; e.g.,
http://gonativeclient.appspot.com/demo/ and click "Game of Life".

BUG=357670
TEST=manual: see above
NOTRY=true

Review URL: https://codereview.chromium.org/269543014

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@269011 0039d316-1c4b-4281-b951-d872f2087c98
8 files changed