Kill nsGeneratedContentIterator and related classes and code since it's not used. r/sr=dbaron b=357957

This commit is contained in:
cvshook%sicking.cc 2006-10-25 20:24:00 +00:00
parent accdb47d46
commit 55d0c600fa
12 changed files with 4 additions and 1698 deletions

View File

@ -163,14 +163,6 @@
{/* {80D7E247-D4B8-45d7-BB59-6F1DD56F384C} */ \
0x80d7e247, 0xd4b8, 0x45d7, { 0xbb, 0x59, 0x6f, 0x1d, 0xd5, 0x6f, 0x38, 0x4c } }
#define NS_GENERATEDSUBTREEITERATOR_CID \
{/* {9A45253B-EB8F-49f1-B925-E9EA90D3EB3A}*/ \
0x9a45253b, 0xeb8f, 0x49f1, { 0xb9, 0x25, 0xe9, 0xea, 0x90, 0xd3, 0xeb, 0x3a } }
#define NS_GENERATEDCONTENTITERATOR_CID \
{/* {A364930F-E353-49f1-AC69-91637EB8B757}*/ \
0xa364930f, 0xe353, 0x49f1, { 0xac, 0x69, 0x91, 0x63, 0x7e, 0xb8, 0xb7, 0x57 } }
#define NS_SUBTREEITERATOR_CID \
{/* {a6cf90e5-15b3-11d2-932e-00805f8add32}*/ \
0xa6cf90e5, 0x15b3, 0x11d2, {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32 } }

View File

@ -47,12 +47,6 @@ class nsIDOMRange;
{0xa6cf90e4, 0x15b3, 0x11d2, \
{0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32} }
// {B4BC9F63-D9BA-11d3-9938-00108301233C}
#define NS_IGENERATEDCONTENTITERTOR_IID \
{ 0xb4bc9f63, 0xd9ba, 0x11d3, \
{ 0x99, 0x38, 0x0, 0x10, 0x83, 0x1, 0x23, 0x3c } }
class nsIContentIterator : public nsISupports
{
public:
@ -100,22 +94,5 @@ public:
NS_DEFINE_STATIC_IID_ACCESSOR(nsIContentIterator, NS_ICONTENTITERTOR_IID)
class nsIPresShell;
class nsIGeneratedContentIterator : public nsISupports {
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IGENERATEDCONTENTITERTOR_IID)
/* Initializes an iterator for the subtree rooted by the node aRoot
*/
virtual nsresult Init(nsIPresShell *aShell, nsIDOMRange* aRange) = 0;
virtual nsresult Init(nsIPresShell *aShell, nsIContent* aContent) = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIGeneratedContentIterator,
NS_IGENERATEDCONTENTITERTOR_IID)
#endif // __nsIContentIterator_h___

View File

@ -115,7 +115,6 @@ CPPSRCS = \
nsDocumentFragment.cpp \
nsFrameLoader.cpp \
nsGenConImageContent.cpp \
nsGeneratedIterator.cpp \
nsGenericDOMDataNode.cpp \
nsGenericDOMNodeList.cpp \
nsGenericElement.cpp \

File diff suppressed because it is too large Load Diff

View File

@ -130,7 +130,6 @@ CPPSRCS = \
nsCounterManager.cpp \
nsDisplayList.cpp \
nsDocumentViewer.cpp \
nsFrameContentIterator.cpp \
nsFrameManager.cpp \
nsFrameTraversal.cpp \
nsGenConList.cpp \

View File

