WebKitTools:
authorkmccullo <kmccullo@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 24 Oct 2007 23:00:26 +0000 (23:00 +0000)
committerkmccullo <kmccullo@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 24 Oct 2007 23:00:26 +0000 (23:00 +0000)
        Reviewed by Sam, Steve and Darin.

        - Stubbed out the WebScriptDebugListener functionality in the Server
        Connection class to prepare it for receiving those callbacks.
        - Also I changed the instantiation of DebuggerClient, DebuggerDocument
        and the ServerConnection to not need to be initialized with a server
        name, since that is not the way we connect to the WebKit server.

        * Drosera/DebuggerDocument.cpp: Fixed a bug where I was always logging
        no exception.  Now it only loggs when there is an exception
        (DebuggerDocument::willExecuteStatement):
        (DebuggerDocument::didEnterCallFrame):
        (DebuggerDocument::willLeaveCallFrame):
        (DebuggerDocument::windowScriptObjectAvailable):
        (DebuggerDocument::callFunctionOnObject):
        * Drosera/win/DebuggerClient.cpp: No longer needs the ServerConnection
        to be instantiated with a server's name.
        (DebuggerClient::DebuggerClient):
        (DebuggerClient::didFinishLoadForFrame):
        * Drosera/win/DebuggerClient.h: Removed unsued variable.
        * Drosera/win/Drosera.cpp: Client no longer needs to be initialized with
        a server name.
        (Drosera::init):
        (Drosera::initServer):
        * Drosera/win/Drosera.h: No longer need the ServerConnection to be
        instantiated with a server's name.
        * Drosera/win/ServerConnection.cpp:
        (ServerConnection::ServerConnection): No longer needs a server name
        (ServerConnection::~ServerConnection): Only release the global context
        if there is one.
        (ServerConnection::serverConnectionDidDie): Stub for
        IWebScriptDebugListener
        (ServerConnection::QueryInterface): ditto
        (ServerConnection::AddRef): ditto
        (ServerConnection::Release): ditto
        (ServerConnection::didLoadMainResourceForDataSource): ditto
        (ServerConnection::didParseSource): ditto
        (ServerConnection::failedToParseSource): ditto
        (ServerConnection::didEnterCallFrame): ditto
        (ServerConnection::willExecuteStatement): ditto
        (ServerConnection::willLeaveCallFrame): ditto
        (ServerConnection::exceptionWasRaised): ditto
        * Drosera/win/ServerConnection.h: Stubbed out the
        IWebScriptDebugListener functions, and this class no longer needs to be
        instantiated with a server name.

win:

        Reviewed by Sam, Steve and Darin.

        - Added stubs for what will be neede to let Drosera attach to the
        WebKit process and debug it.

        * Interfaces/IWebScriptCallFrame.idl: Added.
        * Interfaces/IWebScriptDebugListener.idl: Added.
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27003 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
WebKit/win/ChangeLog
WebKit/win/Interfaces/IWebScriptCallFrame.idl [new file with mode: 0644]
WebKit/win/Interfaces/IWebScriptDebugListener.idl [new file with mode: 0644]
WebKit/win/WebKit.vcproj/Interfaces.vcproj
WebKit/win/WebKit.vcproj/WebKitGUID.vcproj
WebKitTools/ChangeLog
WebKitTools/Drosera/DebuggerDocument.cpp
WebKitTools/Drosera/win/DebuggerClient.cpp
WebKitTools/Drosera/win/DebuggerClient.h
WebKitTools/Drosera/win/Drosera.cpp
WebKitTools/Drosera/win/Drosera.h
WebKitTools/Drosera/win/ServerConnection.cpp
WebKitTools/Drosera/win/ServerConnection.h

index 28f21f95d75e55e90b2121731b7684220093807b..bfa7a68130118e18aa0ff2e4d2a1b031723d3872 100644 (file)
@@ -1,3 +1,16 @@
+2007-10-24  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam, Steve and Darin.
+
+        - Added stubs for what will be neede to let Drosera attach to the
+        WebKit process and debug it.
+
+        * Interfaces/IWebScriptCallFrame.idl: Added.
+        * Interfaces/IWebScriptDebugListener.idl: Added.
+        * Interfaces/WebKit.idl:
+        * WebKit.vcproj/Interfaces.vcproj:
+        * WebKit.vcproj/WebKitGUID.vcproj:
+
 2007-10-23  Adam Roben  <aroben@apple.com>
 
         Move safe file creation code to WebCore
