Default typed omnibox navigations to HTTPS: Initial implementation

Presently, when a user types a domain name in the omnibox such as
"example.com", Chrome navigations to the HTTP version of the site
(http://example.com). However, the web is increasingly moving towards
HTTPS, and we now want to optimize omnibox navigations and first-load
performance for HTTPS, rather than HTTP.

This CL implements an initial version of defaulting typed omnibox
navigations to HTTPS. In particular, the CL:
- Modifies omnibox and autocomplete code to use HTTPS as the default
  scheme for navigations. We call these "upgraded HTTPS navigations".
- Observes upgraded HTTPS navigations until completion and falls back
  to the HTTP version of the URL if the HTTPS load fails. It does this
  by introducing a new navigation throttle called
  TypedNavigationUpgradeThrottle.
 - Ignores SSL errrs in SSLErrorNavigationThrottle if the navigation was
  an HTTPS upgrade in order to prevent displaying spurious SSL
  interstitials.

Most of the files touched by the CL have plumbing changes: The
navigation throttle needs to know whether the navigation was upgraded,
so this information is provided by the omnibox via
is_using_https_as_default_scheme bit and stored inside the UIData of the
navigation handle.

This is a minimal implementation and is not ready for general usage.
Future CLs are going to observe upgraded HTTPS navigations for several
seconds instead and cancel the load when necessary, instead of
indefinitely waiting for HTTPS loads to succeed. This CL also lacks many
quality of life improvements such as remembering which URLs fell back to
HTTP. These will also be added in future CLs.

Bug: 1141691
Change-Id: Ie78a34bfa51fc995e9834d491ea43b7cac17598c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2568448
Commit-Queue: Mustafa Emre Acer <meacer@chromium.org>
Reviewed-by: Clark DuVall <cduvall@chromium.org>
Reviewed-by: Justin Donnelly <jdonnelly@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Reviewed-by: Peter Kasting <pkasting@chromium.org>
Reviewed-by: Emily Stark <estark@chromium.org>
Reviewed-by: Chris Thompson <cthomp@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840253}
43 files changed
tree: 4ede5237ef28309463008c3497037c85e74c889c
  1. .clang-format
  2. .clang-tidy
  3. .eslintrc.js
  4. .git-blame-ignore-revs
  5. .gitattributes
  6. .gitignore
  7. .gn
  8. .vpython
  9. .vpython3
  10. .yapfignore
  11. AUTHORS
  12. BUILD.gn
  13. CODE_OF_CONDUCT.md
  14. DEPS
  15. DIR_METADATA
  16. ENG_REVIEW_OWNERS
  17. LICENSE
  18. LICENSE.chromium_os
  19. OWNERS
  20. PRESUBMIT.py
  21. PRESUBMIT_test.py
  22. PRESUBMIT_test_mocks.py
  23. README.md
  24. WATCHLISTS
  25. android_webview/
  26. apps/
  27. ash/
  28. base/
  29. build/
  30. build_overrides/
  31. buildtools/
  32. cc/
  33. chrome/
  34. chromecast/
  35. chromeos/
  36. cloud_print/
  37. codelabs/
  38. codereview.settings
  39. components/
  40. content/
  41. courgette/
  42. crypto/
  43. dbus/
  44. device/
  45. docs/
  46. extensions/
  47. fuchsia/
  48. gin/
  49. google_apis/
  50. google_update/
  51. gpu/
  52. headless/
  53. infra/
  54. ios/
  55. ipc/
  56. jingle/
  57. media/
  58. mojo/
  59. native_client_sdk/
  60. net/
  61. pdf/
  62. ppapi/
  63. printing/
  64. remoting/
  65. rlz/
  66. sandbox/
  67. services/
  68. skia/
  69. sql/
  70. storage/
  71. styleguide/
  72. testing/
  73. third_party/
  74. tools/
  75. ui/
  76. url/
  77. weblayer/
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.