summaryrefslogtreecommitdiffstats
path: root/security/manager/ssl/nsCertTree.h
diff options
context:
space:
mode:
Diffstat (limited to 'security/manager/ssl/nsCertTree.h')
-rw-r--r--security/manager/ssl/nsCertTree.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/security/manager/ssl/nsCertTree.h b/security/manager/ssl/nsCertTree.h
new file mode 100644
index 000000000..bf17b4efa
--- /dev/null
+++ b/security/manager/ssl/nsCertTree.h
@@ -0,0 +1,154 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef _NS_CERTTREE_H_
+#define _NS_CERTTREE_H_
+
+#include "nsCOMPtr.h"
+#include "nsIServiceManager.h"
+#include "nsICertTree.h"
+#include "nsITreeView.h"
+#include "nsITreeBoxObject.h"
+#include "nsITreeSelection.h"
+#include "nsIMutableArray.h"
+#include "nsNSSComponent.h"
+#include "nsTArray.h"
+#include "PLDHashTable.h"
+#include "nsIX509CertDB.h"
+#include "nsCertOverrideService.h"
+#include "mozilla/Attributes.h"
+
+typedef struct treeArrayElStr treeArrayEl;
+
+struct CompareCacheHashEntry {
+ enum { max_criterions = 3 };
+ CompareCacheHashEntry();
+
+ void *key; // no ownership
+ bool mCritInit[max_criterions];
+ nsXPIDLString mCrit[max_criterions];
+};
+
+struct CompareCacheHashEntryPtr : PLDHashEntryHdr {
+ CompareCacheHashEntryPtr();
+ ~CompareCacheHashEntryPtr();
+ CompareCacheHashEntry *entry;
+};
+
+class nsCertAddonInfo final : public nsISupports
+{
+private:
+ ~nsCertAddonInfo() {}
+
+public:
+ NS_DECL_ISUPPORTS
+
+ nsCertAddonInfo() : mUsageCount(0) {}
+
+ RefPtr<nsIX509Cert> mCert;
+ // how many display entries reference this?
+ // (and therefore depend on the underlying cert)
+ int32_t mUsageCount;
+};
+
+class nsCertTreeDispInfo : public nsICertTreeItem
+{
+protected:
+ virtual ~nsCertTreeDispInfo();
+
+public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSICERTTREEITEM
+
+ nsCertTreeDispInfo();
+ nsCertTreeDispInfo(nsCertTreeDispInfo &other);
+
+ RefPtr<nsCertAddonInfo> mAddonInfo;
+ enum {
+ direct_db, host_port_override
+ } mTypeOfEntry;
+ nsCString mAsciiHost;
+ int32_t mPort;
+ nsCertOverride::OverrideBits mOverrideBits;
+ bool mIsTemporary;
+ nsCOMPtr<nsIX509Cert> mCert;
+};
+
+class nsCertTree : public nsICertTree
+{
+public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSICERTTREE
+ NS_DECL_NSITREEVIEW
+
+ nsCertTree();
+
+ enum sortCriterion { sort_IssuerOrg, sort_Org, sort_Token,
+ sort_CommonName, sort_IssuedDateDescending, sort_Email, sort_None };
+
+protected:
+ virtual ~nsCertTree();
+
+ void ClearCompareHash();
+ void RemoveCacheEntry(void *key);
+
+ typedef int (*nsCertCompareFunc)(void *, nsIX509Cert *a, nsIX509Cert *b);
+
+ static CompareCacheHashEntry *getCacheEntry(void *cache, void *aCert);
+ static void CmpInitCriterion(nsIX509Cert *cert, CompareCacheHashEntry *entry,
+ sortCriterion crit, int32_t level);
+ static int32_t CmpByCrit(nsIX509Cert *a, CompareCacheHashEntry *ace,
+ nsIX509Cert *b, CompareCacheHashEntry *bce,
+ sortCriterion crit, int32_t level);
+ static int32_t CmpBy(void *cache, nsIX509Cert *a, nsIX509Cert *b,
+ sortCriterion c0, sortCriterion c1, sortCriterion c2);
+ static int32_t CmpCACert(void *cache, nsIX509Cert *a, nsIX509Cert *b);
+ static int32_t CmpWebSiteCert(void *cache, nsIX509Cert *a, nsIX509Cert *b);
+ static int32_t CmpUserCert(void *cache, nsIX509Cert *a, nsIX509Cert *b);
+ static int32_t CmpEmailCert(void *cache, nsIX509Cert *a, nsIX509Cert *b);
+ nsCertCompareFunc GetCompareFuncFromCertType(uint32_t aType);
+ int32_t CountOrganizations();
+
+ nsresult GetCertsByType(uint32_t aType, nsCertCompareFunc aCertCmpFn,
+ void *aCertCmpFnArg);
+
+ nsresult GetCertsByTypeFromCache(nsIX509CertList *aCache, uint32_t aType,
+ nsCertCompareFunc aCertCmpFn, void *aCertCmpFnArg);
+private:
+ static const uint32_t kInitialCacheLength = 64;
+
+ nsTArray< RefPtr<nsCertTreeDispInfo> > mDispInfo;
+ nsCOMPtr<nsITreeBoxObject> mTree;
+ nsCOMPtr<nsITreeSelection> mSelection;
+ treeArrayEl *mTreeArray;
+ int32_t mNumOrgs;
+ int32_t mNumRows;
+ PLDHashTable mCompareCache;
+ nsCOMPtr<nsINSSComponent> mNSSComponent;
+ nsCOMPtr<nsICertOverrideService> mOverrideService;
+ RefPtr<nsCertOverrideService> mOriginalOverrideService;
+
+ treeArrayEl *GetThreadDescAtIndex(int32_t _index);
+ already_AddRefed<nsIX509Cert>
+ GetCertAtIndex(int32_t _index, int32_t *outAbsoluteCertOffset = nullptr);
+ already_AddRefed<nsCertTreeDispInfo>
+ GetDispInfoAtIndex(int32_t index, int32_t *outAbsoluteCertOffset = nullptr);
+ void FreeCertArray();
+ nsresult UpdateUIContents();
+
+ nsresult GetCertsByTypeFromCertList(CERTCertList *aCertList,
+ uint32_t aType,
+ nsCertCompareFunc aCertCmpFn,
+ void *aCertCmpFnArg);
+
+ nsCOMPtr<nsIMutableArray> mCellText;
+
+#ifdef DEBUG_CERT_TREE
+ /* for debugging purposes */
+ void dumpMap();
+#endif
+};
+
+#endif /* _NS_CERTTREE_H_ */
+