Fix bug # 33678: require a valid URL when adding a new URL. Also, ensure that IsBookmarked() works for all URIs (not just bookmarks, but folders too) so that when looking for a folder by type, we can use IsBookmarked() to verify that the folder actually exists in the bookmarks hierarchy chain.

This commit is contained in:
rjc%netscape.com 2000-03-29 02:58:45 +00:00
Родитель 68a01f2642
Коммит aba89cc16a
3 изменённых файлов: 31 добавлений и 13 удалений

Просмотреть файл

@ -747,9 +747,17 @@ function doContextCmd(cmdName)
if (cmdName == "http://home.netscape.com/NC-rdf#command?cmd=newbookmark")
{
var promptStr = bundle.GetStringFromName("NewBookmarkURLPrompt");
urlVal = prompt(promptStr, "");
if (!urlVal || urlVal=="") return(false);
while (true)
{
var promptStr = bundle.GetStringFromName("NewBookmarkURLPrompt");
urlVal = prompt(promptStr, "");
if (!urlVal || urlVal=="") return(false);
// ensure we get a fully qualified URL (protocol colon address)
var colonOffset = urlVal.indexOf(":");
if (colonOffset > 0) break;
alert(bundle.GetStringFromName("NeedValidURL"));
}
promptStr = bundle.GetStringFromName("NewBookmarkNamePrompt");
nameVal = prompt(promptStr, "");

Просмотреть файл

@ -41,6 +41,8 @@ NewBookmarkURLPrompt = Enter a URL for the new bookmark:
NewBookmarkNamePrompt = Enter a name for the new bookmark:
NewFolderNamePrompt = Enter a name for the new folder:
NeedValidURL = Please enter a valid, fully qualified URL.
DeleteItems = Delete the selected item(s)?
WebPageUpdated = The following web page has been updated:

Просмотреть файл

@ -2773,16 +2773,11 @@ nsBookmarksService::IsBookmarked(const char *aURI, PRBool *isBookmarkedFlag)
*isBookmarkedFlag = PR_FALSE;
nsresult rv;
PRBool flag = PR_FALSE;
nsCOMPtr<nsIRDFResource> bookmark;
// check if it has the proper type
if (NS_SUCCEEDED(rv = gRDF->GetResource(aURI, getter_AddRefs(bookmark))))
{
rv = mInner->HasAssertion(bookmark, kRDF_type, kNC_Bookmark,
PR_TRUE, &flag);
}
if (flag == PR_FALSE) return(NS_OK);
if (NS_FAILED(rv = gRDF->GetResource(aURI, getter_AddRefs(bookmark))))
return(rv);
// make sure it is referred to by an ordinal (i.e. is contained in a rdf seq)
nsCOMPtr<nsISimpleEnumerator> enumerator;
@ -2799,6 +2794,7 @@ nsBookmarksService::IsBookmarked(const char *aURI, PRBool *isBookmarkedFlag)
nsCOMPtr<nsIRDFResource> property = do_QueryInterface(isupports);
if (!property) continue;
PRBool flag = PR_FALSE;
if (NS_FAILED(rv = gRDFC->IsOrdinalProperty(property, &flag))) continue;
if (flag == PR_TRUE)
{
@ -3689,18 +3685,30 @@ nsBookmarksService::setFolderHint(nsIRDFResource *newSource, nsIRDFResource *obj
nsresult
nsBookmarksService::getFolderViaHint(nsIRDFResource *objType, nsIRDFResource **folder)
{
if (!folder) return(NS_ERROR_UNEXPECTED);
*folder = nsnull;
if (!objType) return(NS_ERROR_UNEXPECTED);
nsresult rv;
nsCOMPtr<nsIRDFResource> oldSource;
if (NS_FAILED(rv = mInner->GetSource(kNC_FolderType, objType, PR_TRUE, getter_AddRefs(oldSource))))
return(rv);
if (rv != NS_RDF_NO_VALUE)
if ((rv != NS_RDF_NO_VALUE) && (oldSource))
{
*folder = oldSource;
const char *uri = nsnull;
oldSource->GetValueConst(&uri);
if (uri)
{
PRBool isBookmarkedFlag = PR_FALSE;
if (NS_SUCCEEDED(rv = IsBookmarked(uri, &isBookmarkedFlag)) &&
(isBookmarkedFlag == PR_TRUE))
{
*folder = oldSource;
}
}
}
else
if (!(*folder))
{
// fallback to some well-known defaults
if (objType == kNC_NewBookmarkFolder) *folder = kNC_BookmarksRoot;