#include <JavaScriptCore/JSContextRef.h>
#include <JavaScriptCore/JSRetainPtr.h>
-#include <JavaScriptCore/JSStringRefCF.h>
+#include <JavaScriptCore/JSStringRefCOM.h>
#include <JavaScriptCore/RetainPtr.h>
#include <WebKit/WebKit.h>
-// FIXME: Some of the below functionality cannot be implemented until the WebScriptDebug Server works on windows.
ServerConnection::ServerConnection()
: m_globalContext(0)
{
// Stack & Variables
-WebScriptCallFrame* ServerConnection::currentFrame() const
+IWebScriptCallFrame* ServerConnection::currentFrame() const
{
return m_currentFrame;
}
}
// IWebScriptDebugListener -----------------------------------
HRESULT STDMETHODCALLTYPE ServerConnection::didLoadMainResourceForDataSource(
- /* [in] */ IWebView* /*view*/,
- /* [in] */ IWebDataSource* /*dataSource*/)
+ /* [in] */ IWebView*,
+ /* [in] */ IWebDataSource* dataSource)
{
+ // Get document source
+ COMPtr<IWebDocumentRepresentation> rep;
+ HRESULT ret = dataSource->representation(&rep);
+ if (FAILED(ret))
+ return ret;
+
+ BOOL canProvideDocumentSource = FALSE;
+ ret = rep->canProvideDocumentSource(&canProvideDocumentSource);
+ if (FAILED(ret))
+ return ret;
+
+ BSTR documentSource = 0;
+ if (canProvideDocumentSource)
+ ret = rep->documentSource(&documentSource);
+
+ if (FAILED(ret) || !documentSource)
+ return ret;
+
+ JSRetainPtr<JSStringRef> documentSourceJS(Adopt, JSStringCreateWithBSTR(documentSource));
+ SysFreeString(documentSource);
+
+ // Get URL
+ COMPtr<IWebURLResponse> response;
+ ret = dataSource->response(&response);
+ if (FAILED(ret))
+ return ret;
+
+ BSTR url = 0;
+ ret = response->URL(&url);
+ if (FAILED(ret))
+ return ret;
+
+ JSRetainPtr<JSStringRef> urlJS(Adopt, JSStringCreateWithBSTR(url));
+ SysFreeString(url);
+
+ DebuggerDocument::updateFileSource(m_globalContext, documentSourceJS.get(), urlJS.get());
+
return S_OK;
}
HRESULT STDMETHODCALLTYPE ServerConnection::didParseSource(
- /* [in] */ IWebView* /*view*/,
- /* [in] */ BSTR /*sourceCode*/,
- /* [in] */ UINT /*baseLineNumber*/,
- /* [in] */ BSTR /*url*/,
- /* [in] */ int /*sourceID*/,
- /* [in] */ IWebFrame* /*forWebFrame*/)
+ /* [in] */ IWebView*,
+ /* [in] */ BSTR sourceCode,
+ /* [in] */ UINT baseLineNumber,
+ /* [in] */ BSTR url,
+ /* [in] */ int sourceID,
+ /* [in] */ IWebFrame* webFrame)
{
+ HRESULT ret = S_OK;
+ if (!m_globalContext || !sourceCode)\r
+ return ret;\r
+\r
+ COMPtr<IWebDataSource> dataSource;\r
+ ret = webFrame->dataSource(&dataSource);\r
+ if (FAILED(ret))\r
+ return ret;\r
+\r
+ COMPtr<IWebURLResponse> response;\r
+ ret = dataSource->response(&response);\r
+ if (FAILED(ret))\r
+ return ret;\r
+\r
+ BSTR responseURL;\r
+ ret = response->URL(&responseURL);\r
+ if (FAILED(ret))\r
+ return ret;\r
+\r
+ BSTR documentSource = 0;\r
+ if (!url || !wcscmp(responseURL, url)) {\r
+ COMPtr<IWebDocumentRepresentation> rep;\r
+ ret = dataSource->representation(&rep);\r
+ if (FAILED(ret))\r
+ return ret;\r
+\r
+ BOOL canProvideDocumentSource;\r
+ rep->canProvideDocumentSource(&canProvideDocumentSource);\r
+ if (FAILED(ret))\r
+ return ret;\r
+\r
+ if (canProvideDocumentSource) {\r
+ ret = rep->documentSource(&documentSource);\r
+ if (FAILED(ret))\r
+ return ret;\r
+ }\r
+\r
+ if (!url) {\r
+ ret = response->URL(&url);\r
+ if (FAILED(ret))\r
+ return ret;\r
+ }\r
+ }\r
+ SysFreeString(responseURL);\r
+\r
+ JSRetainPtr<JSStringRef> sourceJS(Adopt, JSStringCreateWithBSTR(sourceCode));\r
+ JSRetainPtr<JSStringRef> documentSourceJS(Adopt, JSStringCreateWithBSTR(documentSource));\r
+ SysFreeString(documentSource);\r
+ JSRetainPtr<JSStringRef> urlJS(Adopt, JSStringCreateWithBSTR(url));\r
+ JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID);\r
+ JSValueRef baseLineJS = JSValueMakeNumber(m_globalContext, baseLineNumber);\r
+\r
+ DebuggerDocument::didParseScript(m_globalContext, sourceJS.get(), documentSourceJS.get(), urlJS.get(), sidJS, baseLineJS);\r
+
return S_OK;
}
HRESULT STDMETHODCALLTYPE ServerConnection::failedToParseSource(
- /* [in] */ IWebView* /*view*/,
- /* [in] */ BSTR /*sourceCode*/,
- /* [in] */ UINT /*baseLineNumber*/,
- /* [in] */ BSTR /*url*/,
- /* [in] */ BSTR /*error*/,
- /* [in] */ IWebFrame* /*forWebFrame*/)
+ /* [in] */ IWebView*,
+ /* [in] */ BSTR,
+ /* [in] */ UINT,
+ /* [in] */ BSTR,
+ /* [in] */ BSTR,
+ /* [in] */ IWebFrame*)
{
return S_OK;
}
HRESULT STDMETHODCALLTYPE ServerConnection::didEnterCallFrame(
- /* [in] */ IWebView* /*view*/,
- /* [in] */ IWebScriptCallFrame* /*frame*/,
- /* [in] */ int /*sourceID*/,
- /* [in] */ int /*lineNumber*/,
- /* [in] */ IWebFrame* /*forWebFrame*/)
+ /* [in] */ IWebView*,
+ /* [in] */ IWebScriptCallFrame* frame,
+ /* [in] */ int sourceID,
+ /* [in] */ int lineNumber,
+ /* [in] */ IWebFrame*)
{
- return S_OK;
+ HRESULT ret = S_OK;
+ if (!m_globalContext)\r
+ return ret;\r
+\r
+ // FIXME: This won't be relevant until IWebScriptCallFrame is implemented on Windows\r
+ m_currentFrame = frame;\r
+\r
+ JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID);\r
+ JSValueRef linenoJS = JSValueMakeNumber(m_globalContext, lineNumber);\r
+\r
+ DebuggerDocument::didEnterCallFrame(m_globalContext, sidJS, linenoJS);\r
+
+ return ret;
}
HRESULT STDMETHODCALLTYPE ServerConnection::willExecuteStatement(
- /* [in] */ IWebView* /*view*/,
- /* [in] */ IWebScriptCallFrame* /*frame*/,
- /* [in] */ int /*sourceID*/,
- /* [in] */ int /*lineNumber*/,
- /* [in] */ IWebFrame* /*forWebFrame*/)
+ /* [in] */ IWebView*,
+ /* [in] */ IWebScriptCallFrame*,
+ /* [in] */ int sourceID,
+ /* [in] */ int lineNumber,
+ /* [in] */ IWebFrame*)
{
- return S_OK;
+ HRESULT ret = S_OK;
+ if (!m_globalContext)\r
+ return ret;\r
+\r
+ JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID);\r
+ JSValueRef linenoJS = JSValueMakeNumber(m_globalContext, lineNumber);\r
+\r
+ DebuggerDocument::willExecuteStatement(m_globalContext, sidJS, linenoJS);
+ return ret;
}
HRESULT STDMETHODCALLTYPE ServerConnection::willLeaveCallFrame(
- /* [in] */ IWebView* /*view*/,
- /* [in] */ IWebScriptCallFrame* /*frame*/,
- /* [in] */ int /*sourceID*/,
- /* [in] */ int /*lineNumber*/,
- /* [in] */ IWebFrame* /*forWebFrame*/)
+ /* [in] */ IWebView*,
+ /* [in] */ IWebScriptCallFrame* frame,
+ /* [in] */ int sourceID,
+ /* [in] */ int lineNumber,
+ /* [in] */ IWebFrame*)
{
+ HRESULT ret = S_OK;
+ if (!m_globalContext)\r
+ return ret;\r
+\r
+ JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID);\r
+ JSValueRef linenoJS = JSValueMakeNumber(m_globalContext, lineNumber);\r
+\r
+ DebuggerDocument::willLeaveCallFrame(m_globalContext, sidJS, linenoJS);\r
+\r
+ // FIXME: This won't be relevant until IWebScriptCallFrame is implemented on Windows\r
+ m_currentFrame = frame;\r
+
return S_OK;
}
HRESULT STDMETHODCALLTYPE ServerConnection::exceptionWasRaised(
- /* [in] */ IWebView* /*view*/,
- /* [in] */ IWebScriptCallFrame* /*frame*/,
- /* [in] */ int /*sourceID*/,
- /* [in] */ int /*lineNumber*/,
- /* [in] */ IWebFrame* /*forWebFrame*/)
+ /* [in] */ IWebView*,
+ /* [in] */ IWebScriptCallFrame*,
+ /* [in] */ int sourceID,
+ /* [in] */ int lineNumber,
+ /* [in] */ IWebFrame*)
{
- return S_OK;
+ HRESULT ret = S_OK;
+ if (!m_globalContext)\r
+ return ret;\r
+\r
+ JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID);\r
+ JSValueRef linenoJS = JSValueMakeNumber(m_globalContext, lineNumber);\r
+\r
+ DebuggerDocument::exceptionWasRaised(m_globalContext, sidJS, linenoJS);
+
+ return ret;
}