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::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::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; } }