Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: Source/bindings/scripts/code_generator_v8.pm

Issue 85263006: Make IDL Callbacks non-refcounted by default (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Patch for landing Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/bindings/tests/results/V8TestCallback.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> 1 # Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
2 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> 2 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com>
3 # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> 3 # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
4 # Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org> 4 # Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org>
5 # Copyright (C) 2006 Apple Computer, Inc. 5 # Copyright (C) 2006 Apple Computer, Inc.
6 # Copyright (C) 2007, 2008, 2009, 2012 Google Inc. 6 # Copyright (C) 2007, 2008, 2009, 2012 Google Inc.
7 # Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> 7 # Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
8 # Copyright (C) Research In Motion Limited 2010. All rights reserved. 8 # Copyright (C) Research In Motion Limited 2010. All rights reserved.
9 # Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 # Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 # Copyright (C) 2012 Ericsson AB. All rights reserved. 10 # Copyright (C) 2012 Ericsson AB. All rights reserved.
(...skipping 2539 matching lines...) Expand 10 before | Expand all | Expand 10 after
2550 $parameterCheckString .= <<END; 2550 $parameterCheckString .= <<END;
2551 return; 2551 return;
2552 } 2552 }
2553 END 2553 END
2554 } 2554 }
2555 2555
2556 my $parameterName = $parameter->name; 2556 my $parameterName = $parameter->name;
2557 AddToImplIncludes("bindings/v8/ExceptionMessages.h"); 2557 AddToImplIncludes("bindings/v8/ExceptionMessages.h");
2558 AddToImplIncludes("bindings/v8/ExceptionState.h"); 2558 AddToImplIncludes("bindings/v8/ExceptionState.h");
2559 if (IsCallbackInterface($parameter->type)) { 2559 if (IsCallbackInterface($parameter->type)) {
2560 my $ptrType = IsLegacyRefCountedCallback($parameter->type) ? "Ref" : "Own";
2560 my $v8ClassName = "V8" . $parameter->type; 2561 my $v8ClassName = "V8" . $parameter->type;
2561 AddToImplIncludes("$v8ClassName.h"); 2562 AddToImplIncludes("$v8ClassName.h");
2562 if ($parameter->isOptional) { 2563 if ($parameter->isOptional) {
2563 $parameterCheckString .= " RefPtr<" . $parameter->type . "> $ parameterName;\n"; 2564 $parameterCheckString .= " ${ptrType}Ptr<" . $parameter->type . "> $parameterName;\n";
2564 $parameterCheckString .= " if (info.Length() > $paramIndex && !info[$paramIndex]->IsNull() && !info[$paramIndex]->IsUndefined()) {\n"; 2565 $parameterCheckString .= " if (info.Length() > $paramIndex && !info[$paramIndex]->IsNull() && !info[$paramIndex]->IsUndefined()) {\n";
2565 $parameterCheckString .= " if (!info[$paramIndex]->IsFunc tion()) {\n"; 2566 $parameterCheckString .= " if (!info[$paramIndex]->IsFunc tion()) {\n";
2566 $parameterCheckString .= " throwTypeError(ExceptionMe ssages::failedToExecute(\"$functionName\", \"$interfaceName\", \"The callback pr ovided as parameter $humanFriendlyIndex is not a function.\"), info.GetIsolate() );\n"; 2567 $parameterCheckString .= " throwTypeError(ExceptionMe ssages::failedToExecute(\"$functionName\", \"$interfaceName\", \"The callback pr ovided as parameter $humanFriendlyIndex is not a function.\"), info.GetIsolate() );\n";
2567 $parameterCheckString .= " return;\n"; 2568 $parameterCheckString .= " return;\n";
2568 $parameterCheckString .= " }\n"; 2569 $parameterCheckString .= " }\n";
2569 $parameterCheckString .= " $parameterName = ${v8ClassName }::create(info[$paramIndex], getExecutionContext());\n"; 2570 $parameterCheckString .= " $parameterName = ${v8ClassName }::create(info[$paramIndex], getExecutionContext());\n";
2570 $parameterCheckString .= " }\n"; 2571 $parameterCheckString .= " }\n";
2571 } else { 2572 } else {
2572 $parameterCheckString .= " if (info.Length() <= $paramIndex | | "; 2573 $parameterCheckString .= " if (info.Length() <= $paramIndex | | ";
2573 if ($parameter->isNullable) { 2574 if ($parameter->isNullable) {
2574 $parameterCheckString .= "!(info[$paramIndex]->IsFunction() || info[$paramIndex]->IsNull())"; 2575 $parameterCheckString .= "!(info[$paramIndex]->IsFunction() || info[$paramIndex]->IsNull())";
2575 } else { 2576 } else {
2576 $parameterCheckString .= "!info[$paramIndex]->IsFunction()"; 2577 $parameterCheckString .= "!info[$paramIndex]->IsFunction()";
2577 } 2578 }
2578 $parameterCheckString .= ") {\n"; 2579 $parameterCheckString .= ") {\n";
2579 $parameterCheckString .= " throwTypeError(ExceptionMessag es::failedToExecute(\"$functionName\", \"$interfaceName\", \"The callback provid ed as parameter $humanFriendlyIndex is not a function.\"), info.GetIsolate());\n "; 2580 $parameterCheckString .= " throwTypeError(ExceptionMessag es::failedToExecute(\"$functionName\", \"$interfaceName\", \"The callback provid ed as parameter $humanFriendlyIndex is not a function.\"), info.GetIsolate());\n ";
2580 $parameterCheckString .= " return;\n"; 2581 $parameterCheckString .= " return;\n";
2581 $parameterCheckString .= " }\n"; 2582 $parameterCheckString .= " }\n";
2582 $parameterCheckString .= " RefPtr<" . $parameter->type . "> $ parameterName = "; 2583 $parameterCheckString .= " ${ptrType}Ptr<" . $parameter->type . "> $parameterName = ";
2583 $parameterCheckString .= "info[$paramIndex]->IsNull() ? 0 : " if $parameter->isNullable; 2584 $parameterCheckString .= "info[$paramIndex]->IsNull() ? nullptr : " if $parameter->isNullable;
2584 $parameterCheckString .= "${v8ClassName}::create(info[$paramInde x], getExecutionContext());\n"; 2585 $parameterCheckString .= "${v8ClassName}::create(info[$paramInde x], getExecutionContext());\n";
2585 } 2586 }
2586 } elsif ($parameter->extendedAttributes->{"Clamp"}) { 2587 } elsif ($parameter->extendedAttributes->{"Clamp"}) {
2587 my $nativeValue = "${parameterName}NativeValue"; 2588 my $nativeValue = "${parameterName}NativeValue";
2588 my $idlType = $parameter->type; 2589 my $idlType = $parameter->type;
2589 $parameterCheckString .= " $nativeType $parameterName = 0;\n" ; 2590 $parameterCheckString .= " $nativeType $parameterName = 0;\n" ;
2590 $parameterCheckString .= " V8TRYCATCH_VOID(double, $nativeVal ue, info[$paramIndex]->NumberValue());\n"; 2591 $parameterCheckString .= " V8TRYCATCH_VOID(double, $nativeVal ue, info[$paramIndex]->NumberValue());\n";
2591 $parameterCheckString .= " if (!std::isnan($nativeValue))\n"; 2592 $parameterCheckString .= " if (!std::isnan($nativeValue))\n";
2592 $parameterCheckString .= " $parameterName = clampTo<$idlT ype>($nativeValue);\n"; 2593 $parameterCheckString .= " $parameterName = clampTo<$idlT ype>($nativeValue);\n";
2593 } elsif ($parameter->type eq "SerializedScriptValue") { 2594 } elsif ($parameter->type eq "SerializedScriptValue") {
(...skipping 2181 matching lines...) Expand 10 before | Expand all | Expand 10 after
4775 } 4776 }
4776 4777
4777 sub GenerateCallbackHeader 4778 sub GenerateCallbackHeader
4778 { 4779 {
4779 my $object = shift; 4780 my $object = shift;
4780 my $interface = shift; 4781 my $interface = shift;
4781 4782
4782 my $interfaceName = $interface->name; 4783 my $interfaceName = $interface->name;
4783 my $implClassName = GetImplName($interface); 4784 my $implClassName = GetImplName($interface);
4784 my $v8ClassName = GetV8ClassName($interface); 4785 my $v8ClassName = GetV8ClassName($interface);
4786 my $refCounted = IsLegacyRefCountedCallback($interfaceName);
4787 my $ptrType = $refCounted ? "Ref" : "Own";
4788 my $adoptType = $refCounted ? "Ref" : "Ptr";
4785 4789
4786 my @includes = (); 4790 my @includes = ();
4787 push(@includes, "bindings/v8/ActiveDOMCallback.h"); 4791 push(@includes, "bindings/v8/ActiveDOMCallback.h");
4788 push(@includes, "bindings/v8/DOMWrapperWorld.h"); 4792 push(@includes, "bindings/v8/DOMWrapperWorld.h");
4789 push(@includes, "bindings/v8/ScopedPersistent.h"); 4793 push(@includes, "bindings/v8/ScopedPersistent.h");
4790 push(@includes, HeaderFilesForInterface($interfaceName, $implClassName)); 4794 push(@includes, HeaderFilesForInterface($interfaceName, $implClassName));
4791 for my $include (sort @includes) { 4795 for my $include (sort @includes) {
4792 $header{includes}->add("#include \"$include\"\n"); 4796 $header{includes}->add("#include \"$include\"\n");
4793 } 4797 }
4794 $header{nameSpaceWebCore}->addHeader("\nclass ExecutionContext;\n"); 4798 $header{nameSpaceWebCore}->addHeader("\nclass ExecutionContext;\n");
4795 $header{class}->addHeader("class $v8ClassName : public $implClassName, publi c ActiveDOMCallback {"); 4799 $header{class}->addHeader("class $v8ClassName : public $implClassName, publi c ActiveDOMCallback {");
4796 $header{class}->addFooter("};\n"); 4800 $header{class}->addFooter("};\n");
4797 4801
4798 $header{classPublic}->add(<<END); 4802 $header{classPublic}->add(<<END);
4799 static PassRefPtr<${v8ClassName}> create(v8::Handle<v8::Value> jsValue, Exec utionContext* context) 4803 static Pass${ptrType}Ptr<${v8ClassName}> create(v8::Handle<v8::Value> jsValu e, ExecutionContext* context)
4800 { 4804 {
4801 ASSERT(jsValue->IsObject()); 4805 ASSERT(jsValue->IsObject());
4802 ASSERT(context); 4806 ASSERT(context);
4803 return adoptRef(new ${v8ClassName}(v8::Handle<v8::Object>::Cast(jsValue) , context)); 4807 return adopt${adoptType}(new ${v8ClassName}(v8::Handle<v8::Object>::Cast (jsValue), context));
4804 } 4808 }
4805 4809
4806 virtual ~${v8ClassName}(); 4810 virtual ~${v8ClassName}();
4807 4811
4808 END 4812 END
4809 4813
4810 # Functions 4814 # Functions
4811 my $numFunctions = @{$interface->functions}; 4815 my $numFunctions = @{$interface->functions};
4812 if ($numFunctions > 0) { 4816 if ($numFunctions > 0) {
4813 foreach my $function (@{$interface->functions}) { 4817 foreach my $function (@{$interface->functions}) {
(...skipping 1535 matching lines...) Expand 10 before | Expand all | Expand 10 after
6349 my $interface = shift; 6353 my $interface = shift;
6350 6354
6351 return 1 if $interface->extendedAttributes->{"CustomToV8"}; 6355 return 1 if $interface->extendedAttributes->{"CustomToV8"};
6352 return 1 if $interface->extendedAttributes->{"CustomWrap"}; 6356 return 1 if $interface->extendedAttributes->{"CustomWrap"};
6353 return 1 if $interface->extendedAttributes->{"SpecialWrapFor"}; 6357 return 1 if $interface->extendedAttributes->{"SpecialWrapFor"};
6354 return 1 if InheritsInterface($interface, "Document"); 6358 return 1 if InheritsInterface($interface, "Document");
6355 6359
6356 return 0; 6360 return 0;
6357 } 6361 }
6358 6362
6363 # FIXME: This list should go away entirely, see http://crbug.com/323681
6364 sub IsLegacyRefCountedCallback
6365 {
6366 my $name = shift;
6367 # WebSQL
6368 return 1 if $name eq "DatabaseCallback";
6369 return 1 if $name eq "SQLTransactionCallback";
6370 return 1 if $name eq "SQLTransactionErrorCallback";
6371 return 1 if $name eq "SQLTransactionSyncCallback";
6372 return 1 if $name eq "SQLStatementCallback";
6373 return 1 if $name eq "SQLStatementErrorCallback";
6374 # Filesystem
6375 return 1 if $name eq "EntryCallback";
6376 return 1 if $name eq "EntriesCallback";
6377 return 1 if $name eq "ErrorCallback";
6378 return 1 if $name eq "FileCallback";
6379 return 1 if $name eq "FileSystemCallback";
6380 return 1 if $name eq "FileWriterCallback";
6381 return 1 if $name eq "MetadataCallback";
6382 # requestAnimationFrame
6383 return 1 if $name eq "RequestAnimationFrameCallback";
6384 # Used everywhere
6385 return 1 if $name eq "VoidCallback";
6386 return 0;
6387 }
6388
6359 1; 6389 1;
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/tests/results/V8TestCallback.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698