Replace placeholder document loader with a struct

Placeholder document loader is set while navigation is happening in the
browser process (through CreatePlaceholderDocumentLoader).

It does not ever load the document, and just sits around to:
- act as a flag that navigation is ongoing;
- fire DidFailProvisionalLoad callback when detaching;
- be used mistakenly by some calls to GetProvisionalDocumentLoader().

This patch replaces placeholder document loader with
FrameLoader::client_navigation_ struct, and clears/cancels it next to
provisional_document_loader_. Some GetProvisionalDocumentLoader callsites
are updated to use |browser_side_navigation_pending_| instead, because
these are interested in "whether navigation is ongoing", and we don't have
placeholder DL to be returned from GetProvisionalDocumentLoader anymore.

Somehow this change exposes flakiness in
external/wpt/resource-timing/nested-context-navigations-iframe.html, which
relies on racy should_send_resource_timing_info_to_parent flag being sent
across processes. See DocumentLoader::ShouldReportTimingInfoToParent
for more details.

This corresponds to step 12 from the doc linked to the bug.

Bug: 855189, 957181
Change-Id: I5a10b283012f2000aa36a5748bbd412a31362347
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1573813
Reviewed-by: Daniel Cheng <[email protected]>
Commit-Queue: Dmitry Gozman <[email protected]>
Cr-Commit-Position: refs/heads/master@{#656879}
12 files changed