diff --git a/chrome/content/zotero/browser.js b/chrome/content/zotero/browser.js index dae65b6ae..375a18bba 100644 --- a/chrome/content/zotero/browser.js +++ b/chrome/content/zotero/browser.js @@ -54,6 +54,7 @@ var Zotero_Browser = new function() { var _browserData = new WeakMap(); var _attachmentsMap = new WeakMap(); + var _detectCallbacks = []; var _blacklist = [ "googlesyndication.com", @@ -484,6 +485,20 @@ var Zotero_Browser = new function() { } }); + this.addDetectCallback = function (func) { + _detectCallbacks.push(func); + }; + + this.resolveDetectCallbacks = Zotero.Promise.coroutine(function* () { + while (_detectCallbacks.length) { + let cb = _detectCallbacks.shift(); + var res = cb(); + if (res && res.then) { + yield res.then; + } + } + }); + function getSaveButtons() { Components.utils.import("resource:///modules/CustomizableUI.jsm"); var buttons = []; @@ -957,7 +972,7 @@ Zotero_Browser.Tab.prototype._selectItems = function(obj, itemList, callback) { /* * called when translators are available */ -Zotero_Browser.Tab.prototype._translatorsAvailable = function(translate, translators) { +Zotero_Browser.Tab.prototype._translatorsAvailable = Zotero.Promise.coroutine(function* (translate, translators) { var page = this.getPageObject(); page.saveEnabled = true; @@ -1004,8 +1019,8 @@ Zotero_Browser.Tab.prototype._translatorsAvailable = function(translate, transla if(!translators || !translators.length) Zotero.debug("Translate: No translators found"); - // Note: async - Zotero_Browser.updateStatus(); -} + yield Zotero_Browser.updateStatus(); + yield Zotero_Browser.resolveDetectCallbacks(); +}); Zotero_Browser.init(); \ No newline at end of file diff --git a/test/tests/browserTest.js b/test/tests/browserTest.js index d65d1db60..0e80d7478 100644 --- a/test/tests/browserTest.js +++ b/test/tests/browserTest.js @@ -18,7 +18,7 @@ describe("Zotero_Browser", function () { it("should save webpage to current collection", function* () { var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html"); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -39,7 +39,7 @@ describe("Zotero_Browser", function () { getTestDataDirectory().path, "metadata", "journalArticle-single.html" ); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -60,7 +60,7 @@ describe("Zotero_Browser", function () { getTestDataDirectory().path, "book_and_child_note.ris" ); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -81,7 +81,7 @@ describe("Zotero_Browser", function () { it("should save PDF to library root", function* () { var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf"); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -101,7 +101,7 @@ describe("Zotero_Browser", function () { it("should save PDF to current collection", function* () { var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf"); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -120,7 +120,7 @@ describe("Zotero_Browser", function () { it("shouldn't save webpage to My Publications", function* () { var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html"); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -142,7 +142,7 @@ describe("Zotero_Browser", function () { getTestDataDirectory().path, "metadata", "journalArticle-single.html" ); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise;