From 2bdfa5bc502f5506ff22ccdead82f923823e5a66 Mon Sep 17 00:00:00 2001 From: kmccullo Date: Sat, 27 Oct 2007 01:38:57 +0000 Subject: [PATCH] Reviewed by Adam. - Implemented the WebScriptDebugListener functions now that the WebScriptDebugServer exists * Drosera/win/ServerConnection.cpp: Implemented WebScriptDebugListener functions. (ServerConnection::currentFrame): (ServerConnection::didLoadMainResourceForDataSource): (ServerConnection::didParseSource): (ServerConnection::failedToParseSource): (ServerConnection::didEnterCallFrame): (ServerConnection::willExecuteStatement): (ServerConnection::willLeaveCallFrame): (ServerConnection::exceptionWasRaised): * Drosera/win/ServerConnection.h: Removed unused arguments from the members arguments list. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27136 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- WebKitTools/ChangeLog | 20 ++ WebKitTools/Drosera/win/ServerConnection.cpp | 211 +++++++++++++++---- WebKitTools/Drosera/win/ServerConnection.h | 37 ++-- 3 files changed, 210 insertions(+), 58 deletions(-) diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog index ed2858b6f32f..074121db0d5f 100644 --- a/WebKitTools/ChangeLog +++ b/WebKitTools/ChangeLog @@ -1,3 +1,23 @@ +2007-10-26 Kevin McCullough + + Reviewed by Adam. + + - Implemented the WebScriptDebugListener functions now that the + WebScriptDebugServer exists + + * Drosera/win/ServerConnection.cpp: Implemented WebScriptDebugListener + functions. + (ServerConnection::currentFrame): + (ServerConnection::didLoadMainResourceForDataSource): + (ServerConnection::didParseSource): + (ServerConnection::failedToParseSource): + (ServerConnection::didEnterCallFrame): + (ServerConnection::willExecuteStatement): + (ServerConnection::willLeaveCallFrame): + (ServerConnection::exceptionWasRaised): + * Drosera/win/ServerConnection.h: Removed unused arguments from the + members arguments list. + 2007-10-26 David Kilzer prepare-ChangeLog and update-webkit create needless ChangeLog conflicts diff --git a/WebKitTools/Drosera/win/ServerConnection.cpp b/WebKitTools/Drosera/win/ServerConnection.cpp index 5a7242f2df39..893888312226 100644 --- a/WebKitTools/Drosera/win/ServerConnection.cpp +++ b/WebKitTools/Drosera/win/ServerConnection.cpp @@ -34,11 +34,10 @@ #include #include -#include +#include #include #include -// FIXME: Some of the below functionality cannot be implemented until the WebScriptDebug Server works on windows. ServerConnection::ServerConnection() : m_globalContext(0) { @@ -95,7 +94,7 @@ void ServerConnection::serverConnectionDidDie() // Stack & Variables -WebScriptCallFrame* ServerConnection::currentFrame() const +IWebScriptCallFrame* ServerConnection::currentFrame() const { return m_currentFrame; } @@ -129,70 +128,202 @@ ULONG STDMETHODCALLTYPE ServerConnection::Release(void) } // IWebScriptDebugListener ----------------------------------- HRESULT STDMETHODCALLTYPE ServerConnection::didLoadMainResourceForDataSource( - /* [in] */ IWebView* /*view*/, - /* [in] */ IWebDataSource* /*dataSource*/) + /* [in] */ IWebView*, + /* [in] */ IWebDataSource* dataSource) { + // Get document source + COMPtr 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 documentSourceJS(Adopt, JSStringCreateWithBSTR(documentSource)); + SysFreeString(documentSource); + + // Get URL + COMPtr response; + ret = dataSource->response(&response); + if (FAILED(ret)) + return ret; + + BSTR url = 0; + ret = response->URL(&url); + if (FAILED(ret)) + return ret; + + JSRetainPtr 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) + return ret; + + COMPtr dataSource; + ret = webFrame->dataSource(&dataSource); + if (FAILED(ret)) + return ret; + + COMPtr response; + ret = dataSource->response(&response); + if (FAILED(ret)) + return ret; + + BSTR responseURL; + ret = response->URL(&responseURL); + if (FAILED(ret)) + return ret; + + BSTR documentSource = 0; + if (!url || !wcscmp(responseURL, url)) { + COMPtr rep; + ret = dataSource->representation(&rep); + if (FAILED(ret)) + return ret; + + BOOL canProvideDocumentSource; + rep->canProvideDocumentSource(&canProvideDocumentSource); + if (FAILED(ret)) + return ret; + + if (canProvideDocumentSource) { + ret = rep->documentSource(&documentSource); + if (FAILED(ret)) + return ret; + } + + if (!url) { + ret = response->URL(&url); + if (FAILED(ret)) + return ret; + } + } + SysFreeString(responseURL); + + JSRetainPtr sourceJS(Adopt, JSStringCreateWithBSTR(sourceCode)); + JSRetainPtr documentSourceJS(Adopt, JSStringCreateWithBSTR(documentSource)); + SysFreeString(documentSource); + JSRetainPtr urlJS(Adopt, JSStringCreateWithBSTR(url)); + JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID); + JSValueRef baseLineJS = JSValueMakeNumber(m_globalContext, baseLineNumber); + + DebuggerDocument::didParseScript(m_globalContext, sourceJS.get(), documentSourceJS.get(), urlJS.get(), sidJS, baseLineJS); + 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) + return ret; + + // FIXME: This won't be relevant until IWebScriptCallFrame is implemented on Windows + m_currentFrame = frame; + + JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID); + JSValueRef linenoJS = JSValueMakeNumber(m_globalContext, lineNumber); + + DebuggerDocument::didEnterCallFrame(m_globalContext, sidJS, linenoJS); + + 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) + return ret; + + JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID); + JSValueRef linenoJS = JSValueMakeNumber(m_globalContext, lineNumber); + + 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) + return ret; + + JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID); + JSValueRef linenoJS = JSValueMakeNumber(m_globalContext, lineNumber); + + DebuggerDocument::willLeaveCallFrame(m_globalContext, sidJS, linenoJS); + + // FIXME: This won't be relevant until IWebScriptCallFrame is implemented on Windows + m_currentFrame = frame; + 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) + return ret; + + JSValueRef sidJS = JSValueMakeNumber(m_globalContext, sourceID); + JSValueRef linenoJS = JSValueMakeNumber(m_globalContext, lineNumber); + + DebuggerDocument::exceptionWasRaised(m_globalContext, sidJS, linenoJS); + + return ret; } diff --git a/WebKitTools/Drosera/win/ServerConnection.h b/WebKitTools/Drosera/win/ServerConnection.h index 2beea4a22ca1..4b6bb3ac385d 100644 --- a/WebKitTools/Drosera/win/ServerConnection.h +++ b/WebKitTools/Drosera/win/ServerConnection.h @@ -36,7 +36,7 @@ #include class DebuggerClient; -class WebScriptCallFrame; +interface IWebScriptCallFrame; typedef struct OpaqueJSContext* JSGlobalContextRef; @@ -52,7 +52,7 @@ public: void applicationTerminating(); void serverConnectionDidDie(); - WebScriptCallFrame* currentFrame() const; + IWebScriptCallFrame* currentFrame() const; // IUnknown HRESULT STDMETHODCALLTYPE QueryInterface( @@ -64,57 +64,58 @@ public: // IWebScriptDebugListener HRESULT STDMETHODCALLTYPE didLoadMainResourceForDataSource( - /* [in] */ IWebView* view, + /* [in] */ IWebView*, /* [in] */ IWebDataSource* dataSource); HRESULT STDMETHODCALLTYPE didParseSource( - /* [in] */ IWebView* view, + /* [in] */ IWebView*, /* [in] */ BSTR sourceCode, /* [in] */ UINT baseLineNumber, /* [in] */ BSTR url, /* [in] */ int sourceID, - /* [in] */ IWebFrame* forWebFrame); + /* [in] */ IWebFrame* webFrame); HRESULT STDMETHODCALLTYPE failedToParseSource( - /* [in] */ IWebView* view, + /* [in] */ IWebView*, /* [in] */ BSTR sourceCode, /* [in] */ UINT baseLineNumber, /* [in] */ BSTR url, /* [in] */ BSTR error, - /* [in] */ IWebFrame* forWebFrame); + /* [in] */ IWebFrame*); HRESULT STDMETHODCALLTYPE didEnterCallFrame( - /* [in] */ IWebView* view, + /* [in] */ IWebView*, /* [in] */ IWebScriptCallFrame* frame, /* [in] */ int sourceID, /* [in] */ int lineNumber, - /* [in] */ IWebFrame* forWebFrame); + /* [in] */ IWebFrame*); HRESULT STDMETHODCALLTYPE willExecuteStatement( - /* [in] */ IWebView* view, - /* [in] */ IWebScriptCallFrame* frame, + /* [in] */ IWebView*, + /* [in] */ IWebScriptCallFrame*, /* [in] */ int sourceID, /* [in] */ int lineNumber, - /* [in] */ IWebFrame* forWebFrame); + /* [in] */ IWebFrame*); HRESULT STDMETHODCALLTYPE willLeaveCallFrame( - /* [in] */ IWebView* view, + /* [in] */ IWebView*, /* [in] */ IWebScriptCallFrame* frame, /* [in] */ int sourceID, /* [in] */ int lineNumber, - /* [in] */ IWebFrame* forWebFrame); + /* [in] */ IWebFrame*); HRESULT STDMETHODCALLTYPE exceptionWasRaised( - /* [in] */ IWebView* view, - /* [in] */ IWebScriptCallFrame* frame, + /* [in] */ IWebView*, + /* [in] */ IWebScriptCallFrame*, /* [in] */ int sourceID, /* [in] */ int lineNumber, - /* [in] */ IWebFrame* forWebFrame); + /* [in] */ IWebFrame*); private: std::wstring m_currentServerName; - WebScriptCallFrame* m_currentFrame; + // FIXME: make this a COMPtr when the Interface exists and the destructor can be called. + IWebScriptCallFrame* m_currentFrame; COMPtr m_server; JSGlobalContextRef m_globalContext; }; -- 2.36.0