Changeset 38064 in webkit


Ignore:
Timestamp:
Nov 1, 2008 12:21:53 AM (15 years ago)
Author:
ap@webkit.org
Message:

Reviewed by Darin Adler.

https://bugs.webkit.org/show_bug.cgi?id=22001
AtomicStringImpl* keys of event listener maps can outlive their strings

Test: fast/events/destroyed-atomic-string.html

  • dom/MessagePort.cpp: (WebCore::MessagePort::addEventListener): (WebCore::MessagePort::removeEventListener): (WebCore::MessagePort::dispatchEvent):
  • dom/MessagePort.h:
  • loader/appcache/DOMApplicationCache.cpp: (WebCore::DOMApplicationCache::addEventListener): (WebCore::DOMApplicationCache::removeEventListener): (WebCore::DOMApplicationCache::dispatchEvent):
  • loader/appcache/DOMApplicationCache.h:
  • xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::addEventListener): (WebCore::XMLHttpRequest::removeEventListener): (WebCore::XMLHttpRequest::dispatchEvent):
  • xml/XMLHttpRequest.h:
  • xml/XMLHttpRequestUpload.cpp: (WebCore::XMLHttpRequestUpload::addEventListener): (WebCore::XMLHttpRequestUpload::removeEventListener): (WebCore::XMLHttpRequestUpload::dispatchEvent):
  • xml/XMLHttpRequestUpload.h: Changed EventListenersMap to use AtomicString as key (instead of AtomicStringImpl*).
