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

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

Issue 140653013: Have DOMImplementation::document() return reference. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Binding test added for [SetWrapperReferenceFrom] extended attribute. Created 6 years, 10 months 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
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 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 my $idlFilename = Cwd::abs_path(IDLFileForInterface($interfaceName)) or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n"); 508 my $idlFilename = Cwd::abs_path(IDLFileForInterface($interfaceName)) or die("Could NOT find IDL file for interface \"$interfaceName\" $!\n");
509 my $idlRelPath = File::Spec->abs2rel($idlFilename, $sourceRoot); 509 my $idlRelPath = File::Spec->abs2rel($idlFilename, $sourceRoot);
510 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); 510 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h");
511 } 511 }
512 return @includes; 512 return @includes;
513 } 513 }
514 514
515 sub NeedsVisitDOMWrapper 515 sub NeedsVisitDOMWrapper
516 { 516 {
517 my $interface = shift; 517 my $interface = shift;
518 return ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "VisitDOMWrapper") || $interface->extendedAttributes->{"SetWrapperReferenceFrom "} || $interface->extendedAttributes->{"SetWrapperReferenceTo"} || SVGTypeNeedsT oHoldContextElement($interface->name); 518 return ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "VisitDOMWrapper") || $interface->extendedAttributes->{"SetWrapperReferenceFrom "} || $interface->extendedAttributes->{"SetWrapperReferenceFromReference"} || $i nterface->extendedAttributes->{"SetWrapperReferenceTo"} || SVGTypeNeedsToHoldCon textElement($interface->name);
519 } 519 }
520 520
521 sub GenerateVisitDOMWrapper 521 sub GenerateVisitDOMWrapper
522 { 522 {
523 my $interface = shift; 523 my $interface = shift;
524 my $implClassName = GetImplName($interface); 524 my $implClassName = GetImplName($interface);
525 my $v8ClassName = GetV8ClassName($interface); 525 my $v8ClassName = GetV8ClassName($interface);
526 526
527 if (ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "V isitDOMWrapper")) { 527 if (ExtendedAttributeContains($interface->extendedAttributes->{"Custom"}, "V isitDOMWrapper")) {
528 return; 528 return;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 ${setReferenceType}* ${setReferenceName} = impl->${setReferenceName}(); 567 ${setReferenceType}* ${setReferenceName} = impl->${setReferenceName}();
568 if (${setReferenceName}) { 568 if (${setReferenceName}) {
569 if (!DOMDataStore::containsWrapper<${setReferenceV8Type}>(${setReference Name}, isolate)) 569 if (!DOMDataStore::containsWrapper<${setReferenceV8Type}>(${setReference Name}, isolate))
570 wrap(${setReferenceName}, creationContext, isolate); 570 wrap(${setReferenceName}, creationContext, isolate);
571 DOMDataStore::setWrapperReference<${setReferenceV8Type}>(wrapper, ${setR eferenceName}, isolate); 571 DOMDataStore::setWrapperReference<${setReferenceV8Type}>(wrapper, ${setR eferenceName}, isolate);
572 } 572 }
573 END 573 END
574 } 574 }
575 575
576 my $isReachableMethod = $interface->extendedAttributes->{"SetWrapperReferenc eFrom"}; 576 my $isReachableMethod = $interface->extendedAttributes->{"SetWrapperReferenc eFrom"};
577 if ($isReachableMethod) { 577 my $isReachableReferenceMethod = $interface->extendedAttributes->{"SetWrappe rReferenceFromReference"};
578
579 if ($isReachableMethod || $isReachableReferenceMethod) {
578 AddToImplIncludes("bindings/v8/V8GCController.h"); 580 AddToImplIncludes("bindings/v8/V8GCController.h");
579 AddToImplIncludes("core/dom/Element.h"); 581 AddToImplIncludes("core/dom/Element.h");
580 $code .= <<END; 582 if ($isReachableMethod) {
583 $code .= <<END;
581 if (Node* owner = impl->${isReachableMethod}()) { 584 if (Node* owner = impl->${isReachableMethod}()) {
582 Node* root = V8GCController::opaqueRootForGC(owner, isolate); 585 Node* root = V8GCController::opaqueRootForGC(owner, isolate);
583 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r oot)), wrapper); 586 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(r oot)), wrapper);
584 return; 587 return;
585 } 588 }
586 END 589 END
590 } else {
591 $code .= <<END;
592 Node* root = V8GCController::opaqueRootForGC(&impl->${isReachableReferenceMe thod}(), isolate);
593 isolate->SetReferenceFromGroup(v8::UniqueId(reinterpret_cast<intptr_t>(root) ), wrapper);
594 }
595
596 END
597 }
587 } 598 }
588 599
589 $code .= <<END; 600 if (!$isReachableReferenceMethod) {
601 $code .= <<END;
590 setObjectGroup(object, wrapper, isolate); 602 setObjectGroup(object, wrapper, isolate);
591 } 603 }
592 604
593 END 605 END
606 }
607
594 $implementation{nameSpaceWebCore}->add($code); 608 $implementation{nameSpaceWebCore}->add($code);
595 } 609 }
596 610
597 sub GetSVGPropertyTypes 611 sub GetSVGPropertyTypes
598 { 612 {
599 my $implType = shift; 613 my $implType = shift;
600 614
601 my $svgPropertyType; 615 my $svgPropertyType;
602 my $svgListPropertyType; 616 my $svgListPropertyType;
603 my $svgNativeType; 617 my $svgNativeType;
(...skipping 5882 matching lines...) Expand 10 before | Expand all | Expand 10 after
6486 if ($parameter->type eq "SerializedScriptValue") { 6500 if ($parameter->type eq "SerializedScriptValue") {
6487 return 1; 6501 return 1;
6488 } elsif (IsIntegerType($parameter->type)) { 6502 } elsif (IsIntegerType($parameter->type)) {
6489 return 1; 6503 return 1;
6490 } 6504 }
6491 } 6505 }
6492 return 0; 6506 return 0;
6493 } 6507 }
6494 6508
6495 1; 6509 1;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698