# Glossary
## How to use
Terms are given below, ordered alphabetically. Corrections or requests for
addition? [Contact](/docs/ui/ask/index.md) the Views team.
## Terms
### Ash
The Chrome OS windowing environment, responsible for non-browser UI such as the
login screen, system tray, and various built-in control surfaces. Like Chrome,
Ash UI is built using the Views toolkit.
Sometimes, the phrase "Ash Chrome" is used to distinguish the historic
Chrome-on-CrOS design (that is, tightly integrated with the operating system)
from "LaCrOS Chrome" (where the browser is basically separate from the OS, as on
other desktop platforms).
### Aura
A cross-platform window manager abstraction used on desktop platforms other than
macOS. Aura handles tasks like showing windows onscreen and responding to native
input events. Because Aura is not the only "platform" Views targets, there is
some complexity in Views that [would not be necessary](http://crbug.com/327611)
if Mac used Aura as well; however, Mac platform conventions differ enough from
the platforms Aura currently supports that using Aura on Mac might require
significant redesign or impose undesirable API constraints. As of this writing,
the question of whether Mac should use Aura remains open.
### AX
An abbreviation for "accessibility". Many different classes with the "AX" prefix
are involved in exposing accessibility information for Views, but perhaps the
best starting point is one that lacks it:
[`ViewAccessibility`](/ui/views/accessibility/view_accessibility.h).
### Cocoa
The application environment on macOS. Originally, Chrome for Mac had UI written
exclusively in Cocoa; now the majority of the native UI uses Views, but there
are still pieces in Cocoa. Code interacting with Cocoa is generally written in
Objective-C++, whose source files typically end in `.mm`.
[More general background on Cocoa](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html)
### Combobox
A control that displays a selected choice from a list of options. Sometimes
called a "select" or "dropdown" control. The specific
[control](/ui/views/controls/combobox/combobox.h) in Views has a focus ring and
a dropmarker by default, and can be customized in a variety of ways. The "Combo
Box" example in [`views_examples`](ui_debugging.md#views-examples) creates a
couple of simple comboboxes.
### Compositor
A system responsible for producing the final displayable graphics for a
`Widget`, given a `View` hierarchy. The compositor manages a `Layer` tree that
allows it to cache, transform, and blend various graphical layers so that it can
minimize repaints, accelerate scrolling, and sync animation to the underlying
display refresh rate.
### Focus Ring
A colored outline around an object that is visible when an object has focus
and hidden when focus is gone. It is often drawn by a
[`FocusRing`](/ui/views/controls/focus_ring.h) object, a `View` subclass that
handles drawing a colored border along a path. When creating focus rings, it's
important to color them such that they contrast with both the color inside and
the color outside the ring; see the uses of the
[`PickGoogleColorTwoBackgrounds`](/ui/color/color_transform.cc) function.
### HWND
Windows-specific. An opaque handle to a system-native window. Ultimately
[type-aliased to a `void*`](https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types),
but you should never dereference this or examine the actual value; it is only
used to pass to various Windows native APIs. Used as the type for
[`AcceleratedWidget`](/ui/gfx/native_widget_types.h) on Windows.
### Ink drop
The collection of classes that implement hover and click effects on `View`s.
These came from the original Material Design and use dynamically-created layers
to draw translucent overlays that may be contained to the bounds of a `View` or
extend outside it. The name came from the appearance of a drop of ink spreading
in water, and the most prominent effect, known as a "ripple", spreads rapidly
outward from a single point (generally the cursor position). The base
[`InkDrop`](/ui/views/animation/ink_drop.h) class can also manage instant on/off
"hover highlight" effects and contains a variety of hooks for different uses.
### LaCrOS
An abbreviation for "Linux And Chrome OS". An architecture project to decouple
the Chrome browser on Chrome OS from the operating system stack; historically
these were tightly coupled and updated simultaneously.
[More general background on LaCrOS](/docs/lacros.md)
### Layer
A node in a tree of objects used by the compositor to manage textures. Calling
`View::SetPaintToLayer()` causes a `View` to paint to a `Layer`, which is
necessary to do things like paint outside the `View`'s own bounds or perform
certain kinds of operations (e.g. blending) in hardware instead of software;
however, layers have memory and performance costs and affect sibling paint
order, and should be used sparingly.
### Layout
An operation where a `View` sets the bounds of all of its children. Generally,
calling `InvalidateLayout()` on a `View` will recursively mark that `View` and
all ancestors as dirty; then at some point,
`Widget::LayoutRootViewIfNecessary()` will call `LayoutImmediately()` on the
`RootView`, which will call `Layout()` on its contents, and so forth down the
tree. `View`s can currently implement custom layout by overriding the virtual
`Layout()` method, but should instead use one of the available `LayoutManager`s
to describe how children should be arranged; then the `LayoutManager` will be
responsible for both computing the `View`'s preferred size and for updating
child bounds as necessary.
### NativeWidget
The platform-specific object that backs the cross-platform `Widget` object;
`Widget` implements its API by calling methods on the `NativeWidget`. This is
implemented separately for Aura and Mac, and at least on Aura is still an
abstraction over the true underlying OS windowing objects. Historically,
lifetime and ownership between `Widget` and `NativeWidget` instances could vary
and was error-prone; as of this writing, this is
[being addressed](https://crbug.com/1346381).
### NS*
An abbreviation for "NeXTSTEP". Seeing this prefix on a type generally means
that the type is a longstanding fundamental type in macOS, whose origins date to
the 1990s and Apple's acquisition of NeXT.
### Omnibox
The combined search and address bar in the browser window toolbar. Coined by
early PM Brian Rakowski (as "psychic omnibox") because it knows and does
everything. In code, the term "omnibox" generally refers specifically to the
text editing control and its associated popup; the larger visual "bar" it
appears in, which also contains affordances to indicate security state, allow
bookmarking, and display page action icons, is called the "location bar".
### Progressive Web App (PWA)
A website that may provide various native-app-like capabilities, such as
installability, integration with system hardware, and/or persistence. PWAs in
Chrome are given special UI treatment.
[More general background on PWAs](https://web.dev/progressive-web-apps/)
### SkColor
A 32bpp (8 bits per channel) non-premultiplied ARGB color value, stored as a
`uint32_t`. This is the most common color type used in Views when interacting
with drawing and painting APIs. Because this is a fixed (physical) color value
instead of a themed (logical) color identifier, computed `SkColor`s may need
recalculation on theme changes; in general, prefer to pass colors around as
`ColorId`s instead, where possible.
### Skia
The 2D graphics library Chrome uses. Skia is maintained by Google employees and
provides hardware-accelerated drawing primitives.
[More general background on Skia](https://skia.org/)
### Skia Gold
A web application used to compare pixel test result images against verified
baselines. A test in `browser_tests` or `interactive_ui_tests` may
[opt in](/testing/buildbot/filters/pixel_tests.filter) to pixel testing, and
will then produce result images that are managed by
[a Skia Gold instance](https://chrome-gold.skia.org/?corpus=gtest-pixeltests).
As of this writing, these pixel tests are Windows-only. To run them, add the
`--browser-ui-tests-verify-pixels`, `--enable-pixel-output-in-tests`, and
`--test-launcher-retry-limit=0` flags when invoking the test binary.
### Throbber
An animated object used to indicate definite or indefinite progress to the user.
The specific [control](/ui/views/controls/throbber.h) in Views is a 16 DIP
spinning circle that can optionally display a checkmark when an operation
completes. The "Throbber" example in
[`views_examples`](ui_debugging.md#views-examples) creates a throbber.
### Views (library)
A cross-platform UI toolkit used to create "native" UI (as opposed to UI built
from web technologies). Views is important to both the Chrome browser and the
Chrome OS native UI in Ash. Views was created in the early days of Chrome to
abstract away calls to platform-specific functions and make it possible to
build Chrome UI for multiple operating systems; unlike other cross-platform
toolkits of the time like wxWidgets or GTK, it aimed for a platform-native feel
(especially on Windows) and a minimal API that was designed to do just what
Chrome needed. Over time the Views look-and-feel moved away from
platform-native fidelity, toward a style called "Harmony" influenced by all
desktop platforms as well as Google's Material Design. However, the minimal API
surface persists; Views lacks many controls and features found in other UI
toolkits and is not supported on mobile.
### `View` (class)
A node in a tree of objects used to represent UI. A `View` has rectangular
bounds, a (possibly-empty) set of child `View`s, and a large set of APIs to
allow interaction and extension. Its primary goal is to abstract user
interactions and present data to the browser for display. Historically,
implementers have built subclasses as heavyweight objects containing all the
code to handle display, business logic, and the underlying data model; this
reduces boilerplate but makes classes difficult to test, reuse, or port to
other platforms. By taking the name literally and making a `View` subclass
handle only the "view" role in the MVC paradigm, implementers can produce more
robust code.
### Widget
The cross-platform abstraction that represents a "window" in the Views toolkit.
It is the gateway between the `Views` library and the OS platform. Each
`Widget` contains exactly one `RootView` object that in turn holds a hierarchy
of `View`s representing the UI in that window. `Widget` is implemented in turns
of a platform-specific `NativeWidget`, which itself may be backed by other
abstractions (at least on Aura). It's possible to have parent/child
relationships between widgets, for example when displaying a small floating
bubble anchored to (and clipped by) a larger window.