Bug 1489787 - Part 3: Decomtaminate nsComposeTxtSrvFilter; r=masayuki

Differential Revision: https://phabricator.services.mozilla.com/D5355
This commit is contained in:
Ehsan Akhgari 2018-09-08 14:04:41 -04:00
parent 72c28b2f81
commit 7a9998cefe
8 changed files with 36 additions and 52 deletions

View File

@ -18,7 +18,6 @@
#include "mozilla/TextServicesDocument.h" // for TextServicesDocument
#include "nsAString.h" // for nsAString::IsEmpty, etc
#include "nsComponentManagerUtils.h" // for do_CreateInstance
#include "nsComposeTxtSrvFilter.h"
#include "nsDebug.h" // for NS_ENSURE_TRUE, etc
#include "nsDependentSubstring.h" // for Substring
#include "nsError.h" // for NS_ERROR_NOT_INITIALIZED, etc

View File

@ -16,7 +16,6 @@
#include "nscore.h" // for nsresult
class mozSpellChecker;
class nsComposeTxtSrvFilter;
class nsIEditor;
class nsISpellChecker;

View File

@ -31,6 +31,7 @@
#include "nsRange.h" // for nsRange
#include "nsString.h" // for nsString, nsAutoString
#include "nscore.h" // for nsresult, NS_IMETHODIMP, etc
#include "mozilla/UniquePtr.h" // for UniquePtr
namespace mozilla {
@ -70,7 +71,8 @@ public:
};
TextServicesDocument::TextServicesDocument()
: mSelStartIndex(-1)
: mTxtSvcFilterType(0)
, mSelStartIndex(-1)
, mSelStartOffset(-1)
, mSelEndIndex(-1)
, mSelEndOffset(-1)
@ -99,8 +101,7 @@ NS_IMPL_CYCLE_COLLECTION(TextServicesDocument,
mIterator,
mPrevTextBlock,
mNextTextBlock,
mExtent,
mTxtSvcFilter)
mExtent)
nsresult
TextServicesDocument::InitWithEditor(nsIEditor* aEditor)
@ -344,19 +345,7 @@ TextServicesDocument::ExpandRangeToWordBoundaries(nsRange* aRange)
nsresult
TextServicesDocument::SetFilterType(uint32_t aFilterType)
{
// Hang on to the filter so we can set it into the filtered iterator.
switch (aFilterType) {
case nsIEditorSpellCheck::FILTERTYPE_NORMAL:
mTxtSvcFilter = nsComposeTxtSrvFilter::CreateNormalFilter();
break;
case nsIEditorSpellCheck::FILTERTYPE_MAIL:
mTxtSvcFilter = nsComposeTxtSrvFilter::CreateMailFilter();
break;
default:
// Treat an invalid value as resetting out filter.
mTxtSvcFilter = nullptr;
break;
}
mTxtSvcFilterType = aFilterType;
return NS_OK;
}
@ -1450,10 +1439,21 @@ TextServicesDocument::CreateContentIterator(nsRange* aRange,
*aIterator = nullptr;
UniquePtr<nsComposeTxtSrvFilter> composeFilter;
switch (mTxtSvcFilterType) {
case nsIEditorSpellCheck::FILTERTYPE_NORMAL:
composeFilter = nsComposeTxtSrvFilter::CreateNormalFilter();
break;
case nsIEditorSpellCheck::FILTERTYPE_MAIL:
composeFilter = nsComposeTxtSrvFilter::CreateMailFilter();
break;
}
// Create a nsFilteredContentIterator
// This class wraps the ContentIterator in order to give itself a chance
// to filter out certain content nodes
RefPtr<nsFilteredContentIterator> filter = new nsFilteredContentIterator(mTxtSvcFilter);
RefPtr<nsFilteredContentIterator> filter =
new nsFilteredContentIterator(std::move(composeFilter));
nsresult rv = filter->Init(aRange);
if (NS_FAILED(rv)) {

View File

@ -14,7 +14,6 @@
#include "nsTArray.h"
#include "nscore.h"
class nsComposeTxtSrvFilter;
class nsIContent;
class nsIContentIterator;
class nsIEditor;
@ -58,7 +57,7 @@ private:
nsCOMPtr<nsIContent> mNextTextBlock;
nsTArray<OffsetEntry*> mOffsetTable;
RefPtr<nsRange> mExtent;
RefPtr<nsComposeTxtSrvFilter> mTxtSvcFilter;
uint32_t mTxtSvcFilterType;
int32_t mSelStartIndex;
int32_t mSelStartOffset;

View File

@ -6,17 +6,10 @@
#include "nsComposeTxtSrvFilter.h"
#include "nsError.h" // for NS_OK
#include "nsIContent.h" // for nsIContent
#include "nsNameSpaceManager.h" // for kNameSpaceID_None
#include "nsLiteralString.h" // for NS_LITERAL_STRING
#include "nscore.h" // for NS_IMETHODIMP
#include "mozilla/dom/Element.h" // for nsIContent
nsComposeTxtSrvFilter::nsComposeTxtSrvFilter() :
mIsForMail(false)
{
}
NS_IMPL_ISUPPORTS0(nsComposeTxtSrvFilter)
using namespace mozilla;
bool
nsComposeTxtSrvFilter::Skip(nsINode* aNode) const
@ -74,10 +67,10 @@ nsComposeTxtSrvFilter::Skip(nsINode* aNode) const
}
// static
already_AddRefed<nsComposeTxtSrvFilter>
UniquePtr<nsComposeTxtSrvFilter>
nsComposeTxtSrvFilter::CreateHelper(bool aIsForMail)
{
RefPtr<nsComposeTxtSrvFilter> filter = new nsComposeTxtSrvFilter();
auto filter = MakeUnique<nsComposeTxtSrvFilter>();
filter->Init(aIsForMail);
return filter.forget();
return filter;
}

View File

@ -6,27 +6,23 @@
#ifndef nsComposeTxtSrvFilter_h__
#define nsComposeTxtSrvFilter_h__
#include "nsISupportsImpl.h" // for NS_DECL_ISUPPORTS
#include "mozilla/AlreadyAddRefed.h"
#include "mozilla/UniquePtr.h"
/**
* This class implements a filter interface, that enables
* those using it to skip over certain nodes when traversing content
* This class enables those using it to skip over certain nodes when
* traversing content.
*
* This filter is used to skip over various form control nodes and
* mail's cite nodes
*/
class nsComposeTxtSrvFilter final : public nsISupports
class nsComposeTxtSrvFilter final
{
public:
// nsISupports interface...
NS_DECL_ISUPPORTS
static already_AddRefed<nsComposeTxtSrvFilter> CreateNormalFilter()
static mozilla::UniquePtr<nsComposeTxtSrvFilter> CreateNormalFilter()
{
return CreateHelper(false);
}
static already_AddRefed<nsComposeTxtSrvFilter> CreateMailFilter()
static mozilla::UniquePtr<nsComposeTxtSrvFilter> CreateMailFilter()
{
return CreateHelper(true);
}
@ -38,15 +34,12 @@ public:
bool Skip(nsINode* aNode) const;
private:
nsComposeTxtSrvFilter();
~nsComposeTxtSrvFilter() {}
// Helper - Intializer
void Init(bool aIsForMail) { mIsForMail = aIsForMail; }
static already_AddRefed<nsComposeTxtSrvFilter> CreateHelper(bool aIsForMail);
static mozilla::UniquePtr<nsComposeTxtSrvFilter> CreateHelper(bool aIsForMail);
bool mIsForMail;
bool mIsForMail = false;
};
#endif

View File

@ -22,10 +22,10 @@
using namespace mozilla;
//------------------------------------------------------------
nsFilteredContentIterator::nsFilteredContentIterator(nsComposeTxtSrvFilter* aFilter) :
nsFilteredContentIterator::nsFilteredContentIterator(UniquePtr<nsComposeTxtSrvFilter> aFilter) :
mIterator(NS_NewContentIterator()),
mPreIterator(NS_NewPreContentIterator()),
mFilter(aFilter),
mFilter(std::move(aFilter)),
mDidSkip(false),
mIsOutOfRange(false),
mDirection(eDirNotSet)
@ -51,7 +51,6 @@ NS_IMPL_CYCLE_COLLECTION(nsFilteredContentIterator,
mCurrentIterator,
mIterator,
mPreIterator,
mFilter,
mRange)
//------------------------------------------------------------

View File

@ -11,6 +11,7 @@
#include "nsIContentIterator.h"
#include "nsISupportsImpl.h"
#include "nscore.h"
#include "mozilla/UniquePtr.h"
class nsAtom;
class nsComposeTxtSrvFilter;
@ -25,7 +26,8 @@ public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS(nsFilteredContentIterator)
explicit nsFilteredContentIterator(nsComposeTxtSrvFilter* aFilter);
explicit nsFilteredContentIterator(
mozilla::UniquePtr<nsComposeTxtSrvFilter> aFilter);
/* nsIContentIterator */
virtual nsresult Init(nsINode* aRoot) override;
@ -77,7 +79,7 @@ protected:
RefPtr<nsAtom> mSelectAreaAtom;
RefPtr<nsAtom> mMapAtom;
RefPtr<nsComposeTxtSrvFilter> mFilter;
mozilla::UniquePtr<nsComposeTxtSrvFilter> mFilter;
RefPtr<nsRange> mRange;
bool mDidSkip;
bool mIsOutOfRange;