Bug 461820 - prevent accessing searchbar history from content (tests) r=dolske

--HG--
extra : rebase_source : c83545f7fa62353bad8cdd783fdd09626b9a23e0
This commit is contained in:
Matthew Noorenberghe 2012-01-10 16:53:16 -08:00
parent ecb8f8c2ac
commit 8386f3e604
3 changed files with 78 additions and 7 deletions

View File

@ -8,6 +8,7 @@ this._scriptLoader.loadSubScript("chrome://mochikit/content/tests/SimpleTest/Chr
function test() { function test() {
waitForExplicitFinish(); waitForExplicitFinish();
var searchEntries = ["test", "More Text", "Some Text"];
var searchBar = BrowserSearch.searchBar; var searchBar = BrowserSearch.searchBar;
var searchButton = document.getAnonymousElementByAttribute(searchBar, var searchButton = document.getAnonymousElementByAttribute(searchBar,
"anonid", "search-go-button"); "anonid", "search-go-button");
@ -166,7 +167,7 @@ function test() {
is(searchBar.value, "More Text", "drop text/uri-list on searchbar"); is(searchBar.value, "More Text", "drop text/uri-list on searchbar");
SimpleTest.executeSoon(testRightClick); SimpleTest.executeSoon(testRightClick);
} }
function testRightClick() { function testRightClick() {
init(); init();
searchBar.removeEventListener("popupshowing", stopPopup, true); searchBar.removeEventListener("popupshowing", stopPopup, true);
@ -177,10 +178,29 @@ function test() {
is(gBrowser.tabs.length, preTabNo, "RightClick did not open new tab"); is(gBrowser.tabs.length, preTabNo, "RightClick did not open new tab");
is(gBrowser.currentURI.spec, "about:blank", "RightClick did nothing"); is(gBrowser.currentURI.spec, "about:blank", "RightClick did nothing");
finalize(); testSearchHistory();
}, 5000); }, 5000);
} }
function testSearchHistory() {
var textbox = searchBar._textbox;
for (var i = 0; i < searchEntries.length; i++) {
let exists = textbox._formHistSvc.entryExists(textbox.searchParam, searchEntries[i]);
ok(exists, "form history entry '" + searchEntries[i] + "' should exist");
}
testAutocomplete();
}
function testAutocomplete() {
var popup = searchBar.textbox.popup;
popup.addEventListener("popupshowing", function() {
checkMenuEntries(searchEntries);
finalize();
popup.removeEventListener("popupshowing", this, false);
}, false);
searchBar.textbox.showHistoryPopup();
}
function finalize() { function finalize() {
searchBar.value = ""; searchBar.value = "";
while (gBrowser.tabs.length != 1) { while (gBrowser.tabs.length != 1) {
@ -211,5 +231,26 @@ function test() {
buttonArg, null); buttonArg, null);
aTarget.dispatchEvent(event); aTarget.dispatchEvent(event);
} }
// modified from toolkit/components/satchel/test/test_form_autocomplete.html
function checkMenuEntries(expectedValues) {
var actualValues = getMenuEntries();
is(actualValues.length, expectedValues.length, "Checking length of expected menu");
for (var i = 0; i < expectedValues.length; i++)
is(actualValues[i], expectedValues[i], "Checking menu entry #"+i);
}
function getMenuEntries() {
var entries = [];
var autocompleteMenu = searchBar.textbox.popup;
// Could perhaps pull values directly from the controller, but it seems
// more reliable to test the values that are actually in the tree?
var column = autocompleteMenu.tree.columns[0];
var numRows = autocompleteMenu.tree.view.rowCount;
for (var i = 0; i < numRows; i++) {
entries.push(autocompleteMenu.tree.view.getValueAt(i, column));
}
return entries;
}
} }

View File

