Use HTMLElementFactory to create equivalent elements in WebVTTElement.
This change forces the calls through the factory so that we create
appropriate sub-classes based upon the passed tag name, rather than
just creating a concrete HTMLElement class with an inappropriate tag
name.
BUG=243881
R=inferno@chromium.org, vcarbune@chromium.org
Review URL: https://codereview.chromium.org/16019013
Patch from Tom Sepez <tsepez@chromium.org>.
git-svn-id: svn://svn.chromium.org/blink/trunk@151287 bbb929c8-8fbe-4397-9dbb-9b2b20218538
diff --git a/LayoutTests/media/track/opera/interfaces/TextTrackCue/getCueAsHTMLCrash-expected.txt b/LayoutTests/media/track/opera/interfaces/TextTrackCue/getCueAsHTMLCrash-expected.txt
new file mode 100644
index 0000000..bc7f57d
--- /dev/null
+++ b/LayoutTests/media/track/opera/interfaces/TextTrackCue/getCueAsHTMLCrash-expected.txt
@@ -0,0 +1 @@
+Test passes if it does not induce a crash.
diff --git a/LayoutTests/media/track/opera/interfaces/TextTrackCue/getCueAsHTMLCrash.html b/LayoutTests/media/track/opera/interfaces/TextTrackCue/getCueAsHTMLCrash.html
new file mode 100644
index 0000000..09492f3
--- /dev/null
+++ b/LayoutTests/media/track/opera/interfaces/TextTrackCue/getCueAsHTMLCrash.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<div>Test passes if it does not induce a crash.</div>
+<script src=../../../../../resources/testharness.js></script>
+<script>
+if (window.testRunner)
+ testRunner.dumpAsText();
+
+test(function(){
+ var c1 = new TextTrackCue(0, 1, '<c>x\0');
+ window.frag = c1.getCueAsHTML();
+}, document.title+', creating the cue');
+
+test(function(){
+ assert_false(frag.childNodes[0].hasChildNodes(), 'hasChildNodes()');
+}, document.title+', >');
+
+test(function(){}, document.title+', ');
+test(function(){}, document.title+', x\\0');
+</script>
+</html>
diff --git a/Source/core/html/track/WebVTTElement.cpp b/Source/core/html/track/WebVTTElement.cpp
index b2f9adb..009aaa7 100644
--- a/Source/core/html/track/WebVTTElement.cpp
+++ b/Source/core/html/track/WebVTTElement.cpp
@@ -24,9 +24,10 @@
*/
#include "config.h"
-
#include "core/html/track/WebVTTElement.h"
+#include "HTMLElementFactory.h"
+
namespace WebCore {
static const QualifiedName& nodeTypeToTagName(WebVTTNodeType nodeType)
@@ -89,24 +90,24 @@
case WebVTTNodeTypeClass:
case WebVTTNodeTypeLanguage:
case WebVTTNodeTypeVoice:
- htmlElement = HTMLElement::create(HTMLNames::spanTag, document);
+ htmlElement = HTMLElementFactory::createHTMLElement(HTMLNames::spanTag, document);
htmlElement.get()->setAttribute(HTMLNames::titleAttr, getAttribute(voiceAttributeName()));
htmlElement.get()->setAttribute(HTMLNames::langAttr, getAttribute(langAttributeName()));
break;
case WebVTTNodeTypeItalic:
- htmlElement = HTMLElement::create(HTMLNames::iTag, document);
+ htmlElement = HTMLElementFactory::createHTMLElement(HTMLNames::iTag, document);
break;
case WebVTTNodeTypeBold:
- htmlElement = HTMLElement::create(HTMLNames::bTag, document);
+ htmlElement = HTMLElementFactory::createHTMLElement(HTMLNames::bTag, document);
break;
case WebVTTNodeTypeUnderline:
- htmlElement = HTMLElement::create(HTMLNames::uTag, document);
+ htmlElement = HTMLElementFactory::createHTMLElement(HTMLNames::uTag, document);
break;
case WebVTTNodeTypeRuby:
- htmlElement = HTMLElement::create(HTMLNames::rubyTag, document);
+ htmlElement = HTMLElementFactory::createHTMLElement(HTMLNames::rubyTag, document);
break;
case WebVTTNodeTypeRubyText:
- htmlElement = HTMLElement::create(HTMLNames::rtTag, document);
+ htmlElement = HTMLElementFactory::createHTMLElement(HTMLNames::rtTag, document);
break;
default:
ASSERT_NOT_REACHED();