[Extensions] Move frame registration to document commit time

Based on nasko@'s CL at
https://chromium-review.googlesource.com/c/chromium/src/+/5525999

When a navigation requires a new RenderFrameHost to be created for it,
the RenderFrameCreated observer method is called earlier in the
navigation process. There is potentially state that is incorrect at that
time, for example the SiteInstance for the navigation. When initializing
state related to the new document, a better point in time to do so is
the ReadyToCommitNavigation point in the timeline.

This CL moves the extensions WebContents observer code to use the
ReadyToCommit signal and does so behind a flag to ensure we can quickly
revert in case of regressions.

This also required a number of test updates, including:
* Properly waiting for a background page when installing an extension.
  Previously, we relied on the extension background page being
  registered in the process manager by the time the extension was added,
  which wasn't really guaranteed, but happened because we registered it
  earlier.
* Updating a BackgroundContents test to also wait for a hosted app's
  background contents to fully initialize.
* Updating a NaCl test to keep an extension background page alive long
  enough for a tab to load (which then keeps it alive indefinitely).

Bug: 334991035
Change-Id: Icc858c5c3b35970a4ead322c94f79c0f955afe46
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6005549
Reviewed-by: Nasko Oskov <nasko@chromium.org>
Commit-Queue: Devlin Cronin <rdevlin.cronin@chromium.org>
Reviewed-by: Ahmed Fakhry <afakhry@chromium.org>
Reviewed-by: Derek Schuff <dschuff@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1381961}
9 files changed
tree: b4afbfe9fa7fbfb621aa596aae82f68ba7854538
  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.