Bug 1034914 - Clean up CreateContentIterator and give nsFilteredContentIterator a private dtor. r=ehsan

This commit is contained in:
Andrew McCreight 2014-07-08 13:46:24 -07:00
parent 0090b646d5
commit 0f2ea02bef
2 changed files with 9 additions and 36 deletions

View File

@ -18,10 +18,7 @@ class nsIDOMRange;
class nsINode; class nsINode;
class nsITextServicesFilter; class nsITextServicesFilter;
/** class nsFilteredContentIterator MOZ_FINAL : public nsIContentIterator
*
*/
class nsFilteredContentIterator : public nsIContentIterator
{ {
public: public:
@ -31,8 +28,6 @@ public:
nsFilteredContentIterator(nsITextServicesFilter* aFilter); nsFilteredContentIterator(nsITextServicesFilter* aFilter);
virtual ~nsFilteredContentIterator();
/* nsIContentIterator */ /* nsIContentIterator */
virtual nsresult Init(nsINode* aRoot); virtual nsresult Init(nsINode* aRoot);
virtual nsresult Init(nsIDOMRange* aRange); virtual nsresult Init(nsIDOMRange* aRange);
@ -51,6 +46,8 @@ public:
protected: protected:
nsFilteredContentIterator() { } nsFilteredContentIterator() { }
virtual ~nsFilteredContentIterator();
// enum to give us the direction // enum to give us the direction
typedef enum {eDirNotSet, eForward, eBackward} eDirectionType; typedef enum {eDirNotSet, eForward, eBackward} eDirectionType;
nsresult AdvanceNode(nsIDOMNode* aNode, nsIDOMNode*& aNewNode, eDirectionType aDir); nsresult AdvanceNode(nsIDOMNode* aNode, nsIDOMNode*& aNewNode, eDirectionType aDir);
@ -74,12 +71,4 @@ protected:
eDirectionType mDirection; eDirectionType mDirection;
}; };
namespace mozilla {
template<>
struct HasDangerousPublicDestructor<nsFilteredContentIterator>
{
static const bool value = true;
};
}
#endif #endif

View File

@ -1979,37 +1979,21 @@ nsTextServicesDocument::DidJoinNodes(nsIDOMNode *aLeftNode,
nsresult nsresult
nsTextServicesDocument::CreateContentIterator(nsIDOMRange *aRange, nsIContentIterator **aIterator) nsTextServicesDocument::CreateContentIterator(nsIDOMRange *aRange, nsIContentIterator **aIterator)
{ {
nsresult result;
NS_ENSURE_TRUE(aRange && aIterator, NS_ERROR_NULL_POINTER); NS_ENSURE_TRUE(aRange && aIterator, NS_ERROR_NULL_POINTER);
*aIterator = 0; *aIterator = nullptr;
// Create a nsFilteredContentIterator // Create a nsFilteredContentIterator
// This class wraps the ContentIterator in order to give itself a chance // This class wraps the ContentIterator in order to give itself a chance
// to filter out certain content nodes // to filter out certain content nodes
nsFilteredContentIterator* filter = new nsFilteredContentIterator(mTxtSvcFilter); nsRefPtr<nsFilteredContentIterator> filter = new nsFilteredContentIterator(mTxtSvcFilter);
*aIterator = static_cast<nsIContentIterator *>(filter);
if (*aIterator) {
NS_IF_ADDREF(*aIterator);
result = filter ? NS_OK : NS_ERROR_FAILURE;
} else {
delete filter;
result = NS_ERROR_FAILURE;
}
NS_ENSURE_SUCCESS(result, result);
NS_ENSURE_TRUE(*aIterator, NS_ERROR_NULL_POINTER); nsresult result = filter->Init(aRange);
if (NS_FAILED(result)) {
result = (*aIterator)->Init(aRange);
if (NS_FAILED(result))
{
NS_RELEASE((*aIterator));
*aIterator = 0;
return result; return result;
} }
filter.forget(aIterator);
return NS_OK; return NS_OK;
} }