lewisje's experimental stuff

Everything about using Adblock Plus on Google Chrome
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

lewisje's experimental stuff

Post by lewisje »

While making this post, I got an idea: forum/viewtopic.php?p=56457#p56457

I have decided to make available some data: URIs for blank audio and video formats, for use if "swapping out" is to be more widely implemented, including in the Firefox extension.

blank.wav (one frame, 48kHz)

Code: Select all

data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEAgLsAAAB3AQACABAAZGF0YQAAAAA=
blank.mid (one instrument, no frames)

Code: Select all

data:application/octet-stream;base64,TVRoZAAAAAYAAQACA8BNVHJrAAAAYgD/fw8FDxwyMDEyLjAxLjAxAQMA/38qBQ8tTWljcm9zb2Z0IFNhbnMgU2VyaWYsOC4yNSxGYWxzZSxGYWxzZSwxAP9YBAQCGAgA/38LBQ8SAwN/fwD/AQQA/1kCAAAA/y8ATVRyawAAACQA/38FBQ8JQAkA/38JBQ8GPG5vbmU+AP8DASAA/yABAAD/LwA=
blank.webm

Code: Select all

data:video/webm;base64,GkXfo6pChoEBQveBAULygQRC84EIQoKEd2VibeyJAAAAAAAAAAAAQoeBAkKFgQIYU4BnAQAAAAAAAMMRTZt0v027klOrhBVJqWZTrIgAAAAAAAAARE27klOrhBZUrmtTrIgAAAAAAAAAgE27klOrhBxTu2tTrIgAAAAAAAAAuxVJqWZANirXsYQAD0JARImEAAAAAE2AkHdlYm1tdXgtMC45LjEyLjBXQZFtYWtld2VibS0wLjkuMTIuMBZUrmtANa5AMteBAXPFiACOzirRHOIYg4EBhoVWX1ZQOCWGiINWUDjgQBCwggACuoIAAiOD44RByAAAHFO7axAAAAA=
blank.mkv

Code: Select all

data:video/x-matroska;base64,GkXfo6NChoEBQveBAULygQRC84EIQoKIbWF0cm9za2FCh4ECQoWBAhhTgGf/FUmpZr1NgJhIYWFsaSBNYXRyb3NrYSBXcml0ZXIgYjBXQZJ4MjY0IHIyMTQ2IGJjZDQxZGIq17GCw1BEiYRESAAAFlSua+eu5deBAXPFgQGDgQGcgQCGj1ZfTVBFRzQvSVNPL0FWQ2OiqAH0AAr/4QAXZ/QACqbrI/EREIAAAAMAgAAAGUeJEyQBAAZo68Am8sAj44OEAmJaAOCSsIECuoECVLKBAFSwgQJUuoECH0O2dUN454EAo0NygQAAgAAAAfkGBf/13EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDEyMCByMjE0NiBiY2Q0MWRiIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTAgOHg4ZGN0PTEgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0wIGNocm9tYV9xcF9vZmZzZXQ9MCB0aHJlYWRzPTMgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByYz1jcXAgbWJ0cmVlPTAgcXA9MACAAAABbWWIhK/YX2pQp/PNtC3Ao9VzD6jvx/xbCnAlOLfYUo8igYFxjpHU4M/WQEEudhU0UhcqS4aIHP0wSQr61EfOJNQzLzC7e9epsc6GOt8obp9woKMkBAq8F/C0aOPisAFgLdMijXHI8CGY38vMCUWz/A98x2CPBxjQrlvE8TJ2omexx7KTO6zdCDG1P+KcjJEmx6gKtsGv2CR/NLpzJFOsJxGb6+3oSSZQYb92qfuU4f9KX4YpMCQrF0Hy1AOiIY2JCqzn+OM+MjuLeQq+s5cAz2QVS8VCky4rseAgMXDjOQ8yfaV4xoVwCNSnpq8sFBh0SH2klIk7xrME3ZXCikSJt5KLsC3qRz+9XBlqSMYNBBPErfHgn5jBbNTAVI5Ofn632a3n0nX8L2fbAvGyh0f4KQ3jLqkmOMQqRD/P1O8bbUnkE3rBQAHRj/XiCQvs1k1gJ9ym8f9InNIeaRAjK7KMG/leDjBuvHo7LqqRf+TF
blank.flv

Code: Select all

