Use COOP: unsafe-none for error pages

At the moment, error pages keep the Cross Origin Opener Policy of the
previous page (or of the last redirect response in case of a
redirect). This causes a number of bugs (see list attached).

There was a previous CL trying to address this:
https://crrev.com/c/2859165 by defaulting the error page to COOP:
unsafe-none. However, that was abandoned because it would have caused
the opener relationship to be severed in case a page with "COOP:
same-origin" opens a same-origin popup with the same COOP which ends
up in a network error and then reloads.

However, I think that is the expected behaviour no matter what.
Undependently of COOP, the error page will be cross-origin w.r.t. the
opener, so the opener relationship should be severed (but apparently
we were not doing that).

This CL defaults error pages to "COOP: unsafe-none" and runs the COOP
algorithms for error pages with their unique opaque origin. This
ensures that error pages are isolated, avoiding bugs as
https://crbug.com/1226909. Moreover, this should prevent the crash
https://crbug.com/1210622, since now process allocation and COOP
enforcement are computed with the same input, so they should give
consistent results. Finally, I believe this should also address
https://crbug.com/1205883.

Change-Id: Iede44839edb98586b3d51d345517f58efec10be7
Bug: 1226909,1210622,1205883
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3024337
Commit-Queue: Antonio Sartori <antoniosartori@chromium.org>
Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org>
Reviewed-by: Arthur Sonzogni <arthursonzogni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#901982}
3 files changed
tree: 23c7f838e53c8345aa327aa3bdcfb8f6cec1f5c2
  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.