Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(500)

Side by Side Diff: Source/core/html/track/vtt/VTTParser.cpp

Issue 96933004: Fix tag closing issues in the WebVTT tree builder (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « LayoutTests/media/track/opera/track/webvtt/parsing-cue-data/tests/tree-building-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * 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 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 } 558 }
559 if (!m_languageStack.isEmpty()) 559 if (!m_languageStack.isEmpty())
560 child->setLanguage(m_languageStack.last()); 560 child->setLanguage(m_languageStack.last());
561 m_currentNode->parserAppendChild(child); 561 m_currentNode->parserAppendChild(child);
562 m_currentNode = child; 562 m_currentNode = child;
563 } 563 }
564 break; 564 break;
565 } 565 }
566 case VTTTokenTypes::EndTag: { 566 case VTTTokenTypes::EndTag: {
567 VTTNodeType nodeType = tokenToNodeType(m_token); 567 VTTNodeType nodeType = tokenToNodeType(m_token);
568 if (nodeType != VTTNodeTypeNone) { 568 if (nodeType == VTTNodeTypeNone)
569 if (nodeType == VTTNodeTypeLanguage && m_currentNode->isVTTElement() && toVTTElement(m_currentNode.get())->webVTTNodeType() == VTTNodeTypeLanguage) 569 break;
570 m_languageStack.removeLast(); 570
571 if (m_currentNode->parentNode()) 571 // The only non-VTTElement would be the DocumentFragment root. (Text
572 m_currentNode = m_currentNode->parentNode(); 572 // nodes and PIs will never appear as m_currentNode.)
573 if (!m_currentNode->isVTTElement())
574 break;
575
576 VTTNodeType currentType = toVTTElement(m_currentNode.get())->webVTTNodeT ype();
577 bool matchesCurrent = nodeType == currentType;
578 if (!matchesCurrent) {
579 // </ruby> auto-closes <rt>.
580 if (currentType == VTTNodeTypeRubyText && nodeType == VTTNodeTypeRub y) {
581 if (m_currentNode->parentNode())
582 m_currentNode = m_currentNode->parentNode();
583 } else {
584 break;
585 }
573 } 586 }
587 if (nodeType == VTTNodeTypeLanguage)
588 m_languageStack.removeLast();
589 if (m_currentNode->parentNode())
590 m_currentNode = m_currentNode->parentNode();
574 break; 591 break;
575 } 592 }
576 case VTTTokenTypes::TimestampTag: { 593 case VTTTokenTypes::TimestampTag: {
577 unsigned position = 0; 594 unsigned position = 0;
578 String charactersString = m_token.characters(); 595 String charactersString = m_token.characters();
579 double time = VTTParser::collectTimeStamp(charactersString, &position); 596 double time = VTTParser::collectTimeStamp(charactersString, &position);
580 if (time != malformedTime) 597 if (time != malformedTime)
581 m_currentNode->parserAppendChild(ProcessingInstruction::create(docum ent, "timestamp", charactersString)); 598 m_currentNode->parserAppendChild(ProcessingInstruction::create(docum ent, "timestamp", charactersString));
582 break; 599 break;
583 } 600 }
584 default: 601 default:
585 break; 602 break;
586 } 603 }
587 } 604 }
588 605
589 void VTTParser::skipWhiteSpace(const String& line, unsigned* position) 606 void VTTParser::skipWhiteSpace(const String& line, unsigned* position)
590 { 607 {
591 while (*position < line.length() && isASpace(line[*position])) 608 while (*position < line.length() && isASpace(line[*position]))
592 (*position)++; 609 (*position)++;
593 } 610 }
594 611
595 } 612 }
596 613
OLDNEW
« no previous file with comments | « LayoutTests/media/track/opera/track/webvtt/parsing-cue-data/tests/tree-building-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698