Allow one form to navigate multiple frames consecutively

This patch allows one form to navigate two different frames by moving
all state associated with the form submission which occurs after the
async step as described in [1] from the form element and the
form element's document to the target frame being navigated.
Despite the spec saying that the task should be stored in the form
element, firefox and safari are both able to navigate multiple frames
like this. I plan to follow this up with a spec issue.

This organization of state reflect what we used to have with
NavigationScheduler [2], which was a member of LocalFrame.

I decided to use Frame instead of LocalFrame so that we can have the
same semantics for form submission regardless of whether we are
submitting to a LocalFrame or a RemoteFrame. The effects are observable
in this wpt: [3]

This patch disables some double-submit tests. These double-submit tests
were added to cover, however, they do so by
targeting different frames. This is not the behavior sites which
reported the bug had, and the bug will not reproduce with this patch.
This patch basically gets us back to the behavior we had before the
patch which caused that bug.
Any site which relied on the exact behavior in the test would have only
been able to do so since, which was landed 7
months ago. I plan to follow up and try to get the test passing again in
this bug:


(cherry picked from commit e711e05bf363308236aaf55d924776dff3d8d141)

Bug: 1085097, 1047489
Change-Id: I1a212e52ef95449c5a0527d5530efaa49d384037
Commit-Queue: Joey Arhar <>
Reviewed-by: Mason Freed <>
Reviewed-by: Nate Chapin <>
Reviewed-by: Kent Tamura <>
Cr-Original-Commit-Position: refs/heads/master@{#772785}
Reviewed-by: Ben Mason <>
Reviewed-by: Joey Arhar <>
Cr-Commit-Position: refs/branch-heads/4103@{#654}
Cr-Branched-From: 8ad47e8d21f6866e4a37f47d83a860d41debf514-refs/heads/master@{#756066}
14 files changed
tree: 2bff17d2d6575da5659aa3c7755902ddd17bf2f2
  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. cloud_print/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. jingle/
  31. media/
  32. mojo/
  33. native_client_sdk/
  34. net/
  35. pdf/
  36. ppapi/
  37. printing/
  38. remoting/
  39. rlz/
  40. sandbox/
  41. services/
  42. skia/
  43. sql/
  44. storage/
  45. styleguide/
  46. testing/
  47. third_party/
  48. tools/
  49. ui/
  50. url/
  51. weblayer/
  52. .clang-format
  53. .clang-tidy
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitattributes
  57. .gitignore
  58. .gn
  59. .vpython
  60. .vpython3
  61. .yapfignore
  65. codereview.settings
  66. DEPS
  69. LICENSE.chromium_os
  70. OWNERS

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

Documentation in the source is rooted in docs/

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.