@ -1,287 +0,0 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org Code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2000
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsCOMPtr.h"
#include "nsIContentIterator.h"
#include "nsPresContext.h"
#include "nsIFrame.h"
#include "nsIContent.h"
#include "nsIEnumerator.h"
#include "nsFrameList.h"
class nsFrameContentIterator : public nsIContentIterator
{
public:
nsFrameContentIterator(nsPresContext* aPresContext, nsIFrame* aFrame);
virtual ~nsFrameContentIterator();
// nsISupports
NS_DECL_ISUPPORTS
// nsIContentIterator
virtual nsresult Init(nsIContent* aRoot);
virtual nsresult Init(nsIDOMRange* aRange);
virtual void First();
virtual void Last();
virtual void Next();
virtual void Prev();
virtual nsIContent *GetCurrentNode();
virtual PRBool IsDone();
virtual nsresult PositionAt(nsIContent* aCurNode);
private:
nsCOMPtr<nsPresContext> mPresContext;
nsIFrame* mParentFrame;
nsIFrame* mCurrentChild;
PRBool mIsDone;
};
nsFrameContentIterator::nsFrameContentIterator(nsPresContext* aPresContext,
nsIFrame* aFrame)
: mPresContext(aPresContext), mParentFrame(aFrame), mIsDone(PR_FALSE)
{
First();
}
NS_IMPL_ISUPPORTS1(nsFrameContentIterator, nsIContentIterator)
nsFrameContentIterator::~nsFrameContentIterator()
{
}
nsresult
nsFrameContentIterator::Init(nsIContent* aRoot)
{
return NS_ERROR_ALREADY_INITIALIZED;
}
nsresult
nsFrameContentIterator::Init(nsIDOMRange* aRange)
{
return NS_ERROR_ALREADY_INITIALIZED;
}
void
nsFrameContentIterator::First()
{
// Get the first child frame and make it the current node
mCurrentChild = mParentFrame->GetFirstChild(nsnull);
mIsDone = !mCurrentChild;
}
static nsIFrame*
GetNextChildFrame(nsPresContext* aPresContext, nsIFrame* aFrame)
{
NS_PRECONDITION(aFrame, "null pointer");
// Get the last-in-flow
aFrame = aFrame->GetLastInFlow();
// Get its next sibling
nsIFrame* nextSibling = aFrame->GetNextSibling();
// If there's no next sibling, then check if the parent frame
// has a next-in-flow and look there
if (!nextSibling) {
nsIFrame* parent = aFrame->GetParent()->GetNextInFlow();
if (parent) {
nextSibling = parent->GetFirstChild(nsnull);
}
}
return nextSibling;
}
void
nsFrameContentIterator::Last()
{
// Starting with the first child walk and find the last child
mCurrentChild = nsnull;
nsIFrame* nextChild = mParentFrame->GetFirstChild(nsnull);
while (nextChild) {
mCurrentChild = nextChild;
nextChild = ::GetNextChildFrame(mPresContext, nextChild);
}
mIsDone = !mCurrentChild;
}
void
nsFrameContentIterator::Next()
{
nsIFrame* nextChild = ::GetNextChildFrame(mPresContext, mCurrentChild);
if (nextChild) {
// Advance to the next child
mCurrentChild = nextChild;
// If we're at the end then the collection is at the end
mIsDone = (nsnull == ::GetNextChildFrame(mPresContext, mCurrentChild));
return;
}
// No next frame, we're done.
mIsDone = PR_TRUE;
}
static nsIFrame*
GetPrevChildFrame(nsPresContext* aPresContext, nsIFrame* aFrame)
{
NS_PRECONDITION(aFrame, "null pointer");
// Get its previous sibling. Because we have a singly linked list we
// need to search from the first child
nsIFrame* parent = aFrame->GetParent();
nsIFrame* prevSibling;
nsIFrame* firstChild = parent->GetFirstChild(nsnull);
NS_ASSERTION(firstChild, "parent has no first child");
nsFrameList frameList(firstChild);
prevSibling = frameList.GetPrevSiblingFor(aFrame);
// If there's no previous sibling, then check if the parent frame
// has a prev-in-flow and look there
if (!prevSibling) {
parent = parent->GetPrevInFlow();
if (parent) {
firstChild = parent->GetFirstChild(nsnull);
frameList.SetFrames(firstChild);
prevSibling = frameList.LastChild();
}
}
// Get the first-in-flow
while (PR_TRUE) {
nsIFrame* prevInFlow = prevSibling->GetPrevInFlow();
if (prevInFlow) {
prevSibling = prevInFlow;
} else {
break;
}
}
return prevSibling;
}
void
nsFrameContentIterator::Prev()
{
nsIFrame* prevChild = ::GetPrevChildFrame(mPresContext, mCurrentChild);
if (prevChild) {
// Make the previous child the current child
mCurrentChild = prevChild;
// If we're at the beginning then the collection is at the end
mIsDone = (nsnull == ::GetPrevChildFrame(mPresContext, mCurrentChild));
return;
}
// No previous frame, we're done.
mIsDone = PR_TRUE;
}
nsIContent *
nsFrameContentIterator::GetCurrentNode()
{
if (mCurrentChild && !mIsDone) {
return mCurrentChild->GetContent();
}
return nsnull;
}
PRBool
nsFrameContentIterator::IsDone()
{
return mIsDone;
}
nsresult
nsFrameContentIterator::PositionAt(nsIContent* aCurNode)
{
// Starting with the first child frame search for the child frame
// with the matching content object
nsIFrame* child = mParentFrame->GetFirstChild(nsnull);
while (child) {
if (child->GetContent() == aCurNode) {
break;
}
child = ::GetNextChildFrame(mPresContext, child);
}
if (child) {
// Make it the current child
mCurrentChild = child;
mIsDone = PR_FALSE;
}
return NS_OK;
}
nsresult
NS_NewFrameContentIterator(nsPresContext* aPresContext,
nsIFrame* aFrame,
nsIContentIterator** aIterator)
{
NS_ENSURE_ARG_POINTER(aIterator);
if (!aIterator) {
return NS_ERROR_NULL_POINTER;
}
NS_ENSURE_ARG_POINTER(aFrame);
if (!aFrame) {
return NS_ERROR_NULL_POINTER;
}
// Make sure the frame corresponds to generated content
NS_ASSERTION(aFrame->GetStateBits() & NS_FRAME_GENERATED_CONTENT, "unexpected frame");
nsFrameContentIterator* it = new nsFrameContentIterator(aPresContext, aFrame);
if (!it) {
return NS_ERROR_OUT_OF_MEMORY;
}
return it->QueryInterface(NS_GET_IID(nsIContentIterator), (void **)aIterator);
}