diff --git a/WebKit/win/Interfaces/IWebScriptCallFrame.idl b/WebKit/win/Interfaces/IWebScriptCallFrame.idl
new file mode 100644 (file)
index 0000000..216bb33
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer. 
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution. 
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission. 
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+cpp_quote("/*")
+cpp_quote(" * Copyright (C) 2007 Apple Inc.  All rights reserved.")
+cpp_quote(" *")
+cpp_quote(" * Redistribution and use in source and binary forms, with or without")
+cpp_quote(" * modification, are permitted provided that the following conditions")
+cpp_quote(" * are met:")
+cpp_quote(" * 1. Redistributions of source code must retain the above copyright")
+cpp_quote(" *    notice, this list of conditions and the following disclaimer.")
+cpp_quote(" * 2. Redistributions in binary form must reproduce the above copyright")
+cpp_quote(" *    notice, this list of conditions and the following disclaimer in the")
+cpp_quote(" *    documentation and/or other materials provided with the distribution.")
+cpp_quote(" * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of")
+cpp_quote(" *     its contributors may be used to endorse or promote products derived")
+cpp_quote(" *     from this software without specific prior written permission.")
+cpp_quote(" *")
+cpp_quote(" * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY")
+cpp_quote(" * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE")
+cpp_quote(" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR")
+cpp_quote(" * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR")
+cpp_quote(" * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,")
+cpp_quote(" * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,")
+cpp_quote(" * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR")
+cpp_quote(" * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY")
+cpp_quote(" * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT")
+cpp_quote(" * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE")
+cpp_quote(" * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ")
+cpp_quote(" */")
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+    object,
+    oleautomation,
+    uuid(029D0676-162A-4140-8917-9574E09F66EB),
+    pointer_default(unique)
+]
+interface IWebScriptCallFrame : IUnknown
+{
+}
diff --git a/WebKit/win/Interfaces/IWebScriptDebugListener.idl b/WebKit/win/Interfaces/IWebScriptDebugListener.idl
new file mode 100644 (file)
index 0000000..1aa28f0
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer. 
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution. 
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission. 
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+cpp_quote("/*")
+cpp_quote(" * Copyright (C) 2007 Apple Inc.  All rights reserved.")
+cpp_quote(" *")
+cpp_quote(" * Redistribution and use in source and binary forms, with or without")
+cpp_quote(" * modification, are permitted provided that the following conditions")
+cpp_quote(" * are met:")
+cpp_quote(" * 1. Redistributions of source code must retain the above copyright")
+cpp_quote(" *    notice, this list of conditions and the following disclaimer.")
+cpp_quote(" * 2. Redistributions in binary form must reproduce the above copyright")
+cpp_quote(" *    notice, this list of conditions and the following disclaimer in the")
+cpp_quote(" *    documentation and/or other materials provided with the distribution.")
+cpp_quote(" * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of")
+cpp_quote(" *     its contributors may be used to endorse or promote products derived")
+cpp_quote(" *     from this software without specific prior written permission.")
+cpp_quote(" *")
+cpp_quote(" * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY")
+cpp_quote(" * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE")
+cpp_quote(" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR")
+cpp_quote(" * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR")
+cpp_quote(" * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,")
+cpp_quote(" * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,")
+cpp_quote(" * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR")
+cpp_quote(" * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY")
+cpp_quote(" * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT")
+cpp_quote(" * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE")
+cpp_quote(" * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ")
+cpp_quote(" */")
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+import "IWebScriptCallFrame.idl";
+import "IWebView.idl";
+
+[
+    object,
+    oleautomation,
+    uuid(09612B56-BE17-4867-A441-1C5C4E0F5302),
+    pointer_default(unique)
+]
+interface IWebScriptDebugListener : IUnknown
+{
+    HRESULT didLoadMainResourceForDataSource([in] IWebView* view, [in] IWebDataSource* dataSource);
+    HRESULT didParseSource([in] IWebView* view, [in] BSTR sourceCode, [in] UINT baseLineNumber, [in] BSTR url, [in] int sourceID, [in] IWebFrame* forWebFrame);
+    HRESULT failedToParseSource([in] IWebView* view, [in] BSTR sourceCode, [in] UINT baseLineNumber, [in] BSTR url, [in] BSTR error, [in] IWebFrame* forWebFrame);
+    HRESULT didEnterCallFrame([in] IWebView* view, [in] IWebScriptCallFrame* frame, [in] int sourceID, [in] int lineNumber, [in] IWebFrame* forWebFrame);
+    HRESULT willExecuteStatement([in] IWebView* view, [in] IWebScriptCallFrame* frame, [in] int sourceID, [in] int lineNumber, [in] IWebFrame* forWebFrame);
+    HRESULT willLeaveCallFrame([in] IWebView* view, [in] IWebScriptCallFrame* frame, [in] int sourceID, [in] int lineNumber, [in] IWebFrame* forWebFrame);
+    HRESULT exceptionWasRaised([in] IWebView* view, [in] IWebScriptCallFrame* frame, [in] int sourceID, [in] int lineNumber, [in] IWebFrame* forWebFrame);
+}
index 7ecdef87943e81fa963dc89ff82189d62be34fc9..e651a20b7ff104decf2f5aa2b446b2118214788c 100644 (file)
                        RelativePath="..\Interfaces\IWebResourceLoadDelegatePrivate.idl"\r
                        >\r
                </File>\r