data:video/x-flv;base64,RkxWAQEAAAAJAAAAABIAAJ8AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAHAAV3aWR0aABAAAAAAAAAAAAGaGVpZ2h0AEAAAAAAAAAAAAlmcmFtZXJhdGUAQDkAAAAAAAAADHZpZGVvY29kZWNpZABAHAAAAAAAAAAIZHVyYXRpb24AP6R64UeuFHsACGZpbGVzaXplAECR5AAAAAAAAA12aWRlb2RhdGFyYXRlAEBsoAAAAAAAAAAJAAAAqgkAAC0AAAAAAAAAFwAAAAAB9AAK/+EAF2f0AAqm6yPxERCAAAADAIAAABlHiRMkAQAGaOvAJvLAAAAAOAkAA3MAAAAAAAAAFwEAAAAAAAH5BgX/9dxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxMjAgcjIxNDYgYmNkNDFkYiAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTEgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0xIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDM6MHgxMTMgbWU9aGV4IHN1Ym1lPTcgcHN5PTAgbWl4ZWRfcmVmPTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0wIDh4OGRjdD0xIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3RfcHNraXA9MCBjaHJvbWFfcXBfb2Zmc2V0PTAgdGhyZWFkcz0zIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0yNSBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmM9Y3FwIG1idHJlZT0wIHFwPTAAgAAAAW1liISv2F9qUKfzzbQtwKPVcw+o78f8WwpwJTi32FKPIoGBcY6R1ODP1kBBLnYVNFIXKkuGiBz9MEkK+tRHziTUMy8wu3vXqbHOhjrfKG6fcKCjJAQKvBfwtGjj4rABYC3TIo1xyPAhmN/LzAlFs/wPfMdgjwcY0K5bxPEydqJnsceykzus3QgxtT/inIyRJseoCrbBr9gkfzS6cyRTrCcRm+vt6EkmUGG/dqn7lOH/Sl+GKTAkKxdB8tQDoiGNiQqs5/jjPjI7i3kKvrOXAM9kFUvFQpMuK7HgIDFw4zkPMn2leMaFcAjUp6avLBQYdEh9pJSJO8azBN2VwopEibeSi7At6kc/vVwZakjGDQQTxK3x4J+YwWzUwFSOTn5+t9mt59J1/C9n2wLxsodH+CkN4y6pJjjEKkQ/z9TvG21J5BN6wUAB0Y/14gkL7NZNYCfcpvH/SJzSHmkQIyuyjBv5Xg4wbrx6Oy6qkX/kxQAAA34=
blank.mp4

Code: Select all

data:video/mp4;base64,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
blank.avi

Code: Select all

data:video/avi;base64,UklGRmgQAABBVkkgTElTVMAAAABoZHJsYXZpaDgAAABAnAAAAAAAAAAAAAAQCQAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExJU1R0AAAAc3RybHN0cmg4AAAAdmlkc01QTkcAAAAAAAAAAAAAAAABAAAAGQAAAAAAAAABAAAAQwAAAAAAAAAAAAAAAAAAAAAAAABzdHJmKAAAACgAAAAAAAAAAAAAAAEAGABNUE5HAAAAAAAAAAAAAAAAAAAAAAAAAABMSVNULgAAAElORk9JU0ZUIgAAAE1FbmNvZGVyIFNoZXJweWEtU1ZOLXIzNDQwMS00LjYuMgBKVU5L7g4AAFs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbExJU1RQAAAAbW92aTAwZGNDAAAAiVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJgggBpZHgxEAAAADAwZGMAAAAABAAAAEMAAAA=
This could be extended with things like "blank.swf" and "blank.dcr" and even "blank.jar" but maybe they could all be taken care of with a simple "data:application/octet-stream," (with nothing after it); all this would be difficult because according to the documentation: http://code.google.com/chrome/extension ... uestFilter
The distinguished types are...
main_frame (equivalent to Mozilla's "document")
image
object
script
stylesheet
sub_frame (equivalent to Mozilla's "subdocument")
xmlhttprequest
other
...which are all also in nsIContentPolicy, but that also allows for
cookie
dtd
font
geo
indexedDB
install
media (->object?)
objectsubrequest (->object)
ping
popup
refresh
xbl
I suspect that most of these would be considered by WebRequest to be "other"

Anyway, I just uploaded a special build of ABP Experimental that makes a few useful changes...
First, all icons are losslessly optimized.
Next, the main document can be blocked too.
Finally, all filtered request types are redirected to something: document/subdocument to about:blank, xmlhttprequest to "data:application/xml," (blank XML file), script to "data:text/javascript," (blank script), stylesheet to "data:text/css," (blank CSS), object/other to "data:application/octet-stream," (blank binary file).
Get it here: https://jansal.googlecode.com/svn/trunk ... mental.crx

The changes I made to webrequest.js are as follows...

Code: Select all

22,23c22,23
<     return;
< 
---
>     //return;
>     type = "DOCUMENT";
25c25
<   if (type == "sub_frame")
---
>   else if (type == "sub_frame")
41c41
<     if (collapse && type == "SUBDOCUMENT")
---
>     if (collapse && (type == "DOCUMENT" || type == "SUBDOCUMENT"))
42a43,48
>     else if (collapse && type == "SCRIPT")
>       return {redirectUrl: "data:text/javascript,"};
>     else if (collapse && type == "STYLESHEET")
>       return {redirectUrl: "data:text/css,"};
>     else if (collapse && type == "XMLHTTPREQUEST")
>       return {redirectUrl: "data:application/xml,"};
44c50,52
<       return {redirectUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="};
---
>       return {redirectUrl: "data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="};
>     else if (collapse && (type == "OBJECT" || type == "OTHER"))
>       return {redirectUrl: "data:application/octet-stream,"};
133c141
< }
---
> }
\ No newline at end of file
Basically, I made "main_frame" requests actually blockable, set up the redirections for various media types, and changed the redirection image from that PNG to the GIF I love so much; here some more conditionals on the URL or some other aspect of the request may help in using one of those other blank swap-outs...

In manifest.json I added "swap-out" after "experimental" and changed the update URL so that Palant's own experimental builds won't overwrite this; besides the aforementioned lossless optimization of PNG icons, I changed no other files in the extension.

Its "update URL" is now about:blank, so it doesn't update, but once I get the hang of making an update XML, I just might make one and then try as well as possible to follow the progress of Palant's updates...

EDIT: It now uses a set of regexp-matching conditionals on the file-extension if it's an "OBJECT" and then if it doesn't find anything defaults to the old "data:application/octet-stream,"
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

Webrequest

Post by lewisje »

I have updated the "experimental swap-out build" described in my earlier post: forum/viewtopic.php?p=56465#p56465
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

Re: Webrequest

Post by lewisje »

I have updated that build a couple times since my last post, and I finally bothered to implement a proper update-seeking mechanism; I'm still not updating it as much as Eyeo updates the upstream extension, but from here on out, my experimental swap-out build will auto-update (and it still won't overwrite ABP development or release builds).
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

