#ifndef PageScriptDebugServer_h
#define PageScriptDebugServer_h
#include "bindings/v8/ScriptDebugServer.h"
#include "bindings/v8/ScriptPreprocessor.h"
#include "wtf/Forward.h"
#include "wtf/RefCounted.h"
namespace WebCore {
class Page;
class ScriptController;
class ScriptPreprocessor;
class ScriptSourceCode;
class PageScriptDebugServer FINAL : public ScriptDebugServer {
WTF_MAKE_NONCOPYABLE(PageScriptDebugServer);
public:
static PageScriptDebugServer& shared();
void addListener(ScriptDebugListener*, Page*);
void removeListener(ScriptDebugListener*, Page*);
class ClientMessageLoop {
public:
virtual ~ClientMessageLoop() { }
virtual void run(Page*) = 0;
virtual void quitNow() = 0;
};
void setClientMessageLoop(PassOwnPtr<ClientMessageLoop>);
virtual void compileScript(ScriptState*, const String& expression, const String& sourceURL, String* scriptId, String* exceptionMessage) OVERRIDE;
virtual void clearCompiledScripts() OVERRIDE;
virtual void runScript(ScriptState*, const String& scriptId, ScriptValue* result, bool* wasThrown, String* exceptionMessage) OVERRIDE;
virtual void setPreprocessorSource(const String&) OVERRIDE;
virtual void preprocessBeforeCompile(const v8::Debug::EventDetails&) OVERRIDE;
virtual PassOwnPtr<ScriptSourceCode> preprocess(LocalFrame*, const ScriptSourceCode&) OVERRIDE;
virtual String preprocessEventListener(LocalFrame*, const String& source, const String& url, const String& functionName) OVERRIDE;
virtual void muteWarningsAndDeprecations() OVERRIDE;
virtual void unmuteWarningsAndDeprecations() OVERRIDE;
private:
PageScriptDebugServer();
virtual ~PageScriptDebugServer() { }
virtual ScriptDebugListener* getDebugListenerForContext(v8::Handle<v8::Context>) OVERRIDE;
virtual void runMessageLoopOnPause(v8::Handle<v8::Context>) OVERRIDE;
virtual void quitMessageLoopOnPause() OVERRIDE;
typedef HashMap<Page*, ScriptDebugListener*> ListenersMap;
ListenersMap m_listenersMap;
OwnPtr<ClientMessageLoop> m_clientMessageLoop;
Page* m_pausedPage;
HashMap<String, String> m_compiledScriptURLs;
OwnPtr<ScriptSourceCode> m_preprocessorSourceCode;
OwnPtr<ScriptPreprocessor> m_scriptPreprocessor;
bool canPreprocess(LocalFrame*);
};
}
#endif