+               <File\r
+                       RelativePath="..\Interfaces\IWebScriptCallFrame.idl"\r
+                       >\r
+               </File>\r
+               <File\r
+                       RelativePath="..\Interfaces\IWebScriptDebugListener.idl"\r
+                       >\r
+               </File>\r
                <File\r
                        RelativePath="..\Interfaces\IWebScriptObject.idl"\r
                        >\r
index 058528e41c5122512531957496ad0ccc8d506987..69bc66f7a0375b09720f4a0dbd9d98d0b8ed975a 100644 (file)
                        RelativePath="$(WebKitOutputDir)\obj\WebKit\Interfaces\IWebResourceLoadDelegatePrivate_i.c"\r
                        >\r
                </File>\r
+               <File\r
+                       RelativePath="$(WebKitOutputDir)\obj\WebKit\Interfaces\IWebScriptCallFrame_i.c"\r
+                       >\r
+               </File>\r
+               <File\r
+                       RelativePath="$(WebKitOutputDir)\obj\WebKit\Interfaces\IWebScriptDebugListener_i.c"\r
+                       >\r
+               </File>\r
                <File\r
                        RelativePath="$(WebKitOutputDir)\obj\WebKit\Interfaces\IWebScriptObject_i.c"\r
                        >\r
index 4a2156d38301e962d6ff9ea001a6f273248d0368..a1295f6a6b0cd7031662c1eb2113a59cd6ed94e1 100644 (file)
@@ -1,3 +1,51 @@
+2007-10-24  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam, Steve and Darin.
+
+        - Stubbed out the WebScriptDebugListener functionality in the Server
+        Connection class to prepare it for receiving those callbacks.
+        - Also I changed the instantiation of DebuggerClient, DebuggerDocument
+        and the ServerConnection to not need to be initialized with a server
+        name, since that is not the way we connect to the WebKit server. 
+
+        * Drosera/DebuggerDocument.cpp: Fixed a bug where I was always logging
+        no exception.  Now it only loggs when there is an exception
+        (DebuggerDocument::willExecuteStatement):
+        (DebuggerDocument::didEnterCallFrame):
+        (DebuggerDocument::willLeaveCallFrame):
+        (DebuggerDocument::windowScriptObjectAvailable):
+        (DebuggerDocument::callFunctionOnObject):
+        * Drosera/win/DebuggerClient.cpp: No longer needs the ServerConnection
+        to be instantiated with a server's name.
+        (DebuggerClient::DebuggerClient):
+        (DebuggerClient::didFinishLoadForFrame):
+        * Drosera/win/DebuggerClient.h: Removed unsued variable.
+        * Drosera/win/Drosera.cpp: Client no longer needs to be initialized with
+        a server name.
+        (Drosera::init):
+        (Drosera::initServer):
+        * Drosera/win/Drosera.h: No longer need the ServerConnection to be
+        instantiated with a server's name.
+        * Drosera/win/ServerConnection.cpp: 
+        (ServerConnection::ServerConnection): No longer needs a server name
+        (ServerConnection::~ServerConnection): Only release the global context
+        if there is one.
+        (ServerConnection::serverConnectionDidDie): Stub for
+        IWebScriptDebugListener
+        (ServerConnection::QueryInterface): ditto
+        (ServerConnection::AddRef): ditto
+        (ServerConnection::Release): ditto
+        (ServerConnection::didLoadMainResourceForDataSource): ditto
+        (ServerConnection::didParseSource): ditto
+        (ServerConnection::failedToParseSource): ditto
+        (ServerConnection::didEnterCallFrame): ditto
+        (ServerConnection::willExecuteStatement): ditto
+        (ServerConnection::willLeaveCallFrame): ditto
+        (ServerConnection::exceptionWasRaised): ditto
+        * Drosera/win/ServerConnection.h: Stubbed out the
+        IWebScriptDebugListener functions, and this class no longer needs to be
+        instantiated with a server name.
+
 2007-10-24  Lars Knoll  <lars@trolltech.com>
 
         Reviewed by Simon.
