gl: x11: Extract x11 bits guarded by USE_X11.

This is a clean up of ui/gl, which goal is to get
rid of USE_X11 guards and place the code to corresponding
x11 source/header files so that ozone/x11, which is not
guarded by USE_X11, can utilize the same classes.

In this CL, I moved all X11 code to gl_surface_gl_x11,
and also created a utility that each platform can
implement to provide custom values for display attributes,
alpha and buffer size.

Also, I had to add a singleton with an optional interface that is
set in ui/gl/init. The reason why I decided to do it like that
is that we need X11 to set some x11 specific egl attributes.
While it could have been not a problem to have just utility methods
inside ui/gl for x11 and stub for others, it's a problem for ozone
as we can't depend on ui/ozone from ui/gl. Thus, we have a singleton
interface in ui/gl, which is then set in ui/gl/init right before
display initialization.

Bug: 1036285
Change-Id: I3117e65b8ba240ad16e87ec6c1489ccd6d71934f
Reviewed-by: Zhenyao Mo <>
Reviewed-by: Thomas Anderson <>
Reviewed-by: Jonathan Backer <>
Reviewed-by: Robert Kroeger <>
Commit-Queue: Maksim Sisov <>
Cr-Commit-Position: refs/heads/master@{#756165}
29 files changed
tree: e26ba1399dd66991ddf038ee9fc87d01b833bc46
  1. .clang-format
  2. .clang-tidy
  3. .eslintrc.js
  4. .git-blame-ignore-revs
  5. .gitattributes
  6. .gitignore
  7. .gn
  8. .vpython
  9. .vpython3
  10. .yapfignore
  14. DEPS
  17. LICENSE.chromium_os
  18. OWNERS
  24. android_webview/
  25. apps/
  26. ash/
  27. base/
  28. build/
  29. build_overrides/
  30. buildtools/
  31. cc/
  32. chrome/
  33. chromecast/
  34. chromeos/
  35. cloud_print/
  36. codereview.settings
  37. components/
  38. content/
  39. courgette/
  40. crypto/
  41. dbus/
  42. device/
  43. docs/
  44. extensions/
  45. fuchsia/
  46. gin/
  47. google_apis/
  48. google_update/
  49. gpu/
  50. headless/
  51. infra/
  52. ios/
  53. ipc/
  54. jingle/
  55. media/
  56. mojo/
  57. native_client_sdk/
  58. net/
  59. pdf/
  60. ppapi/
  61. printing/
  62. remoting/
  63. rlz/
  64. sandbox/
  65. services/
  66. skia/
  67. sql/
  68. storage/
  69. styleguide/
  70. testing/
  71. third_party/
  72. tools/
  73. ui/
  74. url/
  75. weblayer/

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

Documentation in the source is rooted in docs/

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.