NetworkExtensionContentFilter.h [plain text]
#ifndef NetworkExtensionContentFilter_h
#define NetworkExtensionContentFilter_h
#include "PlatformContentFilter.h"
#include <objc/NSObjCRuntime.h>
#include <wtf/Compiler.h>
#include <wtf/OSObjectPtr.h>
#include <wtf/RetainPtr.h>
enum NEFilterSourceStatus : NSInteger;
OBJC_CLASS NEFilterSource;
OBJC_CLASS NSData;
namespace WebCore {
class URL;
class NetworkExtensionContentFilter final : public PlatformContentFilter {
friend std::unique_ptr<NetworkExtensionContentFilter> std::make_unique<NetworkExtensionContentFilter>();
public:
static std::unique_ptr<NetworkExtensionContentFilter> create();
void willSendRequest(ResourceRequest&, const ResourceResponse&) override;
void responseReceived(const ResourceResponse&) override;
void addData(const char* data, int length) override;
void finishedAddingData() override;
Ref<SharedBuffer> replacementData() const override;
#if ENABLE(CONTENT_FILTERING)
ContentFilterUnblockHandler unblockHandler() const override;
#endif
private:
static bool enabled();
NetworkExtensionContentFilter() = default;
void initialize(const URL* = nullptr);
void handleDecision(NEFilterSourceStatus, NSData *replacementData);
OSObjectPtr<dispatch_queue_t> m_queue;
OSObjectPtr<dispatch_semaphore_t> m_semaphore;
RetainPtr<NSData> m_replacementData;
RetainPtr<NEFilterSource> m_neFilterSource;
};
}
#endif // NetworkExtensionContentFilter_h