<?xml version="1.0"?> <!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> <window id="360437Test" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" width="600" height="600" onload="startTest();" title="360437 test"> <script type="application/javascript"><![CDATA[ const {interfaces: Ci, classes: Cc, results: Cr, utils: Cu} = Components; Cu.import("resource://gre/modules/Task.jsm"); Cu.import("resource://testing-common/ContentTask.jsm"); ContentTask.setTestScope(window.opener.wrappedJSObject); var gFindBar = null; var gBrowser; var imports = ["SimpleTest", "ok", "is", "info"]; for (var name of imports) { window[name] = window.opener.wrappedJSObject[name]; } function startTest() { Task.spawn(function* () { gFindBar = document.getElementById("FindToolbar"); for (let browserId of ["content", "content-remote"]) { yield startTestWithBrowser(browserId); } }).then(() => { window.close(); SimpleTest.finish(); }); } function* startTestWithBrowser(browserId) { info("Starting test with browser '" + browserId + "'"); gBrowser = document.getElementById(browserId); gFindBar.browser = gBrowser; let promise = ContentTask.spawn(gBrowser, null, function* () { return new Promise(resolve => { addEventListener("DOMContentLoaded", function listener() { removeEventListener("DOMContentLoaded", listener); resolve(); }); }); }); gBrowser.loadURI("data:text/html,<form><input id='input' type='text' value='text inside an input element'></form>"); yield promise; yield onDocumentLoaded(); } function* onDocumentLoaded() { gFindBar.onFindCommand(); // Make sure the findfield is correctly focused on open var searchStr = "text inside an input element"; yield promiseEnterStringIntoFindField(searchStr); is(document.commandDispatcher.focusedElement, gFindBar._findField.inputField, "Find field isn't focused"); // Make sure "find again" correctly transfers focus to the content element // when the find bar is closed. gFindBar.close(); gFindBar.onFindAgainCommand(false); yield ContentTask.spawn(gBrowser, null, function* () { Assert.equal(content.document.activeElement, content.document.getElementById("input"), "Input Element isn't focused"); }); // Make sure "find again" doesn't focus the content element if focus // isn't in the content document. var textbox = document.getElementById("textbox"); textbox.focus(); gFindBar.close(); gFindBar.onFindAgainCommand(false); ok(textbox.hasAttribute("focused"), "Focus was stolen from a chrome element"); } function promiseFindResult(str = null) { return new Promise(resolve => { let listener = { onFindResult: function({ searchString }) { if (str !== null && str != searchString) { return; } gFindBar.browser.finder.removeResultListener(listener); resolve(); } }; gFindBar.browser.finder.addResultListener(listener); }); } function promiseEnterStringIntoFindField(str) { let promise = promiseFindResult(str); for (let i = 0; i < str.length; i++) { let event = document.createEvent("KeyboardEvent"); event.initKeyEvent("keypress", true, true, null, false, false, false, false, 0, str.charCodeAt(i)); gFindBar._findField.inputField.dispatchEvent(event); } return promise; } ]]></script> <textbox id="textbox"/> <browser type="content-primary" flex="1" id="content" src="about:blank"/> <browser type="content-primary" flex="1" id="content-remote" remote="true" src="about:blank"/> <findbar id="FindToolbar" browserid="content"/> </window>