Remove web-test-specific code for focusing.

Drops the SetFocusAndActivate() test code from RenderViewImpl and the
plumbing over to it. Instead, pretend to receive the focus/activate
IPCs that the browser sends in production.

window.focus() on another window goes through the browser process in
production, but had a synchronous override in web tests, that allowed
tests to pass even though we should need to wait to see the focus occur
asynchronously in chrome.

It also denies the request unless there is a user action present, but in
web tests we dropped that requirement. This CL removes the web test
override there, and adds user gestures to the tests that are performing
a window.focus() on another window.

Drop the focus of the main frame when navigating to about:blank between
tests. The browser already sends a Focus() IPC to the main frame of the
about:blank at the start of a test. This was causing the test windows to
lie about being focused - they would all claim to be focused! It caused
an error in one sensor test, where it runs code in the secondary
inspector window that expects the window to be focused. So a mojom
method is added to mojom::WebTestControlHost to move focus to that
window for the test.

Remove all the other extraneous focus-moving that was happening in the
WebTestControlHost and friends browser code. That code was moving focus
on Linux but does nothing on Mac, because on Mac headless mode the
RenderWidgetHostView::Focus() method asks the OS to focus a window that
isn't visible so it does nothing.

Rename the testRunner.setWindowIsKey(bool) to setWindowFocus(bool) and
remove comments explaining that the method is actually setting window
focus. It would be nice to remove this entirely and use a separate
window to move focus around, but that doesn't work for some tests, which
is a bit interesting but not addressed by this CL.

Drop the "previously focused window" tracking in TestRunner, which would
keep around invalid (UAF-prone) pointers. Instead, iterate through the
windows (actually, RenderViews) and blur the focused one there.

The http/tests/serviceworker/clients-openwindow.html test expectations
are adjusted as the renderer no longer marks the main frame as focused
on navigation, so the service worker no longer reports the opened
window as focused.

Filed bug 1074482 and bug 1076129 for WPT tests that fail after this
change. The former because it's either/both expecting run_web_tests.py
to focus newly recreated windows and we don't, and it was calling
window.focus() of another window, which had test-only synchronous code
which we have removed. The latter because it seems to have a bug in how
its written that this CL has uncovered.

[email protected]

Bug: 866140, 1069111, 1074482, 1076129
Change-Id: I9d7ed8f9c41a75fc8afaf6bb0bfc3e5772e1297c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2165248
Commit-Queue: danakj <[email protected]>
Reviewed-by: Elly Fong-Jones <[email protected]>
Reviewed-by: Mustaq Ahmed <[email protected]>
Reviewed-by: Nasko Oskov <[email protected]>
Cr-Commit-Position: refs/heads/master@{#764725}
53 files changed
tree: db4ab58275c5b53442a615da6d77e3144acd05d9
  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. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. jingle/
  31. media/
  32. mojo/
  33. native_client_sdk/
  34. net/
  35. pdf/
  36. ppapi/
  37. printing/
  38. remoting/
  39. rlz/
  40. sandbox/
  41. services/
  42. skia/
  43. sql/
  44. storage/
  45. styleguide/
  46. testing/
  47. third_party/
  48. tools/
  49. ui/
  50. url/
  51. weblayer/
  52. .clang-format
  53. .clang-tidy
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitattributes
  57. .gitignore
  58. .gn
  59. .vpython
  60. .vpython3
  61. .yapfignore
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. ENG_REVIEW_OWNERS
  68. LICENSE
  69. LICENSE.chromium_os
  70. OWNERS
  71. PRESUBMIT.py
  72. PRESUBMIT_test.py
  73. PRESUBMIT_test_mocks.py
  74. README.md
  75. 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.

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.