commit a4f4691b04cf9b5b49b33ead78770b0f05e403b2
parent 425b2161cc018c31079851067bbd2f745bb07c1e
Author: Simon Kornblith <simon@simonster.com>
Date: Sun, 11 Nov 2012 17:14:19 -0500
Fix http://forums.zotero.org/discussion/23702/chrome-connector-hangs-on-some-pages-when-invoked-from-the-save-zotero-snapshot-context-menu/
Diffstat:
1 file changed, 42 insertions(+), 54 deletions(-)
diff --git a/chrome/content/zotero/xpcom/server_connector.js b/chrome/content/zotero/xpcom/server_connector.js
@@ -341,63 +341,51 @@ Zotero.Server.Connector.SaveSnapshot.prototype = {
*/
"init":function(url, data, sendResponseCallback) {
Zotero.Server.Connector.Data[data["url"]] = "<html>"+data["html"]+"</html>";
- var browser = Zotero.Browser.createHiddenBrowser();
-
- var pageShowCalled = false;
- var cookieSandbox = new Zotero.CookieSandbox(browser, data["url"], data["cookie"], url.userAgent);
- browser.addEventListener("pageshow", function() {
- if(browser.contentDocument.location.href == "about:blank"
- || browser.contentDocument.readyState !== "complete") return;
- if(pageShowCalled) return;
- pageShowCalled = true;
- delete Zotero.Server.Connector.Data[data["url"]];
-
- // figure out where to save
- var libraryID = null;
- var collectionID = null;
- var zp = Zotero.getActiveZoteroPane();
- try {
- var libraryID = zp.getSelectedLibraryID();
- var collection = zp.getSelectedCollection();
- } catch(e) {}
-
- try {
- var doc = browser.contentDocument;
-
- // create new webpage item
- var item = new Zotero.Item("webpage");
- item.libraryID = libraryID;
- item.setField("title", doc.title);
- item.setField("url", data.url);
- item.setField("accessDate", "CURRENT_TIMESTAMP");
- var itemID = item.save();
- if(collection) collection.addItem(itemID);
+ Zotero.HTTP.processDocuments(["zotero://connector/"+encodeURIComponent(data["url"])],
+ function(doc) {
+ delete Zotero.Server.Connector.Data[data["url"]];
- // determine whether snapshot can be saved
- var filesEditable;
- if (libraryID) {
- var group = Zotero.Groups.getByLibraryID(libraryID);
- filesEditable = group.filesEditable;
- } else {
- filesEditable = true;
- }
+ // figure out where to save
+ var libraryID = null;
+ var collectionID = null;
+ var zp = Zotero.getActiveZoteroPane();
+ try {
+ var libraryID = zp.getSelectedLibraryID();
+ var collection = zp.getSelectedCollection();
+ } catch(e) {}
- // save snapshot
- if(filesEditable) {
- Zotero.Attachments.importFromDocument(doc, itemID);
+ try {
+ // create new webpage item
+ var item = new Zotero.Item("webpage");
+ item.libraryID = libraryID;
+ item.setField("title", doc.title);
+ item.setField("url", data.url);
+ item.setField("accessDate", "CURRENT_TIMESTAMP");
+ var itemID = item.save();
+ if(collection) collection.addItem(itemID);
+
+ // determine whether snapshot can be saved
+ var filesEditable;
+ if (libraryID) {
+ var group = Zotero.Groups.getByLibraryID(libraryID);
+ filesEditable = group.filesEditable;
+ } else {
+ filesEditable = true;
+ }
+
+ // save snapshot
+ if(filesEditable) {
+ Zotero.Attachments.importFromDocument(doc, itemID);
+ }
+
+ sendResponseCallback(201);
+ } catch(e) {
+ sendResponseCallback(500);
+ throw e;
}
-
- // remove browser
- Zotero.Browser.deleteHiddenBrowser(browser);
-
- sendResponseCallback(201);
- } catch(e) {
- sendResponseCallback(500);
- throw e;
- }
- }, false);
-
- browser.loadURI("zotero://connector/"+encodeURIComponent(data["url"]));
+ },
+ null, null, false,
+ new Zotero.CookieSandbox(null, data["url"], data["cookie"], url.userAgent));
}
}