Bug 1446530. Change CloneDataNode to return already_AddRefed<CharacterData>. r=mystor

MozReview-Commit-ID: 1Clh4fG3GAq
This commit is contained in:
Boris Zbarsky 2018-03-19 15:50:16 -04:00
Родитель 2f66e620e3
Коммит 9ae8969557
14 изменённых файлов: 47 добавлений и 41 удалений

Просмотреть файл

@ -160,7 +160,7 @@ public:
virtual nsresult Clone(dom::NodeInfo *aNodeInfo, nsINode **aResult,
bool aPreallocateChildren) const override
{
nsCOMPtr<nsINode> result = CloneDataNode(aNodeInfo, true);
RefPtr<CharacterData> result = CloneDataNode(aNodeInfo, true);
result.forget(aResult);
if (!*aResult) {
@ -218,8 +218,8 @@ protected:
* @param aCloneText if true the text content will be cloned too
* @return the clone
*/
virtual CharacterData *CloneDataNode(dom::NodeInfo *aNodeInfo,
bool aCloneText) const = 0;
virtual already_AddRefed<CharacterData>
CloneDataNode(dom::NodeInfo *aNodeInfo, bool aCloneText) const = 0;
nsTextFragment mText;

Просмотреть файл

@ -31,16 +31,16 @@ Comment::IsNodeOfType(uint32_t aFlags) const
return !(aFlags & ~(eCOMMENT | eDATA_NODE));
}
CharacterData*
already_AddRefed<CharacterData>
Comment::CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo, bool aCloneText) const
{
RefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo;
Comment *it = new Comment(ni.forget());
if (it && aCloneText) {
RefPtr<Comment> it = new Comment(ni.forget());
if (aCloneText) {
it->mText = mText;
}
return it;
return it.forget();
}
#ifdef DEBUG

Просмотреть файл

@ -45,8 +45,9 @@ public:
// nsINode
virtual bool IsNodeOfType(uint32_t aFlags) const override;
virtual CharacterData* CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual already_AddRefed<CharacterData>
CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual nsIDOMNode* AsDOMNode() override { return this; }
#ifdef DEBUG

Просмотреть файл

@ -105,11 +105,11 @@ DocumentType::GetInternalSubset(nsAString& aInternalSubset) const
aInternalSubset = mInternalSubset;
}
CharacterData*
already_AddRefed<CharacterData>
DocumentType::CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo, bool aCloneText) const
{
already_AddRefed<mozilla::dom::NodeInfo> ni = RefPtr<mozilla::dom::NodeInfo>(aNodeInfo).forget();
return new DocumentType(ni, mPublicId, mSystemId, mInternalSubset);
return do_AddRef(new DocumentType(ni, mPublicId, mSystemId, mInternalSubset));
}
} // namespace dom

Просмотреть файл

@ -55,8 +55,9 @@ public:
// nsIContent overrides
virtual const nsTextFragment* GetText() override;
virtual CharacterData* CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual already_AddRefed<CharacterData>
CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual nsIDOMNode* AsDOMNode() override { return this; }

Просмотреть файл

@ -34,9 +34,9 @@ Text::SplitText(uint32_t aOffset, ErrorResult& aRv)
// Use Clone for creating the new node so that the new node is of same class
// as this node!
CharacterData* clone = CloneDataNode(mNodeInfo, false);
RefPtr<CharacterData> clone = CloneDataNode(mNodeInfo, false);
MOZ_ASSERT(clone && clone->IsText());
RefPtr<Text> newContent = static_cast<Text*>(clone);
RefPtr<Text> newContent = static_cast<Text*>(clone.get());
// nsRange expects the CharacterDataChanged notification is followed
// by an insertion of |newContent|. If you change this code,

Просмотреть файл

