diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2020-05-25 20:28:36 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2020-05-25 20:28:36 +0200 |
commit | 5377605d6355f26cb08a4b8d5e43130599f3ac56 (patch) | |
tree | f209297519936eafe45d6c0d7f04ae885a44c40e /dom/base/nsDocument.h | |
parent | 4d373c1d360b29f94026b72c6f66e4ad313732cf (diff) | |
download | uxp-5377605d6355f26cb08a4b8d5e43130599f3ac56.tar.gz |
Issue #1564 - Split off nsIdentifierMapEntry in its own header
+ Fix dependency fallout from removing nsDocument.h from ShadowRoot.h
Diffstat (limited to 'dom/base/nsDocument.h')
-rw-r--r-- | dom/base/nsDocument.h | 146 |
1 files changed, 1 insertions, 145 deletions
diff --git a/dom/base/nsDocument.h b/dom/base/nsDocument.h index 6520d905d1..6baf40270a 100644 --- a/dom/base/nsDocument.h +++ b/dom/base/nsDocument.h @@ -19,6 +19,7 @@ #include "nsWeakReference.h" #include "nsWeakPtr.h" #include "nsTArray.h" +#include "nsIdentifierMapEntry.h" #include "nsIDOMDocument.h" #include "nsIDOMDocumentXBL.h" #include "nsStubDocumentObserver.h" @@ -130,151 +131,6 @@ public: } // namespace dom } // namespace mozilla -/** - * Right now our identifier map entries contain information for 'name' - * and 'id' mappings of a given string. This is so that - * nsHTMLDocument::ResolveName only has to do one hash lookup instead - * of two. It's not clear whether this still matters for performance. - * - * We also store the document.all result list here. This is mainly so that - * when all elements with the given ID are removed and we remove - * the ID's nsIdentifierMapEntry, the document.all result is released too. - * Perhaps the document.all results should have their own hashtable - * in nsHTMLDocument. - */ -class nsIdentifierMapEntry : public nsStringHashKey -{ -public: - typedef mozilla::dom::Element Element; - typedef mozilla::net::ReferrerPolicy ReferrerPolicy; - - explicit nsIdentifierMapEntry(const nsAString& aKey) : - nsStringHashKey(&aKey), mNameContentList(nullptr) - { - } - explicit nsIdentifierMapEntry(const nsAString* aKey) : - nsStringHashKey(aKey), mNameContentList(nullptr) - { - } - nsIdentifierMapEntry(const nsIdentifierMapEntry& aOther) : - nsStringHashKey(&aOther.GetKey()) - { - NS_ERROR("Should never be called"); - } - ~nsIdentifierMapEntry(); - - void AddNameElement(nsINode* aDocument, Element* aElement); - void RemoveNameElement(Element* aElement); - bool IsEmpty(); - nsBaseContentList* GetNameContentList() { - return mNameContentList; - } - bool HasNameElement() const { - return mNameContentList && mNameContentList->Length() != 0; - } - - /** - * Returns the element if we know the element associated with this - * id. Otherwise returns null. - */ - Element* GetIdElement(); - /** - * Returns the list of all elements associated with this id. - */ - const nsTArray<Element*>& GetIdElements() const { - return mIdContentList; - } - /** - * If this entry has a non-null image element set (using SetImageElement), - * the image element will be returned, otherwise the same as GetIdElement(). - */ - Element* GetImageIdElement(); - /** - * Append all the elements with this id to aElements - */ - void AppendAllIdContent(nsCOMArray<nsIContent>* aElements); - /** - * This can fire ID change callbacks. - * @return true if the content could be added, false if we failed due - * to OOM. - */ - bool AddIdElement(Element* aElement); - /** - * This can fire ID change callbacks. - */ - void RemoveIdElement(Element* aElement); - /** - * Set the image element override for this ID. This will be returned by - * GetIdElement(true) if non-null. - */ - void SetImageElement(Element* aElement); - bool HasIdElementExposedAsHTMLDocumentProperty(); - - bool HasContentChangeCallback() { return mChangeCallbacks != nullptr; } - void AddContentChangeCallback(nsIDocument::IDTargetObserver aCallback, - void* aData, bool aForImage); - void RemoveContentChangeCallback(nsIDocument::IDTargetObserver aCallback, - void* aData, bool aForImage); - - /** - * Remove all elements and notify change listeners. - */ - void ClearAndNotify(); - - void Traverse(nsCycleCollectionTraversalCallback* aCallback); - - struct ChangeCallback { - nsIDocument::IDTargetObserver mCallback; - void* mData; - bool mForImage; - }; - - struct ChangeCallbackEntry : public PLDHashEntryHdr { - typedef const ChangeCallback KeyType; - typedef const ChangeCallback* KeyTypePointer; - - explicit ChangeCallbackEntry(const ChangeCallback* aKey) : - mKey(*aKey) { } - ChangeCallbackEntry(const ChangeCallbackEntry& toCopy) : - mKey(toCopy.mKey) { } - - KeyType GetKey() const { return mKey; } - bool KeyEquals(KeyTypePointer aKey) const { - return aKey->mCallback == mKey.mCallback && - aKey->mData == mKey.mData && - aKey->mForImage == mKey.mForImage; - } - - static KeyTypePointer KeyToPointer(KeyType& aKey) { return &aKey; } - static PLDHashNumber HashKey(KeyTypePointer aKey) - { - return mozilla::HashGeneric(aKey->mCallback, aKey->mData); - } - enum { ALLOW_MEMMOVE = true }; - - ChangeCallback mKey; - }; - - size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; - -private: - void FireChangeCallbacks(Element* aOldElement, Element* aNewElement, - bool aImageOnly = false); - - // empty if there are no elements with this ID. - // The elements are stored as weak pointers. - nsTArray<Element*> mIdContentList; - RefPtr<nsBaseContentList> mNameContentList; - nsAutoPtr<nsTHashtable<ChangeCallbackEntry> > mChangeCallbacks; - RefPtr<Element> mImageElement; -}; - -namespace mozilla { -namespace dom { - -} // namespace dom -} // namespace mozilla - class nsDocHeaderData { public: |