Support simple back/forward in out-of-process iframes.

This moves HistoryController::GoToEntry to the browser process for
--site-per-process mode, allowing NavigationController to identify
all the frames that need to be navigated directly.

So far, this only supports navigating a leaf node and not subframes
with subtrees of their own.

[email protected]
BUG=236848
TEST=In --site-per-process, go back cross-site in a subframe.

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

Cr-Commit-Position: refs/heads/master@{#335404}
diff --git a/content/browser/frame_host/navigator_impl.h b/content/browser/frame_host/navigator_impl.h
index 05573a4..6402a55 100644
--- a/content/browser/frame_host/navigator_impl.h
+++ b/content/browser/frame_host/navigator_impl.h
@@ -49,9 +49,10 @@
   void DidNavigate(RenderFrameHostImpl* render_frame_host,
                    const FrameHostMsg_DidCommitProvisionalLoad_Params&
                        input_params) override;
-  bool NavigateToPendingEntry(
-      FrameTreeNode* frame_tree_node,
-      NavigationController::ReloadType reload_type) override;
+  bool NavigateToPendingEntry(FrameTreeNode* frame_tree_node,
+                              const FrameNavigationEntry& frame_entry,
+                              NavigationController::ReloadType reload_type,
+                              bool is_same_document_history_load) override;
   void RequestOpenURL(RenderFrameHostImpl* render_frame_host,
                       const GURL& url,
                       SiteInstance* source_site_instance,
@@ -97,10 +98,11 @@
 
   // Navigates to the given entry, which must be the pending entry.  Private
   // because all callers should use NavigateToPendingEntry.
-  bool NavigateToEntry(
-      FrameTreeNode* frame_tree_node,
-      const NavigationEntryImpl& entry,
-      NavigationController::ReloadType reload_type);
+  bool NavigateToEntry(FrameTreeNode* frame_tree_node,
+                       const FrameNavigationEntry& frame_entry,
+                       const NavigationEntryImpl& entry,
+                       NavigationController::ReloadType reload_type,
+                       bool is_same_document_history_load);
 
   bool ShouldAssignSiteForURL(const GURL& url);
 
@@ -112,8 +114,10 @@
   // to execute the beforeUnload event. Otherwise, the navigation request will
   // be started.
   void RequestNavigation(FrameTreeNode* frame_tree_node,
+                         const FrameNavigationEntry& frame_entry,
                          const NavigationEntryImpl& entry,
                          NavigationController::ReloadType reload_type,
+                         bool is_same_document_history_load,
                          base::TimeTicks navigation_start);
 
   void RecordNavigationMetrics(