Don't enter "full screen within tab" if there is no visible capturer

"Full screen within tab" [1] is to let an element requesting full
screen to fill the tab space instead of the screen space. It allows the
user to operate the tab (e.g. switching to another tab, dragging the
tab) using the non-full-screen browser UI when capturing a screenshot or
video of the full screen rendering of a web page. These capturers are
operated by the user to capture a visible tab. They start capturing by
calling WebContents::IncrementCaptureCount(size, /*stay_hidden*/false).
These capturers are called "visible capturer" in WebContents.

Internal capturers capture tab rendering (either visible or invisible)
for internal use (e.g. to generate a tab thumbnail), without user
awareness, so they should never have side-effects, thus should never
cause full screen to enter the "within tab" mode. These captures
start capturing by calling
WebContents::IncrementCaptureCount(size, /*stay_hidden*/true).
These capturers are called "hidden capturer" in WebContents.

This CL prevents the tab from entering the "full screen within tab"
mode when there is no visible capturer.

[1] https://source.chromium.org/chromium/chromium/src/+/master:chrome/browser/ui/exclusive_access/fullscreen_within_tab_helper.h;drc=4f51d5d775713e1b428ad8fa5ee131c411753f3c;l=15

TBR=wangxianzhu@chromium.org

(cherry picked from commit c61434c25802f28ae60b401daad0766e35ca669e)

Bug: 1112607
Change-Id: I1b910eeb68077f02be00c56c86f9a5bf0f0bcfc2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2365226
Reviewed-by: Yaron Friedman <yfriedman@chromium.org>
Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#800678}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2370660
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Cr-Commit-Position: refs/branch-heads/4183@{#1657}
Cr-Branched-From: 740e9e8a40505392ba5c8e022a8024b3d018ca65-refs/heads/master@{#782793}
6 files changed
tree: bc8d8d66dfaea21ceac0e337aa231698343f9831
  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.