Transmit the response's body datapipe in CommitNavigation().

# Summary of the current behavior:

When a navigation occurs, the mojo::URLLoaderClient interface is first
bound to the content::NavigationURLLoaderImpl in the browser process.
When the browser knows in which renderer process the navigation will
commit, the interface is bound to the content::URLLoaderClientImpl in
the renderer process to continue the navigation. The switching from one
to another happens when mojo::URLLoaderClient::OnReceiveResponse() is
called. This is described here: https://goo.gl/Rrrc7n

# What are we trying to do:

After the mojo::URLLoaderClient interface is unbound in the browser
process and bound again in the renderer process, it takes some amount of
time to receive URLLoader::OnStartLoadingResponseBody(). It may be worth
sending the data pipe with RenderFrameHostImpl::CommitNavigation() and
give it to the renderer process immediatly instead of waiting for it. It
would allow the Renderer process to get the main resource's data
earlier, especially when the renderer process is busy.

Note: It doesn't look like there are any strong reasons to make
      URLLoaderClient::OnReceiveResponse(response_head) and
      URLLoaderClient::OnStartLoadingResponseBody(response_body)
      separate messages, maybe at some point, they could be merged into:
      URLLoaderClient::OnReceiveResponse(response_head, response_body)

# What this CL does:

This CL makes the switch to happen in
URLLoaderClient::OnStartLoadingResponseBody(). The data pipe is
transmitted in CommitNavigation().

This is enabled/disabled using the NavigationImmediateResponse experiment
The goal is to look for performance improvement or regressions on
Canary.

Bug: 831155
Change-Id: Id6cf667fdc1482baf27f41aab754e58d9a5a569b
Reviewed-on: https://chromium-review.googlesource.com/1100830
Reviewed-by: Yutaka Hirano <yhirano@chromium.org>
Reviewed-by: Peter Kasting <pkasting@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#573276}
33 files changed