From 9fd52b800f6bd291119778741870d826fd8bfbed Mon Sep 17 00:00:00 2001 From: Edward Lee Date: Wed, 7 Jan 2009 15:47:58 -0800 Subject: [PATCH] Bug 426864 - Only show user typed history pages for the urlbar dropdown. r=dietrich --- .../places/src/nsNavHistoryAutoComplete.cpp | 6 ++ .../tests/autocomplete/head_autocomplete.js | 15 ++++ .../tests/autocomplete/test_empty_search.js | 79 +++++++++++++++++++ .../tests/autocomplete/test_special_search.js | 7 +- 4 files changed, 102 insertions(+), 5 deletions(-) create mode 100644 toolkit/components/places/tests/autocomplete/test_empty_search.js diff --git a/toolkit/components/places/src/nsNavHistoryAutoComplete.cpp b/toolkit/components/places/src/nsNavHistoryAutoComplete.cpp index 6c96ae8c775..fcbbbf5bc0f 100644 --- a/toolkit/components/places/src/nsNavHistoryAutoComplete.cpp +++ b/toolkit/components/places/src/nsNavHistoryAutoComplete.cpp @@ -903,6 +903,12 @@ nsNavHistory::ProcessTokensForSpecialSearch() (void)mCurrentSearchTokens.RemoveStringAt(i); } + // Search only typed pages in history for empty searches + if (mOrigSearchString.IsEmpty()) { + SET_BEHAVIOR(History); + SET_BEHAVIOR(Typed); + } + // We can use optimized queries for restricts, so check for the most // restrictive query first mDBCurrentQuery = GET_BEHAVIOR(Tag) ? GetDBAutoCompleteTagsQuery() : diff --git a/toolkit/components/places/tests/autocomplete/head_autocomplete.js b/toolkit/components/places/tests/autocomplete/head_autocomplete.js index a8b2a1aada0..17da7eef4e8 100644 --- a/toolkit/components/places/tests/autocomplete/head_autocomplete.js +++ b/toolkit/components/places/tests/autocomplete/head_autocomplete.js @@ -220,3 +220,18 @@ function run_test() { ensure_results(search, expected); } + +// Utility function to remove history pages +function removePages(aURIs) +{ + for each (let uri in aURIs) + histsvc.removePage(toURI(kURIs[uri])); +} + +// Utility function to mark pages as typed +function markTyped(aURIs) +{ + for each (let uri in aURIs) + histsvc.addVisit(toURI(kURIs[uri]), Date.now() * 1000, null, + histsvc.TRANSITION_TYPED, false, 0); +} diff --git a/toolkit/components/places/tests/autocomplete/test_empty_search.js b/toolkit/components/places/tests/autocomplete/test_empty_search.js new file mode 100644 index 00000000000..c2dc8cd01d1 --- /dev/null +++ b/toolkit/components/places/tests/autocomplete/test_empty_search.js @@ -0,0 +1,79 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Places Test Code. + * + * The Initial Developer of the Original Code is + * Edward Lee . + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/** + * Test for bug 426864 that makes sure the empty search (drop down list) only + * shows typed pages from history. + */ + +// Define some shared uris and titles (each page needs its own uri) +let kURIs = [ + "http://foo/0", + "http://foo/1", + "http://foo/2", + "http://foo/3", + "http://foo/4", + "http://foo/5", +]; +let kTitles = [ + "title", +]; + +// Visited (in history) +addPageBook(0, 0); // history +addPageBook(1, 0, 0); // bookmark +addPageBook(2, 0); // history typed +addPageBook(3, 0, 0); // bookmark typed + +// Unvisited bookmark +addPageBook(4, 0, 0); // bookmark +addPageBook(5, 0, 0); // bookmark typed + +// Set some pages as typed +markTyped([2,3,5]); +// Remove pages from history to treat them as unvisited +removePages([4,5]); + +// Provide for each test: description; search terms; array of gPages indices of +// pages that should match; optional function to be run before the test +let gTests = [ + ["0: Match everything", + "foo", [0,1,2,3,4,5]], + ["1: Match only typed history", + "foo ^ ~", [2,3]], + ["2: Drop-down empty search matches only typed history", + "", [2,3]], +]; diff --git a/toolkit/components/places/tests/autocomplete/test_special_search.js b/toolkit/components/places/tests/autocomplete/test_special_search.js index 0538bfc1f6a..83e0ae1ff2e 100644 --- a/toolkit/components/places/tests/autocomplete/test_special_search.js +++ b/toolkit/components/places/tests/autocomplete/test_special_search.js @@ -79,12 +79,9 @@ addPageBook(11, 1, 1, [1]); // title and url // Remove pages from history to treat them as unvisited, so pages that do have // visits are 0,1,2,3,5,10 -for each (let uri in [4,6,7,8,9,11]) - histsvc.removePage(toURI(kURIs[uri])); - +removePages([4,6,7,8,9,11]); // Set some pages as typed -for each (let uri in [0,3,10]) - histsvc.addVisit(toURI(kURIs[uri]), Date.now() * 1000, null, histsvc.TRANSITION_TYPED, false, 0); +markTyped([0,3,10]); // Provide for each test: description; search terms; array of gPages indices of // pages that should match; optional function to be run before the test