Title: [113754] trunk/Source/WebCore
- Revision
- 113754
- Author
- ad...@chromium.org
- Date
- 2012-04-10 12:41:41 -0700 (Tue, 10 Apr 2012)
Log Message
Add setJSWrapperForActiveDOMNode and use it for Nodes that are also ActiveDOMObjects
https://bugs.webkit.org/show_bug.cgi?id=83528
Reviewed by Kentaro Hara.
Instead of using a run-time call to isActiveNode to determine which
map to put a Node wrapper in, generate the proper call in the CodeGenerator.
This was originally part of r112318, which got rolled out due to OOM concerns.
I'm splitting it into smaller pieces so that each can be landed and
watched for issues seperately.
No new tests, no change in behavior.
* bindings/scripts/CodeGeneratorV8.pm:
(GenerateConstructorCallback): Use new GetDomMapName function to
figure out which setJSWrapper to call.
(GenerateNamedConstructorCallback): ditto.
(GetDomMapFunction): Delegate to GetDomMapName for logic.
(GetDomMapName): New helper factored out of GetDomMapFunction.
* bindings/v8/V8DOMWrapper.cpp:
(WebCore::V8DOMWrapper::setJSWrapperForDOMNode): Assert !isActiveNode instead of branching on it.
(WebCore::V8DOMWrapper::setJSWrapperForActiveDOMNode): New method split ouf of the above.
Assert isActiveNode instead of branching on it.
* bindings/v8/V8DOMWrapper.h:
(V8DOMWrapper):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (113753 => 113754)
--- trunk/Source/WebCore/ChangeLog 2012-04-10 19:36:14 UTC (rev 113753)
+++ trunk/Source/WebCore/ChangeLog 2012-04-10 19:41:41 UTC (rev 113754)
@@ -1,3 +1,32 @@
+2012-04-10 Adam Klein <ad...@chromium.org>
+
+ Add setJSWrapperForActiveDOMNode and use it for Nodes that are also ActiveDOMObjects
+ https://bugs.webkit.org/show_bug.cgi?id=83528
+
+ Reviewed by Kentaro Hara.
+
+ Instead of using a run-time call to isActiveNode to determine which
+ map to put a Node wrapper in, generate the proper call in the CodeGenerator.
+
+ This was originally part of r112318, which got rolled out due to OOM concerns.
+ I'm splitting it into smaller pieces so that each can be landed and
+ watched for issues seperately.
+
+ No new tests, no change in behavior.
+
+ * bindings/scripts/CodeGeneratorV8.pm:
+ (GenerateConstructorCallback): Use new GetDomMapName function to
+ figure out which setJSWrapper to call.
+ (GenerateNamedConstructorCallback): ditto.
+ (GetDomMapFunction): Delegate to GetDomMapName for logic.
+ (GetDomMapName): New helper factored out of GetDomMapFunction.
+ * bindings/v8/V8DOMWrapper.cpp:
+ (WebCore::V8DOMWrapper::setJSWrapperForDOMNode): Assert !isActiveNode instead of branching on it.
+ (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMNode): New method split ouf of the above.
+ Assert isActiveNode instead of branching on it.
+ * bindings/v8/V8DOMWrapper.h:
+ (V8DOMWrapper):
+
2012-04-10 Luke Macpherson <macpher...@chromium.org>
Pass PropertyHandler by reference in CSSStyleApplyProperty.h.
Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm (113753 => 113754)
--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm 2012-04-10 19:36:14 UTC (rev 113753)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm 2012-04-10 19:41:41 UTC (rev 113754)
@@ -1752,13 +1752,7 @@
push(@implContent, " goto fail;\n");
}
- my $DOMObject = "DOMObject";
- if (IsNodeSubType($dataNode)) {
- $DOMObject = "DOMNode";
- } elsif ($dataNode->extendedAttributes->{"ActiveDOMObject"}) {
- $DOMObject = "ActiveDOMObject";
- }
-
+ my $DOMObject = GetDomMapName($dataNode, $implClassName);
push(@implContent, <<END);
V8DOMWrapper::setDOMWrapper(wrapper, &info, impl.get());
@@ -1932,14 +1926,7 @@
push(@implContent, " goto fail;\n");
}
- my $DOMObject = "DOMObject";
- # A DOMObject that is an ActiveDOMObject and also a DOMNode should be treated as an DOMNode here.
- # setJSWrapperForDOMNode() will look if node is active and choose correct map to add node to.
- if (IsNodeSubType($dataNode)) {
- $DOMObject = "DOMNode";
- } elsif ($dataNode->extendedAttributes->{"ActiveDOMObject"}) {
- $DOMObject = "ActiveDOMObject";
- }
+ my $DOMObject = GetDomMapName($dataNode, $implClassName);
push(@implContent, <<END);
V8DOMWrapper::setDOMWrapper(wrapper, &V8${implClassName}Constructor::info, impl.get());
@@ -3190,13 +3177,19 @@
sub GetDomMapFunction
{
+ return "get" . GetDomMapName(@_) . "Map()";
+}
+
+sub GetDomMapName
+{
my $dataNode = shift;
my $type = shift;
- return "getDOMSVGElementInstanceMap()" if $type eq "SVGElementInstance";
- return "getActiveDOMNodeMap()" if (IsNodeSubType($dataNode) && $dataNode->extendedAttributes->{"ActiveDOMObject"});
- return "getDOMNodeMap()" if (IsNodeSubType($dataNode));
- return "getActiveDOMObjectMap()" if $dataNode->extendedAttributes->{"ActiveDOMObject"};
- return "getDOMObjectMap()";
+
+ return "DOMSVGElementInstance" if $type eq "SVGElementInstance";
+ return "ActiveDOMNode" if (IsNodeSubType($dataNode) && $dataNode->extendedAttributes->{"ActiveDOMObject"});
+ return "DOMNode" if IsNodeSubType($dataNode);
+ return "ActiveDOMObject" if $dataNode->extendedAttributes->{"ActiveDOMObject"};
+ return "DOMObject";
}
sub GetNativeTypeForConversions
Modified: trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp (113753 => 113754)
--- trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp 2012-04-10 19:36:14 UTC (rev 113753)
+++ trunk/Source/WebCore/bindings/v8/V8DOMWrapper.cpp 2012-04-10 19:41:41 UTC (rev 113754)
@@ -72,12 +72,17 @@
void V8DOMWrapper::setJSWrapperForDOMNode(PassRefPtr<Node> node, v8::Persistent<v8::Object> wrapper)
{
ASSERT(maybeDOMWrapper(wrapper));
- if (node->isActiveNode())
- getActiveDOMNodeMap().set(node.leakRef(), wrapper);
- else
- getDOMNodeMap().set(node.leakRef(), wrapper);
+ ASSERT(!node->isActiveNode());
+ getDOMNodeMap().set(node.leakRef(), wrapper);
}
+void V8DOMWrapper::setJSWrapperForActiveDOMNode(PassRefPtr<Node> node, v8::Persistent<v8::Object> wrapper)
+{
+ ASSERT(maybeDOMWrapper(wrapper));
+ ASSERT(node->isActiveNode());
+ getActiveDOMNodeMap().set(node.leakRef(), wrapper);
+}
+
v8::Local<v8::Function> V8DOMWrapper::constructorForType(WrapperTypeInfo* type, DOMWindow* window)
{
Frame* frame = window->frame();
Modified: trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h (113753 => 113754)
--- trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h 2012-04-10 19:36:14 UTC (rev 113753)
+++ trunk/Source/WebCore/bindings/v8/V8DOMWrapper.h 2012-04-10 19:41:41 UTC (rev 113754)
@@ -109,6 +109,7 @@
template<typename T> static void setJSWrapperForDOMObject(PassRefPtr<T>, v8::Persistent<v8::Object>);
template<typename T> static void setJSWrapperForActiveDOMObject(PassRefPtr<T>, v8::Persistent<v8::Object>);
static void setJSWrapperForDOMNode(PassRefPtr<Node>, v8::Persistent<v8::Object>);
+ static void setJSWrapperForActiveDOMNode(PassRefPtr<Node>, v8::Persistent<v8::Object>);
static bool isValidDOMObject(v8::Handle<v8::Value>);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes