Navigation API: fix traversal + sandboxing interactions

Previous behavior: navigation API's traversal methods can ignore
sandboxing flags in some situations, because we didn't pass them
through in NavigateToNavigationApiKey.

Current behavior with this CL: navigation API's traversal methods
now return never-settled promises when sandboxing prevents the
navigation.

Desired behavior: navigation API's traversal methods return promises
rejected with a "SecurityError" DOMException when sandboxing prevents
the navigation.

Fixed: 1234117
Bug: 1311786
Change-Id: Ib9a10113a11a419569534f07a1a56434d528da54
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3561323
Reviewed-by: Domenic Denicola <[email protected]>
Reviewed-by: Charlie Reis <[email protected]>
Commit-Queue: Nate Chapin <[email protected]>
Cr-Commit-Position: refs/heads/main@{#987711}
diff --git a/content/browser/renderer_host/navigation_controller_impl.cc b/content/browser/renderer_host/navigation_controller_impl.cc
index 1f037cd..56f33c3 100644
--- a/content/browser/renderer_host/navigation_controller_impl.cc
+++ b/content/browser/renderer_host/navigation_controller_impl.cc
@@ -4467,6 +4467,7 @@
 
 void NavigationControllerImpl::NavigateToNavigationApiKey(
     FrameTreeNode* node,
+    int sandboxed_source_frame_tree_node_id,
     const std::string& key) {
   FrameNavigationEntry* current_entry =
       GetLastCommittedEntry()->GetFrameEntry(node);
@@ -4482,7 +4483,7 @@
     if (result == HistoryNavigationAction::kStopLooking)
       break;
     if (result != HistoryNavigationAction::kKeepLooking) {
-      GoToIndex(i, FrameTreeNode::kFrameTreeNodeInvalidId,
+      GoToIndex(i, sandboxed_source_frame_tree_node_id,
                 false /* is_browser_initiated*/);
       return;
     }
@@ -4493,7 +4494,7 @@
     if (result == HistoryNavigationAction::kStopLooking)
       break;
     if (result != HistoryNavigationAction::kKeepLooking) {
-      GoToIndex(i, FrameTreeNode::kFrameTreeNodeInvalidId,
+      GoToIndex(i, sandboxed_source_frame_tree_node_id,
                 false /* is_browser_initiated*/);
       return;
     }