#ifndef ContentFilter_h
#define ContentFilter_h
#if USE(CONTENT_FILTERING)
#include <wtf/PassRefPtr.h>
#include <wtf/RetainPtr.h>
#if PLATFORM(IOS)
#include <functional>
#endif
#if PLATFORM(COCOA)
OBJC_CLASS NSData;
OBJC_CLASS NSKeyedArchiver;
OBJC_CLASS NSKeyedUnarchiver;
OBJC_CLASS WebFilterEvaluator;
#endif
#define HAVE_NE_FILTER_SOURCE TARGET_OS_EMBEDDED || (!TARGET_OS_IPHONE && __MAC_OS_X_VERSION_MIN_REQUIRED >= 10100)
#if HAVE(NE_FILTER_SOURCE)
#import <dispatch/dispatch.h>
OBJC_CLASS NEFilterSource;
OBJC_CLASS NSMutableData;
#endif
namespace WebCore {
class ResourceRequest;
class ResourceResponse;
class ContentFilter {
public:
static bool isEnabled();
explicit ContentFilter(const ResourceResponse&);
~ContentFilter();
void addData(const char* data, int length);
void finishedAddingData();
bool needsMoreData() const;
bool didBlockData() const;
const char* getReplacementData(int& length) const;
#if PLATFORM(COCOA)
ContentFilter();
void encode(NSKeyedArchiver *) const;
static bool decode(NSKeyedUnarchiver *, ContentFilter&);
#endif
#if PLATFORM(IOS)
bool handleUnblockRequestAndDispatchIfSuccessful(const ResourceRequest&, std::function<void()>);
#endif
private:
#if PLATFORM(COCOA)
RetainPtr<WebFilterEvaluator> m_platformContentFilter;
RetainPtr<NSData> m_replacementData;
#endif
#if HAVE(NE_FILTER_SOURCE)
long m_neFilterSourceStatus;
RetainPtr<NEFilterSource> m_neFilterSource;
dispatch_queue_t m_neFilterSourceQueue;
RetainPtr<NSMutableData> m_originalData;
#endif
};
}
#endif // USE(CONTENT_FILTERING)
#endif // ContentFilter_h