gecko-dev/dom/base/ScriptableContentIterator.h
Masayuki Nakano f421d7b889 Bug 181137 - part 8: Make ContentIteratorBase and its subclasses non-refcountable r=smaug
This patch makes ContentIteratorBase, PostContentIterator, PreContentIterator
and ContentSubtreeIterator classes non-refcountable because most users can
create their instances in stack and such users may be in a hot path.  So,
we can save a lot of cost of instantiation.

Unfortunately, only ScriptableContentIterator creates one of the concrete
classes and needs to destroy it properly.  Therefore, its
EnsureContentIterator(), destructor, traverse and unlink code becomes messy.
However, ScriptableContentIterator was designed for automated tests and we
need to maintain it not so many times.  Therefore, improvement of other
users must be worthwhiler than this demerit.

Differential Revision: https://phabricator.services.mozilla.com/D15928

--HG--
extra : moz-landing-system : lando
2019-01-11 01:52:26 +00:00

36 lines
1.1 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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/. */
#ifndef mozilla_scriptablecontentiterator_h
#define mozilla_scriptablecontentiterator_h
#include "mozilla/Attributes.h"
#include "mozilla/ContentIterator.h"
#include "mozilla/UniquePtr.h"
#include "nsCOMPtr.h"
#include "nsIScriptableContentIterator.h"
namespace mozilla {
class ScriptableContentIterator final : public nsIScriptableContentIterator {
public:
ScriptableContentIterator();
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS(ScriptableContentIterator)
NS_DECL_NSISCRIPTABLECONTENTITERATOR
protected:
virtual ~ScriptableContentIterator() = default;
void EnsureContentIterator();
IteratorType mIteratorType;
UniquePtr<ContentIteratorBase> mContentIterator;
};
} // namespace mozilla
#endif // #ifndef mozilla_scriptablecontentiterator_h