<div dir="ltr"><div class="gmail_extra">I wrote a script to convert our filters into WebKit&#39;s block list format:<br></div><div class="gmail_extra"><a href="https://github.com/snoack/abp2blocklist/blob/master/abp2blocklist.js" target="_blank">https://github.com/snoack/abp2blocklist/blob/master/abp2blocklist.js</a><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Here is the output for EasyList (our default filter list):</div><div class="gmail_extra"><a href="https://raw.githubusercontent.com/snoack/abp2blocklist/master/easylist.json" target="_blank">https://raw.githubusercontent.com/snoack/abp2blocklist/master/easylist.json</a></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Note that it uses some extensions to the format, which I suggested in my previous emails:</div><div class="gmail_extra"><br></div><div class="gmail_extra">1. Some rules specify &quot;ignore-previous-rules-in-document&quot; as action type. If any of these rules matches for a document (toplevel or subframe), no resource in that document or any of its subframes or their subframes should be blocked or hidden according to the rules given above. Neither should any &quot;css-display-none&quot; rule above, hide any elements there.</div><div class="gmail_extra"><br></div><div class="gmail_extra">2. Some rules set trigger.collapse to true. Elements like images and subframes who don&#39;t load due to being blocked by a rule using that option, should not show a placeholder on the page, but are supposed to be hidden like per &quot;display: none&quot;.</div><div class="gmail_extra"><br></div><div class="gmail_extra">3. The resource type &quot;subdocument&quot; should match documents loaded in a subframe. The resource type &quot;document&quot; isn&#39;t used, but I suggest to make it match only toplevel documents.</div><div class="gmail_extra"><br></div><div class="gmail_extra">4. The resource type &quot;object&quot; should match &lt;object&gt; and &lt;embed&gt; elements (loading a Flash video for example).</div><div class="gmail_extra"><br></div><div class="gmail_extra">5. The resource type &quot;object-subrequest&quot; should match requests initiated by a third-party plugin like Flash. Most of these requests we do block are in-video ads.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">One other assumptions:</div><div class="gmail_extra"><br></div><div class="gmail_extra">Our filters doesn&#39;t consider subdomains as third-party. Also we don&#39;t consider the protocol for third-party checks. So if Â trigger.load-type is set to &quot;third-party&quot; it is not supposed to match resources like <a href="https://foo.example.co.uk/img.png" target="_blank">https://foo.example.co.uk/img.png</a> on <a href="http://bar.example.co.uk" target="_blank">http://bar.example.co.uk</a>. We compare the &quot;basedomain&quot;, which is the public suffix (<a href="https://publicsuffix.org/" target="_blank">https://publicsuffix.org/</a>) plus one more part (&quot;<a href="http://example.co.uk" target="_blank">example.co.uk</a>&quot; in this example) to determine whether something is third-party or first-party. Without this logic websites on domains that serve ads on other websites (e.g. websites from ad providers) are broken if you visit them directly.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Similar for &quot;if-domain&quot; and &quot;unless-domain&quot;. Our filters assume &quot;<a href="http://example.com" target="_blank">example.com</a>&quot; to match &quot;<a href="http://www.example.com" target="_blank">www.example.com</a>&quot; or &quot;<a href="http://this.is.still.example.com" target="_blank">this.is.still.example.com</a>&quot; as well. However, the logic implemented here is more trivial, and corresponds to /^(.*\.)*<a href="http://example.com" target="_blank">example.com</a>$/. But this is even more critical, as many websites use different subdomains.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Sebastian</div></div>