summaryrefslogtreecommitdiffstats
path: root/dom/base/nsScriptNameSpaceManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/nsScriptNameSpaceManager.h')
-rw-r--r--dom/base/nsScriptNameSpaceManager.h177
1 files changed, 177 insertions, 0 deletions
diff --git a/dom/base/nsScriptNameSpaceManager.h b/dom/base/nsScriptNameSpaceManager.h
new file mode 100644
index 000000000..3817e2c9c
--- /dev/null
+++ b/dom/base/nsScriptNameSpaceManager.h
@@ -0,0 +1,177 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/.
+ *
+ *
+ * This Original Code has been modified by IBM Corporation.
+ * Modifications made by IBM described herein are
+ * Copyright (c) International Business Machines
+ * Corporation, 2000
+ *
+ * Modifications to Mozilla code or documentation
+ * identified per MPL Section 3.3
+ *
+ * Date Modified by Description of modification
+ * 03/27/2000 IBM Corp. Added PR_CALLBACK for Optlink
+ * use in OS2
+ */
+
+#ifndef nsScriptNameSpaceManager_h__
+#define nsScriptNameSpaceManager_h__
+
+#include "mozilla/MemoryReporting.h"
+#include "nsBaseHashtable.h"
+#include "nsIMemoryReporter.h"
+#include "nsIScriptNameSpaceManager.h"
+#include "nsString.h"
+#include "nsID.h"
+#include "PLDHashTable.h"
+#include "nsDOMClassInfo.h"
+#include "nsIObserver.h"
+#include "nsWeakReference.h"
+#include "xpcpublic.h"
+
+struct nsGlobalNameStruct
+{
+ enum nametype {
+ eTypeNotInitialized,
+ eTypeProperty,
+ eTypeExternalConstructor,
+ eTypeClassConstructor,
+ eTypeClassProto,
+ } mType;
+
+ bool mChromeOnly : 1;
+ bool mAllowXBL : 1;
+
+ union {
+ int32_t mDOMClassInfoID; // eTypeClassConstructor
+ nsIID mIID; // eTypeClassProto
+ nsCID mCID; // All other types
+ };
+};
+
+class GlobalNameMapEntry : public PLDHashEntryHdr
+{
+public:
+ // Our hash table ops don't care about the order of these members.
+ nsString mKey;
+ nsGlobalNameStruct mGlobalName;
+
+ size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const {
+ // Measurement of the following members may be added later if DMD finds it
+ // is worthwhile:
+ // - mGlobalName
+ return mKey.SizeOfExcludingThisIfUnshared(aMallocSizeOf);
+ }
+};
+
+class nsICategoryManager;
+
+class nsScriptNameSpaceManager : public nsIObserver,
+ public nsSupportsWeakReference,
+ public nsIMemoryReporter
+{
+public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIOBSERVER
+ NS_DECL_NSIMEMORYREPORTER
+
+ nsScriptNameSpaceManager();
+
+ nsresult Init();
+
+ // Returns a nsGlobalNameStruct for aName, or null if one is not
+ // found. The returned nsGlobalNameStruct is only guaranteed to be
+ // valid until the next call to any of the methods in this class.
+ // It also returns a pointer to the string buffer of the classname
+ // in the nsGlobalNameStruct.
+ const nsGlobalNameStruct* LookupName(const nsAString& aName,
+ const char16_t **aClassName = nullptr);
+
+ nsresult RegisterClassName(const char *aClassName,
+ int32_t aDOMClassInfoID,
+ bool aPrivileged,
+ bool aXBLAllowed,
+ const char16_t **aResult);
+
+ nsresult RegisterClassProto(const char *aClassName,
+ const nsIID *aConstructorProtoIID,
+ bool *aFoundOld);
+
+ class NameIterator : public PLDHashTable::Iterator
+ {
+ public:
+ typedef PLDHashTable::Iterator Base;
+ explicit NameIterator(PLDHashTable* aTable) : Base(aTable) {}
+ NameIterator(NameIterator&& aOther) : Base(mozilla::Move(aOther.mTable)) {}
+
+ const GlobalNameMapEntry* Get() const
+ {
+ return static_cast<const GlobalNameMapEntry*>(Base::Get());
+ }
+
+ private:
+ NameIterator() = delete;
+ NameIterator(const NameIterator&) = delete;
+ NameIterator& operator=(const NameIterator&) = delete;
+ NameIterator& operator=(const NameIterator&&) = delete;
+ };
+
+ NameIterator GlobalNameIter() { return NameIterator(&mGlobalNames); }
+
+ size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
+
+private:
+ virtual ~nsScriptNameSpaceManager();
+
+ // Adds a new entry to the hash and returns the nsGlobalNameStruct
+ // that aKey will be mapped to. If mType in the returned
+ // nsGlobalNameStruct is != eTypeNotInitialized, an entry for aKey
+ // already existed.
+ nsGlobalNameStruct *AddToHash(const char *aKey,
+ const char16_t **aClassName = nullptr);
+
+ // Removes an existing entry from the hash.
+ void RemoveFromHash(const nsAString *aKey);
+
+ nsresult FillHash(nsICategoryManager *aCategoryManager,
+ const char *aCategory);
+
+ /**
+ * Add a new category entry into the hash table.
+ * Only some categories can be added (see the beginning of the definition).
+ * The other ones will be ignored.
+ *
+ * @aCategoryManager Instance of the category manager service.
+ * @aCategory Category where the entry comes from.
+ * @aEntry The entry that should be added.
+ */
+ nsresult AddCategoryEntryToHash(nsICategoryManager* aCategoryManager,
+ const char* aCategory,
+ nsISupports* aEntry);
+
+ /**
+ * Remove an existing category entry from the hash table.
+ * Only some categories can be removed (see the beginning of the definition).
+ * The other ones will be ignored.
+ *
+ * @aCategory Category where the entry will be removed from.
+ * @aEntry The entry that should be removed.
+ */
+ nsresult RemoveCategoryEntryFromHash(nsICategoryManager* aCategoryManager,
+ const char* aCategory,
+ nsISupports* aEntry);
+
+ // common helper for AddCategoryEntryToHash and RemoveCategoryEntryFromHash
+ nsresult OperateCategoryEntryHash(nsICategoryManager* aCategoryManager,
+ const char* aCategory,
+ nsISupports* aEntry,
+ bool aRemove);
+
+ PLDHashTable mGlobalNames;
+};
+
+#endif /* nsScriptNameSpaceManager_h__ */