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 |