Bug 330578 - (Shift+) delete in URL bar autocomplete list no longer persistent. r=mconnor.

This commit is contained in:
mozilla.mano@sent.com 2007-05-27 10:45:20 -07:00
parent 3e218a1901
commit 6185471465
9 changed files with 200 additions and 4 deletions

View File

@ -7,4 +7,8 @@ include $(DEPTH)/config/autoconf.mk
DIRS = public src
ifdef ENABLE_TESTS
DIRS += tests
endif
include $(topsrcdir)/config/rules.mk

View File

@ -38,6 +38,8 @@
#include "nsISupports.idl"
#include "nsIAutoCompleteResult.idl"
interface nsIAutoCompleteSimpleResultListener;
/**
* This class implements nsIAutoCompleteResult and provides simple methods
* for setting the value and result items. It can be used whenever some basic
@ -45,7 +47,7 @@
* an array.
*/
[scriptable, uuid(cc79f293-7114-4287-870b-d28aa61aa7df)]
[scriptable, uuid(916e3d78-4622-446b-924a-20f7021793b7)]
interface nsIAutoCompleteSimpleResult : nsIAutoCompleteResult
{
/**
@ -77,4 +79,25 @@ interface nsIAutoCompleteSimpleResult : nsIAutoCompleteResult
* how you add results.
*/
void appendMatch(in AString aValue, in AString aComment);
/**
* Sets a listener for changes in the result.
*/
void setListener(in nsIAutoCompleteSimpleResultListener aListener);
};
[scriptable, uuid(004efdc5-1989-4874-8a7a-345bf2fa33af)]
interface nsIAutoCompleteSimpleResultListener : nsISupports
{
/**
* Dispatched after a value is removed from the result.
* @param aResult
* The result from which aValue has been removed.
* @param aValue
* The removed value.
* @param aRemoveFromDb
* Whether the value should be removed from persistent storage as well.
*/
void onValueRemoved(in nsIAutoCompleteSimpleResult aResult, in AString aValue,
in boolean aRemoveFromDb);
};

View File

@ -152,6 +152,14 @@ nsAutoCompleteSimpleResult::GetStyleAt(PRInt32 aIndex, nsAString& _retval)
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsAutoCompleteSimpleResult::SetListener(nsIAutoCompleteSimpleResultListener* aListener)
{
mListener = aListener;
return NS_OK;
}
NS_IMETHODIMP
nsAutoCompleteSimpleResult::RemoveValueAt(PRInt32 aRowIndex,
PRBool aRemoveFromDb)
@ -159,9 +167,12 @@ nsAutoCompleteSimpleResult::RemoveValueAt(PRInt32 aRowIndex,
NS_ENSURE_TRUE(aRowIndex >= 0 && aRowIndex < mValues.Count(),
NS_ERROR_ILLEGAL_VALUE);
nsAutoString removedValue(*mValues.StringAt(aRowIndex));
mValues.RemoveStringAt(aRowIndex);
mComments.RemoveStringAt(aRowIndex);
if (mListener)
mListener->OnValueRemoved(this, removedValue, aRemoveFromDb);
return NS_OK;
}

View File

@ -44,6 +44,7 @@
#include "nsVoidArray.h"
#include "nsString.h"
#include "prtypes.h"
#include "nsCOMPtr.h"
class nsAutoCompleteSimpleResult : public nsIAutoCompleteSimpleResult
{
@ -69,6 +70,8 @@ protected:
nsString mErrorDescription;
PRInt32 mDefaultIndex;
PRUint32 mSearchResult;
nsCOMPtr<nsIAutoCompleteSimpleResultListener> mListener;
};
#endif // __nsAutoCompleteSimpleResult__

View File

@ -0,0 +1,50 @@
#
# ***** 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 mozilla.org code.
#
# The Initial Developer of the Original Code is
# Mozilla.org.
# Portions created by the Initial Developer are Copyright (C) 2005
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Boris Zbarsky <bzbarsky@mit.edu> (Original author)
#
# Alternatively, the contents of this file may be used under the terms of
# either of 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 *****
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = test_autocomplete
XPCSHELL_TESTS = unit
include $(topsrcdir)/config/rules.mk

