// Copyright 2023 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_BROWSER_DISPLAY_CUTOUT_SAFE_AREA_INSETS_HOST_IMPL_H_ #define CONTENT_BROWSER_DISPLAY_CUTOUT_SAFE_AREA_INSETS_HOST_IMPL_H_ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "content/browser/display_cutout/safe_area_insets_host.h" #include "content/common/content_export.h" #include "content/public/browser/document_user_data.h" #include "content/public/browser/render_frame_host_receiver_set.h" #include "content/public/browser/web_contents_observer.h" #include "third_party/blink/public/mojom/page/display_cutout.mojom.h" #include "ui/gfx/geometry/insets.h" namespace content { class RenderFrameHostImpl; class WebContentsImpl; // Handles changes to Safe Area Insets (SAI) by monitoring // navigations within a `WebContents` and hosting a connection // to Blink. See the base class `SafeAreaInsetsHost` for context. // Tracks the viewport-fit value associated with each Blink Document // as `WebContents` are updated through navigation etc. As of 2023 each // RenderFrameHost may correspond to one or more documents during in-site // navigation, so this class maps the viewport-fit value of a document to the // associated RFH and updates the owning `WebContents` when it changes. // Note that subframes may acquire fullscreen so the viewport-fit from that // frame may change the insets. // // This class ensures there will be only one frame that receives the current // SAI, with this rule: // * When a fullscreen frame exists, the fullscreen frame will take the SAI // * When no fullscreen frame exists, the primary main frame will take the SAI // * When the frame that takes SAI changes, the SAI in the previous frame will // be reset. class CONTENT_EXPORT SafeAreaInsetsHostImpl : public SafeAreaInsetsHost { … }; } // namespace content #endif // CONTENT_BROWSER_DISPLAY_CUTOUT_SAFE_AREA_INSETS_HOST_IMPL_H_