@ -80,6 +80,12 @@ Form History test: form field autocomplete
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>
<!-- normal, basic form (with fieldname='searchbar-history') -->
<form id="form12" onsubmit="return false;">
<input type="text" name="searchbar-history">
<button type="submit">Submit</button>
</form>
</div> </div>
<pre id="test"> <pre id="test">
@ -121,6 +127,7 @@ fh.addEntry("field6", "value");
fh.addEntry("field7", "value"); fh.addEntry("field7", "value");
fh.addEntry("field8", "value"); fh.addEntry("field8", "value");
fh.addEntry("field9", "value"); fh.addEntry("field9", "value");
fh.addEntry("searchbar-history", "blacklist test");
// All these non-implemeted types might need autocomplete tests in the future. // All these non-implemeted types might need autocomplete tests in the future.
var todoTypes = [ "datetime", "date", "month", "week", "time", "datetime-local", var todoTypes = [ "datetime", "date", "month", "week", "time", "datetime-local",
@ -720,14 +727,29 @@ function runTest(testNum) {
ok(true, "oninput should have been received"); ok(true, "oninput should have been received");
ok(event.bubbles, "input event should bubble"); ok(event.bubbles, "input event should bubble");
ok(event.cancelable, "input event should be cancelable"); ok(event.cancelable, "input event should be cancelable");
SimpleTest.finish();
}, false); }, false);
doKey("down"); doKey("down");
checkForm(""); checkForm("");
doKey("return"); doKey("return");
checkForm("value1"); checkForm("value1");
return; testNum = 599;
break;
case 600:
// check we don't show autocomplete for searchbar-history
input = $_(12, "searchbar-history");
// Trigger autocomplete popup
checkForm("");
restoreForm();
doKey("down");
break;
case 601:
checkMenuEntries([]);
SimpleTest.finish();
return;
default: default:
ok(false, "Unexpected invocation of test #" + testNum); ok(false, "Unexpected invocation of test #" + testNum);

View File

@ -165,6 +165,12 @@
<button type='submit'>Submit</button> <button type='submit'>Submit</button>
</form> </form>
<!-- Don't save values if the input name is 'searchbar-history' -->
<form id="form24" onsubmit="return checkSubmit(24);">
<input type='text' name='searchbar-history'>
<button type='submit'>Submit</button>
</form>
<!-- ===== Things that should be saved ===== --> <!-- ===== Things that should be saved ===== -->
<!-- Form 100 is submitted into an iframe, not declared here. --> <!-- Form 100 is submitted into an iframe, not declared here. -->
@ -328,6 +334,7 @@ function startTest() {
$_(20, "test1").value = "dontSaveThis"; $_(20, "test1").value = "dontSaveThis";
$_(22, "test1").value = "dontSaveThis"; $_(22, "test1").value = "dontSaveThis";
$_(23, "test1").value = "dontSaveThis"; $_(23, "test1").value = "dontSaveThis";
$_(24, "searchbar-history").value = "dontSaveThis";
$_(101, "test1").value = "savedValue"; $_(101, "test1").value = "savedValue";
$_(102, "test2").value = "savedValue"; $_(102, "test2").value = "savedValue";
@ -365,7 +372,7 @@ function checkSubmit(formNum) {
// Check for expected storage state. // Check for expected storage state.
switch (formNum) { switch (formNum) {
// Test 1-23 should not save anything. // Test 1-24 should not save anything.
case 1: case 1:
case 2: case 2:
case 3: case 3:
@ -389,6 +396,7 @@ function checkSubmit(formNum) {
case 21: case 21:
case 22: case 22:
case 23: case 23:
case 24:
ok(!fh.hasEntries, "checking for empty storage"); ok(!fh.hasEntries, "checking for empty storage");
break; break;
case 100: case 100:
@ -470,7 +478,7 @@ function checkSubmit(formNum) {
// End the test at the last form. // End the test at the last form.
if (formNum == 110) { if (formNum == 110) {
is(numSubmittedForms, 34, "Ensuring all forms were submitted."); is(numSubmittedForms, 35, "Ensuring all forms were submitted.");
Services.obs.removeObserver(checkObserver, "satchel-storage-changed"); Services.obs.removeObserver(checkObserver, "satchel-storage-changed");
SimpleTest.finish(); SimpleTest.finish();
return false; // return false to cancel current form submission return false; // return false to cancel current form submission
@ -488,7 +496,7 @@ function checkSubmit(formNum) {
checkObserver.waitForChecks(function() { checkObserver.waitForChecks(function() {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nextFormNum = formNum == 23 ? 100 : (formNum + 1); var nextFormNum = formNum == 24 ? 100 : (formNum + 1);
// Submit the next form. Special cases are Forms 21 and 100, which happen // Submit the next form. Special cases are Forms 21 and 100, which happen
// from an HTTPS domain in an iframe. // from an HTTPS domain in an iframe.