Reland "Convert content::CommitNavigationParams to mojom."

This is a reland of f9763b52230da0420d0bcf051d643b45e6fd6dd0

Original change's description:
> Convert content::CommitNavigationParams to mojom.
>
> Bug: 984550
> Change-Id: Ic966c764e7fb52a9fb8d2ea44d9777bd8c1e4011
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1725096
> Reviewed-by: Avi Drissman <[email protected]>
> Reviewed-by: Scott Graham <[email protected]>
> Reviewed-by: Nasko Oskov <[email protected]>
> Commit-Queue: Lucas Gadani <[email protected]>
> Cr-Commit-Position: refs/heads/master@{#682795}

Tbr: [email protected]
Bug: 984550
Change-Id: I3ec99e6c57e33cd85203125c250a26b4e50384a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1729921
Reviewed-by: Lucas Gadani <[email protected]>
Commit-Queue: Lucas Gadani <[email protected]>
Cr-Commit-Position: refs/heads/master@{#682950}
diff --git a/chrome/browser/media/unified_autoplay_browsertest.cc b/chrome/browser/media/unified_autoplay_browsertest.cc
index 893b99b..b391ecb 100644
--- a/chrome/browser/media/unified_autoplay_browsertest.cc
+++ b/chrome/browser/media/unified_autoplay_browsertest.cc
@@ -283,7 +283,7 @@
   const GURL kTestPageUrl = embedded_test_server()->GetURL(kTestPagePath);
 
   NavigateParams params(browser(), kTestPageUrl, ui::PAGE_TRANSITION_LINK);
-  params.was_activated = content::WasActivatedOption::kYes;
+  params.was_activated = content::mojom::WasActivatedOption::kYes;
   ui_test_utils::NavigateToURL(&params);
 
   EXPECT_TRUE(AttemptPlay(GetWebContents()));
@@ -296,7 +296,7 @@
   const GURL kTestPageUrl = embedded_test_server()->GetURL(kTestPagePath);
 
   NavigateParams params(browser(), kRedirectPageUrl, ui::PAGE_TRANSITION_LINK);
-  params.was_activated = content::WasActivatedOption::kYes;
+  params.was_activated = content::mojom::WasActivatedOption::kYes;
   ui_test_utils::NavigateToURL(&params);
 
   EXPECT_TRUE(NavigateInRenderer(GetWebContents(), kTestPageUrl));
@@ -326,7 +326,7 @@
       embedded_test_server()->GetURL("foo.example.com", kTestPagePath);
 
   NavigateParams params(browser(), kRedirectPageUrl, ui::PAGE_TRANSITION_LINK);
-  params.was_activated = content::WasActivatedOption::kYes;
+  params.was_activated = content::mojom::WasActivatedOption::kYes;
   ui_test_utils::NavigateToURL(&params);
 
   EXPECT_TRUE(NavigateInRenderer(GetWebContents(), kTestPageUrl));
diff --git a/chrome/browser/ui/ash/chrome_new_window_client.cc b/chrome/browser/ui/ash/chrome_new_window_client.cc
index 181f4c6..e49888c2 100644
--- a/chrome/browser/ui/ash/chrome_new_window_client.cc
+++ b/chrome/browser/ui/ash/chrome_new_window_client.cc
@@ -57,7 +57,7 @@
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/service_manager_connection.h"
 #include "content/public/common/user_agent.h"
-#include "content/public/common/was_activated_option.h"
+#include "content/public/common/was_activated_option.mojom.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "extensions/common/constants.h"
@@ -611,7 +611,7 @@
                                 ui::PAGE_TRANSITION_FROM_API));
 
   if (from_user_interaction)
-    navigate_params.was_activated = content::WasActivatedOption::kYes;
+    navigate_params.was_activated = content::mojom::WasActivatedOption::kYes;
 
   Navigate(&navigate_params);
 
diff --git a/chrome/browser/ui/browser_navigator_params.h b/chrome/browser/ui/browser_navigator_params.h
index d2954c8..042bc79 100644
--- a/chrome/browser/ui/browser_navigator_params.h
+++ b/chrome/browser/ui/browser_navigator_params.h
@@ -16,7 +16,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/site_instance.h"
 #include "content/public/common/referrer.h"
-#include "content/public/common/was_activated_option.h"
+#include "content/public/common/was_activated_option.mojom.h"
 #include "services/network/public/cpp/resource_request_body.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "ui/base/page_transition_types.h"
@@ -276,8 +276,8 @@
   // outside of the page and pass it to the page as if it happened on a prior
   // page. For example, if the assistant opens a page we should treat the
   // user's interaction with the assistant as a previous user activation.
-  content::WasActivatedOption was_activated =
-      content::WasActivatedOption::kUnknown;
+  content::mojom::WasActivatedOption was_activated =
+      content::mojom::WasActivatedOption::kUnknown;
 
   // If this navigation was initiated from a link that specified the
   // hrefTranslate attribute, this contains the attribute's value (a BCP47
diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc
index 19dc104..76ddadd 100644
--- a/content/browser/devtools/protocol/network_handler.cc
+++ b/content/browser/devtools/protocol/network_handler.cc
@@ -1581,7 +1581,8 @@
     headers_dict->setString(net::HttpRequestHeaders::kReferer, referrer.spec());
 
   std::unique_ptr<Network::Response> redirect_response;
-  const CommitNavigationParams& commit_params = nav_request.commit_params();
+  const mojom::CommitNavigationParams& commit_params =
+      nav_request.commit_params();
   if (!commit_params.redirect_response.empty()) {
     redirect_response = BuildResponse(commit_params.redirects.back(),
                                       commit_params.redirect_response.back());
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index 2b7c0c1a..a960d28 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -2271,7 +2271,7 @@
   params.started_from_context_menu = false;
   /* params.navigation_ui_data: skip */
   /* params.input_start: skip */
-  params.was_activated = WasActivatedOption::kUnknown;
+  params.was_activated = mojom::WasActivatedOption::kUnknown;
   /* params.reload_type: skip */
 
   std::unique_ptr<NavigationRequest> request =
@@ -3086,22 +3086,36 @@
           false /* is_history_navigation_in_new_child_frame */,
           params.input_start);
 
-  CommitNavigationParams commit_params(
-      frame_entry->committed_origin(), override_user_agent,
-      params.redirect_chain, common_params->url, common_params->method,
-      params.can_load_local_resources, frame_entry->page_state(),
-      entry->GetUniqueID(), entry->GetSubframeUniqueNames(node),
-      true /* intended_as_new_entry */, -1 /* pending_history_list_offset */,
-      params.should_clear_history_list ? -1 : GetLastCommittedEntryIndex(),
-      params.should_clear_history_list ? 0 : GetEntryCount(),
-      is_view_source_mode, params.should_clear_history_list);
+  mojom::CommitNavigationParamsPtr commit_params =
+      mojom::CommitNavigationParams::New(
+          frame_entry->committed_origin(), override_user_agent,
+          params.redirect_chain, std::vector<network::ResourceResponseHead>(),
+          std::vector<net::RedirectInfo>(),
+          std::string() /* post_content_type */, common_params->url,
+          common_params->method, params.can_load_local_resources,
+          frame_entry->page_state(), entry->GetUniqueID(),
+          entry->GetSubframeUniqueNames(node), true /* intended_as_new_entry */,
+          -1 /* pending_history_list_offset */,
+          params.should_clear_history_list ? -1 : GetLastCommittedEntryIndex(),
+          params.should_clear_history_list ? 0 : GetEntryCount(),
+          false /* was_discarded */, is_view_source_mode,
+          params.should_clear_history_list, mojom::NavigationTiming::New(),
+          base::nullopt /* appcache_host_id */,
+          mojom::WasActivatedOption::kUnknown,
+          base::UnguessableToken::Create() /* navigation_token */,
+          std::vector<PrefetchedSignedExchangeInfo>(),
+#if defined(OS_ANDROID)
+          std::string(), /* data_url_as_string */
+#endif
+          false /* is_browser_initiated */
+      );
 #if defined(OS_ANDROID)
   if (ValidateDataURLAsString(params.data_url_as_string)) {
-    commit_params.data_url_as_string = params.data_url_as_string->data();
+    commit_params->data_url_as_string = params.data_url_as_string->data();
   }
 #endif
 
-  commit_params.was_activated = params.was_activated;
+  commit_params->was_activated = params.was_activated;
 
   // A form submission may happen here if the navigation is a renderer-initiated
   // form submission that took the OpenURL path.
@@ -3112,7 +3126,7 @@
   base::ReplaceChars(params.extra_headers, "\n", "\r\n", &extra_headers_crlf);
 
   auto navigation_request = NavigationRequest::CreateBrowserInitiated(
-      node, std::move(common_params), commit_params,
+      node, std::move(common_params), std::move(commit_params),
       !params.is_renderer_initiated, extra_headers_crlf, *frame_entry, entry,
       request_body,
       params.navigation_ui_data ? params.navigation_ui_data->Clone() : nullptr);
@@ -3212,15 +3226,17 @@
   // TODO(clamy): |intended_as_new_entry| below should always be false once
   // Reload no longer leads to this being called for a pending NavigationEntry
   // of index -1.
-  CommitNavigationParams commit_params = entry->ConstructCommitNavigationParams(
-      *frame_entry, common_params->url, origin_to_commit, common_params->method,
-      entry->GetSubframeUniqueNames(frame_tree_node),
-      GetPendingEntryIndex() == -1 /* intended_as_new_entry */,
-      GetIndexOfEntry(entry), GetLastCommittedEntryIndex(), GetEntryCount());
-  commit_params.post_content_type = post_content_type;
+  mojom::CommitNavigationParamsPtr commit_params =
+      entry->ConstructCommitNavigationParams(
+          *frame_entry, common_params->url, origin_to_commit,
+          common_params->method, entry->GetSubframeUniqueNames(frame_tree_node),
+          GetPendingEntryIndex() == -1 /* intended_as_new_entry */,
+          GetIndexOfEntry(entry), GetLastCommittedEntryIndex(),
+          GetEntryCount());
+  commit_params->post_content_type = post_content_type;
 
   return NavigationRequest::CreateBrowserInitiated(
-      frame_tree_node, std::move(common_params), commit_params,
+      frame_tree_node, std::move(common_params), std::move(commit_params),
       !entry->is_renderer_initiated(), entry->extra_headers(), *frame_entry,
       entry, request_body, nullptr /* navigation_ui_data */);
 }
diff --git a/content/browser/frame_host/navigation_controller_impl.h b/content/browser/frame_host/navigation_controller_impl.h
index 4af7438..03bee52 100644
--- a/content/browser/frame_host/navigation_controller_impl.h
+++ b/content/browser/frame_host/navigation_controller_impl.h
@@ -28,7 +28,6 @@
 struct FrameHostMsg_DidCommitProvisionalLoad_Params;
 
 namespace content {
-enum class WasActivatedOption;
 class FrameTreeNode;
 class RenderFrameHostImpl;
 class SiteInstance;
diff --git a/content/browser/frame_host/navigation_entry_impl.cc b/content/browser/frame_host/navigation_entry_impl.cc
index beabe4c..02fbb2544 100644
--- a/content/browser/frame_host/navigation_entry_impl.cc
+++ b/content/browser/frame_host/navigation_entry_impl.cc
@@ -691,12 +691,13 @@
       false /* is_history_navigation_in_new_child_frame */, input_start);
 }
 
-CommitNavigationParams NavigationEntryImpl::ConstructCommitNavigationParams(
+mojom::CommitNavigationParamsPtr
+NavigationEntryImpl::ConstructCommitNavigationParams(
     const FrameNavigationEntry& frame_entry,
     const GURL& original_url,
     const base::Optional<url::Origin>& origin_to_commit,
     const std::string& original_method,
-    const std::map<std::string, bool>& subframe_unique_names,
+    const base::flat_map<std::string, bool>& subframe_unique_names,
     bool intended_as_new_entry,
     int pending_history_list_offset,
     int current_history_list_offset,
@@ -720,15 +721,26 @@
     current_length_to_send = 0;
   }
 
-  CommitNavigationParams commit_params(
-      origin_to_commit, GetIsOverridingUserAgent(), redirects, original_url,
-      original_method, GetCanLoadLocalResources(), frame_entry.page_state(),
-      GetUniqueID(), subframe_unique_names, intended_as_new_entry,
-      pending_offset_to_send, current_offset_to_send, current_length_to_send,
-      IsViewSourceMode(), should_clear_history_list());
+  mojom::CommitNavigationParamsPtr commit_params =
+      mojom::CommitNavigationParams::New(
+          origin_to_commit, GetIsOverridingUserAgent(), redirects,
+          std::vector<network::ResourceResponseHead>(),
+          std::vector<net::RedirectInfo>(), std::string(), original_url,
+          original_method, GetCanLoadLocalResources(), frame_entry.page_state(),
+          GetUniqueID(), subframe_unique_names, intended_as_new_entry,
+          pending_offset_to_send, current_offset_to_send,
+          current_length_to_send, false, IsViewSourceMode(),
+          should_clear_history_list(), mojom::NavigationTiming::New(),
+          base::nullopt, mojom::WasActivatedOption::kUnknown,
+          base::UnguessableToken::Create(),
+          std::vector<PrefetchedSignedExchangeInfo>(),
+#if defined(OS_ANDROID)
+          std::string(),
+#endif
+          false);
 #if defined(OS_ANDROID)
   if (NavigationControllerImpl::ValidateDataURLAsString(GetDataURLAsString())) {
-    commit_params.data_url_as_string = GetDataURLAsString()->data();
+    commit_params->data_url_as_string = GetDataURLAsString()->data();
   }
 #endif
   return commit_params;
@@ -854,9 +866,9 @@
   return tree_node ? tree_node->frame_entry.get() : nullptr;
 }
 