Re: Webrequest

Post by lewisje »

Coming up, a new "blank.swf" based on the nullserv code: https://github.com/flexiondotorg/nullse ... nullserv.c

Code: Select all

data:application/x-shockwave-flash;base64,iAgCNQBCdWZmZXIATmF0aXZlAGxvYWQAQnVmZmVyX2xvYWQAcHJvdG90eXBlAGRpZmYAQnVmZmVyX2RpZmYAZmluZABCdWZmZXJfZmluZABzdWIAQnVmZmVyX3N1YgB0b1N0cmluZwBCdWZmZXJfdG9TdHJpbmcASW1hZ2UAY29tcGFyZQBJbWFnZV9jb21wYXJlAHNhdmUASW1hZ2Vfc2F2ZQBTb2NrZXQAY2xvc2UAU29ja2V0X2Nsb3NlAGVycm9yAFNvY2tldF9lcnJvcgBzZW5kAFNvY2tldF9zZW5kAGNsb3NlZABTb2NrZXRfZ2V0X2Nsb3NlZABhZGRQcm9wZXJ0eQBUZXN0AGFkdmFuY2UAVGVzdF9hZHZhbmNlAG1vdXNlX21vdmUAVGVzdF9tb3VzZV9tb3ZlAG1vdXNlX3ByZXNzAFRlc3RfbW91c2VfcHJlc3MAbW91c2VfcmVsZWFzZQBUZXN0X21vdXNlX3JlbGVhc2UAcmVuZGVyAFRlc3RfcmVuZGVyAHJlc2V0AFRlc3RfcmVzZXQAcmF0ZQBUZXN0X2dldF9yYXRlAHF1aXQAVGVzdF9nZXRfcXVpdAB0cmFjZQBUZXN0X2dldF90cmFjZQBsYXVuY2hlZABUZXN0X2dldF9sYXVuY2hlZABwcmludABzAElORk86IABFUlJPUjogAJYEAAgACAEclgIACABOHZYCAAgAHJYEAAgCCAEclgIACANOT5YCAAgAHJYHAAgEBwAAAABDT5YCAAgAHJYCAAgETpYEAAgFCAEclgIACAZOT5YCAAgAHJYCAAgETpYEAAgHCAEclgIACAhOT5YCAAgAHJYCAAgETpYEAAgJCAEclgIACApOT5YCAAgAHJYCAAgETpYEAAgLCAEclgIACAxOT5YEAAgNCAEclgIACA1OHZYCAAgNHJYHAAgEBwAAAABDT5YCAAgNHJYCAAgETpYEAAgOCAEclgIACA9OT5YCAAgNHJYCAAgETpYEAAgQCAEclgIACBFOT5YCAAgSmwUAAAAAAAAdlgIACBIclgcACAQHAAAAAENPlgIACBIclgIACAROlgQACBMIARyWAgAIFE5PlgIACBIclgIACAROlgQACBUIARyWAgAIFk5PlgIACBIclgIACAROlgQACBcIARyWAgAIGE5PlgMAAggBHJYCAAgaTpYJAAgZBwMAAAAIEhyWAgAIBE6WAgAIG1IXlgQACBwIARyWAgAIHE4dlgIACBwclgcACAQHAAAAAENPlgIACBwclgIACAROlgQACB0IARyWAgAIHk5PlgIACBwclgIACAROlgQACB8IARyWAgAIIE5PlgIACBwclgIACAROlgQACCEIARyWAgAIIk5PlgIACBwclgIACAROlgQACCMIARyWAgAIJE5PlgIACBwclgIACAROlgQACCUIARyWAgAIJk5PlgIACBwclgIACAROlgQACCcIARyWAgAIKE5PlgMAAggBHJYCAAgqTpYJAAgpBwMAAAAIHByWAgAIBE6WAgAIG1IXlgMAAggBHJYCAAgsTpYJAAgrBwMAAAAIHByWAgAIBE6WAgAIG1IXlgMAAggBHJYCAAguTpYJAAgtBwMAAAAIHByWAgAIBE6WAgAIG1IXlgMAAggBHJYCAAgwTpYJAAgvBwMAAAAIHByWAgAIBE6WAgAIG1IXlgIACDGbBwAAAQBzACcAlgIACDIcEp0CABsAlgQACDMIMhxHlgcABwEAAAAIARyWAgAIMVIXHZYCAAgVmwcAAAEAcwAnAJYCAAgyHBKdAgAbAJYEAAg0CDIcR5YHAAcBAAAACAEclgIACDFSFx0A
Now also available in the very latest pixelserv (V32), for those who use router-based conent-blocking: http://www.linksysinfo.org/index.php?th ... ost-229342

EDIT: I've also included the classic PNG replacement for PNG requests, and the following 1x1-pixel white JPEG for JPG requests, also from the nullserv project:

Code: Select all

data:image/jpeg;base64,/9j/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAALCAABAAEBAREA/8QAFAABAAAAAAAAAAAAAAAAAAAACv/EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAD8Afw//2Q==
I was about to use the nullserv PNG but found it was bigger and I couldn't optimize it anymore, so I'll ask the nullserv maintainer to switch to the smaller replacement PNG.

FURTHER: I just couldn't help myself, so below is a white 1x1-pixel BMP (a little smaller than the PNG, almost as small as the GIF):

Code: Select all

