Changeset 63135 in webkit


Ignore:
Timestamp:
Jul 12, 2010 4:16:54 PM (14 years ago)
Author:
eric@webkit.org
Message:

2010-07-12 Eric Seidel <eric@webkit.org>

Reviewed by Adam Barth.

HTML tags should break out of foreign content
https://bugs.webkit.org/show_bug.cgi?id=42106

  • html5lib/runner-expected-html5.txt:

2010-07-12 Eric Seidel <eric@webkit.org>

Reviewed by Adam Barth.

HTML tags should break out of foreign content
https://bugs.webkit.org/show_bug.cgi?id=42106

Implement another paragraph of the spec to pass another
bunch of foreign content tests.

This fixes a bunch of tests in html5lib/runner.html.
After this change we only have 4 remaining foreign content failures.

  • html/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::processStartTag):
Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r63134 r63135  
     12010-07-12  Eric Seidel  <eric@webkit.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        HTML tags should break out of foreign content
     6        https://bugs.webkit.org/show_bug.cgi?id=42106
     7
     8        * html5lib/runner-expected-html5.txt:
     9
    1102010-07-12  Zhenyao Mo  <zmo@google.com>
    211
  • trunk/LayoutTests/html5lib/runner-expected-html5.txt

    r63116 r63135  
    387387
    388388resources/tests9.dat:
    389 13
    39038914
    391 15
    392 18
    393 19
    394 
    395 Test 13 of 25 in resources/tests9.dat failed. Input:
    396 <!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
    397 Got:
    398 | <!DOCTYPE html>
    399 | <html>
    400 |   <head>
    401 |   <body>
    402 |     <table>
    403 |       <caption>
    404 |         <math math>
    405 |           <math mi>
    406 |             "foo"
    407 |           <math mi>
    408 |             "bar"
    409 |           <math p>
    410 |             "baz"
    411 |             <math p>
    412 |               "quux"
    413 Expected:
    414 | <!DOCTYPE html>
    415 | <html>
    416 |   <head>
    417 |   <body>
    418 |     <table>
    419 |       <caption>
    420 |         <math math>
    421 |           <math mi>
    422 |             "foo"
    423 |           <math mi>
    424 |             "bar"
    425 |         <p>
    426 |           "baz"
    427 |     <p>
    428 |       "quux"
    429390
    430391Test 14 of 25 in resources/tests9.dat failed. Input:
     
    443404|             "bar"
    444405|           "baz"
    445 |           <math p>
    446 |             "quux"
     406|         <p>
     407|           "quux"
    447408Expected:
    448409| <!DOCTYPE html>
     
    460421|     <p>
    461422|       "quux"
    462 
    463 Test 15 of 25 in resources/tests9.dat failed. Input:
    464 <!DOCTYPE html><body><table><colgroup><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
    465 Got:
    466 | <!DOCTYPE html>
    467 | <html>
    468 |   <head>
    469 |   <body>
    470 |     <math math>
    471 |       <math mi>
    472 |         "foo"
    473 |       <math mi>
    474 |         "bar"
    475 |       <math p>
    476 |         "baz"
    477 |         <math p>
    478 |           "quux"
    479 |     <table>
    480 |       <colgroup>
    481 Expected:
    482 | <!DOCTYPE html>
    483 | <html>
    484 |   <head>
    485 |   <body>
    486 |     <math math>
    487 |       <math mi>
    488 |         "foo"
    489 |       <math mi>
    490 |         "bar"
    491 |     <p>
    492 |       "baz"
    493 |     <table>
    494 |       <colgroup>
    495 |     <p>
    496 |       "quux"
    497 
    498 Test 18 of 25 in resources/tests9.dat failed. Input:
    499 <!DOCTYPE html><body></body></html><math><mi>foo</mi><mi>bar</mi><p>baz
    500 Got:
    501 | <!DOCTYPE html>
    502 | <html>
    503 |   <head>
    504 |   <body>
    505 |     <math math>
    506 |       <math mi>
    507 |         "foo"
    508 |       <math mi>
    509 |         "bar"
    510 |       <math p>
    511 |         "baz"
    512 Expected:
    513 | <!DOCTYPE html>
    514 | <html>
    515 |   <head>
    516 |   <body>
    517 |     <math math>
    518 |       <math mi>
    519 |         "foo"
    520 |       <math mi>
    521 |         "bar"
    522 |     <p>
    523 |       "baz"
    524 
    525 Test 19 of 25 in resources/tests9.dat failed. Input:
    526 <!DOCTYPE html><body></body><math><mi>foo</mi><mi>bar</mi><p>baz
    527 Got:
    528 | <!DOCTYPE html>
    529 | <html>
    530 |   <head>
    531 |   <body>
    532 |     <math math>
    533 |       <math mi>
    534 |         "foo"
    535 |       <math mi>
    536 |         "bar"
    537 |       <math p>
    538 |         "baz"
    539 Expected:
    540 | <!DOCTYPE html>
    541 | <html>
    542 |   <head>
    543 |   <body>
    544 |     <math math>
    545 |       <math mi>
    546 |         "foo"
    547 |       <math mi>
    548 |         "bar"
    549 |     <p>
    550 |       "baz"
    551423resources/tests10.dat:
    552 13
    55342414
    554 15
    555 18
    556 19
    557 
    558 Test 13 of 25 in resources/tests10.dat failed. Input:
    559 <!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
    560 Got:
    561 | <!DOCTYPE html>
    562 | <html>
    563 |   <head>
    564 |   <body>
    565 |     <table>
    566 |       <caption>
    567 |         <svg svg>
    568 |           <svg g>
    569 |             "foo"
    570 |           <svg g>
    571 |             "bar"
    572 |           <svg p>
    573 |             "baz"
    574 |             <svg p>
    575 |               "quux"
    576 Expected:
    577 | <!DOCTYPE html>
    578 | <html>
    579 |   <head>
    580 |   <body>
    581 |     <table>
    582 |       <caption>
    583 |         <svg svg>
    584 |           <svg g>
    585 |             "foo"
    586 |           <svg g>
    587 |             "bar"
    588 |         <p>
    589 |           "baz"
    590 |     <p>
    591 |       "quux"
    592425
    593426Test 14 of 25 in resources/tests10.dat failed. Input:
     
    606439|             "bar"
    607440|           "baz"
    608 |           <svg p>
    609 |             "quux"
     441|         <p>
     442|           "quux"
    610443Expected:
    611444| <!DOCTYPE html>
     
    623456|     <p>
    624457|       "quux"
    625 
    626 Test 15 of 25 in resources/tests10.dat failed. Input:
    627 <!DOCTYPE html><body><table><colgroup><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
    628 Got:
    629 | <!DOCTYPE html>
    630 | <html>
    631 |   <head>
    632 |   <body>
    633 |     <svg svg>
    634 |       <svg g>
    635 |         "foo"
    636 |       <svg g>
    637 |         "bar"
    638 |       <svg p>
    639 |         "baz"
    640 |         <svg p>
    641 |           "quux"
    642 |     <table>
    643 |       <colgroup>
    644 Expected:
    645 | <!DOCTYPE html>
    646 | <html>
    647 |   <head>
    648 |   <body>
    649 |     <svg svg>
    650 |       <svg g>
    651 |         "foo"
    652 |       <svg g>
    653 |         "bar"
    654 |     <p>
    655 |       "baz"
    656 |     <table>
    657 |       <colgroup>
    658 |     <p>
    659 |       "quux"
    660 
    661 Test 18 of 25 in resources/tests10.dat failed. Input:
    662 <!DOCTYPE html><body></body></html><svg><g>foo</g><g>bar</g><p>baz
    663 Got:
    664 | <!DOCTYPE html>
    665 | <html>
    666 |   <head>
    667 |   <body>
    668 |     <svg svg>
    669 |       <svg g>
    670 |         "foo"
    671 |       <svg g>
    672 |         "bar"
    673 |       <svg p>
    674 |         "baz"
    675 Expected:
    676 | <!DOCTYPE html>
    677 | <html>
    678 |   <head>
    679 |   <body>
    680 |     <svg svg>
    681 |       <svg g>
    682 |         "foo"
    683 |       <svg g>
    684 |         "bar"
    685 |     <p>
    686 |       "baz"
    687 
    688 Test 19 of 25 in resources/tests10.dat failed. Input:
    689 <!DOCTYPE html><body></body><svg><g>foo</g><g>bar</g><p>baz
    690 Got:
    691 | <!DOCTYPE html>
    692 | <html>
    693 |   <head>
    694 |   <body>
    695 |     <svg svg>
    696 |       <svg g>
    697 |         "foo"
    698 |       <svg g>
    699 |         "bar"
    700 |       <svg p>
    701 |         "baz"
    702 Expected:
    703 | <!DOCTYPE html>
    704 | <html>
    705 |   <head>
    706 |   <body>
    707 |     <svg svg>
    708 |       <svg g>
    709 |         "foo"
    710 |       <svg g>
    711 |         "bar"
    712 |     <p>
    713 |       "baz"
    714458resources/tests11.dat: PASS
    715459
  • trunk/WebCore/ChangeLog

    r63134 r63135  
     12010-07-12  Eric Seidel  <eric@webkit.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        HTML tags should break out of foreign content
     6        https://bugs.webkit.org/show_bug.cgi?id=42106
     7
     8        Implement another paragraph of the spec to pass another
     9        bunch of foreign content tests.
     10
     11        This fixes a bunch of tests in html5lib/runner.html.
     12        After this change we only have 4 remaining foreign content failures.
     13
     14        * html/HTMLTreeBuilder.cpp:
     15        (WebCore::HTMLTreeBuilder::processStartTag):
     16
    1172010-07-12  Zhenyao Mo  <zmo@google.com>
    218
  • trunk/WebCore/html/HTMLElementStack.cpp

    r62926 r63135  
    144144}
    145145
     146void HTMLElementStack::popUntilElementWithNamespace(const AtomicString& namespaceURI)
     147{
     148    while (top()->namespaceURI() != namespaceURI)
     149        pop();
     150}
     151
    146152void HTMLElementStack::popUntil(const AtomicString& tagName)
    147153{
  • trunk/WebCore/html/HTMLElementStack.h

    r62926 r63135  
    8484    void pop();
    8585    void popUntil(const AtomicString& tagName);
     86    void popUntilElementWithNamespace(const AtomicString& namespaceURI);
    8687    void popUntil(Element*);
    8788    void popUntilPopped(const AtomicString& tagName);
  • trunk/WebCore/html/HTMLTreeBuilder.cpp

    r63116 r63135  
    14921492            return;
    14931493        }
    1494         notImplemented();
     1494        if (token.name() == bTag
     1495            || token.name() == bigTag
     1496            || token.name() == blockquoteTag
     1497            || token.name() == bodyTag
     1498            || token.name() == brTag
     1499            || token.name() == centerTag
     1500            || token.name() == codeTag
     1501            || token.name() == ddTag
     1502            || token.name() == divTag
     1503            || token.name() == dlTag
     1504            || token.name() == dtTag
     1505            || token.name() == emTag
     1506            || token.name() == embedTag
     1507            || isNumberedHeaderTag(token.name())
     1508            || token.name() == headTag
     1509            || token.name() == hrTag
     1510            || token.name() == iTag
     1511            || token.name() == imgTag
     1512            || token.name() == liTag
     1513            || token.name() == listingTag
     1514            || token.name() == menuTag
     1515            || token.name() == metaTag
     1516            || token.name() == nobrTag
     1517            || token.name() == olTag
     1518            || token.name() == pTag
     1519            || token.name() == preTag
     1520            || token.name() == rubyTag
     1521            || token.name() == sTag
     1522            || token.name() == smallTag
     1523            || token.name() == spanTag
     1524            || token.name() == strongTag
     1525            || token.name() == strikeTag
     1526            || token.name() == subTag
     1527            || token.name() == supTag
     1528            || token.name() == tableTag
     1529            || token.name() == ttTag
     1530            || token.name() == uTag
     1531            || token.name() == ulTag
     1532            || token.name() == varTag
     1533            || (token.name() == fontTag && (token.getAttributeItem(colorAttr) || token.getAttributeItem(faceAttr) || token.getAttributeItem(sizeAttr)))) {
     1534            m_tree.openElements()->popUntilElementWithNamespace(xhtmlNamespaceURI);
     1535            setInsertionMode(m_secondaryInsertionMode);
     1536            processStartTag(token);
     1537            return;
     1538        }
    14951539        const AtomicString& currentNamespace = m_tree.currentElement()->namespaceURI();
    14961540        if (currentNamespace == MathMLNames::mathmlNamespaceURI)
     
    25932637        // FIXME: Following the spec would infinitely recurse on <svg><svg>
    25942638        // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10115
    2595         while (m_tree.currentElement()) {
    2596             if (m_tree.currentElement()->namespaceURI() == xhtmlNamespaceURI)
    2597                 break;
    2598             m_tree.openElements()->pop();
    2599         }
     2639        m_tree.openElements()->popUntilElementWithNamespace(xhtmlNamespaceURI);
    26002640        setInsertionMode(m_secondaryInsertionMode);
    26012641        processEndOfFile(token);
Note: See TracChangeset for help on using the changeset viewer.