зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
68a01f2642
Коммит
aba89cc16a
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче