michael@0: XPCOMUtils.defineLazyModuleGetter(this, "Promise", michael@0: "resource://gre/modules/Promise.jsm"); michael@0: XPCOMUtils.defineLazyModuleGetter(this, "Task", michael@0: "resource://gre/modules/Task.jsm"); michael@0: Components.utils.import("resource://gre/modules/Timer.jsm", this); michael@0: michael@0: let gTabs = []; michael@0: michael@0: registerCleanupFunction(function() { michael@0: for (let tab of gTabs) { michael@0: if (!tab) michael@0: continue; michael@0: gBrowser.removeTab(tab); michael@0: } michael@0: }); michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: Task.spawn(function() { michael@0: info("Check correct 'Phrase not found' on new tab"); michael@0: michael@0: // Create a tab to run the test. michael@0: yield promiseTestPageLoad(); michael@0: michael@0: // Search for the first word. michael@0: yield promiseFindFinished("--- THIS SHOULD NEVER MATCH ---", false); michael@0: let findbar = gBrowser.getFindBar(); michael@0: is(findbar._findStatusDesc.textContent, findbar._notFoundStr, michael@0: "Findbar status text should be 'Phrase not found'"); michael@0: michael@0: // Create second tab. michael@0: yield promiseTestPageLoad(); michael@0: michael@0: // Search for a string that WILL be found, with 'Highlight All' on michael@0: yield promiseFindFinished("s", true); michael@0: ok(!gBrowser.getFindBar()._findStatusDesc.textContent, michael@0: "Findbar status should be empty"); michael@0: michael@0: finish(); michael@0: }); michael@0: } michael@0: michael@0: function promiseTestPageLoad() { michael@0: let deferred = Promise.defer(); michael@0: michael@0: let tab = gBrowser.selectedTab = gBrowser.addTab("data:text/html;charset=utf-8,The letter s."); michael@0: gTabs.push(tab); michael@0: let browser = gBrowser.selectedBrowser; michael@0: browser.addEventListener("load", function listener() { michael@0: if (browser.currentURI.spec == "about:blank") michael@0: return; michael@0: info("Page loaded: " + browser.currentURI.spec); michael@0: browser.removeEventListener("load", listener, true); michael@0: michael@0: deferred.resolve(); michael@0: }, true); michael@0: michael@0: return deferred.promise; michael@0: } michael@0: michael@0: function promiseFindFinished(searchText, highlightOn) { michael@0: let deferred = Promise.defer(); michael@0: michael@0: let findbar = gBrowser.getFindBar(); michael@0: findbar.startFind(findbar.FIND_NORMAL); michael@0: let highlightElement = findbar.getElement("highlight"); michael@0: if (highlightElement.checked != highlightOn) michael@0: highlightElement.click(); michael@0: executeSoon(() => { michael@0: findbar._findField.value = searchText; michael@0: michael@0: let resultListener; michael@0: let findTimeout = setTimeout(() => foundOrTimedout(null), 2000); michael@0: let foundOrTimedout = function(aData) { michael@0: if (aData === null) michael@0: info("Result listener not called, timeout reached."); michael@0: clearTimeout(findTimeout); michael@0: findbar.browser.finder.removeResultListener(resultListener); michael@0: deferred.resolve(); michael@0: } michael@0: michael@0: resultListener = { michael@0: onFindResult: foundOrTimedout michael@0: }; michael@0: findbar.browser.finder.addResultListener(resultListener); michael@0: findbar._find(); michael@0: }); michael@0: michael@0: return deferred.promise; michael@0: }