| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. | 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. |
| 3 * Copyright (C) 2011 Apple Inc. All rights reserved. | 3 * Copyright (C) 2011 Apple Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 25 */ | 25 */ |
| 26 | 26 |
| 27 #include "config.h" | 27 #include "config.h" |
| 28 #include "core/html/parser/HTMLElementStack.h" | 28 #include "core/html/parser/HTMLElementStack.h" |
| 29 | 29 |
| 30 #include "HTMLNames.h" | 30 #include "HTMLNames.h" |
| 31 #include "MathMLNames.h" | 31 #include "MathMLNames.h" |
| 32 #include "SVGNames.h" | 32 #include "SVGNames.h" |
| 33 #include "core/dom/Element.h" | 33 #include "core/dom/Element.h" |
| 34 #include "core/html/HTMLElement.h" |
| 34 | 35 |
| 35 namespace WebCore { | 36 namespace WebCore { |
| 36 | 37 |
| 37 using namespace HTMLNames; | 38 using namespace HTMLNames; |
| 38 | 39 |
| 39 | 40 |
| 40 namespace { | 41 namespace { |
| 41 | 42 |
| 42 inline bool isRootNode(HTMLStackItem* item) | 43 inline bool isRootNode(HTMLStackItem* item) |
| 43 { | 44 { |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 if (m_top->element() == element) { | 394 if (m_top->element() == element) { |
| 394 popHTMLHeadElement(); | 395 popHTMLHeadElement(); |
| 395 return; | 396 return; |
| 396 } | 397 } |
| 397 m_headElement = 0; | 398 m_headElement = 0; |
| 398 removeNonTopCommon(element); | 399 removeNonTopCommon(element); |
| 399 } | 400 } |
| 400 | 401 |
| 401 void HTMLElementStack::remove(Element* element) | 402 void HTMLElementStack::remove(Element* element) |
| 402 { | 403 { |
| 403 ASSERT(!element->hasTagName(HTMLNames::headTag)); | 404 ASSERT(!isHTMLHeadElement(element)); |
| 404 if (m_top->element() == element) { | 405 if (m_top->element() == element) { |
| 405 pop(); | 406 pop(); |
| 406 return; | 407 return; |
| 407 } | 408 } |
| 408 removeNonTopCommon(element); | 409 removeNonTopCommon(element); |
| 409 } | 410 } |
| 410 | 411 |
| 411 HTMLElementStack::ElementRecord* HTMLElementStack::find(Element* element) const | 412 HTMLElementStack::ElementRecord* HTMLElementStack::find(Element* element) const |
| 412 { | 413 { |
| 413 for (ElementRecord* pos = m_top.get(); pos; pos = pos->next()) { | 414 for (ElementRecord* pos = m_top.get(); pos; pos = pos->next()) { |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 ASSERT(!topStackItem()->hasTagName(headTag) || !m_headElement); | 570 ASSERT(!topStackItem()->hasTagName(headTag) || !m_headElement); |
| 570 ASSERT(!topStackItem()->hasTagName(bodyTag) || !m_bodyElement); | 571 ASSERT(!topStackItem()->hasTagName(bodyTag) || !m_bodyElement); |
| 571 top()->finishParsingChildren(); | 572 top()->finishParsingChildren(); |
| 572 m_top = m_top->releaseNext(); | 573 m_top = m_top->releaseNext(); |
| 573 | 574 |
| 574 m_stackDepth--; | 575 m_stackDepth--; |
| 575 } | 576 } |
| 576 | 577 |
| 577 void HTMLElementStack::removeNonTopCommon(Element* element) | 578 void HTMLElementStack::removeNonTopCommon(Element* element) |
| 578 { | 579 { |
| 579 ASSERT(!element->hasTagName(htmlTag)); | 580 ASSERT(!isHTMLHtmlElement(element)); |
| 580 ASSERT(!element->hasTagName(bodyTag)); | 581 ASSERT(!isHTMLBodyElement(element)); |
| 581 ASSERT(top() != element); | 582 ASSERT(top() != element); |
| 582 for (ElementRecord* pos = m_top.get(); pos; pos = pos->next()) { | 583 for (ElementRecord* pos = m_top.get(); pos; pos = pos->next()) { |
| 583 if (pos->next()->element() == element) { | 584 if (pos->next()->element() == element) { |
| 584 // FIXME: Is it OK to call finishParsingChildren() | 585 // FIXME: Is it OK to call finishParsingChildren() |
| 585 // when the children aren't actually finished? | 586 // when the children aren't actually finished? |
| 586 element->finishParsingChildren(); | 587 element->finishParsingChildren(); |
| 587 pos->setNext(pos->next()->releaseNext()); | 588 pos->setNext(pos->next()->releaseNext()); |
| 588 m_stackDepth--; | 589 m_stackDepth--; |
| 589 return; | 590 return; |
| 590 } | 591 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 609 | 610 |
| 610 void HTMLElementStack::show() | 611 void HTMLElementStack::show() |
| 611 { | 612 { |
| 612 for (ElementRecord* record = m_top.get(); record; record = record->next()) | 613 for (ElementRecord* record = m_top.get(); record; record = record->next()) |
| 613 record->element()->showNode(); | 614 record->element()->showNode(); |
| 614 } | 615 } |
| 615 | 616 |
| 616 #endif | 617 #endif |
| 617 | 618 |
| 618 } | 619 } |
| OLD | NEW |