Location:
trunk
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r38015 r38064  
     12008-11-01  Alexey Proskuryakov  <ap@webkit.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=22001
     6        AtomicStringImpl* keys of event listener maps can outlive their strings
     7
     8        * fast/events/destroyed-atomic-string-expected.txt: Added.
     9        * fast/events/destroyed-atomic-string.html: Added.
     10
    1112008-10-30  Justin Garcia  <justin.garcia@apple.com>
    212
  • trunk/WebCore/ChangeLog

    r38063 r38064  
     12008-11-01  Alexey Proskuryakov  <ap@webkit.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=22001
     6        AtomicStringImpl* keys of event listener maps can outlive their strings
     7
     8        Test: fast/events/destroyed-atomic-string.html
     9
     10        * dom/MessagePort.cpp:
     11        (WebCore::MessagePort::addEventListener):
     12        (WebCore::MessagePort::removeEventListener):
     13        (WebCore::MessagePort::dispatchEvent):
     14        * dom/MessagePort.h:
     15        * loader/appcache/DOMApplicationCache.cpp:
     16        (WebCore::DOMApplicationCache::addEventListener):
     17        (WebCore::DOMApplicationCache::removeEventListener):
     18        (WebCore::DOMApplicationCache::dispatchEvent):
     19        * loader/appcache/DOMApplicationCache.h:
     20        * xml/XMLHttpRequest.cpp:
     21        (WebCore::XMLHttpRequest::addEventListener):
     22        (WebCore::XMLHttpRequest::removeEventListener):
     23        (WebCore::XMLHttpRequest::dispatchEvent):
     24        * xml/XMLHttpRequest.h:
     25        * xml/XMLHttpRequestUpload.cpp:
     26        (WebCore::XMLHttpRequestUpload::addEventListener):
     27        (WebCore::XMLHttpRequestUpload::removeEventListener):
     28        (WebCore::XMLHttpRequestUpload::dispatchEvent):
     29        * xml/XMLHttpRequestUpload.h:
     30        Changed EventListenersMap to use AtomicString as key (instead of AtomicStringImpl*).
     31
    1322008-10-31  Alexey Proskuryakov  <ap@webkit.org>
    233
  • trunk/WebCore/dom/MessagePort.cpp

    r38063 r38064  
    253253void MessagePort::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> eventListener, bool)
    254254{
    255     EventListenersMap::iterator iter = m_eventListeners.find(eventType.impl());
     255    EventListenersMap::iterator iter = m_eventListeners.find(eventType);
    256256    if (iter == m_eventListeners.end()) {
    257257        ListenerVector listeners;
    258258        listeners.append(eventListener);
    259         m_eventListeners.add(eventType.impl(), listeners);
     259        m_eventListeners.add(eventType, listeners);
    260260    } else {
    261261        ListenerVector& listeners = iter->second;
     
    266266       
    267267        listeners.append(eventListener);
    268         m_eventListeners.add(eventType.impl(), listeners);
     268        m_eventListeners.add(eventType, listeners);
    269269    }   
    270270}
     
    272272void MessagePort::removeEventListener(const AtomicString& eventType, EventListener* eventListener, bool useCapture)
    273273{
    274     EventListenersMap::iterator iter = m_eventListeners.find(eventType.impl());
     274    EventListenersMap::iterator iter = m_eventListeners.find(eventType);
    275275    if (iter == m_eventListeners.end())
    276276        return;
     
    292292    }
    293293   
    294     ListenerVector listenersCopy = m_eventListeners.get(event->type().impl());
     294    ListenerVector listenersCopy = m_eventListeners.get(event->type());
    295295    for (ListenerVector::const_iterator listenerIter = listenersCopy.begin(); listenerIter != listenersCopy.end(); ++listenerIter) {
    296296        event->setTarget(this);
  • trunk/WebCore/dom/MessagePort.h

    r38063 r38064  
    2828#define MessagePort_h
    2929
     30#include "AtomicStringHash.h"
    3031#include "EventListener.h"
    3132#include "EventTarget.h"
     
    8081
    8182        typedef Vector<RefPtr<EventListener> > ListenerVector;
    82         typedef HashMap<AtomicStringImpl*, ListenerVector> EventListenersMap;
     83        typedef HashMap<AtomicString, ListenerVector> EventListenersMap;
    8384        EventListenersMap& eventListeners() { return m_eventListeners; }
    8485
  • trunk/WebCore/loader/appcache/DOMApplicationCache.cpp

    r38063 r38064  
    184184void DOMApplicationCache::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> eventListener, bool)
    185185{
    186     EventListenersMap::iterator iter = m_eventListeners.find(eventType.impl());
     186    EventListenersMap::iterator iter = m_eventListeners.find(eventType);
    187187    if (iter == m_eventListeners.end()) {
    188188        ListenerVector listeners;
    189189        listeners.append(eventListener);
    190         m_eventListeners.add(eventType.impl(), listeners);
     190        m_eventListeners.add(eventType, listeners);
    191191    } else {
    192192        ListenerVector& listeners = iter->second;
     
    197197       
    198198        listeners.append(eventListener);
    199         m_eventListeners.add(eventType.impl(), listeners);
     199        m_eventListeners.add(eventType, listeners);
    200200    }   
    201201}
     
    203203void DOMApplicationCache::removeEventListener(const AtomicString& eventType, EventListener* eventListener, bool useCapture)
    204204{
    205     EventListenersMap::iterator iter = m_eventListeners.find(eventType.impl());
     205    EventListenersMap::iterator iter = m_eventListeners.find(eventType);
    206206    if (iter == m_eventListeners.end())
    207207        return;
     
    223223    }
    224224   
    225     ListenerVector listenersCopy = m_eventListeners.get(event->type().impl());
     225    ListenerVector listenersCopy = m_eventListeners.get(event->type());
    226226    for (ListenerVector::const_iterator listenerIter = listenersCopy.begin(); listenerIter != listenersCopy.end(); ++listenerIter) {
    227227        event->setTarget(this);
  • trunk/WebCore/loader/appcache/DOMApplicationCache.h

    r38063 r38064  
    2929#if ENABLE(OFFLINE_WEB_APPLICATIONS)
    3030
    31 #include <wtf/RefCounted.h>
     31#include "AtomicStringHash.h"
    3232#include "EventTarget.h"
    33 
    3433#include "EventListener.h"
    3534#include <wtf/HashMap.h>
    3635#include <wtf/PassRefPtr.h>
     36#include <wtf/RefCounted.h>
    3737#include <wtf/Vector.h>
    3838
     
    7373   
    7474    typedef Vector<RefPtr<EventListener> > ListenerVector;
    75     typedef HashMap<AtomicStringImpl*, ListenerVector> EventListenersMap;
     75    typedef HashMap<AtomicString, ListenerVector> EventListenersMap;
    7676    EventListenersMap& eventListeners() { return m_eventListeners; }
    7777
  • trunk/WebCore/xml/XMLHttpRequest.cpp

    r38063 r38064  
    242242void XMLHttpRequest::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> eventListener, bool)
    243243{
    244     EventListenersMap::iterator iter = m_eventListeners.find(eventType.impl());
     244    EventListenersMap::iterator iter = m_eventListeners.find(eventType);
    245245    if (iter == m_eventListeners.end()) {
    246246        ListenerVector listeners;
    247247        listeners.append(eventListener);
    248         m_eventListeners.add(eventType.impl(), listeners);
     248        m_eventListeners.add(eventType, listeners);
    249249    } else {
    250250        ListenerVector& listeners = iter->second;
     
    254254       
    255255        listeners.append(eventListener);
    256         m_eventListeners.add(eventType.impl(), listeners);
     256        m_eventListeners.add(eventType, listeners);
    257257    }
    258258}
     
    260260void XMLHttpRequest::removeEventListener(const AtomicString& eventType, EventListener* eventListener, bool)
    261261{
    262     EventListenersMap::iterator iter = m_eventListeners.find(eventType.impl());
     262    EventListenersMap::iterator iter = m_eventListeners.find(eventType);
    263263    if (iter == m_eventListeners.end())
    264264        return;
     
    280280    }
    281281
    282     ListenerVector listenersCopy = m_eventListeners.get(evt->type().impl());
     282    ListenerVector listenersCopy = m_eventListeners.get(evt->type());
    283283    for (ListenerVector::const_iterator listenerIter = listenersCopy.begin(); listenerIter != listenersCopy.end(); ++listenerIter) {
    284284        evt->setTarget(this);
  • trunk/WebCore/xml/XMLHttpRequest.h

    r38063 r38064  
    2222
    2323#include "ActiveDOMObject.h"
     24#include "AtomicStringHash.h"
    2425#include "EventListener.h"
    2526#include "EventTarget.h"
     
    9899
    99100    typedef Vector<RefPtr<EventListener> > ListenerVector;
    100     typedef HashMap<AtomicStringImpl*, ListenerVector> EventListenersMap;
     101    typedef HashMap<AtomicString, ListenerVector> EventListenersMap;
    101102
    102103    // useCapture is not used, even for add/remove pairing (for Firefox compatibility).
  • trunk/WebCore/xml/XMLHttpRequestUpload.cpp

    r38063 r38064  
    5555void XMLHttpRequestUpload::addEventListener(const AtomicString& eventType, PassRefPtr<EventListener> eventListener, bool)
    5656{
    57     EventListenersMap::iterator iter = m_eventListeners.find(eventType.impl());
     57    EventListenersMap::iterator iter = m_eventListeners.find(eventType);
    5858    if (iter == m_eventListeners.end()) {
    5959        ListenerVector listeners;
    6060        listeners.append(eventListener);
    61         m_eventListeners.add(eventType.impl(), listeners);
     61        m_eventListeners.add(eventType, listeners);
    6262    } else {
    6363        ListenerVector& listeners = iter->second;
     
    6868       
    6969        listeners.append(eventListener);
    70         m_eventListeners.add(eventType.impl(), listeners);
     70        m_eventListeners.add(eventType, listeners);
    7171    }
    7272}
     
    7474void XMLHttpRequestUpload::removeEventListener(const AtomicString& eventType, EventListener* eventListener, bool)
    7575{
    76     EventListenersMap::iterator iter = m_eventListeners.find(eventType.impl());
     76    EventListenersMap::iterator iter = m_eventListeners.find(eventType);
    7777    if (iter == m_eventListeners.end())
    7878        return;
     
    9595    }
    9696
    97     ListenerVector listenersCopy = m_eventListeners.get(evt->type().impl());
     97    ListenerVector listenersCopy = m_eventListeners.get(evt->type());
    9898    for (ListenerVector::const_iterator listenerIter = listenersCopy.begin(); listenerIter != listenersCopy.end(); ++listenerIter) {
    9999        evt->setTarget(this);
  • trunk/WebCore/xml/XMLHttpRequestUpload.h

    r38063 r38064  
    2727#define XMLHttpRequestUpload_h
    2828
     29#include "AtomicStringHash.h"
    2930#include "EventListener.h"
    3031#include "EventTarget.h"
     
    7778
    7879        typedef Vector<RefPtr<EventListener> > ListenerVector;
    79         typedef HashMap<AtomicStringImpl*, ListenerVector> EventListenersMap;
     80        typedef HashMap<AtomicString, ListenerVector> EventListenersMap;
    8081
    8182        virtual void addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture);
Note: See TracChangeset for help on using the changeset viewer.