summaryrefslogtreecommitdiffstats
path: root/WebCore/inspector/JavaScriptDebugServer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/inspector/JavaScriptDebugServer.cpp')
-rw-r--r--WebCore/inspector/JavaScriptDebugServer.cpp56
1 files changed, 31 insertions, 25 deletions
diff --git a/WebCore/inspector/JavaScriptDebugServer.cpp b/WebCore/inspector/JavaScriptDebugServer.cpp
index ed9ae85..05dca70 100644
--- a/WebCore/inspector/JavaScriptDebugServer.cpp
+++ b/WebCore/inspector/JavaScriptDebugServer.cpp
@@ -39,7 +39,6 @@
#include "JavaScriptDebugListener.h"
#include "Page.h"
#include "PageGroup.h"
-#include "PausedTimeouts.h"
#include "PluginView.h"
#include "ScrollView.h"
#include "Widget.h"
@@ -47,8 +46,9 @@
#include <runtime/CollectorHeapIterator.h>
#include <debugger/DebuggerCallFrame.h>
#include <runtime/JSLock.h>
-#include <kjs/Parser.h>
+#include <parser/Parser.h>
#include <wtf/MainThread.h>
+#include <wtf/StdLibExtras.h>
#include <wtf/UnusedParam.h>
using namespace JSC;
@@ -59,7 +59,7 @@ typedef JavaScriptDebugServer::ListenerSet ListenerSet;
JavaScriptDebugServer& JavaScriptDebugServer::shared()
{
- static JavaScriptDebugServer server;
+ DEFINE_STATIC_LOCAL(JavaScriptDebugServer, server, ());
return server;
}
@@ -78,7 +78,6 @@ JavaScriptDebugServer::~JavaScriptDebugServer()
{
deleteAllValues(m_pageListenersMap);
deleteAllValues(m_breakpoints);
- deleteAllValues(m_pausedTimeouts);
}
void JavaScriptDebugServer::addListener(JavaScriptDebugListener* listener)
@@ -364,23 +363,26 @@ void JavaScriptDebugServer::setJavaScriptPaused(Frame* frame, bool paused)
frame->script()->setPaused(paused);
- if (JSDOMWindow* window = toJSDOMWindow(frame)) {
- if (paused) {
- OwnPtr<PausedTimeouts> timeouts;
- window->pauseTimeouts(timeouts);
- m_pausedTimeouts.set(frame, timeouts.release());
- } else {
- OwnPtr<PausedTimeouts> timeouts(m_pausedTimeouts.take(frame));
- window->resumeTimeouts(timeouts);
- }
+ if (Document* document = frame->document()) {
+ if (paused)
+ document->suspendActiveDOMObjects();
+ else
+ document->resumeActiveDOMObjects();
}
setJavaScriptPaused(frame->view(), paused);
}
+#if PLATFORM(MAC)
+
+void JavaScriptDebugServer::setJavaScriptPaused(FrameView*, bool)
+{
+}
+
+#else
+
void JavaScriptDebugServer::setJavaScriptPaused(FrameView* view, bool paused)
{
-#if !PLATFORM(MAC)
if (!view)
return;
@@ -394,9 +396,10 @@ void JavaScriptDebugServer::setJavaScriptPaused(FrameView* view, bool paused)
continue;
static_cast<PluginView*>(widget)->setJavaScriptPaused(paused);
}
-#endif
}
+#endif
+
void JavaScriptDebugServer::pauseIfNeeded(Page* page)
{
if (m_paused)
@@ -552,19 +555,19 @@ void JavaScriptDebugServer::recompileAllJSFunctions(Timer<JavaScriptDebugServer>
}
typedef HashMap<RefPtr<FunctionBodyNode>, RefPtr<FunctionBodyNode> > FunctionBodyMap;
- typedef HashSet<SourceProvider*> SourceProviderSet;
+ typedef HashMap<SourceProvider*, ExecState*> SourceProviderMap;
FunctionBodyMap functionBodies;
- SourceProviderSet sourceProviders;
+ SourceProviderMap sourceProviders;
size_t size = functions.size();
for (size_t i = 0; i < size; ++i) {
JSFunction* function = functions[i];
- FunctionBodyNode* oldBody = function->m_body.get();
+ FunctionBodyNode* oldBody = function->body();
pair<FunctionBodyMap::iterator, bool> result = functionBodies.add(oldBody, 0);
if (!result.second) {
- function->m_body = result.first->second;
+ function->setBody(result.first->second.get());
continue;
}
@@ -576,14 +579,17 @@ void JavaScriptDebugServer::recompileAllJSFunctions(Timer<JavaScriptDebugServer>
newBody->finishParsing(oldBody->copyParameters(), oldBody->parameterCount());
result.first->second = newBody;
- function->m_body = newBody.release();
+ function->setBody(newBody.release());
- if (hasListeners()) {
- SourceProvider* provider = sourceCode.provider();
- if (sourceProviders.add(provider).second)
- sourceParsed(exec, SourceCode(provider), -1, 0);
- }
+ if (hasListeners())
+ sourceProviders.add(sourceCode.provider(), exec);
}
+
+ // Call sourceParsed() after reparsing all functions because it will execute
+ // JavaScript in the inspector.
+ SourceProviderMap::const_iterator end = sourceProviders.end();
+ for (SourceProviderMap::const_iterator iter = sourceProviders.begin(); iter != end; ++iter)
+ sourceParsed((*iter).second, SourceCode((*iter).first), -1, 0);
}
void JavaScriptDebugServer::didAddListener(Page* page)