1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef UI_AURA_SCOPED_WINDOW_CAPTURE_REQUEST_H_
- #define UI_AURA_SCOPED_WINDOW_CAPTURE_REQUEST_H_
- #include "base/memory/raw_ptr.h"
- #include "components/viz/common/surfaces/subtree_capture_id.h"
- #include "ui/aura/aura_export.h"
- #include "ui/aura/window_observer.h"
- namespace aura {
- class Window;
- // A scoped move-only object which is associated with a request to make a
- // non-root window individually capturable by a FrameSinkVideoCapturer. This
- // request is tracked as long as this object lives. Once all requests are
- // destroyed, the window will no longer be uniquely identifiable by a
- // viz::SubtreeCaptureId, and can no longer be individually capturable by the
- // FrameSinkVideoCapturer.
- // Note that making a window capturable forces the layer tree root at its layer
- // to be promoted to a render surface that draw into a render pass.
- // See https://crbug.com/1143930 for more details.
- class AURA_EXPORT ScopedWindowCaptureRequest : public WindowObserver {
- public:
- // Creates an empty request that doesn't affect any window.
- ScopedWindowCaptureRequest() = default;
- ScopedWindowCaptureRequest(ScopedWindowCaptureRequest&& other);
- ScopedWindowCaptureRequest& operator=(ScopedWindowCaptureRequest&& rhs);
- ~ScopedWindowCaptureRequest() override;
- Window* window() const { return window_; }
- viz::SubtreeCaptureId GetCaptureId() const;
- // WindowObserver:
- void OnWindowDestroying(Window* window) override;
- private:
- friend class Window;
- // Private so it can only be called through Window::MakeWindowCapturable().
- explicit ScopedWindowCaptureRequest(Window* window);
- // Attaches to the current |window_| by observing it. If |increment_requests|
- // is true (meaning this is a new request, rather than an existing one being
- // moved into |this|), OnScopedWindowCaptureRequestAdded() will be called on
- // |window_|. |window_| must be valid.
- void AttachToCurrentWindow(bool increment_requests);
- // Detaches from the current |window_| (if any) by ending observing it. If
- // |decrement_requests| is true (meaning this request is actually ending
- // rather than being moved from |this|), OnScopedWindowCaptureRequestRemoved()
- // will be called on |window_|.
- // |window_| will be reset to |nullptr|, and its old value will be returned.
- Window* DetachFromCurrentWindow(bool decrement_requests);
- // The window on which this request has been made. Can be |nullptr| if this is
- // an empty request (created by the default ctor), or if this object was
- // std::move()'d from.
- raw_ptr<Window> window_ = nullptr;
- };
- } // namespace aura
- #endif // UI_AURA_SCOPED_WINDOW_CAPTURE_REQUEST_H_
|