@ -55,19 +55,19 @@ public:
NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED
NS_DECL_NSIMUTATIONOBSERVER_NODEWILLBEDESTROYED
virtual CharacterData *CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override
virtual already_AddRefed<CharacterData>
CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override
{
already_AddRefed<mozilla::dom::NodeInfo> ni =
RefPtr<mozilla::dom::NodeInfo>(aNodeInfo).forget();
nsAttributeTextNode *it = new nsAttributeTextNode(ni,
mNameSpaceID,
mAttrName);
if (it && aCloneText) {
RefPtr<nsAttributeTextNode> it =
new nsAttributeTextNode(ni, mNameSpaceID, mAttrName);
if (aCloneText) {
it->mText = mText;
}
return it;
return it.forget();
}
// Public method for the event to run
@ -113,16 +113,16 @@ nsTextNode::IsNodeOfType(uint32_t aFlags) const
return !(aFlags & ~(eTEXT | eDATA_NODE));
}
CharacterData*
already_AddRefed<CharacterData>
nsTextNode::CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo, bool aCloneText) const
{
already_AddRefed<mozilla::dom::NodeInfo> ni = RefPtr<mozilla::dom::NodeInfo>(aNodeInfo).forget();
nsTextNode *it = new nsTextNode(ni);
RefPtr<nsTextNode> it = new nsTextNode(ni);
if (aCloneText) {
it->mText = mText;
}
return it;
return it.forget();
}
nsresult

Просмотреть файл

@ -50,8 +50,9 @@ public:
// nsINode
virtual bool IsNodeOfType(uint32_t aFlags) const override;
virtual CharacterData* CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual already_AddRefed<CharacterData>
CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
nsIContent* aBindingParent,

Просмотреть файл

@ -29,16 +29,16 @@ CDATASection::IsNodeOfType(uint32_t aFlags) const
return !(aFlags & ~(eTEXT | eDATA_NODE));
}
CharacterData*
already_AddRefed<CharacterData>
CDATASection::CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo, bool aCloneText) const
{
RefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo;
CDATASection *it = new CDATASection(ni.forget());
if (it && aCloneText) {
RefPtr<CDATASection> it = new CDATASection(ni.forget());
if (aCloneText) {
it->mText = mText;
}
return it;
return it.forget();
}
#ifdef DEBUG

Просмотреть файл

@ -47,8 +47,9 @@ public:
// nsINode
virtual bool IsNodeOfType(uint32_t aFlags) const override;
virtual CharacterData* CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual already_AddRefed<CharacterData>
CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual nsIDOMNode* AsDOMNode() override { return this; }
#ifdef DEBUG

Просмотреть файл

@ -85,14 +85,14 @@ ProcessingInstruction::IsNodeOfType(uint32_t aFlags) const
return !(aFlags & ~(ePROCESSING_INSTRUCTION | eDATA_NODE));
}
CharacterData*
already_AddRefed<CharacterData>
ProcessingInstruction::CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const
{
nsAutoString data;
GetData(data);
RefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo;
return new ProcessingInstruction(ni.forget(), data);
return do_AddRef(new ProcessingInstruction(ni.forget(), data));
}
#ifdef DEBUG

Просмотреть файл

@ -28,8 +28,9 @@ public:
// nsINode
virtual bool IsNodeOfType(uint32_t aFlags) const override;
virtual CharacterData* CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
virtual already_AddRefed<CharacterData>
CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const override;
#ifdef DEBUG
virtual void List(FILE* out, int32_t aIndent) const override;

Просмотреть файл

@ -177,14 +177,14 @@ XMLStylesheetProcessingInstruction::GetStyleSheetInfo(nsAString& aTitle,
aType.AssignLiteral("text/css");
}
CharacterData*
already_AddRefed<CharacterData>
XMLStylesheetProcessingInstruction::CloneDataNode(mozilla::dom::NodeInfo *aNodeInfo,
bool aCloneText) const
{
nsAutoString data;
GetData(data);
RefPtr<mozilla::dom::NodeInfo> ni = aNodeInfo;
return new XMLStylesheetProcessingInstruction(ni.forget(), data);
return do_AddRef(new XMLStylesheetProcessingInstruction(ni.forget(), data));
}
} // namespace dom

Просмотреть файл

@ -82,8 +82,9 @@ protected:
nsAString& aType,
nsAString& aMedia,
bool* aIsAlternate) final;
CharacterData* CloneDataNode(mozilla::dom::NodeInfo* aNodeInfo,
bool aCloneText) const final;
already_AddRefed<CharacterData>
CloneDataNode(mozilla::dom::NodeInfo* aNodeInfo,
bool aCloneText) const final;
};
} // namespace dom