Bug 1165184 - Move nsChildContentList to its own header. r=peterv
--- a/dom/base/Element.h
+++ b/dom/base/Element.h
@@ -14,16 +14,17 @@
#define mozilla_dom_Element_h__
#include "mozilla/dom/FragmentOrElement.h" // for base class
#include "nsChangeHint.h" // for enum
#include "mozilla/EventStates.h" // for member
#include "mozilla/dom/DirectionalityUtils.h"
#include "nsIDOMElement.h"
#include "nsILinkHandler.h"
+#include "nsINodeList.h"
#include "nsNodeUtils.h"
#include "nsAttrAndChildArray.h"
#include "mozFlushType.h"
#include "nsDOMAttributeMap.h"
#include "nsPresContext.h"
#include "mozilla/CORSMode.h"
#include "mozilla/Attributes.h"
#include "nsIScrollableFrame.h"
--- a/dom/base/FragmentOrElement.cpp
+++ b/dom/base/FragmentOrElement.cpp
@@ -122,16 +122,17 @@
#include "mozilla/CORSMode.h"
#include "mozilla/dom/ShadowRoot.h"
#include "mozilla/dom/HTMLTemplateElement.h"
#include "nsStyledElement.h"
#include "nsIContentInlines.h"
+#include "nsChildContentList.h"
using namespace mozilla;
using namespace mozilla::dom;
int32_t nsIContent::sTabFocusModel = eTabFocus_any;
bool nsIContent::sTabFocusModelAppliesToXUL = false;
uint64_t nsMutationGuard::sGeneration = 0;
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
@@ -48,16 +48,17 @@ EXPORTS += [
'mozAutoDocUpdate.h',
'mozFlushType.h',
'nsAtomListUtils.h',
'nsAttrAndChildArray.h',
'nsAttrName.h',
'nsAttrValue.h',
'nsAttrValueInlines.h',
'nsCaseTreatment.h',
+ 'nsChildContentList.h',
'nsContentCID.h',
'nsContentCreatorFunctions.h',
'nsContentList.h',
'nsContentListDeclarations.h',
'nsContentPermissionHelper.h',
'nsContentPolicyUtils.h',
'nsContentSink.h',
'nsContentTypeParser.h',
new file mode 100644
--- /dev/null
+++ b/dom/base/nsChildContentList.h
@@ -0,0 +1,63 @@
+/* -*- 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/. */
+
+#ifndef nsChildContentList_h__
+#define nsChildContentList_h__
+
+#include "nsISupportsImpl.h"
+#include "nsINodeList.h" // base class
+#include "js/TypeDecls.h" // for Handle, Value, JSObject, JSContext
+
+class nsIContent;
+class nsINode;
+
+/**
+ * Class that implements the nsIDOMNodeList interface (a list of children of
+ * the content), by holding a reference to the content and delegating GetLength
+ * and Item to its existing child list.
+ * @see nsIDOMNodeList
+ */
+class nsChildContentList final : public nsINodeList
+{
+public:
+ explicit nsChildContentList(nsINode* aNode)
+ : mNode(aNode)
+ {
+ }
+
+ NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+ NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(nsChildContentList)
+
+ // nsWrapperCache
+ virtual JSObject* WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto) override;
+
+ // nsIDOMNodeList interface
+ NS_DECL_NSIDOMNODELIST
+
+ // nsINodeList interface
+ virtual int32_t IndexOf(nsIContent* aContent) override;
+ virtual nsIContent* Item(uint32_t aIndex) override;
+
+ void DropReference()
+ {
+ mNode = nullptr;
+ }
+
+ virtual nsINode* GetParentObject() override
+ {
+ return mNode;
+ }
+
+private:
+ ~nsChildContentList() {}
+
+ // The node whose children make up the list.
+ // This is a non-owning ref which is safe because it's set to nullptr by
+ // DropReference() by the node slots get destroyed.
+ nsINode* MOZ_NON_OWNING_REF mNode;
+};
+
+#endif /* nsChildContentList_h__ */
--- a/dom/base/nsINode.cpp
+++ b/dom/base/nsINode.cpp
@@ -100,20 +100,26 @@
#include "nsWrapperCacheInlines.h"
#include "WrapperFactory.h"
#include "DocumentType.h"
#include <algorithm>
#include "nsGlobalWindow.h"
#include "nsDOMMutationObserver.h"
#include "GeometryUtils.h"
#include "nsIAnimationObserver.h"
+#include "nsChildContentList.h"
using namespace mozilla;
using namespace mozilla::dom;
+nsINode::nsSlots::nsSlots()
+ : mWeakReference(nullptr)
+{
+}
+
nsINode::nsSlots::~nsSlots()
{
if (mChildNodes) {
mChildNodes->DropReference();
}
if (mWeakReference) {
mWeakReference->NoticeNodeDestruction();
--- a/dom/base/nsINode.h
+++ b/dom/base/nsINode.h
@@ -7,17 +7,16 @@
#ifndef nsINode_h___
#define nsINode_h___
#include "mozilla/Likely.h"
#include "nsCOMPtr.h" // for member, local
#include "nsGkAtoms.h" // for nsGkAtoms::baseURIProperty
#include "nsIDOMNode.h"
#include "mozilla/dom/NodeInfo.h" // member (in nsCOMPtr)
-#include "nsINodeList.h" // base class
#include "nsIVariant.h" // for use in GetUserData()
#include "nsNodeInfoManager.h" // for use in NodePrincipal()
#include "nsPropertyTable.h" // for typedefs
#include "nsTObserverArray.h" // for member
#include "mozilla/ErrorResult.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/dom/EventTarget.h" // for base class
#include "js/TypeDecls.h" // for Handle, Value, JSObject, JSContext
@@ -39,16 +38,17 @@ class nsIAnimationObserver;
class nsIContent;
class nsIDocument;
class nsIDOMElement;
class nsIDOMNodeList;
class nsIEditor;
class nsIFrame;
class nsIMutationObserver;
class nsINode;
+class nsINodeList;
class nsIPresShell;
class nsIPrincipal;
class nsIURI;
class nsNodeSupportsWeakRefTearoff;
class nsNodeWeakReference;
class nsDOMMutationObserver;
namespace mozilla {
@@ -229,62 +229,16 @@ public:
private:
// This is the value sGeneration had when the guard was constructed.
uint64_t mStartingGeneration;
// This value is incremented on every mutation, for the life of the process.
static uint64_t sGeneration;
};
-/**
- * Class that implements the nsIDOMNodeList interface (a list of children of
- * the content), by holding a reference to the content and delegating GetLength
- * and Item to its existing child list.
- * @see nsIDOMNodeList
- */
-class nsChildContentList final : public nsINodeList
-{
-public:
- explicit nsChildContentList(nsINode* aNode)
- : mNode(aNode)
- {
- }
-
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(nsChildContentList)
-
- // nsWrapperCache
- virtual JSObject* WrapObject(JSContext *cx, JS::Handle<JSObject*> aGivenProto) override;
-
- // nsIDOMNodeList interface
- NS_DECL_NSIDOMNODELIST
-
- // nsINodeList interface
- virtual int32_t IndexOf(nsIContent* aContent) override;
- virtual nsIContent* Item(uint32_t aIndex) override;
-
- void DropReference()
- {
- mNode = nullptr;
- }
-
- virtual nsINode* GetParentObject() override
- {
- return mNode;
- }
-
-private:
- ~nsChildContentList() {}
-
- // The node whose children make up the list.
- // This is a non-owning ref which is safe because it's set to nullptr by
- // DropReference() by the node slots get destroyed.
- nsINode* MOZ_NON_OWNING_REF mNode;
-};
-
// This should be used for any nsINode sub-class that has fields of its own
// that it needs to measure; any sub-class that doesn't use it will inherit
// SizeOfExcludingThis from its super-class. SizeOfIncludingThis() need not be
// defined, it is inherited from nsINode.
// This macro isn't actually specific to nodes, and bug 956400 will move it into MFBT.
#define NS_DECL_SIZEOF_EXCLUDING_THIS \
virtual size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
@@ -1062,20 +1016,17 @@ public:
*/
virtual nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult) const = 0;
// This class can be extended by subclasses that wish to store more
// information in the slots.
class nsSlots
{
public:
- nsSlots()
- : mWeakReference(nullptr)
- {
- }
+ nsSlots();
// If needed we could remove the vtable pointer this dtor causes by
// putting a DestroySlots function on nsINode
virtual ~nsSlots();
void Traverse(nsCycleCollectionTraversalCallback &cb);
void Unlink();
--- a/dom/base/nsINodeList.h
+++ b/dom/base/nsINodeList.h
@@ -4,16 +4,17 @@
* 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 nsINodeList_h___
#define nsINodeList_h___
#include "nsIDOMNodeList.h"
#include "nsWrapperCache.h"
+#include "nsIContent.h"
// IID for the nsINodeList interface
#define NS_INODELIST_IID \
{ 0xadb5e54c, 0x6e96, 0x4102, \
{ 0x8d, 0x40, 0xe0, 0x12, 0x3d, 0xcf, 0x48, 0x7a } }
class nsIContent;
class nsINode;