ProcessAssertion.h [plain text]
#pragma once
#include <wtf/Function.h>
#include <wtf/ProcessID.h>
#include <wtf/WeakPtr.h>
#include <wtf/text/WTFString.h>
#if !OS(WINDOWS)
#include <unistd.h>
#endif
#if PLATFORM(IOS_FAMILY)
#include <wtf/RetainPtr.h>
OBJC_CLASS RBSAssertion;
OBJC_CLASS WKRBSAssertionDelegate;
#endif // PLATFORM(IOS_FAMILY)
namespace WebKit {
enum class ProcessAssertionType {
Suspended,
Background,
UnboundedNetworking,
Foreground,
MediaPlayback,
};
class ProcessAssertion : public CanMakeWeakPtr<ProcessAssertion> {
WTF_MAKE_FAST_ALLOCATED;
public:
ProcessAssertion(ProcessID, const String& reason, ProcessAssertionType);
virtual ~ProcessAssertion();
void setInvalidationHandler(Function<void()>&& handler) { m_invalidationHandler = WTFMove(handler); }
ProcessAssertionType type() const { return m_assertionType; }
ProcessID pid() const { return m_pid; }
bool isValid() const;
#if PLATFORM(IOS_FAMILY)
protected:
virtual void processAssertionWasInvalidated();
#endif
private:
const ProcessAssertionType m_assertionType;
const ProcessID m_pid;
#if PLATFORM(IOS_FAMILY)
RetainPtr<RBSAssertion> m_rbsAssertion;
RetainPtr<WKRBSAssertionDelegate> m_delegate;
#endif
Function<void()> m_invalidationHandler;
};
class ProcessAndUIAssertion final : public ProcessAssertion {
public:
ProcessAndUIAssertion(ProcessID, const String& reason, ProcessAssertionType);
~ProcessAndUIAssertion();
void uiAssertionWillExpireImminently();
void setUIAssertionExpirationHandler(Function<void()>&& handler) { m_uiAssertionExpirationHandler = WTFMove(handler); }
private:
#if PLATFORM(IOS_FAMILY)
void processAssertionWasInvalidated() final;
#endif
void updateRunInBackgroundCount();
Function<void()> m_uiAssertionExpirationHandler;
bool m_isHoldingBackgroundTask { false };
};
}