View File

@ -0,0 +1,80 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:set ts=2 sw=2 sts=2 et: */
/* ***** 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 Bug 330578 unit test code.
*
* The Initial Developer of the Original Code is Mozilla Corporation.
* Portions created by the Initial Developer are Copyright (C) 2007
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Asaf Romano <mano@mozilla.com>
*
* 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 ***** */
const Cc = Components.classes;
const Ci = Components.interfaces;
var gResultListener = {
_lastResult: null,
_lastValue: "",
_lastRemoveFromDb: false,
onValueRemoved: function(aResult, aValue, aRemoveFromDb) {
this._lastResult = aResult;
this._lastValue = aValue;
this._lastRemoveFromDb = aRemoveFromDb;
}
};
// main
function run_test() {
var result = Cc["@mozilla.org/autocomplete/simple-result;1"].
createInstance(Ci.nsIAutoCompleteSimpleResult);
result.appendMatch("a", "");
result.appendMatch("b", "");
result.appendMatch("c", "");
result.setListener(gResultListener);
do_check_eq(result.matchCount, 3);
result.removeValueAt(0, true);
do_check_eq(result.matchCount, 2);
do_check_eq(gResultListener._lastResult, result);
do_check_eq(gResultListener._lastValue, "a");
do_check_eq(gResultListener._lastRemoveFromDb, true);
result.removeValueAt(0, false);
do_check_eq(result.matchCount, 1);
do_check_eq(gResultListener._lastValue, "b");
do_check_eq(gResultListener._lastRemoveFromDb, false);
// check that we don't get notified if the listener is unset
result.setListener(null);
result.removeValueAt(0, true); // "c"
do_check_eq(result.matchCount, 0);
do_check_eq(gResultListener._lastValue, "b");
}

View File

@ -148,6 +148,7 @@ NS_INTERFACE_MAP_BEGIN(nsNavHistory)
NS_INTERFACE_MAP_ENTRY(nsIObserver)
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
NS_INTERFACE_MAP_ENTRY(nsIAutoCompleteSearch)
NS_INTERFACE_MAP_ENTRY(nsIAutoCompleteSimpleResultListener)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsINavHistoryService)
NS_INTERFACE_MAP_END

View File

@ -101,7 +101,8 @@ class nsNavHistory : public nsSupportsWeakReference,
public nsIObserver,
public nsIBrowserHistory,
public nsIGlobalHistory3,
public nsIAutoCompleteSearch
public nsIAutoCompleteSearch,
public nsIAutoCompleteSimpleResultListener
{
friend class AutoCompleteIntermediateResultSet;
friend class AutoCompleteResultComparator;
@ -116,6 +117,7 @@ public:
NS_DECL_NSIBROWSERHISTORY
NS_DECL_NSIOBSERVER
NS_DECL_NSIAUTOCOMPLETESEARCH
NS_DECL_NSIAUTOCOMPLETESIMPLERESULTLISTENER
nsresult Init();

View File

@ -349,6 +349,9 @@ nsNavHistory::StartSearch(const nsAString & aSearchString,
result->SetDefaultIndex(-1);
}
rv = result->SetListener(this);
NS_ENSURE_SUCCESS(rv, rv);
aListener->OnSearchResult(this, result);
return NS_OK;
}
@ -538,6 +541,25 @@ nsNavHistory::AutoCompleteFullHistorySearch(const nsAString& aSearchString,
return NS_OK;
}
// nsNavHistory::OnValueRemoved (nsIAutoCompleteSimpleResultListener)
NS_IMETHODIMP
nsNavHistory::OnValueRemoved(nsIAutoCompleteSimpleResult* aResult,
const nsAString& aValue, PRBool aRemoveFromDb)
{
if (!aRemoveFromDb)
return NS_OK;
nsresult rv;
nsCOMPtr<nsIURI> uri;
rv = NS_NewURI(getter_AddRefs(uri), aValue);
NS_ENSURE_SUCCESS(rv, rv);
rv = RemovePage(uri);
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}
// nsNavHistory::AutoCompleteQueryOnePrefix
//