NetworkExtensionContentFilter.h [plain text]
#pragma once
#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 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
WEBCORE_EXPORT static void setHasConsumedSandboxExtensions(bool);
private:
static bool enabled();
NetworkExtensionContentFilter() = default;
void initialize(const URL* = nullptr);
void handleDecision(NEFilterSourceStatus, NSData *replacementData);
enum class SandboxExtensionsState : uint8_t {
Consumed,
NotConsumed,
NotSet
};
WEBCORE_EXPORT static SandboxExtensionsState m_sandboxExtensionsState;
OSObjectPtr<dispatch_queue_t> m_queue;
RetainPtr<NSData> m_replacementData;
RetainPtr<NEFilterSource> m_neFilterSource;
};
}