Compare commits

..

2 Commits

Author SHA1 Message Date
sdv%sparc.spb.su
53866ece4f workaround for bug=30927
git-svn-id: svn://10.0.0.236/branches/M15-patch@72213 18797224-902f-48f8-a5cc-f745e15eee43
2000-06-14 11:34:36 +00:00
(no author)
350be55313 This commit was manufactured by cvs2svn to create branch 'M15-patch'.
git-svn-id: svn://10.0.0.236/branches/M15-patch@52901 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 02:47:16 +00:00
14 changed files with 105 additions and 1046 deletions

View File

@@ -0,0 +1,105 @@
/*
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 Sun Microsystems,
Inc. Portions created by Sun are
Copyright (C) 1999 Sun Microsystems, Inc. All
Rights Reserved.
Contributor(s):
*/
#ifndef __JavaDOMGlobals_h__
#define __JavaDOMGlobals_h__
#include "jni.h"
#include "prclist.h"
#include "nsError.h"
#ifdef ERROR
#undef ERROR
#endif
class nsISupports;
class nsIDOMNode;
struct PRLogModuleInfo;
struct PRLock;
class JavaDOMGlobals {
public:
static jclass attrClass;
static jclass cDataSectionClass;
static jclass commentClass;
static jclass documentClass;
static jclass documentFragmentClass;
static jclass documentTypeClass;
static jclass domImplementationClass;
static jclass elementClass;
static jclass entityClass;
static jclass entityReferenceClass;
static jclass namedNodeMapClass;
static jclass nodeClass;
static jclass nodeListClass;
static jclass notationClass;
static jclass processingInstructionClass;
static jclass textClass;
static jfieldID nodePtrFID;
static jfieldID nodeListPtrFID;
static jfieldID domImplementationPtrFID;
static jfieldID nodeTypeAttributeFID;
static jfieldID nodeTypeCDataSectionFID;
static jfieldID nodeTypeCommentFID;
static jfieldID nodeTypeDocumentFragmentFID;
static jfieldID nodeTypeDocumentFID;
static jfieldID nodeTypeDocumentTypeFID;
static jfieldID nodeTypeElementFID;
static jfieldID nodeTypeEntityFID;
static jfieldID nodeTypeEntityReferenceFID;
static jfieldID nodeTypeNotationFID;
static jfieldID nodeTypeProcessingInstructionFID;
static jfieldID nodeTypeTextFID;
static jclass domExceptionClass;
static jmethodID domExceptionInitMID;
static jclass runtimeExceptionClass;
static jmethodID runtimeExceptionInitMID;
static const char* const DOM_EXCEPTION_MESSAGE[];
typedef enum ExceptionType { EXCEPTION_RUNTIME,
EXCEPTION_DOM } ExceptionType;
static PRLogModuleInfo* log;
static PRCList garbage;
static PRLock* garbageLock;
static PRInt32 javaMaxInt;
static void Initialize(JNIEnv *env);
static void Destroy(JNIEnv *env);
static jobject CreateNodeSubtype(JNIEnv *env,
nsIDOMNode *node);
static void AddToGarbage(nsISupports* domObject);
static void TakeOutGarbage();
static void ThrowException(JNIEnv *env,
const char * message = NULL,
nsresult rv = NS_OK,
ExceptionType exceptionType = EXCEPTION_RUNTIME);
};
#endif /* __JavaDOMGlobals_h__ */

View File

@@ -1,31 +0,0 @@
#
# The contents of this file are subject to the Netscape 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/NPL/
#
# 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 Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
DIRS = public src
include $(topsrcdir)/config/rules.mk

View File

@@ -1,26 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape 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/NPL/
#
# 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 Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..\..
DIRS=public src
include <$(DEPTH)\config\rules.mak>

View File

@@ -1 +0,0 @@
nsIUrlbarHistory.idl

View File

@@ -1,35 +0,0 @@
#
# The contents of this file are subject to the Netscape 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/NPL/
#
# 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 Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = appcomps
XPIDL_MODULE = urlbarhistory
XPIDLSRCS = nsIUrlbarHistory.idl \
$(NULL)
include $(topsrcdir)/config/rules.mk

