Add dry run implementation for Navigation Fast Fetch [chromium/src : main]

0 views
Skip to first unread message

Kenichi Ishibashi (Gerrit)

unread,
Jul 1, 2026, 7:40:29 PM (7 days ago) Jul 1
to Rakina Zata Amni, Takashi Toyoshima, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
Attention needed from Rakina Zata Amni and Takashi Toyoshima

Kenichi Ishibashi added 1 comment

Open in Gerrit

Related details

Attention is currently required from:
  • Rakina Zata Amni
  • Takashi Toyoshima
Submit Requirements:
  • requirement satisfiedCode-Coverage
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: chromium/src
Gerrit-Branch: main
Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
Gerrit-Change-Number: 8029002
Gerrit-PatchSet: 7
Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
Gerrit-Attention: Takashi Toyoshima <toyo...@chromium.org>
Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
Gerrit-Comment-Date: Wed, 01 Jul 2026 23:39:45 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
satisfied_requirement
unsatisfied_requirement
open
diffy

Hiroshige Hayashizaki (Gerrit)

unread,
Jul 1, 2026, 10:42:37 PM (7 days ago) Jul 1
to Kenichi Ishibashi, Rakina Zata Amni, Takashi Toyoshima, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
Attention needed from Kenichi Ishibashi, Rakina Zata Amni and Takashi Toyoshima

Hiroshige Hayashizaki added 3 comments

File content/browser/loader/navigation_fast_fetch.cc
Line 97, Patchset 7 (Latest):NavigationFastFetch::CalculateEligibilityReason(NavigationRequest& request) {
Hiroshige Hayashizaki . unresolved

[Not blocking this CL] It's helpful if we add comments why we require these conditions.

I also feel it's helpful to roughly categorize the checks by their reasons (not sure if we can clearly categorize though), e.g.

  • Because a `NavigationThrottle` checks the condition.
  • Because the navigation is less likely to issue a network request. (kHistory, SW)
  • Because Prefetch code checks the condition.
  • Because we intentionally scope this feature. (e.g. requiring HTTPS as a general custom for new features? or just due to higher complexity/ambiguity like DevTools?)
Line 121, Patchset 7 (Latest): request.frame_tree_node()->current_frame_host()->GetSiteInstance());
Hiroshige Hayashizaki . unresolved

Can we also consider a request ineligible if `storage_partition` isn't the `BrowserContext`'s default `StoragePartition`?

So, this check should be split into two tests:

  • StoragePartition check: the navigation target's StoragePartition should be the default StoragePartition.
  • SW check: The default StoragePartition's SWContext doesn't have SW for the URL.

This is also to avoid the confusion e.g. "which StorageParition should/did we test?". Sticking more into the default StoragePartition will avoid such confusion.

Line 131, Patchset 7 (Latest): // TODO(crbug.com/529425553): Check if there is on-going prefetch.
Hiroshige Hayashizaki . unresolved

As chatted offline, probably we shouldn't check this and just rely on Prefetch layer to merge/dedup if such ongoing prefetch exists.

Open in Gerrit

Related details