View File

@ -100,9 +100,8 @@ typedef short SelectionType;
// 0d8a87aa-3e6f-409f-a518-96fd8a29b423
#define NS_IPRESSHELL_IID \
{ 0x0d8a87aa, 0x3e6f, 0x409f, \
{ 0xa5, 0x18, 0x96, 0xfd, 0x8a, 0x29, 0xb4, 0x23 } }
{ 0x79433b66, 0xe8a4, 0x442f, \
{ 0x9c, 0x6e, 0x2f, 0xb2, 0x8d, 0x5e, 0x84, 0xd7 } }
// Constants uses for ScrollFrameIntoView() function
#define NS_PRESSHELL_SCROLL_TOP 0
@ -549,19 +548,6 @@ public:
*/
NS_IMETHOD IsReflowLocked(PRBool* aIsLocked) = 0;
/**
* Returns a content iterator to iterate the generated content nodes.
* You must specify whether you want to iterate the "before" generated
* content or the "after" generated content. If there is no generated
* content of the specified type for the promary frame associated with
* with the content object then NULL is returned
*/
enum GeneratedContentType {Before, After};
NS_IMETHOD GetGeneratedContentIterator(nsIContent* aContent,
GeneratedContentType aType,
nsIContentIterator** aIterator) const = 0;
/**
* Store the nsIAnonymousContentCreator-generated anonymous
* content that's associated with an element. The new anonymous content

View File

@ -1143,10 +1143,6 @@ public:
NS_IMETHOD CaptureHistoryState(nsILayoutHistoryState** aLayoutHistoryState, PRBool aLeavingPage);
NS_IMETHOD GetGeneratedContentIterator(nsIContent* aContent,
GeneratedContentType aType,
nsIContentIterator** aIterator) const;
NS_IMETHOD SetAnonymousContentFor(nsIContent* aContent, nsISupportsArray* aAnonymousElements);
NS_IMETHOD GetAnonymousContentFor(nsIContent* aContent, nsISupportsArray** aAnonymousElements);
NS_IMETHOD ReleaseAnonymousContent();
@ -4747,52 +4743,6 @@ PresShell::CaptureHistoryState(nsILayoutHistoryState** aState, PRBool aLeavingPa
return NS_OK;
}
NS_IMETHODIMP
PresShell::GetGeneratedContentIterator(nsIContent* aContent,
GeneratedContentType aType,
nsIContentIterator** aIterator) const
{
nsresult rv = NS_OK;
// Initialize OUT parameter
*aIterator = nsnull;
// Get the primary frame associated with the content object
nsIFrame* primaryFrame = GetPrimaryFrameFor(aContent);
if (primaryFrame) {
// See whether it's a request for the before or after generated content
if (Before == aType) {
nsIFrame* beforeFrame = nsLayoutUtils::GetBeforeFrame(primaryFrame);
if (beforeFrame) {
// Create an iterator
rv = NS_NewFrameContentIterator(mPresContext, beforeFrame, aIterator);
}
} else {
// Avoid finding the :after frame unless we need to (it's
// expensive). Instead probe for the existence of the pseudo-element
nsStyleContext *styleContext;
styleContext = primaryFrame->GetStyleContext();
if (nsLayoutUtils::HasPseudoStyle(aContent, styleContext,
nsCSSPseudoElements::after,
mPresContext)) {
nsIFrame* afterFrame = nsLayoutUtils::GetAfterFrame(primaryFrame);
if (afterFrame)
{
NS_ASSERTION(afterFrame->IsGeneratedContentFrame(),
"can't find generated content frame");
// Create an iterator
rv = NS_NewFrameContentIterator(mPresContext, afterFrame, aIterator);
}
}
}
}
return rv;
}
NS_IMETHODIMP
PresShell::SetAnonymousContentFor(nsIContent* aContent, nsISupportsArray* aAnonymousElements)
{

View File

@ -129,14 +129,6 @@
{/* {a6cf90e3-15b3-11d2-932e-00805f8add32}*/ \
0xa6cf90e3, 0x15b3, 0x11d2, {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32 } }
#define NS_GENERATEDSUBTREEITERATOR_CID \
{/* {9A45253B-EB8F-49f1-B925-E9EA90D3EB3A}*/ \
0x9a45253b, 0xeb8f, 0x49f1, { 0xb9, 0x25, 0xe9, 0xea, 0x90, 0xd3, 0xeb, 0x3a } }
#define NS_GENERATEDCONTENTITERATOR_CID \
{/* {A364930F-E353-49f1-AC69-91637EB8B757}*/ \
0xa364930f, 0xe353, 0x49f1, { 0xac, 0x69, 0x91, 0x63, 0x7e, 0xb8, 0xb7, 0x57 } }
#define NS_SUBTREEITERATOR_CID \
{/* {a6cf90e5-15b3-11d2-932e-00805f8add32}*/ \
0xa6cf90e5, 0x15b3, 0x11d2, {0x93, 0x2e, 0x00, 0x80, 0x5f, 0x8a, 0xdd, 0x32 } }

