Prerender: Restructure cancellation of PrerenderHost

This is a prerequisite CL for implementing the logic of cancellation
during activation.

> Short summary

This CL...

- renames PrerenderHostRegistry::AbandonHost() to CancelHost().
- renames PrerenderHostRegistry::AbandonReservedHost() to
  OnActivationFinished().
- introduces PrerenderHostRegistry::OnTriggerDestroyed().

> Details

Cancellation of prerendering can be requested from various entities:
pages triggering prerender, pages being prerendered, and pages
activating prerendered pages. They should handle cancellation in
different ways:

A: Pages triggering prerender cancel non-reserved hosts but don't cancel
   reserved hosts. This is because cancellation from the pages should
   not be critical (e.g., removal of <script type="speculationrules">),
   and should continue the ongoing activation.
B: Pages being prerendered cancel both non-reserved and reserved hosts.
   If it's reserved, they should start fallback navigation. This is
   because cancellation from the pages should basically be critical
   (e.g., use of disallowed features in prerendered pages) and should
   not continue the ongoing activation.
C: Pages activating prerenderd pages cancel the host reserved by itself
   and start fallback navigation. It's obvious that this case should not
   continue the activation.

In addition to the above,

D: NavigationRequest for activation removes the reserved host on its
   destructor. Unlike (C), this case should not start fallback
   navigation because this happens after cancellation or completion of
   the activation.

Before this CL, PrerenderHostRegistry's APIs were divided based on
whether the host is reserved or not, that is, AbandonHost() and
AbandonReservedHost(). This required the callers to know if the host is
reserved beforehand. This made it difficult to use the APIs.

To simplify the APIs, this CL restructures them as follows:

- For now, only PrerenderProcessor::CancelPrerendering() takes (A), so
  this CL introduces PrerenderHostRegistry::OnTriggerDestroyed() that is
  specialized for that. The API only cancels non-reserved hosts.
- (B) and (C) are almost the same. These should be handled by one API so
  that the callers no longer have to manage the state of the host. This
  CL renames AbandonHost() to CancelHost() and restructures it for them.
- Regarding (D), this CL renames AbandonReservedHost() to
  OnActivationFinished() and specializes it for (D).

Bug: 1169594, 1195751
Change-Id: I8dfdd27279fddd5c69bbbd1392863d814655a5c5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2942531
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: Matt Falkenhagen <falken@chromium.org>
Reviewed-by: Lingqi Chi <lingqi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#890117}
11 files changed
tree: 16d7e449d8a5c519c555d4f4c38faac58bd86716
  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.