diff --git a/mailnews/addrbook/public/nsIAbDirectory.idl b/mailnews/addrbook/public/nsIAbDirectory.idl index 5585c704a8c..09f75e6f26f 100644 --- a/mailnews/addrbook/public/nsIAbDirectory.idl +++ b/mailnews/addrbook/public/nsIAbDirectory.idl @@ -130,6 +130,11 @@ interface nsIAbDirectory : nsISupports { */ readonly attribute boolean isRemote; + /** + * directory is secure (as in LDAP over SSL) + */ + readonly attribute boolean isSecure; + /** * directory should be searched when doing local autocomplete */ diff --git a/mailnews/addrbook/resources/content/abDirTreeOverlay.xul b/mailnews/addrbook/resources/content/abDirTreeOverlay.xul index 761526785d8..b64b60ce68a 100644 --- a/mailnews/addrbook/resources/content/abDirTreeOverlay.xul +++ b/mailnews/addrbook/resources/content/abDirTreeOverlay.xul @@ -65,13 +65,16 @@ Contributors: + - + diff --git a/mailnews/addrbook/src/nsAbDirProperty.cpp b/mailnews/addrbook/src/nsAbDirProperty.cpp index 7bbe6a5845d..235cb64ecae 100644 --- a/mailnews/addrbook/src/nsAbDirProperty.cpp +++ b/mailnews/addrbook/src/nsAbDirProperty.cpp @@ -280,6 +280,13 @@ NS_IMETHODIMP nsAbDirProperty::GetIsRemote(PRBool *aIsRemote) return NS_OK; } +NS_IMETHODIMP nsAbDirProperty::GetIsSecure(PRBool *aIsSecure) +{ + NS_ENSURE_ARG_POINTER(aIsSecure); + *aIsSecure = PR_FALSE; + return NS_OK; +} + NS_IMETHODIMP nsAbDirProperty::GetSearchDuringLocalAutocomplete(PRBool *aSearchDuringLocalAutocomplete) { NS_ENSURE_ARG_POINTER(aSearchDuringLocalAutocomplete); diff --git a/mailnews/addrbook/src/nsAbLDAPDirectory.cpp b/mailnews/addrbook/src/nsAbLDAPDirectory.cpp index 08b391f19aa..534f87d8b61 100644 --- a/mailnews/addrbook/src/nsAbLDAPDirectory.cpp +++ b/mailnews/addrbook/src/nsAbLDAPDirectory.cpp @@ -55,6 +55,7 @@ #include "nsIPref.h" #include "nsXPCOM.h" #include "nsISupportsPrimitives.h" +#include "nsIPrefBranch.h" nsAbLDAPDirectory::nsAbLDAPDirectory() : nsAbDirectoryRDFResource(), @@ -454,6 +455,27 @@ NS_IMETHODIMP nsAbLDAPDirectory::GetIsRemote(PRBool *aIsRemote) return NS_OK; } +NS_IMETHODIMP nsAbLDAPDirectory::GetIsSecure(PRBool *aIsSecure) +{ + NS_ENSURE_ARG_POINTER(aIsSecure); + + nsresult rv; + nsCOMPtr prefBranch = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + + // use mURINoQuery to get a prefName + nsCAutoString prefName; + prefName = nsDependentCString(mURINoQuery.get() + kLDAPDirectoryRootLen) + NS_LITERAL_CSTRING(".uri"); + + nsXPIDLCString URI; + rv = prefBranch->GetCharPref(prefName.get(), getter_Copies(URI)); + NS_ENSURE_SUCCESS(rv,rv); + + // to determine if this is a secure directory, check if the uri is ldaps:// or not + *aIsSecure = (strncmp(URI.get(), "ldaps:", 6) == 0); + return NS_OK; +} + NS_IMETHODIMP nsAbLDAPDirectory::GetSearchDuringLocalAutocomplete(PRBool *aSearchDuringLocalAutocomplete) { NS_ENSURE_ARG_POINTER(aSearchDuringLocalAutocomplete); diff --git a/mailnews/addrbook/src/nsAbLDAPDirectory.h b/mailnews/addrbook/src/nsAbLDAPDirectory.h index d28971bbf1d..1a73d4c6919 100644 --- a/mailnews/addrbook/src/nsAbLDAPDirectory.h +++ b/mailnews/addrbook/src/nsAbLDAPDirectory.h @@ -67,6 +67,7 @@ public: NS_IMETHOD HasCard(nsIAbCard *cards, PRBool *hasCard); NS_IMETHOD GetSupportsMailingLists(PRBool *aSupportsMailingsLists); NS_IMETHOD GetIsRemote(PRBool *aIsRemote); + NS_IMETHOD GetIsSecure(PRBool *aIsRemote); NS_IMETHOD GetSearchDuringLocalAutocomplete(PRBool *aSearchDuringLocalAutocomplete); // nsAbLDAPDirectoryQuery methods diff --git a/mailnews/addrbook/src/nsAbView.cpp b/mailnews/addrbook/src/nsAbView.cpp index 1e6e7f3524b..52e82c27db9 100644 --- a/mailnews/addrbook/src/nsAbView.cpp +++ b/mailnews/addrbook/src/nsAbView.cpp @@ -805,12 +805,12 @@ nsresult nsAbView::CreateCollationKey(const PRUnichar *aSource, PRUint8 **aKey, NS_ENSURE_SUCCESS(rv, rv); } - // XXX can we avoid this copy? + // XXX can we avoid this copy? nsAutoString sourceString(aSource); rv = mCollationKeyGenerator->GetSortKeyLen(kCollationCaseInSensitive, sourceString, aKeyLen); NS_ENSURE_SUCCESS(rv, rv); - *aKey = (PRUint8*) nsMemory::Alloc (*aKeyLen); + *aKey = (PRUint8*) nsMemory::Alloc(*aKeyLen); if (!aKey) return NS_ERROR_OUT_OF_MEMORY; diff --git a/mailnews/addrbook/src/nsDirectoryDataSource.cpp b/mailnews/addrbook/src/nsDirectoryDataSource.cpp index b50a366b7e1..37f9f1835bd 100644 --- a/mailnews/addrbook/src/nsDirectoryDataSource.cpp +++ b/mailnews/addrbook/src/nsDirectoryDataSource.cpp @@ -60,9 +60,9 @@ #define NC_RDF_DIRURI "http://home.netscape.com/NC-rdf#DirUri" #define NC_RDF_ISMAILLIST "http://home.netscape.com/NC-rdf#IsMailList" #define NC_RDF_ISREMOTE "http://home.netscape.com/NC-rdf#IsRemote" +#define NC_RDF_ISSECURE "http://home.netscape.com/NC-rdf#IsSecure" #define NC_RDF_ISWRITEABLE "http://home.netscape.com/NC-rdf#IsWriteable" - //Directory Commands #define NC_RDF_DELETE "http://home.netscape.com/NC-rdf#Delete" #define NC_RDF_DELETECARDS "http://home.netscape.com/NC-rdf#DeleteCards" @@ -145,6 +145,8 @@ nsAbDirectoryDataSource::Init() NS_ENSURE_SUCCESS(rv,rv); rv = rdf->GetResource(NC_RDF_ISREMOTE, getter_AddRefs(kNC_IsRemote)); NS_ENSURE_SUCCESS(rv,rv); + rv = rdf->GetResource(NC_RDF_ISSECURE, getter_AddRefs(kNC_IsSecure)); + NS_ENSURE_SUCCESS(rv,rv); rv = rdf->GetResource(NC_RDF_ISWRITEABLE, getter_AddRefs(kNC_IsWriteable)); NS_ENSURE_SUCCESS(rv,rv); rv = rdf->GetResource(NC_RDF_DELETE, getter_AddRefs(kNC_Delete)); @@ -229,6 +231,7 @@ NS_IMETHODIMP nsAbDirectoryDataSource::GetTargets(nsIRDFResource* source, (kNC_DirUri == property) || (kNC_IsMailList == property) || (kNC_IsRemote == property) || + (kNC_IsSecure == property) || (kNC_IsWriteable == property)) { nsSingletonEnumerator* cursor = @@ -300,6 +303,7 @@ nsAbDirectoryDataSource::HasArcOut(nsIRDFResource *aSource, nsIRDFResource *aArc aArc == kNC_DirUri || aArc == kNC_IsMailList || aArc == kNC_IsRemote || + aArc == kNC_IsSecure || aArc == kNC_IsWriteable); } else { @@ -349,6 +353,7 @@ nsAbDirectoryDataSource::getDirectoryArcLabelsOut(nsIAbDirectory *directory, (*arcs)->AppendElement(kNC_DirUri); (*arcs)->AppendElement(kNC_IsMailList); (*arcs)->AppendElement(kNC_IsRemote); + (*arcs)->AppendElement(kNC_IsSecure); (*arcs)->AppendElement(kNC_IsWriteable); return NS_OK; } @@ -503,6 +508,8 @@ nsresult nsAbDirectoryDataSource::createDirectoryNode(nsIAbDirectory* directory, rv = createDirectoryIsMailListNode(directory, target); if ((kNC_IsRemote == property)) rv = createDirectoryIsRemoteNode(directory, target); + if ((kNC_IsSecure == property)) + rv = createDirectoryIsSecureNode(directory, target); if ((kNC_IsWriteable == property)) rv = createDirectoryIsWriteableNode(directory, target); return rv; @@ -579,16 +586,23 @@ nsresult nsAbDirectoryDataSource::createDirectoryIsRemoteNode(nsIAbDirectory* directory, nsIRDFNode **target) { - nsresult rv; PRBool isRemote; - rv = directory->GetIsRemote(&isRemote); + nsresult rv = directory->GetIsRemote(&isRemote); NS_ENSURE_SUCCESS(rv, rv); - if (isRemote) - *target = kTrueLiteral; - else - *target = kFalseLiteral; - NS_IF_ADDREF(*target); + NS_IF_ADDREF(*target = (isRemote ? kTrueLiteral : kFalseLiteral)); + return NS_OK; +} + +nsresult +nsAbDirectoryDataSource::createDirectoryIsSecureNode(nsIAbDirectory* directory, + nsIRDFNode **target) +{ + PRBool IsSecure; + nsresult rv = directory->GetIsSecure(&IsSecure); + NS_ENSURE_SUCCESS(rv, rv); + + NS_IF_ADDREF(*target = (IsSecure ? kTrueLiteral : kFalseLiteral)); return NS_OK; } @@ -596,16 +610,11 @@ nsresult nsAbDirectoryDataSource::createDirectoryIsWriteableNode(nsIAbDirectory* directory, nsIRDFNode **target) { - nsresult rv; PRBool isWriteable; - rv = directory->GetOperations(&isWriteable); + nsresult rv = directory->GetOperations(&isWriteable); NS_ENSURE_SUCCESS(rv, rv); - if (isWriteable & nsIAbDirectory::opWrite) - *target = kTrueLiteral; - else - *target = kFalseLiteral; - NS_IF_ADDREF(*target); + NS_IF_ADDREF(*target = ((isWriteable & nsIAbDirectory::opWrite) ? kTrueLiteral : kFalseLiteral)); return NS_OK; } @@ -618,11 +627,7 @@ nsAbDirectoryDataSource::createDirectoryIsMailListNode(nsIAbDirectory* directory rv = directory->GetIsMailList(&isMailList); NS_ENSURE_SUCCESS(rv, rv); - if (isMailList) - *target = kTrueLiteral; - else - *target = kFalseLiteral; - NS_IF_ADDREF(*target); + NS_IF_ADDREF(*target = (isMailList ? kTrueLiteral : kFalseLiteral)); return NS_OK; } @@ -715,7 +720,7 @@ nsresult nsAbDirectoryDataSource::DoDirectoryHasAssertion(nsIAbDirectory *direct rv = directory->HasDirectory(newDirectory, hasAssertion); } else if ((kNC_IsMailList == property) || (kNC_IsRemote == property) || - (kNC_IsWriteable == property)) + (kNC_IsSecure == property) || (kNC_IsWriteable == property)) { nsCOMPtr dirResource(do_QueryInterface(directory, &rv)); NS_ENSURE_SUCCESS(rv, rv); diff --git a/mailnews/addrbook/src/nsDirectoryDataSource.h b/mailnews/addrbook/src/nsDirectoryDataSource.h index 7151aed75b7..461aec6c709 100644 --- a/mailnews/addrbook/src/nsDirectoryDataSource.h +++ b/mailnews/addrbook/src/nsDirectoryDataSource.h @@ -120,6 +120,8 @@ protected: nsresult createDirectoryIsMailListNode(nsIAbDirectory *directory, nsIRDFNode **target); nsresult createDirectoryIsRemoteNode(nsIAbDirectory *directory, + nsIRDFNode **target); + nsresult createDirectoryIsSecureNode(nsIAbDirectory *directory, nsIRDFNode **target); nsresult createDirectoryIsWriteableNode(nsIAbDirectory *directory, nsIRDFNode **target); @@ -146,6 +148,7 @@ protected: nsCOMPtr kNC_DirUri; nsCOMPtr kNC_IsMailList; nsCOMPtr kNC_IsRemote; + nsCOMPtr kNC_IsSecure; nsCOMPtr kNC_IsWriteable; // commands diff --git a/themes/classic/jar.mn b/themes/classic/jar.mn index 702d8a854b3..418b4ffef03 100644 --- a/themes/classic/jar.mn +++ b/themes/classic/jar.mn @@ -289,6 +289,7 @@ classic.jar: skin/classic/messenger/addressbook/icons/addrbook.gif (messenger/addressbook/icons/addrbook.gif) skin/classic/messenger/addressbook/icons/ablist.gif (messenger/addressbook/icons/ablist.gif) skin/classic/messenger/addressbook/icons/remote-addrbook.gif (messenger/addressbook/icons/remote-addrbook.gif) + skin/classic/messenger/addressbook/icons/secure-remote-addrbook.gif (messenger/addressbook/icons/secure-remote-addrbook.gif) skin/classic/messenger/addressbook/icons/remote-addrbook-error.gif (messenger/addressbook/icons/remote-addrbook-error.gif) skin/classic/messenger/addressbook/icons/abcard.gif (messenger/addressbook/icons/abcard.gif) skin/classic/messenger/addressbook/icons/im.gif (messenger/addressbook/icons/im.gif) diff --git a/themes/classic/messenger/addressbook/addressPanes.css b/themes/classic/messenger/addressbook/addressPanes.css index c9a3f478a45..278fc9dd3b3 100644 --- a/themes/classic/messenger/addressbook/addressPanes.css +++ b/themes/classic/messenger/addressbook/addressPanes.css @@ -42,3 +42,8 @@ treechildren:-moz-tree-image(DirCol, IsMailList-true) { treechildren:-moz-tree-image(DirCol, IsRemote-true) { list-style-image: url("chrome://messenger/skin/addressbook/icons/remote-addrbook.gif"); } + +treechildren:-moz-tree-image(DirCol, IsRemote-true, IsSecure-true) { + list-style-image: url("chrome://messenger/skin/addressbook/icons/secure-remote-addrbook.gif"); +} + diff --git a/themes/modern/jar.mn b/themes/modern/jar.mn index df545e8f579..211cd77574f 100644 --- a/themes/modern/jar.mn +++ b/themes/modern/jar.mn @@ -296,6 +296,7 @@ modern.jar: skin/modern/messenger/addressbook/icons/directory-down.gif (messenger/addressbook/icons/directory-down.gif) skin/modern/messenger/addressbook/icons/directory-open.gif (messenger/addressbook/icons/directory-open.gif) skin/modern/messenger/addressbook/icons/directory.gif (messenger/addressbook/icons/directory.gif) + skin/modern/messenger/addressbook/icons/secure-directory.gif (messenger/addressbook/icons/secure-directory.gif) skin/modern/messenger/addressbook/icons/list.gif (messenger/addressbook/icons/list.gif) skin/modern/messenger/addressbook/icons/mast-ab.gif (messenger/addressbook/icons/mast-ab.gif) skin/modern/messenger/addressbook/icons/myaddrbk.gif (messenger/addressbook/icons/myaddrbk.gif) diff --git a/themes/modern/messenger/addressbook/addressPanes.css b/themes/modern/messenger/addressbook/addressPanes.css index becdceed12f..f210b28cea8 100644 --- a/themes/modern/messenger/addressbook/addressPanes.css +++ b/themes/modern/messenger/addressbook/addressPanes.css @@ -56,3 +56,8 @@ treechildren:-moz-tree-image(DirCol, IsMailList-true) { treechildren:-moz-tree-image(DirCol, IsRemote-true) { list-style-image: url("chrome://messenger/skin/addressbook/icons/directory.gif"); } + +treechildren:-moz-tree-image(DirCol, IsRemote-true, IsSecure-true) { + list-style-image: url("chrome://messenger/skin/addressbook/icons/secure-directory.gif"); +} +