View File

@ -425,8 +425,6 @@ MAKE_CTOR(CreateRange, nsIDOMRange, NS_NewRan
MAKE_CTOR(CreateRangeUtils, nsIRangeUtils, NS_NewRangeUtils)
MAKE_CTOR(CreateContentIterator, nsIContentIterator, NS_NewContentIterator)
MAKE_CTOR(CreatePreContentIterator, nsIContentIterator, NS_NewPreContentIterator)
MAKE_CTOR(CreateGeneratedContentIterator, nsIContentIterator, NS_NewGenRegularIterator)
MAKE_CTOR(CreateGeneratedSubtreeIterator, nsIContentIterator, NS_NewGenSubtreeIterator)
MAKE_CTOR(CreateSubtreeIterator, nsIContentIterator, NS_NewContentSubtreeIterator)
// CreateHTMLImgElement, see below
// CreateHTMLOptionElement, see below
@ -941,16 +939,6 @@ static const nsModuleComponentInfo gComponents[] = {
"@mozilla.org/content/pre-content-iterator;1",
CreatePreContentIterator },
{ "Generated Content iterator",
NS_GENERATEDCONTENTITERATOR_CID,
"@mozilla.org/content/generated-content-iterator;1",
CreateGeneratedContentIterator },
{ "Generated Subtree iterator",
NS_GENERATEDSUBTREEITERATOR_CID,
"@mozilla.org/content/generated-subtree-content-iterator;1",
CreateGeneratedSubtreeIterator },
{ "Subtree iterator",
NS_SUBTREEITERATOR_CID,
"@mozilla.org/content/subtree-content-iterator;1",

View File

@ -73,13 +73,6 @@ class nsIChannel;
// next-in-flows and are not private to blocks
#define NS_BLOCK_FLAGS_MASK 0xF0F00000
// Factory method for creating a content iterator for generated
// content
nsresult
NS_NewFrameContentIterator(nsPresContext* aPresContext,
nsIFrame* aFrame,
nsIContentIterator** aIterator);
// Factory methods for creating html layout objects
// These are variations on AreaFrame with slightly different layout

View File

@ -119,27 +119,8 @@ static NS_DEFINE_CID(kFrameTraversalCID, NS_FRAMETRAVERSAL_CID);
//#define DEBUG_TABLE 1
// Selection's use of generated content iterators has been turned off
// temporarily since it bogs down selection in large documents. Using
// generated content iterators is slower because it must resolve the style
// for the content to find out if it has any before/after style, and it
// increases the number of calls to GetPrimaryFrame() which is very expensive.
//
// We can reduce the number of calls to GetPrimaryFrame() during selection
// by a good factor (maybe 2-3 times) if we just ignore the generated content
// and NOT hilite it when we cross it.
//
// #1 the output system doesn't handle it right now anyway so selecting
// has no REAL benefit to generated content.
// #2 there is no available way given to me by troy that can give back the
// necessary data without a frame to work from.
#ifdef USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
static NS_DEFINE_IID(kCGenContentIteratorCID, NS_GENERATEDCONTENTITERATOR_CID);
static NS_DEFINE_IID(kCGenSubtreeIteratorCID, NS_GENERATEDSUBTREEITERATOR_CID);
#else
static NS_DEFINE_IID(kCContentIteratorCID, NS_CONTENTITERATOR_CID);
static NS_DEFINE_IID(kCSubtreeIteratorCID, NS_SUBTREEITERATOR_CID);
#endif // USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
#undef OLD_SELECTION
#undef OLD_TABLE_SELECTION
@ -4961,15 +4942,7 @@ nsTypedSelection::selectFrames(nsPresContext* aPresContext,
nsresult result;
if (!aInnerIter)
return NS_ERROR_NULL_POINTER;
#ifdef USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
nsCOMPtr<nsIGeneratedContentIterator> genericiter = do_QueryInterface(aInnerIter);
if (genericiter && aPresShell)
{
result = genericiter->Init(aPresShell,aContent);
}
else
#endif // USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
result = aInnerIter->Init(aContent);
result = aInnerIter->Init(aContent);
nsIFrame *frame;
if (NS_SUCCEEDED(result))
{
@ -5052,33 +5025,19 @@ nsTypedSelection::selectFrames(nsPresContext* aPresContext, nsIDOMRange *aRange,
nsresult result;
nsCOMPtr<nsIContentIterator> iter = do_CreateInstance(
#ifdef USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
kCGenSubtreeIteratorCID,
#else
kCSubtreeIteratorCID,
#endif // USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
&result);
if (NS_FAILED(result))
return result;
nsCOMPtr<nsIContentIterator> inneriter = do_CreateInstance(
#ifdef USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
kCGenContentIteratorCID,
#else
kCContentIteratorCID,
#endif // USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
&result);
if ((NS_SUCCEEDED(result)) && iter && inneriter)
{
nsIPresShell *presShell = aPresContext->GetPresShell();
#ifdef USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
nsCOMPtr<nsIGeneratedContentIterator> genericiter = do_QueryInterface(iter);
if (genericiter && presShell)
result = genericiter->Init(presShell,aRange);
else
#endif // USE_SELECTION_GENERATED_CONTENT_ITERATOR_CODE
result = iter->Init(aRange);
result = iter->Init(aRange);
// loop through the content iterator for each content node
// for each text node: