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.h131
1 files changed, 131 insertions, 0 deletions
diff --git a/security/manager/ssl/nsCertTree.h b/security/manager/ssl/nsCertTree.h
new file mode 100644
index 0000000000..d7fd86216c
--- /dev/null
+++ b/security/manager/ssl/nsCertTree.h
@@ -0,0 +1,131 @@
+/* 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 "nsICertTree.h"
+#include "nsITreeSelection.h"
+#include "nsIMutableArray.h"
+#include "nsNSSComponent.h"
+#include "nsTArray.h"
+#include "PLDHashTable.h"
+#include "mozilla/Attributes.h"
+
+/* Disable the "base class XXX should be explicitly initialized
+ in the copy constructor" warning. */
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wextra"
+#elif defined(__GNUC__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wextra"
+#endif // __clang__ || __GNUC__
+
+#include "mozilla/dom/XULTreeElement.h"
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#elif defined(__GNUC__)
+# pragma GCC diagnostic pop
+#endif // __clang__ || __GNUC__
+
+typedef struct treeArrayElStr treeArrayEl;
+
+struct CompareCacheHashEntry {
+ enum { max_criterions = 3 };
+ CompareCacheHashEntry();
+
+ void* key; // no ownership
+ bool mCritInit[max_criterions];
+ nsString mCrit[max_criterions];
+};
+
+struct CompareCacheHashEntryPtr : PLDHashEntryHdr {
+ CompareCacheHashEntryPtr();
+ ~CompareCacheHashEntryPtr();
+ CompareCacheHashEntry* entry;
+};
+
+class nsCertTreeDispInfo : public nsICertTreeItem {
+ protected:
+ virtual ~nsCertTreeDispInfo();
+
+ public:
+ explicit nsCertTreeDispInfo(nsIX509Cert* aCert) : mCert(aCert) {}
+
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSICERTTREEITEM
+
+ 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 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();
+
+ private:
+ static const uint32_t kInitialCacheLength = 64;
+
+ nsTArray<RefPtr<nsCertTreeDispInfo>> mDispInfo;
+ RefPtr<mozilla::dom::XULTreeElement> mTree;
+ nsCOMPtr<nsITreeSelection> mSelection;
+ treeArrayEl* mTreeArray;
+ int32_t mNumOrgs;
+ int32_t mNumRows;
+ PLDHashTable mCompareCache;
+
+ 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(
+ const nsTArray<RefPtr<nsIX509Cert>>& aCertList, uint32_t aWantedType,
+ nsCertCompareFunc aCertCmpFn, void* aCertCmpFnArg);
+
+ nsCOMPtr<nsIMutableArray> mCellText;
+};
+
+#endif /* _NS_CERTTREE_H_ */