void JavaScriptDebugServer::addListener(JavaScriptDebugListener* listener, Page* page) { ASSERT_ARG(listener, listener); ASSERT_ARG(page, page); pair<PageListenersMap::iterator, bool> result = m_pageListenersMap.add(page, 0); if (result.second) result.first->second = new ListenerSet; ListenerSet* listeners = result.first->second; listeners->add(listener); didAddListener(page); }
void JavaScriptDebugServer::addListener(JavaScriptDebugListener* listener, Page* page) { ASSERT_ARG(page, page); if (!hasListeners()) Page::setDebuggerForAllPages(this); pair<PageListenersMap::iterator, bool> result = m_pageListenersMap.add(page, 0); if (result.second) result.first->second = new ListenerSet; ListenerSet* listeners = result.first->second; listeners->add(listener); }
void ScriptDebugServer::dispatchDidSampleProbe(ExecState* exec, int identifier, const Deprecated::ScriptValue& sample) { if (m_callingListeners) return; ListenerSet* listeners = getListenersForGlobalObject(exec->lexicalGlobalObject()); if (!listeners) return; ASSERT(!listeners->isEmpty()); TemporaryChange<bool> change(m_callingListeners, true); Vector<ScriptDebugListener*> listenersCopy; copyToVector(*listeners, listenersCopy); for (auto listener : listenersCopy) listener->didSampleProbe(exec, identifier, m_hitCount, sample); }
void ScriptDebugServer::dispatchBreakpointActionSound(ExecState* exec) { if (m_callingListeners) return; ListenerSet* listeners = getListenersForGlobalObject(exec->lexicalGlobalObject()); if (!listeners) return; ASSERT(!listeners->isEmpty()); TemporaryChange<bool> change(m_callingListeners, true); Vector<ScriptDebugListener*> listenersCopy; copyToVector(*listeners, listenersCopy); for (auto listener : listenersCopy) listener->breakpointActionSound(); }
void ScriptDebugServer::sourceParsed(ExecState* exec, SourceProvider* sourceProvider, int errorLine, const String& errorMessage) { if (m_callingListeners) return; ListenerSet* listeners = getListenersForGlobalObject(exec->lexicalGlobalObject()); if (!listeners) return; ASSERT(!listeners->isEmpty()); TemporaryChange<bool> change(m_callingListeners, true); bool isError = errorLine != -1; if (isError) dispatchFailedToParseSource(*listeners, sourceProvider, errorLine, errorMessage); else dispatchDidParseSource(*listeners, sourceProvider, isContentScript(exec)); }
void JavaScriptDebugServer::removeListener(JavaScriptDebugListener* listener, Page* page) { ASSERT_ARG(listener, listener); ASSERT_ARG(page, page); PageListenersMap::iterator it = m_pageListenersMap.find(page); if (it == m_pageListenersMap.end()) return; ListenerSet* listeners = it->second; listeners->remove(listener); if (listeners->isEmpty()) { m_pageListenersMap.remove(it); delete listeners; } didRemoveListener(page); if (!hasListeners()) didRemoveLastListener(); }
void JavaScriptDebugServer::removeListener(JavaScriptDebugListener* listener, Page* page) { ASSERT_ARG(page, page); PageListenersMap::iterator it = m_pageListenersMap.find(page); if (it == m_pageListenersMap.end()) return; ListenerSet* listeners = it->second; listeners->remove(listener); if (listeners->isEmpty()) { m_pageListenersMap.remove(it); delete listeners; } if (!hasListeners()) { Page::setDebuggerForAllPages(0); m_doneProcessingDebuggerEvents = true; } }