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

Side by Side Diff: third_party/WebKit/Source/bindings/tests/results/core/V8TestInterfaceCheckSecurity.cpp

Issue 2758893002: Slim V8DOMConfiguration structs for attributes and accessors. (Closed)
Patch Set: Created 3 years, 9 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file has been auto-generated by code_generator_v8.py. 5 // This file has been auto-generated by code_generator_v8.py.
6 // DO NOT MODIFY! 6 // DO NOT MODIFY!
7 7
8 // This file has been generated from the Jinja2 template in 8 // This file has been generated from the Jinja2 template in
9 // third_party/WebKit/Source/bindings/templates/interface.cpp.tmpl 9 // third_party/WebKit/Source/bindings/templates/interface.cpp.tmpl
10 10
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 ToV8(names, info.GetIsolate()->GetCurrentContext()->Global(), 440 ToV8(names, info.GetIsolate()->GetCurrentContext()->Global(),
441 info.GetIsolate()).As<v8::Array>()); 441 info.GetIsolate()).As<v8::Array>());
442 } 442 }
443 443
444 // Suppress warning: global constructors, because AttributeConfiguration is triv ial 444 // Suppress warning: global constructors, because AttributeConfiguration is triv ial
445 // and does not depend on another global objects. 445 // and does not depend on another global objects.
446 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG) 446 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
447 #pragma clang diagnostic push 447 #pragma clang diagnostic push
448 #pragma clang diagnostic ignored "-Wglobal-constructors" 448 #pragma clang diagnostic ignored "-Wglobal-constructors"
449 #endif 449 #endif
450 const V8DOMConfiguration::AttributeConfiguration V8TestInterfaceCheckSecurityAtt ributes[] = { 450 static const V8DOMConfiguration::AttributeConfiguration V8TestInterfaceCheckSecu rityAttributes[] = {
451 {"doNotCheckSecurityLongAttribute", V8TestInterfaceCheckSecurity::doNotCheck SecurityLongAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::doNo tCheckSecurityLongAttributeAttributeSetterCallback, nullptr, nullptr, nullptr, n ullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::OnInst ance, V8DOMConfiguration::CheckHolder}, 451 {"doNotCheckSecurityLongAttribute", V8TestInterfaceCheckSecurity::doNotCheck SecurityLongAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::doNo tCheckSecurityLongAttributeAttributeSetterCallback, nullptr, nullptr, static_cas t<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::OnInstance, V8DOMConfigu ration::CheckHolder, V8DOMConfiguration::AllWorlds},
452 {"doNotCheckSecurityReadonlyLongAttribute", V8TestInterfaceCheckSecurity::do NotCheckSecurityReadonlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8D OMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder}, 452 {"doNotCheckSecurityReadonlyLongAttribute", V8TestInterfaceCheckSecurity::do NotCheckSecurityReadonlyLongAttributeAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::O nInstance, V8DOMConfiguration::CheckHolder, V8DOMConfiguration::AllWorlds},
453 {"doNotCheckSecurityOnSetterLongAttribute", V8TestInterfaceCheckSecurity::do NotCheckSecurityOnSetterLongAttributeAttributeGetterCallback, V8TestInterfaceChe ckSecurity::doNotCheckSecurityOnSetterLongAttributeAttributeSetterCallback, null ptr, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8 DOMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder}, 453 {"doNotCheckSecurityOnSetterLongAttribute", V8TestInterfaceCheckSecurity::do NotCheckSecurityOnSetterLongAttributeAttributeGetterCallback, V8TestInterfaceChe ckSecurity::doNotCheckSecurityOnSetterLongAttributeAttributeSetterCallback, null ptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration:: OnInstance, V8DOMConfiguration::CheckHolder, V8DOMConfiguration::AllWorlds},
454 {"doNotCheckSecurityReplaceableReadonlyLongAttribute", V8TestInterfaceCheckS ecurity::doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeGetterCallba ck, nullptr, nullptr, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribu te>(v8::None), V8DOMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder}, 454 {"doNotCheckSecurityReplaceableReadonlyLongAttribute", V8TestInterfaceCheckS ecurity::doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeGetterCallba ck, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8D OMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder, V8DOMConfiguration ::AllWorlds},
455 }; 455 };
456 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG) 456 #if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG)
457 #pragma clang diagnostic pop 457 #pragma clang diagnostic pop
458 #endif 458 #endif
459 459
460 const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceCheckSecurityAcce ssors[] = { 460 static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceCheckSecur ityAccessors[] = {
461 {"readonlyLongAttribute", V8TestInterfaceCheckSecurity::readonlyLongAttribut eAttributeGetterCallback, nullptr, nullptr, nullptr, nullptr, nullptr, static_ca st<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::OnInstance, V8DOMCo nfiguration::CheckHolder}, 461 {"readonlyLongAttribute", V8TestInterfaceCheckSecurity::readonlyLongAttribut eAttributeGetterCallback, nullptr, nullptr, nullptr, static_cast<v8::PropertyAtt ribute>(v8::ReadOnly), V8DOMConfiguration::OnInstance, V8DOMConfiguration::Check Holder, V8DOMConfiguration::AllWorlds},
462 {"longAttribute", V8TestInterfaceCheckSecurity::longAttributeAttributeGetter Callback, V8TestInterfaceCheckSecurity::longAttributeAttributeSetterCallback, nu llptr, nullptr, nullptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder}, 462 {"longAttribute", V8TestInterfaceCheckSecurity::longAttributeAttributeGetter Callback, V8TestInterfaceCheckSecurity::longAttributeAttributeSetterCallback, nu llptr, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration ::OnInstance, V8DOMConfiguration::CheckHolder, V8DOMConfiguration::AllWorlds},
463 }; 463 };
464 464
465 const V8DOMConfiguration::MethodConfiguration V8TestInterfaceCheckSecurityMethod s[] = { 465 static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceCheckSecurit yMethods[] = {
466 {"voidMethod", V8TestInterfaceCheckSecurity::voidMethodMethodCallback, 0, v8 ::None, V8DOMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder, V8DOMCo nfiguration::CheckAccess, V8DOMConfiguration::AllWorlds}, 466 {"voidMethod", V8TestInterfaceCheckSecurity::voidMethodMethodCallback, 0, v8 ::None, V8DOMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder, V8DOMCo nfiguration::CheckAccess, V8DOMConfiguration::AllWorlds},
467 }; 467 };
468 468
469 static void installV8TestInterfaceCheckSecurityTemplate(v8::Isolate* isolate, co nst DOMWrapperWorld& world, v8::Local<v8::FunctionTemplate> interfaceTemplate) { 469 static void installV8TestInterfaceCheckSecurityTemplate(v8::Isolate* isolate, co nst DOMWrapperWorld& world, v8::Local<v8::FunctionTemplate> interfaceTemplate) {
470 // Initialize the interface object's template. 470 // Initialize the interface object's template.
471 V8DOMConfiguration::initializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterfaceCheckSecurity::wrapperTypeInfo.interfaceName, v8::Local<v8::Func tionTemplate>(), V8TestInterfaceCheckSecurity::internalFieldCount); 471 V8DOMConfiguration::initializeDOMInterfaceTemplate(isolate, interfaceTemplate, V8TestInterfaceCheckSecurity::wrapperTypeInfo.interfaceName, v8::Local<v8::Func tionTemplate>(), V8TestInterfaceCheckSecurity::internalFieldCount);
472 472
473 v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemp late); 473 v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemp late);
474 ALLOW_UNUSED_LOCAL(signature); 474 ALLOW_UNUSED_LOCAL(signature);
475 v8::Local<v8::ObjectTemplate> instanceTemplate = interfaceTemplate->InstanceTe mplate(); 475 v8::Local<v8::ObjectTemplate> instanceTemplate = interfaceTemplate->InstanceTe mplate();
476 ALLOW_UNUSED_LOCAL(instanceTemplate); 476 ALLOW_UNUSED_LOCAL(instanceTemplate);
477 v8::Local<v8::ObjectTemplate> prototypeTemplate = interfaceTemplate->Prototype Template(); 477 v8::Local<v8::ObjectTemplate> prototypeTemplate = interfaceTemplate->Prototype Template();
478 ALLOW_UNUSED_LOCAL(prototypeTemplate); 478 ALLOW_UNUSED_LOCAL(prototypeTemplate);
479 479
480 // Global object prototype chain consists of Immutable Prototype Exotic Object s 480 // Global object prototype chain consists of Immutable Prototype Exotic Object s
481 prototypeTemplate->SetImmutableProto(); 481 prototypeTemplate->SetImmutableProto();
482 482
483 // Global objects are Immutable Prototype Exotic Objects 483 // Global objects are Immutable Prototype Exotic Objects
484 instanceTemplate->SetImmutableProto(); 484 instanceTemplate->SetImmutableProto();
485 485
486 // Register DOM constants, attributes and operations. 486 // Register DOM constants, attributes and operations.
487 V8DOMConfiguration::installAttributes(isolate, world, instanceTemplate, protot ypeTemplate, V8TestInterfaceCheckSecurityAttributes, WTF_ARRAY_LENGTH(V8TestInte rfaceCheckSecurityAttributes)); 487 V8DOMConfiguration::installAttributes(isolate, world, instanceTemplate, protot ypeTemplate, V8TestInterfaceCheckSecurityAttributes, WTF_ARRAY_LENGTH(V8TestInte rfaceCheckSecurityAttributes));
488 V8DOMConfiguration::installAccessors(isolate, world, instanceTemplate, prototy peTemplate, interfaceTemplate, signature, V8TestInterfaceCheckSecurityAccessors, WTF_ARRAY_LENGTH(V8TestInterfaceCheckSecurityAccessors)); 488 V8DOMConfiguration::installAccessors(isolate, world, instanceTemplate, prototy peTemplate, interfaceTemplate, signature, V8TestInterfaceCheckSecurityAccessors, WTF_ARRAY_LENGTH(V8TestInterfaceCheckSecurityAccessors));
489 V8DOMConfiguration::installMethods(isolate, world, instanceTemplate, prototype Template, interfaceTemplate, signature, V8TestInterfaceCheckSecurityMethods, WTF _ARRAY_LENGTH(V8TestInterfaceCheckSecurityMethods)); 489 V8DOMConfiguration::installMethods(isolate, world, instanceTemplate, prototype Template, interfaceTemplate, signature, V8TestInterfaceCheckSecurityMethods, WTF _ARRAY_LENGTH(V8TestInterfaceCheckSecurityMethods));
490 490
491 // Cross-origin access check 491 // Cross-origin access check
492 instanceTemplate->SetAccessCheckCallbackAndHandler(V8TestInterfaceCheckSecurit y::securityCheck, v8::NamedPropertyHandlerConfiguration(V8TestInterfaceCheckSecu rity::crossOriginNamedGetter, V8TestInterfaceCheckSecurity::crossOriginNamedSett er, nullptr, nullptr, V8TestInterfaceCheckSecurity::crossOriginNamedEnumerator), v8::IndexedPropertyHandlerConfiguration(nullptr), v8::External::New(isolate, co nst_cast<WrapperTypeInfo*>(&V8TestInterfaceCheckSecurity::wrapperTypeInfo))); 492 instanceTemplate->SetAccessCheckCallbackAndHandler(V8TestInterfaceCheckSecurit y::securityCheck, v8::NamedPropertyHandlerConfiguration(V8TestInterfaceCheckSecu rity::crossOriginNamedGetter, V8TestInterfaceCheckSecurity::crossOriginNamedSett er, nullptr, nullptr, V8TestInterfaceCheckSecurity::crossOriginNamedEnumerator), v8::IndexedPropertyHandlerConfiguration(nullptr), v8::External::New(isolate, co nst_cast<WrapperTypeInfo*>(&V8TestInterfaceCheckSecurity::wrapperTypeInfo)));
493 493
494 const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityVoidMethodO riginSafeAttributeConfiguration = { 494 static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityVoid MethodOriginSafeAttributeConfiguration[] = {
495 "doNotCheckSecurityVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSe curityVoidMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::Te stInterfaceCheckSecurityOriginSafeMethodSetterCallback, nullptr, nullptr, nullpt r, &V8TestInterfaceCheckSecurity::wrapperTypeInfo, static_cast<v8::PropertyAttri bute>(v8::None), V8DOMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder 495 {"doNotCheckSecurityVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckS ecurityVoidMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::T estInterfaceCheckSecurityOriginSafeMethodSetterCallback, nullptr, &V8TestInterfa ceCheckSecurity::wrapperTypeInfo, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder, V8DOMConfigurat ion::AllWorlds}
496 }; 496 };
497 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, prototy peTemplate, doNotCheckSecurityVoidMethodOriginSafeAttributeConfiguration); 497 for (const auto& attributeConfig : doNotCheckSecurityVoidMethodOriginSafeAttri buteConfiguration)
498 const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityPerWorldBin dingsVoidMethodOriginSafeAttributeConfiguration = { 498 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, proto typeTemplate, attributeConfig);
499 "doNotCheckSecurityPerWorldBindingsVoidMethod", V8TestInterfaceCheckSecuri ty::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCa llback, V8TestInterfaceCheckSecurity::doNotCheckSecurityPerWorldBindingsVoidMeth odOriginSafeMethodGetterCallbackForMainWorld, V8TestInterfaceCheckSecurity::Test InterfaceCheckSecurityOriginSafeMethodSetterCallbackForMainWorld, nullptr, &V8Te stInterfaceCheckSecurity::wrapperTypeInfo, static_cast<v8::PropertyAttribute>(v8 ::None), V8DOMConfiguration::OnInstance, V8DOMConfiguration::CheckHolder 499 static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityPerW orldBindingsVoidMethodOriginSafeAttributeConfiguration[] = {
500 {"doNotCheckSecurityPerWorldBindingsVoidMethod", V8TestInterfaceCheckSecur ity::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallbackF orMainWorld, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeM ethodSetterCallbackForMainWorld, nullptr, &V8TestInterfaceCheckSecurity::wrapper TypeInfo, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::OnIn stance, V8DOMConfiguration::CheckHolder, V8DOMConfiguration::MainWorld},
501 {"doNotCheckSecurityPerWorldBindingsVoidMethod", V8TestInterfaceCheckSecur ity::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterC allback, nullptr, &V8TestInterfaceCheckSecurity::wrapperTypeInfo, static_cast<v8 ::PropertyAttribute>(v8::None), V8DOMConfiguration::OnInstance, V8DOMConfigurati on::CheckHolder, V8DOMConfiguration::NonMainWorlds}}
500 }; 502 };
501 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, prototy peTemplate, doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeAttributeConfi guration); 503 for (const auto& attributeConfig : doNotCheckSecurityPerWorldBindingsVoidMetho dOriginSafeAttributeConfiguration)
502 const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityUnforgeable VoidMethodOriginSafeAttributeConfiguration = { 504 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, proto typeTemplate, attributeConfig);
503 "doNotCheckSecurityUnforgeableVoidMethod", V8TestInterfaceCheckSecurity::d oNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetterCallback, nullptr, n ullptr, nullptr, nullptr, &V8TestInterfaceCheckSecurity::wrapperTypeInfo, static _cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete), V8DOMConfiguration: :OnInstance, V8DOMConfiguration::CheckHolder 505 static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityUnfo rgeableVoidMethodOriginSafeAttributeConfiguration[] = {
506 {"doNotCheckSecurityUnforgeableVoidMethod", V8TestInterfaceCheckSecurity:: doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetterCallback, nullptr, nullptr, &V8TestInterfaceCheckSecurity::wrapperTypeInfo, static_cast<v8::Propert yAttribute>(v8::ReadOnly | v8::DontDelete), V8DOMConfiguration::OnInstance, V8DO MConfiguration::CheckHolder, V8DOMConfiguration::AllWorlds}
504 }; 507 };
505 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, prototy peTemplate, doNotCheckSecurityUnforgeableVoidMethodOriginSafeAttributeConfigurat ion); 508 for (const auto& attributeConfig : doNotCheckSecurityUnforgeableVoidMethodOrig inSafeAttributeConfiguration)
509 V8DOMConfiguration::installAttribute(isolate, world, instanceTemplate, proto typeTemplate, attributeConfig);
506 } 510 }
507 511
508 v8::Local<v8::FunctionTemplate> V8TestInterfaceCheckSecurity::domTemplate(v8::Is olate* isolate, const DOMWrapperWorld& world) { 512 v8::Local<v8::FunctionTemplate> V8TestInterfaceCheckSecurity::domTemplate(v8::Is olate* isolate, const DOMWrapperWorld& world) {
509 return V8DOMConfiguration::domClassTemplate(isolate, world, const_cast<Wrapper TypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceCheckSecurityTemplate); 513 return V8DOMConfiguration::domClassTemplate(isolate, world, const_cast<Wrapper TypeInfo*>(&wrapperTypeInfo), installV8TestInterfaceCheckSecurityTemplate);
510 } 514 }
511 515
512 bool V8TestInterfaceCheckSecurity::hasInstance(v8::Local<v8::Value> v8Value, v8: :Isolate* isolate) { 516 bool V8TestInterfaceCheckSecurity::hasInstance(v8::Local<v8::Value> v8Value, v8: :Isolate* isolate) {
513 return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, v8Value) ; 517 return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, v8Value) ;
514 } 518 }
515 519
516 v8::Local<v8::Object> V8TestInterfaceCheckSecurity::findInstanceInPrototypeChain (v8::Local<v8::Value> v8Value, v8::Isolate* isolate) { 520 v8::Local<v8::Object> V8TestInterfaceCheckSecurity::findInstanceInPrototypeChain (v8::Local<v8::Value> v8Value, v8::Isolate* isolate) {
517 return V8PerIsolateData::from(isolate)->findInstanceInPrototypeChain(&wrapperT ypeInfo, v8Value); 521 return V8PerIsolateData::from(isolate)->findInstanceInPrototypeChain(&wrapperT ypeInfo, v8Value);
518 } 522 }
519 523
520 TestInterfaceCheckSecurity* V8TestInterfaceCheckSecurity::toImplWithTypeCheck(v8 ::Isolate* isolate, v8::Local<v8::Value> value) { 524 TestInterfaceCheckSecurity* V8TestInterfaceCheckSecurity::toImplWithTypeCheck(v8 ::Isolate* isolate, v8::Local<v8::Value> value) {
521 return hasInstance(value, isolate) ? toImpl(v8::Local<v8::Object>::Cast(value) ) : nullptr; 525 return hasInstance(value, isolate) ? toImpl(v8::Local<v8::Object>::Cast(value) ) : nullptr;
522 } 526 }
523 527
524 TestInterfaceCheckSecurity* NativeValueTraits<TestInterfaceCheckSecurity>::nativ eValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& excepti onState) { 528 TestInterfaceCheckSecurity* NativeValueTraits<TestInterfaceCheckSecurity>::nativ eValue(v8::Isolate* isolate, v8::Local<v8::Value> value, ExceptionState& excepti onState) {
525 return V8TestInterfaceCheckSecurity::toImplWithTypeCheck(isolate, value); 529 return V8TestInterfaceCheckSecurity::toImplWithTypeCheck(isolate, value);
526 } 530 }
527 531
528 } // namespace blink 532 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698