FrameLoader: explicit CreatePlaceholderDocumentLoader

This patch replaces kNavigationPolicyHandledByClient with
an explicit call CreatePlaceholderDocumentLoader.

This technique removes inversion of control between WebLocalFrame
and it's client, and gives the client all the power for driving
navigations. For example:
- RenderFrameImpl::PendingNavigationInfo is gone, since
  RenderFrameImpl controls the process and doesn't have to store
  information between WebLocalFrameClient callbacks.
- We don't issue DidStartProvisionalLoad for placeholders anymore
  for the similar reason.

A couple of small changes required:
- WebNavigationParams::source_location is now optional.
  This is needed for preserving source location when creating
  a placeholder (and for synchronous commits in the future).
- Plumbed WebFrameLoadType instead of replaces_current_item to
  not lose information.

Next step will do the same for kNavigationPolicyCurrentTab
and let the client drive navigation all the time. After that
we'll get rid of multiple WebLocalFrameClient callbacks.

Bug: 855189
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_layout_ng
Change-Id: I5f1d1b5269f99227e3998fba2333c0f3661f7e9e
Reviewed-on: https://chromium-review.googlesource.com/c/1263052
Commit-Queue: Dmitry Gozman <dgozman@chromium.org>
Reviewed-by: Nasko Oskov <nasko@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605796}
30 files changed