Preload mhtml document before committing a navigation

This patch makes RenderFrameImpl load the full mhtml response body
before trying to commit it. This is required for synchronous commit
(see doc linked to the bug, steps 8.a and 8.b), because we have
to parse the archive to retrieve the main resource and its mime type
and commit a correct document type.

Brief summary:
- Introduced MHTMLBodyLoader which consumes data from existing
  NavigationBodyLoader and puts it all to WebNavigationParams.
- Split RenderFrameImpl::CommitNavigationWithParams from
  CommitNavigationInternal so that we can commit mhtml after loading
  the response asynchronously. Most of the time we just call
  CommitNavigationWithParams synchronously.
- DocumentLoader now tries to commit mhtml synchronously, and loads
  empty document if that fails (similarly to archive parsing failure).

Bug: 855189

Change-Id: Id27a4e593c1586e1f48591ee0685fdb93aaf8827
Reviewed-on: https://chromium-review.googlesource.com/c/1408351
Commit-Queue: Dmitry Gozman <dgozman@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#629802}
9 files changed