Bug 1434819 part 6. Get rid of NodeFilterHolder. r=qdot

Now that TreeWalker and NodeIterator only use webidl APIs, they always have a
NodeFilter, not nsIDOMNodeFilter.

MozReview-Commit-ID: 5pzn9V3Kxzy
This commit is contained in:
Boris Zbarsky 2018-02-01 14:26:12 -05:00
Родитель ea872de15a
Коммит 59795295d1
9 изменённых файлов: 25 добавлений и 67 удалений

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

@ -138,8 +138,8 @@ void NodeIterator::NodePointer::MoveBackward(nsINode *aParent, nsINode *aNode)
NodeIterator::NodeIterator(nsINode *aRoot,
uint32_t aWhatToShow,
NodeFilterHolder aFilter) :
nsTraversal(aRoot, aWhatToShow, Move(aFilter)),
NodeFilter* aFilter) :
nsTraversal(aRoot, aWhatToShow, aFilter),
mPointer(mRoot, true)
{
aRoot->AddMutationObserver(this);

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

@ -29,7 +29,7 @@ public:
NodeIterator(nsINode *aRoot,
uint32_t aWhatToShow,
NodeFilterHolder aFilter);
NodeFilter* aFilter);
NS_DECL_NSIMUTATIONOBSERVER_CONTENTREMOVED
@ -52,9 +52,9 @@ public:
{
return mWhatToShow;
}
already_AddRefed<NodeFilter> GetFilter()
NodeFilter* GetFilter()
{
return mFilter.ToWebIDLCallback();
return mFilter;
}
already_AddRefed<nsINode> NextNode(ErrorResult& aResult)
{

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

@ -26,8 +26,8 @@ namespace dom {
TreeWalker::TreeWalker(nsINode *aRoot,
uint32_t aWhatToShow,
NodeFilterHolder aFilter) :
nsTraversal(aRoot, aWhatToShow, Move(aFilter)),
NodeFilter* aFilter) :
nsTraversal(aRoot, aWhatToShow, aFilter),
mCurrentNode(aRoot)
{
}

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

@ -32,7 +32,7 @@ public:
TreeWalker(nsINode *aRoot,
uint32_t aWhatToShow,
NodeFilterHolder aFilter);
NodeFilter* aFilter);
NS_DECL_CYCLE_COLLECTION_CLASS(TreeWalker)
@ -45,9 +45,9 @@ public:
{
return mWhatToShow;
}
already_AddRefed<NodeFilter> GetFilter()
NodeFilter* GetFilter()
{
return mFilter.ToWebIDLCallback();
return mFilter;
}
nsINode* CurrentNode() const
{

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

@ -6400,17 +6400,8 @@ nsIDocument::CreateNodeIterator(nsINode& aRoot, uint32_t aWhatToShow,
NodeFilter* aFilter,
ErrorResult& rv) const
{
return CreateNodeIterator(aRoot, aWhatToShow, NodeFilterHolder(aFilter), rv);
}
already_AddRefed<NodeIterator>
nsIDocument::CreateNodeIterator(nsINode& aRoot, uint32_t aWhatToShow,
NodeFilterHolder aFilter,
ErrorResult& rv) const
{
nsINode* root = &aRoot;
RefPtr<NodeIterator> iterator = new NodeIterator(root, aWhatToShow,
Move(aFilter));
RefPtr<NodeIterator> iterator = new NodeIterator(&aRoot, aWhatToShow,
aFilter);
return iterator.forget();
}
@ -6419,15 +6410,7 @@ nsIDocument::CreateTreeWalker(nsINode& aRoot, uint32_t aWhatToShow,
NodeFilter* aFilter,
ErrorResult& rv) const
{
return CreateTreeWalker(aRoot, aWhatToShow, NodeFilterHolder(aFilter), rv);
}
already_AddRefed<TreeWalker>
nsIDocument::CreateTreeWalker(nsINode& aRoot, uint32_t aWhatToShow,
NodeFilterHolder aFilter, ErrorResult& rv) const
{
nsINode* root = &aRoot;
RefPtr<TreeWalker> walker = new TreeWalker(root, aWhatToShow, Move(aFilter));
RefPtr<TreeWalker> walker = new TreeWalker(&aRoot, aWhatToShow, aFilter);
return walker.forget();
}

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

@ -182,7 +182,6 @@ class XULDocument;
template<typename> class Sequence;
template<typename, typename> class CallbackObjectHolder;
typedef CallbackObjectHolder<NodeFilter, nsIDOMNodeFilter> NodeFilterHolder;
enum class CallerType : uint32_t;
@ -2877,18 +2876,9 @@ public:
CreateNodeIterator(nsINode& aRoot, uint32_t aWhatToShow,
mozilla::dom::NodeFilter* aFilter,
mozilla::ErrorResult& rv) const;
already_AddRefed<mozilla::dom::NodeIterator>
CreateNodeIterator(nsINode& aRoot, uint32_t aWhatToShow,
mozilla::dom::NodeFilterHolder aFilter,
mozilla::ErrorResult& rv) const;
already_AddRefed<mozilla::dom::TreeWalker>
CreateTreeWalker(nsINode& aRoot, uint32_t aWhatToShow,
mozilla::dom::NodeFilter* aFilter, mozilla::ErrorResult& rv) const;
already_AddRefed<mozilla::dom::TreeWalker>
CreateTreeWalker(nsINode& aRoot, uint32_t aWhatToShow,
mozilla::dom::NodeFilterHolder aFilter,
mozilla::ErrorResult& rv) const;
// Deprecated WebIDL bits
already_AddRefed<mozilla::dom::CDATASection>
CreateCDATASection(const nsAString& aData, mozilla::ErrorResult& rv);

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

@ -18,10 +18,10 @@ using namespace mozilla::dom;
nsTraversal::nsTraversal(nsINode *aRoot,
uint32_t aWhatToShow,
NodeFilterHolder aFilter) :
NodeFilter* aFilter) :
mRoot(aRoot),
mWhatToShow(aWhatToShow),
mFilter(Move(aFilter)),
mFilter(aFilter),
mInAcceptNode(false)
{
NS_ASSERTION(aRoot, "invalid root in call to nsTraversal constructor");
@ -37,7 +37,7 @@ nsTraversal::~nsTraversal()
* mFilter to test the node.
* @param aNode Node to test
* @param aResult Whether we succeeded
* @returns Filtervalue. See nsIDOMNodeFilter.idl
* @returns Filtervalue. See NodeFilter.webidl
*/
int16_t
nsTraversal::TestNode(nsINode* aNode, mozilla::ErrorResult& aResult)
@ -53,28 +53,15 @@ nsTraversal::TestNode(nsINode* aNode, mozilla::ErrorResult& aResult)
return nsIDOMNodeFilter::FILTER_SKIP;
}
if (!mFilter.GetISupports()) {
if (!mFilter) {
// No filter, just accept
return nsIDOMNodeFilter::FILTER_ACCEPT;
}
if (mFilter.HasWebIDLCallback()) {
AutoRestore<bool> inAcceptNode(mInAcceptNode);
mInAcceptNode = true;
// No need to pass in an execution reason, since the generated default,
// "NodeFilter.acceptNode", is pretty much exactly what we'd say anyway.
return mFilter.GetWebIDLCallback()->
AcceptNode(*aNode, aResult, nullptr,
CallbackObject::eRethrowExceptions);
}
nsCOMPtr<nsIDOMNode> domNode = do_QueryInterface(aNode);
AutoRestore<bool> inAcceptNode(mInAcceptNode);
mInAcceptNode = true;
int16_t filtered;
nsresult rv = mFilter.GetXPCOMCallback()->AcceptNode(domNode, &filtered);
if (NS_FAILED(rv)) {
aResult.Throw(rv);
}
return filtered;
// No need to pass in an execution reason, since the generated default,
// "NodeFilter.acceptNode", is pretty much exactly what we'd say anyway.
return mFilter->AcceptNode(*aNode, aResult, nullptr,
CallbackObject::eRethrowExceptions);
}

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