View File

@@ -1,30 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape 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/NPL/
#
# 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 Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..\..\..
MODULE=urlbarhistory
XPIDLSRCS = \
.\nsIUrlbarHistory.idl \
$(NULL)
include <$(DEPTH)\config\rules.mak>

View File

@@ -1,52 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape 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/NPL/
*
* 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 Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Radha Kulkarni (radha@netscape.com)
* Jason Eager (jce2@po.cwru.edu)
*/
#include "nsISupports.idl"
#include "nsIFactory.idl"
%{C++
#define NS_URLBARHISTORY_CID \
{0x74254499, 0x171a, 0x11d4, {0x98, 0x70, 0x0, 0xc0, 0x4f, 0xa0, 0x2f, 0x40}}
#define NS_URLBARHISTORY_CONTRACTID "@mozilla.org/browser/urlbarhistory;1"
#define NS_URLBARAUTOCOMPLETE_CONTRACTID "@mozilla.org/autocompleteSession;1?type=urlbar"
#define UBHISTORY_MAX_ENTRIES = 15;
%}
[scriptable, uuid(74254499-171a-11d4-9870-00c04fa02f40)]
interface nsIUrlbarHistory: nsISupports
{
/**
* Get the size of the History list
*/
readonly attribute long count;
/**
* clear the History contents
*/
void clearHistory();
};

View File

@@ -1,40 +0,0 @@
#
# The contents of this file are subject to the Netscape 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/NPL/
#
# 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 Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../../../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = appcomps
LIBRARY_NAME = urlbarhistory_s
REQUIRES = xpcom string rdf pref js necko
CPPSRCS = nsUrlbarHistory.cpp
# we don't want the shared lib, but we want to force the creation of a
# static lib.
override NO_SHARED_LIB=1
override NO_STATIC_LIB=
include $(topsrcdir)/config/rules.mk

View File

@@ -1,40 +0,0 @@
#!nmake
#
# The contents of this file are subject to the Netscape 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/NPL/
#
# 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 Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
DEPTH=..\..\..\..
MODULE=appcomps
LIBRARY_NAME=urlbarhistory_s
CPP_OBJS= \
.\$(OBJDIR)\nsUrlbarHistory.obj \
$(NULL)
LCFLAGS = \
$(LCFLAGS) \
$(DEFINES) \
$(NULL)
include <$(DEPTH)\config\rules.mak>
install:: $(LIBRARY)
$(MAKE_INSTALL) $(LIBRARY) $(DIST)\lib
clobber::
rm -f $(DIST)\lib\$(LIBRARY_NAME).lib

View File

@@ -1,46 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape 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/NPL/
*
* 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 Communicator client code.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Radha Kulkarni radha@netscape.com
*/
#include "nsIModule.h"
#include "nsIGenericFactory.h"
#include "nsIComponentManager.h"
#include "nsIServiceManager.h"
#include "nsIUrlbarHistory.h"
#include "nsUrlbarHistory.h"
// Factory Constructors
NS_GENERIC_FACTORY_CONSTRUCTOR(nsUrlbarHistory)
///////////////////////////////////////////////////////////////////////////////
// Module implementation for the history library
static nsModuleComponentInfo gUBHistoryModuleInfo[] =
{
{ "nsUrlbarHistory", NS_URLBARHISTORY_CID,
NS_URLBARHISTORY_CONTRACTID, nsUrlbarHistoryConstructor },
{ "nsUrlbarHistory", NS_URLBARHISTORY_CID,
NS_URLBARAUTOCOMPLETE_CONTRACTID, nsUrlbarHistoryConstructor }
};
NS_IMPL_NSGETMODULE("Urlbar History Module", gUBHistoryModuleInfo)

View File

