From 43fd51b71c8c9f09d86d731ff05e3a719ae14316 Mon Sep 17 00:00:00 2001 From: Simon Kornblith Date: Mon, 18 Oct 2010 21:35:50 +0000 Subject: [PATCH] fix CookieManager interaction with hidden browsers --- chrome/content/zotero/xpcom/connector.js | 15 ++++++++++++++- chrome/content/zotero/xpcom/utilities.js | 5 ++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/chrome/content/zotero/xpcom/connector.js b/chrome/content/zotero/xpcom/connector.js index 634bd0322..3eb1201c2 100755 --- a/chrome/content/zotero/xpcom/connector.js +++ b/chrome/content/zotero/xpcom/connector.js @@ -349,6 +349,7 @@ Zotero.Connector.DataListener.prototype._requestFinished = function(response) { Zotero.Connector.CookieManager = function(browser, uri, cookieData) { this._webNav = browser.webNavigation; this._browser = browser; + this._watchedBrowsers = [browser]; this._observerService = Components.classes["@mozilla.org/observer-service;1"]. getService(Components.interfaces.nsIObserverService); @@ -381,7 +382,11 @@ Zotero.Connector.CookieManager.prototype = { channel.QueryInterface(Components.interfaces.nsIHttpChannel); var isTracked = null; try { - isTracked = channel.notificationCallbacks.getInterface(Components.interfaces.nsIDOMWindow).top.document == this._browser.contentDocument; + var topDoc = channel.notificationCallbacks.getInterface(Components.interfaces.nsIDOMWindow).top.document; + for each(var browser in this._watchedBrowsers) { + isTracked = topDoc == browser.contentDocument; + if(isTracked) break; + } } catch(e) {} if(isTracked === null) { try { @@ -470,6 +475,14 @@ Zotero.Connector.CookieManager.prototype = { } }, + /** + * Attach CookieManager to a specific XMLHttpRequest + * @param {XMLHttpRequest} xhr + */ + "attachToBrowser": function(browser) { + this._watchedBrowsers.push(browser); + }, + /** * Attach CookieManager to a specific XMLHttpRequest * @param {XMLHttpRequest} xhr diff --git a/chrome/content/zotero/xpcom/utilities.js b/chrome/content/zotero/xpcom/utilities.js index 1fb1f7d6c..5698332cd 100644 --- a/chrome/content/zotero/xpcom/utilities.js +++ b/chrome/content/zotero/xpcom/utilities.js @@ -856,7 +856,8 @@ Zotero.Utilities.Translate.prototype.processDocuments = function(urls, processor } } - Zotero.Utilities.HTTP.processDocuments(urls, processor, done, exception); + var hiddenBrowser = Zotero.Utilities.HTTP.processDocuments(urls, processor, done, exception); + if(this.translate.cookieManager) this.translate.cookieManager.attachToBrowser(hiddenBrowser); } /** @@ -876,6 +877,7 @@ Zotero.Utilities.Translate.prototype.retrieveDocument = function(url) { } var hiddenBrowser = Zotero.Browser.createHiddenBrowser(); + if(this.translate.cookieManager) this.translate.cookieManager.attachToBrowser(hiddenBrowser); hiddenBrowser.addEventListener("pageshow", listener, true); hiddenBrowser.loadURI(url); @@ -1588,6 +1590,7 @@ Zotero.Utilities.HTTP = new function() { hiddenBrowser.addEventListener(loadEvent, onLoad, true); doLoad(); + return hiddenBrowser; } /**