Attention is currently required from:
  • Kenichi Ishibashi
  • Rakina Zata Amni
  • Takashi Toyoshima
    Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
      Gerrit-Change-Number: 8029002
      Gerrit-PatchSet: 7
      Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
      Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
      Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
      Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
      Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
      Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
      Gerrit-Attention: Kenichi Ishibashi <ba...@chromium.org>
      Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
      Gerrit-Comment-Date: Thu, 02 Jul 2026 02:42:12 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Kenichi Ishibashi (Gerrit)

      unread,
      Jul 2, 2026, 1:45:14 AM (7 days ago) Jul 2
      to Hiroshige Hayashizaki, Rakina Zata Amni, Takashi Toyoshima, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
      Attention needed from Hiroshige Hayashizaki, Rakina Zata Amni and Takashi Toyoshima

      Kenichi Ishibashi added 3 comments

      File content/browser/loader/navigation_fast_fetch.cc
      Line 97, Patchset 7 (Latest):NavigationFastFetch::CalculateEligibilityReason(NavigationRequest& request) {
      Hiroshige Hayashizaki . unresolved

      [Not blocking this CL] It's helpful if we add comments why we require these conditions.

      I also feel it's helpful to roughly categorize the checks by their reasons (not sure if we can clearly categorize though), e.g.

      • Because a `NavigationThrottle` checks the condition.
      • Because the navigation is less likely to issue a network request. (kHistory, SW)
      • Because Prefetch code checks the condition.
      • Because we intentionally scope this feature. (e.g. requiring HTTPS as a general custom for new features? or just due to higher complexity/ambiguity like DevTools?)
      Kenichi Ishibashi

      The histogram has "experimental" in its name, indicating that these conditions and priorities can change in the future. I would like to prioritize flexibility over fixing them in detail through comments.

      Line 121, Patchset 7 (Latest): request.frame_tree_node()->current_frame_host()->GetSiteInstance());
      Hiroshige Hayashizaki . unresolved

      Can we also consider a request ineligible if `storage_partition` isn't the `BrowserContext`'s default `StoragePartition`?

      So, this check should be split into two tests:

      • StoragePartition check: the navigation target's StoragePartition should be the default StoragePartition.
      • SW check: The default StoragePartition's SWContext doesn't have SW for the URL.

      This is also to avoid the confusion e.g. "which StorageParition should/did we test?". Sticking more into the default StoragePartition will avoid such confusion.

      Kenichi Ishibashi

      Would you elaborate on why we limit to the default StoragePartition? I can imagine a scenario where the user has multiple profiles (private, work).

      Line 131, Patchset 7 (Latest): // TODO(crbug.com/529425553): Check if there is on-going prefetch.
      Hiroshige Hayashizaki . resolved

      As chatted offline, probably we shouldn't check this and just rely on Prefetch layer to merge/dedup if such ongoing prefetch exists.

      Kenichi Ishibashi

      +1 for now. I put this TODO since this eligibility check may be used for actual navigation fast fetching logic in the future.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Hiroshige Hayashizaki
      Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
      Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
      Gerrit-Comment-Date: Thu, 02 Jul 2026 05:44:42 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Hiroshige Hayashizaki <hiro...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Takashi Toyoshima (Gerrit)

      unread,
      Jul 2, 2026, 3:36:31 AM (7 days ago) Jul 2
      to Kenichi Ishibashi, Hiroshige Hayashizaki, Rakina Zata Amni, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
      Attention needed from Hiroshige Hayashizaki, Kenichi Ishibashi and Rakina Zata Amni

      Takashi Toyoshima added 26 comments

      File content/browser/loader/navigation_fast_fetch.h
      Line 89, Patchset 7 (Latest): // Computes the eligibility reason based on the NavigationRequest.
      static EligibilityReason CalculateEligibilityReason(
      NavigationRequest& request);

      // Records final lifecycle outcome UMA and cleans up fast fetch state.
      void RecordOutcome(NavigationRequest& request, NavigationOutcome outcome);
      Takashi Toyoshima . unresolved

      They don't access any member. So, consider to be a function in anonymous namespace in the cc file.

      Line 83, Patchset 7 (Latest): // Returns true if the navigation is eligible for Fast Fetch.
      Takashi Toyoshima . unresolved

      protected + friend, or private + ForTesting wrapper.

      Line 80, Patchset 7 (Latest): // Returns the detailed reason for eligibility or ineligibility.
      Takashi Toyoshima . unresolved

      ForTesting, or keep this protected and make tests friend class.

      Line 75, Patchset 7 (Latest): // Returns the time when the eligibility check was performed.
      Takashi Toyoshima . unresolved

      not used?

      Line 59, Patchset 7 (Latest): static std::unique_ptr<NavigationFastFetch> Create(
      Takashi Toyoshima . unresolved

      If we prepare a Crete that contains the ctor and some required operations to be enforced, we usually hide the ctor in protected or private scope.

      Line 48, Patchset 7 (Latest): // Final outcome of the navigation for eligible requests.
      Takashi Toyoshima . unresolved

      ditto

      Line 42, Patchset 7 (Latest): kHasSignedExchange = 7,
      Takashi Toyoshima . unresolved

      not used

      Line 32, Patchset 7 (Latest): // numeric values should never be reused.
      Takashi Toyoshima . unresolved

      Insert an empty line

      Line 28, Patchset 7 (Latest):class CONTENT_EXPORT NavigationFastFetch {
      Takashi Toyoshima . unresolved

      NavitationFastFetch{Evaluator,Experiment,Manager} or something?

      File content/browser/loader/navigation_fast_fetch.cc
      Line 8, Patchset 7 (Latest):#include "base/timer/elapsed_timer.h"
      Takashi Toyoshima . unresolved

      #include "content/browser/renderer_host/render_frame_host_impl.h"

      Line 15, Patchset 7 (Latest):#include "net/base/net_errors.h"
      Takashi Toyoshima . unresolved

      not used?

      Line 98, Patchset 7 (Latest): if (!request.IsInOutermostMainFrame()) {
      Takashi Toyoshima . unresolved

      Just in case, prerender passes this check and will be counted in your metrics. I'm not sure if this is intended.

      Line 115, Patchset 7 (Latest): }
      Takashi Toyoshima . unresolved

      Should we explicitly exclude Same-Document navigations from Fast Fetch eligibility?

      Since this feature aims to parallelize the network fetch for a new document resource, Same-Document navigations (which by definition do not fetch a new document) seem inherently ineligible. It might be better to add a specific EligibilityReason such as kSameDocument and return it here to keep the metrics focused on navigations that actually involve a document load.

      Line 136, Patchset 7 (Latest):void NavigationFastFetch::RecordOutcome(NavigationRequest& request,
      Takashi Toyoshima . unresolved

      not used?

      File content/browser/loader/navigation_fast_fetch_browsertest.cc
      Line 1, Patchset 7 (Latest):// Copyright 2026 The Chromium Authors
      Takashi Toyoshima . unresolved

      Can we add following scenarios?

      • Restarted navigations: Verifying if metrics are recorded twice.
      • Prerender Activation: Verifying that they are (or are not) eligible as intended.
      • Negative Opportunity Time: Verifying behavior when fetch_start is before eligibility_check_time.
      Line 14, Patchset 7 (Latest):#include "net/dns/mock_host_resolver.h"
      Takashi Toyoshima . unresolved

      not used?

      File content/browser/loader/navigation_fast_fetch_unittest.cc
      Line 8, Patchset 7 (Latest):#include "base/logging.h"
      Takashi Toyoshima . unresolved

      not used?

      Line 13, Patchset 7 (Latest):#include "content/browser/storage_partition_impl.h"
      Takashi Toyoshima . unresolved

      maybe impl part is not used and this include is unnecessary?

      Line 14, Patchset 7 (Latest):#include "content/public/test/mock_devtools_agent_host.h"
      Takashi Toyoshima . unresolved

      maybe Mock is not used?
      content/public/browser/devtools_agent_host.h is the right include?

      Line 16, Patchset 7 (Latest):#include "content/public/test/test_browser_context.h"
      Takashi Toyoshima . unresolved

      optionally unnecessary as RenderViewHostImplTestHarness gives required things.

      Line 22, Patchset 7 (Latest):#include "net/http/http_request_headers.h"
      Takashi Toyoshima . unresolved

      used?

      Line 24, Patchset 7 (Latest):#include "third_party/blink/public/mojom/loader/referrer.mojom.h"
      Takashi Toyoshima . unresolved

      same

      File content/browser/renderer_host/navigation_request.h
      Line 745, Patchset 7 (Latest): NavigationFastFetch* fast_fetch() const { return fast_fetch_.get(); }
      Takashi Toyoshima . unresolved

      While this is under experiment, it's good to name this as ForTesting as no production code relies on this now?

      File content/browser/renderer_host/navigation_request.cc
      Line 3000, Patchset 7 (Latest):void NavigationRequest::BeginNavigationImpl() {
      Takashi Toyoshima . unresolved

      I noticed a potential double-recording of UMA metrics when a navigation restarts.

      In certain scenarios, a navigation might start as Same-Document but then be forced to restart as a Cross-Document navigation via ResetForCrossDocumentRestart(). In this case, BeginNavigationImpl() is called again for the same NavigationRequest.

      Under the current implementation, NavigationFastFetch::Create() would be called twice, logging the EligibilityReason twice and skewing the data. Since we are primarily interested in the final, correct state of the navigation (especially for those performing a network fetch), we should ensure that any existing fast_fetch_ instance is either reset or its metrics discarded when a restart occurs.

      Line 3055, Patchset 7 (Latest): fast_fetch_ = NavigationFastFetch::Create(*this);
      Takashi Toyoshima . unresolved

      We prefer implementing any kind of new features behind a base::Feature flag?

      File tools/metrics/histograms/metadata/navigation/histograms.xml
      Line 1212, Patchset 7 (Latest): units="ms" expires_after="2026-10-01">
      Takashi Toyoshima . unresolved

      us

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Hiroshige Hayashizaki
      • Kenichi Ishibashi
      • Rakina Zata Amni
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
      Gerrit-Change-Number: 8029002
      Gerrit-PatchSet: 7
      Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
      Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
      Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
      Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
      Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
      Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
      Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
      Gerrit-Attention: Kenichi Ishibashi <ba...@chromium.org>
      Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
      Gerrit-Comment-Date: Thu, 02 Jul 2026 07:36:01 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Takashi Toyoshima (Gerrit)

      unread,
      Jul 2, 2026, 3:38:08 AM (7 days ago) Jul 2
      to Kenichi Ishibashi, Hiroshige Hayashizaki, Rakina Zata Amni, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
      Attention needed from Hiroshige Hayashizaki, Kenichi Ishibashi and Rakina Zata Amni

      Takashi Toyoshima added 1 comment

      File content/browser/renderer_host/navigation_request.cc
      Line 3000, Patchset 7 (Latest):void NavigationRequest::BeginNavigationImpl() {
      Takashi Toyoshima . unresolved

      I noticed a potential double-recording of UMA metrics when a navigation restarts.

      In certain scenarios, a navigation might start as Same-Document but then be forced to restart as a Cross-Document navigation via ResetForCrossDocumentRestart(). In this case, BeginNavigationImpl() is called again for the same NavigationRequest.

      Under the current implementation, NavigationFastFetch::Create() would be called twice, logging the EligibilityReason twice and skewing the data. Since we are primarily interested in the final, correct state of the navigation (especially for those performing a network fetch), we should ensure that any existing fast_fetch_ instance is either reset or its metrics discarded when a restart occurs.

      Takashi Toyoshima

      cc: @rak...@chromium.org
      Can you double check if my understanding is correct?

      Gerrit-Comment-Date: Thu, 02 Jul 2026 07:37:35 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Takashi Toyoshima <toyo...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Rakina Zata Amni (Gerrit)

      unread,
      Jul 2, 2026, 11:29:38 PM (6 days ago) Jul 2
      to Kenichi Ishibashi, Hiroshige Hayashizaki, Takashi Toyoshima, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
      Attention needed from Hiroshige Hayashizaki and Kenichi Ishibashi

      Rakina Zata Amni added 4 comments

      File content/browser/loader/navigation_fast_fetch.h
      Line 43, Patchset 7 (Latest): kHasServiceWorker = 8,
      Rakina Zata Amni . unresolved

      What if the page is already prerendered/prefetched/have http cahce entries?

      File content/browser/loader/navigation_fast_fetch.cc
      Line 120, Patchset 7 (Latest): request.GetWebContents()->GetBrowserContext()->GetStoragePartition(
      Rakina Zata Amni . unresolved

      Instead of using the SiteInstance for the current RFH, would it be more accurate to check `request.GetBrowserContext()->GetStoragePartitionForUrl(request.GetURL(), ...)`)?

      File content/browser/renderer_host/navigation_request.cc
      Line 3000, Patchset 7 (Latest):void NavigationRequest::BeginNavigationImpl() {
      Takashi Toyoshima . unresolved

      I noticed a potential double-recording of UMA metrics when a navigation restarts.

      In certain scenarios, a navigation might start as Same-Document but then be forced to restart as a Cross-Document navigation via ResetForCrossDocumentRestart(). In this case, BeginNavigationImpl() is called again for the same NavigationRequest.

      Under the current implementation, NavigationFastFetch::Create() would be called twice, logging the EligibilityReason twice and skewing the data. Since we are primarily interested in the final, correct state of the navigation (especially for those performing a network fetch), we should ensure that any existing fast_fetch_ instance is either reset or its metrics discarded when a restart occurs.

      Takashi Toyoshima

      cc: @rak...@chromium.org
      Can you double check if my understanding is correct?

      Rakina Zata Amni

      Yeah cross-document restarts can happen. It looks like we will log the eligibility twice, but the outcome won't be recorded if same-document navs are excluded. Maybe it's fine, you would just see more same-document navs (I expect this restart to be rare)

      Line 5622, Patchset 7 (Latest): fast_fetch_->OnRequestFailed(*this, status, skip_throttles);
      Rakina Zata Amni . unresolved

      Some failed navigations don't call OnRequestFailedInternal. e.g. the NavigationRequest gets deleted directly (OnNavigationClientDisconnected, new NavigationRequest takes over, etc). Maybe you should trigger this at destruction, or maybe even use WebContentsObserver DidStart/Finish/etc?

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Hiroshige Hayashizaki
      • Kenichi Ishibashi
      Gerrit-Comment-Date: Fri, 03 Jul 2026 03:29:23 +0000
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Kenichi Ishibashi (Gerrit)

      unread,
      Jul 3, 2026, 3:45:24 AM (6 days ago) Jul 3
      to Hiroshige Hayashizaki, Rakina Zata Amni, Takashi Toyoshima, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
      Attention needed from Hiroshige Hayashizaki, Rakina Zata Amni and Takashi Toyoshima

      Kenichi Ishibashi added 30 comments

      Patchset-level comments
      File-level comment, Patchset 8 (Latest):
      Kenichi Ishibashi . resolved

      Thanks!

      File content/browser/loader/navigation_fast_fetch.h
      Line 89, Patchset 7: // Computes the eligibility reason based on the NavigationRequest.

      static EligibilityReason CalculateEligibilityReason(
      NavigationRequest& request);

      // Records final lifecycle outcome UMA and cleans up fast fetch state.
      void RecordOutcome(NavigationRequest& request, NavigationOutcome outcome);
      Takashi Toyoshima . resolved

      They don't access any member. So, consider to be a function in anonymous namespace in the cc file.

      Kenichi Ishibashi

      Done

      Line 83, Patchset 7: // Returns true if the navigation is eligible for Fast Fetch.
      Takashi Toyoshima . resolved

      protected + friend, or private + ForTesting wrapper.

      Kenichi Ishibashi

      Removed.

      Line 80, Patchset 7: // Returns the detailed reason for eligibility or ineligibility.
      Takashi Toyoshima . resolved

      ForTesting, or keep this protected and make tests friend class.

      Kenichi Ishibashi

      Done

      Line 75, Patchset 7: // Returns the time when the eligibility check was performed.
      Takashi Toyoshima . resolved

      not used?

      Kenichi Ishibashi

      Removed.

      Line 59, Patchset 7: static std::unique_ptr<NavigationFastFetch> Create(
      Takashi Toyoshima . resolved

      If we prepare a Crete that contains the ctor and some required operations to be enforced, we usually hide the ctor in protected or private scope.

      Kenichi Ishibashi

      Done

      Line 48, Patchset 7: // Final outcome of the navigation for eligible requests.
      Takashi Toyoshima . resolved

      ditto

      Kenichi Ishibashi

      Done

      Line 43, Patchset 7: kHasServiceWorker = 8,
      Rakina Zata Amni . resolved

      What if the page is already prerendered/prefetched/have http cahce entries?

      Kenichi Ishibashi

      Covered prerendered/prefetched. I think http cache case should be fine, as it is considered network fetch (with cache hit).

      Line 42, Patchset 7: kHasSignedExchange = 7,
      Takashi Toyoshima . resolved

      not used

      Kenichi Ishibashi

      Added check in CalculateEligibilityReason().

      Line 32, Patchset 7: // numeric values should never be reused.
      Takashi Toyoshima . resolved

      Insert an empty line

      Kenichi Ishibashi

      Done

      Line 28, Patchset 7:class CONTENT_EXPORT NavigationFastFetch {
      Takashi Toyoshima . resolved

      NavitationFastFetch{Evaluator,Experiment,Manager} or something?

      Kenichi Ishibashi

      Renamed: NavitationFastFetchManager.

      File content/browser/loader/navigation_fast_fetch.cc
      Line 8, Patchset 7:#include "base/timer/elapsed_timer.h"
      Takashi Toyoshima . resolved

      #include "content/browser/renderer_host/render_frame_host_impl.h"

      Kenichi Ishibashi

      Done

      Line 15, Patchset 7:#include "net/base/net_errors.h"
      Takashi Toyoshima . resolved

      not used?

      Kenichi Ishibashi

      Removed.

      Line 98, Patchset 7: if (!request.IsInOutermostMainFrame()) {
      Takashi Toyoshima . resolved

      Just in case, prerender passes this check and will be counted in your metrics. I'm not sure if this is intended.

      Kenichi Ishibashi

      Added check.

      Line 115, Patchset 7: }
      Takashi Toyoshima . resolved

      Should we explicitly exclude Same-Document navigations from Fast Fetch eligibility?

      Since this feature aims to parallelize the network fetch for a new document resource, Same-Document navigations (which by definition do not fetch a new document) seem inherently ineligible. It might be better to add a specific EligibilityReason such as kSameDocument and return it here to keep the metrics focused on navigations that actually involve a document load.

      Kenichi Ishibashi

      Good point. Excluded same document navigations.

      Line 120, Patchset 7: request.GetWebContents()->GetBrowserContext()->GetStoragePartition(
      Rakina Zata Amni . unresolved

      Instead of using the SiteInstance for the current RFH, would it be more accurate to check `request.GetBrowserContext()->GetStoragePartitionForUrl(request.GetURL(), ...)`)?

      Kenichi Ishibashi

      IIUC GetStoragePartitionForUrl() is deprecated.

      Line 136, Patchset 7:void NavigationFastFetch::RecordOutcome(NavigationRequest& request,
      Takashi Toyoshima . resolved

      not used?

      Kenichi Ishibashi

      Done

      File content/browser/loader/navigation_fast_fetch_browsertest.cc
      Line 1, Patchset 7:// Copyright 2026 The Chromium Authors
      Takashi Toyoshima . resolved

      Can we add following scenarios?

      • Restarted navigations: Verifying if metrics are recorded twice.
      • Prerender Activation: Verifying that they are (or are not) eligible as intended.
      • Negative Opportunity Time: Verifying behavior when fetch_start is before eligibility_check_time.
      Kenichi Ishibashi

      Added first two tests in browser_tests. The last one was added as unittest.

      Line 14, Patchset 7:#include "net/dns/mock_host_resolver.h"
      Takashi Toyoshima . resolved

      not used?

      Kenichi Ishibashi

      Removed.

      File content/browser/loader/navigation_fast_fetch_unittest.cc
      Line 8, Patchset 7:#include "base/logging.h"
      Takashi Toyoshima . resolved

      not used?

      Kenichi Ishibashi

      Removed.

      Line 13, Patchset 7:#include "content/browser/storage_partition_impl.h"
      Takashi Toyoshima . resolved

      maybe impl part is not used and this include is unnecessary?

      Kenichi Ishibashi

      Removed.

      Line 14, Patchset 7:#include "content/public/test/mock_devtools_agent_host.h"
      Takashi Toyoshima . resolved

      maybe Mock is not used?
      content/public/browser/devtools_agent_host.h is the right include?

      Kenichi Ishibashi

      Done

      Line 16, Patchset 7:#include "content/public/test/test_browser_context.h"
      Takashi Toyoshima . resolved

      optionally unnecessary as RenderViewHostImplTestHarness gives required things.

      Kenichi Ishibashi

      Removed.

      Line 22, Patchset 7:#include "net/http/http_request_headers.h"
      Takashi Toyoshima . resolved

      used?

      Kenichi Ishibashi

      Removed. I think it was a leftover when I tried to write unittests for service worker check (moved to browsertests).

      Line 24, Patchset 7:#include "third_party/blink/public/mojom/loader/referrer.mojom.h"
      Takashi Toyoshima . resolved

      same

      Kenichi Ishibashi

      Removed.

      File content/browser/renderer_host/navigation_request.h
      Line 745, Patchset 7: NavigationFastFetch* fast_fetch() const { return fast_fetch_.get(); }
      Takashi Toyoshima . resolved

      While this is under experiment, it's good to name this as ForTesting as no production code relies on this now?

      Kenichi Ishibashi

      Done

      File content/browser/renderer_host/navigation_request.cc
      Line 3000, Patchset 7:void NavigationRequest::BeginNavigationImpl() {
      Takashi Toyoshima . unresolved

      I noticed a potential double-recording of UMA metrics when a navigation restarts.

      In certain scenarios, a navigation might start as Same-Document but then be forced to restart as a Cross-Document navigation via ResetForCrossDocumentRestart(). In this case, BeginNavigationImpl() is called again for the same NavigationRequest.

      Under the current implementation, NavigationFastFetch::Create() would be called twice, logging the EligibilityReason twice and skewing the data. Since we are primarily interested in the final, correct state of the navigation (especially for those performing a network fetch), we should ensure that any existing fast_fetch_ instance is either reset or its metrics discarded when a restart occurs.

      Takashi Toyoshima

      cc: @rak...@chromium.org
      Can you double check if my understanding is correct?

      Rakina Zata Amni

      Yeah cross-document restarts can happen. It looks like we will log the eligibility twice, but the outcome won't be recorded if same-document navs are excluded. Maybe it's fine, you would just see more same-document navs (I expect this restart to be rare)

      Kenichi Ishibashi

      Moved eligibility reason histogram recording in the destructor of FastFetch instance and add a method to suppress histogram recording.

      Line 3055, Patchset 7: fast_fetch_ = NavigationFastFetch::Create(*this);
      Takashi Toyoshima . resolved

      We prefer implementing any kind of new features behind a base::Feature flag?

      Kenichi Ishibashi

      The initial phase is just collecting histograms. Added a flag and marked it as enabled by default so that we can record histograms. The flag will act like a kill switch.

      I'll add feature params (default disabled) when we add functional changes.

      Line 5622, Patchset 7: fast_fetch_->OnRequestFailed(*this, status, skip_throttles);
      Rakina Zata Amni . unresolved

      Some failed navigations don't call OnRequestFailedInternal. e.g. the NavigationRequest gets deleted directly (OnNavigationClientDisconnected, new NavigationRequest takes over, etc). Maybe you should trigger this at destruction, or maybe even use WebContentsObserver DidStart/Finish/etc?

      Kenichi Ishibashi

      I see, thank you for the info. Since I want to record failed information (esp skip_throttles), let me add a TODO comment to consider covering these cases.

      File tools/metrics/histograms/metadata/navigation/histograms.xml
      Line 1212, Patchset 7: units="ms" expires_after="2026-10-01">
      Takashi Toyoshima . resolved

      us

      Kenichi Ishibashi

      Done

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Hiroshige Hayashizaki
      • Rakina Zata Amni
      • Takashi Toyoshima
      Submit Requirements:
      • requirement satisfiedCode-Coverage
      • requirement is not satisfiedCode-Owners
      • requirement is not satisfiedCode-Review
      • requirement is not satisfiedNo-Unresolved-Comments
      • requirement is not satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
      Gerrit-Change-Number: 8029002
      Gerrit-PatchSet: 8
      Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
      Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
      Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
      Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
      Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
      Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
      Gerrit-Attention: Takashi Toyoshima <toyo...@chromium.org>
      Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
      Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
      Gerrit-Comment-Date: Fri, 03 Jul 2026 07:45:06 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Takashi Toyoshima <toyo...@chromium.org>
      Comment-In-Reply-To: Rakina Zata Amni <rak...@chromium.org>
      satisfied_requirement
      unsatisfied_requirement
      open
      diffy

      Takashi Toyoshima (Gerrit)

      unread,
      Jul 6, 2026, 2:07:22 AM (3 days ago) Jul 6
      to Kenichi Ishibashi, Hiroshige Hayashizaki, Rakina Zata Amni, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
      Attention needed from Hiroshige Hayashizaki, Kenichi Ishibashi and Rakina Zata Amni

      Takashi Toyoshima voted and added 6 comments

      Votes added by Takashi Toyoshima

      Code-Review+1

      6 comments

      File content/browser/loader/navigation_fast_fetch_manager.h
      Line 51, Patchset 8 (Latest): // Final outcome of the navigation for eligible requests.
      Line 32, Patchset 8 (Latest): // numeric values should never be reused.
      Takashi Toyoshima . unresolved

      nit: insert an empty line before the LINT.

      File content/browser/loader/navigation_fast_fetch_manager.cc
      Line 72, Patchset 8 (Latest):#define kOpportunityBaseName "Navigation.Experimental.FastFetch.OpportunityTime"
      Takashi Toyoshima . unresolved

      Using a macro and `std::string_view` constants here is a bit unconventional for Chromium. Since histogram names should be literals for best performance and ease of grepping, it's usually better to just use the full string literals directly in the `UmaHistogram` calls or use `static constexpr char[]` constants.

      Suggestion:
      ```cpp
      static constexpr char kOpportunityTimeLoaderStart[] =
      \"Navigation.Experimental.FastFetch.OpportunityTime.LoaderStart\";
      static constexpr char kOpportunityTimeFetchStart[] =
      \"Navigation.Experimental.FastFetch.OpportunityTime.FetchStart\";
      ```
      Or just inline them.
      Line 114, Patchset 8 (Latest):// static
      Takashi Toyoshima . unresolved

      Should this be a class method?
      If I don't miss something, this seems independent from the instance, and depends only on `request`. If so, this could be a function in an anonymous namespace,

      File content/browser/renderer_host/navigation_request.cc
      Line 3000, Patchset 7:void NavigationRequest::BeginNavigationImpl() {
      Takashi Toyoshima . resolved

      I noticed a potential double-recording of UMA metrics when a navigation restarts.

      In certain scenarios, a navigation might start as Same-Document but then be forced to restart as a Cross-Document navigation via ResetForCrossDocumentRestart(). In this case, BeginNavigationImpl() is called again for the same NavigationRequest.

      Under the current implementation, NavigationFastFetch::Create() would be called twice, logging the EligibilityReason twice and skewing the data. Since we are primarily interested in the final, correct state of the navigation (especially for those performing a network fetch), we should ensure that any existing fast_fetch_ instance is either reset or its metrics discarded when a restart occurs.

      Takashi Toyoshima

      cc: @rak...@chromium.org
      Can you double check if my understanding is correct?

      Rakina Zata Amni

      Yeah cross-document restarts can happen. It looks like we will log the eligibility twice, but the outcome won't be recorded if same-document navs are excluded. Maybe it's fine, you would just see more same-document navs (I expect this restart to be rare)

      Kenichi Ishibashi

      Moved eligibility reason histogram recording in the destructor of FastFetch instance and add a method to suppress histogram recording.

      Takashi Toyoshima

      Acknowledged

      File tools/metrics/histograms/metadata/navigation/histograms.xml
      Line 1218, Patchset 8 (Latest): navigations.
      Takashi Toyoshima . unresolved

      Comment that some of clients may not have high resolution timer that can send metrics with microseconds precision.

      Open in Gerrit

      Related details

      Attention is currently required from:
      • Hiroshige Hayashizaki
      • Kenichi Ishibashi
      • Rakina Zata Amni
        Submit Requirements:
          • requirement satisfiedCode-Coverage
          • requirement is not satisfiedCode-Owners
          • requirement satisfiedCode-Review
          • requirement is not satisfiedNo-Unresolved-Comments
          • requirement satisfiedReview-Enforcement
          Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
          Gerrit-MessageType: comment
          Gerrit-Project: chromium/src
          Gerrit-Branch: main
          Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
          Gerrit-Change-Number: 8029002
          Gerrit-PatchSet: 8
          Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
          Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
          Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
          Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
          Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
          Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
          Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
          Gerrit-Attention: Kenichi Ishibashi <ba...@chromium.org>
          Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
          Gerrit-Comment-Date: Mon, 06 Jul 2026 06:07:04 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: Yes
          Comment-In-Reply-To: Takashi Toyoshima <toyo...@chromium.org>
          Comment-In-Reply-To: Kenichi Ishibashi <ba...@chromium.org>
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Rakina Zata Amni (Gerrit)

          unread,
          Jul 6, 2026, 2:37:14 AM (3 days ago) Jul 6
          to Kenichi Ishibashi, Takashi Toyoshima, Hiroshige Hayashizaki, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
          Attention needed from Hiroshige Hayashizaki and Kenichi Ishibashi

          Rakina Zata Amni added 6 comments

          File content/browser/loader/navigation_fast_fetch.cc
          Line 120, Patchset 7: request.GetWebContents()->GetBrowserContext()->GetStoragePartition(
          Rakina Zata Amni . unresolved

          Instead of using the SiteInstance for the current RFH, would it be more accurate to check `request.GetBrowserContext()->GetStoragePartitionForUrl(request.GetURL(), ...)`)?

          Kenichi Ishibashi

          IIUC GetStoragePartitionForUrl() is deprecated.

          Rakina Zata Amni

          oh right, nevermind then. I guess you can use `GetStoragePartitionWithCurrentSiteInfo()` here which would be doing the same not-so-accurate thing here but at least you don't need to do it manually? Also I think you mentioned about skipping non-default storage partition cases, where is that checked? Maybe you can update the eligibility check at the end / at commit / failure when you would already have that information?

          File content/browser/loader/navigation_fast_fetch_manager.h
          Line 92, Patchset 8 (Latest): const EligibilityReason eligibility_reason_;
          Rakina Zata Amni . unresolved

          Can you please add comments?

          Rakina Zata Amni . unresolved

          Does it matter if the network request gets redirected? Can that affect the eligibility checks above?

          File content/browser/loader/navigation_fast_fetch_manager.cc
          Line 150, Patchset 8 (Latest): StoragePartition* storage_partition =
          Rakina Zata Amni . unresolved

          Please fix this WARNING reported by autoreview issue finding: Consider using `request.GetStoragePartitionWithCurrentSiteInfo()` (or `request.GetStoragePartition()`, if available) instead of manually reaching into the `WebContents` and the `current_frame_host`. It encapsulates this logic nicely.

          File content/browser/renderer_host/navigation_request.cc
          Line 5622, Patchset 7: fast_fetch_->OnRequestFailed(*this, status, skip_throttles);
          Rakina Zata Amni . unresolved

          Some failed navigations don't call OnRequestFailedInternal. e.g. the NavigationRequest gets deleted directly (OnNavigationClientDisconnected, new NavigationRequest takes over, etc). Maybe you should trigger this at destruction, or maybe even use WebContentsObserver DidStart/Finish/etc?

          Kenichi Ishibashi

          I see, thank you for the info. Since I want to record failed information (esp skip_throttles), let me add a TODO comment to consider covering these cases.

          Rakina Zata Amni

          I think you can cover the other cases not covered here at destruction time if you noticed you haven't logged commit/failure? I guess it depends on what you will use the data for. How would these failure / cancellation results help you evaluate fast fetch opportunity?

          File content/public/common/content_features.h
          Line 237, Patchset 8 (Latest):CONTENT_EXPORT BASE_DECLARE_FEATURE(kNavigationFastFetchDryRun);
          Rakina Zata Amni . unresolved

          Please move this to `content/common/features.h` since it's only used within `//content`

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Hiroshige Hayashizaki
          • Kenichi Ishibashi
          Gerrit-Comment-Date: Mon, 06 Jul 2026 06:36:59 +0000
          Gerrit-HasComments: Yes
          Gerrit-Has-Labels: No
          satisfied_requirement
          unsatisfied_requirement
          open
          diffy

          Kenichi Ishibashi (Gerrit)

          unread,
          Jul 7, 2026, 1:31:48 AM (2 days ago) Jul 7
          to Takashi Toyoshima, Hiroshige Hayashizaki, Rakina Zata Amni, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
          Attention needed from Hiroshige Hayashizaki, Rakina Zata Amni and Takashi Toyoshima

          Kenichi Ishibashi added 12 comments

          Patchset-level comments
          File-level comment, Patchset 9 (Latest):
          Kenichi Ishibashi . resolved

          Thank you!

          File content/browser/loader/navigation_fast_fetch.cc
          Line 120, Patchset 7: request.GetWebContents()->GetBrowserContext()->GetStoragePartition(
          Rakina Zata Amni . unresolved

          Instead of using the SiteInstance for the current RFH, would it be more accurate to check `request.GetBrowserContext()->GetStoragePartitionForUrl(request.GetURL(), ...)`)?

          Kenichi Ishibashi

          IIUC GetStoragePartitionForUrl() is deprecated.

          Rakina Zata Amni

          oh right, nevermind then. I guess you can use `GetStoragePartitionWithCurrentSiteInfo()` here which would be doing the same not-so-accurate thing here but at least you don't need to do it manually? Also I think you mentioned about skipping non-default storage partition cases, where is that checked? Maybe you can update the eligibility check at the end / at commit / failure when you would already have that information?

          Kenichi Ishibashi

          From my code reading, we can't rely on GetStoragePartitionWithCurrentSiteInfo () at this point because NavigationRequest initializes `site_info_` via `explicit SiteInfo(BrowserContext* browser_context)`, which creates an empty site info.

          NavigationRequest updates `site_info_` later in NavigationRequest::StartNavigation using GetSiteInfoForCommonParamsURL().

          Also I think you mentioned about skipping non-default storage partition cases...

          hiroshige@ suggested it, but I think we should not skip non-default storage partitions since a user could have multiple profiles (work, private etc).

          Maybe you can update the eligibility check at the end / at commit / failure when you would already have that information?

          The key question here is whether we can determine if a navigation is fast fetch eligible right when the NavigationRequest is created. The goal of this CL is to add a histogram to answer that, so pushing the eligibility check to a later stage would not help.

          File content/browser/loader/navigation_fast_fetch_manager.h
          Line 92, Patchset 8: const EligibilityReason eligibility_reason_;
          Rakina Zata Amni . resolved

          Can you please add comments?

          Kenichi Ishibashi

          Done

          Line 54, Patchset 8: kCommitted = 0,
          Rakina Zata Amni . resolved

          Does it matter if the network request gets redirected? Can that affect the eligibility checks above?

          Kenichi Ishibashi

          Yes, it matters. I omitted it since this CL doesn't handle it. Subsequent CLs will add it. Added TODO for now.

          Line 51, Patchset 8: // Final outcome of the navigation for eligible requests.
          Takashi Toyoshima . resolved
          Kenichi Ishibashi

          Done

          Line 32, Patchset 8: // numeric values should never be reused.
          Takashi Toyoshima . resolved

          nit: insert an empty line before the LINT.

          Kenichi Ishibashi

          Done

          File content/browser/loader/navigation_fast_fetch_manager.cc
          Line 72, Patchset 8:#define kOpportunityBaseName "Navigation.Experimental.FastFetch.OpportunityTime"
          Takashi Toyoshima . resolved

          Using a macro and `std::string_view` constants here is a bit unconventional for Chromium. Since histogram names should be literals for best performance and ease of grepping, it's usually better to just use the full string literals directly in the `UmaHistogram` calls or use `static constexpr char[]` constants.

          Suggestion:
          ```cpp
          static constexpr char kOpportunityTimeLoaderStart[] =
          \"Navigation.Experimental.FastFetch.OpportunityTime.LoaderStart\";
          static constexpr char kOpportunityTimeFetchStart[] =
          \"Navigation.Experimental.FastFetch.OpportunityTime.FetchStart\";
          ```
          Or just inline them.
          Kenichi Ishibashi
          Line 114, Patchset 8:// static
          Takashi Toyoshima . resolved

          Should this be a class method?
          If I don't miss something, this seems independent from the instance, and depends only on `request`. If so, this could be a function in an anonymous namespace,

          Kenichi Ishibashi

          Done

          Line 150, Patchset 8: StoragePartition* storage_partition =
          Rakina Zata Amni . resolved

          Please fix this WARNING reported by autoreview issue finding: Consider using `request.GetStoragePartitionWithCurrentSiteInfo()` (or `request.GetStoragePartition()`, if available) instead of manually reaching into the `WebContents` and the `current_frame_host`. It encapsulates this logic nicely.

          Kenichi Ishibashi

          Please see other comment.

          File content/browser/renderer_host/navigation_request.cc
          Line 5622, Patchset 7: fast_fetch_->OnRequestFailed(*this, status, skip_throttles);
          Rakina Zata Amni . resolved

          Some failed navigations don't call OnRequestFailedInternal. e.g. the NavigationRequest gets deleted directly (OnNavigationClientDisconnected, new NavigationRequest takes over, etc). Maybe you should trigger this at destruction, or maybe even use WebContentsObserver DidStart/Finish/etc?

          Kenichi Ishibashi

          I see, thank you for the info. Since I want to record failed information (esp skip_throttles), let me add a TODO comment to consider covering these cases.

          Rakina Zata Amni

          I think you can cover the other cases not covered here at destruction time if you noticed you haven't logged commit/failure? I guess it depends on what you will use the data for. How would these failure / cancellation results help you evaluate fast fetch opportunity?

          Kenichi Ishibashi

          Added a logic to record outcome when cancelled in the destructor of NavigationFastFetchManager.

          File content/public/common/content_features.h
          Line 237, Patchset 8:CONTENT_EXPORT BASE_DECLARE_FEATURE(kNavigationFastFetchDryRun);
          Rakina Zata Amni . resolved

          Please move this to `content/common/features.h` since it's only used within `//content`

          Kenichi Ishibashi

          Done

          File tools/metrics/histograms/metadata/navigation/histograms.xml
          Line 1218, Patchset 8: navigations.
          Takashi Toyoshima . resolved

          Comment that some of clients may not have high resolution timer that can send metrics with microseconds precision.

          Kenichi Ishibashi

          Done

          Open in Gerrit

          Related details

          Attention is currently required from:
          • Hiroshige Hayashizaki
          • Rakina Zata Amni
          • Takashi Toyoshima
            Submit Requirements:
              • requirement satisfiedCode-Coverage
              • requirement is not satisfiedCode-Owners
              • requirement is not satisfiedCode-Review
              • requirement is not satisfiedNo-Unresolved-Comments
              • requirement is not satisfiedReview-Enforcement
              Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
              Gerrit-MessageType: comment
              Gerrit-Project: chromium/src
              Gerrit-Branch: main
              Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
              Gerrit-Change-Number: 8029002
              Gerrit-PatchSet: 9
              Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
              Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
              Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
              Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
              Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
              Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
              Gerrit-Attention: Takashi Toyoshima <toyo...@chromium.org>
              Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
              Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
              Gerrit-Comment-Date: Tue, 07 Jul 2026 05:31:19 +0000
              Gerrit-HasComments: Yes
              Gerrit-Has-Labels: No
              Comment-In-Reply-To: Takashi Toyoshima <toyo...@chromium.org>
              satisfied_requirement
              unsatisfied_requirement
              open
              diffy

              Takashi Toyoshima (Gerrit)

              unread,
              Jul 7, 2026, 4:29:37 AM (2 days ago) Jul 7
              to Kenichi Ishibashi, Hiroshige Hayashizaki, Rakina Zata Amni, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
              Attention needed from Hiroshige Hayashizaki, Kenichi Ishibashi and Rakina Zata Amni

              Takashi Toyoshima voted and added 1 comment

              Votes added by Takashi Toyoshima

              Code-Review+1

              1 comment

              Patchset-level comments
              Takashi Toyoshima . resolved

              Still LGTM from my side.

              Open in Gerrit

              Related details

              Attention is currently required from:
              • Hiroshige Hayashizaki
              • Kenichi Ishibashi
              • Rakina Zata Amni
                Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement is not satisfiedCode-Owners
                  • requirement satisfiedCode-Review
                  • requirement is not satisfiedNo-Unresolved-Comments
                  • requirement satisfiedReview-Enforcement
                  Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                  Gerrit-MessageType: comment
                  Gerrit-Project: chromium/src
                  Gerrit-Branch: main
                  Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
                  Gerrit-Change-Number: 8029002
                  Gerrit-PatchSet: 9
                  Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
                  Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
                  Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
                  Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
                  Gerrit-Comment-Date: Tue, 07 Jul 2026 08:29:10 +0000
                  Gerrit-HasComments: Yes
                  Gerrit-Has-Labels: Yes
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy

                  Rakina Zata Amni (Gerrit)

                  unread,
                  Jul 8, 2026, 8:06:37 PM (8 hours ago) Jul 8
                  to Kenichi Ishibashi, Takashi Toyoshima, Hiroshige Hayashizaki, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, twifka...@chromium.org, hayato...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
                  Attention needed from Hiroshige Hayashizaki and Kenichi Ishibashi

                  Rakina Zata Amni added 2 comments

                  Rakina Zata Amni . resolved

                  Thanks, mostly LGTM but just one more question about the StoragePartition stuff

                  File content/browser/loader/navigation_fast_fetch.cc
                  Line 120, Patchset 7: request.GetWebContents()->GetBrowserContext()->GetStoragePartition(
                  Rakina Zata Amni . unresolved

                  Instead of using the SiteInstance for the current RFH, would it be more accurate to check `request.GetBrowserContext()->GetStoragePartitionForUrl(request.GetURL(), ...)`)?

                  Kenichi Ishibashi

                  IIUC GetStoragePartitionForUrl() is deprecated.

                  Rakina Zata Amni

                  oh right, nevermind then. I guess you can use `GetStoragePartitionWithCurrentSiteInfo()` here which would be doing the same not-so-accurate thing here but at least you don't need to do it manually? Also I think you mentioned about skipping non-default storage partition cases, where is that checked? Maybe you can update the eligibility check at the end / at commit / failure when you would already have that information?

                  Kenichi Ishibashi

                  From my code reading, we can't rely on GetStoragePartitionWithCurrentSiteInfo () at this point because NavigationRequest initializes `site_info_` via `explicit SiteInfo(BrowserContext* browser_context)`, which creates an empty site info.

                  NavigationRequest updates `site_info_` later in NavigationRequest::StartNavigation using GetSiteInfoForCommonParamsURL().

                  Also I think you mentioned about skipping non-default storage partition cases...

                  hiroshige@ suggested it, but I think we should not skip non-default storage partitions since a user could have multiple profiles (work, private etc).

                  Maybe you can update the eligibility check at the end / at commit / failure when you would already have that information?

                  The key question here is whether we can determine if a navigation is fast fetch eligible right when the NavigationRequest is created. The goal of this CL is to add a histogram to answer that, so pushing the eligibility check to a later stage would not help.

                  Rakina Zata Amni

                  oh, right, it looks like `GetStoragePartitionWithCurrentSiteInfo()` would always go to the default storage partition in this case. Meanwhile yours would always result in the current RFH's storage partition. Neither are guaranteed to be the same as the target URL's storage partition.

                  How much does it matter if you do the early network request with the wrong storage partition? (Will you be sending it with the wrong cookies?)
                  If it's potentially problematic, I wonder if we can use a combination of these to determine the target URL's storage partition more accurately, which I think doesn't require SiteInfo?
                  https://source.chromium.org/chromium/chromium/src/+/main:content/browser/site_info.cc;l=337;drc=04a9f36f1551524fb2494bf2429de20d2c1f337e
                  https://source.chromium.org/chromium/chromium/src/+/main:content/browser/renderer_host/navigation_request.cc;l=4650;drc=04a9f36f1551524fb2494bf2429de20d2c1f337e

                  (If it's acceptable to send with a potentially inaccurate storage partition, maybe the current one is fine)

                  hiroshige@ suggested it, but I think we should not skip non-default storage partitions since a user could have multiple profiles (work, private etc).

                  Related details

                  Attention is currently required from:
                  • Hiroshige Hayashizaki
                  • Kenichi Ishibashi
                  Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement is not satisfiedCode-Owners
                  • requirement satisfiedCode-Review
                  • requirement is not satisfiedNo-Unresolved-Comments
                  • requirement satisfiedReview-Enforcement
                  Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                  Gerrit-MessageType: comment
                  Gerrit-Project: chromium/src
                  Gerrit-Branch: main
                  Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
                  Gerrit-Change-Number: 8029002
                  Gerrit-PatchSet: 10
                  Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
                  Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
                  Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
                  Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Comment-Date: Thu, 09 Jul 2026 00:06:13 +0000
                  Gerrit-HasComments: Yes
                  Gerrit-Has-Labels: No
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy

                  Hiroshige Hayashizaki (Gerrit)

                  unread,
                  Jul 8, 2026, 9:44:41 PM (7 hours ago) Jul 8
                  to Kenichi Ishibashi, Takashi Toyoshima, Rakina Zata Amni, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, twifka...@chromium.org, hayato...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
                  Attention needed from Kenichi Ishibashi

                  Hiroshige Hayashizaki added 3 comments

                  File content/browser/loader/navigation_fast_fetch.cc
                  Line 97, Patchset 7:NavigationFastFetch::CalculateEligibilityReason(NavigationRequest& request) {
                  Hiroshige Hayashizaki . resolved

                  [Not blocking this CL] It's helpful if we add comments why we require these conditions.

                  I also feel it's helpful to roughly categorize the checks by their reasons (not sure if we can clearly categorize though), e.g.

                  • Because a `NavigationThrottle` checks the condition.
                  • Because the navigation is less likely to issue a network request. (kHistory, SW)
                  • Because Prefetch code checks the condition.
                  • Because we intentionally scope this feature. (e.g. requiring HTTPS as a general custom for new features? or just due to higher complexity/ambiguity like DevTools?)
                  Kenichi Ishibashi

                  The histogram has "experimental" in its name, indicating that these conditions and priorities can change in the future. I would like to prioritize flexibility over fixing them in detail through comments.

                  Hiroshige Hayashizaki

                  sg.

                  Line 121, Patchset 7: request.frame_tree_node()->current_frame_host()->GetSiteInstance());
                  Hiroshige Hayashizaki . unresolved

                  Can we also consider a request ineligible if `storage_partition` isn't the `BrowserContext`'s default `StoragePartition`?

                  So, this check should be split into two tests:

                  • StoragePartition check: the navigation target's StoragePartition should be the default StoragePartition.
                  • SW check: The default StoragePartition's SWContext doesn't have SW for the URL.

                  This is also to avoid the confusion e.g. "which StorageParition should/did we test?". Sticking more into the default StoragePartition will avoid such confusion.

                  Kenichi Ishibashi

                  Would you elaborate on why we limit to the default StoragePartition? I can imagine a scenario where the user has multiple profiles (private, work).

                  Hiroshige Hayashizaki

                  Because the current Prefetch implementation is bound to the default StoragePartition.
                  We can design the non-default-StoragePartition support for Nav Fast Fetch feature separately, but I think it's better to start with sticking to the default StorageParition for Nav Fast Fetch as well (so that we can experiment with Prefetch-backed prototype), and consider non-default-StorageParition support separately if the metrics here suggests it's quite useful.

                  Line 131, Patchset 7: // TODO(crbug.com/529425553): Check if there is on-going prefetch.
                  Hiroshige Hayashizaki . resolved

                  As chatted offline, probably we shouldn't check this and just rely on Prefetch layer to merge/dedup if such ongoing prefetch exists.

                  Kenichi Ishibashi

                  +1 for now. I put this TODO since this eligibility check may be used for actual navigation fast fetching logic in the future.

                  Hiroshige Hayashizaki

                  Just to check: IIUC "actual navigation fast fetching logic in the future" is the longer-term implementation after Prefetch-backed experimental implementation. Am I understanding correctly?

                  Open in Gerrit

                  Related details

                  Attention is currently required from:
                  • Kenichi Ishibashi
                  Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement is not satisfiedCode-Owners
                  • requirement satisfiedCode-Review
                  • requirement is not satisfiedNo-Unresolved-Comments
                  • requirement satisfiedReview-Enforcement
                  Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                  Gerrit-MessageType: comment
                  Gerrit-Project: chromium/src
                  Gerrit-Branch: main
                  Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
                  Gerrit-Change-Number: 8029002
                  Gerrit-PatchSet: 10
                  Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
                  Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
                  Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
                  Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Comment-Date: Thu, 09 Jul 2026 01:44:10 +0000
                  Gerrit-HasComments: Yes
                  Gerrit-Has-Labels: No
                  Comment-In-Reply-To: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Comment-In-Reply-To: Kenichi Ishibashi <ba...@chromium.org>
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy

                  Hiroshige Hayashizaki (Gerrit)

                  unread,
                  Jul 8, 2026, 9:52:28 PM (7 hours ago) Jul 8
                  to Kenichi Ishibashi, Takashi Toyoshima, Rakina Zata Amni, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, twifka...@chromium.org, hayato...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
                  Attention needed from Kenichi Ishibashi

                  Hiroshige Hayashizaki added 2 comments

                  File content/browser/renderer_host/navigation_request.cc
                  Line 13076, Patchset 10 (Latest):bool NavigationRequest::HasPrefetchedSignedExchange() const {
                  Hiroshige Hayashizaki . unresolved

                  I perfer making this NavFastFetch-only by adding `CHECK(base::FeatureList::IsEnabled(features::kNavigationFastFetchDryRun))`, renaming to e.g. `HasPrefetchedSignedExchangeForNavigationFastFetch()`, as I suspect perhaps this isn't the source of truth.

                  Not sure though as I'm not an owner of signed exchange -- I WOULD be much more confident if we'd add similar code for Navigational Prefetch Cache.

                  File content/common/features.cc
                  Line 557, Patchset 10 (Latest):// Controls the histogram recordings of the Navigation Fast Fetch feature.
                  Hiroshige Hayashizaki . unresolved

                  This is inserted in the middle of `kNavigationThrottleRunner2`, so should be moved before Line 555.

                  Gerrit-Comment-Date: Thu, 09 Jul 2026 01:51:57 +0000
                  Gerrit-HasComments: Yes
                  Gerrit-Has-Labels: No
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy

                  Kenichi Ishibashi (Gerrit)

                  unread,
                  Jul 8, 2026, 10:41:11 PM (6 hours ago) Jul 8
                  to Takashi Toyoshima, Hiroshige Hayashizaki, Rakina Zata Amni, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, twifka...@chromium.org, hayato...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
                  Attention needed from Hiroshige Hayashizaki and Rakina Zata Amni

                  Kenichi Ishibashi added 4 comments

                  Patchset-level comments
                  Kenichi Ishibashi . resolved

                  Thank you all for reviews and feedback.

                  File content/browser/loader/navigation_fast_fetch.cc
                  Line 120, Patchset 7: request.GetWebContents()->GetBrowserContext()->GetStoragePartition(
                  Rakina Zata Amni . unresolved

                  Instead of using the SiteInstance for the current RFH, would it be more accurate to check `request.GetBrowserContext()->GetStoragePartitionForUrl(request.GetURL(), ...)`)?

                  Kenichi Ishibashi

                  IIUC GetStoragePartitionForUrl() is deprecated.

                  Rakina Zata Amni

                  oh right, nevermind then. I guess you can use `GetStoragePartitionWithCurrentSiteInfo()` here which would be doing the same not-so-accurate thing here but at least you don't need to do it manually? Also I think you mentioned about skipping non-default storage partition cases, where is that checked? Maybe you can update the eligibility check at the end / at commit / failure when you would already have that information?

                  Kenichi Ishibashi

                  From my code reading, we can't rely on GetStoragePartitionWithCurrentSiteInfo () at this point because NavigationRequest initializes `site_info_` via `explicit SiteInfo(BrowserContext* browser_context)`, which creates an empty site info.

                  NavigationRequest updates `site_info_` later in NavigationRequest::StartNavigation using GetSiteInfoForCommonParamsURL().

                  Also I think you mentioned about skipping non-default storage partition cases...

                  hiroshige@ suggested it, but I think we should not skip non-default storage partitions since a user could have multiple profiles (work, private etc).

                  Maybe you can update the eligibility check at the end / at commit / failure when you would already have that information?

                  The key question here is whether we can determine if a navigation is fast fetch eligible right when the NavigationRequest is created. The goal of this CL is to add a histogram to answer that, so pushing the eligibility check to a later stage would not help.

                  Rakina Zata Amni

                  oh, right, it looks like `GetStoragePartitionWithCurrentSiteInfo()` would always go to the default storage partition in this case. Meanwhile yours would always result in the current RFH's storage partition. Neither are guaranteed to be the same as the target URL's storage partition.

                  How much does it matter if you do the early network request with the wrong storage partition? (Will you be sending it with the wrong cookies?)
                  If it's potentially problematic, I wonder if we can use a combination of these to determine the target URL's storage partition more accurately, which I think doesn't require SiteInfo?
                  https://source.chromium.org/chromium/chromium/src/+/main:content/browser/site_info.cc;l=337;drc=04a9f36f1551524fb2494bf2429de20d2c1f337e
                  https://source.chromium.org/chromium/chromium/src/+/main:content/browser/renderer_host/navigation_request.cc;l=4650;drc=04a9f36f1551524fb2494bf2429de20d2c1f337e

                  (If it's acceptable to send with a potentially inaccurate storage partition, maybe the current one is fine)

                  hiroshige@ suggested it, but I think we should not skip non-default storage partitions since a user could have multiple profiles (work, private etc).

                  ah ok, maybe this part of the doc should be updated https://docs.google.com/document/d/1tmqth2B6GmKgfBQzLvvTYB0duvj6CaLKPMuJ8s9GTto/edit?resourcekey=0-OXUvn4V3kpi0wQcNl26JZw&disco=AAAB9NHl1jk

                  Kenichi Ishibashi

                  `GetStoragePartitionConfigForUrl()` seems also discouraged to use [1].

                  (I may be wrong, but to my knowledge) Since we plan to trigger only on the outermost top-level frame navigation, I don't think it will use the wrong StoragePartition? AI analysis said that cross-storage-partition navigation only happens:

                  • <webview> tag -> normal navigation
                  • Isolated Web Apps

                  At least, currently we only records histograms so there is no real concerns for now (yes, we should be careful when we add behavior changes).

                  Updated the 1-pager to align with this CL. Thank you for pointing this out.

                  [1] https://source.chromium.org/chromium/chromium/src/+/main:content/browser/site_info.h;l=129;drc=04a9f36f1551524fb2494bf2429de20d2c1f337e

                  Line 121, Patchset 7: request.frame_tree_node()->current_frame_host()->GetSiteInstance());
                  Hiroshige Hayashizaki . unresolved

                  Can we also consider a request ineligible if `storage_partition` isn't the `BrowserContext`'s default `StoragePartition`?

                  So, this check should be split into two tests:

                  • StoragePartition check: the navigation target's StoragePartition should be the default StoragePartition.
                  • SW check: The default StoragePartition's SWContext doesn't have SW for the URL.

                  This is also to avoid the confusion e.g. "which StorageParition should/did we test?". Sticking more into the default StoragePartition will avoid such confusion.

                  Kenichi Ishibashi

                  Would you elaborate on why we limit to the default StoragePartition? I can imagine a scenario where the user has multiple profiles (private, work).

                  Hiroshige Hayashizaki

                  Because the current Prefetch implementation is bound to the default StoragePartition.
                  We can design the non-default-StoragePartition support for Nav Fast Fetch feature separately, but I think it's better to start with sticking to the default StorageParition for Nav Fast Fetch as well (so that we can experiment with Prefetch-backed prototype), and consider non-default-StorageParition support separately if the metrics here suggests it's quite useful.

                  Kenichi Ishibashi

                  I see, my stance is: "We can design the non-default-StoragePartition support for Nav Fast Fetch feature separately". Unless there is a clear advantage to limiting it to only the default storage partition, I'd like to proceed in this direction. What do you think?

                  Line 131, Patchset 7: // TODO(crbug.com/529425553): Check if there is on-going prefetch.
                  Hiroshige Hayashizaki . resolved

                  As chatted offline, probably we shouldn't check this and just rely on Prefetch layer to merge/dedup if such ongoing prefetch exists.

                  Kenichi Ishibashi

                  +1 for now. I put this TODO since this eligibility check may be used for actual navigation fast fetching logic in the future.

                  Hiroshige Hayashizaki

                  Just to check: IIUC "actual navigation fast fetching logic in the future" is the longer-term implementation after Prefetch-backed experimental implementation. Am I understanding correctly?

                  Kenichi Ishibashi

                  Yes, that's the plan (though we may revisit the approach based on omnibox on-enter prefetch results).

                  Open in Gerrit

                  Related details

                  Attention is currently required from:
                  • Hiroshige Hayashizaki
                  • Rakina Zata Amni
                  Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement is not satisfiedCode-Owners
                  • requirement satisfiedCode-Review
                  • requirement is not satisfiedNo-Unresolved-Comments
                  • requirement satisfiedReview-Enforcement
                  Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                  Gerrit-MessageType: comment
                  Gerrit-Project: chromium/src
                  Gerrit-Branch: main
                  Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
                  Gerrit-Change-Number: 8029002
                  Gerrit-PatchSet: 10
                  Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
                  Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
                  Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
                  Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Rakina Zata Amni <rak...@chromium.org>
                  Gerrit-Comment-Date: Thu, 09 Jul 2026 02:40:44 +0000
                  Gerrit-HasComments: Yes
                  Gerrit-Has-Labels: No
                  Comment-In-Reply-To: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Comment-In-Reply-To: Kenichi Ishibashi <ba...@chromium.org>
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy

                  Rakina Zata Amni (Gerrit)

                  unread,
                  3:13 AM (1 hour ago) 3:13 AM
                  to Kenichi Ishibashi, Takashi Toyoshima, Hiroshige Hayashizaki, Chromium LUCI CQ, android-bu...@system.gserviceaccount.com, Chromium Metrics Reviews, chromium...@chromium.org, twifka...@chromium.org, hayato...@chromium.org, alexmo...@chromium.org, asvitkine...@chromium.org, creis...@chromium.org, loading...@chromium.org, navigation...@chromium.org
                  Attention needed from Hiroshige Hayashizaki and Kenichi Ishibashi

                  Rakina Zata Amni added 1 comment

                  File content/browser/loader/navigation_fast_fetch.cc
                  Rakina Zata Amni

                  GetStoragePartitionConfigForUrl() seems also discouraged to use [1].

                  Yeah it is discouraged if you have the SiteInfo, but currently we don't (interestingly it refers to the deprecated function as an alternative too). I think that's what the SiteInfo will use to if it doesn't hit this case earlier when creating its UrlInfoInit: https://source.chromium.org/chromium/chromium/src/+/main:content/browser/renderer_host/navigation_request.cc;l=4650;drc=04a9f36f1551524fb2494bf2429de20d2c1f337e

                  So I think it's ok to follow those two handling to be more accurate, something like

                  ```
                  SiteInstanceImpl* current_instance =
                  frame_tree_node_->current_frame_host()->GetSiteInstance();
                  if (current_instance->IsFixedStoragePartition()) {
                  storage_partition_config = (
                  current_instance->GetSecurityPrincipal().GetStoragePartitionConfig());
                  } else {
                  storage_partition_config =
                  GetStoragePartitionConfigForUrl(browser_context, site_url);
                  }
                  // get storage partition from the config

                  ```

                  We can navigate to / from IWA on top level frames that changes StoragePartition, and I think it might matter for Chrome Apps / WebUI too. Consulting AI says you can use the wrong cookies and miss cache entries and maybe other privacy concerns. We are just collecting data right now so those are not a concern yet, but we can get more accurate data with the above handling I think.

                  Open in Gerrit

                  Related details

                  Attention is currently required from:
                  • Hiroshige Hayashizaki
                  • Kenichi Ishibashi
                  Submit Requirements:
                  • requirement satisfiedCode-Coverage
                  • requirement is not satisfiedCode-Owners
                  • requirement satisfiedCode-Review
                  • requirement is not satisfiedNo-Unresolved-Comments
                  • requirement satisfiedReview-Enforcement
                  Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
                  Gerrit-MessageType: comment
                  Gerrit-Project: chromium/src
                  Gerrit-Branch: main
                  Gerrit-Change-Id: I80de2c177a7eecefac1f93d0b27cfba1a78e8e89
                  Gerrit-Change-Number: 8029002
                  Gerrit-PatchSet: 10
                  Gerrit-Owner: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Reviewer: Rakina Zata Amni <rak...@chromium.org>
                  Gerrit-Reviewer: Takashi Toyoshima <toyo...@chromium.org>
                  Gerrit-CC: Chromium Metrics Reviews <chromium-met...@google.com>
                  Gerrit-CC: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Hiroshige Hayashizaki <hiro...@chromium.org>
                  Gerrit-Attention: Kenichi Ishibashi <ba...@chromium.org>
                  Gerrit-Comment-Date: Thu, 09 Jul 2026 07:12:56 +0000
                  Gerrit-HasComments: Yes
                  Gerrit-Has-Labels: No
                  satisfied_requirement
                  unsatisfied_requirement
                  open
                  diffy
                  Reply all
                  Reply to author
                  Forward
                  0 new messages