@@ -1,677 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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 the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications, Inc. Portions created by Netscape are
* Copyright (C) 1999, Mozilla. All Rights Reserved.
*
* Contributor(s):
* Radha Kulkarni <radha@netscape.com>
*
*/
// Local Includes
#include "nsUrlbarHistory.h"
// Helper Classes
#include "nsXPIDLString.h"
// Interfaces Needed
#include "nsString.h"
#include "nsIAutoCompleteResults.h"
#include "nsISimpleEnumerator.h"
#include "nsIPref.h"
#include "nsIServiceManager.h"
#include "nsIRDFService.h"
#include "nsIRDFContainer.h"
#include "nsIRDFContainerUtils.h"
#include "nsIURL.h"
static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
static NS_DEFINE_CID(kRDFCUtilsCID, NS_RDFCONTAINERUTILS_CID);
static NS_DEFINE_CID(kStandardURLCID, NS_STANDARDURL_CID);
static char * ignoreArray[] = {
"http://",
"ftp://",
"www.",
"http://www.",
"https://",
"https://www.",
"keyword:",
"://",
"//",
"\\",
":\\",
"file:///",
".com",
".org",
".net",
".",
"?",
"&",
"="
};
static nsIRDFResource * kNC_CHILD;
static nsIRDFResource * kNC_URLBARHISTORY;
static nsIRDFService * gRDFService;
static nsIRDFContainerUtils * gRDFCUtils;
#define PREF_AUTOCOMPLETE_ENABLED "browser.urlbar.autocomplete.enabled"
//*****************************************************************************
//*** nsUrlbarHistory: Object Management
//*****************************************************************************
nsUrlbarHistory::nsUrlbarHistory()
{
NS_INIT_REFCNT();
PRInt32 cnt = sizeof(ignoreArray)/sizeof(char *);
for(PRInt32 i=0; i< cnt; i++)
mIgnoreArray.AppendString(NS_ConvertASCIItoUCS2(ignoreArray[i]));
nsresult res;
res = nsServiceManager::GetService(kRDFServiceCID, NS_GET_IID(nsIRDFService),
(nsISupports **)&gRDFService);
res = nsServiceManager::GetService(kRDFCUtilsCID, NS_GET_IID(nsIRDFContainerUtils),
(nsISupports **)&gRDFCUtils);
if (gRDFService) {
//printf("$$$$ Got RDF SERVICE $$$$\n");
res = gRDFService->GetDataSource("rdf:localstore", getter_AddRefs(mDataSource));
res = gRDFService->GetResource("http://home.netscape.com/NC-rdf#child", &kNC_CHILD);
res = gRDFService->GetResource("nc:urlbar-history", &kNC_URLBARHISTORY);
}
nsCOMPtr<nsIPref> prefs = do_GetService(kPrefServiceCID, &res);
if (NS_SUCCEEDED(res)) {
prefs->GetBoolPref(PREF_AUTOCOMPLETE_ENABLED, &mEnabled);
prefs->AddObserver(PREF_AUTOCOMPLETE_ENABLED, this);
}
}
nsUrlbarHistory::~nsUrlbarHistory()
{
//Entries are now in RDF
//ClearHistory();
mDataSource = nsnull;
NS_IF_RELEASE(gRDFService);
NS_IF_RELEASE(gRDFCUtils);
NS_IF_RELEASE(kNC_URLBARHISTORY);
NS_IF_RELEASE(kNC_CHILD);
}
//*****************************************************************************
// nsUrlbarHistory: nsISupports
//*****************************************************************************
NS_IMPL_ADDREF(nsUrlbarHistory)
NS_IMPL_RELEASE(nsUrlbarHistory)
NS_INTERFACE_MAP_BEGIN(nsUrlbarHistory)
NS_INTERFACE_MAP_ENTRY(nsIAutoCompleteSession)
NS_INTERFACE_MAP_ENTRY(nsIUrlbarHistory)
NS_INTERFACE_MAP_ENTRY(nsIObserver)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIUrlbarHistory)
NS_INTERFACE_MAP_END
//*****************************************************************************
// nsUrlbarHistory: nsISHistory
//*****************************************************************************
NS_IMETHODIMP
nsUrlbarHistory::ClearHistory()
{
/* Get the elements in the data source through the container
*/
nsCOMPtr<nsIRDFContainer> container;
gRDFCUtils->MakeSeq(mDataSource,
kNC_URLBARHISTORY,
getter_AddRefs(container));
NS_ENSURE_TRUE(container, NS_ERROR_FAILURE);
/* Remove all the elements, back to front, to avoid O(n^2) updates
* from RDF.
*/
PRInt32 count = 0;
container->GetCount(&count);
for (PRInt32 i = count; i >= 1; --i) {
nsCOMPtr<nsIRDFNode> dummy;
container->RemoveElementAt(i, PR_TRUE, getter_AddRefs(dummy));
}
#ifdef DEBUG
container->GetCount(&count);
NS_ASSERTION(count == 0, "count != 0 after clearing history");
#endif
return NS_OK;
}
/* Get size of the history list */
NS_IMETHODIMP
nsUrlbarHistory::GetCount(PRInt32 * aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
nsCOMPtr<nsIRDFContainer> container;
gRDFCUtils->MakeSeq(mDataSource,
kNC_URLBARHISTORY,
getter_AddRefs(container));
NS_ENSURE_TRUE(container, NS_ERROR_FAILURE);
return container->GetCount(aResult);
}
NS_IMETHODIMP
nsUrlbarHistory::OnStartLookup(const PRUnichar *uSearchString,
nsIAutoCompleteResults *previousSearchResult,
nsIAutoCompleteListener *listener)
{
nsresult rv = NS_OK;
if (!listener)
return NS_ERROR_NULL_POINTER;
if (!mEnabled) {// urlbar autocomplete is not enabled
listener->OnAutoComplete(nsnull, nsIAutoCompleteStatus::ignored);
return NS_OK;
}
// printf("Autocomplete is enabled\n");
if (uSearchString[0] == 0)
{
listener->OnAutoComplete(nsnull, nsIAutoCompleteStatus::ignored);
return NS_OK;
}
// Check if it is one of the generic strings "http://, www., ftp:// etc..
PRInt32 cnt = mIgnoreArray.Count();
for(PRInt32 i=0; i<cnt; i++) {
nsString * match = mIgnoreArray.StringAt(i);
if (match) {
PRInt32 index = match->Find(uSearchString, PR_TRUE);
if (index == 0) {
listener->OnAutoComplete(nsnull, nsIAutoCompleteStatus::ignored);
return NS_OK;
}
} // match
} //for
nsCOMPtr<nsIAutoCompleteResults> results;
/* Don't call SearchPreviousResults. It is buggy
if (NS_FAILED(SearchPreviousResults(uSearchString, previousSearchResult)))
{
results = do_CreateInstance(NS_AUTOCOMPLETERESULTS_CONTRACTID);
NS_ENSURE_TRUE(results, NS_ERROR_FAILURE);
rv = SearchCache(uSearchString, results);
}
else
results = previousSearchResult;
*/
results = do_CreateInstance(NS_AUTOCOMPLETERESULTS_CONTRACTID);
NS_ENSURE_TRUE(results, NS_ERROR_FAILURE);
rv = SearchCache(nsLiteralString(uSearchString), results);
AutoCompleteStatus status = nsIAutoCompleteStatus::failed;
if (NS_FAILED(rv)) return NS_OK;
PRBool addedDefaultItem = PR_FALSE;
results->SetSearchString(uSearchString);
results->SetDefaultItemIndex(-1);
nsCOMPtr<nsISupportsArray> array;
rv = results->GetItems(getter_AddRefs(array));
if (NS_FAILED(rv)) return NS_OK;
PRUint32 nbrOfItems;
rv = array->Count(&nbrOfItems);
if (NS_SUCCEEDED(rv)) {
if (nbrOfItems > 1) {
results->SetDefaultItemIndex(addedDefaultItem ? 1 : 0);
status = nsIAutoCompleteStatus::matchFound;
}
else {
if (nbrOfItems == 1) {
results->SetDefaultItemIndex(0);
status = nsIAutoCompleteStatus::matchFound;
}
else
status = nsIAutoCompleteStatus::noMatch;
}
} // NS_SUCCEEDED(rv)
listener->OnAutoComplete(results, status);
return NS_OK;
}
#if 0
NS_IMETHODIMP
nsUrlbarHistory::SearchPreviousResults(const PRUnichar *searchStr,
nsIAutoCompleteResults *previousSearchResult)
{
if (!previousSearchResult)
return NS_ERROR_NULL_POINTER;
nsXPIDLString prevSearchString;
PRUint32 searchStrLen = nsCRT::strlen(searchStr);
nsresult rv;
rv = previousSearchResult->GetSearchString(getter_Copies(prevSearchString));
if (NS_FAILED(rv))
return NS_ERROR_FAILURE;
if (!(const PRUnichar*)prevSearchString)
return NS_ERROR_FAILURE;
PRUint32 prevSearchStrLen = nsCRT::strlen(prevSearchString);
if (searchStrLen < prevSearchStrLen || nsCRT::strncasecmp(searchStr, prevSearchString, prevSearchStrLen != 0))
return NS_ERROR_ABORT;
nsCOMPtr<nsISupportsArray> array;
rv = previousSearchResult->GetItems(getter_AddRefs(array));
if (NS_FAILED(rv)) return rv;
PRUint32 nbrOfItems;
PRUint32 i;
rv = array->Count(&nbrOfItems);
if (NS_FAILED(rv) || nbrOfItems <= 0)
return NS_ERROR_FAILURE;
nsCOMPtr<nsISupports> item;
nsCOMPtr<nsIAutoCompleteItem> resultItem;
// XXX I don't understand the purpose of this loop!
for (i = 0; i < nbrOfItems; i ++) {
rv = array->QueryElementAt(i, NS_GET_IID(nsIAutoCompleteItem),
getter_AddRefs(resultItem));
if (NS_FAILED(rv))
return NS_ERROR_FAILURE;
nsXPIDLString itemValue;
resultItem->GetValue(getter_Copies(itemValue));
// nsCAutoString itemAutoStr;
// itemAutoStr.AssignWithConversion(itemValue);
// printf("SearchPreviousResults::Comparing %s with %s \n", searchAutoStr.ToNewCString(), itemAutoStr.get());
if (!(const PRUnichar*)itemValue)
continue;
if (nsCRT::strncasecmp(searchStr, itemValue, searchStrLen) == 0)
continue;
}
return NS_OK;
}
#endif
NS_IMETHODIMP
nsUrlbarHistory::SearchCache(nsAReadableString& searchStr,
nsIAutoCompleteResults* results)
{
nsresult rv = NS_OK;
nsCOMPtr<nsISimpleEnumerator> entries;
//printf("******** In SearchCache *******\n");
PRInt32 protocolIndex=-1;
nsAutoString searchProtocol, searchPath;
PRInt32 searchPathIndex, searchStrLength;
// Get the length of the search string
searchStrLength = searchStr.Length();
// Check if there is any protocol present in the
// search string.
GetHostIndex(searchStr, &searchPathIndex);
if (searchPathIndex > 0) {
// There was a protocol in the search string. Strip off
// the protocol from the rest of the url
searchStr.Left(searchProtocol, searchPathIndex);
searchStr.Mid(searchPath, searchPathIndex, searchStrLength);
}
else {
// There was no protocol in the search string.
searchPath = searchStr;
}
//printf("Search String is %s path = %s protocol = %s \n", searchStr.ToNewCString(), searchPath.ToNewCString(), searchProtocol.ToNewCString());
if (!gRDFCUtils || !kNC_URLBARHISTORY)
return NS_ERROR_FAILURE;
nsCOMPtr<nsIRDFContainer> container;
/* Get the elements in the data source
* through the container
*/
rv = gRDFCUtils->MakeSeq(mDataSource,
kNC_URLBARHISTORY,
getter_AddRefs(container));
NS_ENSURE_TRUE(container, NS_ERROR_FAILURE);
//Get the elements from the container
container->GetElements(getter_AddRefs(entries));
NS_ENSURE_TRUE(entries, NS_ERROR_FAILURE);
PRBool moreElements = PR_FALSE;
while (NS_SUCCEEDED(entries->HasMoreElements(&moreElements)) && moreElements) {
nsCOMPtr<nsISupports> entry;
nsCOMPtr<nsIRDFLiteral> literal;
nsAutoString rdfProtocol, rdfPath;
PRInt32 rdfPathIndex, index = -1;
nsAutoString match;
const PRUnichar * rdfValue = nsnull;
rv = entries->GetNext(getter_AddRefs(entry));
if (entry) {
literal = do_QueryInterface(entry);
literal->GetValueConst(&rdfValue);
}
if (!rdfValue)
continue;
nsLiteralString valueStr(rdfValue);
// Get the index of the hostname in the rdf string
GetHostIndex (valueStr, &rdfPathIndex);
if (rdfPathIndex > 0) {
// RDf string has a protocol in it, Strip it off
// from the rest of the url;
valueStr.Left(rdfProtocol, rdfPathIndex);
valueStr.Mid(rdfPath, rdfPathIndex, valueStr.Length());
}
else {
// There was no protocol.
rdfPath = valueStr;
}
//printf("RDFString is %s path = %s protocol = %s\n", valueStr.ToNewCString(), rdfPath.ToNewCString(), rdfProtocol.ToNewCString());
// We have all the data we need. Let's do the comparison
// We compare the path first and compare the protocol next
index = rdfPath.Find(searchPath, PR_TRUE);
if (index == 0) {
// The paths match. Now let's compare protocols
if (searchProtocol.Length() && rdfProtocol.Length()) {
// Both the strings have a protocol part. Compare them.
protocolIndex = rdfProtocol.Find(searchProtocol);
if (protocolIndex == 0) {
// Both protocols match. We found a result item
match = valueStr;
}
}
else if (searchProtocol.Length() && (rdfProtocol.Length() <= 0)) {
/* The searchString has a protocol but the rdf string doesn't
* Check if the searchprotocol is the default "http://". If so,
* prepend the searchProtocol to the rdfPath and provide that as
* the result. Otherwise we don't have a match
*/
// XXX I guess hard-coded "http://" is OK, since netlib considers
// all urls to be char *
if ((searchProtocol.Find("http://", PR_TRUE)) == 0) {
match = searchProtocol + rdfPath;
}
}
else if ((searchProtocol.Length() <=0) && rdfProtocol.Length() ||
(searchProtocol.Length() <=0) && (rdfProtocol.Length() <= 0)) {
/* Provide the rdfPath (no protocol, just the www.xyz.com/... part)
* as the result for the following 2 cases.
* a) searchString has no protocol but rdfString has protocol
* b) Both searchString and rdfString don't have a protocol
*/
match = rdfPath;
}
} // (index == 0)
if (!match.IsEmpty()) {
/* We have a result item.
* First make sure that the value is not already
* present in the results array. If we have
* www.mozilla.org and http://www.mozilla.org as unique addresses
* in the history and due to the algorithm we follow above to find a match,
* when the user user types, http://www.m, we would have 2 matches, both being,
* http://www.mozilla.org. So, before adding an entry as a result,
* make sure it is not already present in the resultarray
*/
PRBool itemPresent = PR_FALSE;
rv = CheckItemAvailability(match, results, &itemPresent);
if (itemPresent) {
continue;
}
//Create an AutoComplete Item
nsCOMPtr<nsIAutoCompleteItem> newItem(do_CreateInstance(NS_AUTOCOMPLETEITEM_CONTRACTID));
NS_ENSURE_TRUE(newItem, NS_ERROR_FAILURE);
newItem->SetValue(match.get());
nsCOMPtr<nsISupportsArray> array;
rv = results->GetItems(getter_AddRefs(array));
if (NS_SUCCEEDED(rv))
{
// printf("Appending element %s to the results array\n", item->ToNewCString());
array->AppendElement((nsISupports*)newItem);
}
/* The result may be much more than what was asked for. For example
* the user types http://www.moz and we had http://www.mozilla.org/sidebar
* as an entry in the history. This will match our selection criteria above
* above and will be provided as result. But the user may actually want to
* go to http://www.mozilla.org. If we are such a situation, offer
* http://www.mozilla.org (The first part of the result string http://www.mozilla.org/sidebar)
* as a result option(probably the default result).
*/
rv = VerifyAndCreateEntry(searchStr, match, results);
}
} // while
return rv;
}
NS_IMETHODIMP
nsUrlbarHistory::GetHostIndex(nsAReadableString& aPath, PRInt32 * aReturn)
{
if (!aReturn)
return NS_ERROR_FAILURE;
PRInt32 slashIndex=-1;
nsresult rv;
nsCOMPtr<nsIURL> pathURL=do_CreateInstance(kStandardURLCID, &rv);
if (pathURL) {
pathURL->SetSpec(NS_ConvertUCS2toUTF8(aPath).get());
nsXPIDLCString host, preHost, filePath;
pathURL->GetHost(getter_Copies(host));
pathURL->GetFilePath(getter_Copies(filePath));
pathURL->GetPreHost(getter_Copies(preHost));
nsAutoString path(aPath);
if ((const char*)preHost)
slashIndex = path.Find(preHost, PR_TRUE);
else if ((const char *)host)
slashIndex = path.Find(host,PR_TRUE);
else if ((const char *)filePath)
slashIndex = path.Find(filePath, PR_TRUE);
else
slashIndex = 0;
//printf("$$$$ Scheme for uri = %s, preHost = %s, filepath = %s, Host = %s HostIndex = %d\n", pathScheme, preHost, filePath, pathHost, *aReturn);
}
*aReturn = slashIndex;
return NS_OK;
}
NS_IMETHODIMP
nsUrlbarHistory::CheckItemAvailability(nsAReadableString& aItem,
nsIAutoCompleteResults * aArray,
PRBool * aResult)
{
if (!aArray)
return PR_FALSE;
nsresult rv;
*aResult = PR_FALSE;
nsCOMPtr<nsISupportsArray> array;
rv = aArray->GetItems(getter_AddRefs(array));
// no item array, just return false;
if (NS_FAILED(rv)) return NS_OK;
PRUint32 nbrOfItems=0;
PRUint32 i;
rv = array->Count(&nbrOfItems);
// If there is no item found in the array, return false
if (nbrOfItems <= 0)
return NS_OK;
nsCOMPtr <nsIAutoCompleteItem> resultItem;
for (i = 0; i < nbrOfItems; i ++) {
rv = array->QueryElementAt(i, NS_GET_IID(nsIAutoCompleteItem),
getter_AddRefs(resultItem));
if (NS_FAILED(rv))
return NS_ERROR_FAILURE;
nsXPIDLString itemValue;
resultItem->GetValue(getter_Copies(itemValue));
// Using nsIURI to do comparisons didn't quite work out.
// So use nsCRT methods
if (aItem.Equals(itemValue))
{
//printf("In CheckItemAvailability. Item already found\n");
*aResult = PR_TRUE;
break;
}
} // for
return NS_OK;
}
NS_IMETHODIMP
nsUrlbarHistory::VerifyAndCreateEntry(nsAReadableString& aSearchItem,
nsString& aMatchStr,
nsIAutoCompleteResults * aResultArray)
{
if (!aResultArray)
return NS_ERROR_FAILURE;
PRInt32 searchStrLen = aSearchItem.Length();
nsresult rv;
nsCOMPtr<nsIURL> searchURL = do_CreateInstance(kStandardURLCID, &rv);
if (searchURL) {
searchURL->SetSpec(NS_ConvertUCS2toUTF8(aSearchItem).get());
nsXPIDLCString filePath;
searchURL->GetFilePath(getter_Copies(filePath));
// Don't bother checking for hostname if the search string
// already has a filepath;
if (filePath && (nsCRT::strlen(filePath) > 1)) {
return NS_OK;
}
}
nsCOMPtr<nsIURL> matchURL = do_CreateInstance(kStandardURLCID, &rv);
if (matchURL) {
matchURL->SetSpec(NS_ConvertUCS2toUTF8(aMatchStr).get());
nsXPIDLCString filePath;
matchURL->GetFilePath(getter_Copies(filePath));
// If the match string doesn't have a filepath
// we need to do nothing here, return.
if (!filePath || (filePath && (nsCRT::strlen(filePath) <=1)))
return NS_OK;
// Find the position of the filepath in the result string
PRInt32 slashIndex = aMatchStr.Find("/", PR_FALSE, searchStrLen);
// Extract the host name
nsAutoString hostName;
aMatchStr.Left(hostName, slashIndex);
//printf("#### Host Name is %s\n", hostName.ToNewCString());
// Check if this host is already present in the result array
// If not add it to the result array
PRBool itemAvailable = PR_TRUE;
CheckItemAvailability(hostName, aResultArray, &itemAvailable);
if (!itemAvailable) {
// Insert the host name to the result array at the top
//Create an AutoComplete Item
nsCOMPtr<nsIAutoCompleteItem> newItem(do_CreateInstance(NS_AUTOCOMPLETEITEM_CONTRACTID));
NS_ENSURE_TRUE(newItem, NS_ERROR_FAILURE);
newItem->SetValue(hostName.GetUnicode());
nsCOMPtr<nsISupportsArray> array;
rv = aResultArray->GetItems(getter_AddRefs(array));
// Always insert the host entry at the top of the array
if (NS_SUCCEEDED(rv)) {
array->InsertElementAt(newItem, 0);
}
}
}
return NS_OK;
}
NS_IMETHODIMP
nsUrlbarHistory::OnStopLookup()
{
printf("nsUrlbarHistory::OnStopLookup()\n");
return NS_OK;
}
NS_IMETHODIMP
nsUrlbarHistory::OnAutoComplete(const PRUnichar *searchString,
nsIAutoCompleteResults *previousSearchResult,
nsIAutoCompleteListener *listener)
{
#if 1
printf("nsUrlbarHistory::OnAutoComplete(%s)\n", NS_ConvertUCS2toUTF8(searchString));
#endif
return NS_OK;
}
NS_IMETHODIMP
nsUrlbarHistory::Observe(nsISupports *aSubject, const PRUnichar *aTopic,
const PRUnichar *aSomeData)
{
nsresult rv;
if (nsCRT::strcmp(aTopic, NS_LITERAL_STRING("nsPref:changed").get())==0) {
nsCOMPtr<nsIPref> prefs=do_QueryInterface(aSubject, &rv);
if (NS_SUCCEEDED(rv))
prefs->GetBoolPref(PREF_AUTOCOMPLETE_ENABLED, &mEnabled);
}
return NS_OK;
}

