Bug 424509 - Location bar autocomplete favors "http://" over domain name starting with "h". r=dietrich
authorEdward Lee <edward.lee@engineering.uiuc.edu>
Tue, 05 Aug 2008 17:56:04 -0700
changeset 16412 0445e533b7fc20bd26ff2b28604907bcf539bb0d
parent 16411 2e7da4485029468d7b1bf00dd6bb917a3414fcc0
child 16413 b50d74de574b21f4243fd87e76382624845f11ea
push id1012
push useredward.lee@engineering.uiuc.edu
push dateWed, 06 Aug 2008 00:59:39 +0000
treeherdermozilla-central@0445e533b7fc [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdietrich
bugs424509
milestone1.9.1a2pre
Bug 424509 - Location bar autocomplete favors "http://" over domain name starting with "h". r=dietrich
toolkit/components/places/src/nsNavHistoryAutoComplete.cpp
toolkit/components/places/tests/autocomplete/test_ignore_protocol.js
--- a/toolkit/components/places/src/nsNavHistoryAutoComplete.cpp
+++ b/toolkit/components/places/src/nsNavHistoryAutoComplete.cpp
@@ -486,16 +486,19 @@ nsNavHistory::StartSearch(const nsAStrin
 
   // Keep a copy of the original search for case-sensitive usage
   mOrigSearchString = aSearchString;
   // Remove whitespace, see bug #392141 for details
   mOrigSearchString.Trim(" \r\n\t\b");
   // Copy the input search string for case-insensitive search
   ToLowerCase(mOrigSearchString, mCurrentSearchString);
 
+  // Fix up the search the same way we fix up the entry url
+  mCurrentSearchString = FixupURIText(mCurrentSearchString);
+
   mCurrentListener = aListener;
 
   nsresult rv;
   mCurrentResult = do_CreateInstance(NS_AUTOCOMPLETESIMPLERESULT_CONTRACTID, &rv);
   NS_ENSURE_SUCCESS(rv, rv);
 
   // Use the previous in-progress search by looking at which urls it found if
   // the new search begins with the old one and both aren't empty. We don't run
@@ -1002,16 +1005,25 @@ nsNavHistory::AutoCompleteFeedback(PRInt
 }
 
 nsString
 nsNavHistory::FixupURIText(const nsAString &aURIText)
 {
   // Unescaping utilities expect UTF8 strings
   NS_ConvertUTF16toUTF8 escaped(aURIText);
 
+  // Strip off some prefixes so we don't have to match the exact protocol for
+  // sites. E.g., http://mozilla.org/ can match other mozilla.org pages.
+  if (StringBeginsWith(escaped, NS_LITERAL_CSTRING("https://")))
+    escaped.Cut(0, 8);
+  else if (StringBeginsWith(escaped, NS_LITERAL_CSTRING("http://")))
+    escaped.Cut(0, 7);
+  else if (StringBeginsWith(escaped, NS_LITERAL_CSTRING("ftp://")))
+    escaped.Cut(0, 6);
+
   nsString fixedUp;
   // Use the service if we have it to avoid invalid UTF8 strings
   if (mTextURIService) {
     mTextURIService->UnEscapeURIForUI(NS_LITERAL_CSTRING("UTF-8"),
       escaped, fixedUp);
     return fixedUp;
   }
 
new file mode 100644
--- /dev/null
+++ b/toolkit/components/places/tests/autocomplete/test_ignore_protocol.js
@@ -0,0 +1,59 @@
+/* ***** 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 <edward.lee@engineering.uiuc.edu>.
+ * 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 bug 424509 to make sure searching for "h" doesn't match "http" of urls.
+ */
+
+// Define some shared uris and titles (each page needs its own uri)
+let kURIs = [
+  "http://site/",
+  "http://happytimes/",
+];
+let kTitles = [
+  "title",
+];
+
+// Add site without "h" and with "h"
+addPageBook(0, 0);
+addPageBook(1, 0);
+
+// 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: Searching for h matches site and not http://",
+   "h", [1]],
+];