# Window Tree in Views We have digged into Exo or Wayland stack several times, but not Views. Let's see how window tree hierarchy are described in Views context. ## Window tree host and Content window [DesktopNativeWidgetAura](https://source.chromium.org/chromium/chromium/src/+/main:ui/views/widget/desktop_aura/desktop_native_widget_aura.h) is a top of the window hierarchy. This handles a top-level widgets, and other windows/widgets are children of this. However, this is not a "window" itelf that we imagine (the window we see as a UI). DesktopNativeWidgetAura owns a "window" as a direct child. [DesktopWindowTreeHost](https://source.chromium.org/chromium/chromium/src/+/main:ui/views/widget/desktop_aura/desktop_window_tree_host.h;l=47;drc=37ef683d7b819722980ba25f71e8e9bcce214600) is a top of the window hierarchy. This class hosts whole window tree. [WindowTreeHost](https://source.chromium.org/chromium/chromium/src/+/main:ui/aura/window_tree_host.h;l=66;drc=37ef683d7b819722980ba25f71e8e9bcce214600) is another representation of the host of window tree. `desktop_window_tree_host_` converted into [`host_`](https://source.chromium.org/chromium/chromium/src/+/main:ui/views/widget/desktop_aura/desktop_native_widget_aura.h;l=289;drc=37ef683d7b819722980ba25f71e8e9bcce214600) by AsWindowTreeHost. WindowTreeHost class bridges between a native window and the RootWindow. [`content_window_`](https://source.chromium.org/chromium/chromium/src/+/main:ui/views/widget/desktop_aura/desktop_native_widget_aura.h;l=304;drc=37ef683d7b819722980ba25f71e8e9bcce214600) is aura::Window representing the root window. This is [appended to `host_->window()`](https://source.chromium.org/chromium/chromium/src/+/main:ui/views/widget/desktop_aura/desktop_native_widget_aura.cc;l=578;drc=c1504d05a7839da026ab0a88a48109d39209c2d9) as a direct child. `host_->window()` returns [`window_`](https://source.chromium.org/chromium/chromium/src/+/main:ui/aura/window_tree_host.h;l=451;drc=37ef683d7b819722980ba25f71e8e9bcce214600) which is NativeWidget. Each WindowTreeHost owns one ui::compositor as [`compositor_`](https://source.chromium.org/chromium/chromium/src/+/main:ui/aura/window_tree_host.h;l=470;drc=37ef683d7b819722980ba25f71e8e9bcce214600). [CreateCompositor](https://source.chromium.org/chromium/chromium/src/+/main:ui/aura/window_tree_host.cc;l=612;drc=37ef683d7b819722980ba25f71e8e9bcce214600) creates a compositor. The are within WindowTreeHost will be composited by `compositor_`. ## Correspondence against Wayland window `host_` corresponds to platform window. [WindowTreeHostPlatform](https://source.chromium.org/chromium/chromium/src/+/main:ui/aura/window_tree_host_platform.h) is an implementation of WindowTreeHost for platform with [PlatformWindow](https://source.chromium.org/chromium/chromium/src/+/main:ui/platform_window/platform_window.h;l=34;drc=37ef683d7b819722980ba25f71e8e9bcce214600). PlatformWindow is for example WaylandWindow, X11Window, WinWindow.... For example, [WindowTreeHost::SetBoundsInPixels](https://source.chromium.org/chromium/chromium/src/+/main:ui/aura/window_tree_host.h;l=225;drc=37ef683d7b819722980ba25f71e8e9bcce214600) sets the passed bounds to `platform_window()` via PlatformWindow::SetBoundsInPixels. For wayland platform, it's WaylandWindow. This `bounds` is set to geometry via [SetWindowGeometry](https://source.chromium.org/chromium/chromium/src/+/main:ui/ozone/platform/wayland/host/wayland_toplevel_window.cc;l=671;drc=37ef683d7b819722980ba25f71e8e9bcce214600). This will eventually send `xdg_surface_set_window_geometry` wayland message. By the way, [DesktopWindowTreeHostPlatform](https://source.chromium.org/chromium/chromium/src/+/main:ui/aura/window_tree_host.h;l=470;drc=37ef683d7b819722980ba25f71e8e9bcce214600) is an implementation of WindowTreeHostPlatform + [DesktopWindowTreeHost](https://source.chromium.org/chromium/chromium/src/+/main:ui/views/widget/desktop_aura/desktop_window_tree_host.h;l=47;drc=37ef683d7b819722980ba25f71e8e9bcce214600) for desktop aura such as lacros and linux. `content_window_` represents a `root_surface`. It's accessed from DesktopWindowTreeHost, BrowserDesktopWindowTreeHost classes to manipulate the toplevel window such as OnImmersiveModeChanged, OnOveriewModeChanged, OnTooltipShownOnServer, or on UpdateFrameHints. ## Window Bounds `content_window_` represents a toplevel window, so its bounds is the window size and its offset from the screen. DesktopNativeWidgetAura, on the other hand, does not have to be the same as the `content_window_` in theory. The size of DesktopNativeWidgetAura (= WindowTreeHost) specifies the area that compositor works.