Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef mozilla_dom_DocumentFragment_h__
8 : #define mozilla_dom_DocumentFragment_h__
9 :
10 : #include "mozilla/Attributes.h"
11 : #include "mozilla/dom/BorrowedAttrInfo.h"
12 : #include "mozilla/dom/FragmentOrElement.h"
13 : #include "nsIDOMDocumentFragment.h"
14 :
15 : class nsIAtom;
16 : class nsAString;
17 : class nsIDocument;
18 : class nsIContent;
19 :
20 : namespace mozilla {
21 : namespace dom {
22 :
23 : class Element;
24 :
25 : class DocumentFragment : public FragmentOrElement,
26 : public nsIDOMDocumentFragment
27 : {
28 : private:
29 4 : void Init()
30 : {
31 4 : MOZ_ASSERT(mNodeInfo->NodeType() == nsIDOMNode::DOCUMENT_FRAGMENT_NODE &&
32 : mNodeInfo->Equals(nsGkAtoms::documentFragmentNodeName,
33 : kNameSpaceID_None),
34 : "Bad NodeType in aNodeInfo");
35 4 : }
36 :
37 : public:
38 : using FragmentOrElement::GetFirstChild;
39 : using nsINode::QuerySelector;
40 : using nsINode::QuerySelectorAll;
41 : // Make sure bindings can see our superclass' protected GetElementById method.
42 : using nsINode::GetElementById;
43 :
44 : // nsISupports
45 : NS_DECL_ISUPPORTS_INHERITED
46 :
47 : // interface nsIDOMNode
48 0 : NS_FORWARD_NSIDOMNODE_TO_NSINODE
49 :
50 : // interface nsIDOMDocumentFragment
51 : NS_DECL_NSIDOMDOCUMENTFRAGMENT
52 :
53 0 : explicit DocumentFragment(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
54 0 : : FragmentOrElement(aNodeInfo), mHost(nullptr)
55 : {
56 0 : Init();
57 0 : }
58 :
59 4 : explicit DocumentFragment(nsNodeInfoManager* aNodeInfoManager)
60 8 : : FragmentOrElement(aNodeInfoManager->GetNodeInfo(
61 : nsGkAtoms::documentFragmentNodeName,
62 : nullptr, kNameSpaceID_None,
63 : nsIDOMNode::DOCUMENT_FRAGMENT_NODE)),
64 8 : mHost(nullptr)
65 : {
66 4 : Init();
67 4 : }
68 :
69 : virtual JSObject* WrapNode(JSContext *aCx, JS::Handle<JSObject*> aGivenProto) override;
70 :
71 : // nsIContent
72 : nsresult SetAttr(int32_t aNameSpaceID, nsIAtom* aName,
73 : const nsAString& aValue, bool aNotify)
74 : {
75 : return SetAttr(aNameSpaceID, aName, nullptr, aValue, aNotify);
76 : }
77 0 : virtual nsresult SetAttr(int32_t aNameSpaceID, nsIAtom* aName,
78 : nsIAtom* aPrefix, const nsAString& aValue,
79 : bool aNotify) override
80 : {
81 0 : return NS_OK;
82 : }
83 0 : virtual nsresult UnsetAttr(int32_t aNameSpaceID, nsIAtom* aAttribute,
84 : bool aNotify) override
85 : {
86 0 : return NS_OK;
87 : }
88 0 : virtual const nsAttrName* GetAttrNameAt(uint32_t aIndex) const override
89 : {
90 0 : return nullptr;
91 : }
92 0 : virtual BorrowedAttrInfo GetAttrInfoAt(uint32_t aIndex) const override
93 : {
94 0 : return BorrowedAttrInfo(nullptr, nullptr);
95 : }
96 0 : virtual uint32_t GetAttrCount() const override
97 : {
98 0 : return 0;
99 : }
100 :
101 : virtual bool IsNodeOfType(uint32_t aFlags) const override;
102 :
103 0 : virtual nsIDOMNode* AsDOMNode() override { return this; }
104 :
105 0 : virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
106 : nsIContent* aBindingParent,
107 : bool aCompileEventHandlers) override
108 : {
109 0 : NS_ASSERTION(false, "Trying to bind a fragment to a tree");
110 0 : return NS_ERROR_NOT_IMPLEMENTED;
111 : }
112 :
113 0 : virtual void UnbindFromTree(bool aDeep, bool aNullParent) override
114 : {
115 0 : NS_ASSERTION(false, "Trying to unbind a fragment from a tree");
116 0 : return;
117 : }
118 :
119 0 : virtual Element* GetNameSpaceElement() override
120 : {
121 0 : return nullptr;
122 : }
123 :
124 0 : nsIContent* GetHost() const
125 : {
126 0 : return mHost;
127 : }
128 :
129 0 : void SetHost(nsIContent* aHost)
130 : {
131 0 : mHost = aHost;
132 0 : }
133 :
134 : static already_AddRefed<DocumentFragment>
135 : Constructor(const GlobalObject& aGlobal, ErrorResult& aRv);
136 :
137 : #ifdef DEBUG
138 : virtual void List(FILE* out, int32_t aIndent) const override;
139 : virtual void DumpContent(FILE* out, int32_t aIndent, bool aDumpAll) const override;
140 : #endif
141 :
142 : protected:
143 0 : virtual ~DocumentFragment()
144 0 : {
145 0 : }
146 :
147 : nsresult Clone(mozilla::dom::NodeInfo *aNodeInfo, nsINode **aResult,
148 : bool aPreallocateChildren) const override;
149 : nsIContent* mHost; // Weak
150 : };
151 :
152 : } // namespace dom
153 : } // namespace mozilla
154 :
155 :
156 : #endif // mozilla_dom_DocumentFragment_h__
|