mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 17:23:59 +00:00
f421d7b889
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
36 lines
1.1 KiB
C++
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
|