Browser process implementation of navigation confidence

To enable developers to discern if the navigation timings are
representative for their web application, the change adds a new
‘confidence’ field to the PerformanceNavigationTiming struct. The
confidence field should not be populated until the confidence value is
finalized.

The renderer host will be responsible for finalizing the confidence
value, applying the local randomized response algorithm, and then
sending that information to the renderer process when the underlying document is interactive.

To accomplish that, there are a few changes that need to be made:

1) Add confidence field to DocumentAssociatedData. The confidence
   field lifetime should match the lifetime of the blink::Document
   class. This value is updated by RenderFrameHostImpl as part of
   committing the navigation.
2) Add confidence field to NavigationRequest. The confidence field is
   set in the constructor. The value is used by RenderFrameHostImpl
   to set the confidence value in the DocumentAssociatedData.

The render will notify the RenderFrameHostImpl that the document
is now interactive (which occurs after the responseEnd mark is set),
and the RenderFrameHostImpl will then push down the noisy confidence
value into the renderer process.


Explainer:
https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/PerformanceNavigationTiming%20for%20User%20Agent%20Launch/explainer.md
Chrome Status: https://chromestatus.com/feature/5186950448283648
Dev Design:
https://docs.google.com/document/d/1D6DqptsCEd3wPRsZ0q1iwVBAXXmhxZuLV-KKFI0ptCg/edit?usp=sharing
I2P:
https://groups.google.com/a/chromium.org/g/blink-dev/c/o0F7nBKsgg0/m/bJSp3ekfAAAJ
W3C Issue: https://github.com/w3c/navigation-timing/issues/202

Manual testing steps:

1) Start the browser with these command line parameters:
--enable-features=PerformanceNavigationTimingConfidence
https://example.com 2) Open the developer tools, and switch to the
Console tool. 3) Run
"window.performance.getEntriesByType('navigation')[0].confidence" into
the console, and you should see both a confidence value, and a
randomizedTriggerRate.

Bug: 1413848
Change-Id: I300357ab8198a43f97b922c4b9f2d0e819dba7fc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5905939
Reviewed-by: Rakina Zata Amni <rakina@chromium.org>
Commit-Queue: Mike Jackson <mjackson@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1415930}
11 files changed
tree: b9dd44e63d77319ac45ea7509c189d7fa9cd80b0
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. crypto/
  16. dbus/
  17. device/
  18. docs/
  19. extensions/
  20. fuchsia_web/
  21. gin/
  22. google_apis/
  23. gpu/
  24. headless/
  25. infra/
  26. ios/
  27. ipc/
  28. media/
  29. mojo/
  30. native_client_sdk/
  31. net/
  32. pdf/
  33. ppapi/
  34. printing/
  35. remoting/
  36. rlz/
  37. sandbox/
  38. services/
  39. skia/
  40. sql/
  41. storage/
  42. styleguide/
  43. testing/
  44. third_party/
  45. tools/
  46. ui/
  47. url/
  48. webkit/
  49. .clang-format
  50. .clang-tidy
  51. .clangd
  52. .git-blame-ignore-revs
  53. .gitallowed
  54. .gitattributes
  55. .gitignore
  56. .gitmodules
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. ATL_OWNERS
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. CPPLINT.cfg
  68. CRYPTO_OWNERS
  69. DEPS
  70. DIR_METADATA
  71. LICENSE
  72. LICENSE.chromium_os
  73. OWNERS
  74. PRESUBMIT.py
  75. PRESUBMIT_test.py
  76. PRESUBMIT_test_mocks.py
  77. README.md
  78. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure.

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.