index c29aefa7b3c5dda02335bb126d2c1d091739dfd3..46c6ad4e2251effca0fd41fa28343b74aa9ea769 100644 (file)
@@ -229,7 +229,7 @@ void DebuggerDocument::willExecuteStatement(JSContextRef context, JSValueRef sou
     int argumentsSize = sizeof(arguments)/sizeof(arguments[0]);
 
     DebuggerDocument::callGlobalFunction(context, "willExecuteStatement", argumentsSize, arguments, exception);
-    if (exception)
+    if (*exception)
         logException(context, *exception);
 }
 
@@ -239,7 +239,7 @@ void DebuggerDocument::didEnterCallFrame(JSContextRef context, JSValueRef source
     int argumentsSize = sizeof(arguments)/sizeof(arguments[0]);
 
     DebuggerDocument::callGlobalFunction(context, "didEnterCallFrame", argumentsSize, arguments, exception);
-    if (exception)
+    if (*exception)
         logException(context, *exception);
 }
 
@@ -249,7 +249,7 @@ void DebuggerDocument::willLeaveCallFrame(JSContextRef context, JSValueRef sourc
     int argumentsSize = sizeof(arguments)/sizeof(arguments[0]);
 
     DebuggerDocument::callGlobalFunction(context, "willLeaveCallFrame", argumentsSize, arguments, exception);
-    if (exception)
+    if (*exception)
         logException(context, *exception);
 }
 
@@ -267,7 +267,7 @@ void DebuggerDocument::windowScriptObjectAvailable(JSContextRef context, JSObjec
     JSValueRef droseraObject = JSObjectMake(context, getDroseraJSClass(), this);
 
     JSObjectSetProperty(context, windowObject, droseraStr.get(), droseraObject, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete, exception);
-    if (exception)
+    if (*exception)
         logException(context, *exception);
 }
 
