Reconcile treating port=0 as valid across GURL and url::SchemeHostPort.

Before this CL:

*) GURL port_zero("http://example.com:0") would be
   considered a valid URL (in conformance with
   https://url.spec.whatwg.org/#port-state which allows port 0).
*) SchemeHostPort constructed out of such GURL would be considered
   invalid.
*) The inconsistency between GURL and SchemeHostPort would lead to
   bizarre results such as
       url::Origin::Resolve(url=http://foo.com:0,
                            base_origin=http://bar.com)
   returning an opaque origin with a precursor origin set
   to http://bar.com.  This in turn would lead to browser process
   crashes via CHECK(...CanAccessDataForOrigin...).

After this CL:

*) SchemeHostPort allows port=0
*) url::Origin::Resolve works as expected (verified by a new unit test)
*) No browser-process crashes (verified by a new browser test)

Also after this CL:

*) Navigating to port=0 still doesn't quite work, because Blink treats
  this as an invalid port (in KURL and SecurityOrigin) which results in
  the port round-tripping to the browser in DidCommitProvisionalLoad IPC
  as port=80 (and the mismatch leads to a renderer kill).

Bug: 1065532
Change-Id: I719fcfb0a027187805c3766d5e4b0365553067f0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2128829
Reviewed-by: Nasko Oskov <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Reviewed-by: Peter Kasting <[email protected]>
Commit-Queue: Ɓukasz Anforowicz <[email protected]>
Cr-Commit-Position: refs/heads/master@{#758574}
7 files changed
tree: 3c2640777cdce303adbd492074965753623b4904
  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
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. ENG_REVIEW_OWNERS
  68. LICENSE
  69. LICENSE.chromium_os
  70. OWNERS
  71. PRESUBMIT.py
  72. PRESUBMIT_test.py
  73. PRESUBMIT_test_mocks.py
  74. README.md
  75. 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.

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.