Skip to content

Commit

Permalink
Added a possible fix for race condition with Abine's Taco. Prep for 1…
Browse files Browse the repository at this point in the history
….3.3.
  • Loading branch information
jmhobbs committed Feb 3, 2011
1 parent a9103bb commit 04640d7
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 44 deletions.
10 changes: 9 additions & 1 deletion CHANGELOG
@@ -1,3 +1,11 @@
# 1.3.3 (2011-02-01) [HEAD]

Added many new cookies (Thanks Jim @ PrivacyChoice)
Fixed a preferences bug (Thanks Moritz N.)
Possible fix for Taco race condition (Thanks to Rob @ Abine)
New logo + icon!
Updated to be compatible with 4.0.*

# 1.3.2 (2010-10-08) [b115d7d]

Added RapLead cookie (Thanks Rob @ Abine)
Expand All @@ -12,7 +20,7 @@ Updated to be compatible with 4.0b4pre
# 1.3.0 (2010-07-02) [b20c596]

Make the menu item an option (default off)
Fix bad cookie data for optout.yieldoptimizer.com, issue 3, thanks to Rick P.
Fix bad cookie data for optout.yieldoptimizer.com, issue 3, thanks to Rick P.

# 1.2.0 (2010-06-25) [1f8ad23]

Expand Down
114 changes: 72 additions & 42 deletions firefox/chrome/content/beef-taco.js
Expand Up @@ -31,19 +31,45 @@
* limitations under the License.
*/

com.github.jmhobbs.beef_taco.unloading = false;
com.github.jmhobbs.beef_taco.removeCookieObserver = function () {
try {
var os = Components.classes['@mozilla.org/observer-service;1'].getService( Components.interfaces.nsIObserverService );
os.removeObserver( com.github.jmhobbs.beef_taco.CookieListener, 'cookie-changed' );
}
catch( error ){}
}

com.github.jmhobbs.beef_taco.addCookieObserver = function () {
try {
var os = Components.classes['@mozilla.org/observer-service;1'].getService( Components.interfaces.nsIObserverService );
os.addObserver( com.github.jmhobbs.beef_taco.CookieListener, 'cookie-changed', false );
}
catch( error ){}
}

com.github.jmhobbs.beef_taco.addQuitObserver = function () {
try {
var os = Components.classes['@mozilla.org/observer-service;1'].getService( Components.interfaces.nsIObserverService );
os.addObserver( com.github.jmhobbs.beef_taco.QuitListener, 'quit-application-granted', false );
}
catch( error ){}
}

com.github.jmhobbs.beef_taco.removeQuitObserver = function () {
try {
var os = Components.classes['@mozilla.org/observer-service;1'].getService( Components.interfaces.nsIObserverService );
os.removeObserver( com.github.jmhobbs.beef_taco.QuitListener, 'quit-application-granted' );
}
catch( error ){}
}

