Changeset 84049 in webkit
- Timestamp:
- Apr 15, 2011 4:38:04 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r84046 r84049 1 2011-04-15 Geoffrey Garen <ggaren@apple.com> 2 3 Reviewed by Oliver Hunt. 4 5 DOM object handles are never removed from cache 6 https://bugs.webkit.org/show_bug.cgi?id=58707 7 8 We were trying to remove hash table items by value instead of by key. 9 10 * bindings/js/DOMWrapperWorld.cpp: 11 (WebCore::JSNodeHandleOwner::finalize): Changed to work more like 12 DOMObjectHandleOwner::finalize because I'm going to merge them. 13 14 (WebCore::DOMObjectHandleOwner::finalize): Remove hash table items 15 by key, not value. (Oops!) Use a helper function to make sure we get 16 this right. 17 18 * bindings/js/JSDOMBinding.cpp: 19 (WebCore::cacheDOMObjectWrapper): Store the hash table key as our weak 20 handle context, so we can use it at destruction time. 21 22 * bindings/js/JSDOMBinding.h: Removed unnecessary include. 23 24 * bindings/js/JSNodeCustom.h: 25 (WebCore::cacheDOMNodeWrapper): Store the hash table key as our weak 26 handle context, so we can use it at destruction time. 27 28 * bindings/js/ScriptWrappable.h: 29 (WebCore::ScriptWrappable::setWrapper): Forward context parameter, to 30 support the above. 31 1 32 2011-04-15 Kenneth Russell <kbr@google.com> 2 33 -
trunk/Source/WebCore/bindings/js/DOMWrapperWorld.cpp
r84029 r84049 189 189 } 190 190 191 void JSNodeHandleOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* )191 void JSNodeHandleOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* context) 192 192 { 193 193 JSNode* jsNode = static_cast<JSNode*>(handle.get().asCell()); 194 uncacheDOMNodeWrapper(m_world, jsNode->impl(), jsNode);194 uncacheDOMNodeWrapper(m_world, static_cast<Node*>(context), jsNode); 195 195 } 196 196 … … 200 200 } 201 201 202 void DOMObjectHandleOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* )202 void DOMObjectHandleOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* context) 203 203 { 204 204 DOMObject* domObject = static_cast<DOMObject*>(handle.get().asCell()); 205 m_world->m_wrappers.remove(domObject);205 uncacheDOMObjectWrapper(m_world, context, domObject); 206 206 } 207 207 -
trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp
r84029 r84049 143 143 void cacheDOMObjectWrapper(DOMWrapperWorld* world, void* objectHandle, DOMObject* wrapper) 144 144 { 145 world->m_wrappers.set(objectHandle, Weak<DOMObject>(*world->globalData(), wrapper, world->domObjectHandleOwner() ));145 world->m_wrappers.set(objectHandle, Weak<DOMObject>(*world->globalData(), wrapper, world->domObjectHandleOwner(), objectHandle)); 146 146 } 147 147 148 148 void uncacheDOMObjectWrapper(DOMWrapperWorld* world, void* objectHandle, DOMObject* wrapper) 149 149 { 150 ASSERT_UNUSED(wrapper, world->m_wrappers. get(objectHandle) == wrapper);150 ASSERT_UNUSED(wrapper, world->m_wrappers.find(objectHandle)->second.get() == wrapper); 151 151 world->m_wrappers.remove(objectHandle); 152 152 } -
trunk/Source/WebCore/bindings/js/JSDOMBinding.h
r84029 r84049 29 29 #include <runtime/Completion.h> 30 30 #include <runtime/Lookup.h> 31 #include <runtime/WeakGCMap.h>32 31 #include <wtf/Forward.h> 33 32 #include <wtf/Noncopyable.h> -
trunk/Source/WebCore/bindings/js/JSNodeCustom.h
r84029 r84049 43 43 ASSERT(wrapper); 44 44 if (world->isNormal()) { 45 node->setWrapper(*world->globalData(), wrapper, world->jsNodeHandleOwner() );45 node->setWrapper(*world->globalData(), wrapper, world->jsNodeHandleOwner(), node); 46 46 return; 47 47 } -
trunk/Source/WebCore/bindings/js/ScriptWrappable.h
r83990 r84049 44 44 } 45 45 46 void setWrapper(JSC::JSGlobalData& globalData, DOMObject* wrapper, JSC::WeakHandleOwner* wrapperOwner )46 void setWrapper(JSC::JSGlobalData& globalData, DOMObject* wrapper, JSC::WeakHandleOwner* wrapperOwner, void* context) 47 47 { 48 m_wrapper.set(globalData, wrapper, wrapperOwner );48 m_wrapper.set(globalData, wrapper, wrapperOwner, context); 49 49 } 50 50
Note: See TracChangeset
for help on using the changeset viewer.