Fix pre-fetched CCTs that redirect to apps

https://chromium-review.googlesource.com/c/chromium/src/+/3780380 broke
pre-fetched (mayLaunchUrl API) CCTs that redirect to apps upon getting
shown to the user.

An example of this is login redirects that go through the browser - if
the user is already signed in on the web, then the site will redirect
when the CCT gets shown. However, when the CCT was preloaded Chrome
erroneously treats this as a browser-initiated navigation, so the
change to block browser-initiated navigations from leaving Chrome
mistakenly blocked this as well.

I also had to fix a bug around CCT closing very early on during
startup. Chrome shows the Activity Tab when the Activity is shown, but
with pre-fetched CCTs the tab may not yet be attached to a tab model
(and also not actually visible yet), so when the page redirects to an
app upon being shown we try to close the tab and end up crashing as
the tab isn't connected to a TabModel yet.

I put the change to CCT showing behind a kill-switch just in case
things unexpectedly break.

Bug: 1383509
Change-Id: I780c99cf812c2566a31681e65aa678994279bfcb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4023887
Reviewed-by: Yaron Friedman <yfriedman@chromium.org>
Reviewed-by: Ella Ge <eirage@chromium.org>
Commit-Queue: Michael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1071270}
10 files changed
tree: 03cb1890bc34d4b7db4aaffdc98c8113b58e4730
  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. codelabs/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. weblayer/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. DIR_METADATA
  68. ENG_REVIEW_OWNERS
  69. LICENSE
  70. LICENSE.chromium_os
  71. OWNERS
  72. PRESUBMIT.py
  73. PRESUBMIT_test.py
  74. PRESUBMIT_test_mocks.py
  75. README.md
  76. 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.