View File

@@ -1,68 +0,0 @@
/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* 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 the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications, Inc. Portions created by Netscape are
* Copyright (C) 1999, Mozilla. All Rights Reserved.
*
* Contributor(s):
* Radha Kulkarni <radha@netscape.com>
*/
#ifndef nsUrlbarHistory_h
#define nsUrlbarHistory_h
// Helper Classes
#include "nsCOMPtr.h"
//Interfaces Needed
#include "nsIUrlbarHistory.h"
#include "nsIAutoCompleteSession.h"
#include "nsIObserver.h"
#include "nsVoidArray.h"
#include "nsIRDFService.h"
#include "nsIRDFDataSource.h"
#include "nsRDFCID.h"
class nsUrlbarHistory: public nsIUrlbarHistory,
public nsIObserver,
public nsIAutoCompleteSession
{
public:
nsUrlbarHistory();
NS_DECL_ISUPPORTS
NS_DECL_NSIURLBARHISTORY
NS_DECL_NSIOBSERVER
NS_DECL_NSIAUTOCOMPLETESESSION
protected:
virtual ~nsUrlbarHistory();
#if 0
NS_IMETHOD SearchPreviousResults(const PRUnichar *, nsIAutoCompleteResults *);
#endif
NS_IMETHOD SearchCache(nsAReadableString&, nsIAutoCompleteResults *);
NS_IMETHOD GetHostIndex(nsAReadableString& aPath, PRInt32 * aReturn);
NS_IMETHOD CheckItemAvailability(nsAReadableString& aItem, nsIAutoCompleteResults * aArray, PRBool * aResult);
NS_IMETHOD VerifyAndCreateEntry(nsAReadableString& aItem, nsString& aMatchItem, nsIAutoCompleteResults * aArray);
private:
nsStringArray mIgnoreArray;
nsCOMPtr<nsIRDFDataSource> mDataSource;
PRBool mEnabled;
};
#endif /* nsUrlbarHistory */