Implement HTTPS transaction timeouts

Changes made:
* Expanded DnsTask::transactions_started_ to also keep the DnsQueryType
  rather than just the raw qtype currently stored (inside the
  DnsTransaction). Allows more logic to differentiate between HTTPS and
  EXPERIMENTAL_HTTPS.
* Expanded/renamed the experimental query timeout logic to use timeout
  values from the new HTTPS timeout params when an HTTPS transaction
  remains after completion of all address transactions. But does not
  set any timeout if in a case with enabled params where the timeout
  would be considered a fatal failure.
* Made it so the timeout logic could be applied even if the HTTPS
  transaction is still queued and not yet started. Just defensive
  coding against potential future changes and avoiding adding in too
  many hidden assumptions. Not actually currently possible because,
  even if concurrent Jobs are constrained enough that not all
  transactions were immediately started, the HTTPS transaction would
  have been started to fill the spot of the completed address
  transaction, just before checking if a timeout timer should be set.
* As a simplification, timeout logic no longer keeps track of which DoH
  provider is timing out.  Was only ever used for metrics, and is no
  longer important now that we know all the recognized providers can
  return results without unexpected timeouts.
* Updated features.h to document that timeouts are not used when the
  request is fatal.  And while there, correct the comment to state that
  it affects transactions, not individual queries.

Bug: 1225776
Change-Id: I9b7584bb4b7d23b81b8b9e0ce2771c25b39bb5c7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3072999
Commit-Queue: Eric Orth <ericorth@chromium.org>
Reviewed-by: David Benjamin <davidben@chromium.org>
Cr-Commit-Position: refs/heads/main@{#916079}
3 files changed
tree: ae04c028dabcfa3b29c5aabea54097e3c96a69cc
  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. codelabs/
  14. components/
  15. content/
  16. courgette/
  17. crypto/
  18. dbus/
  19. device/
  20. docs/
  21. extensions/
  22. fuchsia/
  23. gin/
  24. google_apis/
  25. google_update/
  26. gpu/
  27. headless/
  28. infra/
  29. ios/
  30. ipc/
  31. jingle/
  32. media/
  33. mojo/
  34. native_client_sdk/
  35. net/
  36. pdf/
  37. ppapi/
  38. printing/
  39. remoting/
  40. rlz/
  41. sandbox/
  42. services/
  43. skia/
  44. sql/
  45. storage/
  46. styleguide/
  47. testing/
  48. third_party/
  49. tools/
  50. ui/
  51. url/
  52. weblayer/
  53. .clang-format
  54. .clang-tidy
  55. .eslintrc.js
  56. .git-blame-ignore-revs
  57. .gitattributes
  58. .gitignore
  59. .gn
  60. .mailmap
  61. .vpython
  62. .vpython3
  63. .yapfignore
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. DEPS
  69. DIR_METADATA
  70. ENG_REVIEW_OWNERS
  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.