@ -12,7 +12,6 @@
#define nsTraversal_h___
#include "nsCOMPtr.h"
#include "nsIDocument.h" // for NodeFilterHolder
#include "mozilla/dom/CallbackObject.h"
#include "mozilla/ErrorResult.h"
#include "mozilla/dom/NodeFilterBinding.h"
@ -25,13 +24,13 @@ class nsTraversal
public:
nsTraversal(nsINode *aRoot,
uint32_t aWhatToShow,
mozilla::dom::NodeFilterHolder aFilter);
mozilla::dom::NodeFilter* aFilter);
virtual ~nsTraversal();
protected:
nsCOMPtr<nsINode> mRoot;
uint32_t mWhatToShow;
mozilla::dom::NodeFilterHolder mFilter;
RefPtr<mozilla::dom::NodeFilter> mFilter;
bool mInAcceptNode;
/*
@ -39,7 +38,7 @@ protected:
* mFilter to test the node.
* @param aNode Node to test
* @param aResult Whether we succeeded
* @returns Filtervalue. See nsIDOMNodeFilter.idl
* @returns Filtervalue. See NodeFilter.webidl
*/
int16_t TestNode(nsINode* aNode, mozilla::ErrorResult& aResult);
};

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

@ -529,8 +529,7 @@ GetTextNode(Selection* selection)
if (!EditorBase::IsTextNode(selNode)) {
// This should be the root node, walk the tree looking for text nodes
RefPtr<NodeIterator> iter =
new NodeIterator(selNode, nsIDOMNodeFilter::SHOW_TEXT,
NodeFilterHolder());
new NodeIterator(selNode, nsIDOMNodeFilter::SHOW_TEXT, nullptr);
while (!EditorBase::IsTextNode(selNode)) {
selNode = iter->NextNode(IgnoreErrors());
if (!selNode) {