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 FilterPtr& filter)\ |
| 58 {\ |
| 59 return std::dynamic_pointer_cast<class>(filter)->getter();\ |
| 60 }\ |
| 61 void EMSCRIPTEN_KEEPALIVE class##_##setter(\ |
| 62 const FilterPtr& filter, type value)\ |
| 63 {\ |
| 64 std::dynamic_pointer_cast<class>(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 FilterPtr* EMSCRIPTEN_KEEPALIVE CreatePointer() |
| 103 { |
| 104 FilterPtr* result = new FilterPtr(); |
| 105 annotate_address(result, "FilterPtr"); |
| 106 return result; |
| 107 } |
| 108 |
| 109 void EMSCRIPTEN_KEEPALIVE DeletePointer(FilterPtr* ptr) |
| 110 { |
| 111 delete ptr; |
| 112 } |
| 113 } |
| 114 |
| 115 DIFFERENTIATOR(Filter, Filter_GetType) |
| 116 ASSOCIATE(1, InvalidFilter) |
| 117 ASSOCIATE(2, CommentFilter) |
| 118 ASSOCIATE(3, RegExpFilter) |
| 119 ASSOCIATE(4, WhitelistFilter) |
| 120 ASSOCIATE(5, ElemHideFilter) |
| 121 ASSOCIATE(6, ElemHideException) |
| 122 ASSOCIATE(7, CSSPropertyFilter) |
| 123 |
| 124 CLASS(Filter) |
| 125 { |
| 126 String EMSCRIPTEN_KEEPALIVE Filter_GetText(const FilterPtr& filter) |
| 127 { |
| 128 return filter->GetText(); |
| 129 } |
| 130 READONLY_STRING_PROPERTY(text, Filter_GetText) |
| 131 |
| 132 Filter::Type EMSCRIPTEN_KEEPALIVE Filter_GetType(const FilterPtr& filter) |
| 133 { |
| 134 return filter->GetType(); |
| 135 } |
| 136 |
| 137 String EMSCRIPTEN_KEEPALIVE Filter_Serialize(const FilterPtr& filter) |
| 138 { |
| 139 return filter->Serialize(); |
| 140 } |
| 141 METHOD(serialize, Filter_Serialize) RETURNS_STRING |
| 142 |
| 143 FilterPtr EMSCRIPTEN_KEEPALIVE Filter_FromText(String& text) |
| 144 { |
| 145 return Filter::FromText(text); |
| 146 } |
| 147 CLASS_METHOD(fromText, Filter_FromText) STRING_ARG(0) RETURNS_POINTER(Filter) |
| 148 |
| 149 String EMSCRIPTEN_KEEPALIVE Filter_Normalize(String& text) |
| 150 { |
| 151 return Filter::Normalize(text); |
| 152 } |
| 153 CLASS_METHOD(normalize, Filter_Normalize) STRING_ARG(0) RETURNS_STRING |
| 154 } |
| 155 |
| 156 CLASS(InvalidFilter) |
| 157 { |
| 158 AUGMENTS(Filter) |
| 159 STATIC_PROPERTY(type, "invalid") |
| 160 |
| 161 String EMSCRIPTEN_KEEPALIVE InvalidFilter_GetReason(const FilterPtr& filter) |
| 162 { |
| 163 return std::dynamic_pointer_cast<InvalidFilter>(filter)->GetReason(); |
| 164 } |
| 165 READONLY_STRING_PROPERTY(reason, InvalidFilter_GetReason) |
| 166 } |
| 167 |
| 168 CLASS(CommentFilter) |
| 169 { |
| 170 AUGMENTS(Filter) |
| 171 STATIC_PROPERTY(type, "comment") |
| 172 } |
| 173 |
| 174 CLASS(ActiveFilter) |
| 175 { |
| 176 AUGMENTS(Filter) |
| 177 |
| 178 EXPOSE_FILTER_PROPERTY(ActiveFilter, bool, disabled, GetDisabled, SetDisabled)
; |
| 179 EXPOSE_FILTER_PROPERTY(ActiveFilter, unsigned int, hitCount, GetHitCount, SetH
itCount); |
| 180 EXPOSE_FILTER_PROPERTY(ActiveFilter, unsigned int, lastHit, GetLastHit, SetLas
tHit); |
| 181 |
| 182 bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsActiveOnDomain( |
| 183 const FilterPtr& filter, String& domain, String& sitekey) |
| 184 { |
| 185 return std::dynamic_pointer_cast<ActiveFilter>(filter)->IsActiveOnDomain( |
| 186 domain, sitekey |
| 187 ); |
| 188 } |
| 189 METHOD(isActiveOnDomain, ActiveFilter_IsActiveOnDomain) STRING_ARG(0) STRING_A
RG(1) |
| 190 |
| 191 bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsActiveOnlyOnDomain( |
| 192 const FilterPtr& filter, String& domain) |
| 193 { |
| 194 return std::dynamic_pointer_cast<ActiveFilter>(filter)->IsActiveOnlyOnDomain
( |
| 195 domain |
| 196 ); |
| 197 } |
| 198 METHOD(isActiveOnlyOnDomain, ActiveFilter_IsActiveOnlyOnDomain) STRING_ARG(0) |
| 199 |
| 200 bool EMSCRIPTEN_KEEPALIVE ActiveFilter_IsGeneric(const FilterPtr& filter) |
| 201 { |
| 202 return std::dynamic_pointer_cast<ActiveFilter>(filter)->IsGeneric(); |
| 203 } |
| 204 METHOD(isGeneric, ActiveFilter_IsGeneric) |
| 205 } |
| 206 |
| 207 CLASS(RegExpFilter) |
| 208 { |
| 209 AUGMENTS(ActiveFilter) |
| 210 STATIC_PROPERTY(type, "blocking") |
| 211 |
| 212 bool EMSCRIPTEN_KEEPALIVE RegExpFilter_Matches(const FilterPtr& filter, |
| 213 String& location, int typeMask, String& docDomain, bool thirdParty, |
| 214 String& sitekey) |
| 215 { |
| 216 return std::dynamic_pointer_cast<RegExpFilter>(filter)->Matches( |
| 217 location, typeMask, docDomain, thirdParty, sitekey |
| 218 ); |
| 219 } |
| 220 METHOD(matches, RegExpFilter_Matches) STRING_ARG(0) STRING_ARG(2) STRING_ARG(4
) |
| 221 |
| 222 void EMSCRIPTEN_KEEPALIVE RegExpFilter_InitJSTypes() |
| 223 { |
| 224 RegExpFilter::InitJSTypes(); |
| 225 } |
| 226 CLASS_INIT(RegExpFilter_InitJSTypes) |
| 227 } |
| 228 |
| 229 CLASS(WhitelistFilter) |
| 230 { |
| 231 AUGMENTS(RegExpFilter) |
| 232 STATIC_PROPERTY(type, "whitelist") |
| 233 } |
| 234 |
| 235 CLASS(ElemHideBase) |
| 236 { |
| 237 AUGMENTS(ActiveFilter) |
| 238 |
| 239 String EMSCRIPTEN_KEEPALIVE ElemHideBase_GetSelector( |
| 240 const FilterPtr& filter) |
| 241 { |
| 242 return std::dynamic_pointer_cast<ElemHideBase>(filter)->GetSelector(); |
| 243 } |
| 244 READONLY_STRING_PROPERTY(selector, ElemHideBase_GetSelector) |
| 245 |
| 246 String EMSCRIPTEN_KEEPALIVE ElemHideBase_GetSelectorDomain( |
| 247 const FilterPtr& filter) |
| 248 { |
| 249 return std::dynamic_pointer_cast<ElemHideBase>(filter)->GetSelectorDomain(); |
| 250 } |
| 251 READONLY_STRING_PROPERTY(selectorDomain, ElemHideBase_GetSelectorDomain) |
| 252 } |
| 253 |
| 254 CLASS(ElemHideFilter) |
| 255 { |
| 256 AUGMENTS(ElemHideBase) |
| 257 STATIC_PROPERTY(type, "elemhide") |
| 258 } |
| 259 |
| 260 CLASS(ElemHideException) |
| 261 { |
| 262 AUGMENTS(ElemHideBase) |
| 263 STATIC_PROPERTY(type, "elemhideexception") |
| 264 } |
| 265 |
| 266 CLASS(CSSPropertyFilter) |
| 267 { |
| 268 AUGMENTS(ElemHideBase) |
| 269 STATIC_PROPERTY(type, "cssproperty") |
| 270 |
| 271 String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetRegExpString( |
| 272 const FilterPtr& filter) |
| 273 { |
| 274 return std::dynamic_pointer_cast<CSSPropertyFilter>(filter)->GetRegExpString
(); |
| 275 } |
| 276 READONLY_STRING_PROPERTY(regexpString, CSSPropertyFilter_GetRegExpString) |
| 277 |
| 278 String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetSelectorPrefix( |
| 279 const FilterPtr& filter) |
| 280 { |
| 281 return std::dynamic_pointer_cast<CSSPropertyFilter>(filter)->GetSelectorPref
ix(); |
| 282 } |
| 283 READONLY_STRING_PROPERTY(selectorPrefix, CSSPropertyFilter_GetSelectorPrefix) |
| 284 |
| 285 String EMSCRIPTEN_KEEPALIVE CSSPropertyFilter_GetSelectorSuffix( |
| 286 const FilterPtr& filter) |
| 287 { |
| 288 return std::dynamic_pointer_cast<CSSPropertyFilter>(filter)->GetSelectorSuff
ix(); |
| 289 } |
| 290 READONLY_STRING_PROPERTY(selectorSuffix, CSSPropertyFilter_GetSelectorSuffix) |
| 291 } |
| 292 |
| 293 #pragma clang diagnostic pop |
OLD | NEW |