// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_PUBLIC_BROWSER_RENDER_WIDGET_HOST_H_ #define CONTENT_PUBLIC_BROWSER_RENDER_WIDGET_HOST_H_ #include <stdint.h> #include <memory> #include <optional> #include <vector> #include "base/functional/callback.h" #include "base/i18n/rtl.h" #include "base/scoped_observation_traits.h" #include "build/build_config.h" #include "components/input/native_web_keyboard_event.h" #include "content/common/content_export.h" #include "content/public/common/drop_data.h" #include "ipc/ipc_channel.h" #include "ipc/ipc_sender.h" #include "third_party/blink/public/common/input/web_gesture_event.h" #include "third_party/blink/public/common/input/web_input_event.h" #include "third_party/blink/public/common/page/drag_operation.h" #include "third_party/blink/public/mojom/input/input_event_result.mojom-shared.h" #include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h" #include "ui/base/dragdrop/mojom/drag_drop_types.mojom-forward.h" #include "ui/base/ui_base_types.h" #include "ui/display/screen_infos.h" #include "ui/surface/transport_dib.h" namespace blink { class WebMouseEvent; class WebMouseWheelEvent; } namespace cc { enum class TouchAction; } namespace display { struct ScreenInfo; } namespace gfx { class Point; } namespace ui { class Cursor; class LatencyInfo; } namespace viz { class FrameSinkId; } namespace content { class RenderProcessHost; class RenderWidgetHostIterator; class RenderWidgetHostObserver; class RenderWidgetHostView; // A RenderWidgetHost acts as the abstraction for compositing and input // functionality. It can exist in 3 different scenarios: // // 1. Popups, which are spawned in situations like <select> menus or // HTML calendar widgets. These are browser-implemented widgets that // are created and owned by WebContents in response to a renderer // request. Since they are divorced from the web page (they are not // clipped to the bounds of the page), they are an independent // compositing and input target. As they are owned by WebContents, // they are also destroyed by WebContents. // // 2. Main frames, which are a root frame of a WebContents. These frames // are separated from the browser UI for compositing and input, as the // renderer lives in its own coordinate space. These are attached to // the lifetime of the main frame (currently, owned by the // RenderViewHost, though that should change one day as per // https://crbug.com/419087). // // 3. Child local root frames, which are iframes isolated from their // parent frame for security or performance purposes. This allows // them to be placed in an arbitrary process relative to their // parent frame. Since they are isolated from the parent, they live // in their own coordinate space and are an independent unit of // compositing and input. These are attached to the lifetime of // the local root frame, and are explicitly owned by the // RenderFrameHost. // // A RenderWidgetHost is platform-agnostic. It defers platform-specific // behaviour to its RenderWidgetHostView, which ties the compositing // output into the native browser UI. Child local root frames also have // a separate "platform" RenderWidgetHostView type at this time, though // it stretches the abstraction uncomfortably. // // The RenderWidgetHostView has a complex and somewhat broken lifetime as // of this writing (see, e.g. https://crbug.com/1161585). It is eagerly // created along with the RenderWidgetHost on the first creation, before // the renderer process may exist. It is destroyed if the renderer process // exits, and not recreated at that time. Then it is recreated lazily when // the associated renderer frame/widget is recreated. class CONTENT_EXPORT RenderWidgetHost { … }; } // namespace content namespace base { template <> struct ScopedObservationTraits<content::RenderWidgetHost, content::RenderWidgetHost::InputEventObserver> { … }; } // namespace base #endif // CONTENT_PUBLIC_BROWSER_RENDER_WIDGET_HOST_H_