/**
* Install all of the opt-out cookies
*/
com.github.jmhobbs.beef_taco.OptOut = function () {
// This method is also called to reload all cookies, so the observer might not exist.
// But if it does, we need to unregister it.
try {
var os = Components.classes['@mozilla.org/observer-service;1'].getService( Components.interfaces.nsIObserverService );
os.removeObserver( com.github.jmhobbs.beef_taco.CookieListener, 'cookie-changed' );
}
catch( error ){}
com.github.jmhobbs.beef_taco.removeCookieObserver();

var cm = Components.classes['@mozilla.org/cookiemanager;1'].getService( Components.interfaces.nsICookieManager2 );

Expand All @@ -52,24 +78,23 @@ com.github.jmhobbs.beef_taco.OptOut = function () {
for( var host in com.github.jmhobbs.beef_taco.cookies ) {
var hostCookies = com.github.jmhobbs.beef_taco.cookies[host];
for each ( hostCookie in hostCookies ) {
cm.add( host, // host
hostCookie.path, // path
hostCookie.name, // name
hostCookie.value, // value
false, // isSecure
false, // isHttpOnly
false, // isSession
expires );
cm.add(
host, // host
hostCookie.path, // path
hostCookie.name, // name
hostCookie.value, // value
false, // isSecure
false, // isHttpOnly
false, // isSession
expires
);
}
}

// Give other cookie managers time to load before we start touching the cookies
var timer = Components.classes["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
timer.initWithCallback(
function(){
var os = Components.classes['@mozilla.org/observer-service;1'].getService( Components.interfaces.nsIObserverService );
os.addObserver( com.github.jmhobbs.beef_taco.CookieListener, 'cookie-changed', false );
},
com.github.jmhobbs.beef_taco.addCookieObserver,
1500,
Components.interfaces.nsITimer.TYPE_ONE_SHOT
);
Expand All @@ -86,29 +111,30 @@ com.github.jmhobbs.beef_taco.SetCookie = function ( host, hostCookie ) {

const expires = ( new Date( "Jan 1, 3000" ) ).getTime() / 1000;

cm.add( host, // host
hostCookie.path, // path
hostCookie.name, // name
hostCookie.value, // value
false, // isSecure
false, // isHttpOnly
false, // isSession
expires );
cm.add(
host, // host
hostCookie.path, // path
hostCookie.name, // name
hostCookie.value, // value
false, // isSecure
false, // isHttpOnly
false, // isSession
expires
);

},

/**
* Listener variable for cookie deleted.
* Listener object for cookie deleted.
*/
com.github.jmhobbs.beef_taco.CookieListener = {
observe: function( subject, topic, data ) {
if( topic == 'cookie-changed' ) {
if( data == 'cleared' && ! com.github.jmhobbs.beef_taco.unloading ) {
alert( "Cleared!" );
if( data == 'cleared' ) {
// entire cookie database cleared - reset everything
com.github.jmhobbs.beef_taco.OptOut();
}
else if( data == 'deleted' && ! com.github.jmhobbs.beef_taco.unloading ) {
alert( "Deleted" );
else if( data == 'deleted' /*|| data == 'changed' */) {
// single cookie deleted or changed - reset just what we need to
var cookie = subject.QueryInterface( Components.interfaces.nsICookie2 );
var host = cookie.host;
Expand All @@ -124,7 +150,18 @@ com.github.jmhobbs.beef_taco.CookieListener = {
},

/**
* Load the extension and set our cookie change listener
* Listener object for quit so we can remove our cookie observer.
*/
com.github.jmhobbs.beef_taco.QuitListener = {
observe: function( subject, topic, data ) {
if( topic == 'quit-application-granted' ) {
com.github.jmhobbs.beef_taco.removeCookieObserver();
}
}
},

/**
* Load the extension
*/
com.github.jmhobbs.beef_taco.Load = function () {

Expand All @@ -136,25 +173,18 @@ com.github.jmhobbs.beef_taco.Load = function () {
}
hiddenWindow.tacoInitialized = 1;

com.github.jmhobbs.beef_taco.addQuitObserver();

com.github.jmhobbs.beef_taco.OptOut();
},

com.github.jmhobbs.beef_taco.BeforeUnload = function () {
// Prevent a race condition with Abine's Taco
com.github.jmhobbs.beef_taco.unloading = true;
}

/**
* Unload the extension.
*/
com.github.jmhobbs.beef_taco.Unload = function () {
// Prevent a race condition with Abine's Taco
com.github.jmhobbs.beef_taco.unloading = true;

var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"].getService( Components.interfaces.nsIAppShellService ).hiddenDOMWindow;
hiddenWindow.tacoInitialized--;
if( hiddenWindow.tacoInitialized > 0 ) return;

var os = Components.classes['@mozilla.org/observer-service;1'].getService( Components.interfaces.nsIObserverService );
os.removeObserver( com.github.jmhobbs.beef_taco.CookieListener, 'cookie-changed' );
com.github.jmhobbs.beef_taco.removeQuitObserver();
}
1 change: 0 additions & 1 deletion firefox/chrome/content/beef-taco.xul
Expand Up @@ -8,7 +8,6 @@
<script type="application/x-javascript">
window.addEventListener( "load", com.github.jmhobbs.beef_taco.Load, false);
window.addEventListener( "unload", com.github.jmhobbs.beef_taco.Unload, false);
window.addEventListener( "beforeunload", com.github.jmhobbs.beef_taco.BeforeUnload, false);
</script>
</window>
</overlay>

0 comments on commit 04640d7

Please sign in to comment.