| OLD | NEW | 
| (Empty) |  | 
 |    1 #include <exception> | 
 |    2  | 
 |    3 #include <emscripten.h> | 
 |    4 #include <emscripten/trace.h> | 
 |    5  | 
 |    6 #include "Filter.h" | 
 |    7 #include "InvalidFilter.h" | 
 |    8 #include "ActiveFilter.h" | 
 |    9 #include "RegExpFilter.h" | 
 |   10 #include "ElemHideBase.h" | 
 |   11 #include "CSSPropertyFilter.h" | 
 |   12 #include "String.h" | 
 |   13  | 
 |   14 #define DO_PRAGMA(pragma) _Pragma(#pragma) | 
 |   15 #define INSERT_MESSAGE(m) DO_PRAGMA(comment(m)) | 
 |   16  | 
 |   17 #define CLASS(name) \ | 
 |   18     extern "C"\ | 
 |   19     INSERT_MESSAGE(class name) | 
 |   20  | 
 |   21 #define AUGMENTS(name) INSERT_MESSAGE(augments name) | 
 |   22 #define CLASS_INIT(func) INSERT_MESSAGE(class_init func) | 
 |   23  | 
 |   24 #define METHOD(name, impl) INSERT_MESSAGE(method name impl) | 
 |   25 #define CLASS_METHOD(name, impl) INSERT_MESSAGE(class_method name impl) | 
 |   26 #define STRING_ARG(pos) INSERT_MESSAGE(string_arg pos) | 
 |   27 #define RETURNS_STRING INSERT_MESSAGE(string_result) | 
 |   28 #define RETURNS_POINTER(cls) INSERT_MESSAGE(pointer_result cls) | 
 |   29  | 
 |   30 #define READONLY_PROPERTY(name, getter) INSERT_MESSAGE(property name getter) | 
 |   31 #define PROPERTY(name, getter, setter) INSERT_MESSAGE(property name getter sette
     r) | 
 |   32 #define READONLY_STRING_PROPERTY(name, getter) INSERT_MESSAGE(string_property na
     me getter) | 
 |   33 #define STRING_PROPERTY(name, getter, setter) INSERT_MESSAGE(string_property nam
     e getter setter) | 
 |   34 #define STATIC_PROPERTY(name, value) INSERT_MESSAGE(static_property name value) | 
 |   35  | 
 |   36 #define DIFFERENTIATOR(cls, func) INSERT_MESSAGE(differentiator cls func) | 
 |   37 #define ASSOCIATE(value, cls) INSERT_MESSAGE(differentiator_mapping value cls) | 
 |   38  | 
 |   39 #if defined(__EMSCRIPTEN_TRACING__) | 
 |   40 struct InitTracing | 
 |   41 { | 
 |   42   InitTracing() | 
 |   43   { | 
 |   44     emscripten_trace_configure("http://127.0.0.1:5000/", "MyApplication"); | 
 |   45   } | 
 |   46  | 
 |   47   ~InitTracing() | 
 |   48   { | 
 |   49     emscripten_trace_close(); | 
 |   50   } | 
 |   51 }; | 
 |   52  | 
 |   53 InitTracing foo; | 
 |   54 #endif | 
 |   55  | 
 |   56 #define EXPOSE_FILTER_PROPERTY(class, type, name, getter, setter) \ | 
 |   57   type EMSCRIPTEN_KEEPALIVE class##_##getter(const class* filter)\ | 
 |   58   {\ | 
 |   59     return filter->getter();\ | 
 |   60   }\ | 
 |   61   void EMSCRIPTEN_KEEPALIVE class##_##setter(\ | 
 |   62       class* filter, type value)\ | 
 |   63   {\ | 
 |   64     filter->setter(value);\ | 
 |   65   }\ | 
 |   66   PROPERTY(name, class##_##getter, class##_##setter) | 
 |   67  | 
 |   68 #pragma clang diagnostic push | 
 |   69 #pragma clang diagnostic ignored "-Wreturn-type-c-linkage" | 
 |   70  | 
 |   71 extern "C" | 
 |   72 { | 
 |   73   size_t EMSCRIPTEN_KEEPALIVE GetSizeofString() | 
 |   74   { | 
 |   75     return sizeof(String); | 
 |   76   } | 
 |   77  | 
 |   78   void EMSCRIPTEN_KEEPALIVE InitString(String* str, String::value_type* data, | 
 |   79       String::size_type len) | 
 |   80   { | 
 |   81     // String is already allocated on stack, we merely need to call constructor. | 
 |   82     new (str) String(data, len); | 
 |   83   } | 
 |   84  | 
 |   85   void EMSCRIPTEN_KEEPALIVE DestroyString(String* str) | 
 |   86   { | 
 |   87     // Stack memory will be freed automatically, we need to call destructor | 
 |   88     // explicitly however. | 
 |   89     str->~String(); | 
 |   90   } | 
 |   91  | 
 |   92   String::size_type EMSCRIPTEN_KEEPALIVE GetStringLength(const String& str) | 
 |   93   { | 
 |   94     return str.length(); | 
 |   95   } | 
 |   96  | 
 |   97   const String::value_type* EMSCRIPTEN_KEEPALIVE GetStringData(const String& str
     ) | 
 |   98   { | 
 |   99     return str.data(); | 
 |  100   } | 
 |  101  | 
 |  102   void EMSCRIPTEN_KEEPALIVE DeletePointer(Filter* ptr) | 
 |  103   { | 
 |  104     ptr->ReleaseRef(); | 
 |  105   } | 
 |  106 } | 
 |  107  | 
 |  108 DIFFERENTIATOR(Filter, Filter_GetType) | 
 |  109   ASSOCIATE(1, InvalidFilter) | 
 |  110   ASSOCIATE(2, CommentFilter) | 
 |  111   ASSOCIATE(3, RegExpFilter) | 
 |  112   ASSOCIATE(4, WhitelistFilter) | 
 |  113   ASSOCIATE(5, ElemHideFilter) | 
 |  114   ASSOCIATE(6, ElemHideException) | 
 |  115   ASSOCIATE(7, CSSPropertyFilter) | 
 |  116  | 
 |  117 CLASS(Filter) | 
 |  118 { | 
 |  119   String EMSCRIPTEN_KEEPALIVE Filter_GetText(const Filter* filter) | 
 |  120   { | 
 |  121     return filter->GetText(); | 
 |  122   } | 
 |  123   READONLY_STRING_PROPERTY(text, Filter_GetText) | 
 |  124  | 
 |  125   Filter::Type EMSCRIPTEN_KEEPALIVE Filter_GetType(const Filter* filter) | 
 |  126   { | 
 |  127     return filter->GetType(); | 
 |  128   } | 
 |  129  | 
 |  130   String EMSCRIPTEN_KEEPALIVE Filter_Serialize(const Filter* filter) | 
 |  131   { | 
 |  132     return filter->Serialize(); | 
 |  133   } | 
 |  134   METHOD(serialize, Filter_Serialize) RETURNS_STRING | 
 |  135  | 
 |  136   Filter* EMSCRIPTEN_KEEPALIVE Filter_FromText(String& text) | 
 |  137   { | 
 |  138     Filter* filter = Filter::FromText(text); | 
 |  139     filter->AddRef(); | 
 |  140     return filter; | 
 |  141   } | 
 |  142   CLASS_METHOD(fromText, Filter_FromText) STRING_ARG(0) RETURNS_POINTER(Filter) | 
 |  143  | 
 |  144   String EMSCRIPTEN_KEEPALIVE Filter_Normalize(String& text) | 
 |  145   { | 
 |  146     return Filter::Normalize(text); | 
 |  147   } | 
 |  148   CLASS_METHOD(normalize, Filter_Normalize) STRING_ARG(0) RETURNS_STRING | 
 |  149 } | 
 |  150  | 
 |  151 CLASS(InvalidFilter) | 
 |  152 { | 
 |  153   AUGMENTS(Filter) | 
 |  154   STATIC_PROPERTY(type, "invalid") | 
 |  155  | 
 |  156   String EMSCRIPTEN_KEEPALIVE InvalidFilter_GetReason(const InvalidFilter* filte
     r) | 
 |  157   { | 
 |  158     return filter->GetReason(); | 
 |  159   } | 
 |  160   READONLY_STRING_PROPERTY(reason, InvalidFilter_GetReason) | 
 |  161 } | 
 |  162  | 
 |  163 CLASS(CommentFilter) | 
 |  164 { | 
 |  165   AUGMENTS(Filter) | 
 |  166   STATIC_PROPERTY(type, "comment") | 
 |  167 } | 
 |  168  | 
 |  169 CLASS(ActiveFilter) | 
 |  170 { | 
 |  171   AUGMENTS(Filter) | 
 |  172  | 
 |  173   EXPOSE_FILTER_PROPERTY(ActiveFilter, bool, disabled, GetDisabled, SetDisabled)
     ; | 
 |  174   EXPOSE_FILTER_PROPERTY(ActiveFilter, unsigned int, hitCount, GetHitCount, SetH
     itCount); | 
 |  175   EXPOSE_FILTER_PROPERTY(ActiveFilter, unsigned int, lastHit, GetLastHit, SetLas
     tHit); | 
 |  176  | 
 |  177   bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsActiveOnDomain( | 
 |  178     const ActiveFilter* filter, String& domain, String& sitekey) | 
 |  179   { | 
 |  180     return filter->IsActiveOnDomain(domain, sitekey); | 
 |  181   } | 
 |  182   METHOD(isActiveOnDomain, ActiveFilter_IsActiveOnDomain) STRING_ARG(0) STRING_A
     RG(1) | 
 |  183  | 
 |  184   bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsActiveOnlyOnDomain( | 
 |  185     const ActiveFilter* filter, String& domain) | 
 |  186   { | 
 |  187     return filter->IsActiveOnlyOnDomain(domain); | 
 |  188   } | 
 |  189   METHOD(isActiveOnlyOnDomain, ActiveFilter_IsActiveOnlyOnDomain) STRING_ARG(0) | 
 |  190  | 
 |  191   bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsGeneric(const ActiveFilter* filter) | 
 |  192   { | 
 |  193     return filter->IsGeneric(); | 
 |  194   } | 
 |  195   METHOD(isGeneric, ActiveFilter_IsGeneric) | 
 |  196 } | 
 |  197  | 
 |  198 CLASS(RegExpFilter) | 
 |  199 { | 
 |  200   AUGMENTS(ActiveFilter) | 
 |  201   STATIC_PROPERTY(type, "blocking") | 
 |  202  | 
 |  203   bool EMSCRIPTEN_KEEPALIVE RegExpFilter_Matches(const RegExpFilter* filter, | 
 |  204       String& location, int typeMask, String& docDomain, bool thirdParty, | 
 |  205       String& sitekey) | 
 |  206   { | 
 |  207     return filter->Matches(location, typeMask, docDomain, thirdParty, sitekey); | 
 |  208   } | 
 |  209   METHOD(matches, RegExpFilter_Matches) STRING_ARG(0) STRING_ARG(2) STRING_ARG(4
     ) | 
 |  210  | 
 |  211   void EMSCRIPTEN_KEEPALIVE RegExpFilter_InitJSTypes() | 
 |  212   { | 
 |  213     RegExpFilter::InitJSTypes(); | 
 |  214   } | 
 |  215   CLASS_INIT(RegExpFilter_InitJSTypes) | 
 |  216 } | 
 |  217  | 
 |  218 CLASS(WhitelistFilter) | 
 |  219 { | 
 |  220   AUGMENTS(RegExpFilter) | 
 |  221   STATIC_PROPERTY(type, "whitelist") | 
 |  222 } | 
 |  223  | 
 |  224 CLASS(ElemHideBase) | 
 |  225 { | 
 |  226   AUGMENTS(ActiveFilter) | 
 |  227  | 
 |  228   String EMSCRIPTEN_KEEPALIVE ElemHideBase_GetSelector( | 
 |  229       const ElemHideBase* filter) | 
 |  230   { | 
 |  231     return filter->GetSelector(); | 
 |  232   } | 
 |  233   READONLY_STRING_PROPERTY(selector, ElemHideBase_GetSelector) | 
 |  234  | 
 |  235   String EMSCRIPTEN_KEEPALIVE ElemHideBase_GetSelectorDomain( | 
 |  236       const ElemHideBase* filter) | 
 |  237   { | 
 |  238     return filter->GetSelectorDomain(); | 
 |  239   } | 
 |  240   READONLY_STRING_PROPERTY(selectorDomain, ElemHideBase_GetSelectorDomain) | 
 |  241 } | 
 |  242  | 
 |  243 CLASS(ElemHideFilter) | 
 |  244 { | 
 |  245   AUGMENTS(ElemHideBase) | 
 |  246   STATIC_PROPERTY(type, "elemhide") | 
 |  247 } | 
 |  248  | 
 |  249 CLASS(ElemHideException) | 
 |  250 { | 
 |  251   AUGMENTS(ElemHideBase) | 
 |  252   STATIC_PROPERTY(type, "elemhideexception") | 
 |  253 } | 
 |  254  | 
 |  255 CLASS(CSSPropertyFilter) | 
 |  256 { | 
 |  257   AUGMENTS(ElemHideBase) | 
 |  258   STATIC_PROPERTY(type, "cssproperty") | 
 |  259  | 
 |  260   String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetRegExpString( | 
 |  261       const CSSPropertyFilter* filter) | 
 |  262   { | 
 |  263     return filter->GetRegExpString(); | 
 |  264   } | 
 |  265   READONLY_STRING_PROPERTY(regexpString, CSSPropertyFilter_GetRegExpString) | 
 |  266  | 
 |  267   String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetSelectorPrefix( | 
 |  268       const CSSPropertyFilter* filter) | 
 |  269   { | 
 |  270     return filter->GetSelectorPrefix(); | 
 |  271   } | 
 |  272   READONLY_STRING_PROPERTY(selectorPrefix, CSSPropertyFilter_GetSelectorPrefix) | 
 |  273  | 
 |  274   String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetSelectorSuffix( | 
 |  275       const CSSPropertyFilter* filter) | 
 |  276   { | 
 |  277     return filter->GetSelectorSuffix(); | 
 |  278   } | 
 |  279   READONLY_STRING_PROPERTY(selectorSuffix, CSSPropertyFilter_GetSelectorSuffix) | 
 |  280 } | 
 |  281  | 
 |  282 #pragma clang diagnostic pop | 
| OLD | NEW |