@@ -315,7 +315,7 @@ JSValueRef DebuggerDocument::callFunctionOnObject(JSContextRef context, JSObject
     ASSERT(JSObjectIsFunction(context, function));
  
     JSValueRef returnValue = JSObjectCallAsFunction(context, function, 0, argumentCount, arguments, exception);
-    if (exception)
+    if (*exception)
         logException(context, *exception);
 
     return returnValue;
index 662a058515537564f1de51c60c2bc80758265dcb..879a62e7b12d681436378d2f0f7de7d2fb5feb02 100644 (file)
 
 DebuggerClient::DebuggerClient()
     : m_webViewLoaded(false)
+    , m_debuggerDocument(new DebuggerDocument(new ServerConnection()))
 {
 }
 
-DebuggerClient::DebuggerClient(const std::wstring& serverName)
-    : m_webViewLoaded(false)
-{
-    initWithServerName(serverName);
-}
-
-void DebuggerClient::initWithServerName(const std::wstring& serverName)
-{
-    m_debuggerDocument.set(new DebuggerDocument(ServerConnection::initWithServerName(serverName)));
-}
-
 // IUnknown ------------------------------
 HRESULT STDMETHODCALLTYPE DebuggerClient::QueryInterface(REFIID riid, void** ppvObject)
 {
@@ -68,36 +58,27 @@ HRESULT STDMETHODCALLTYPE DebuggerClient::QueryInterface(REFIID riid, void** ppv
 }
 
 ULONG STDMETHODCALLTYPE DebuggerClient::AddRef(void)
-{   // COM ref-counting isn't useful to us because we're in charge of the lifetime of the WebView.
-    return 2;
+{
+    // COM ref-counting isn't useful to us because we're in charge of the lifetime of the WebView.
+    return 1;
 }
 
 ULONG STDMETHODCALLTYPE DebuggerClient::Release(void)
-{   // COM ref-counting isn't useful to us because we're in charge of the lifetime of the WebView.
-    return 2;
+{
+    // COM ref-counting isn't useful to us because we're in charge of the lifetime of the WebView.
+    return 1;
 }
 
 // IWebFrameLoadDelegate ------------------------------
 HRESULT STDMETHODCALLTYPE DebuggerClient::didFinishLoadForFrame(
     /* [in] */ IWebView*,
-    /* [in] */ IWebFrame* frame)
+    /* [in] */ IWebFrame*)
 {
-    // FIXME: Check the IWebView passed in vs the m_webView which should be used?
     // note: this is Drosera's own WebView, not the one in the app that we are attached to.
-    m_webViewLoaded = true;
-
-    COMPtr<IWebFrame> mainFrame;
-    HRESULT hr = m_webView->mainFrame(&mainFrame);
-    if (FAILED(hr))
-        return hr;
-
-    if (mainFrame != frame)
-        return S_OK;
-
     // FIXME: This cannot be implemented until IWebFrame has a globalContext
-    //    ServerConnection* server = m_debuggerDocument->server();
-    //    if (server)
-    //        server->setGlobalContext(mainFrame->globalContext());
+    // m_debuggerDocument->server()->setGlobalContext(mainFrame->globalContext());
+
+    m_webViewLoaded = true;
 
     return S_OK;
 }
index a08a9dc3bf843cad3a3b76e96bad2937653e7b8a..2cd64eff46f5b54a247f4618af31f87748982087 100644 (file)
@@ -92,7 +92,6 @@ public:
 private:
     bool m_webViewLoaded;
 
-    COMPtr<IWebView> m_webView;
     OwnPtr<DebuggerDocument> m_debuggerDocument;
 };
 
index f0f618ecafbd3fddff6dc5cce57d96a9acd6a199..5406b3beed42856b2a40eab3e13e72c272313ed3 100644 (file)
@@ -190,6 +190,7 @@ HRESULT Drosera::init(HINSTANCE hInstance, int nCmdShow)
     if (FAILED(ret))
         return ret;
 
+    ret = attach();
     return ret;
 }
 
@@ -277,11 +278,9 @@ bool Drosera::webViewLoaded() const
 
 // Server Detection Callbacks
 
-HRESULT Drosera::attach(const std::wstring& serverName)
+HRESULT Drosera::attach()
 {
     // Get selected server
-    m_debuggerClient->initWithServerName(serverName);
-
     HRESULT ret = m_webView->setFrameLoadDelegate(m_debuggerClient.get());
     if (FAILED(ret))
         return ret;
index b61eb0ae9cf198c436b3e0ff5765966af2a4c577..e1c3a5713775f5a871c636c7d3c3befb7371f0dd 100644 (file)
@@ -50,13 +50,11 @@ public:
     HRESULT init(HINSTANCE hInstance, int nCmdShow);
     LRESULT onSize(WPARAM, LPARAM);
 
-    HRESULT attach(const std::wstring& serverName);
-
     bool webViewLoaded() const;
 
 private:
     HRESULT initUI(HINSTANCE hInstance, int nCmdShow);
-    HRESULT initServer();
+    HRESULT attach();
 
     HWND m_hWnd;
 
index 8b1384ca133da5f431bfee22408083f7f9ffb306..5527f04b0672f04a0958328d461783192074d0a7 100644 (file)
 #include <JavaScriptCore/RetainPtr.h>
 
 // FIXME: Some of the below functionality cannot be implemented until the WebScriptDebug Server works on windows.
-
-ServerConnection* ServerConnection::initWithServerName(const std::wstring& serverName)
+ServerConnection::ServerConnection()
+    : m_globalContext(0)
 {
-    ServerConnection* server = new ServerConnection();
-    server->switchToServerNamed(serverName);
-
-    return server;
 }
 
 ServerConnection::~ServerConnection()
 {
-    JSGlobalContextRelease(m_globalContext);
+    if (m_globalContext)
+        JSGlobalContextRelease(m_globalContext);
 }
 
 void ServerConnection::setGlobalContext(JSGlobalContextRef globalContextRef)
@@ -69,10 +66,6 @@ void ServerConnection::stepInto()
 {
 }
 
-void ServerConnection::switchToServerNamed(const std::wstring& /*name*/)
-{
-}
-
 // Connection Handling
 
 void ServerConnection::applicationTerminating()
@@ -81,7 +74,6 @@ void ServerConnection::applicationTerminating()
 
 void ServerConnection::serverConnectionDidDie()
 {
-    switchToServerNamed(L"");
 }
 
 // Stack & Variables
@@ -91,3 +83,99 @@ WebScriptCallFrame* ServerConnection::currentFrame() const
     return m_currentFrame;
 }
 
+
+// IUnknown --------------------------------------------------
+HRESULT STDMETHODCALLTYPE ServerConnection::QueryInterface(REFIID riid, void** ppvObject)
+{
+    *ppvObject = 0;
+    if (IsEqualGUID(riid, IID_IUnknown))
+        *ppvObject = this;
+    else if (IsEqualGUID(riid, IID_IWebScriptDebugListener))
+        *ppvObject = static_cast<IWebScriptDebugListener*>(this);
+    else
+        return E_NOINTERFACE;
+
+    AddRef();
+    return S_OK;
+}
+
+ULONG STDMETHODCALLTYPE ServerConnection::AddRef(void)
+{
+    // COM ref-counting isn't useful to us because we're in charge of the lifetime of the WebView.
+    return 1;
+}
+
+ULONG STDMETHODCALLTYPE ServerConnection::Release(void)
+{
+    // COM ref-counting isn't useful to us because we're in charge of the lifetime of the WebView.
+    return 1;
+}
+// IWebScriptDebugListener -----------------------------------
+HRESULT STDMETHODCALLTYPE ServerConnection::didLoadMainResourceForDataSource(
+    /* [in] */ IWebView* /*view*/,
+    /* [in] */ IWebDataSource* /*dataSource*/)
+{
+    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*/)
+{
+    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*/)
+{
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE ServerConnection::didEnterCallFrame(
+    /* [in] */ IWebView* /*view*/,
+    /* [in] */ IWebScriptCallFrame* /*frame*/,
+    /* [in] */ int /*sourceID*/,
+    /* [in] */ int /*lineNumber*/,
+    /* [in] */ IWebFrame* /*forWebFrame*/)
+{
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE ServerConnection::willExecuteStatement(
+    /* [in] */ IWebView* /*view*/,
+    /* [in] */ IWebScriptCallFrame* /*frame*/,
+    /* [in] */ int /*sourceID*/,
+    /* [in] */ int /*lineNumber*/,
+    /* [in] */ IWebFrame* /*forWebFrame*/)
+{
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE ServerConnection::willLeaveCallFrame(
+    /* [in] */ IWebView* /*view*/,
+    /* [in] */ IWebScriptCallFrame* /*frame*/,
+    /* [in] */ int /*sourceID*/,
+    /* [in] */ int /*lineNumber*/,
+    /* [in] */ IWebFrame* /*forWebFrame*/)
+{
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE ServerConnection::exceptionWasRaised(
+    /* [in] */ IWebView* /*view*/,
+    /* [in] */ IWebScriptCallFrame* /*frame*/,
+    /* [in] */ int /*sourceID*/,
+    /* [in] */ int /*lineNumber*/,
+    /* [in] */ IWebFrame* /*forWebFrame*/)
+{
+    return S_OK;
+}
index 707be589874e2cee7b5c07bfb4c7c50ce7422e47..703a6d72b41ed80b602e2e7529bbeaae624abfcd 100644 (file)
@@ -31,6 +31,7 @@
 #define ServerConnection_H
 
 #include <string>
+#include <WebKit/IWebScriptDebugListener.h>
 
 class DebuggerClient;
 class WebScriptCallFrame;
@@ -38,24 +39,78 @@ class WebScriptDebugServer;
 
 typedef struct OpaqueJSContext* JSGlobalContextRef;
 
-class ServerConnection {
+class ServerConnection : public IWebScriptDebugListener {
 public:
-    static ServerConnection* initWithServerName(const std::wstring& serverName);
+    ServerConnection();
     ~ServerConnection();
 
     void setGlobalContext(JSGlobalContextRef);
     void pause();
     void resume();
     void stepInto();
-    void switchToServerNamed(const std::wstring& name);
 
     void applicationTerminating();
     void serverConnectionDidDie();
     WebScriptCallFrame* currentFrame() const;
 
-private:
-    ServerConnection() {}
+    // IUnknown
+    HRESULT STDMETHODCALLTYPE QueryInterface(
+        /* [in] */ REFIID riid,
+        /* [retval][out] */ void** ppvObject);
+
+    ULONG STDMETHODCALLTYPE AddRef();
+    ULONG STDMETHODCALLTYPE Release();
+
+    // IWebScriptDebugListener
+    HRESULT STDMETHODCALLTYPE didLoadMainResourceForDataSource(
+        /* [in] */ IWebView* view,
+        /* [in] */ IWebDataSource* dataSource);
+
+    HRESULT STDMETHODCALLTYPE didParseSource(
+        /* [in] */ IWebView* view,
+        /* [in] */ BSTR sourceCode,
+        /* [in] */ UINT baseLineNumber,
+        /* [in] */ BSTR url,
+        /* [in] */ int sourceID,
+        /* [in] */ IWebFrame* forWebFrame);
+
+    HRESULT STDMETHODCALLTYPE failedToParseSource(
+        /* [in] */ IWebView* view,
+        /* [in] */ BSTR sourceCode,
+        /* [in] */ UINT baseLineNumber,
+        /* [in] */ BSTR url,
+        /* [in] */ BSTR error,
+        /* [in] */ IWebFrame* forWebFrame);
 
+    HRESULT STDMETHODCALLTYPE didEnterCallFrame(
+        /* [in] */ IWebView* view,
+        /* [in] */ IWebScriptCallFrame* frame,
+        /* [in] */ int sourceID,
+        /* [in] */ int lineNumber,
+        /* [in] */ IWebFrame* forWebFrame);
+
+    HRESULT STDMETHODCALLTYPE willExecuteStatement(
+        /* [in] */ IWebView* view,
+        /* [in] */ IWebScriptCallFrame* frame,
+        /* [in] */ int sourceID,
+        /* [in] */ int lineNumber,
+        /* [in] */ IWebFrame* forWebFrame);
+
+    HRESULT STDMETHODCALLTYPE willLeaveCallFrame(
+        /* [in] */ IWebView* view,
+        /* [in] */ IWebScriptCallFrame* frame,
+        /* [in] */ int sourceID,
+        /* [in] */ int lineNumber,
+        /* [in] */ IWebFrame* forWebFrame);
+
+    HRESULT STDMETHODCALLTYPE exceptionWasRaised(
+        /* [in] */ IWebView* view,
+        /* [in] */ IWebScriptCallFrame* frame,
+        /* [in] */ int sourceID,
+        /* [in] */ int lineNumber,
+        /* [in] */ IWebFrame* forWebFrame);
+
+private:
     std::wstring m_currentServerName;
 
     // FIXME: Change these to OwnPtrs when they are implmented such that they