| OLD | NEW |
| 1 | 1 |
| 2 # Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> | 2 # Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> |
| 3 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> | 3 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> |
| 4 # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> | 4 # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> |
| 5 # Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org> | 5 # Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org> |
| 6 # Copyright (C) 2006 Apple Computer, Inc. | 6 # Copyright (C) 2006 Apple Computer, Inc. |
| 7 # Copyright (C) 2007 Google Inc. | 7 # Copyright (C) 2007 Google Inc. |
| 8 # | 8 # |
| 9 # This file is part of the KDE project | 9 # This file is part of the KDE project |
| 10 # | 10 # |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 my $module = ""; | 31 my $module = ""; |
| 32 my $outputDir = ""; | 32 my $outputDir = ""; |
| 33 | 33 |
| 34 my @headerContent = (); | 34 my @headerContent = (); |
| 35 my @implContentHeader = (); | 35 my @implContentHeader = (); |
| 36 my @implFixedHeader = (); | 36 my @implFixedHeader = (); |
| 37 my @implContent = (); | 37 my @implContent = (); |
| 38 my @implContentDecls = (); | 38 my @implContentDecls = (); |
| 39 my %implIncludes = (); | 39 my %implIncludes = (); |
| 40 | 40 |
| 41 my @allParents = (); |
| 42 |
| 41 # Default .h template | 43 # Default .h template |
| 42 my $headerTemplate = << "EOF"; | 44 my $headerTemplate = << "EOF"; |
| 43 /* | 45 /* |
| 44 This file is part of the WebKit open source project. | 46 This file is part of the WebKit open source project. |
| 45 This file has been generated by generate-bindings.pl. DO NOT MODIFY! | 47 This file has been generated by generate-bindings.pl. DO NOT MODIFY! |
| 46 | 48 |
| 47 This library is free software; you can redistribute it and/or | 49 This library is free software; you can redistribute it and/or |
| 48 modify it under the terms of the GNU Library General Public | 50 modify it under the terms of the GNU Library General Public |
| 49 License as published by the Free Software Foundation; either | 51 License as published by the Free Software Foundation; either |
| 50 version 2 of the License, or (at your option) any later version. | 52 version 2 of the License, or (at your option) any later version. |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 my $result = ""; | 305 my $result = ""; |
| 304 | 306 |
| 305 $result .= $indent . "if (ec != 0) {\n"; | 307 $result .= $indent . "if (ec != 0) {\n"; |
| 306 $result .= $indent . " V8Proxy::SetDOMException(ec);\n"; | 308 $result .= $indent . " V8Proxy::SetDOMException(ec);\n"; |
| 307 $result .= $indent . " return v8::Handle<v8::Value>();\n"; | 309 $result .= $indent . " return v8::Handle<v8::Value>();\n"; |
| 308 $result .= $indent . "}\n"; | 310 $result .= $indent . "}\n"; |
| 309 | 311 |
| 310 return $result; | 312 return $result; |
| 311 } | 313 } |
| 312 | 314 |
| 315 sub IsNodeSubType |
| 316 { |
| 317 my $dataNode = shift; |
| 318 return 1 if ($dataNode->name eq "Node"); |
| 319 foreach (@allParents) { |
| 320 my $parent = $codeGenerator->StripModule($_); |
| 321 return 1 if $parent eq "Node"; |
| 322 } |
| 323 return 0; |
| 324 } |
| 325 |
| 326 sub HolderToNative |
| 327 { |
| 328 my $dataNode = shift; |
| 329 my $implClassName = shift; |
| 330 my $classIndex = shift; |
| 331 |
| 332 if (IsNodeSubType($dataNode)) { |
| 333 push(@implContentDecls, <<END); |
| 334 $implClassName* imp = V8Proxy::DOMWrapperToNode<$implClassName>(holder); |
| 335 END |
| 336 |
| 337 } else { |
| 338 push(@implContentDecls, <<END); |
| 339 $implClassName* imp = V8Proxy::ToNativeObject<$implClassName>(V8ClassIndex::
$classIndex, holder); |
| 340 END |
| 341 |
| 342 } |
| 343 } |
| 313 | 344 |
| 314 sub GenerateDomainSafeFunctionGetter | 345 sub GenerateDomainSafeFunctionGetter |
| 315 { | 346 { |
| 316 my $function = shift; | 347 my $function = shift; |
| 317 my $dataNode = shift; | 348 my $dataNode = shift; |
| 318 my $classIndex = shift; | 349 my $classIndex = shift; |
| 319 my $implClassName = shift; | 350 my $implClassName = shift; |
| 320 | 351 |
| 321 my $className = "V8" . $dataNode->name; | 352 my $className = "V8" . $dataNode->name; |
| 322 my $funcName = $function->signature->name; | 353 my $funcName = $function->signature->name; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 335 INC_STATS(L\"DOM.$implClassName.$funcName._get\"); | 366 INC_STATS(L\"DOM.$implClassName.$funcName._get\"); |
| 336 static v8::Persistent<v8::FunctionTemplate> private_template = | 367 static v8::Persistent<v8::FunctionTemplate> private_template = |
| 337 v8::Persistent<v8::FunctionTemplate>::New($newTemplateString); | 368 v8::Persistent<v8::FunctionTemplate>::New($newTemplateString); |
| 338 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::$cla
ssIndex, info.This()); | 369 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::$cla
ssIndex, info.This()); |
| 339 if (holder.IsEmpty()) { | 370 if (holder.IsEmpty()) { |
| 340 // can only reach here by 'object.__proto__.func', and it should passed | 371 // can only reach here by 'object.__proto__.func', and it should passed |
| 341 // domain security check already | 372 // domain security check already |
| 342 | 373 |
| 343 return private_template->GetFunction(); | 374 return private_template->GetFunction(); |
| 344 } | 375 } |
| 376 END |
| 345 | 377 |
| 346 $implClassName* imp = V8Proxy::FastToNativeObject<$implClassName>(V8ClassInd
ex::$classIndex, holder); | 378 HolderToNative($dataNode, $implClassName, $classIndex); |
| 379 |
| 380 push(@implContentDecls, <<END); |
| 347 if (!V8Proxy::IsFromSameOrigin(imp->frame(), false)) { | 381 if (!V8Proxy::IsFromSameOrigin(imp->frame(), false)) { |
| 348 static v8::Persistent<v8::FunctionTemplate> shared_template = | 382 static v8::Persistent<v8::FunctionTemplate> shared_template = |
| 349 v8::Persistent<v8::FunctionTemplate>::New($newTemplateString); | 383 v8::Persistent<v8::FunctionTemplate>::New($newTemplateString); |
| 350 return shared_template->GetFunction(); | 384 return shared_template->GetFunction(); |
| 351 | 385 |
| 352 } else { | 386 } else { |
| 353 return private_template->GetFunction(); | 387 return private_template->GetFunction(); |
| 354 } | 388 } |
| 355 } | 389 } |
| 356 | 390 |
| 357 | |
| 358 END | 391 END |
| 359 } | 392 } |
| 360 | 393 |
| 361 sub GenerateConstructorGetter | 394 sub GenerateConstructorGetter |
| 362 { | 395 { |
| 363 my $implClassName = shift; | 396 my $implClassName = shift; |
| 364 | 397 |
| 365 push(@implContentDecls, <<END); | 398 push(@implContentDecls, <<END); |
| 366 static v8::Handle<v8::Value> ${implClassName}ConstructorGetter(v8::Local<v8::S
tring> name, const v8::AccessorInfo& info) { | 399 static v8::Handle<v8::Value> ${implClassName}ConstructorGetter(v8::Local<v8::S
tring> name, const v8::AccessorInfo& info) { |
| 367 INC_STATS(L\"DOM.$implClassName.constructors._get\"); | 400 INC_STATS(L\"DOM.$implClassName.constructors._get\"); |
| 368 v8::Handle<v8::Value> data = info.Data(); | 401 v8::Handle<v8::Value> data = info.Data(); |
| 369 ASSERT(data->IsNumber()); | 402 ASSERT(data->IsNumber()); |
| 370 | 403 |
| 371 V8ClassIndex::V8WrapperType type = V8ClassIndex::FromInt(data->Int32Value())
; | 404 V8ClassIndex::V8WrapperType type = V8ClassIndex::FromInt(data->Int32Value())
; |
| 372 | 405 |
| 373 v8::Handle<v8::FunctionTemplate> desc = V8Proxy::GetTemplate(type); | 406 v8::Handle<v8::FunctionTemplate> desc = V8Proxy::GetTemplate(type); |
| 374 v8::Handle<v8::Function> func = desc->GetFunction(); | 407 v8::Handle<v8::Function> func = desc->GetFunction(); |
| 375 ASSERT(func->IsFunction()); | 408 ASSERT(func->IsFunction()); |
| 376 return func; | 409 return func; |
| 377 } | 410 } |
| 378 | 411 |
| 379 END | 412 END |
| 380 } | 413 } |
| 381 | 414 |
| 382 sub GenerateNormalAttrGetter | 415 sub GenerateNormalAttrGetter |
| 383 { | 416 { |
| 384 my $attribute = shift; | 417 my $attribute = shift; |
| 418 my $dataNode = shift; |
| 385 my $classIndex = shift; | 419 my $classIndex = shift; |
| 386 my $implClassName = shift; | 420 my $implClassName = shift; |
| 387 | 421 |
| 388 my $attrExt = $attribute->signature->extendedAttributes; | 422 my $attrExt = $attribute->signature->extendedAttributes; |
| 389 | 423 |
| 390 my $attrName = $attribute->signature->name; | 424 my $attrName = $attribute->signature->name; |
| 391 $implIncludes{"v8_proxy.h"} = 1; | 425 $implIncludes{"v8_proxy.h"} = 1; |
| 392 | 426 |
| 393 my $attrType = $codeGenerator->StripModule($attribute->signature->type); | 427 my $attrType = $codeGenerator->StripModule($attribute->signature->type); |
| 394 my $attrIsPodType = $codeGenerator->IsPodType($attrType); | 428 my $attrIsPodType = $codeGenerator->IsPodType($attrType); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 my $getterStringUsesImp = $implClassName ne "double"; | 462 my $getterStringUsesImp = $implClassName ne "double"; |
| 429 | 463 |
| 430 # Getter | 464 # Getter |
| 431 push(@implContentDecls, <<END); | 465 push(@implContentDecls, <<END); |
| 432 static v8::Handle<v8::Value> ${attrName}AttrGetter(v8::Local<v8::String> name,
const v8::AccessorInfo& info) { | 466 static v8::Handle<v8::Value> ${attrName}AttrGetter(v8::Local<v8::String> name,
const v8::AccessorInfo& info) { |
| 433 INC_STATS(L\"DOM.$implClassName.$attrName._get\"); | 467 INC_STATS(L\"DOM.$implClassName.$attrName._get\"); |
| 434 END | 468 END |
| 435 | 469 |
| 436 if ($isPodType) { | 470 if ($isPodType) { |
| 437 push(@implContentDecls, <<END); | 471 push(@implContentDecls, <<END); |
| 438 V8SVGPODTypeWrapper<$implClassName>* imp_wrapper = V8Proxy::FastToNativeObje
ct<V8SVGPODTypeWrapper<$implClassName> >(V8ClassIndex::$classIndex, info.Holder(
)); | 472 V8SVGPODTypeWrapper<$implClassName>* imp_wrapper = V8Proxy::ToNativeObject<V
8SVGPODTypeWrapper<$implClassName> >(V8ClassIndex::$classIndex, info.Holder()); |
| 439 $implClassName imp_instance = *imp_wrapper; | 473 $implClassName imp_instance = *imp_wrapper; |
| 440 END | 474 END |
| 441 if ($getterStringUsesImp) { | 475 if ($getterStringUsesImp) { |
| 442 push(@implContentDecls, <<END); | 476 push(@implContentDecls, <<END); |
| 443 $implClassName* imp = &imp_instance; | 477 $implClassName* imp = &imp_instance; |
| 444 END | 478 END |
| 445 } | 479 } |
| 446 | 480 |
| 447 } elsif ($attrExt->{"v8OnProto"}) { | 481 } elsif ($attrExt->{"v8OnProto"}) { |
| 448 # perform lookup first | 482 # perform lookup first |
| 449 push(@implContentDecls, <<END); | 483 push(@implContentDecls, <<END); |
| 450 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::$cla
ssIndex, info.This()); | 484 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::$cla
ssIndex, info.This()); |
| 451 if (holder.IsEmpty()) return v8::Undefined(); | 485 if (holder.IsEmpty()) return v8::Undefined(); |
| 452 | |
| 453 $implClassName* imp = V8Proxy::FastToNativeObject<$implClassName>(V8ClassInd
ex::$classIndex, holder); | |
| 454 END | 486 END |
| 455 | 487 HolderToNative($dataNode, $implClassName, $classIndex); |
| 456 } else { | 488 } else { |
| 457 push(@implContentDecls, " $implClassName* imp = V8Proxy::FastToNativeObje
ct<$implClassName>(V8ClassIndex::$classIndex, info.Holder());\n"); | 489 push(@implContentDecls, <<END); |
| 490 v8::Handle<v8::Object> holder = info.Holder(); |
| 491 END |
| 492 HolderToNative($dataNode, $implClassName, $classIndex); |
| 458 } | 493 } |
| 459 | 494 |
| 460 # Generate security checks if necessary | 495 # Generate security checks if necessary |
| 461 if ($attribute->signature->extendedAttributes->{"CheckNodeSecurity"}) { | 496 if ($attribute->signature->extendedAttributes->{"CheckNodeSecurity"}) { |
| 462 push(@implContentDecls, " if (!V8Proxy::CheckNodeSecurity(imp->$attrName(
))) return v8::Undefined();\n\n"); | 497 push(@implContentDecls, " if (!V8Proxy::CheckNodeSecurity(imp->$attrName(
))) return v8::Undefined();\n\n"); |
| 463 } elsif ($attribute->signature->extendedAttributes->{"CheckFrameSecurity"}) { | 498 } elsif ($attribute->signature->extendedAttributes->{"CheckFrameSecurity"}) { |
| 464 push(@implContentDecls, " if (!V8Proxy::CheckNodeSecurity(imp->contentDoc
ument())) return v8::Undefined();\n\n"); | 499 push(@implContentDecls, " if (!V8Proxy::CheckNodeSecurity(imp->contentDoc
ument())) return v8::Undefined();\n\n"); |
| 465 } | 500 } |
| 466 | 501 |
| 467 my $useExceptions = 1 if @{$attribute->getterExceptions} and !($isPodType); | 502 my $useExceptions = 1 if @{$attribute->getterExceptions} and !($isPodType); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 push(@implContentDecls, " v8::Local<v8::String> ${attrName}_string = v8::St
ring::New(\"${attrName}\");\n"); | 591 push(@implContentDecls, " v8::Local<v8::String> ${attrName}_string = v8::St
ring::New(\"${attrName}\");\n"); |
| 557 push(@implContentDecls, " info.Holder()->Delete(${attrName}_string);\n"); | 592 push(@implContentDecls, " info.Holder()->Delete(${attrName}_string);\n"); |
| 558 push(@implContentDecls, " info.This()->Set(${attrName}_string, value);\n"); | 593 push(@implContentDecls, " info.This()->Set(${attrName}_string, value);\n"); |
| 559 push(@implContentDecls, " }\n\n"); | 594 push(@implContentDecls, " }\n\n"); |
| 560 } | 595 } |
| 561 | 596 |
| 562 | 597 |
| 563 sub GenerateNormalAttrSetter | 598 sub GenerateNormalAttrSetter |
| 564 { | 599 { |
| 565 my $attribute = shift; | 600 my $attribute = shift; |
| 601 my $dataNode = shift; |
| 566 my $classIndex = shift; | 602 my $classIndex = shift; |
| 567 my $implClassName = shift; | 603 my $implClassName = shift; |
| 568 | 604 |
| 569 my $attrExt = $attribute->signature->extendedAttributes; | 605 my $attrExt = $attribute->signature->extendedAttributes; |
| 570 | 606 |
| 571 $implIncludes{"v8_proxy.h"} = 1; | 607 $implIncludes{"v8_proxy.h"} = 1; |
| 572 | 608 |
| 573 push(@implContentDecls, | 609 push(@implContentDecls, |
| 574 " static void ${attrName}AttrSetter(v8::Local<v8::String> name," . | 610 " static void ${attrName}AttrSetter(v8::Local<v8::String> name," . |
| 575 " v8::Local<v8::Value> value, const v8::AccessorInfo& info) {\n"); | 611 " v8::Local<v8::Value> value, const v8::AccessorInfo& info) {\n"); |
| 576 | 612 |
| 577 push(@implContentDecls, " INC_STATS(L\"DOM.$implClassName.$attrName._set\")
;\n"); | 613 push(@implContentDecls, " INC_STATS(L\"DOM.$implClassName.$attrName._set\")
;\n"); |
| 578 | 614 |
| 579 my $isPodType = $codeGenerator->IsPodType($implClassName); | 615 my $isPodType = $codeGenerator->IsPodType($implClassName); |
| 580 | 616 |
| 581 if ($isPodType) { | 617 if ($isPodType) { |
| 582 $implClassName = GetNativeType($implClassName); | 618 $implClassName = GetNativeType($implClassName); |
| 583 $implIncludes{"V8SVGPODTypeWrapper.h"} = 1; | 619 $implIncludes{"V8SVGPODTypeWrapper.h"} = 1; |
| 584 push(@implContentDecls, " V8SVGPODTypeWrapper<$implClassName>* wrapper =
V8Proxy::FastToNativeObject<V8SVGPODTypeWrapper<$implClassName> >(V8ClassIndex::
$classIndex, info.Holder());\n"); | 620 push(@implContentDecls, " V8SVGPODTypeWrapper<$implClassName>* wrapper =
V8Proxy::ToNativeObject<V8SVGPODTypeWrapper<$implClassName> >(V8ClassIndex::$cla
ssIndex, info.Holder());\n"); |
| 585 push(@implContentDecls, " $implClassName imp_instance = *wrapper;\n"); | 621 push(@implContentDecls, " $implClassName imp_instance = *wrapper;\n"); |
| 586 push(@implContentDecls, " $implClassName* imp = &imp_instance;\n"); | 622 push(@implContentDecls, " $implClassName* imp = &imp_instance;\n"); |
| 587 | 623 |
| 588 } elsif ($attrExt->{"v8OnProto"}) { | 624 } elsif ($attrExt->{"v8OnProto"}) { |
| 589 # perform lookup first | 625 # perform lookup first |
| 590 push(@implContentDecls, <<END); | 626 push(@implContentDecls, <<END); |
| 591 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::$cla
ssIndex, info.This()); | 627 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(V8ClassIndex::$cla
ssIndex, info.This()); |
| 592 if (holder.IsEmpty()) return v8::Undefined(); | 628 if (holder.IsEmpty()) return v8::Undefined(); |
| 593 | |
| 594 $implClassName* imp = V8Proxy::FastToNativeObject<$implClassName>(V8ClassInd
ex::$classIndex, holder); | |
| 595 END | 629 END |
| 596 | 630 HolderToNative($dataNode, $implClassName, $classIndex); |
| 597 } else { | 631 } else { |
| 598 push(@implContentDecls, " $implClassName* imp = V8Proxy::FastToNativeObje
ct<$implClassName>(V8ClassIndex::$classIndex, info.Holder());\n"); | 632 push(@implContentDecls, <<END); |
| 633 v8::Handle<v8::Object> holder = info.Holder(); |
| 634 END |
| 635 HolderToNative($dataNode, $implClassName, $classIndex); |
| 599 } | 636 } |
| 600 | 637 |
| 601 my $nativeType = GetNativeTypeFromSignature($attribute->signature, 0); | 638 my $nativeType = GetNativeTypeFromSignature($attribute->signature, 0); |
| 602 push(@implContentDecls, " $nativeType v = " . JSValueToNative($attribute->s
ignature, "value") . ";\n"); | 639 push(@implContentDecls, " $nativeType v = " . JSValueToNative($attribute->s
ignature, "value") . ";\n"); |
| 603 | 640 |
| 604 my $result = ""; | 641 my $result = ""; |
| 605 if ($nativeType eq "int" and $attribute->signature->extendedAttributes->{"Conv
ertFromString"}) { | 642 if ($nativeType eq "int" and $attribute->signature->extendedAttributes->{"Conv
ertFromString"}) { |
| 606 $result .= "WebCore::String::number("; | 643 $result .= "WebCore::String::number("; |
| 607 } | 644 } |
| 608 $result .= "v"; | 645 $result .= "v"; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 | 727 |
| 691 my $numParameters = @{$function->parameters}; | 728 my $numParameters = @{$function->parameters}; |
| 692 | 729 |
| 693 if ($function->signature->extendedAttributes->{"RequiresAllArguments"}) { | 730 if ($function->signature->extendedAttributes->{"RequiresAllArguments"}) { |
| 694 push(@implContentDecls, | 731 push(@implContentDecls, |
| 695 " if (args.Length() < $numParameters) return v8::Undefined();\n"); | 732 " if (args.Length() < $numParameters) return v8::Undefined();\n"); |
| 696 } | 733 } |
| 697 | 734 |
| 698 if ($codeGenerator->IsPodType($implClassName)) { | 735 if ($codeGenerator->IsPodType($implClassName)) { |
| 699 my $nativeClassName = GetNativeType($implClassName); | 736 my $nativeClassName = GetNativeType($implClassName); |
| 700 push(@implContentDecls, " V8SVGPODTypeWrapper<$nativeClassName>* imp_wrap
per = V8Proxy::FastToNativeObject<V8SVGPODTypeWrapper<$nativeClassName> >(V8Clas
sIndex::$classIndex, args.Holder());\n"); | 737 push(@implContentDecls, " V8SVGPODTypeWrapper<$nativeClassName>* imp_wrap
per = V8Proxy::ToNativeObject<V8SVGPODTypeWrapper<$nativeClassName> >(V8ClassInd
ex::$classIndex, args.Holder());\n"); |
| 701 push(@implContentDecls, " $nativeClassName imp_instance = *imp_wrapper;\n
"); | 738 push(@implContentDecls, " $nativeClassName imp_instance = *imp_wrapper;\n
"); |
| 702 push(@implContentDecls, " $nativeClassName* imp = &imp_instance;\n"); | 739 push(@implContentDecls, " $nativeClassName* imp = &imp_instance;\n"); |
| 703 } else { | 740 } else { |
| 704 push(@implContentDecls, " $implClassName* imp = V8Proxy::FastToNativeObje
ct<$implClassName>(V8ClassIndex::$classIndex, args.Holder());\n"); | 741 push(@implContentDecls, <<END); |
| 742 v8::Handle<v8::Value> holder = args.Holder(); |
| 743 END |
| 744 HolderToNative($dataNode, $implClassName, $classIndex); |
| 705 } | 745 } |
| 706 | 746 |
| 707 # Check domain security if needed | 747 # Check domain security if needed |
| 708 if (($dataNode->extendedAttributes->{"CheckDomainSecurity"} | 748 if (($dataNode->extendedAttributes->{"CheckDomainSecurity"} |
| 709 || $interfaceName eq "DOMWindow") | 749 || $interfaceName eq "DOMWindow") |
| 710 && !$function->signature->extendedAttributes->{"DoNotCheckDomainSecurity"})
{ | 750 && !$function->signature->extendedAttributes->{"DoNotCheckDomainSecurity"})
{ |
| 711 # We have not find real use cases yet. | 751 # We have not find real use cases yet. |
| 712 push(@implContentDecls, | 752 push(@implContentDecls, |
| 713 " if (!V8Proxy::IsFromSameOrigin(imp->frame(), true)) {\n". | 753 " if (!V8Proxy::IsFromSameOrigin(imp->frame(), true)) {\n". |
| 714 " return v8::Undefined();\n" . | 754 " return v8::Undefined();\n" . |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 774 my $object = shift; | 814 my $object = shift; |
| 775 my $dataNode = shift; | 815 my $dataNode = shift; |
| 776 my $interfaceName = $dataNode->name; | 816 my $interfaceName = $dataNode->name; |
| 777 my $className = "V8$interfaceName"; | 817 my $className = "V8$interfaceName"; |
| 778 my $implClassName = GetImplementationClassName($interfaceName); | 818 my $implClassName = GetImplementationClassName($interfaceName); |
| 779 my $classIndex = uc($codeGenerator->StripModule($interfaceName)); | 819 my $classIndex = uc($codeGenerator->StripModule($interfaceName)); |
| 780 | 820 |
| 781 my $hasLegacyParent = $dataNode->extendedAttributes->{"LegacyParent"}; | 821 my $hasLegacyParent = $dataNode->extendedAttributes->{"LegacyParent"}; |
| 782 my $conditional = $dataNode->extendedAttributes->{"Conditional"}; | 822 my $conditional = $dataNode->extendedAttributes->{"Conditional"}; |
| 783 | 823 |
| 824 @allParents = $codeGenerator->FindParentsRecursively($dataNode); |
| 825 |
| 784 # - Add default header template | 826 # - Add default header template |
| 785 @implContentHeader = split("\r", $headerTemplate); | 827 @implContentHeader = split("\r", $headerTemplate); |
| 786 | 828 |
| 787 push(@implFixedHeader, | 829 push(@implFixedHeader, |
| 788 "#include \"config.h\"\n" . | 830 "#include \"config.h\"\n" . |
| 789 "#include \"v8_proxy.h\"\n" . | 831 "#include \"v8_proxy.h\"\n" . |
| 790 "#include \"v8_binding.h\"\n\n" . | 832 "#include \"v8_binding.h\"\n\n" . |
| 791 "#undef LOG\n\n"); | 833 "#undef LOG\n\n"); |
| 792 | 834 |
| 793 if ($className =~ /^V8SVG/) { | 835 if ($className =~ /^V8SVG/) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 822 | 864 |
| 823 # Do not generate accessor if this is a custom attribute. The | 865 # Do not generate accessor if this is a custom attribute. The |
| 824 # call will be forwarded to a hand-written accessor | 866 # call will be forwarded to a hand-written accessor |
| 825 # implementation. | 867 # implementation. |
| 826 if ($attribute->signature->extendedAttributes->{"Custom"}) { | 868 if ($attribute->signature->extendedAttributes->{"Custom"}) { |
| 827 $implIncludes{"v8_custom.h"} = 1; | 869 $implIncludes{"v8_custom.h"} = 1; |
| 828 next; | 870 next; |
| 829 } | 871 } |
| 830 | 872 |
| 831 # Generate the accessor. | 873 # Generate the accessor. |
| 832 GenerateNormalAttrGetter($attribute, $classIndex, $implClassName); | 874 GenerateNormalAttrGetter($attribute, $dataNode, $classIndex, $implClassNam
e); |
| 833 if ($attribute->signature->extendedAttributes->{"CustomSetter"}) { | 875 if ($attribute->signature->extendedAttributes->{"CustomSetter"}) { |
| 834 $implIncludes{"v8_custom.h"} = 1; | 876 $implIncludes{"v8_custom.h"} = 1; |
| 835 } elsif ($attribute->signature->extendedAttributes->{"Replaceable"}) { | 877 } elsif ($attribute->signature->extendedAttributes->{"Replaceable"}) { |
| 836 $interfaceName eq "DOMWindow" || die "Replaceable attribute can only be
used in DOMWindow interface!"; | 878 $interfaceName eq "DOMWindow" || die "Replaceable attribute can only be
used in DOMWindow interface!"; |
| 837 # GenerateReplaceableAttrSetter($implClassName); | 879 # GenerateReplaceableAttrSetter($implClassName); |
| 838 } elsif ($attribute->type !~ /^readonly/) { | 880 } elsif ($attribute->type !~ /^readonly/) { |
| 839 GenerateNormalAttrSetter($attribute, $classIndex, $implClassName); | 881 GenerateNormalAttrSetter($attribute, $dataNode, $classIndex, $implClassN
ame); |
| 840 } | 882 } |
| 841 } | 883 } |
| 842 | 884 |
| 843 if ($hasConstructors) { | 885 if ($hasConstructors) { |
| 844 GenerateConstructorGetter($implClassName); | 886 GenerateConstructorGetter($implClassName); |
| 845 } | 887 } |
| 846 | 888 |
| 847 # Generate methods for functions. | 889 # Generate methods for functions. |
| 848 foreach my $function (@{$dataNode->functions}) { | 890 foreach my $function (@{$dataNode->functions}) { |
| 849 # hack for addEventListener/RemoveEventListener | 891 # hack for addEventListener/RemoveEventListener |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1216 | 1258 |
| 1217 if ($nodeToReturn) { | 1259 if ($nodeToReturn) { |
| 1218 # Special case for insertBefore, replaceChild, removeChild and | 1260 # Special case for insertBefore, replaceChild, removeChild and |
| 1219 # appendChild functions from Node. | 1261 # appendChild functions from Node. |
| 1220 $result .= $indent . "bool success = $functionString;\n"; | 1262 $result .= $indent . "bool success = $functionString;\n"; |
| 1221 if (@{$function->raisesExceptions}) { | 1263 if (@{$function->raisesExceptions}) { |
| 1222 $result .= GenerateSetDOMException($indent); | 1264 $result .= GenerateSetDOMException($indent); |
| 1223 } | 1265 } |
| 1224 $result .= $indent . "if (success)\n"; | 1266 $result .= $indent . "if (success)\n"; |
| 1225 $result .= $indent . " " . | 1267 $result .= $indent . " " . |
| 1226 "return V8Proxy::ToV8Object(V8ClassIndex::NODE, $nodeToReturn);\n"; | 1268 "return V8Proxy::NodeToV8Object($nodeToReturn);\n"; |
| 1227 $result .= $indent . "return v8::Null();\n"; | 1269 $result .= $indent . "return v8::Null();\n"; |
| 1228 return $result; | 1270 return $result; |
| 1229 } elsif ($returnType eq "void") { | 1271 } elsif ($returnType eq "void") { |
| 1230 $result .= $indent . "$functionString;\n"; | 1272 $result .= $indent . "$functionString;\n"; |
| 1231 } elsif ($copyFirst) { | 1273 } elsif ($copyFirst) { |
| 1232 $result .= | 1274 $result .= |
| 1233 $indent . GetNativeType($returnType, 0) . " result = *imp;\n" . | 1275 $indent . GetNativeType($returnType, 0) . " result = *imp;\n" . |
| 1234 $indent . "$functionString;\n"; | 1276 $indent . "$functionString;\n"; |
| 1235 } elsif ($returnsListItemPodType) { | 1277 } elsif ($returnsListItemPodType) { |
| 1236 $result .= $indent . "RefPtr<SVGPODListItem<$nativeReturnType> > result = $f
unctionString;\n"; | 1278 $result .= $indent . "RefPtr<SVGPODListItem<$nativeReturnType> > result = $f
unctionString;\n"; |
| 1237 } else { | 1279 } else { |
| 1238 $result .= $indent . $nativeReturnType . " result = $functionString;\n"; | 1280 $result .= $indent . $nativeReturnType . " result = $functionString;\n"; |
| 1239 } | 1281 } |
| 1240 | 1282 |
| 1241 if (@{$function->raisesExceptions}) { | 1283 if (@{$function->raisesExceptions}) { |
| 1242 $result .= GenerateSetDOMException($indent); | 1284 $result .= GenerateSetDOMException($indent); |
| 1243 } | 1285 } |
| 1244 | 1286 |
| 1245 my $return = "result"; | 1287 my $return = "result"; |
| 1246 if (IsRefPtrType($returnType) || $returnsListItemPodType) { | 1288 if (IsRefPtrType($returnType) || $returnsListItemPodType) { |
| 1247 $implIncludes{"wtf/GetPtr.h"} = 1; | 1289 $implIncludes{"wtf/GetPtr.h"} = 1; |
| 1248 $return = "WTF::getPtr(" . $return . ")"; | 1290 $return = "WTF::getPtr(" . $return . ")"; |
| 1249 } | 1291 } |
| 1250 | 1292 |
| 1251 # If the return type is a POD type, separate out the wrapper generation | 1293 # If the return type is a POD type, separate out the wrapper generation |
| 1252 if ($returnsListItemPodType) { | 1294 if ($returnsListItemPodType) { |
| 1253 $result .= $indent . "V8SVGPODTypeWrapperCreatorForList<" . $nativeReturnTyp
e . ">* wrapper = new "; | 1295 $result .= $indent . "V8SVGPODTypeWrapper<" . $nativeReturnType . ">* wrappe
r = new "; |
| 1254 $result .= "V8SVGPODTypeWrapperCreatorForList<" . $nativeReturnType . ">($re
turn, imp->associatedAttributeName());\n"; | 1296 $result .= "V8SVGPODTypeWrapperCreatorForList<" . $nativeReturnType . ">($re
turn, imp->associatedAttributeName());\n"; |
| 1255 $return = "wrapper"; | 1297 $return = "wrapper"; |
| 1256 } elsif ($returnsPodType) { | 1298 } elsif ($returnsPodType) { |
| 1257 $result .= $indent . "V8SVGPODTypeWrapperCreatorReadOnly<" . $nativeReturnTy
pe . ">* wrapper = "; | 1299 $result .= $indent . "V8SVGPODTypeWrapper<" . $nativeReturnType . ">* wrappe
r = "; |
| 1258 $result .= GenerateReadOnlyPodTypeWrapper($returnType, $return) . ";\n"; | 1300 $result .= GenerateReadOnlyPodTypeWrapper($returnType, $return) . ";\n"; |
| 1259 $return = "wrapper"; | 1301 $return = "wrapper"; |
| 1260 } | 1302 } |
| 1261 | 1303 |
| 1262 my $generatedSVGContextRetrieval = 0; | 1304 my $generatedSVGContextRetrieval = 0; |
| 1263 # If the return type needs an SVG context, output it | 1305 # If the return type needs an SVG context, output it |
| 1264 if (IsSVGTypeNeedingContextParameter($returnType)) { | 1306 if (IsSVGTypeNeedingContextParameter($returnType)) { |
| 1265 $result .= GenerateSVGContextAssignment($implClassName, $return, $indent); | 1307 $result .= GenerateSVGContextAssignment($implClassName, $return, $indent); |
| 1266 $generatedSVGContextRetrieval = 1; | 1308 $generatedSVGContextRetrieval = 1; |
| 1267 } | 1309 } |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1507 if ($type eq "SVGPoint") { | 1549 if ($type eq "SVGPoint") { |
| 1508 $implIncludes{"FloatPoint.h"} = 1; | 1550 $implIncludes{"FloatPoint.h"} = 1; |
| 1509 } | 1551 } |
| 1510 | 1552 |
| 1511 # Default, assume autogenerated type conversion routines | 1553 # Default, assume autogenerated type conversion routines |
| 1512 $implIncludes{"v8_proxy.h"} = 1; | 1554 $implIncludes{"v8_proxy.h"} = 1; |
| 1513 if ($type eq "EventTarget") { | 1555 if ($type eq "EventTarget") { |
| 1514 $implIncludes{"V8Node.h"} = 1; | 1556 $implIncludes{"V8Node.h"} = 1; |
| 1515 | 1557 |
| 1516 # EventTarget is not in DOM hierarchy, but all Nodes are EventTarget. | 1558 # EventTarget is not in DOM hierarchy, but all Nodes are EventTarget. |
| 1517 return "V8Node::HasInstance($value) ? V8Proxy::FastToNativeObject<EventTar
getNode>(V8ClassIndex::NODE, $value) : 0"; | 1559 return "V8Node::HasInstance($value) ? V8Proxy::DOMWrapperToNode<EventTarge
tNode>($value) : 0"; |
| 1518 } | 1560 } |
| 1519 | 1561 |
| 1520 AddIncludesForType($type); | 1562 AddIncludesForType($type); |
| 1521 # $implIncludes{"$type.h"} = 1 unless AvoidInclusionOfType($type); | 1563 # $implIncludes{"$type.h"} = 1 unless AvoidInclusionOfType($type); |
| 1522 | 1564 |
| 1523 if (IsDOMNodeType($type)) { | 1565 if (IsDOMNodeType($type)) { |
| 1524 $implIncludes{"V8${type}.h"} = 1; | 1566 $implIncludes{"V8${type}.h"} = 1; |
| 1525 | 1567 |
| 1526 # Perform type checks on the parameter, if it is expected Node type, | 1568 # Perform type checks on the parameter, if it is expected Node type, |
| 1527 # return NULL. | 1569 # return NULL. |
| 1528 return "V8${type}::HasInstance($value) ? V8Proxy::FastToNativeObject<${typ
e}>(V8ClassIndex::NODE, $value) : 0"; | 1570 return "V8${type}::HasInstance($value) ? V8Proxy::DOMWrapperToNode<${type}
>($value) : 0"; |
| 1529 | 1571 |
| 1530 } else { | 1572 } else { |
| 1531 # TODO: Temporary to avoid Window name conflict. | 1573 # TODO: Temporary to avoid Window name conflict. |
| 1532 my $classIndex = uc($type); | 1574 my $classIndex = uc($type); |
| 1533 my $implClassName = GetImplementationClassName(${type}); | 1575 my $implClassName = GetImplementationClassName(${type}); |
| 1534 | 1576 |
| 1535 $implIncludes{"V8$type.h"} = 1; | 1577 $implIncludes{"V8$type.h"} = 1; |
| 1536 | 1578 |
| 1537 if ($codeGenerator->IsPodType($type)) { | 1579 if ($codeGenerator->IsPodType($type)) { |
| 1538 my $nativeType = GetNativeType($type); | 1580 my $nativeType = GetNativeType($type); |
| 1539 $implIncludes{"V8SVGPODTypeWrapper.h"} = 1; | 1581 $implIncludes{"V8SVGPODTypeWrapper.h"} = 1; |
| 1540 | 1582 |
| 1541 # TODO(jhass): perform type checking like others??? | 1583 # TODO(jhass): perform type checking like others??? |
| 1542 return "*V8Proxy::ToNativeObject<V8SVGPODTypeWrapper<${nativeType}> >(V8
ClassIndex::${classIndex}, $value)" | 1584 return "*V8Proxy::ToNativeObject<V8SVGPODTypeWrapper<${nativeType}> >(V8
ClassIndex::${classIndex}, $value)" |
| 1543 } | 1585 } |
| 1544 | 1586 |
| 1545 $implIncludes{"V8${type}.h"} = 1; | 1587 $implIncludes{"V8${type}.h"} = 1; |
| 1546 | 1588 |
| 1547 # Perform type checks on the parameter, if it is expected Node type, | 1589 # Perform type checks on the parameter, if it is expected Node type, |
| 1548 # return NULL. | 1590 # return NULL. |
| 1549 return "V8${type}::HasInstance($value) ? V8Proxy::FastToNativeObject<${imp
lClassName}>(V8ClassIndex::${classIndex}, $value) : 0"; | 1591 return "V8${type}::HasInstance($value) ? V8Proxy::ToNativeObject<${implCla
ssName}>(V8ClassIndex::${classIndex}, $value) : 0"; |
| 1550 } | 1592 } |
| 1551 } | 1593 } |
| 1552 | 1594 |
| 1553 | 1595 |
| 1554 sub GetV8HeaderName | 1596 sub GetV8HeaderName |
| 1555 { | 1597 { |
| 1556 my $type = shift; | 1598 my $type = shift; |
| 1557 return "V8" . GetImplementationFileName($type); | 1599 return "V8" . GetImplementationFileName($type); |
| 1558 } | 1600 } |
| 1559 | 1601 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1626 'EventListener' => 1 | 1668 'EventListener' => 1 |
| 1627 ); | 1669 ); |
| 1628 | 1670 |
| 1629 | 1671 |
| 1630 sub IsWrapperType | 1672 sub IsWrapperType |
| 1631 { | 1673 { |
| 1632 my $type = $codeGenerator->StripModule(shift); | 1674 my $type = $codeGenerator->StripModule(shift); |
| 1633 return !($non_wrapper_types{$type}); | 1675 return !($non_wrapper_types{$type}); |
| 1634 } | 1676 } |
| 1635 | 1677 |
| 1636 | |
| 1637 sub IsDOMNodeType | 1678 sub IsDOMNodeType |
| 1638 { | 1679 { |
| 1639 my $type = shift; | 1680 my $type = shift; |
| 1640 | 1681 |
| 1641 return 1 if $type eq 'Attr'; | 1682 return 1 if $type eq 'Attr'; |
| 1642 return 1 if $type eq 'CDATASection'; | 1683 return 1 if $type eq 'CDATASection'; |
| 1643 return 1 if $type eq 'Comment'; | 1684 return 1 if $type eq 'Comment'; |
| 1644 return 1 if $type eq 'Document'; | 1685 return 1 if $type eq 'Document'; |
| 1645 return 1 if $type eq 'DocumentFragment'; | 1686 return 1 if $type eq 'DocumentFragment'; |
| 1646 return 1 if $type eq 'DocumentType'; | 1687 return 1 if $type eq 'DocumentType'; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1694 return "v8String($value)"; | 1735 return "v8String($value)"; |
| 1695 } | 1736 } |
| 1696 | 1737 |
| 1697 # V8 specific. | 1738 # V8 specific. |
| 1698 my $implClassName = GetImplementationClassName($type); | 1739 my $implClassName = GetImplementationClassName($type); |
| 1699 AddIncludesForType($type); | 1740 AddIncludesForType($type); |
| 1700 # $implIncludes{GetImplementationFileName($type)} = 1 unless AvoidInclusionO
fType($type); | 1741 # $implIncludes{GetImplementationFileName($type)} = 1 unless AvoidInclusionO
fType($type); |
| 1701 | 1742 |
| 1702 # special case for non-DOM node interfaces | 1743 # special case for non-DOM node interfaces |
| 1703 if (IsDOMNodeType($type)) { | 1744 if (IsDOMNodeType($type)) { |
| 1704 return "V8Proxy::ToV8Object(V8ClassIndex::NODE, $value)"; | 1745 return "V8Proxy::NodeToV8Object($value)"; |
| 1705 } | 1746 } |
| 1706 | 1747 |
| 1707 if ($type eq "EventTarget" or $type eq "SVGElementInstance") { | 1748 if ($type eq "EventTarget" or $type eq "SVGElementInstance") { |
| 1708 return "V8Proxy::EventTargetToV8Object($value)"; | 1749 return "V8Proxy::EventTargetToV8Object($value)"; |
| 1709 } | 1750 } |
| 1710 | 1751 |
| 1711 if ($type eq "Event") { | 1752 if ($type eq "Event") { |
| 1712 return "V8Proxy::EventToV8Object($value)"; | 1753 return "V8Proxy::EventToV8Object($value)"; |
| 1713 } | 1754 } |
| 1714 | 1755 |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1891 return 0; | 1932 return 0; |
| 1892 } | 1933 } |
| 1893 | 1934 |
| 1894 sub DebugPrint | 1935 sub DebugPrint |
| 1895 { | 1936 { |
| 1896 my $output = shift; | 1937 my $output = shift; |
| 1897 | 1938 |
| 1898 print $output; | 1939 print $output; |
| 1899 print "\n"; | 1940 print "\n"; |
| 1900 } | 1941 } |
| OLD | NEW |