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
;