summaryrefslogtreecommitdiffstats
path: root/docshell/base/nsDocShellEnumerator.h
diff options
context:
space:
mode:
Diffstat (limited to 'docshell/base/nsDocShellEnumerator.h')
-rw-r--r--docshell/base/nsDocShellEnumerator.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/docshell/base/nsDocShellEnumerator.h b/docshell/base/nsDocShellEnumerator.h
new file mode 100644
index 000000000..87de74f0f
--- /dev/null
+++ b/docshell/base/nsDocShellEnumerator.h
@@ -0,0 +1,107 @@
+/* -*- 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 nsDocShellEnumerator_h___
+#define nsDocShellEnumerator_h___
+
+#include "nsISimpleEnumerator.h"
+#include "nsTArray.h"
+#include "nsIWeakReferenceUtils.h"
+
+class nsIDocShellTreeItem;
+
+/*
+// {13cbc281-35ae-11d5-be5b-bde0edece43c}
+#define NS_DOCSHELL_FORWARDS_ENUMERATOR_CID \
+{ 0x13cbc281, 0x35ae, 0x11d5, { 0xbe, 0x5b, 0xbd, 0xe0, 0xed, 0xec, 0xe4, 0x3c } }
+
+#define NS_DOCSHELL_FORWARDS_ENUMERATOR_CONTRACTID \
+"@mozilla.org/docshell/enumerator-forwards;1"
+
+// {13cbc282-35ae-11d5-be5b-bde0edece43c}
+#define NS_DOCSHELL_BACKWARDS_ENUMERATOR_CID \
+{ 0x13cbc282, 0x35ae, 0x11d5, { 0xbe, 0x5b, 0xbd, 0xe0, 0xed, 0xec, 0xe4, 0x3c } }
+
+#define NS_DOCSHELL_BACKWARDS_ENUMERATOR_CONTRACTID \
+"@mozilla.org/docshell/enumerator-backwards;1"
+*/
+
+class nsDocShellEnumerator : public nsISimpleEnumerator
+{
+protected:
+ enum
+ {
+ enumerateForwards,
+ enumerateBackwards
+ };
+
+ virtual ~nsDocShellEnumerator();
+
+public:
+ explicit nsDocShellEnumerator(int32_t aEnumerationDirection);
+
+ // nsISupports
+ NS_DECL_ISUPPORTS
+
+ // nsISimpleEnumerator
+ NS_DECL_NSISIMPLEENUMERATOR
+
+public:
+ nsresult GetEnumerationRootItem(nsIDocShellTreeItem** aEnumerationRootItem);
+ nsresult SetEnumerationRootItem(nsIDocShellTreeItem* aEnumerationRootItem);
+
+ nsresult GetEnumDocShellType(int32_t* aEnumerationItemType);
+ nsresult SetEnumDocShellType(int32_t aEnumerationItemType);
+
+ nsresult First();
+
+protected:
+ nsresult EnsureDocShellArray();
+ nsresult ClearState();
+
+ nsresult BuildDocShellArray(nsTArray<nsWeakPtr>& aItemArray);
+ virtual nsresult BuildArrayRecursive(nsIDocShellTreeItem* aItem,
+ nsTArray<nsWeakPtr>& aItemArray) = 0;
+
+protected:
+ nsWeakPtr mRootItem; // weak ref!
+
+ nsTArray<nsWeakPtr> mItemArray; // flattened list of items with matching type
+ uint32_t mCurIndex;
+
+ int32_t mDocShellType; // only want shells of this type
+ bool mArrayValid; // is mItemArray up to date?
+
+ const int8_t mEnumerationDirection;
+};
+
+class nsDocShellForwardsEnumerator : public nsDocShellEnumerator
+{
+public:
+ nsDocShellForwardsEnumerator()
+ : nsDocShellEnumerator(enumerateForwards)
+ {
+ }
+
+protected:
+ virtual nsresult BuildArrayRecursive(nsIDocShellTreeItem* aItem,
+ nsTArray<nsWeakPtr>& aItemArray);
+};
+
+class nsDocShellBackwardsEnumerator : public nsDocShellEnumerator
+{
+public:
+ nsDocShellBackwardsEnumerator()
+ : nsDocShellEnumerator(enumerateBackwards)
+ {
+ }
+
+protected:
+ virtual nsresult BuildArrayRecursive(nsIDocShellTreeItem* aItem,
+ nsTArray<nsWeakPtr>& aItemArray);
+};
+
+#endif // nsDocShellEnumerator_h___