#ifndef MEDIA_BASE_ANDROID_TEST_DESTRUCTION_OBSERVABLE_H_
#define MEDIA_BASE_ANDROID_TEST_DESTRUCTION_OBSERVABLE_H_
#include <optional>
#include "base/functional/callback_helpers.h"
#include "base/memory/weak_ptr.h"
namespace media {
class DestructionObserver;
class DestructionObservable {
public:
DestructionObservable();
DestructionObservable(const DestructionObservable&) = delete;
DestructionObservable& operator=(const DestructionObservable&) = delete;
virtual ~DestructionObservable();
std::unique_ptr<DestructionObserver> CreateDestructionObserver();
base::ScopedClosureRunner destruction_cb;
};
class DestructionObserver {
public:
DestructionObserver(DestructionObservable* observable);
DestructionObserver(const DestructionObserver&) = delete;
DestructionObserver& operator=(const DestructionObserver&) = delete;
virtual ~DestructionObserver();
void VerifyAndClearExpectations();
void ExpectDestruction();
void DoNotAllowDestruction();
bool destructed() const { return destructed_; }
private:
void VerifyExpectations();
void OnObservableDestructed();
bool destructed_;
std::optional<bool> expect_destruction_;
base::WeakPtrFactory<DestructionObserver> weak_factory_{this};
};
}
#endif