| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_EXO_WAYLAND_TEST_TEST_BUFFER_H_ |
| #define COMPONENTS_EXO_WAYLAND_TEST_TEST_BUFFER_H_ |
| |
| #include <memory> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "components/exo/wayland/clients/client_helper.h" |
| |
| namespace exo::wayland::test { |
| |
| class BufferListener { |
| public: |
| virtual ~BufferListener() = default; |
| virtual void OnRelease(wl_buffer* buffer) = 0; |
| }; |
| |
| class TestBuffer { |
| public: |
| explicit TestBuffer( |
| std::unique_ptr<wl_buffer, decltype(&wl_buffer_destroy)> resource); |
| |
| TestBuffer(const TestBuffer&) = delete; |
| TestBuffer& operator=(const TestBuffer&) = delete; |
| |
| ~TestBuffer(); |
| |
| // `listener` must outlive this object. |
| void SetListener(BufferListener* listener); |
| |
| wl_buffer* resource() { return resource_.get(); } |
| |
| wl_buffer* GetResourceAndRelease() { return resource_.release(); } |
| |
| static void OnRelease(void* data, wl_buffer* resource); |
| |
| private: |
| std::unique_ptr<wl_buffer, decltype(&wl_buffer_destroy)> resource_; |
| raw_ptr<BufferListener> listener_ = nullptr; |
| }; |
| |
| } // namespace exo::wayland::test |
| |
| #endif // COMPONENTS_EXO_WAYLAND_TEST_TEST_BUFFER_H_ |