| // 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 UI_BASE_COCOA_NSWINDOW_TEST_UTIL_H_ |
| #define UI_BASE_COCOA_NSWINDOW_TEST_UTIL_H_ |
| |
| #include <memory> |
| |
| #include "base/component_export.h" |
| #include "base/run_loop.h" |
| #include "ui/gfx/native_ui_types.h" |
| |
| namespace ui { |
| |
| class COMPONENT_EXPORT(UI_BASE) NSWindowFullscreenNotificationWaiter { |
| public: |
| explicit NSWindowFullscreenNotificationWaiter(gfx::NativeWindow window); |
| ~NSWindowFullscreenNotificationWaiter(); |
| |
| void WaitForEnterAndExitCount(int target_enter_count, int target_exit_count); |
| int enter_count() const { return enter_count_; } |
| int exit_count() const { return exit_count_; } |
| |
| static void NotifyFullscreenTransitionComplete(gfx::NativeWindow window, |
| bool fullscreen); |
| |
| private: |
| void NotifyFullscreenTransitionComplete(bool fullscreen); |
| |
| std::unique_ptr<base::RunLoop> run_loop_; |
| const gfx::NativeWindow window_; |
| |
| int enter_count_ = 0; |
| int exit_count_ = 0; |
| int target_enter_count_ = 0; |
| int target_exit_count_ = 0; |
| |
| static NSWindowFullscreenNotificationWaiter* instance_; |
| }; |
| |
| class COMPONENT_EXPORT(UI_BASE) NSWindowFakedForTesting { |
| public: |
| // This is set by tests that are not written robustly to asynchronous |
| // transitions to fullscreen (e.g, by using ScopedFakeNSWindowFullscreen on |
| // macOS). |
| static void SetEnabled(bool); |
| static bool IsEnabled(); |
| |
| private: |
| static bool enabled_; |
| }; |
| |
| // static void SetFullscreenFakedForTesting(bool); |
| // static bool IsFullscreenFakedForTesting(); |
| |
| } // namespace ui |
| |
| #endif // UI_BASE_COCOA_NSWINDOW_TEST_UTIL_H_ |