2010-08-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Ensure that parser doesn't attach children that have been removed by JavaScript event handlers.
        https://bugs.webkit.org/show_bug.cgi?id=43813

        This patch re-fixes bug 40742 in a way that keeps allowing HTMLLinkElement
        to lazy-attach.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach): Added parent check.
        * html/HTMLLinkElement.cpp: Basically undoes changes introduced by r61424.
        * html/HTMLLinkElement.h: Ditto.

git-svn-id: svn://svn.chromium.org/blink/trunk@65281 bbb929c8-8fbe-4397-9dbb-9b2b20218538
bool HTMLConstructionSite::indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const
{
    if (m_activeFormattingElements.isEmpty())
        return false;
    unsigned index = m_activeFormattingElements.size();
    do {
        --index;
        const HTMLFormattingElementList::Entry& entry = m_activeFormattingElements.at(index);
        if (entry.isMarker() || m_openElements.contains(entry.element())) {
            firstUnopenElementIndex = index + 1;
            return firstUnopenElementIndex < m_activeFormattingElements.size();
        }
    } while (index);
    firstUnopenElementIndex = index;
    return true;
}

bool HTMLConstructionSite::indexOfFirstUnopenFormattingElement(unsigned& firstUnopenElementIndex) const
{
    if (m_activeFormattingElements.isEmpty())
        return false;
    unsigned index = m_activeFormattingElements.size();
    do {
        --index;
        const HTMLFormattingElementList::Entry& entry = m_activeFormattingElements.at(index);
        if (entry.isMarker() || m_openElements.contains(entry.element())) {
            firstUnopenElementIndex = index + 1;
            return firstUnopenElementIndex < m_activeFormattingElements.size();
        }
    } while (index);
    firstUnopenElementIndex = index;
    return true;
}
