Пример #1
0
void EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget(EventTarget* target)
{
    assertNoActiveIterators();

    for (auto& entry : m_entries)
        copyListenersNotCreatedFromMarkupToTarget(entry.first, *entry.second, target);
}
Пример #2
0
void EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget(EventTarget* target)
{
    assertNoActiveIterators();

    for (unsigned i = 0; i < m_entries.size(); ++i)
        copyListenersNotCreatedFromMarkupToTarget(m_entries[i].first, m_entries[i].second.get(), target);
}
Пример #3
0
void EventListenerMap::clear()
{
    auto locker = holdLock(m_lock);
    
    assertNoActiveIterators();

    m_entries.clear();
}
Пример #4
0
EventListenerVector* EventListenerMap::find(const AtomicString& eventType) const
{
    assertNoActiveIterators();

    for (auto& entry : m_entries) {
        if (entry.first == eventType)
            return entry.second.get();
    }

    return nullptr;
}
Пример #5
0
EventListenerVector* EventListenerMap::find(const AtomicString& eventType)
{
    assertNoActiveIterators();

    for (unsigned i = 0; i < m_entries.size(); ++i) {
        if (m_entries[i].first == eventType)
            return m_entries[i].second.get();
    }

    return nullptr;
}
Пример #6
0
void EventListenerMap::replace(const AtomicString& eventType, EventListener& oldListener, Ref<EventListener>&& newListener, const RegisteredEventListener::Options& options)
{
    assertNoActiveIterators();

    auto* listeners = find(eventType);
    ASSERT(listeners);
    size_t index = findListener(*listeners, oldListener, options.capture);
    ASSERT(index != notFound);
    auto& registeredListener = listeners->at(index);
    registeredListener->markAsRemoved();
    registeredListener = RegisteredEventListener::create(WTFMove(newListener), options);
}
Пример #7
0
bool EventListenerMap::add(const AtomicString& eventType, PassRefPtr<EventListener> listener, bool useCapture)
{
    assertNoActiveIterators();

    for (unsigned i = 0; i < m_entries.size(); ++i) {
        if (m_entries[i].first == eventType)
            return addListenerToVector(m_entries[i].second.get(), listener, useCapture);
    }

    m_entries.append(std::make_pair(eventType, std::make_unique<EventListenerVector>()));
    return addListenerToVector(m_entries.last().second.get(), listener, useCapture);
}
Пример #8
0
void EventListenerMap::removeFirstEventListenerCreatedFromMarkup(const AtomicString& eventType)
{
    assertNoActiveIterators();

    for (unsigned i = 0; i < m_entries.size(); ++i) {
        if (m_entries[i].first == eventType) {
            removeFirstListenerCreatedFromMarkup(*m_entries[i].second);
            if (m_entries[i].second->isEmpty())
                m_entries.remove(i);
            return;
        }
    }
}
Пример #9
0
bool EventListenerMap::remove(const AtomicString& eventType, EventListener& listener, bool useCapture)
{
    assertNoActiveIterators();

    for (unsigned i = 0; i < m_entries.size(); ++i) {
        if (m_entries[i].first == eventType) {
            bool wasRemoved = removeListenerFromVector(*m_entries[i].second, listener, useCapture);
            if (m_entries[i].second->isEmpty())
                m_entries.remove(i);
            return wasRemoved;
        }
    }

    return false;
}
Пример #10
0
bool EventListenerMap::add(const AtomicString& eventType, Ref<EventListener>&& listener, const RegisteredEventListener::Options& options)
{
    assertNoActiveIterators();

    if (auto* listeners = find(eventType)) {
        if (findListener(*listeners, listener, options.capture) != notFound)
            return false; // Duplicate listener.
        listeners->append(RegisteredEventListener::create(WTFMove(listener), options));
        return true;
    }

    auto listeners = std::make_unique<EventListenerVector>();
    listeners->uncheckedAppend(RegisteredEventListener::create(WTFMove(listener), options));
    m_entries.append({ eventType, WTFMove(listeners) });
    return true;
}
Пример #11
0
void EventListenerMap::clear()
{
    assertNoActiveIterators();

    m_entries.clear();
}