// 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.
#include "ui/base/cocoa/nswindow_test_util.h"
namespace ui {
NSWindowFullscreenNotificationWaiter::NSWindowFullscreenNotificationWaiter(
gfx::NativeWindow window)
: window_(window) {
// We only support one NSWindowFullscreenNotificationWaiter instance at once.
DCHECK(!instance_);
instance_ = this;
}
NSWindowFullscreenNotificationWaiter::~NSWindowFullscreenNotificationWaiter() {
DCHECK(instance_ == this);
instance_ = nullptr;
}
void NSWindowFullscreenNotificationWaiter::WaitForEnterAndExitCount(
int target_enter_count,
int target_exit_count) {
target_enter_count_ = target_enter_count;
target_exit_count_ = target_exit_count;
// Do not wait if the targets are already met.
if (enter_count_ >= target_enter_count_ &&
exit_count_ >= target_exit_count_) {
return;
}
run_loop_ = std::make_unique<base::RunLoop>();
run_loop_->Run();
run_loop_.reset();
}
void NSWindowFullscreenNotificationWaiter::NotifyFullscreenTransitionComplete(
bool fullscreen) {
if (fullscreen)
enter_count_++;
else
exit_count_++;
if (run_loop_ && enter_count_ >= target_enter_count_ &&
exit_count_ >= target_exit_count_) {
run_loop_->Quit();
}
}
// static
void NSWindowFullscreenNotificationWaiter::NotifyFullscreenTransitionComplete(
gfx::NativeWindow window,
bool fullscreen) {
if (!instance_ || instance_->window_ != window)
return;
instance_->NotifyFullscreenTransitionComplete(fullscreen);
}
// static
NSWindowFullscreenNotificationWaiter*
NSWindowFullscreenNotificationWaiter::instance_ = nullptr;
// static
void NSWindowFakedForTesting::SetEnabled(bool enabled) {
enabled_ = enabled;
}
// static
bool NSWindowFakedForTesting::IsEnabled() {
return enabled_;
}
// static
bool NSWindowFakedForTesting::enabled_ = false;
} // namespace ui