Changeset 49248 in webkit
- Timestamp:
- Oct 7, 2009 9:59:07 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r49244 r49248 1 2009-10-07 Anton Muhin <antonm@chromium.org> 2 3 Reviewed by Adam Barth. 4 5 Fetch pointers to C++ DOM window immediately from holder 6 object (do not search prototype chain for proper JS wrapper). 7 https://bugs.webkit.org/show_bug.cgi?id=29031 8 9 * bindings/scripts/CodeGeneratorV8.pm: 10 * bindings/v8/V8DOMWrapper.cpp: 11 (WebCore::V8DOMWrapper::getTemplate): 12 * bindings/v8/V8Proxy.cpp: 13 (WebCore::V8Proxy::createNewContext): 14 (WebCore::V8Proxy::installDOMWindow): 15 * bindings/v8/custom/V8DOMWindowCustom.cpp: 16 (WebCore::ACCESSOR_GETTER): 17 (WebCore::ACCESSOR_SETTER): 18 (WebCore::INDEXED_PROPERTY_GETTER): 19 (WebCore::NAMED_PROPERTY_GETTER): 20 (WebCore::NAMED_ACCESS_CHECK): 21 (WebCore::INDEXED_ACCESS_CHECK): 1 22 2009-10-07 Adam Roben <aroben@apple.com> 2 23 -
trunk/WebCore/bindings/scripts/CodeGeneratorV8.pm
r49221 r49248 517 517 518 518 } elsif ($attrExt->{"v8OnProto"} || $attrExt->{"V8DisallowShadowing"}) { 519 if ($classIndex eq "DOMWINDOW") { 520 push(@implContentDecls, <<END); 521 v8::Handle<v8::Object> holder = info.Holder(); 522 END 523 } else { 519 524 # perform lookup first 520 525 push(@implContentDecls, <<END); … … 522 527 if (holder.IsEmpty()) return v8::Undefined(); 523 528 END 529 } 524 530 HolderToNative($dataNode, $implClassName, $classIndex); 525 531 } else { … … 693 699 694 700 } elsif ($attrExt->{"v8OnProto"}) { 701 if ($classIndex eq "DOMWINDOW") { 702 push(@implContentDecls, <<END); 703 v8::Handle<v8::Object> holder = info.Holder(); 704 END 705 } else { 695 706 # perform lookup first 696 707 push(@implContentDecls, <<END); … … 698 709 if (holder.IsEmpty()) return; 699 710 END 711 } 700 712 HolderToNative($dataNode, $implClassName, $classIndex); 701 713 } else { -
trunk/WebCore/bindings/v8/V8DOMWrapper.cpp
r49050 r49248 342 342 descriptor->PrototypeTemplate()->SetNamedPropertyHandler(USE_NAMED_PROPERTY_GETTER(DOMWindow)); 343 343 descriptor->PrototypeTemplate()->SetIndexedPropertyHandler(USE_INDEXED_PROPERTY_GETTER(DOMWindow)); 344 descriptor->PrototypeTemplate()->SetInternalFieldCount(V8Custom::kDOMWindowInternalFieldCount); 344 345 345 346 descriptor->SetHiddenPrototype(true); -
trunk/WebCore/bindings/v8/V8Proxy.cpp
r49050 r49248 913 913 // Install a security handler with V8. 914 914 globalTemplate->SetAccessCheckCallbacks(V8Custom::v8DOMWindowNamedSecurityCheck, V8Custom::v8DOMWindowIndexedSecurityCheck, v8::Integer::New(V8ClassIndex::DOMWINDOW)); 915 globalTemplate->SetInternalFieldCount(V8Custom::kDOMWindowInternalFieldCount); 915 916 916 917 // Used to avoid sleep calls in unload handlers. … … 954 955 // Wrap the window. 955 956 V8DOMWrapper::setDOMWrapper(jsWindow, V8ClassIndex::ToInt(V8ClassIndex::DOMWINDOW), window); 957 V8DOMWrapper::setDOMWrapper(v8::Handle<v8::Object>::Cast(jsWindow->GetPrototype()), V8ClassIndex::ToInt(V8ClassIndex::DOMWINDOW), window); 956 958 957 959 window->ref(); … … 960 962 // Insert the window instance as the prototype of the shadow object. 961 963 v8::Handle<v8::Object> v8Global = context->Global(); 964 V8DOMWrapper::setDOMWrapper(v8::Handle<v8::Object>::Cast(v8Global->GetPrototype()), V8ClassIndex::ToInt(V8ClassIndex::DOMWINDOW), window); 962 965 v8Global->Set(implicitProtoString, jsWindow); 963 966 return true; -
trunk/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp
r49219 r49248 199 199 ACCESSOR_SETTER(DOMWindowLocation) 200 200 { 201 v8::Handle<v8::Object> holder = V8DOMWrapper::lookupDOMWrapper(V8ClassIndex::DOMWINDOW, info.This()); 202 if (holder.IsEmpty()) 203 return; 204 205 DOMWindow* imp = V8DOMWrapper::convertToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, holder); 201 DOMWindow* imp = V8DOMWrapper::convertToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, info.Holder()); 206 202 WindowSetLocation(imp, toWebCoreString(value)); 207 203 } … … 744 740 { 745 741 INC_STATS("DOM.DOMWindow.IndexedPropertyGetter"); 746 v8::Handle<v8::Object> holder = V8DOMWrapper::lookupDOMWrapper(V8ClassIndex::DOMWINDOW, info.This()); 747 if (holder.IsEmpty()) 748 return notHandledByInterceptor(); 749 750 DOMWindow* window = V8DOMWrapper::convertToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, holder); 742 743 DOMWindow* window = V8DOMWrapper::convertToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, info.Holder()); 751 744 if (!window) 752 745 return notHandledByInterceptor(); … … 768 761 INC_STATS("DOM.DOMWindow.NamedPropertyGetter"); 769 762 770 v8::Handle<v8::Object> holder = V8DOMWrapper::lookupDOMWrapper(V8ClassIndex::DOMWINDOW, info.This()); 771 if (holder.IsEmpty()) 772 return notHandledByInterceptor(); 773 774 DOMWindow* window = V8DOMWrapper::convertToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, holder); 763 // TODO(antonm): investigate what convertToNativeObject does for the case of DOMWINDOW. 764 DOMWindow* window = V8DOMWrapper::convertToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, info.Holder()); 775 765 if (!window) 776 766 return notHandledByInterceptor(); … … 788 778 789 779 // Search IDL functions defined in the prototype 790 v8::Handle<v8::Value> result = holder->GetRealNamedPropertyInPrototypeChain(name);780 v8::Handle<v8::Value> result = info.Holder()->GetRealNamedProperty(name); 791 781 if (!result.IsEmpty()) 792 782 return result;
Note: See TracChangeset
for help on using the changeset viewer.