-std::map<std::string, bool> NavigationEntryImpl::GetSubframeUniqueNames(
+base::flat_map<std::string, bool> NavigationEntryImpl::GetSubframeUniqueNames(
     FrameTreeNode* frame_tree_node) const {
-  std::map<std::string, bool> names;
+  base::flat_map<std::string, bool> names;
   NavigationEntryImpl::TreeNode* tree_node = GetTreeNode(frame_tree_node);
   if (tree_node) {
     // Return the names of all immediate children.
diff --git a/content/browser/frame_host/navigation_entry_impl.h b/content/browser/frame_host/navigation_entry_impl.h
index dca35a81..2bb6422 100644
--- a/content/browser/frame_host/navigation_entry_impl.h
+++ b/content/browser/frame_host/navigation_entry_impl.h
@@ -7,11 +7,11 @@
 
 #include <stdint.h>
 
-#include <map>
 #include <memory>
 #include <string>
 #include <vector>
 
+#include "base/containers/flat_map.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/optional.h"
@@ -21,6 +21,7 @@
 #include "content/browser/frame_host/frame_navigation_entry.h"
 #include "content/browser/frame_host/frame_tree_node.h"
 #include "content/browser/site_instance_impl.h"
+#include "content/common/navigation_params.mojom.h"
 #include "content/public/browser/favicon_status.h"
 #include "content/public/browser/global_request_id.h"
 #include "content/public/browser/navigation_entry.h"
@@ -33,7 +34,6 @@
 #include "url/origin.h"
 
 namespace content {
-struct CommitNavigationParams;
 
 class CONTENT_EXPORT NavigationEntryImpl : public NavigationEntry {
  public:
@@ -183,12 +183,12 @@
       PreviewsState previews_state,
       base::TimeTicks navigation_start,
       base::TimeTicks input_start);
-  CommitNavigationParams ConstructCommitNavigationParams(
+  mojom::CommitNavigationParamsPtr ConstructCommitNavigationParams(
       const FrameNavigationEntry& frame_entry,
       const GURL& original_url,
       const base::Optional<url::Origin>& origin_to_commit,
       const std::string& original_method,
-      const std::map<std::string, bool>& subframe_unique_names,
+      const base::flat_map<std::string, bool>& subframe_unique_names,
       bool intended_as_new_entry,
       int pending_offset_to_send,
       int current_offset_to_send,
@@ -250,7 +250,7 @@
   // same-process PageStates for the whole subtree, so that the renderer process
   // only needs to ask the browser process to handle the cross-process cases.
   // See https://crbug.com/639842.
-  std::map<std::string, bool> GetSubframeUniqueNames(
+  base::flat_map<std::string, bool> GetSubframeUniqueNames(
       FrameTreeNode* frame_tree_node) const;
 
   // Removes any subframe FrameNavigationEntries that match the unique name of
diff --git a/content/browser/frame_host/navigation_handle_impl_unittest.cc b/content/browser/frame_host/navigation_handle_impl_unittest.cc
index 9a19a64..0ef32ec 100644
--- a/content/browser/frame_host/navigation_handle_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_handle_impl_unittest.cc
@@ -231,8 +231,8 @@
         url::Origin::Create(GURL("https://initiator.example.com"));
     request_ = NavigationRequest::CreateBrowserInitiated(
         main_test_rfh()->frame_tree_node(), std::move(common_params),
-        CommitNavigationParams(), false /* browser-initiated */, std::string(),
-        *frame_entry, nullptr, nullptr, nullptr);
+        CreateCommitNavigationParams(), false /* browser-initiated */,
+        std::string(), *frame_entry, nullptr, nullptr, nullptr);
     request_->CreateNavigationHandle(true);
   }
 
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index 8db6430..b20ecd8 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -514,7 +514,7 @@
 std::unique_ptr<NavigationRequest> NavigationRequest::CreateBrowserInitiated(
     FrameTreeNode* frame_tree_node,
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     bool browser_initiated,
     const std::string& extra_headers,
     const FrameNavigationEntry& frame_entry,
@@ -543,9 +543,9 @@
 
   std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest(
       frame_tree_node, std::move(common_params), std::move(navigation_params),
-      commit_params, browser_initiated, false /* from_begin_navigation */,
-      false /* is_for_commit */, &frame_entry, entry,
-      std::move(navigation_ui_data), nullptr, nullptr));
+      std::move(commit_params), browser_initiated,
+      false /* from_begin_navigation */, false /* is_for_commit */,
+      &frame_entry, entry, std::move(navigation_ui_data), nullptr, nullptr));
   navigation_request->blob_url_loader_factory_ =
       frame_entry.blob_url_loader_factory();
 
@@ -593,23 +593,39 @@
 
   // TODO(clamy): See if the navigation start time should be measured in the
   // renderer and sent to the browser instead of being measured here.
-  CommitNavigationParams commit_params(
-      base::nullopt, override_user_agent,
-      std::vector<GURL>(),  // redirects
-      common_params->url, common_params->method,
-      false,                          // can_load_local_resources
-      PageState(),                    // page_state
-      0,                              // nav_entry_id
-      std::map<std::string, bool>(),  // subframe_unique_names
-      false,                          // intended_as_new_entry
-      -1,  // |pending_history_list_offset| is set to -1 because
-           // history-navigations do not use this path. See comments above.
-      current_history_list_offset, current_history_list_length,
-      false,  // is_view_source
-      false /*should_clear_history_list*/);
+  mojom::CommitNavigationParamsPtr commit_params =
+      mojom::CommitNavigationParams::New(
+          base::nullopt, override_user_agent,
+          std::vector<GURL>(),                           // redirects
+          std::vector<network::ResourceResponseHead>(),  // redirect_response
+          std::vector<net::RedirectInfo>(),              // redirect_infos
+          std::string(),                                 // post_content_type
+          common_params->url, common_params->method,
+          false,                                // can_load_local_resources
+          PageState(),                          // page_state
+          0,                                    // nav_entry_id
+          base::flat_map<std::string, bool>(),  // subframe_unique_names
+          false,                                // intended_as_new_entry
+          -1,  // |pending_history_list_offset| is set to -1 because
+               // history-navigations do not use this path. See comments above.
+          current_history_list_offset, current_history_list_length,
+          false,  // was_discarded
+          false,  // is_view_source
+          false /*should_clear_history_list*/,
+          mojom::NavigationTiming::New(),  // navigation_timing
+          base::nullopt,                   // appcache_host_id
+          mojom::WasActivatedOption::kUnknown,
+          base::UnguessableToken::Create(),  // navigation_token
+          std::vector<
+              PrefetchedSignedExchangeInfo>(),  // prefetched_signed_exchanges
+#if defined(OS_ANDROID)
+          std::string(),  // data_url_as_string
+#endif
+          false  // is_browser_initiated
+      );
   std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest(
       frame_tree_node, std::move(common_params), std::move(begin_params),
-      commit_params,
+      std::move(commit_params),
       false,  // browser_initiated
       true,   // from_begin_navigation
       false,  // is_for_commit
@@ -654,22 +670,34 @@
           std::string() /* href_translate */,
           false /* is_history_navigation_in_new_child_frame */,
           base::TimeTicks::Now());
-  CommitNavigationParams commit_params(
-      params.origin, params.is_overriding_user_agent, params.redirects,
-      params.original_request_url, params.method,
-      false /* can_load_local_resources */, params.page_state,
-      params.nav_entry_id,
-      std::map<std::string, bool>() /* subframe_unique_names */,
-      params.intended_as_new_entry, -1 /* pending_history_list_offset */,
-      -1 /* current_history_list_offset */,
-      -1 /* current_history_list_length */, false /* is_view_source */,
-      params.history_list_was_cleared);
+  mojom::CommitNavigationParamsPtr commit_params =
+      mojom::CommitNavigationParams::New(
+          params.origin, params.is_overriding_user_agent, params.redirects,
+          std::vector<network::ResourceResponseHead>(),
+          std::vector<net::RedirectInfo>(), std::string(),
+          params.original_request_url, params.method,
+          false /* can_load_local_resources */, params.page_state,
+          params.nav_entry_id,
+          base::flat_map<std::string, bool>() /* subframe_unique_names */,
+          params.intended_as_new_entry, -1 /* pending_history_list_offset */,
+          -1 /* current_history_list_offset */,
+          -1 /* current_history_list_length */, false /* was_discard */,
+          false /* is_view_source */, params.history_list_was_cleared,
+          mojom::NavigationTiming::New(), base::nullopt /* appcache_host_id; */,
+          mojom::WasActivatedOption::kUnknown,
+          base::UnguessableToken::Create() /* navigation_token */,
+          std::vector<PrefetchedSignedExchangeInfo>(),
+#if defined(OS_ANDROID)
+          std::string(), /* data_url_as_string */
+#endif
+          false /* is_browser_initiated */
+      );
   mojom::BeginNavigationParamsPtr begin_params =
       mojom::BeginNavigationParams::New();
   std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest(
       frame_tree_node, std::move(common_params), std::move(begin_params),
-      commit_params, !is_renderer_initiated, false /* from_begin_navigation */,
-      true /* is_for_commit */,
+      std::move(commit_params), !is_renderer_initiated,
+      false /* from_begin_navigation */, true /* is_for_commit */,
       entry ? entry->GetFrameEntry(frame_tree_node) : nullptr, entry,
       nullptr /* navigation_ui_data */,
       mojom::NavigationClientAssociatedPtrInfo(),
@@ -688,7 +716,7 @@
     FrameTreeNode* frame_tree_node,
     mojom::CommonNavigationParamsPtr common_params,
     mojom::BeginNavigationParamsPtr begin_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     bool browser_initiated,
     bool from_begin_navigation,
     bool is_for_commit,
@@ -700,7 +728,7 @@
     : frame_tree_node_(frame_tree_node),
       common_params_(std::move(common_params)),
       begin_params_(std::move(begin_params)),
-      commit_params_(commit_params),
+      commit_params_(std::move(commit_params)),
       browser_initiated_(browser_initiated),
       navigation_ui_data_(std::move(navigation_ui_data)),
       state_(NOT_STARTED),
@@ -789,7 +817,7 @@
   }
 
   std::string user_agent_override;
-  if (commit_params.is_overriding_user_agent ||
+  if (commit_params_->is_overriding_user_agent ||
       (entry && entry->GetIsOverridingUserAgent())) {
     user_agent_override =
         frame_tree_node_->navigator()->GetDelegate()->GetUserAgentOverride();
@@ -825,17 +853,17 @@
         frame_tree_node);
 
     if (begin_params_->is_form_submission) {
-      if (browser_initiated && !commit_params.post_content_type.empty()) {
+      if (browser_initiated && !commit_params_->post_content_type.empty()) {
         // This is a form resubmit, so make sure to set the Content-Type header.
         headers.SetHeaderIfMissing(net::HttpRequestHeaders::kContentType,
-                                   commit_params.post_content_type);
+                                   commit_params_->post_content_type);
       } else if (!browser_initiated) {
         // Save the Content-Type in case the form is resubmitted. This will get
         // sent back to the renderer in the CommitNavigation IPC. The renderer
         // will then send it back with the post body so that we can access it
         // along with the body in FrameNavigationEntry::page_state_.
         headers.GetHeader(net::HttpRequestHeaders::kContentType,
-                          &commit_params_.post_content_type);
+                          &commit_params_->post_content_type);
       }
     }
   }
@@ -849,7 +877,7 @@
 
   navigation_entry_offset_ = EstimateHistoryOffset();
 
-  commit_params_.is_browser_initiated = browser_initiated_;
+  commit_params_->is_browser_initiated = browser_initiated_;
 }
 
 NavigationRequest::~NavigationRequest() {
@@ -887,7 +915,7 @@
 
   if (!GetContentClient()->browser()->ShouldOverrideUrlLoading(
           frame_tree_node_->frame_tree_node_id(), browser_initiated_,
-          commit_params_.original_url, commit_params_.original_method,
+          commit_params_->original_url, commit_params_->original_method,
           common_params_->has_user_gesture, false,
           frame_tree_node_->IsMainFrame(), common_params_->transition,
           &should_override_url_loading)) {
@@ -1026,19 +1054,19 @@
     // |begin_params_->client_side_redirect_url| will be set when the navigation
     // was triggered by a client-side redirect.
     redirect_chain_.push_back(begin_params_->client_side_redirect_url);
-  } else if (!commit_params_.redirects.empty()) {
+  } else if (!commit_params_->redirects.empty()) {
     // Redirects that were specified at NavigationRequest creation time should
     // be added to the list of redirects. In particular, if the
     // NavigationRequest was created at commit time, redirects that happened
-    // during the navigation have been added to |commit_params_.redirects| and
+    // during the navigation have been added to |commit_params_->redirects| and
     // should be passed to the NavigationHandle.
-    for (const auto& url : commit_params_.redirects)
+    for (const auto& url : commit_params_->redirects)
       redirect_chain_.push_back(url);
   }
 
   // Finally, add the current URL to the vector of redirects.
   // Note: for NavigationRequests created at commit time, the current URL has
-  // been added to |commit_params_.redirects|, so don't add it a second time.
+  // been added to |commit_params_->redirects|, so don't add it a second time.
   if (!is_for_commit)
     redirect_chain_.push_back(common_params_->url);
 
@@ -1241,22 +1269,22 @@
     common_params_->post_data.reset();
 
   // Mark time for the Navigation Timing API.
-  if (commit_params_.navigation_timing.redirect_start.is_null()) {
-    commit_params_.navigation_timing.redirect_start =
-        commit_params_.navigation_timing.fetch_start;
+  if (commit_params_->navigation_timing->redirect_start.is_null()) {
+    commit_params_->navigation_timing->redirect_start =
+        commit_params_->navigation_timing->fetch_start;
   }
-  commit_params_.navigation_timing.redirect_end = base::TimeTicks::Now();
-  commit_params_.navigation_timing.fetch_start = base::TimeTicks::Now();
+  commit_params_->navigation_timing->redirect_end = base::TimeTicks::Now();
+  commit_params_->navigation_timing->fetch_start = base::TimeTicks::Now();
 
-  commit_params_.redirect_response.push_back(response_head->head);
-  commit_params_.redirect_infos.push_back(redirect_info);
+  commit_params_->redirect_response.push_back(response_head->head);
+  commit_params_->redirect_infos.push_back(redirect_info);
 
   // On redirects, the initial origin_to_commit is no longer correct, so it
   // must be cleared to avoid sending incorrect value to the renderer process.
-  if (commit_params_.origin_to_commit)
-    commit_params_.origin_to_commit.reset();
+  if (commit_params_->origin_to_commit)
+    commit_params_->origin_to_commit.reset();
 
-  commit_params_.redirects.push_back(common_params_->url);
+  commit_params_->redirects.push_back(common_params_->url);
   common_params_->url = redirect_info.new_url;
   common_params_->method = redirect_info.new_method;
   common_params_->referrer->url = GURL(redirect_info.new_referrer);
@@ -1377,7 +1405,7 @@
     net_error_ = net::ERR_ABORTED;
 
   // Update the AppCache params of the commit params.
-  commit_params_.appcache_host_id =
+  commit_params_->appcache_host_id =
       appcache_handle_
           ? base::make_optional(appcache_handle_->appcache_host_id())
           : base::nullopt;
@@ -1388,8 +1416,8 @@
   // worker ready time if it is greater than the current value to make sure
   // fetch start timing always comes after worker start timing (if a service
   // worker intercepted the navigation).
-  commit_params_.navigation_timing.fetch_start =
-      std::max(commit_params_.navigation_timing.fetch_start,
+  commit_params_->navigation_timing->fetch_start =
+      std::max(commit_params_->navigation_timing->fetch_start,
                response_head->head.service_worker_ready_time);
 
   // A navigation is user activated if it contains a user gesture or the frame
@@ -1409,8 +1437,8 @@
   //    context menu. This should apply to pages that open in a new tab and we
   //    have to follow the referrer. It means that the activation might not be
   //    transmitted if it should have.
-  if (commit_params_.was_activated == WasActivatedOption::kUnknown) {
-    commit_params_.was_activated = WasActivatedOption::kNo;
+  if (commit_params_->was_activated == mojom::WasActivatedOption::kUnknown) {
+    commit_params_->was_activated = mojom::WasActivatedOption::kNo;
 
     if (!browser_initiated_ &&
         (frame_tree_node_->has_received_user_gesture() ||
@@ -1418,7 +1446,7 @@
         ShouldPropagateUserActivation(
             frame_tree_node_->current_origin(),
             url::Origin::Create(common_params_->url))) {
-      commit_params_.was_activated = WasActivatedOption::kYes;
+      commit_params_->was_activated = mojom::WasActivatedOption::kYes;
       // TODO(805871): the next check is relying on sanitized_referrer_ but
       // should ideally use a more reliable source for the originating URL when
       // the navigation is renderer initiated.
@@ -1427,7 +1455,7 @@
                ShouldPropagateUserActivation(
                    url::Origin::Create(sanitized_referrer_->url),
                    url::Origin::Create(common_params_->url))) {
-      commit_params_.was_activated = WasActivatedOption::kYes;
+      commit_params_->was_activated = mojom::WasActivatedOption::kYes;
     }
   }
 
@@ -1804,7 +1832,7 @@
   }
 
   // Mark the fetch_start (Navigation Timing API).
-  commit_params_.navigation_timing.fetch_start = base::TimeTicks::Now();
+  commit_params_->navigation_timing->fetch_start = base::TimeTicks::Now();
 
   GURL site_for_cookies =
       frame_tree_node_->current_frame_host()
@@ -2065,7 +2093,7 @@
   // TODO(nasko): Create an opque origin here and pass it for the renderer
   // to commit into it. Potentially also make it an opaque origin derived from
   // the error page URL, so it can be checked at DidCommit processing.
-  commit_params_.origin_to_commit.reset();
+  commit_params_->origin_to_commit.reset();
   if (IsPerNavigationMojoInterfaceEnabled() && request_navigation_client_ &&
       request_navigation_client_.is_bound()) {
     if (associated_site_instance_id_ ==
@@ -2081,7 +2109,7 @@
   }
 
   ReadyToCommitNavigation(true);
-  render_frame_host_->FailedNavigation(this, *common_params_, commit_params_,
+  render_frame_host_->FailedNavigation(this, *common_params_, *commit_params_,
                                        has_stale_copy_in_cache_, net_error_,
                                        error_page_content);
 }
@@ -2124,11 +2152,11 @@
   }
   if (subresource_loader_params_ &&
       !subresource_loader_params_->prefetched_signed_exchanges.empty()) {
-    commit_params_.prefetched_signed_exchanges =
+    commit_params_->prefetched_signed_exchanges =
         std::move(subresource_loader_params_->prefetched_signed_exchanges);
   }
   render_frame_host_->CommitNavigation(
-      this, *common_params_, commit_params_, response_head_.get(),
+      this, *common_params_, *commit_params_, response_head_.get(),
       std::move(response_body_), std::move(url_loader_client_endpoints_),
       is_view_source_, std::move(subresource_loader_params_),
       std::move(subresource_overrides_),
@@ -2321,7 +2349,7 @@
         parent->ShouldModifyRequestUrlForCsp(true /* is subresource */)) {
       upgrade_if_insecure_ = true;
       parent->ModifyRequestUrlForCsp(&common_params_->url);
-      commit_params_.original_url = common_params_->url;
+      commit_params_->original_url = common_params_->url;
     }
   }
 
@@ -2428,9 +2456,9 @@
 void NavigationRequest::UpdateCommitNavigationParamsHistory() {
   NavigationController* navigation_controller =
       frame_tree_node_->navigator()->GetController();
-  commit_params_.current_history_list_offset =
+  commit_params_->current_history_list_offset =
       navigation_controller->GetCurrentEntryIndex();
-  commit_params_.current_history_list_length =
+  commit_params_->current_history_list_length =
       navigation_controller->GetEntryCount();
 }
 
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index c3860f6..f293305a 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -133,7 +133,7 @@
   static std::unique_ptr<NavigationRequest> CreateBrowserInitiated(
       FrameTreeNode* frame_tree_node,
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       bool browser_initiated,
       const std::string& extra_headers,
       const FrameNavigationEntry& frame_entry,
@@ -187,7 +187,9 @@
     return begin_params_.get();
   }
 
-  const CommitNavigationParams& commit_params() const { return commit_params_; }
+  const mojom::CommitNavigationParams& commit_params() const {
+    return *commit_params_;
+  }
 
   // Updates the navigation start time.
   void set_navigation_start_time(const base::TimeTicks& time) {
@@ -231,7 +233,7 @@
     associated_site_instance_type_ = type;
   }
 
-  void set_was_discarded() { commit_params_.was_discarded = true; }
+  void set_was_discarded() { commit_params_->was_discarded = true; }
 
   NavigationHandleImpl* navigation_handle() const {
     return navigation_handle_.get();
@@ -493,7 +495,7 @@
   NavigationRequest(FrameTreeNode* frame_tree_node,
                     mojom::CommonNavigationParamsPtr common_params,
                     mojom::BeginNavigationParamsPtr begin_params,
-                    const CommitNavigationParams& commit_params,
+                    mojom::CommitNavigationParamsPtr commit_params,
                     bool browser_initiated,
                     bool from_begin_navigation,
                     bool is_for_commit,
@@ -801,7 +803,7 @@
   // be set in CreatedNavigationRequest.
   mojom::CommonNavigationParamsPtr common_params_;
   mojom::BeginNavigationParamsPtr begin_params_;
-  CommitNavigationParams commit_params_;
+  mojom::CommitNavigationParamsPtr commit_params_;
   const bool browser_initiated_;
 
   // Stores the NavigationUIData for this navigation until the NavigationHandle
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 405e17d4c..25055d4 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -4386,8 +4386,11 @@
       false /* started_from_context_menu */, false /* has_user_gesture */,
       InitiatorCSPInfo(), std::vector<int>(), std::string(),
       false /* is_history_navigation_in_new_child_frame */, base::TimeTicks());
+  mojom::CommitNavigationParams commit_params;
+  commit_params.navigation_token = base::UnguessableToken::Create();
+  commit_params.navigation_timing = mojom::NavigationTiming::New();
   CommitNavigation(
-      nullptr /* navigation_request */, common_params, CommitNavigationParams(),
+      nullptr /* navigation_request */, common_params, commit_params,
       nullptr /* response_head */, mojo::ScopedDataPipeConsumerHandle(),
       network::mojom::URLLoaderClientEndpointsPtr(), false, base::nullopt,
       base::nullopt /* subresource_overrides */, nullptr /* provider_info */,
@@ -4736,7 +4739,7 @@
 void RenderFrameHostImpl::CommitNavigation(
     NavigationRequest* navigation_request,
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params,
+    const mojom::CommitNavigationParams& commit_params,
     network::ResourceResponse* response_head,
     mojo::ScopedDataPipeConsumerHandle response_body,
     network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -5045,7 +5048,7 @@
   if (is_same_document) {
     DCHECK(same_document_navigation_request_);
     GetNavigationControl()->CommitSameDocumentNavigation(
-        common_params.Clone(), commit_params,
+        common_params.Clone(), commit_params.Clone(),
         base::BindOnce(&RenderFrameHostImpl::OnSameDocumentCommitProcessed,
                        base::Unretained(this),
                        same_document_navigation_request_->navigation_handle()
@@ -5165,7 +5168,7 @@
 
     SendCommitNavigation(
         navigation_client, navigation_request, common_params.Clone(),
-        commit_params, head, std::move(response_body),
+        commit_params.Clone(), head, std::move(response_body),
         std::move(url_loader_client_endpoints),
         std::move(subresource_loader_factories),
         std::move(subresource_overrides), std::move(controller),
@@ -5195,7 +5198,7 @@
 void RenderFrameHostImpl::FailedNavigation(
     NavigationRequest* navigation_request,
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params,
+    const mojom::CommitNavigationParams& commit_params,
     bool has_stale_copy_in_cache,
     int error_code,
     const base::Optional<std::string>& error_page_content) {
@@ -5236,8 +5239,8 @@
 
   SendCommitFailedNavigation(
       navigation_client, navigation_request, common_params.Clone(),
-      commit_params, has_stale_copy_in_cache, error_code, error_page_content,
-      std::move(subresource_loader_factories));
+      commit_params.Clone(), has_stale_copy_in_cache, error_code,
+      error_page_content, std::move(subresource_loader_factories));
 
   // An error page is expected to commit, hence why is_loading_ is set to true.
   is_loading_ = true;
@@ -5691,7 +5694,7 @@
 
 void RenderFrameHostImpl::UpdatePermissionsForNavigation(
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params) {
+    const mojom::CommitNavigationParams& commit_params) {
   // Browser plugin guests are not allowed to navigate outside web-safe schemes,
   // so do not grant them the ability to commit additional URLs.
   if (!GetProcess()->IsForGuestsOnly()) {
@@ -6955,7 +6958,7 @@
     mojom::NavigationClient* navigation_client,
     NavigationRequest* navigation_request,
     mojom::CommonNavigationParamsPtr common_params,
-    const content::CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     const network::ResourceResponseHead& response_head,
     mojo::ScopedDataPipeConsumerHandle response_body,
     network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -6970,7 +6973,7 @@
     const base::UnguessableToken& devtools_navigation_token) {
   if (navigation_client) {
     navigation_client->CommitNavigation(
-        std::move(common_params), commit_params, response_head,
+        std::move(common_params), std::move(commit_params), response_head,
         std::move(response_body), std::move(url_loader_client_endpoints),
         std::move(subresource_loader_factories),
         std::move(subresource_overrides), std::move(controller),
@@ -6979,7 +6982,7 @@
         BuildNavigationClientCommitNavigationCallback(navigation_request));
   } else {
     GetNavigationControl()->CommitNavigation(
-        std::move(common_params), commit_params, response_head,
+        std::move(common_params), std::move(commit_params), response_head,
         std::move(response_body), std::move(url_loader_client_endpoints),
         std::move(subresource_loader_factories),
         std::move(subresource_overrides), std::move(controller),
@@ -6993,7 +6996,7 @@
     mojom::NavigationClient* navigation_client,
     NavigationRequest* navigation_request,
     mojom::CommonNavigationParamsPtr common_params,
-    const content::CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     bool has_stale_copy_in_cache,
     int32_t error_code,
     const base::Optional<std::string>& error_page_content,
@@ -7001,14 +7004,16 @@
         subresource_loader_factories) {
   if (navigation_client) {
     navigation_client->CommitFailedNavigation(
-        std::move(common_params), commit_params, has_stale_copy_in_cache,
-        error_code, error_page_content, std::move(subresource_loader_factories),
+        std::move(common_params), std::move(commit_params),
+        has_stale_copy_in_cache, error_code, error_page_content,
+        std::move(subresource_loader_factories),
         BuildNavigationClientCommitFailedNavigationCallback(
             navigation_request));
   } else {
     GetNavigationControl()->CommitFailedNavigation(
-        std::move(common_params), commit_params, has_stale_copy_in_cache,
-        error_code, error_page_content, std::move(subresource_loader_factories),
+        std::move(common_params), std::move(commit_params),
+        has_stale_copy_in_cache, error_code, error_page_content,
+        std::move(subresource_loader_factories),
         BuildCommitFailedNavigationCallback(navigation_request));
   }
 }
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 2dfbe6b..894a911 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -168,7 +168,6 @@
 struct ContextMenuParams;
 struct FrameOwnerProperties;
 struct PendingNavigation;
-struct CommitNavigationParams;
 struct ResourceTimingInfo;
 struct SubresourceLoaderParams;
 
@@ -691,7 +690,7 @@
   void CommitNavigation(
       NavigationRequest* navigation_request,
       const mojom::CommonNavigationParams& common_params,
-      const CommitNavigationParams& commit_params,
+      const mojom::CommitNavigationParams& commit_params,
       network::ResourceResponse* response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
       network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -707,7 +706,7 @@
   // an error page.
   void FailedNavigation(NavigationRequest* navigation_request,
                         const mojom::CommonNavigationParams& common_params,
-                        const CommitNavigationParams& commit_params,
+                        const mojom::CommitNavigationParams& commit_params,
                         bool has_stale_copy_in_cache,
                         int error_code,
                         const base::Optional<std::string>& error_page_content);
@@ -1033,7 +1032,7 @@
       mojom::NavigationClient* navigation_client,
       NavigationRequest* navigation_request,
       mojom::CommonNavigationParamsPtr common_params,
-      const content::CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       const network::ResourceResponseHead& response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
       network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -1051,7 +1050,7 @@
       mojom::NavigationClient* navigation_client,
       NavigationRequest* navigation_request,
       mojom::CommonNavigationParamsPtr common_params,
-      const content::CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       bool has_stale_copy_in_cache,
       int32_t error_code,
       const base::Optional<std::string>& error_page_content,
@@ -1354,7 +1353,7 @@
 
   void UpdatePermissionsForNavigation(
       const mojom::CommonNavigationParams& common_params,
-      const CommitNavigationParams& commit_params);
+      const mojom::CommitNavigationParams& commit_params);
 
   // Creates a Network Service-backed factory from appropriate |NetworkContext|
   // and sets a connection error handler to trigger
diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc
index 50ec9b6a..fddc7a9 100644
--- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
@@ -425,7 +425,7 @@
             blink::mojom::Referrer::New(referrer.url, referrer.policy),
             navigate_type, PREVIEWS_UNSPECIFIED, base::TimeTicks::Now(),
             base::TimeTicks::Now());
-    CommitNavigationParams commit_params =
+    mojom::CommitNavigationParamsPtr commit_params =
         entry->ConstructCommitNavigationParams(
             *frame_entry, common_params->url, frame_entry->committed_origin(),
             common_params->method,
@@ -435,11 +435,11 @@
             controller->GetIndexOfEntry(entry),
             controller->GetLastCommittedEntryIndex(),
             controller->GetEntryCount());
-    commit_params.post_content_type = post_content_type;
+    commit_params->post_content_type = post_content_type;
 
     std::unique_ptr<NavigationRequest> navigation_request =
         NavigationRequest::CreateBrowserInitiated(
-            frame_tree_node, std::move(common_params), commit_params,
+            frame_tree_node, std::move(common_params), std::move(commit_params),
             !entry->is_renderer_initiated(), entry->extra_headers(),
             *frame_entry, entry, request_body,
             nullptr /* navigation_ui_data */);
@@ -2931,17 +2931,19 @@
           blink::mojom::Referrer::New(referrer.url, referrer.policy),
           mojom::NavigationType::DIFFERENT_DOCUMENT, PREVIEWS_UNSPECIFIED,
           base::TimeTicks::Now(), base::TimeTicks::Now());
-  CommitNavigationParams commit_params = entry.ConstructCommitNavigationParams(
-      *frame_entry, common_params->url, frame_entry->committed_origin(),
-      common_params->method, entry.GetSubframeUniqueNames(frame_tree_node),
-      controller().GetPendingEntryIndex() == -1 /* intended_as_new_entry */,
-      static_cast<NavigationControllerImpl&>(controller())
-          .GetIndexOfEntry(&entry),
-      controller().GetLastCommittedEntryIndex(), controller().GetEntryCount());
+  mojom::CommitNavigationParamsPtr commit_params =
+      entry.ConstructCommitNavigationParams(
+          *frame_entry, common_params->url, frame_entry->committed_origin(),
+          common_params->method, entry.GetSubframeUniqueNames(frame_tree_node),
+          controller().GetPendingEntryIndex() == -1 /* intended_as_new_entry */,
+          static_cast<NavigationControllerImpl&>(controller())
+              .GetIndexOfEntry(&entry),
+          controller().GetLastCommittedEntryIndex(),
+          controller().GetEntryCount());
 
   std::unique_ptr<NavigationRequest> navigation_request =
       NavigationRequest::CreateBrowserInitiated(
-          frame_tree_node, std::move(common_params), commit_params,
+          frame_tree_node, std::move(common_params), std::move(commit_params),
           !entry.is_renderer_initiated(), entry.extra_headers(), *frame_entry,
           &entry, nullptr /* request_body */, nullptr /* navigation_ui_data */);
   manager->DidCreateNavigationRequest(navigation_request.get());
diff --git a/content/browser/service_worker/service_worker_test_utils.cc b/content/browser/service_worker/service_worker_test_utils.cc
index 47cfc0a..3430552 100644
--- a/content/browser/service_worker/service_worker_test_utils.cc
+++ b/content/browser/service_worker/service_worker_test_utils.cc
@@ -100,7 +100,7 @@
   // mojom::NavigationClientPtr implementation:
   void CommitNavigation(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& request_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       const network::ResourceResponseHead& response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
       network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -120,7 +120,7 @@
   }
   void CommitFailedNavigation(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       bool has_stale_copy_in_cache,
       int error_code,
       const base::Optional<std::string>& error_page_content,
@@ -221,7 +221,7 @@
   common_params->referrer = blink::mojom::Referrer::New();
   common_params->navigation_start = base::TimeTicks::Now();
   navigation_client_->CommitNavigation(
-      std::move(common_params), CommitNavigationParams(),
+      std::move(common_params), CreateCommitNavigationParams(),
       network::ResourceResponseHead(), mojo::ScopedDataPipeConsumerHandle(),
       nullptr, nullptr, base::nullopt, nullptr, std::move(info),
       mojo::NullRemote(), base::UnguessableToken::Create(),
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index c9cb924..769b35b 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -78,10 +78,6 @@
               gfx.mojom.Rect clip_rect);
 };
 
-// See src/content/common/navigation_params.h
-[Native]
-struct CommitNavigationParams;
-
 // Implemented by the frame provider and currently must be associated with the
 // legacy IPC channel.
 // KEEP THE COMMIT FUNCTIONS IN SYNC in content/common/navigation_client.mojom.
diff --git a/content/common/frame.typemap b/content/common/frame.typemap
deleted file mode 100644
index 36e3849..0000000
--- a/content/common/frame.typemap
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-mojom = "//content/common/frame.mojom"
-public_headers = [ "//content/common/navigation_params.h" ]
-traits_headers = [ "//content/common/frame_messages.h" ]
-deps = [
-  "//content:export",
-]
-type_mappings =
-    [ "content.mojom.CommitNavigationParams=content::CommitNavigationParams" ]
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h
index 72cf248..a4971e4 100644
--- a/content/common/frame_messages.h
+++ b/content/common/frame_messages.h
@@ -47,7 +47,6 @@
 #include "content/public/common/screen_info.h"
 #include "content/public/common/stop_find_action.h"
 #include "content/public/common/three_d_api_types.h"
-#include "content/public/common/was_activated_option.h"
 #include "ipc/ipc_message_macros.h"
 #include "ipc/ipc_platform_file.h"
 #include "mojo/public/cpp/system/message_pipe.h"
@@ -145,8 +144,6 @@
                           blink::UserActivationUpdateType::kMaxValue)
 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebMediaPlayerAction::Type,
                           blink::WebMediaPlayerAction::Type::kMaxValue)
-IPC_ENUM_TRAITS_MAX_VALUE(content::WasActivatedOption,
-                          content::WasActivatedOption::kMaxValue)
 IPC_ENUM_TRAITS_MIN_MAX_VALUE(blink::WebScrollDirection,
                               blink::kFirstScrollDirection,
                               blink::kLastScrollDirection)
@@ -477,43 +474,6 @@
   IPC_STRUCT_TRAITS_MEMBER(loader_factory_handle)
 IPC_STRUCT_TRAITS_END()
 
-IPC_STRUCT_TRAITS_BEGIN(content::NavigationTiming)
-  IPC_STRUCT_TRAITS_MEMBER(redirect_start)
-  IPC_STRUCT_TRAITS_MEMBER(redirect_end)
-  IPC_STRUCT_TRAITS_MEMBER(fetch_start)
-IPC_STRUCT_TRAITS_END()
-
-IPC_STRUCT_TRAITS_BEGIN(content::CommitNavigationParams)
-  IPC_STRUCT_TRAITS_MEMBER(origin_to_commit)
-  IPC_STRUCT_TRAITS_MEMBER(is_overriding_user_agent)
-  IPC_STRUCT_TRAITS_MEMBER(redirects)
-  IPC_STRUCT_TRAITS_MEMBER(redirect_response)
-  IPC_STRUCT_TRAITS_MEMBER(redirect_infos)
-  IPC_STRUCT_TRAITS_MEMBER(post_content_type)
-  IPC_STRUCT_TRAITS_MEMBER(original_url)
-  IPC_STRUCT_TRAITS_MEMBER(original_method)
-  IPC_STRUCT_TRAITS_MEMBER(can_load_local_resources)
-  IPC_STRUCT_TRAITS_MEMBER(page_state)
-  IPC_STRUCT_TRAITS_MEMBER(nav_entry_id)
-  IPC_STRUCT_TRAITS_MEMBER(subframe_unique_names)
-  IPC_STRUCT_TRAITS_MEMBER(intended_as_new_entry)
-  IPC_STRUCT_TRAITS_MEMBER(pending_history_list_offset)
-  IPC_STRUCT_TRAITS_MEMBER(current_history_list_offset)
-  IPC_STRUCT_TRAITS_MEMBER(current_history_list_length)
-  IPC_STRUCT_TRAITS_MEMBER(was_discarded)
-  IPC_STRUCT_TRAITS_MEMBER(is_view_source)
-  IPC_STRUCT_TRAITS_MEMBER(should_clear_history_list)
-  IPC_STRUCT_TRAITS_MEMBER(navigation_timing)
-  IPC_STRUCT_TRAITS_MEMBER(appcache_host_id)
-  IPC_STRUCT_TRAITS_MEMBER(was_activated)
-  IPC_STRUCT_TRAITS_MEMBER(navigation_token)
-  IPC_STRUCT_TRAITS_MEMBER(prefetched_signed_exchanges)
-#if defined(OS_ANDROID)
-  IPC_STRUCT_TRAITS_MEMBER(data_url_as_string)
-#endif
-  IPC_STRUCT_TRAITS_MEMBER(is_browser_initiated)
-IPC_STRUCT_TRAITS_END()
-
 IPC_STRUCT_TRAITS_BEGIN(blink::ParsedFeaturePolicyDeclaration)
   IPC_STRUCT_TRAITS_MEMBER(feature)
   IPC_STRUCT_TRAITS_MEMBER(values)
diff --git a/content/common/navigation_client.mojom b/content/common/navigation_client.mojom
index 9c386653..4f891bf 100644
--- a/content/common/navigation_client.mojom
+++ b/content/common/navigation_client.mojom
@@ -16,10 +16,6 @@
 import "third_party/blink/public/mojom/service_worker/service_worker_provider.mojom";
 import "third_party/blink/public/mojom/commit_result/commit_result.mojom";
 
-// See src/content/common/navigation_params.h
-[Native]
-struct CommitNavigationParams;
-
 interface NavigationClient {
   // Tells the renderer that a navigation is ready to commit.
   //
diff --git a/content/common/navigation_params.cc b/content/common/navigation_params.cc
index 0c532666..dd256ac 100644
--- a/content/common/navigation_params.cc
+++ b/content/common/navigation_params.cc
@@ -35,45 +35,12 @@
 
 InitiatorCSPInfo::~InitiatorCSPInfo() = default;
 
-CommitNavigationParams::CommitNavigationParams()
-    : navigation_token(base::UnguessableToken::Create()) {}
+mojom::CommitNavigationParamsPtr CreateCommitNavigationParams() {
+  auto commit_params = mojom::CommitNavigationParams::New();
+  commit_params->navigation_token = base::UnguessableToken::Create();
+  commit_params->navigation_timing = mojom::NavigationTiming::New();
 
-CommitNavigationParams::CommitNavigationParams(
-    const base::Optional<url::Origin>& origin_to_commit,
-    bool is_overriding_user_agent,
-    const std::vector<GURL>& redirects,
-    const GURL& original_url,
-    const std::string& original_method,
-    bool can_load_local_resources,
-    const PageState& page_state,
-    int nav_entry_id,
-    std::map<std::string, bool> subframe_unique_names,
-    bool intended_as_new_entry,
-    int pending_history_list_offset,
-    int current_history_list_offset,
-    int current_history_list_length,
-    bool is_view_source,
-    bool should_clear_history_list)
-    : origin_to_commit(origin_to_commit),
-      is_overriding_user_agent(is_overriding_user_agent),
-      redirects(redirects),
-      original_url(original_url),
-      original_method(original_method),
-      can_load_local_resources(can_load_local_resources),
-      page_state(page_state),
-      nav_entry_id(nav_entry_id),
-      subframe_unique_names(subframe_unique_names),
-      intended_as_new_entry(intended_as_new_entry),
-      pending_history_list_offset(pending_history_list_offset),
-      current_history_list_offset(current_history_list_offset),
-      current_history_list_length(current_history_list_length),
-      is_view_source(is_view_source),
-      should_clear_history_list(should_clear_history_list),
-      navigation_token(base::UnguessableToken::Create()) {}
-
-CommitNavigationParams::CommitNavigationParams(
-    const CommitNavigationParams& other) = default;
-
-CommitNavigationParams::~CommitNavigationParams() = default;
+  return commit_params;
+}
 
 }  // namespace content
diff --git a/content/common/navigation_params.h b/content/common/navigation_params.h
index 88c983c..4da72d1 100644
--- a/content/common/navigation_params.h
+++ b/content/common/navigation_params.h
@@ -25,7 +25,7 @@
 #include "content/public/common/page_state.h"
 #include "content/public/common/previews_state.h"
 #include "content/public/common/referrer.h"
-#include "content/public/common/was_activated_option.h"
+#include "content/public/common/was_activated_option.mojom.h"
 #include "net/url_request/redirect_info.h"
 #include "services/network/public/cpp/resource_request_body.h"
 #include "services/network/public/cpp/resource_response.h"
@@ -81,157 +81,7 @@
   base::Optional<CSPSource> initiator_self_source;
 };
 
-// Provided by the browser -----------------------------------------------------
-
-// Timings collected in the browser during navigation for the
-// Navigation Timing API. Sent to Blink in CommitNavigationParams when
-// the navigation is ready to be committed.
-struct CONTENT_EXPORT NavigationTiming {
-  base::TimeTicks redirect_start;
-  base::TimeTicks redirect_end;
-  base::TimeTicks fetch_start;
-};
-
-// Used by commit IPC messages. Holds the parameters needed by the renderer to
-// commit a navigation besides those in CommonNavigationParams.
-struct CONTENT_EXPORT CommitNavigationParams {
-  CommitNavigationParams();
-  CommitNavigationParams(const base::Optional<url::Origin>& origin_to_commit,
-                         bool is_overriding_user_agent,
-                         const std::vector<GURL>& redirects,
-                         const GURL& original_url,
-                         const std::string& original_method,
-                         bool can_load_local_resources,
-                         const PageState& page_state,
-                         int nav_entry_id,
-                         std::map<std::string, bool> subframe_unique_names,
-                         bool intended_as_new_entry,
-                         int pending_history_list_offset,
-                         int current_history_list_offset,
-                         int current_history_list_length,
-                         bool is_view_source,
-                         bool should_clear_history_list);
-  CommitNavigationParams(const CommitNavigationParams& other);
-  ~CommitNavigationParams();
-
-  // The origin to be used for committing the navigation, if specified.
-  // This will be an origin that's compatible with the |url| in the
-  // CommonNavigationParams; if |url| is data: or about:blank, or the frame has
-  // sandbox attributes, this determines the origin of the resulting document.
-  // It is specified for session history navigations, for which the origin is
-  // known and saved in the FrameNavigationEntry.
-  base::Optional<url::Origin> origin_to_commit;
-
-  // Whether or not the user agent override string should be used.
-  bool is_overriding_user_agent = false;
-
-  // Any redirect URLs that occurred before |url|. Useful for cross-process
-  // navigations; defaults to empty.
-  std::vector<GURL> redirects;
-
-  // The ResourceResponseInfos received during redirects.
-  std::vector<network::ResourceResponseHead> redirect_response;
-
-  // The RedirectInfos received during redirects.
-  std::vector<net::RedirectInfo> redirect_infos;
-
-  // The content type from the request headers for POST requests.
-  std::string post_content_type;
-
-  // The original URL & method for this navigation.
-  GURL original_url;
-  std::string original_method;
-
-  // Whether or not this url should be allowed to access local file://
-  // resources.
-  bool can_load_local_resources = false;
-
-  // Opaque history state (received by ViewHostMsg_UpdateState).
-  PageState page_state;
-
-  // For browser-initiated navigations, this is the unique id of the
-  // NavigationEntry being navigated to. (For renderer-initiated navigations it
-  // is 0.) If the load succeeds, then this nav_entry_id will be reflected in
-  // the resulting FrameHostMsg_DidCommitProvisionalLoad_Params.
-  int nav_entry_id = 0;
-
-  // If this is a history navigation, this contains a map of frame unique names
-  // to |is_about_blank| for immediate children of the frame being navigated for
-  // which there are history items.  The renderer process only needs to check
-  // with the browser process for newly created subframes that have these unique
-  // names (and only when not staying on about:blank).
-  // TODO(creis): Expand this to a data structure including corresponding
-  // same-process PageStates for the whole subtree in https://crbug.com/639842.
-  std::map<std::string, bool> subframe_unique_names;
-
-  // For browser-initiated navigations, this is true if this is a new entry
-  // being navigated to. This is false otherwise. TODO(avi): Remove this when
-  // the pending entry situation is made sane and the browser keeps them around
-  // long enough to match them via nav_entry_id, above.
-  bool intended_as_new_entry = false;
-
-  // For history navigations, this is the offset in the history list of the
-  // pending load. For non-history navigations, this will be ignored.
-  int pending_history_list_offset = -1;
-
-  // Where its current page contents reside in session history and the total
-  // size of the session history list.
-  int current_history_list_offset = -1;
-  int current_history_list_length = 0;
-
-  // Indicates that the tab was previously discarded.
-  // wasDiscarded is exposed on Document after discard, see:
-  // https://github.com/WICG/web-lifecycle
-  bool was_discarded = false;
-
-  // Indicates whether the navigation is to a view-source:// scheme or not.
-  // It is a separate boolean as the view-source scheme is stripped from the
-  // URL before it is sent to the renderer process and the RenderFrame needs
-  // to be put in special view source mode.
-  bool is_view_source = false;
-
-  // Whether session history should be cleared. In that case, the RenderView
-  // needs to notify the browser that the clearing was succesful when the
-  // navigation commits.
-  bool should_clear_history_list = false;
-
-  // Timing of navigation events.
-  NavigationTiming navigation_timing;
-
-  // The AppCache host id to be used to identify this navigation.
-  base::Optional<base::UnguessableToken> appcache_host_id;
-
-  // Set to |kYes| if a navigation is following the rules of user activation
-  // propagation. This is different from |has_user_gesture|
-  // (in CommonNavigationParams) as the activation may have happened before
-  // the navigation was triggered, for example.
-  // In other words, the distinction isn't regarding user activation and user
-  // gesture but whether there was an activation prior to the navigation or to
-  // start it. `was_activated` will answer the former question while
-  // `user_gesture` will answer the latter.
-  WasActivatedOption was_activated = WasActivatedOption::kUnknown;
-
-  // A token that should be passed to the browser process in
-  // DidCommitProvisionalLoadParams.
-  // TODO(clamy): Remove this once NavigationClient has shipped and
-  // same-document browser-initiated navigations are properly handled as well.
-  base::UnguessableToken navigation_token;
-
-  // Prefetched signed exchanges. Used when SignedExchangeSubresourcePrefetch
-  // feature is enabled.
-  std::vector<PrefetchedSignedExchangeInfo> prefetched_signed_exchanges;
-
-#if defined(OS_ANDROID)
-  // The real content of the data: URL. Only used in Android WebView for
-  // implementing LoadDataWithBaseUrl API method to circumvent the restriction
-  // on the GURL max length in the IPC layer. Short data: URLs can still be
-  // passed in the |CommonNavigationParams::url| field.
-  std::string data_url_as_string;
-#endif
-
-  // Whether this navigation was browser initiated.
-  bool is_browser_initiated = false;
-};
+CONTENT_EXPORT mojom::CommitNavigationParamsPtr CreateCommitNavigationParams();
 
 }  // namespace content
 
diff --git a/content/common/navigation_params.mojom b/content/common/navigation_params.mojom
index 71a9a447..6bf27ad 100644
--- a/content/common/navigation_params.mojom
+++ b/content/common/navigation_params.mojom
@@ -4,7 +4,9 @@
 
 module content.mojom;
 
+import "content/public/common/was_activated_option.mojom";
 import "mojo/public/mojom/base/time.mojom";
+import "mojo/public/mojom/base/unguessable_token.mojom";
 import "mojo/public/mojom/base/values.mojom";
 import "services/network/public/mojom/url_loader.mojom";
 import "third_party/blink/public/mojom/fetch/fetch_api_request.mojom";
@@ -23,9 +25,15 @@
 struct NavigationDownloadPolicy;
 
 [Native]
+struct PageState;
+
+[Native]
 enum PageTransition;
 
 [Native]
+struct PrefetchedSignedExchangeInfo;
+
+[Native]
 struct SourceLocation;
 
 enum NavigationType {
@@ -206,3 +214,135 @@
   // setting it.
   mojo_base.mojom.TimeTicks input_start;
 };
+
+// Provided by the browser -----------------------------------------------------
+
+// Timings collected in the browser during navigation for the
+// Navigation Timing API. Sent to Blink in CommitNavigationParams when
+// the navigation is ready to be committed.
+struct NavigationTiming {
+  mojo_base.mojom.TimeTicks redirect_start;
+  mojo_base.mojom.TimeTicks redirect_end;
+  mojo_base.mojom.TimeTicks fetch_start;
+};
+
+// Used by commit IPC messages. Holds the parameters needed by the renderer to
+// commit a navigation besides those in CommonNavigationParams.
+struct CommitNavigationParams {
+  // The origin to be used for committing the navigation, if specified.
+  // This will be an origin that's compatible with the |url| in the
+  // CommonNavigationParams; if |url| is data: or about:blank, or the frame has
+  // sandbox attributes, this determines the origin of the resulting document.
+  // It is specified for session history navigations, for which the origin is
+  // known and saved in the FrameNavigationEntry.
+  url.mojom.Origin? origin_to_commit;
+
+  // Whether or not the user agent override string should be used.
+  bool is_overriding_user_agent = false;
+
+  // Any redirect URLs that occurred before |url|. Useful for cross-process
+  // navigations; defaults to empty.
+  array<url.mojom.Url> redirects;
+
+  // The ResourceResponseInfos received during redirects.
+  array<network.mojom.URLResponseHead> redirect_response;
+
+  // The RedirectInfos received during redirects.
+  array<network.mojom.URLRequestRedirectInfo> redirect_infos;
+
+  // The content type from the request headers for POST requests.
+  string post_content_type;
+
+  // The original URL & method for this navigation.
+  url.mojom.Url original_url;
+  string original_method;
+
+  // Whether or not this url should be allowed to access local file://
+  // resources.
+  bool can_load_local_resources = false;
+
+  // Opaque history state (received by FrameHostMsg_UpdateState).
+  PageState page_state;
+
+  // For browser-initiated navigations, this is the unique id of the
+  // NavigationEntry being navigated to. (For renderer-initiated navigations it
+  // is 0.) If the load succeeds, then this nav_entry_id will be reflected in
+  // the resulting FrameHostMsg_DidCommitProvisionalLoad_Params.
+  int32 nav_entry_id = 0;
+
+  // If this is a history navigation, this contains a map of frame unique names
+  // to |is_about_blank| for immediate children of the frame being navigated for
+  // which there are history items.  The renderer process only needs to check
+  // with the browser process for newly created subframes that have these unique
+  // names (and only when not staying on about:blank).
+  // TODO(creis): Expand this to a data structure including corresponding
+  // same-process PageStates for the whole subtree in https://crbug.com/639842.
+  map<string, bool> subframe_unique_names;
+
+  // For browser-initiated navigations, this is true if this is a new entry
+  // being navigated to. This is false otherwise. TODO(avi): Remove this when
+  // the pending entry situation is made sane and the browser keeps them around
+  // long enough to match them via nav_entry_id, above.
+  bool intended_as_new_entry = false;
+
+  // For history navigations, this is the offset in the history list of the
+  // pending load. For non-history navigations, this will be ignored.
+  int32 pending_history_list_offset = -1;
+
+  // Where its current page contents reside in session history and the total
+  // size of the session history list.
+  int32 current_history_list_offset = -1;
+  int32 current_history_list_length = 0;
+
+  // Indicates that the tab was previously discarded.
+  // wasDiscarded is exposed on Document after discard, see:
+  // https://github.com/WICG/web-lifecycle
+  bool was_discarded = false;
+
+  // Indicates whether the navigation is to a view-source:// scheme or not.
+  // It is a separate boolean as the view-source scheme is stripped from the
+  // URL before it is sent to the renderer process and the RenderFrame needs
+  // to be put in special view source mode.
+  bool is_view_source = false;
+
+  // Whether session history should be cleared. In that case, the RenderView
+  // needs to notify the browser that the clearing was successful when the
+  // navigation commits.
+  bool should_clear_history_list = false;
+
+  // Timing of navigation events.
+  NavigationTiming navigation_timing;
+
+  // The AppCache host id to be used to identify this navigation.
+  mojo_base.mojom.UnguessableToken? appcache_host_id;
+
+  // Set to |kYes| if a navigation is following the rules of user activation
+  // propagation. This is different from |has_user_gesture|
+  // (in CommonNavigationParams) as the activation may have happened before
+  // the navigation was triggered, for example.
+  // In other words, the distinction isn't regarding user activation and user
+  // gesture but whether there was an activation prior to the navigation or to
+  // start it. `was_activated` will answer the former question while
+  // `user_gesture` will answer the latter.
+  WasActivatedOption was_activated = kUnknown;
+
+  // A token that should be passed to the browser process in
+  // DidCommitProvisionalLoadParams.
+  // TODO(clamy): Remove this once NavigationClient has shipped and
+  // same-document browser-initiated navigations are properly handled as well.
+  mojo_base.mojom.UnguessableToken navigation_token;
+
+  // Prefetched signed exchanges. Used when SignedExchangeSubresourcePrefetch
+  // feature is enabled.
+  array<PrefetchedSignedExchangeInfo> prefetched_signed_exchanges;
+
+  // The real content of the data: URL. Only used in Android WebView for
+  // implementing LoadDataWithBaseUrl API method to circumvent the restriction
+  // on the GURL max length in the IPC layer. Short data: URLs can still be
+  // passed in the |CommonNavigationParams::url| field.
+  [EnableIf=is_android]
+  string data_url_as_string;
+
+  // Whether this navigation was browser initiated.
+  bool is_browser_initiated = false;
+};
diff --git a/content/common/navigation_params.typemap b/content/common/navigation_params.typemap
index a394fbd..c3ab177 100644
--- a/content/common/navigation_params.typemap
+++ b/content/common/navigation_params.typemap
@@ -5,6 +5,8 @@
 mojom = "//content/common/navigation_params.mojom"
 public_headers = [
   "//content/common/navigation_params.h",
+  "//content/common/prefetched_signed_exchange_info.h",
+  "//content/public/common/page_state.h",
   "//content/public/common/navigation_policy.h",
   "//third_party/blink/public/platform/web_mixed_content_context_type.h",
   "//ui/base/page_transition_types.h",
@@ -20,6 +22,8 @@
   "content.mojom.InitiatorCSPInfo=::content::InitiatorCSPInfo",
   "content.mojom.MixedContentContextType=::blink::WebMixedContentContextType",
   "content.mojom.NavigationDownloadPolicy=::content::NavigationDownloadPolicy",
+  "content.mojom.PageState=::content::PageState",
   "content.mojom.PageTransition=::ui::PageTransition",
+  "content.mojom.PrefetchedSignedExchangeInfo=::content::PrefetchedSignedExchangeInfo",
   "content.mojom.SourceLocation=::content::SourceLocation",
 ]
diff --git a/content/common/typemaps.gni b/content/common/typemaps.gni
index 920be07..e01e065 100644
--- a/content/common/typemaps.gni
+++ b/content/common/typemaps.gni
@@ -3,7 +3,6 @@
 # found in the LICENSE file.
 
 typemaps = [
-  "//content/common/frame.typemap",
   "//content/common/frame_messages.typemap",
   "//content/common/input/synchronous_compositor.typemap",
   "//content/common/native_types.typemap",
diff --git a/content/public/browser/navigation_controller.cc b/content/public/browser/navigation_controller.cc
index 7b11ca8f..e152cc82 100644
--- a/content/public/browser/navigation_controller.cc
+++ b/content/public/browser/navigation_controller.cc
@@ -7,7 +7,7 @@
 #include "base/memory/ref_counted_memory.h"
 #include "build/build_config.h"
 #include "content/public/browser/render_frame_host.h"
-#include "content/public/common/was_activated_option.h"
+#include "content/public/common/was_activated_option.mojom.h"
 
 namespace content {
 
@@ -26,7 +26,7 @@
       started_from_context_menu(false),
       navigation_ui_data(nullptr),
       from_download_cross_origin_redirect(false),
-      was_activated(WasActivatedOption::kUnknown),
+      was_activated(mojom::WasActivatedOption::kUnknown),
       reload_type(ReloadType::NONE) {}
 
 NavigationController::LoadURLParams::~LoadURLParams() {
diff --git a/content/public/browser/navigation_controller.h b/content/public/browser/navigation_controller.h
index 254b4a1..a3048715 100644
--- a/content/public/browser/navigation_controller.h
+++ b/content/public/browser/navigation_controller.h
@@ -24,6 +24,7 @@
 #include "content/public/browser/session_storage_namespace.h"
 #include "content/public/browser/site_instance.h"
 #include "content/public/common/referrer.h"
+#include "content/public/common/was_activated_option.mojom.h"
 #include "services/network/public/cpp/resource_request_body.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "ui/base/page_transition_types.h"
@@ -38,7 +39,6 @@
 
 namespace content {
 
-enum class WasActivatedOption;
 class BrowserContext;
 class NavigationEntry;
 class WebContents;
@@ -223,7 +223,7 @@
 
     // Set to |kYes| if the navigation should propagate user activation. This
     // is used by embedders where the activation has occurred outside the page.
-    WasActivatedOption was_activated;
+    mojom::WasActivatedOption was_activated;
 
     // If this navigation was initiated from a link that specified the
     // hrefTranslate attribute, this contains the attribute's value (a BCP47
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn
index d3492e0c..62bea64 100644
--- a/content/public/common/BUILD.gn
+++ b/content/public/common/BUILD.gn
@@ -209,7 +209,6 @@
     "use_zoom_for_dsf_policy.cc",
     "use_zoom_for_dsf_policy.h",
     "user_agent.h",
-    "was_activated_option.h",
     "web_preferences.cc",
     "web_preferences.h",
     "webplugininfo.cc",
@@ -366,6 +365,7 @@
     "resource_load_info.mojom",
     "resource_usage_reporter.mojom",
     "transferrable_url_loader.mojom",
+    "was_activated_option.mojom",
     "webplugininfo.mojom",
     "window_container_type.mojom",
   ]
diff --git a/content/public/common/was_activated_option.h b/content/public/common/was_activated_option.mojom
similarity index 67%
rename from content/public/common/was_activated_option.h
rename to content/public/common/was_activated_option.mojom
index 23b37bf..16b10bf 100644
--- a/content/public/common/was_activated_option.h
+++ b/content/public/common/was_activated_option.mojom
@@ -2,14 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_PUBLIC_COMMON_WAS_ACTIVATED_OPTION_H_
-#define CONTENT_PUBLIC_COMMON_WAS_ACTIVATED_OPTION_H_
-
-namespace content {
+module content.mojom;
 
 // Whether the navigation should propagate user activation. This can be
 // specified by embedders in NavigationController::LoadURLParams.
-enum class WasActivatedOption {
+enum WasActivatedOption {
   // The content layer should make a decision about whether to propagate user
   // activation.
   kUnknown,
@@ -19,9 +16,4 @@
 
   // The navigation should not propagate user activation.
   kNo,
-  kMaxValue = kNo,
 };
-
-}  // namespace content
-
-#endif  // CONTENT_PUBLIC_COMMON_WAS_ACTIVATED_OPTION_H_
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index 7c3f1623..b2b8182 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -664,7 +664,7 @@
   TestRenderFrame* frame =
       static_cast<TestRenderFrame*>(impl->GetMainRenderFrame());
   FrameLoadWaiter waiter(frame);
-  frame->Navigate(std::move(common_params), CommitNavigationParams());
+  frame->Navigate(std::move(common_params), CreateCommitNavigationParams());
   waiter.Wait();
   view_->GetWebView()->MainFrameWidget()->UpdateAllLifecyclePhases(
       blink::WebWidget::LifecycleUpdateReason::kTest);
@@ -807,17 +807,17 @@
       false /* started_from_context_menu */, false /* has_user_gesture */,
       InitiatorCSPInfo(), std::vector<int>(), std::string(),
       false /* is_history_navigation_in_new_child_frame */, base::TimeTicks());
-  CommitNavigationParams commit_params;
-  commit_params.page_state = state;
-  commit_params.nav_entry_id = pending_offset + 1;
-  commit_params.pending_history_list_offset = pending_offset;
-  commit_params.current_history_list_offset = impl->history_list_offset_;
-  commit_params.current_history_list_length = history_list_length;
+  auto commit_params = CreateCommitNavigationParams();
+  commit_params->page_state = state;
+  commit_params->nav_entry_id = pending_offset + 1;
+  commit_params->pending_history_list_offset = pending_offset;
+  commit_params->current_history_list_offset = impl->history_list_offset_;
+  commit_params->current_history_list_length = history_list_length;
 
   TestRenderFrame* frame =
       static_cast<TestRenderFrame*>(impl->GetMainRenderFrame());
   FrameLoadWaiter waiter(frame);
-  frame->Navigate(std::move(common_params), commit_params);
+  frame->Navigate(std::move(common_params), std::move(commit_params));
   // The load may actually happen asynchronously, so we pump messages to process
   // the pending continuation.
   waiter.Wait();
diff --git a/content/renderer/loader/navigation_body_loader.cc b/content/renderer/loader/navigation_body_loader.cc
index 95e15eb..50fc776 100644
--- a/content/renderer/loader/navigation_body_loader.cc
+++ b/content/renderer/loader/navigation_body_loader.cc
@@ -21,7 +21,7 @@
 // static
 void NavigationBodyLoader::FillNavigationParamsResponseAndBodyLoader(
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params,
+    const mojom::CommitNavigationParams& commit_params,
     int request_id,
     const network::ResourceResponseHead& response_head,
     mojo::ScopedDataPipeConsumerHandle response_body,
diff --git a/content/renderer/loader/navigation_body_loader.h b/content/renderer/loader/navigation_body_loader.h
index 889f0b2..90844dd 100644
--- a/content/renderer/loader/navigation_body_loader.h
+++ b/content/renderer/loader/navigation_body_loader.h
@@ -50,7 +50,7 @@
   // redirects and response, and also creates a body loader if needed.
   static void FillNavigationParamsResponseAndBodyLoader(
       const mojom::CommonNavigationParams& common_params,
-      const CommitNavigationParams& commit_params,
+      const mojom::CommitNavigationParams& commit_params,
       int request_id,
       const network::ResourceResponseHead& response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
diff --git a/content/renderer/loader/navigation_body_loader_unittest.cc b/content/renderer/loader/navigation_body_loader_unittest.cc
index 6f364a33..3dd7878 100644
--- a/content/renderer/loader/navigation_body_loader_unittest.cc
+++ b/content/renderer/loader/navigation_body_loader_unittest.cc
@@ -48,8 +48,9 @@
     auto common_params = mojom::CommonNavigationParams::New();
     common_params->referrer = blink::mojom::Referrer::New();
     common_params->navigation_start = base::TimeTicks::Now();
+    auto commit_params = CreateCommitNavigationParams();
     NavigationBodyLoader::FillNavigationParamsResponseAndBodyLoader(
-        *common_params, CommitNavigationParams(), 1 /* request_id */,
+        *common_params, *commit_params, 1 /* request_id */,
         network::ResourceResponseHead(),
         mojo::ScopedDataPipeConsumerHandle() /* response_body */,
         std::move(endpoints),
@@ -316,11 +317,12 @@
   common_params->referrer = blink::mojom::Referrer::New();
   common_params->navigation_start = base::TimeTicks::Now();
   common_params->url = GURL("https://example.test");
+  auto commit_params = CreateCommitNavigationParams();
 
   blink::WebNavigationParams navigation_params;
   auto endpoints = network::mojom::URLLoaderClientEndpoints::New();
   NavigationBodyLoader::FillNavigationParamsResponseAndBodyLoader(
-      *common_params, CommitNavigationParams(), 1 /* request_id */, response,
+      *common_params, *commit_params, 1 /* request_id */, response,
       mojo::ScopedDataPipeConsumerHandle() /* response_body */,
       std::move(endpoints),
       blink::scheduler::GetSingleThreadTaskRunnerForTesting(),
diff --git a/content/renderer/navigation_client.cc b/content/renderer/navigation_client.cc
index 1765789..0bb8c7f 100644
--- a/content/renderer/navigation_client.cc
+++ b/content/renderer/navigation_client.cc
@@ -17,7 +17,7 @@
 
 void NavigationClient::CommitNavigation(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     const network::ResourceResponseHead& response_head,
     mojo::ScopedDataPipeConsumerHandle response_body,
     network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -36,7 +36,7 @@
   // unexpectedly abort the ongoing navigation. Remove when the races are fixed.
   ResetDisconnectionHandler();
   render_frame_->CommitPerNavigationMojoInterfaceNavigation(
-      std::move(common_params), commit_params, response_head,
+      std::move(common_params), std::move(commit_params), response_head,
       std::move(response_body), std::move(url_loader_client_endpoints),
       std::move(subresource_loaders), std::move(subresource_overrides),
       std::move(controller_service_worker_info), std::move(provider_info),
@@ -46,7 +46,7 @@
 
 void NavigationClient::CommitFailedNavigation(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     bool has_stale_copy_in_cache,
     int error_code,
     const base::Optional<std::string>& error_page_content,
@@ -54,9 +54,9 @@
     CommitFailedNavigationCallback callback) {
   ResetDisconnectionHandler();
   render_frame_->CommitFailedPerNavigationMojoInterfaceNavigation(
-      std::move(common_params), commit_params, has_stale_copy_in_cache,
-      error_code, error_page_content, std::move(subresource_loaders),
-      std::move(callback));
+      std::move(common_params), std::move(commit_params),
+      has_stale_copy_in_cache, error_code, error_page_content,
+      std::move(subresource_loaders), std::move(callback));
 }
 
 void NavigationClient::Bind(mojom::NavigationClientAssociatedRequest request) {
diff --git a/content/renderer/navigation_client.h b/content/renderer/navigation_client.h
index 36f07828..56199316 100644
--- a/content/renderer/navigation_client.h
+++ b/content/renderer/navigation_client.h
@@ -20,7 +20,7 @@
   // mojom::NavigationClient implementation:
   void CommitNavigation(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       const network::ResourceResponseHead& response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
       network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -36,7 +36,7 @@
       CommitNavigationCallback callback) override;
   void CommitFailedNavigation(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       bool has_stale_copy_in_cache,
       int error_code,
       const base::Optional<std::string>& error_page_content,
diff --git a/content/renderer/navigation_state.cc b/content/renderer/navigation_state.cc
index 2239f05..66413a2 100644
--- a/content/renderer/navigation_state.cc
+++ b/content/renderer/navigation_state.cc
@@ -22,7 +22,7 @@
 // static
 std::unique_ptr<NavigationState> NavigationState::CreateBrowserInitiated(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     base::TimeTicks time_commit_requested,
     mojom::FrameNavigationControl::CommitNavigationCallback callback,
     mojom::NavigationClient::CommitNavigationCallback
@@ -30,8 +30,9 @@
     std::unique_ptr<NavigationClient> navigation_client,
     bool was_initiated_in_this_frame) {
   return base::WrapUnique(new NavigationState(
-      std::move(common_params), commit_params, time_commit_requested, false,
-      std::move(callback), std::move(per_navigation_mojo_interface_callback),
+      std::move(common_params), std::move(commit_params), time_commit_requested,
+      false, std::move(callback),
+      std::move(per_navigation_mojo_interface_callback),
       std::move(navigation_client), was_initiated_in_this_frame));
 }
 
@@ -41,8 +42,9 @@
   common_params->referrer = blink::mojom::Referrer::New();
   common_params->navigation_start = base::TimeTicks::Now();
   return base::WrapUnique(new NavigationState(
-      std::move(common_params), CommitNavigationParams(), base::TimeTicks(),
-      true, content::mojom::FrameNavigationControl::CommitNavigationCallback(),
+      std::move(common_params), CreateCommitNavigationParams(),
+      base::TimeTicks(), true,
+      content::mojom::FrameNavigationControl::CommitNavigationCallback(),
       content::mojom::NavigationClient::CommitNavigationCallback(), nullptr,
       true));
 }
@@ -80,7 +82,7 @@
 
 NavigationState::NavigationState(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     base::TimeTicks time_commit_requested,
     bool is_content_initiated,
     mojom::FrameNavigationControl::CommitNavigationCallback callback,
@@ -93,7 +95,7 @@
       was_initiated_in_this_frame_(was_initiated_in_this_frame),
       is_content_initiated_(is_content_initiated),
       common_params_(std::move(common_params)),
-      commit_params_(commit_params),
+      commit_params_(std::move(commit_params)),
       time_commit_requested_(time_commit_requested),
       navigation_client_(std::move(navigation_client)),
       commit_callback_(std::move(callback)),
diff --git a/content/renderer/navigation_state.h b/content/renderer/navigation_state.h
index 7938258..5d3b40d 100644
--- a/content/renderer/navigation_state.h
+++ b/content/renderer/navigation_state.h
@@ -32,7 +32,7 @@
 
   static std::unique_ptr<NavigationState> CreateBrowserInitiated(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       base::TimeTicks time_commit_requested,
       mojom::FrameNavigationControl::CommitNavigationCallback callback,
       mojom::NavigationClient::CommitNavigationCallback
@@ -54,7 +54,9 @@
   const mojom::CommonNavigationParams& common_params() const {
     return *common_params_;
   }
-  const CommitNavigationParams& commit_params() const { return commit_params_; }
+  const mojom::CommitNavigationParams& commit_params() const {
+    return *commit_params_;
+  }
   bool request_committed() const { return request_committed_; }
   bool uses_per_navigation_mojo_interface() const {
     return navigation_client_.get();
@@ -95,7 +97,7 @@
  private:
   NavigationState(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       base::TimeTicks time_commit_requested,
       bool is_content_initiated,
       content::mojom::FrameNavigationControl::CommitNavigationCallback callback,
@@ -131,7 +133,7 @@
   // swaps because FrameLoader::loadWithNavigationAction treats loads before a
   // FrameLoader has committedFirstRealDocumentLoad as a replacement. (Added for
   // http://crbug.com/178380).
-  const CommitNavigationParams commit_params_;
+  mojom::CommitNavigationParamsPtr commit_params_;
 
   // Time when RenderFrameImpl::CommitNavigation() is called.
   base::TimeTicks time_commit_requested_;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index acebcca..4c3e0dea 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -440,7 +440,7 @@
 
 void FillNavigationParamsRequest(
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params,
+    const mojom::CommitNavigationParams& commit_params,
     blink::WebNavigationParams* navigation_params) {
   // Use the original navigation url to start with. We'll replay the redirects
   // afterwards and will eventually arrive to the final url.
@@ -887,7 +887,7 @@
 // navigation parameters available in the RenderFrameImpl.
 std::unique_ptr<DocumentState> BuildDocumentStateFromParams(
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params,
+    const mojom::CommitNavigationParams& commit_params,
     base::TimeTicks time_commit_requested,
     mojom::FrameNavigationControl::CommitNavigationCallback commit_callback,
     mojom::NavigationClient::CommitNavigationCallback
@@ -953,7 +953,7 @@
 
   InternalDocumentStateData::FromDocumentState(document_state.get())
       ->set_navigation_state(NavigationState::CreateBrowserInitiated(
-          common_params.Clone(), commit_params, time_commit_requested,
+          common_params.Clone(), commit_params.Clone(), time_commit_requested,
           std::move(commit_callback),
           std::move(per_navigation_mojo_interface_commit_callback),
           std::move(navigation_client), was_initiated_in_this_frame));
@@ -999,7 +999,7 @@
 // format, blink::WebNavigationTimings.
 blink::WebNavigationTimings BuildNavigationTimings(
     base::TimeTicks navigation_start,
-    const NavigationTiming& browser_navigation_timings,
+    const mojom::NavigationTiming& browser_navigation_timings,
     base::TimeTicks input_start) {
   blink::WebNavigationTimings renderer_navigation_timings;
 
@@ -1031,14 +1031,14 @@
 // format, blink::WebNavigationParams.
 void FillMiscNavigationParams(
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params,
+    const mojom::CommitNavigationParams& commit_params,
     blink::WebNavigationParams* navigation_params) {
   navigation_params->navigation_timings = BuildNavigationTimings(
-      common_params.navigation_start, commit_params.navigation_timing,
+      common_params.navigation_start, *commit_params.navigation_timing,
       common_params.input_start);
 
   navigation_params->is_user_activated =
-      commit_params.was_activated == WasActivatedOption::kYes;
+      commit_params.was_activated == mojom::WasActivatedOption::kYes;
 
   navigation_params->is_browser_initiated = commit_params.is_browser_initiated;
 
@@ -3381,7 +3381,7 @@
 
 void RenderFrameImpl::CommitNavigation(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     const network::ResourceResponseHead& response_head,
     mojo::ScopedDataPipeConsumerHandle response_body,
     network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -3400,7 +3400,7 @@
   // IsPerNavigationMojoInterfaceEnabled() == true, for non-committed
   // interstitials where no NavigationRequest was created. Therefore, no DCHECK.
   CommitNavigationInternal(
-      std::move(common_params), commit_params, response_head,
+      std::move(common_params), std::move(commit_params), response_head,
       std::move(response_body), std::move(url_loader_client_endpoints),
       std::move(subresource_loader_factories), std::move(subresource_overrides),
       std::move(controller_service_worker_info), std::move(provider_info),
@@ -3411,7 +3411,7 @@
 
 void RenderFrameImpl::CommitPerNavigationMojoInterfaceNavigation(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     const network::ResourceResponseHead& response_head,
     mojo::ScopedDataPipeConsumerHandle response_body,
     network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -3429,7 +3429,7 @@
   DCHECK(navigation_client_impl_);
   DCHECK(IsPerNavigationMojoInterfaceEnabled());
   CommitNavigationInternal(
-      std::move(common_params), commit_params, response_head,
+      std::move(common_params), std::move(commit_params), response_head,
       std::move(response_body), std::move(url_loader_client_endpoints),
       std::move(subresource_loader_factories), std::move(subresource_overrides),
       std::move(controller_service_worker_info), std::move(provider_info),
@@ -3440,7 +3440,7 @@
 
 void RenderFrameImpl::CommitNavigationInternal(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     const network::ResourceResponseHead& response_head,
     mojo::ScopedDataPipeConsumerHandle response_body,
     network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -3458,7 +3458,7 @@
         per_navigation_mojo_interface_callback) {
   DCHECK(!IsRendererDebugURL(common_params->url));
   DCHECK(!NavigationTypeUtils::IsSameDocument(common_params->navigation_type));
-  if (ShouldIgnoreCommitNavigation(commit_params)) {
+  if (ShouldIgnoreCommitNavigation(*commit_params)) {
     browser_side_navigation_pending_url_ = GURL();
     AbortCommitNavigation(std::move(callback),
                           blink::mojom::CommitResult::Aborted);
@@ -3473,8 +3473,8 @@
   } else {
     was_initiated_in_this_frame =
         browser_side_navigation_pending_ &&
-        browser_side_navigation_pending_url_ == commit_params.original_url &&
-        commit_params.nav_entry_id == 0;
+        browser_side_navigation_pending_url_ == commit_params->original_url &&
+        commit_params->nav_entry_id == 0;
   }
 
   // Sanity check that the browser always sends us new loader factories on
@@ -3492,7 +3492,7 @@
                                                                 : nullptr;
   int request_id = ResourceDispatcher::MakeRequestID();
   std::unique_ptr<DocumentState> document_state = BuildDocumentStateFromParams(
-      *common_params, commit_params, base::TimeTicks::Now(),
+      *common_params, *commit_params, base::TimeTicks::Now(),
       std::move(callback), std::move(per_navigation_mojo_interface_callback),
       document_state_response_head, std::move(navigation_client_impl_),
       request_id, was_initiated_in_this_frame);
@@ -3503,12 +3503,12 @@
   auto navigation_params =
       std::make_unique<WebNavigationParams>(devtools_navigation_token);
   navigation_params->is_client_redirect = is_client_redirect;
-  FillMiscNavigationParams(*common_params, commit_params,
+  FillMiscNavigationParams(*common_params, *commit_params,
                            navigation_params.get());
 
   auto commit_with_params = base::BindOnce(
       &RenderFrameImpl::CommitNavigationWithParams, weak_factory_.GetWeakPtr(),
-      common_params.Clone(), commit_params,
+      common_params.Clone(), commit_params.Clone(),
       std::move(subresource_loader_factories), std::move(subresource_overrides),
       std::move(controller_service_worker_info), std::move(provider_info),
       std::move(prefetch_loader_factory), std::move(document_state));
@@ -3517,12 +3517,12 @@
   // Note: the base URL might be invalid, so also check the data URL string.
   bool should_load_data_url = !common_params->base_url_for_data_url.is_empty();
 #if defined(OS_ANDROID)
-  should_load_data_url |= !commit_params.data_url_as_string.empty();
+  should_load_data_url |= !commit_params->data_url_as_string.empty();
 #endif
   if (is_main_frame_ && should_load_data_url) {
     std::string mime_type, charset, data;
     GURL base_url;
-    DecodeDataURL(*common_params, commit_params, &mime_type, &charset, &data,
+    DecodeDataURL(*common_params, *commit_params, &mime_type, &charset, &data,
                   &base_url);
     navigation_params->url = base_url;
     WebNavigationParams::FillStaticResponse(navigation_params.get(),
@@ -3535,7 +3535,7 @@
     return;
   }
 
-  FillNavigationParamsRequest(*common_params, commit_params,
+  FillNavigationParamsRequest(*common_params, *commit_params,
                               navigation_params.get());
   if (!url_loader_client_endpoints &&
       common_params->url.SchemeIs(url::kDataScheme)) {
@@ -3553,7 +3553,7 @@
                                             WebString::FromUTF8(charset), data);
   } else {
     NavigationBodyLoader::FillNavigationParamsResponseAndBodyLoader(
-        *common_params, commit_params, request_id, response_head,
+        *common_params, *commit_params, request_id, response_head,
         std::move(response_body), std::move(url_loader_client_endpoints),
         GetTaskRunner(blink::TaskType::kInternalLoading), GetRoutingID(),
         !frame_->Parent(), navigation_params.get());
@@ -3581,7 +3581,7 @@
 }
 
 bool RenderFrameImpl::ShouldIgnoreCommitNavigation(
-    const CommitNavigationParams& commit_params) {
+    const mojom::CommitNavigationParams& commit_params) {
   // We can ignore renderer-initiated navigations (nav_entry_id == 0) which
   // have been canceled in the renderer, but browser was not aware yet at the
   // moment of issuing a CommitNavigation call.
@@ -3596,7 +3596,7 @@
 
 void RenderFrameImpl::CommitNavigationWithParams(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     std::unique_ptr<blink::URLLoaderFactoryBundleInfo>
         subresource_loader_factories,
     base::Optional<std::vector<mojom::TransferrableURLLoaderPtr>>
@@ -3607,7 +3607,7 @@
         prefetch_loader_factory,
     std::unique_ptr<DocumentState> document_state,
     std::unique_ptr<WebNavigationParams> navigation_params) {
-  if (ShouldIgnoreCommitNavigation(commit_params)) {
+  if (ShouldIgnoreCommitNavigation(*commit_params)) {
     browser_side_navigation_pending_url_ = GURL();
     return;
   }
@@ -3653,15 +3653,15 @@
 
   // If the navigation is for "view source", the WebLocalFrame needs to be put
   // in a special mode.
-  if (commit_params.is_view_source)
+  if (commit_params->is_view_source)
     frame_->EnableViewSourceMode(true);
 
-  PrepareFrameForCommit(common_params->url, commit_params);
+  PrepareFrameForCommit(common_params->url, *commit_params);
 
   blink::WebFrameLoadType load_type =
       NavigationTypeToLoadType(common_params->navigation_type,
                                common_params->should_replace_current_entry,
-                               commit_params.page_state.IsValid());
+                               commit_params->page_state.IsValid());
 
   WebHistoryItem item_for_history_navigation;
   blink::mojom::CommitResult commit_status = blink::mojom::CommitResult::Ok;
@@ -3670,11 +3670,11 @@
     // We must know the nav entry ID of the page we are navigating back to,
     // which should be the case because history navigations are routed via the
     // browser.
-    DCHECK_NE(0, commit_params.nav_entry_id);
+    DCHECK_NE(0, commit_params->nav_entry_id);
 
     // Check that the history navigation can commit.
     commit_status = PrepareForHistoryNavigationCommit(
-        *common_params, commit_params, &item_for_history_navigation,
+        *common_params, *commit_params, &item_for_history_navigation,
         &load_type);
   }
 
@@ -3700,7 +3700,7 @@
 
 void RenderFrameImpl::CommitFailedNavigation(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     bool has_stale_copy_in_cache,
     int error_code,
     const base::Optional<std::string>& error_page_content,
@@ -3710,15 +3710,15 @@
   DCHECK(!navigation_client_impl_);
   DCHECK(!IsPerNavigationMojoInterfaceEnabled());
   CommitFailedNavigationInternal(
-      std::move(common_params), commit_params, has_stale_copy_in_cache,
-      error_code, error_page_content, std::move(subresource_loader_factories),
-      std::move(callback),
+      std::move(common_params), std::move(commit_params),
+      has_stale_copy_in_cache, error_code, error_page_content,
+      std::move(subresource_loader_factories), std::move(callback),
       mojom::NavigationClient::CommitFailedNavigationCallback());
 }
 
 void RenderFrameImpl::CommitFailedPerNavigationMojoInterfaceNavigation(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     bool has_stale_copy_in_cache,
     int error_code,
     const base::Optional<std::string>& error_page_content,
@@ -3729,15 +3729,16 @@
   DCHECK(navigation_client_impl_);
   DCHECK(IsPerNavigationMojoInterfaceEnabled());
   CommitFailedNavigationInternal(
-      std::move(common_params), commit_params, has_stale_copy_in_cache,
-      error_code, error_page_content, std::move(subresource_loader_factories),
+      std::move(common_params), std::move(commit_params),
+      has_stale_copy_in_cache, error_code, error_page_content,
+      std::move(subresource_loader_factories),
       mojom::FrameNavigationControl::CommitFailedNavigationCallback(),
       std::move(per_navigation_mojo_interface_callback));
 }
 
 void RenderFrameImpl::CommitFailedNavigationInternal(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     bool has_stale_copy_in_cache,
     int error_code,
     const base::Optional<std::string>& error_page_content,
@@ -3750,7 +3751,7 @@
                "RenderFrameImpl::CommitFailedNavigation", "id", routing_id_);
   DCHECK(!NavigationTypeUtils::IsSameDocument(common_params->navigation_type));
   RenderFrameImpl::PrepareRenderViewForNavigation(common_params->url,
-                                                  commit_params);
+                                                  *commit_params);
   sync_navigation_callback_.Cancel();
   mhtml_body_loader_client_.reset();
 
@@ -3769,7 +3770,7 @@
       WebURLError::IsWebSecurityViolation::kFalse, common_params->url);
 
   auto navigation_params = std::make_unique<WebNavigationParams>();
-  FillNavigationParamsRequest(*common_params, commit_params,
+  FillNavigationParamsRequest(*common_params, *commit_params,
                               navigation_params.get());
   navigation_params->url = GURL(kUnreachableWebDataURL);
   navigation_params->error_code = error_code;
@@ -3798,7 +3799,7 @@
   if (!weak_this)
     return;
 
-  if (commit_params.nav_entry_id == 0) {
+  if (commit_params->nav_entry_id == 0) {
     // For renderer initiated navigations, we send out a
     // DidFailProvisionalLoad() notification.
     NotifyObserversOfFailedProvisionalLoad(error);
@@ -3846,8 +3847,8 @@
                  common_params->url == GetLoadingUrl() ||
                  common_params->should_replace_current_entry;
   std::unique_ptr<HistoryEntry> history_entry;
-  if (commit_params.page_state.IsValid())
-    history_entry = PageStateToHistoryEntry(commit_params.page_state);
+  if (commit_params->page_state.IsValid())
+    history_entry = PageStateToHistoryEntry(commit_params->page_state);
 
   std::string error_html;
   if (error_page_content.has_value()) {
@@ -3874,7 +3875,7 @@
   }
   navigation_params->service_worker_network_provider =
       ServiceWorkerNetworkProviderForFrame::CreateInvalidInstance();
-  FillMiscNavigationParams(*common_params, commit_params,
+  FillMiscNavigationParams(*common_params, *commit_params,
                            navigation_params.get());
   WebNavigationParams::FillStaticResponse(navigation_params.get(), "text/html",
                                           "UTF-8", error_html);
@@ -3884,7 +3885,7 @@
   // was not initiated through BeginNavigation, therefore
   // |was_initiated_in_this_frame| is false.
   std::unique_ptr<DocumentState> document_state = BuildDocumentStateFromParams(
-      *common_params, commit_params, base::TimeTicks(), std::move(callback),
+      *common_params, *commit_params, base::TimeTicks(), std::move(callback),
       std::move(per_navigation_mojo_interface_callback), nullptr,
       std::move(navigation_client_impl_), ResourceDispatcher::MakeRequestID(),
       false /* was_initiated_in_this_frame */);
@@ -3904,33 +3905,33 @@
 
 void RenderFrameImpl::CommitSameDocumentNavigation(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     CommitSameDocumentNavigationCallback callback) {
   DCHECK(!IsRendererDebugURL(common_params->url));
   DCHECK(!NavigationTypeUtils::IsReload(common_params->navigation_type));
-  DCHECK(!commit_params.is_view_source);
+  DCHECK(!commit_params->is_view_source);
   DCHECK(NavigationTypeUtils::IsSameDocument(common_params->navigation_type));
 
-  PrepareFrameForCommit(common_params->url, commit_params);
+  PrepareFrameForCommit(common_params->url, *commit_params);
 
   blink::WebFrameLoadType load_type =
       NavigationTypeToLoadType(common_params->navigation_type,
                                common_params->should_replace_current_entry,
-                               commit_params.page_state.IsValid());
+                               commit_params->page_state.IsValid());
 
   blink::mojom::CommitResult commit_status = blink::mojom::CommitResult::Ok;
   WebHistoryItem item_for_history_navigation;
 
   if (common_params->navigation_type ==
       mojom::NavigationType::HISTORY_SAME_DOCUMENT) {
-    DCHECK(commit_params.page_state.IsValid());
+    DCHECK(commit_params->page_state.IsValid());
     // We must know the nav entry ID of the page we are navigating back to,
     // which should be the case because history navigations are routed via the
     // browser.
-    DCHECK_NE(0, commit_params.nav_entry_id);
+    DCHECK_NE(0, commit_params->nav_entry_id);
     DCHECK(!common_params->is_history_navigation_in_new_child_frame);
     commit_status = PrepareForHistoryNavigationCommit(
-        *common_params, commit_params, &item_for_history_navigation,
+        *common_params, *commit_params, &item_for_history_navigation,
         &load_type);
   }
 
@@ -3948,8 +3949,9 @@
         InternalDocumentStateData::FromDocumentState(original_document_state));
     // This is a browser-initiated same-document navigation (as opposed to a
     // fragment link click), therefore |was_initiated_in_this_frame| is false.
+    auto url = common_params->url;
     internal_data->set_navigation_state(NavigationState::CreateBrowserInitiated(
-        common_params.Clone(), commit_params,
+        std::move(common_params), std::move(commit_params),
         base::TimeTicks(),  // Not used for same-document navigation.
         mojom::FrameNavigationControl::CommitNavigationCallback(),
         mojom::NavigationClient::CommitNavigationCallback(), nullptr,
@@ -3957,8 +3959,8 @@
 
     // Load the request.
     commit_status = frame_->CommitSameDocumentNavigation(
-        common_params->url, load_type, item_for_history_navigation,
-        is_client_redirect, std::move(document_state));
+        url, load_type, item_for_history_navigation, is_client_redirect,
+        std::move(document_state));
 
     // The load of the URL can result in this frame being removed. Use a
     // WeakPtr as an easy way to detect whether this has occured. If so, this
@@ -6111,7 +6113,7 @@
     blink::WebHistoryCommitType commit_type) {
   NavigationState* navigation_state =
       NavigationState::FromDocumentLoader(frame_->GetDocumentLoader());
-  const CommitNavigationParams& commit_params =
+  const mojom::CommitNavigationParams& commit_params =
       navigation_state->commit_params();
 
   // Update the current history item for this frame.
@@ -6240,7 +6242,7 @@
 
 void RenderFrameImpl::PrepareFrameForCommit(
     const GURL& url,
-    const CommitNavigationParams& commit_params) {
+    const mojom::CommitNavigationParams& commit_params) {
   browser_side_navigation_pending_ = false;
   browser_side_navigation_pending_url_ = GURL();
   sync_navigation_callback_.Cancel();
@@ -6254,7 +6256,7 @@
 
 blink::mojom::CommitResult RenderFrameImpl::PrepareForHistoryNavigationCommit(
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params,
+    const mojom::CommitNavigationParams& commit_params,
     WebHistoryItem* item_for_history_navigation,
     blink::WebFrameLoadType* load_type) {
   mojom::NavigationType navigation_type = common_params.navigation_type;
@@ -7124,7 +7126,7 @@
 
 void RenderFrameImpl::PrepareRenderViewForNavigation(
     const GURL& url,
-    const CommitNavigationParams& commit_params) {
+    const mojom::CommitNavigationParams& commit_params) {
   DCHECK(render_view_->webview());
 
   render_view_->history_list_offset_ =
@@ -7263,7 +7265,7 @@
 
 void RenderFrameImpl::DecodeDataURL(
     const mojom::CommonNavigationParams& common_params,
-    const CommitNavigationParams& commit_params,
+    const mojom::CommitNavigationParams& commit_params,
     std::string* mime_type,
     std::string* charset,
     std::string* data,
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index f78f012..dcf012ae 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -37,6 +37,7 @@
 #include "content/common/frame_delete_intention.h"
 #include "content/common/host_zoom.mojom.h"
 #include "content/common/media/renderer_audio_input_stream_factory.mojom.h"
+#include "content/common/navigation_params.mojom.h"
 #include "content/common/renderer.mojom.h"
 #include "content/common/unique_name_helper.h"
 #include "content/common/widget.mojom.h"
@@ -172,7 +173,6 @@
 struct CustomContextMenuContext;
 struct FrameOwnerProperties;
 struct FrameReplicationState;
-struct CommitNavigationParams;
 struct ScreenInfo;
 
 class CONTENT_EXPORT RenderFrameImpl
@@ -560,8 +560,8 @@
 
   // mojom::FrameNavigationControl implementation:
   void CommitNavigation(
-      const mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommonNavigationParamsPtr common_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       const network::ResourceResponseHead& response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
       network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -583,7 +583,7 @@
   // the one from NavigationClient mojo interface.
   void CommitPerNavigationMojoInterfaceNavigation(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       const network::ResourceResponseHead& response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
       network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -602,7 +602,7 @@
 
   void CommitFailedNavigation(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       bool has_stale_copy_in_cache,
       int error_code,
       const base::Optional<std::string>& error_page_content,
@@ -615,7 +615,7 @@
   // the one from NavigationClient mojo interface.
   void CommitFailedPerNavigationMojoInterfaceNavigation(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       bool has_stale_copy_in_cache,
       int error_code,
       const base::Optional<std::string>& error_page_content,
@@ -626,7 +626,7 @@
 
   void CommitSameDocumentNavigation(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       CommitSameDocumentNavigationCallback callback) override;
   void HandleRendererDebugURL(const GURL& url) override;
   void UpdateSubresourceLoaderFactories(
@@ -1251,7 +1251,7 @@
   // Does preparation for the navigation to |url|.
   void PrepareRenderViewForNavigation(
       const GURL& url,
-      const CommitNavigationParams& commit_params);
+      const mojom::CommitNavigationParams& commit_params);
 
   // Sends a FrameHostMsg_BeginNavigation to the browser
   void BeginNavigationInternal(std::unique_ptr<blink::WebNavigationInfo> info,
@@ -1269,7 +1269,7 @@
   // Commit navigation with |navigation_params| prepared.
   void CommitNavigationWithParams(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       std::unique_ptr<blink::URLLoaderFactoryBundleInfo>
           subresource_loader_factories,
       base::Optional<std::vector<mojom::TransferrableURLLoaderPtr>>
@@ -1286,11 +1286,11 @@
   // in the renderer, but browser was not aware yet at the moment of issuing
   // a CommitNavigation call.
   bool ShouldIgnoreCommitNavigation(
-      const CommitNavigationParams& commit_params);
+      const mojom::CommitNavigationParams& commit_params);
 
   // Decodes a data url for navigation commit.
   void DecodeDataURL(const mojom::CommonNavigationParams& common_params,
-                     const CommitNavigationParams& commit_params,
+                     const mojom::CommitNavigationParams& commit_params,
                      std::string* mime_type,
                      std::string* charset,
                      std::string* data,
@@ -1397,8 +1397,9 @@
   blink::WebLocalFrameClient::AppCacheType GetAppCacheType() override;
 
   // Updates the state of this frame when asked to commit a navigation.
-  void PrepareFrameForCommit(const GURL& url,
-                             const CommitNavigationParams& commit_params);
+  void PrepareFrameForCommit(
+      const GURL& url,
+      const mojom::CommitNavigationParams& commit_params);
 
   // Updates the state when asked to commit a history navigation.  Sets
   // |item_for_history_navigation| and |load_type| to the appropriate values for
@@ -1426,7 +1427,7 @@
   // so that it can be performed in cross-document fashion.
   blink::mojom::CommitResult PrepareForHistoryNavigationCommit(
       const mojom::CommonNavigationParams& common_params,
-      const CommitNavigationParams& commit_params,
+      const mojom::CommitNavigationParams& commit_params,
       blink::WebHistoryItem* item_for_history_navigation,
       blink::WebFrameLoadType* load_type);
 
@@ -1445,7 +1446,7 @@
   // Commit*PerNavigationMojoInterfaceNavigation functions.
   void CommitNavigationInternal(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       const network::ResourceResponseHead& response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
       network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -1465,7 +1466,7 @@
 
   void CommitFailedNavigationInternal(
       mojom::CommonNavigationParamsPtr common_params,
-      const CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       bool has_stale_copy_in_cache,
       int error_code,
       const base::Optional<std::string>& error_page_content,
@@ -1562,7 +1563,7 @@
   // is never used after the initial navigation.
   // TODO(creis): Expand this to include any corresponding same-process
   // PageStates for the whole subtree in https://crbug.com/639842.
-  std::map<std::string, bool> history_subframe_unique_names_;
+  base::flat_map<std::string, bool> history_subframe_unique_names_;
 
   // Stores the current history item for this frame, so that updates to it can
   // be reported to the browser process via SendUpdateState.
diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc
index b6d9eaa0..a0f2cb1 100644
--- a/content/renderer/render_frame_impl_browsertest.cc
+++ b/content/renderer/render_frame_impl_browsertest.cc
@@ -455,7 +455,7 @@
   common_params->navigation_type = mojom::NavigationType::DIFFERENT_DOCUMENT;
   GetMainRenderFrame()->SetHostZoomLevel(common_params->url, kMinZoomLevel);
   GetMainRenderFrame()->Navigate(common_params.Clone(),
-                                 CommitNavigationParams());
+                                 CreateCommitNavigationParams());
   base::RunLoop().RunUntilIdle();
   EXPECT_DOUBLE_EQ(kMinZoomLevel, view_->GetWebView()->ZoomLevel());
 
@@ -465,7 +465,7 @@
   common_params->url = GURL("data:text/html,max_zoomlimit_test");
   GetMainRenderFrame()->SetHostZoomLevel(common_params->url, kMaxZoomLevel);
   GetMainRenderFrame()->Navigate(common_params.Clone(),
-                                 CommitNavigationParams());
+                                 CreateCommitNavigationParams());
   base::RunLoop().RunUntilIdle();
   EXPECT_DOUBLE_EQ(kMaxZoomLevel, view_->GetWebView()->ZoomLevel());
 }
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index e93043af..bf66006 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -277,16 +277,16 @@
   void GoToOffsetWithParams(int offset,
                             const PageState& state,
                             mojom::CommonNavigationParamsPtr common_params,
-                            CommitNavigationParams commit_params) {
+                            mojom::CommitNavigationParamsPtr commit_params) {
     EXPECT_TRUE(common_params->transition & ui::PAGE_TRANSITION_FORWARD_BACK);
     int pending_offset = offset + view()->history_list_offset_;
 
-    commit_params.page_state = state;
-    commit_params.nav_entry_id = pending_offset + 1;
-    commit_params.pending_history_list_offset = pending_offset;
-    commit_params.current_history_list_offset = view()->history_list_offset_;
-    commit_params.current_history_list_length = view()->history_list_length_;
-    frame()->Navigate(std::move(common_params), commit_params);
+    commit_params->page_state = state;
+    commit_params->nav_entry_id = pending_offset + 1;
+    commit_params->pending_history_list_offset = pending_offset;
+    commit_params->current_history_list_offset = view()->history_list_offset_;
+    commit_params->current_history_list_length = view()->history_list_length_;
+    frame()->Navigate(std::move(common_params), std::move(commit_params));
 
     // The load actually happens asynchronously, so we pump messages to process
     // the pending continuation.
@@ -636,7 +636,6 @@
   auto common_params = mojom::CommonNavigationParams::New();
   common_params->referrer = blink::mojom::Referrer::New();
   common_params->navigation_start = base::TimeTicks::Now();
-  CommitNavigationParams commit_params;
   common_params->url = GURL("data:text/html,<div>Page</div>");
   common_params->navigation_type = mojom::NavigationType::DIFFERENT_DOCUMENT;
   common_params->transition = ui::PAGE_TRANSITION_TYPED;
@@ -650,7 +649,7 @@
   post_data->AppendBytes(raw_data, length);
   common_params->post_data = post_data;
 
-  frame()->Navigate(std::move(common_params), commit_params);
+  frame()->Navigate(std::move(common_params), CreateCommitNavigationParams());
   base::RunLoop().RunUntilIdle();
 
   auto last_commit_params = frame()->TakeLastCommitParams();
@@ -689,12 +688,12 @@
   common_params->transition = ui::PAGE_TRANSITION_TYPED;
   common_params->base_url_for_data_url = GURL("about:blank");
   common_params->history_url_for_data_url = GURL("about:blank");
-  CommitNavigationParams commit_params;
-  commit_params.data_url_as_string =
+  auto commit_params = CreateCommitNavigationParams();
+  commit_params->data_url_as_string =
       "data:text/html,<html><head><title>Data page</title></head></html>";
 
   render_thread_->sink().ClearMessages();
-  frame()->Navigate(std::move(common_params), commit_params);
+  frame()->Navigate(std::move(common_params), std::move(commit_params));
   const IPC::Message* frame_title_msg = nullptr;
   do {
     base::RunLoop().RunUntilIdle();
@@ -1087,9 +1086,9 @@
   common_params->url = GURL("data:text/html,<div>Page</div>");
   common_params->navigation_type = mojom::NavigationType::DIFFERENT_DOCUMENT;
   common_params->transition = ui::PAGE_TRANSITION_TYPED;
-  CommitNavigationParams commit_params;
 
-  provisional_frame->Navigate(std::move(common_params), commit_params);
+  provisional_frame->Navigate(std::move(common_params),
+                              CreateCommitNavigationParams());
   base::RunLoop().RunUntilIdle();
 
   EXPECT_EQ(device_scale, view()->GetDeviceScaleFactor());
@@ -1502,7 +1501,7 @@
   common_params->navigation_start = base::TimeTicks::Now();
   common_params->navigation_type = mojom::NavigationType::DIFFERENT_DOCUMENT;
   common_params->url = GURL("data:text/html,test data");
-  frame()->Navigate(std::move(common_params), CommitNavigationParams());
+  frame()->Navigate(std::move(common_params), CreateCommitNavigationParams());
 
   // A cancellation occurred.
   view()->GetMainRenderFrame()->DidFailProvisionalLoad(error, "GET");
@@ -1879,23 +1878,23 @@
   LoadHTML("hello <iframe srcdoc='fail' name='frame'></iframe>");
 
   // Navigate the frame only.
-  mojom::CommonNavigationParams common_params;
-  common_params.referrer = blink::mojom::Referrer::New();
-  common_params.navigation_start = base::TimeTicks::Now();
-  common_params.url = GURL("data:text/html,world");
-  common_params.navigation_type = mojom::NavigationType::DIFFERENT_DOCUMENT;
-  common_params.transition = ui::PAGE_TRANSITION_TYPED;
-  common_params.navigation_start = base::TimeTicks::FromInternalValue(1);
-  CommitNavigationParams commit_params;
-  commit_params.current_history_list_length = 1;
-  commit_params.current_history_list_offset = 0;
-  commit_params.pending_history_list_offset = 1;
+  auto common_params = mojom::CommonNavigationParams::New();
+  common_params->referrer = blink::mojom::Referrer::New();
+  common_params->navigation_start = base::TimeTicks::Now();
+  common_params->url = GURL("data:text/html,world");
+  common_params->navigation_type = mojom::NavigationType::DIFFERENT_DOCUMENT;
+  common_params->transition = ui::PAGE_TRANSITION_TYPED;
+  common_params->navigation_start = base::TimeTicks::FromInternalValue(1);
+  auto commit_params = CreateCommitNavigationParams();
+  commit_params->current_history_list_length = 1;
+  commit_params->current_history_list_offset = 0;
+  commit_params->pending_history_list_offset = 1;
 
   TestRenderFrame* subframe =
       static_cast<TestRenderFrame*>(RenderFrameImpl::FromWebFrame(
           frame()->GetWebFrame()->FindFrameByName("frame")));
   FrameLoadWaiter waiter(subframe);
-  subframe->Navigate(common_params.Clone(), commit_params);
+  subframe->Navigate(std::move(common_params), std::move(commit_params));
   waiter.Wait();
 
   // Copy the document content to std::string and compare with the
@@ -2002,7 +2001,7 @@
   common_params->url = GURL("http://example.com/suppress");
   TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
   main_frame->NavigateWithError(
-      std::move(common_params), CommitNavigationParams(),
+      std::move(common_params), CreateCommitNavigationParams(),
       net::ERR_FILE_NOT_FOUND, "A suffusion of yellow.");
 
   const int kMaxOutputCharacters = 22;
@@ -2026,7 +2025,7 @@
   common_params->url = GURL("http://example.com/dont-suppress");
   TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
   main_frame->NavigateWithError(
-      std::move(common_params), CommitNavigationParams(),
+      std::move(common_params), CreateCommitNavigationParams(),
       net::ERR_FILE_NOT_FOUND, "A suffusion of yellow.");
 
   // The error page itself is loaded asynchronously.
@@ -2063,7 +2062,7 @@
 
   TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
   main_frame->Navigate(head, std::move(common_params),
-                       CommitNavigationParams());
+                       CreateCommitNavigationParams());
   main_frame->DidFinishDocumentLoad();
   main_frame->RunScriptsAtDocumentReady(true);
 
@@ -2169,7 +2168,7 @@
   auto common_params = MakeCommonNavigationParams(-TimeDelta::FromSeconds(1));
 
   FrameLoadWaiter waiter(frame());
-  frame()->Navigate(common_params.Clone(), CommitNavigationParams());
+  frame()->Navigate(common_params.Clone(), CreateCommitNavigationParams());
   waiter.Wait();
   NavigationState* navigation_state = NavigationState::FromDocumentLoader(
       frame()->GetWebFrame()->GetDocumentLoader());
@@ -2187,7 +2186,7 @@
   auto late_common_params = MakeCommonNavigationParams(TimeDelta::FromDays(42));
   late_common_params->method = "POST";
 
-  frame()->Navigate(late_common_params.Clone(), CommitNavigationParams());
+  frame()->Navigate(late_common_params.Clone(), CreateCommitNavigationParams());
   base::RunLoop().RunUntilIdle();
   base::Time after_navigation =
       base::Time::Now() + base::TimeDelta::FromDays(1);
@@ -2207,7 +2206,7 @@
 
   auto common_params = MakeCommonNavigationParams(-TimeDelta::FromSeconds(1));
   FrameLoadWaiter waiter(frame());
-  frame()->Navigate(common_params.Clone(), CommitNavigationParams());
+  frame()->Navigate(common_params.Clone(), CreateCommitNavigationParams());
   waiter.Wait();
   NavigationState* navigation_state = NavigationState::FromDocumentLoader(
       frame()->GetWebFrame()->GetDocumentLoader());
@@ -2233,7 +2232,7 @@
   // The browser navigation_start should not be used because beforeunload will
   // be fired during Navigate.
   FrameLoadWaiter waiter(frame());
-  frame()->Navigate(common_params.Clone(), CommitNavigationParams());
+  frame()->Navigate(common_params.Clone(), CreateCommitNavigationParams());
   waiter.Wait();
 
   // The browser navigation_start is always used.
@@ -2262,7 +2261,7 @@
   common_params_back->navigation_type =
       mojom::NavigationType::HISTORY_DIFFERENT_DOCUMENT;
   GoToOffsetWithParams(-1, back_state, common_params_back.Clone(),
-                       CommitNavigationParams());
+                       CreateCommitNavigationParams());
   NavigationState* navigation_state = NavigationState::FromDocumentLoader(
       frame()->GetWebFrame()->GetDocumentLoader());
 
@@ -2280,7 +2279,7 @@
   common_params_forward->navigation_type =
       mojom::NavigationType::HISTORY_DIFFERENT_DOCUMENT;
   GoToOffsetWithParams(1, forward_state, common_params_forward.Clone(),
-                       CommitNavigationParams());
+                       CreateCommitNavigationParams());
   navigation_state = NavigationState::FromDocumentLoader(
       frame()->GetWebFrame()->GetDocumentLoader());
   EXPECT_EQ(common_params_forward->navigation_start,
@@ -2293,15 +2292,15 @@
   common_params->navigation_type =
       mojom::NavigationType::HISTORY_DIFFERENT_DOCUMENT;
 
-  CommitNavigationParams commit_params;
-  commit_params.page_state =
+  auto commit_params = CreateCommitNavigationParams();
+  commit_params->page_state =
       PageState::CreateForTesting(common_params->url, false, nullptr, nullptr);
-  commit_params.nav_entry_id = 42;
-  commit_params.pending_history_list_offset = 1;
-  commit_params.current_history_list_offset = 0;
-  commit_params.current_history_list_length = 1;
+  commit_params->nav_entry_id = 42;
+  commit_params->pending_history_list_offset = 1;
+  commit_params->current_history_list_offset = 0;
+  commit_params->current_history_list_length = 1;
   FrameLoadWaiter waiter(frame());
-  frame()->Navigate(common_params.Clone(), commit_params);
+  frame()->Navigate(common_params.Clone(), std::move(commit_params));
   waiter.Wait();
 
   NavigationState* navigation_state = NavigationState::FromDocumentLoader(
@@ -2360,13 +2359,13 @@
                    view()->HistoryForwardListCount() + 1);
 
   // Receive a CommitNavigation message with history parameters.
-  CommitNavigationParams commit_params;
-  commit_params.current_history_list_offset = 1;
-  commit_params.current_history_list_length = 2;
+  auto commit_params = CreateCommitNavigationParams();
+  commit_params->current_history_list_offset = 1;
+  commit_params->current_history_list_length = 2;
   auto common_params = mojom::CommonNavigationParams::New();
   common_params->referrer = blink::mojom::Referrer::New();
   common_params->navigation_start = base::TimeTicks::Now();
-  frame()->Navigate(std::move(common_params), commit_params);
+  frame()->Navigate(std::move(common_params), std::move(commit_params));
 
   // The current history list in RenderView is updated.
   EXPECT_EQ(1, view()->HistoryBackListCount());
@@ -2382,15 +2381,15 @@
                    view()->HistoryForwardListCount() + 1);
 
   // Receive a CommitNavigation message with history parameters.
-  CommitNavigationParams commit_params;
-  commit_params.current_history_list_offset = 1;
-  commit_params.current_history_list_length = 25;
-  commit_params.pending_history_list_offset = 12;
-  commit_params.nav_entry_id = 777;
+  auto commit_params = CreateCommitNavigationParams();
+  commit_params->current_history_list_offset = 1;
+  commit_params->current_history_list_length = 25;
+  commit_params->pending_history_list_offset = 12;
+  commit_params->nav_entry_id = 777;
   auto common_params = mojom::CommonNavigationParams::New();
   common_params->referrer = blink::mojom::Referrer::New();
   common_params->navigation_start = base::TimeTicks::Now();
-  frame()->Navigate(std::move(common_params), commit_params);
+  frame()->Navigate(std::move(common_params), std::move(commit_params));
 
   // The current history list in RenderView is updated.
   EXPECT_EQ(12, view()->HistoryBackListCount());
@@ -2406,14 +2405,14 @@
                    view()->HistoryForwardListCount() + 1);
 
   // Receive a CommitNavigation message with history parameters.
-  CommitNavigationParams commit_params;
-  commit_params.current_history_list_offset = 12;
-  commit_params.current_history_list_length = 25;
-  commit_params.should_clear_history_list = true;
+  auto commit_params = CreateCommitNavigationParams();
+  commit_params->current_history_list_offset = 12;
+  commit_params->current_history_list_length = 25;
+  commit_params->should_clear_history_list = true;
   auto common_params = mojom::CommonNavigationParams::New();
   common_params->referrer = blink::mojom::Referrer::New();
   common_params->navigation_start = base::TimeTicks::Now();
-  frame()->Navigate(std::move(common_params), commit_params);
+  frame()->Navigate(std::move(common_params), std::move(commit_params));
 
   // The current history list in RenderView is updated.
   EXPECT_EQ(0, view()->HistoryBackListCount());
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index a511327..6998ef35 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -262,9 +262,9 @@
 
 void TestRenderFrame::Navigate(const network::ResourceResponseHead& head,
                                mojom::CommonNavigationParamsPtr common_params,
-                               const CommitNavigationParams& commit_params) {
+                               mojom::CommitNavigationParamsPtr commit_params) {
   if (!IsPerNavigationMojoInterfaceEnabled()) {
-    CommitNavigation(std::move(common_params), commit_params, head,
+    CommitNavigation(std::move(common_params), std::move(commit_params), head,
                      mojo::ScopedDataPipeConsumerHandle(),
                      network::mojom::URLLoaderClientEndpointsPtr(),
                      std::make_unique<blink::URLLoaderFactoryBundleInfo>(),
@@ -277,7 +277,7 @@
     BindNavigationClient(
         mojo::MakeRequestAssociatedWithDedicatedPipe(&mock_navigation_client_));
     CommitPerNavigationMojoInterfaceNavigation(
-        std::move(common_params), commit_params, head,
+        std::move(common_params), std::move(commit_params), head,
         mojo::ScopedDataPipeConsumerHandle(),
         network::mojom::URLLoaderClientEndpointsPtr(),
         std::make_unique<blink::URLLoaderFactoryBundleInfo>(), base::nullopt,
@@ -291,25 +291,25 @@
 }
 
 void TestRenderFrame::Navigate(mojom::CommonNavigationParamsPtr common_params,
-                               const CommitNavigationParams& commit_params) {
+                               mojom::CommitNavigationParamsPtr commit_params) {
   Navigate(network::ResourceResponseHead(), std::move(common_params),
-           commit_params);
+           std::move(commit_params));
 }
 
 void TestRenderFrame::NavigateWithError(
     mojom::CommonNavigationParamsPtr common_params,
-    const CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     int error_code,
     const base::Optional<std::string>& error_page_content) {
   if (!IsPerNavigationMojoInterfaceEnabled()) {
-    CommitFailedNavigation(std::move(common_params), commit_params,
+    CommitFailedNavigation(std::move(common_params), std::move(commit_params),
                            false /* has_stale_copy_in_cache */, error_code,
                            error_page_content, nullptr, base::DoNothing());
   } else {
     BindNavigationClient(
         mojo::MakeRequestAssociatedWithDedicatedPipe(&mock_navigation_client_));
     mock_navigation_client_->CommitFailedNavigation(
-        std::move(common_params), commit_params,
+        std::move(common_params), std::move(commit_params),
         false /* has_stale_copy_in_cache */, error_code, error_page_content,
         nullptr,
         base::BindOnce(&MockFrameHost::DidCommitProvisionalLoad,
diff --git a/content/test/test_render_frame.h b/content/test/test_render_frame.h
index 4e68429..48e4d19 100644
--- a/content/test/test_render_frame.h
+++ b/content/test/test_render_frame.h
@@ -11,6 +11,7 @@
 #include "base/optional.h"
 #include "content/common/frame.mojom.h"
 #include "content/common/input/input_handler.mojom.h"
+#include "content/common/navigation_params.mojom.h"
 #include "content/renderer/render_frame_impl.h"
 #include "mojo/public/cpp/bindings/scoped_interface_endpoint_handle.h"
 
@@ -21,7 +22,6 @@
 namespace content {
 
 class MockFrameHost;
-struct CommitNavigationParams;
 
 // A test class to use in RenderViewTests.
 class TestRenderFrame : public RenderFrameImpl {
@@ -41,11 +41,11 @@
 
   void Navigate(const network::ResourceResponseHead& head,
                 mojom::CommonNavigationParamsPtr common_params,
-                const CommitNavigationParams& commit_params);
+                mojom::CommitNavigationParamsPtr commit_params);
   void Navigate(mojom::CommonNavigationParamsPtr common_params,
-                const CommitNavigationParams& commit_params);
+                mojom::CommitNavigationParamsPtr commit_params);
   void NavigateWithError(mojom::CommonNavigationParamsPtr common_params,
-                         const CommitNavigationParams& request_params,
+                         mojom::CommitNavigationParamsPtr request_params,
                          int error_code,
                          const base::Optional<std::string>& error_page_content);
   void SwapOut(int proxy_routing_id,
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc
index 4c803d2..fc8ea1e 100644
--- a/content/test/test_render_frame_host.cc
+++ b/content/test/test_render_frame_host.cc
@@ -539,7 +539,7 @@
     mojom::NavigationClient* navigation_client,
     NavigationRequest* navigation_request,
     mojom::CommonNavigationParamsPtr common_params,
-    const content::CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     const network::ResourceResponseHead& response_head,
     mojo::ScopedDataPipeConsumerHandle response_body,
     network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -567,7 +567,7 @@
     mojom::NavigationClient* navigation_client,
     NavigationRequest* navigation_request,
     mojom::CommonNavigationParamsPtr common_params,
-    const content::CommitNavigationParams& commit_params,
+    mojom::CommitNavigationParamsPtr commit_params,
     bool has_stale_copy_in_cache,
     int32_t error_code,
     const base::Optional<std::string>& error_page_content,
diff --git a/content/test/test_render_frame_host.h b/content/test/test_render_frame_host.h
index 281a9e7..bdd24d6 100644
--- a/content/test/test_render_frame_host.h
+++ b/content/test/test_render_frame_host.h
@@ -211,7 +211,7 @@
       mojom::NavigationClient* navigation_client,
       NavigationRequest* navigation_request,
       mojom::CommonNavigationParamsPtr common_params,
-      const content::CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       const network::ResourceResponseHead& response_head,
       mojo::ScopedDataPipeConsumerHandle response_body,
       network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
@@ -229,7 +229,7 @@
       mojom::NavigationClient* navigation_client,
       NavigationRequest* navigation_request,
       mojom::CommonNavigationParamsPtr common_params,
-      const content::CommitNavigationParams& commit_params,
+      mojom::CommitNavigationParamsPtr commit_params,
       bool has_stale_copy_in_cache,
       int32_t error_code,
       const base::Optional<std::string>& error_page_content,
diff --git a/fuchsia/engine/browser/frame_impl.cc b/fuchsia/engine/browser/frame_impl.cc
index 0793e4d..04a1590b 100644
--- a/fuchsia/engine/browser/frame_impl.cc
+++ b/fuchsia/engine/browser/frame_impl.cc
@@ -18,7 +18,7 @@
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/renderer_preferences_util.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/was_activated_option.h"
+#include "content/public/common/was_activated_option.mojom.h"
 #include "fuchsia/base/mem_buffer_util.h"
 #include "fuchsia/base/message_port.h"
 #include "fuchsia/engine/browser/context_impl.h"
diff --git a/fuchsia/engine/browser/navigation_controller_impl.cc b/fuchsia/engine/browser/navigation_controller_impl.cc
index 1a1d6cf..b1bd139 100644
--- a/fuchsia/engine/browser/navigation_controller_impl.cc
+++ b/fuchsia/engine/browser/navigation_controller_impl.cc
@@ -9,7 +9,7 @@
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/common/was_activated_option.h"
+#include "content/public/common/was_activated_option.mojom.h"
 #include "ui/base/page_transition_types.h"
 
 namespace {
@@ -159,9 +159,9 @@
   params_converted.transition_type = ui::PageTransitionFromInt(
       ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR);
   if (params.has_was_user_activated() && params.was_user_activated()) {
-    params_converted.was_activated = content::WasActivatedOption::kYes;
+    params_converted.was_activated = content::mojom::WasActivatedOption::kYes;
   } else {
-    params_converted.was_activated = content::WasActivatedOption::kNo;
+    params_converted.was_activated = content::mojom::WasActivatedOption::kNo;
   }
 
   web_contents_->GetController().LoadURLWithParams(params_converted);