Bug 1421510 - Part 3. Make nsITextServicesFilter.skip noscript access. r?masayuki
nsITextServicesFilter.skip isn't accessed from JavaScript (including c-c and
bluegriffon), so we can remove it from IDL.
Also, skip method should use early return style for clean up.
MozReview-Commit-ID: qjZS54ZeoT
--- a/editor/spellchecker/nsComposeTxtSrvFilter.cpp
+++ b/editor/spellchecker/nsComposeTxtSrvFilter.cpp
@@ -13,56 +13,62 @@
nsComposeTxtSrvFilter::nsComposeTxtSrvFilter() :
mIsForMail(false)
{
}
NS_IMPL_ISUPPORTS(nsComposeTxtSrvFilter, nsITextServicesFilter)
-NS_IMETHODIMP
-nsComposeTxtSrvFilter::Skip(nsINode* aNode, bool *_retval)
+bool
+nsComposeTxtSrvFilter::Skip(nsINode* aNode) const
{
- *_retval = false;
+ if (NS_WARN_IF(!aNode)) {
+ return false;
+ }
// Check to see if we can skip this node
+
+ if (aNode->IsAnyOfHTMLElements(nsGkAtoms::script,
+ nsGkAtoms::textarea,
+ nsGkAtoms::select,
+ nsGkAtoms::style,
+ nsGkAtoms::map)) {
+ return true;
+ }
+
+ if (!mIsForMail) {
+ return false;
+ }
+
// For nodes that are blockquotes, we must make sure
// their type is "cite"
- if (aNode) {
- if (aNode->IsHTMLElement(nsGkAtoms::blockquote)) {
- if (mIsForMail) {
- *_retval = aNode->AsElement()->AttrValueIs(kNameSpaceID_None,
- nsGkAtoms::type,
- nsGkAtoms::cite,
- eIgnoreCase);
- }
- } else if (aNode->IsHTMLElement(nsGkAtoms::span)) {
- if (mIsForMail) {
- *_retval = aNode->AsElement()->AttrValueIs(kNameSpaceID_None,
- nsGkAtoms::mozquote,
- nsGkAtoms::_true,
- eIgnoreCase);
- if (!*_retval) {
- *_retval = aNode->AsElement()->AttrValueIs(kNameSpaceID_None,
- nsGkAtoms::_class,
- nsGkAtoms::mozsignature,
- eCaseMatters);
- }
- }
- } else if (aNode->IsAnyOfHTMLElements(nsGkAtoms::script,
- nsGkAtoms::textarea,
- nsGkAtoms::select,
- nsGkAtoms::style,
- nsGkAtoms::map)) {
- *_retval = true;
- } else if (aNode->IsHTMLElement(nsGkAtoms::table)) {
- if (mIsForMail) {
- *_retval =
- aNode->AsElement()->AttrValueIs(kNameSpaceID_None,
- nsGkAtoms::_class,
- NS_LITERAL_STRING("moz-email-headers-table"),
- eCaseMatters);
- }
- }
+ if (aNode->IsHTMLElement(nsGkAtoms::blockquote)) {
+ return aNode->AsElement()->AttrValueIs(kNameSpaceID_None,
+ nsGkAtoms::type,
+ nsGkAtoms::cite,
+ eIgnoreCase);
}
- return NS_OK;
+ if (aNode->IsHTMLElement(nsGkAtoms::span)) {
+ if (aNode->AsElement()->AttrValueIs(kNameSpaceID_None,
+ nsGkAtoms::mozquote,
+ nsGkAtoms::_true,
+ eIgnoreCase)) {
+ return true;
+ }
+
+ return aNode->AsElement()->AttrValueIs(kNameSpaceID_None,
+ nsGkAtoms::_class,
+ nsGkAtoms::mozsignature,
+ eCaseMatters);
+ }
+
+ if (aNode->IsHTMLElement(nsGkAtoms::table)) {
+ return aNode->AsElement()->AttrValueIs(
+ kNameSpaceID_None,
+ nsGkAtoms::_class,
+ NS_LITERAL_STRING("moz-email-headers-table"),
+ eCaseMatters);
+ }
+
+ return false;
}
--- a/editor/spellchecker/nsComposeTxtSrvFilter.h
+++ b/editor/spellchecker/nsComposeTxtSrvFilter.h
@@ -25,16 +25,22 @@ public:
NS_DECL_ISUPPORTS
// nsITextServicesFilter
NS_DECL_NSITEXTSERVICESFILTER
// Helper - Intializer
void Init(bool aIsForMail) { mIsForMail = aIsForMail; }
+ /**
+ * Indicates whether the content node should be skipped by the iterator
+ * @param aNode - node to skip
+ */
+ bool Skip(nsINode* aNode) const;
+
private:
~nsComposeTxtSrvFilter() {}
bool mIsForMail;
};
#define NS_COMPOSERTXTSRVFILTER_CID \
{/* {171E72DB-0F8A-412a-8461-E4C927A3A2AC}*/ \
--- a/editor/spellchecker/nsFilteredContentIterator.cpp
+++ b/editor/spellchecker/nsFilteredContentIterator.cpp
@@ -342,25 +342,23 @@ nsFilteredContentIterator::AdvanceNode(n
void
nsFilteredContentIterator::CheckAdvNode(nsINode* aNode, bool& aDidSkip, eDirectionType aDir)
{
aDidSkip = false;
mIsOutOfRange = false;
if (aNode && mFilter) {
nsCOMPtr<nsINode> currentNode = aNode;
- bool skipIt;
while (1) {
- nsresult rv = mFilter->Skip(aNode, &skipIt);
- if (NS_SUCCEEDED(rv) && skipIt) {
+ if (mFilter->Skip(aNode)) {
aDidSkip = true;
// Get the next/prev node and then
// see if we should skip that
nsCOMPtr<nsINode> advNode;
- rv = AdvanceNode(aNode, *getter_AddRefs(advNode), aDir);
+ nsresult rv = AdvanceNode(aNode, *getter_AddRefs(advNode), aDir);
if (NS_SUCCEEDED(rv) && advNode) {
aNode = advNode;
} else {
return; // fell out of range
}
} else {
if (aNode != currentNode) {
nsCOMPtr<nsIContent> content(do_QueryInterface(aNode));
--- a/editor/spellchecker/nsITextServicesFilter.idl
+++ b/editor/spellchecker/nsITextServicesFilter.idl
@@ -1,21 +1,12 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsISupports.idl"
-webidl Node;
-
[scriptable, builtinclass, uuid(5BEC321F-59AC-413a-A4AD-8A8D7C50A0D0)]
interface nsITextServicesFilter : nsISupports
{
-
- /**
- * Indicates whether the content node should be skipped by the iterator
- * @param aNode - node to skip
- */
- boolean skip(in Node aNode);
-
};