1/* 2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef ContentFilter_h 27#define ContentFilter_h 28 29#if USE(CONTENT_FILTERING) 30 31#include <wtf/PassRefPtr.h> 32#include <wtf/RetainPtr.h> 33 34#if PLATFORM(IOS) 35#include <functional> 36#endif 37 38#if PLATFORM(COCOA) 39OBJC_CLASS NSData; 40OBJC_CLASS NSKeyedArchiver; 41OBJC_CLASS NSKeyedUnarchiver; 42OBJC_CLASS WebFilterEvaluator; 43#endif 44 45#define HAVE_NE_FILTER_SOURCE TARGET_OS_EMBEDDED || (!TARGET_OS_IPHONE && __MAC_OS_X_VERSION_MIN_REQUIRED >= 10100) 46 47#if HAVE(NE_FILTER_SOURCE) 48#import <dispatch/dispatch.h> 49OBJC_CLASS NEFilterSource; 50OBJC_CLASS NSMutableData; 51#endif 52 53namespace WebCore { 54 55class ResourceRequest; 56class ResourceResponse; 57 58class ContentFilter { 59public: 60 static bool canHandleResponse(const ResourceResponse&); 61 62 explicit ContentFilter(const ResourceResponse&); 63 ~ContentFilter(); 64 65 void addData(const char* data, int length); 66 void finishedAddingData(); 67 bool needsMoreData() const; 68 bool didBlockData() const; 69 const char* getReplacementData(int& length) const; 70 71#if PLATFORM(COCOA) 72 ContentFilter(); 73 void encode(NSKeyedArchiver *) const; 74 static bool decode(NSKeyedUnarchiver *, ContentFilter&); 75#endif 76 77#if PLATFORM(IOS) 78 bool handleUnblockRequestAndDispatchIfSuccessful(const ResourceRequest&, std::function<void()>); 79#endif 80 81private: 82#if PLATFORM(COCOA) 83 RetainPtr<WebFilterEvaluator> m_platformContentFilter; 84 RetainPtr<NSData> m_replacementData; 85#endif 86 87#if HAVE(NE_FILTER_SOURCE) 88 long m_neFilterSourceStatus; 89 RetainPtr<NEFilterSource> m_neFilterSource; 90 dispatch_queue_t m_neFilterSourceQueue; 91 RetainPtr<NSMutableData> m_originalData; 92#endif 93}; 94 95} // namespace WebCore 96 97#endif // USE(CONTENT_FILTERING) 98 99#endif // ContentFilter_h 100