void ScriptGCEvent::addEventListener(ScriptGCEventListener* eventListener) { ASSERT(eventListener); if (eventListeners().isEmpty()) { v8::V8::AddGCPrologueCallback(ScriptGCEvent::gcPrologueCallback); v8::V8::AddGCEpilogueCallback(ScriptGCEvent::gcEpilogueCallback); } eventListeners().append(eventListener); }
void ScriptGCEvent::removeEventListener(ScriptGCEventListener* eventListener) { ASSERT(eventListener); ASSERT(!eventListeners().isEmpty()); size_t i = eventListeners().find(eventListener); ASSERT(i != notFound); eventListeners().remove(i); if (eventListeners().isEmpty()) { v8::V8::RemoveGCPrologueCallback(ScriptGCEvent::gcPrologueCallback); v8::V8::RemoveGCEpilogueCallback(ScriptGCEvent::gcEpilogueCallback); } }
void EventTargetNode::insertedIntoDocument() { if (!eventListeners().isEmpty()) document()->unregisterDisconnectedNodeWithEventListeners(this); Node::insertedIntoDocument(); }
void EventTargetNode::removedFromDocument() { if (!eventListeners().isEmpty()) document()->registerDisconnectedNodeWithEventListeners(this); Node::removedFromDocument(); }
void EventTargetNode::didMoveToNewOwnerDocument() { if (!eventListeners().isEmpty()) document()->registerDisconnectedNodeWithEventListeners(this); Node::didMoveToNewOwnerDocument(); }
void ScriptGCEvent::gcEpilogueCallback(v8::GCType type, v8::GCCallbackFlags flags) { double endTime = WTF::currentTimeMS(); size_t collectedBytes = s_usedHeapSize - getUsedHeapSize(); GCEventListeners listeners(eventListeners()); for (GCEventListeners::iterator i = listeners.begin(); i != listeners.end(); ++i) (*i)->didGC(s_startTime, endTime, collectedBytes); }
EventListener *EventTargetNode::getEventListener(const AtomicString &eventType) { const RegisteredEventListenerVector& listeners = eventListeners(); size_t size = listeners.size(); for (size_t i = 0; i < size; ++i) { const RegisteredEventListener& r = *listeners[i]; if (r.eventType() == eventType) return r.listener(); } return 0; }
EventListener* EventTargetNode::inlineEventListenerForType(const AtomicString& eventType) const { const RegisteredEventListenerVector& listeners = eventListeners(); size_t size = listeners.size(); for (size_t i = 0; i < size; ++i) { const RegisteredEventListener& r = *listeners[i]; if (r.eventType() == eventType && r.listener()->isInline()) return r.listener(); } return 0; }
void EventTargetNode::handleLocalEvents(Event* event, bool useCapture) { if (disabled() && event->isMouseEvent()) return; RegisteredEventListenerVector listenersCopy = eventListeners(); size_t size = listenersCopy.size(); for (size_t i = 0; i < size; ++i) { const RegisteredEventListener& r = *listenersCopy[i]; if (r.eventType() == event->type() && r.useCapture() == useCapture && !r.removed()) r.listener()->handleEvent(event, false); } }
EventTargetNode::~EventTargetNode() { if (!eventListeners().isEmpty() && !inDocument()) document()->unregisterDisconnectedNodeWithEventListeners(this); }