data:image/bmp;base64,Qk06AAAAAAAAADYAAAAoAAAAAQAAAAEAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA/////w==
and here's a 1x1-pixel white TIFF:

Code: Select all

data:image/tiff;base64,SUkqAA4AAACAP+BP+AgSAP4ABAABAAAAAAAAAAABBAABAAAAAQAAAAEBBAABAAAAAQAAAAIBAwAEAAAA7AAAAAMBAwABAAAABQAAAAYBAwABAAAAAgAAABEBBAABAAAACAAAABUBAwABAAAABAAAABYBBAABAAAAAQAAABcBBAABAAAABgAAABoBBQABAAAA9AAAABsBBQABAAAA/AAAABwBAwABAAAAAQAAACgBAwABAAAAAgAAADEBAgASAAAABAEAAD0BAwABAAAAAgAAAFIBAwABAAAAAgAAAJBQAwBAAAAAFgEAAAAAAAAIAAgACAAIAAB3AQDoAwAAAHcBAOgDAABQYWludC5ORVQgdjMuNS4xMAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA==
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

Re: Webrequest

Post by lewisje »

I decided to make a similar experimental swap-out build of our competitor Michael Gundlach's AdBlock, after seeing that it uses WebRequest for all Chrome users too: https://jansal.googlecode.com/svn/trunk ... mental.crx
If you want to make a swap-out build for AdBlock, download the original CRX here (use a browser other than Chrome): https://clients2.google.com/service/upd ... lidom%26uc

For reference, here is the link to my experimental swap-out build of ABP for Chrome: https://jansal.googlecode.com/svn/trunk ... mental.crx


Both of them are changed, because I saw in the source code to Gundlach's extension that he uses the same null image as ABP (at least as ABP once used) and Ghostery to avoid conflict errors, so instead of those clever custom images based on filetype, I just use that PNG; it is to Gundlach's credit that he still uses the strategy of redirecting to null content instead of just cancelling all the time.


Here is the diff for webrequest.js between the latest experimental build of ABP and my swap-out build...

Code: Select all

