Title: [135993] trunk/Source/WebCore
Revision
135993
Author
[email protected]
Date
2012-11-28 03:33:28 -0800 (Wed, 28 Nov 2012)

Log Message

[V8] Crash wrapping media element when MediaPlayer isn't available
https://bugs.webkit.org/show_bug.cgi?id=103431

Patch by Dan Carney <[email protected]> on 2012-11-28
Reviewed by Kentaro Hara.

Call HTMLElement::createWrapper directly when dispatching a
disabled MediaElement wrap.

No new tests. Testing this must apparently be manual.

* bindings/scripts/CodeGeneratorV8.pm:
(GenerateHeader):
* dom/make_names.pl:
(printWrapperFunctions):
(printWrapperFactoryHeaderFile):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (135992 => 135993)


--- trunk/Source/WebCore/ChangeLog	2012-11-28 11:31:47 UTC (rev 135992)
+++ trunk/Source/WebCore/ChangeLog	2012-11-28 11:33:28 UTC (rev 135993)
@@ -1,3 +1,21 @@
+2012-11-28  Dan Carney  <[email protected]>
+
+        [V8] Crash wrapping media element when MediaPlayer isn't available
+        https://bugs.webkit.org/show_bug.cgi?id=103431
+
+        Reviewed by Kentaro Hara.
+
+        Call HTMLElement::createWrapper directly when dispatching a
+        disabled MediaElement wrap.
+
+        No new tests. Testing this must apparently be manual.
+
+        * bindings/scripts/CodeGeneratorV8.pm:
+        (GenerateHeader):
+        * dom/make_names.pl:
+        (printWrapperFunctions):
+        (printWrapperFactoryHeaderFile):
+
 2012-11-28  Roger Fong  <[email protected]>
 
         Initialize identity matrix in SimpleFontData::initGDIFont() properly.

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm (135992 => 135993)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm	2012-11-28 11:31:47 UTC (rev 135992)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm	2012-11-28 11:33:28 UTC (rev 135993)
@@ -478,11 +478,18 @@
     if ($interfaceName eq "HTMLElement") {
         push(@headerContent, <<END);
     friend v8::Handle<v8::Object> createV8HTMLWrapper(HTMLElement*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
+    friend v8::Handle<v8::Object> createV8HTMLDirectWrapper(HTMLElement*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
 END
     } elsif ($interfaceName eq "SVGElement") {
         push(@headerContent, <<END);
     friend v8::Handle<v8::Object> createV8SVGWrapper(SVGElement*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
+    friend v8::Handle<v8::Object> createV8SVGDirectWrapper(SVGElement*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
+    friend v8::Handle<v8::Object> createV8SVGFallbackWrapper(SVGElement*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
 END
+    } elsif ($interfaceName eq "HTMLUnknownElement") {
+        push(@headerContent, <<END);
+    friend v8::Handle<v8::Object> createV8HTMLFallbackWrapper(HTMLUnknownElement*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
+END
     } elsif ($interfaceName eq "Element") {
         push(@headerContent, <<END);
     // This is a performance optimization hack. See V8Element::wrap.

Modified: trunk/Source/WebCore/dom/make_names.pl (135992 => 135993)


--- trunk/Source/WebCore/dom/make_names.pl	2012-11-28 11:31:47 UTC (rev 135992)
+++ trunk/Source/WebCore/dom/make_names.pl	2012-11-28 11:33:28 UTC (rev 135993)
@@ -1070,7 +1070,7 @@
 {
     Settings* settings = element->document()->settings();
     if (!MediaPlayer::isAvailable() || (settings && !settings->isMediaEnabled()))
-        return wrap(element, creationContext, isolate);
+        return createV8$parameters{namespace}DirectWrapper(element, creationContext, isolate);
     return wrap(static_cast<${JSInterfaceName}*>(element), creationContext, isolate);
 }
 
@@ -1082,7 +1082,7 @@
 static v8::Handle<v8::Object> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
 {
     if (!ContextFeatures::${contextConditional}Enabled(element->document()))
-        return wrap(to$parameters{fallbackInterfaceName}(element), creationContext, isolate);
+        return createV8$parameters{namespace}FallbackWrapper(to$parameters{fallbackInterfaceName}(element), creationContext, isolate);
     return wrap(static_cast<${JSInterfaceName}*>(element), creationContext, isolate);
 }
 END
@@ -1093,7 +1093,7 @@
 static v8::Handle<v8::Object> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
 {
     if (!RuntimeEnabledFeatures::${runtimeConditional}Enabled())
-        return wrap(to$parameters{fallbackInterfaceName}(element), creationContext, isolate);
+        return createV8$parameters{namespace}FallbackWrapper(to$parameters{fallbackInterfaceName}(element), creationContext, isolate);
     return wrap(static_cast<${JSInterfaceName}*>(element), creationContext, isolate);
 }
 END
@@ -1331,6 +1331,8 @@
 ;
     } elsif ($wrapperFactoryType eq "V8") {
         print F <<END
+#include <V8$parameters{namespace}Element.h>
+#include <V8$parameters{fallbackInterfaceName}.h>
 #include <v8.h>
 
 namespace WebCore {
@@ -1338,6 +1340,14 @@
     class $parameters{namespace}Element;
 
     v8::Handle<v8::Object> createV8$parameters{namespace}Wrapper($parameters{namespace}Element*, v8::Handle<v8::Object> creationContext, v8::Isolate*);
+    inline v8::Handle<v8::Object> createV8$parameters{namespace}DirectWrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+    {
+        return V8$parameters{namespace}Element::createWrapper(element, creationContext, isolate);
+    }
+    inline v8::Handle<v8::Object> createV8$parameters{namespace}FallbackWrapper($parameters{fallbackInterfaceName}* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+    {
+        return V8$parameters{fallbackInterfaceName}::createWrapper(element, creationContext, isolate);
+    }
 }
 END
 ;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to