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();