66c66
<   if (type == "main_frame" || type == "sub_frame")
---
>   if (type == "main_frame" || type == "sub_frame" || type == "frame")
70c70
<     return {};
---
>     type = "DOCUMENT";
73c73
<   if (type == "sub_frame")
---
>   else if (type == "sub_frame" || type == "frame")
80a81,124
>   {
>     if (type == "DOCUMENT" || type == "SUBDOCUMENT")
>       return {redirectUrl: "about:blank"};
>     else if (type == "SCRIPT")
>       return {redirectUrl: "data:text/javascript,"};
>     else if (type == "STYLESHEET")
>       return {redirectUrl: "data:text/css,"};
>     else if (type == "XMLHTTPREQUEST")
>       return {redirectUrl: "data:application/xml,"};
>     else if (type == "IMAGE" || type == "BACKGROUND") {//Same URL as AdBlock and Ghostery to prevent conflict warnings
> /*      if (/\.a?png|pnga|ping$/.test(details.url)) */
>         return {redirectUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="};
> /*      else if (/\.jpe?g$/.test(details.url))
>         return {redirectUrl: "data:image/jpeg;base64,/9j/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAALCAABAAEBAREA/8QAFAABAAAAAAAAAAAAAAAAAAAACv/EABQQAQAAAAAAAAAAAAAAAAAAAAD/2gAIAQEAAD8Afw//2Q=="};
>       else if (/\.(bmp|dib)$/.test(details.url))
>         return {redirectUrl: "data:image/bmp;base64,Qk06AAAAAAAAADYAAAAoAAAAAQAAAAEAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA/////w=="};
>       else if (/\.tiff?$/.test(details.url))
>         return {redirectUrl: "data:image/tiff;base64,SUkqAA4AAACAP+BP+AgSAP4ABAABAAAAAAAAAAABBAABAAAAAQAAAAEBBAABAAAAAQAAAAIBAwAEAAAA7AAAAAMBAwABAAAABQAAAAYBAwABAAAAAgAAABEBBAABAAAACAAAABUBAwABAAAABAAAABYBBAABAAAAAQAAABcBBAABAAAABgAAABoBBQABAAAA9AAAABsBBQABAAAA/AAAABwBAwABAAAAAQAAACgBAwABAAAAAgAAADEBAgASAAAABAEAAD0BAwABAAAAAgAAAFIBAwABAAAAAgAAAJBQAwBAAAAAFgEAAAAAAAAIAAgACAAIAAB3AQDoAwAAAHcBAOgDAABQYWludC5ORVQgdjMuNS4xMAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAA=="};
>       else
>         return {redirectUrl: "data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="}; */
>     }
>     else if (type == "OBJECT" || type == "OBJECT_SUBREQUEST" || type == "MEDIA") {
>       if (/\.swf$/.test(details.url))
>         return {redirectUrl: "data:application/x-shockwave-flash;base64,iAgCNQBCdWZmZXIATmF0aXZlAGxvYWQAQnVmZmVyX2xvYWQAcHJvdG90eXBlAGRpZmYAQnVmZmVyX2RpZmYAZmluZABCdWZmZXJfZmluZABzdWIAQnVmZmVyX3N1YgB0b1N0cmluZwBCdWZmZXJfdG9TdHJpbmcASW1hZ2UAY29tcGFyZQBJbWFnZV9jb21wYXJlAHNhdmUASW1hZ2Vfc2F2ZQBTb2NrZXQAY2xvc2UAU29ja2V0X2Nsb3NlAGVycm9yAFNvY2tldF9lcnJvcgBzZW5kAFNvY2tldF9zZW5kAGNsb3NlZABTb2NrZXRfZ2V0X2Nsb3NlZABhZGRQcm9wZXJ0eQBUZXN0AGFkdmFuY2UAVGVzdF9hZHZhbmNlAG1vdXNlX21vdmUAVGVzdF9tb3VzZV9tb3ZlAG1vdXNlX3ByZXNzAFRlc3RfbW91c2VfcHJlc3MAbW91c2VfcmVsZWFzZQBUZXN0X21vdXNlX3JlbGVhc2UAcmVuZGVyAFRlc3RfcmVuZGVyAHJlc2V0AFRlc3RfcmVzZXQAcmF0ZQBUZXN0X2dldF9yYXRlAHF1aXQAVGVzdF9nZXRfcXVpdAB0cmFjZQBUZXN0X2dldF90cmFjZQBsYXVuY2hlZABUZXN0X2dldF9sYXVuY2hlZABwcmludABzAElORk86IABFUlJPUjogAJYEAAgACAEclgIACABOHZYCAAgAHJYEAAgCCAEclgIACANOT5YCAAgAHJYHAAgEBwAAAABDT5YCAAgAHJYCAAgETpYEAAgFCAEclgIACAZOT5YCAAgAHJYCAAgETpYEAAgHCAEclgIACAhOT5YCAAgAHJYCAAgETpYEAAgJCAEclgIACApOT5YCAAgAHJYCAAgETpYEAAgLCAEclgIACAxOT5YEAAgNCAEclgIACA1OHZYCAAgNHJYHAAgEBwAAAABDT5YCAAgNHJYCAAgETpYEAAgOCAEclgIACA9OT5YCAAgNHJYCAAgETpYEAAgQCAEclgIACBFOT5YCAAgSmwUAAAAAAAAdlgIACBIclgcACAQHAAAAAENPlgIACBIclgIACAROlgQACBMIARyWAgAIFE5PlgIACBIclgIACAROlgQACBUIARyWAgAIFk5PlgIACBIclgIACAROlgQACBcIARyWAgAIGE5PlgMAAggBHJYCAAgaTpYJAAgZBwMAAAAIEhyWAgAIBE6WAgAIG1IXlgQACBwIARyWAgAIHE4dlgIACBwclgcACAQHAAAAAENPlgIACBwclgIACAROlgQACB0IARyWAgAIHk5PlgIACBwclgIACAROlgQACB8IARyWAgAIIE5PlgIACBwclgIACAROlgQACCEIARyWAgAIIk5PlgIACBwclgIACAROlgQACCMIARyWAgAIJE5PlgIACBwclgIACAROlgQACCUIARyWAgAIJk5PlgIACBwclgIACAROlgQACCcIARyWAgAIKE5PlgMAAggBHJYCAAgqTpYJAAgpBwMAAAAIHByWAgAIBE6WAgAIG1IXlgMAAggBHJYCAAgsTpYJAAgrBwMAAAAIHByWAgAIBE6WAgAIG1IXlgMAAggBHJYCAAguTpYJAAgtBwMAAAAIHByWAgAIBE6WAgAIG1IXlgMAAggBHJYCAAgwTpYJAAgvBwMAAAAIHByWAgAIBE6WAgAIG1IXlgIACDGbBwAAAQBzACcAlgIACDIcEp0CABsAlgQACDMIMhxHlgcABwEAAAAIARyWAgAIMVIXHZYCAAgVmwcAAAEAcwAnAJYCAAgyHBKdAgAbAJYEAAg0CDIcR5YHAAcBAAAACAEclgIACDFSFx0A"};
>       else if (/\.flv$/.test(details.url))
>         return {redirectUrl: "data:video/x-flv;base64,RkxWAQEAAAAJAAAAABIAAJ8AAAAAAAAAAgAKb25NZXRhRGF0YQgAAAAHAAV3aWR0aABAAAAAAAAAAAAGaGVpZ2h0AEAAAAAAAAAAAAlmcmFtZXJhdGUAQDkAAAAAAAAADHZpZGVvY29kZWNpZABAHAAAAAAAAAAIZHVyYXRpb24AP6R64UeuFHsACGZpbGVzaXplAECR5AAAAAAAAA12aWRlb2RhdGFyYXRlAEBsoAAAAAAAAAAJAAAAqgkAAC0AAAAAAAAAFwAAAAAB9AAK/+EAF2f0AAqm6yPxERCAAAADAIAAABlHiRMkAQAGaOvAJvLAAAAAOAkAA3MAAAAAAAAAFwEAAAAAAAH5BgX/9dxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxMjAgcjIxNDYgYmNkNDFkYiAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTEgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0xIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDM6MHgxMTMgbWU9aGV4IHN1Ym1lPTcgcHN5PTAgbWl4ZWRfcmVmPTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0wIDh4OGRjdD0xIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3RfcHNraXA9MCBjaHJvbWFfcXBfb2Zmc2V0PTAgdGhyZWFkcz0zIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0yNSBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmM9Y3FwIG1idHJlZT0wIHFwPTAAgAAAAW1liISv2F9qUKfzzbQtwKPVcw+o78f8WwpwJTi32FKPIoGBcY6R1ODP1kBBLnYVNFIXKkuGiBz9MEkK+tRHziTUMy8wu3vXqbHOhjrfKG6fcKCjJAQKvBfwtGjj4rABYC3TIo1xyPAhmN/LzAlFs/wPfMdgjwcY0K5bxPEydqJnsceykzus3QgxtT/inIyRJseoCrbBr9gkfzS6cyRTrCcRm+vt6EkmUGG/dqn7lOH/Sl+GKTAkKxdB8tQDoiGNiQqs5/jjPjI7i3kKvrOXAM9kFUvFQpMuK7HgIDFw4zkPMn2leMaFcAjUp6avLBQYdEh9pJSJO8azBN2VwopEibeSi7At6kc/vVwZakjGDQQTxK3x4J+YwWzUwFSOTn5+t9mt59J1/C9n2wLxsodH+CkN4y6pJjjEKkQ/z9TvG21J5BN6wUAB0Y/14gkL7NZNYCfcpvH/SJzSHmkQIyuyjBv5Xg4wbrx6Oy6qkX/kxQAAA34="};
>       else if (/\.(webm|ogm|ogv)$/.test(details.url))
>         return {redirectUrl: "data:video/webm;base64,GkXfo6pChoEBQveBAULygQRC84EIQoKEd2VibeyJAAAAAAAAAAAAQoeBAkKFgQIYU4BnAQAAAAAAAMMRTZt0v027klOrhBVJqWZTrIgAAAAAAAAARE27klOrhBZUrmtTrIgAAAAAAAAAgE27klOrhBxTu2tTrIgAAAAAAAAAuxVJqWZANirXsYQAD0JARImEAAAAAE2AkHdlYm1tdXgtMC45LjEyLjBXQZFtYWtld2VibS0wLjkuMTIuMBZUrmtANa5AMteBAXPFiACOzirRHOIYg4EBhoVWX1ZQOCWGiINWUDjgQBCwggACuoIAAiOD44RByAAAHFO7axAAAAA="};
>       else if (/\.mkv$/.test(details.url))
>         return {redirectUrl: "data:video/x-matroska;base64,GkXfo6NChoEBQveBAULygQRC84EIQoKIbWF0cm9za2FCh4ECQoWBAhhTgGf/FUmpZr1NgJhIYWFsaSBNYXRyb3NrYSBXcml0ZXIgYjBXQZJ4MjY0IHIyMTQ2IGJjZDQxZGIq17GCw1BEiYRESAAAFlSua+eu5deBAXPFgQGDgQGcgQCGj1ZfTVBFRzQvSVNPL0FWQ2OiqAH0AAr/4QAXZ/QACqbrI/EREIAAAAMAgAAAGUeJEyQBAAZo68Am8sAj44OEAmJaAOCSsIECuoECVLKBAFSwgQJUuoECH0O2dUN454EAo0NygQAAgAAAAfkGBf/13EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDEyMCByMjE0NiBiY2Q0MWRiIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTAgOHg4ZGN0PTEgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0wIGNocm9tYV9xcF9vZmZzZXQ9MCB0aHJlYWRzPTMgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByYz1jcXAgbWJ0cmVlPTAgcXA9MACAAAABbWWIhK/YX2pQp/PNtC3Ao9VzD6jvx/xbCnAlOLfYUo8igYFxjpHU4M/WQEEudhU0UhcqS4aIHP0wSQr61EfOJNQzLzC7e9epsc6GOt8obp9woKMkBAq8F/C0aOPisAFgLdMijXHI8CGY38vMCUWz/A98x2CPBxjQrlvE8TJ2omexx7KTO6zdCDG1P+KcjJEmx6gKtsGv2CR/NLpzJFOsJxGb6+3oSSZQYb92qfuU4f9KX4YpMCQrF0Hy1AOiIY2JCqzn+OM+MjuLeQq+s5cAz2QVS8VCky4rseAgMXDjOQ8yfaV4xoVwCNSnpq8sFBh0SH2klIk7xrME3ZXCikSJt5KLsC3qRz+9XBlqSMYNBBPErfHgn5jBbNTAVI5Ofn632a3n0nX8L2fbAvGyh0f4KQ3jLqkmOMQqRD/P1O8bbUnkE3rBQAHRj/XiCQvs1k1gJ9ym8f9InNIeaRAjK7KMG/leDjBuvHo7LqqRf+TF"};
>       else if (/\.(mp4|m4v|f4v|3gp)$/.test(details.url))
>         return {redirectUrl: "data:video/mp4;base64,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"};
>       else if (/\.(mpe?g|mp1|mp2|ts|ps|mov|avi|wmv|asf|asx|divx)$/.test(details.url))
>         return {redirectUrl: "data:video/avi;base64,UklGRmgQAABBVkkgTElTVMAAAABoZHJsYXZpaDgAAABAnAAAAAAAAAAAAAAQCQAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExJU1R0AAAAc3RybHN0cmg4AAAAdmlkc01QTkcAAAAAAAAAAAAAAAABAAAAGQAAAAAAAAABAAAAQwAAAAAAAAAAAAAAAAAAAAAAAABzdHJmKAAAACgAAAAAAAAAAAAAAAEAGABNUE5HAAAAAAAAAAAAAAAAAAAAAAAAAABMSVNULgAAAElORk9JU0ZUIgAAAE1FbmNvZGVyIFNoZXJweWEtU1ZOLXIzNDQwMS00LjYuMgBKVU5L7g4AAFs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbGF5ZXIganVuayBkYXRhISA9XVs9IE1QbExJU1RQAAAAbW92aTAwZGNDAAAAiVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJgggBpZHgxEAAAADAwZGMAAAAABAAAAEMAAAA="};
>       else if (/\.(mp3|aac|m4a|wav|wma|ogg|oga|aiff?|ra|ra?m|smil|rv|rmvb|flac|ape)$/.test(details.url))
>         return {redirectUrl: "data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEAgLsAAAB3AQACABAAZGF0YQAAAAA="};
>       else if (/\.mid$/.test(details.url))
>         return {redirectUrl: "data:application/octet-stream;base64,TVRoZAAAAAYAAQACA8BNVHJrAAAAYgD/fw8FDxwyMDEyLjAxLjAxAQMA/38qBQ8tTWljcm9zb2Z0IFNhbnMgU2VyaWYsOC4yNSxGYWxzZSxGYWxzZSwxAP9YBAQCGAgA/38LBQ8SAwN/fwD/AQQA/1kCAAAA/y8ATVRyawAAACQA/38FBQ8JQAkA/38JBQ8GPG5vbmU+AP8DASAA/yABAAD/LwA="};
>       else
>         return {redirectUrl: "data:application/octet-stream,"};
>     }
>     else if (type == "OTHER")
>       return {redirectUrl: "data:application/octet-stream,"};
>     else
81a126
>   }
83c128
<     return {};
---
>     return {cancel: false};
185c230,244
<   return defaultMatcher.matchesAny(url, type, documentHost, thirdParty);
---
>   var filter = defaultMatcher.matchesAny(url, type, documentHost, thirdParty);
> 
>   if (filter instanceof BlockingFilter)
>   {
>     if (type == "DOCUMENT" || type == "SUBDOCUMENT" || type == "IMAGE")
>     {
>       chrome.tabs.sendMessage(tabId, {
>         reqtype: "hide-element",
>         type: type,
>         url: url,
>         documentUrl: documentUrl
>     });
>   }
> 
>   return filter;
I have gone ahead and uploaded the optimized images from my build, following the directories in the extension where the images reside.
icons: https://jansal.googlecode.com/svn/trunk ... /icons.zip
skin: https://jansal.googlecode.com/svn/trunk ... s/skin.zip
jquery-ui/css/smoothness/images: https://jansal.googlecode.com/svn/trunk ... images.zip
Last edited by lewisje on Thu Sep 26, 2013 12:52 am, edited 1 time in total.
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

Re: Webrequest

Post by lewisje »

After someone on the AdBlock support forum pointed it out to me, I hadn't realized that my approach wasn't working anymore, and I'm not sure why...

Apparently, my "experimental swap-out builds" no longer effectively block most HTTP requests, and I haven't figured out how to make them work again.
Unfortunately, I hadn't noticed this, because my ad-blocking setup was generally so aggressive that even if ABP or AdBlock wasn't getting at the ads, something else was.

For now at least, I'm sticking with AdBlock, because it uses WebRequest just like ABP, and it still uses at least two kinds of null-content replacement, unlike ABP, which currently just cancels everything.

Maybe when or if we all move to declarativeWebRequest I'll re-visit the issue.
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

Re: Webrequest

Post by lewisje »

I have found that in my custom build of AdBlock, the variable blocked, which determines whether a URL gets blocked, was always being set to false, and the method call that was setting it to false used code in a part of the extension that I didn't modify; oddly enough, however, when I loaded the extension unpacked, that worked: https://adblock.tenderapp.com/discussio ... t_29026692

I tried the same thing with my custom build of ABP, but whether loading it packed or unpacked, nothing in webrequest.js appears to be used; I've set breakpoints within that file and never hit them. Because I haven't gotten it to work, I won't post a ZIP file for you to unpack and load to see for yourself, the way I did on the AdBlock forum; when I do, I will.

On a note that I also posted on the AdBlock support forum, it's clear that null-content redirection is the wave of the future, as evidenced by the built-in methods for redirecting to an empty page or a transparent image from the still-experimental declarativeWebRequest API; it would be nice to support more types of null content in the API itself, but the "empty page" is probably a good enough substitute for any text-based file, while attempts to define the minimal content for each binary media type are difficult judgment calls (and maybe it's easiest to just use "empty page" for generic binary files too).
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
Anomymous

Re: Webrequest

Post by Anomymous »

I've had a null redirect mod of ABP up and running for a while now. I also stripped out crap like acceptable ads and the secret check for the "disable adblock" header that websites could potentially purchase. Maybe you can use it to see where your bug is.

http://www.mediafire.com/download/tpopt ... 9001_0.crx
MonztA
ABP Developer
Posts: 3957
Joined: Mon Aug 14, 2006 12:18 am
Location: Germany

Re: Webrequest

Post by MonztA »

Anomymous wrote:...and the secret check for the "disable adblock" header that websites could potentially purchase.
What's that?
Anomymous

Re: Webrequest

Post by Anomymous »

MonztA wrote:
Anomymous wrote:...and the secret check for the "disable adblock" header that websites could potentially purchase.
What's that?
Search in webrequest.js for "x-adblock-key", "key", and "keyException" and you'll get an idea of how it works:

https://hg.adblockplus.org/adblockplusc ... request.js

What it does is add an otherwise completely unnecessary event listener so that every time a site loads, it checks the site's response headers to see if it contains the "x-adblock-key" header and a valid key. If it does, it effectively disables ABP on the site. I believe this was an early idea to monetize ABP that was abandoned. Still, it remains active in the code with no way for users to disable it. I removed it just to be safe. Just goes to show you can't automatically trust open source.
MonztA
ABP Developer
Posts: 3957
Joined: Mon Aug 14, 2006 12:18 am
Location: Germany

Re: Webrequest

Post by MonztA »

That's just the sitekey whitelisting feature (example), not really a "secret".
ReallyAnomymous

Re: Webrequest

Post by ReallyAnomymous »

I would argue that it is "secret" and sneaky since "acceptable ads" carries the implication that specific ads/ad networks are whitelisted, not entire sites. Correct me if I'm wrong, but it looks to me like even filters that aren't directly ad-related such as EasyPrivacy would fail to work on a whitelisted site. And suppose two sites use the same non-intrusive ads. One pays for a key and the other doesn't. How is that fair? Then what if a whitelisted site goes rogue and puts up malware or other obnoxious ads? How vigilant do you think the ABP crew will be in monitoring and enforcing their (mostly nebulous) standards against the people cutting them checks? The whole site whitelisting system stinks and should be scrapped.
MonztA
ABP Developer
Posts: 3957
Joined: Mon Aug 14, 2006 12:18 am
Location: Germany

Re: Webrequest

Post by MonztA »

ReallyAnomymous wrote:Correct me if I'm wrong, but it looks to me like even filters that aren't directly ad-related such as EasyPrivacy would fail to work on a whitelisted site.
That's correct. You cannot have specific whitelists for parked domains since you would need to know every parked domain the company has. That's what the sitekey is for.
ReallyAnomymous wrote:And suppose two sites use the same non-intrusive ads. One pays for a key and the other doesn't. How is that fair?
How do you know who pays and who doesn't?
ReallyAnomymous wrote:Then what if a whitelisted site goes rogue and puts up malware or other obnoxious ads? How vigilant do you think the ABP crew will be in monitoring and enforcing their (mostly nebulous) standards against the people cutting them checks?
Agreements.
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

lewisje's experimental

Post by lewisje »

Anomymous wrote:I've had a null redirect mod of ABP up and running for a while now. I also stripped out crap like acceptable ads and the secret check for the "disable adblock" header that websites could potentially purchase. Maybe you can use it to see where your bug is.

http://www.mediafire.com/download/tpopt ... 9001_0.crx
I fail to see where my bug is at the moment, but I can tell you that it works; I noticed it uses an explicit value for key in its manifest (maybe this is because you haven't implemented an auto-update mechanism): https://developer.chrome.com/extensions ... t/key.html

Other than that, it makes the same sorts of redirections that Gundlach's AdBlock now does and ABP experimental once did: subdocuments to about:blank, images to a 1x1 transparent image, and everything else to "cancel"


EDIT: I notice, upon inspecting the generated background page, that there is an "Uncaught Syntax Error: Unexpected End of Input" on line 1 of webrequest.js, where the opening of the comment containing the copyright notice is, and I have no idea what is causing it (normally it's caused by unclosed parens).

EDIT: I found that I had somehow left a brace unclosed around here:

Code: Select all

  var filter = defaultMatcher.matchesAny(url, type, documentHost, thirdParty);

  if (filter instanceof BlockingFilter)
  {
    if (type == "DOCUMENT" || type == "SUBDOCUMENT" || type == "IMAGE")
    {
      chrome.tabs.sendMessage(tabId,{
        reqtype:"hide-element",
        type:type,
        url:url,
        documentUrl:documentUrl
    });}
  }

  return filter;
This was retained instead of the new return defaultMatcher.matchesAny(url, type, documentHost, thirdParty); from line 188 of webrequest.js in the stock builds; I'm not sure why the part of the code hiding all blocked elements was removed, but for the longest time I had }); there instead of });}, leading to an unbalanced brace.

I found that syntax error with the help of JSHint, which also recommended using the typesafe comparisons === and !== for comparisons with null and 0, and removing the var keywords from the redefinitions of the variables key and signature, in the section of code that implements sitekey: http://jshint.com/

With all that straightened out, all that null-content redirection worked (however, even though it does redirect Hulu ads to minimal MP4s when EasyList is disabled, it does not work around Hulu's adblock-detection). For this reason I've switched from AdBlock back to my ABP custom builds.
I still wonder whether it's worth it to start looking into how to alter the extension to use declarativeWebRequest even though it's still experimental...

EDIT: I've decided to replace all of those regex comparisons with string comparisons, using a single regex to pull out the file extension and using something like

Code: Select all

"-shtml-shtm-html-htm-sht-xhtml-xhtm-xht-txt-".indexOf(ext) != -1
instead of chaining the || operator (I made sure to prepend and append the file extension with "-" so I'd be matching the exact extension).
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
lewisje
Posts: 2743
Joined: Mon Jun 14, 2010 12:07 pm

Re: Webrequest

Post by lewisje »

I have updates on the null content as used by pixelserv for router-based content-blocking: http://www.linksysinfo.org/index.php?th ... ost-235434

blank.jpg (125 bytes, causes errors in most graphics programs and in IE, but it's not so important because I've moved to just using the PNG for redirection of images, to avoid conflicts with Ghostery and ScriptSafe)

Code: Select all

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/yQALCAABAAEBAREA/8wABgAQEAX/2gAIAQEAAD8A0s8g/9k=
blank.gif (42 bytes)

Code: Select all

data:image/gif;base64,R0lGODlhAQABAIAAAAEBAQAAACH5BAEAAAAALAAAAAABAAEAAAIBRAA7
blank.swf (99 bytes, based on the blank.gif above)

Code: Select all

data:application/x-shockwave-flash;base64,RldTBWMAAAAwCgCgAAEBAEMCAAAAPwkcAAAAAQADAQABAP94nGNgAIP/DKNgFIyCEQkA/TQBAJ8AAgAwCgCgAUABANlAAAUAAAAAEAwdBTRU0LNGwAABAIUGAgEAAgBAAAAA
I'll update my custom builds shortly.
There's a buzzin' in my brain I really can't explain; I think about it before they make me go to bed.
Post Reply