Add IWebInspector and a way to get one from a WebView
authoraroben <aroben@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 5 Nov 2007 18:57:10 +0000 (18:57 +0000)
committeraroben <aroben@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 5 Nov 2007 18:57:10 +0000 (18:57 +0000)
 WebCore:

         Allow passing a base class pointer to COMPtr::copyRefTo

         Reviewed by Sam.

         * platform/win/COMPtr.h:

 WebKit/win:

         Add IWebInspector and a way to get one from a WebView

         This API matches the Mac one added in r27266.

         Reviewed by Sam.

         * Interfaces/IWebInspector.idl: Added.
         * Interfaces/IWebViewPrivate.idl: Added a new inspector method to
         match Mac.
         * WebInspector.cpp: Added.
         (WebInspector::createInstance):
         (WebInspector::WebInspector):
         (WebInspector::~WebInspector):
         (WebInspector::webViewClosed):
         (WebInspector::QueryInterface):
         (WebInspector::AddRef):
         (WebInspector::Release):
         (WebInspector::show):
         (WebInspector::showConsole):
         (WebInspector::showTimeline):
         (WebInspector::close):
         (WebInspector::attach):
         (WebInspector::detach):
         * WebInspector.h: Added.
         * WebKit.vcproj/Interfaces.vcproj: Added IWebInspector.idl.
         * WebKit.vcproj/WebKit.vcproj: Added WebInspector.{cpp,h}.
         * WebKit.vcproj/WebKitGUID.vcproj: Added IWebInspector_i.c.
         * WebView.cpp:
         (WebView::close): Notify the WebInspector that we're closing.
         (WebView::inspector): Added.
         * WebView.h:

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

12 files changed:
WebCore/ChangeLog
WebCore/platform/win/COMPtr.h
WebKit/win/ChangeLog
WebKit/win/Interfaces/IWebInspector.idl [new file with mode: 0644]
WebKit/win/Interfaces/IWebViewPrivate.idl
WebKit/win/WebInspector.cpp [new file with mode: 0644]
WebKit/win/WebInspector.h [new file with mode: 0644]
WebKit/win/WebKit.vcproj/Interfaces.vcproj
WebKit/win/WebKit.vcproj/WebKit.vcproj
WebKit/win/WebKit.vcproj/WebKitGUID.vcproj
WebKit/win/WebView.cpp
WebKit/win/WebView.h

index 8aeda189e4e08dc63a5c2cb5fcd361dc124ded55..f44b975194cc7fef1a1fda8806cfd6719adc0238 100644 (file)
@@ -1,3 +1,11 @@
+2007-11-05  Adam Roben  <aroben@apple.com>
+
+        Allow passing a base class pointer to COMPtr::copyRefTo
+
+        Reviewed by Sam.
+
+        * platform/win/COMPtr.h:
+
 2007-11-05  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Oliver Hunt.
index c7303fff3e21528e83684dfbe1f1129ee73cac6e..76423b6781af84135556d530746ac621f5ff1f6b 100644 (file)
@@ -74,7 +74,7 @@ public:
     void query(IUnknown* ptr) { adoptRef(copyQueryInterfaceRef(ptr)); }
     template <typename U> inline void query(const COMPtr<U>& ptr) { query(ptr.get()); }
 
-    HRESULT copyRefTo(T**);
+    template <typename U> HRESULT copyRefTo(U**);
     void adoptRef(T*);
 
 private:
@@ -93,7 +93,7 @@ template <typename T> inline T* COMPtr<T>::copyQueryInterfaceRef(IUnknown* ptr)
     return result;
 }
 
-template <typename T> inline HRESULT COMPtr<T>::copyRefTo(T** ptr)
+template <typename T> template <typename U> inline HRESULT COMPtr<T>::copyRefTo(U** ptr)
 {
     if (!ptr)
         return E_POINTER;
index 121c7af65c1e037597e5445253bb083f84b568e7..13c78fd83bd889bb0527f1adff0646b6497dac5d 100644 (file)
@@ -1,3 +1,37 @@
+2007-11-04  Adam Roben  <aroben@apple.com>
+
+        Add IWebInspector and a way to get one from a WebView
+
+        This API matches the Mac one added in r27266.
+
+        Reviewed by Sam.
+
+        * Interfaces/IWebInspector.idl: Added.
+        * Interfaces/IWebViewPrivate.idl: Added a new inspector method to
+        match Mac.
+        * WebInspector.cpp: Added.
+        (WebInspector::createInstance):
+        (WebInspector::WebInspector):
+        (WebInspector::~WebInspector):
+        (WebInspector::webViewClosed):
+        (WebInspector::QueryInterface):
+        (WebInspector::AddRef):
+        (WebInspector::Release):
+        (WebInspector::show):
+        (WebInspector::showConsole):
+        (WebInspector::showTimeline):
+        (WebInspector::close):
+        (WebInspector::attach):
+        (WebInspector::detach):
+        * WebInspector.h: Added.
+        * WebKit.vcproj/Interfaces.vcproj: Added IWebInspector.idl.
+        * WebKit.vcproj/WebKit.vcproj: Added WebInspector.{cpp,h}.
+        * WebKit.vcproj/WebKitGUID.vcproj: Added IWebInspector_i.c.
+        * WebView.cpp:
+        (WebView::close): Notify the WebInspector that we're closing.
+        (WebView::inspector): Added.
+        * WebView.h:
+
 2007-11-04  Adam Roben  <aroben@apple.com>
 
         Cache strings that come directly from WebLocalizedString
diff --git a/WebKit/win/Interfaces/IWebInspector.idl b/WebKit/win/Interfaces/IWebInspector.idl
new file mode 100644 (file)
index 0000000..6c1fc50
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * 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(" *")
+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 AND ITS CONTRIBUTORS \"AS IS\" AND ANY")
+cpp_quote(" * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED")
+cpp_quote(" * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE")
+cpp_quote(" * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY")
+cpp_quote(" * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES")
+cpp_quote(" * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;")
+cpp_quote(" * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND")
+cpp_quote(" * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT")
+cpp_quote(" * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF")
+cpp_quote(" * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.")
+cpp_quote(" */")
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+    object,
+    oleautomation,
+    uuid(68159FF1-9037-45ec-9992-B2E455CF39F3),
+    pointer_default(unique)
+]
+interface IWebInspector : IUnknown
+{
+    HRESULT show();
+    HRESULT showConsole();
+    HRESULT showTimeline();
+    HRESULT close();
+    HRESULT attach();
+    HRESULT detach();
+}
index d337c7a25b3e26ceebbac75ec0088afa541b34a9..2057276359212c2328e29e4d1ce2b9980d1e79fe 100644 (file)
@@ -52,6 +52,7 @@ import "oaidl.idl";
 import "ocidl.idl";
 import "IWebFormDelegate.idl";
 import "IWebFrameLoadDelegatePrivate.idl";
+import "IWebInspector.idl";
 
 [
     object,
@@ -117,4 +118,6 @@ interface IWebViewPrivate : IUnknown
     HRESULT removeCustomDropTarget();
 
     HRESULT setInitialFocus([in] BOOL forward);
+
+    HRESULT inspector([out, retval] IWebInspector**);
 }
diff --git a/WebKit/win/WebInspector.cpp b/WebKit/win/WebInspector.cpp
new file mode 100644 (file)
index 0000000..d188e4f
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * 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.
+ */
+
+#include "config.h"
+#include "WebInspector.h"
+
+#include "WebKitDLL.h"
+#include "WebView.h"
+#pragma warning(push, 0)
+#include <WebCore/InspectorController.h>
+#include <WebCore/Page.h>
+#pragma warning(pop)
+#include <wtf/Assertions.h>
+
+using namespace WebCore;
+
+WebInspector* WebInspector::createInstance(WebView* webView)
+{
+    WebInspector* inspector = new WebInspector(webView);
+    inspector->AddRef();
+    return inspector;
+}
+
+WebInspector::WebInspector(WebView* webView)
+    : m_refCount(0)
+    , m_webView(webView)
+{
+    ASSERT_ARG(webView, webView);
+
+    gClassCount++;
+}
+
+WebInspector::~WebInspector()
+{
+    gClassCount--;
+}
+
+void WebInspector::webViewClosed()
+{
+    m_webView = 0;
+}
+
+HRESULT STDMETHODCALLTYPE WebInspector::QueryInterface(REFIID riid, void** ppvObject)
+{
+    *ppvObject = 0;
+    if (IsEqualGUID(riid, IID_IWebInspector))
+        *ppvObject = static_cast<IWebInspector*>(this);
+    else if (IsEqualGUID(riid, IID_IUnknown))
+        *ppvObject = static_cast<IWebInspector*>(this);
+    else
+        return E_NOINTERFACE;
+
+    AddRef();
+    return S_OK;
+}
+
+ULONG STDMETHODCALLTYPE WebInspector::AddRef(void)
+{
+    return ++m_refCount;
+}
+
+ULONG STDMETHODCALLTYPE WebInspector::Release(void)
+{
+    ULONG newRef = --m_refCount;
+    if (!newRef)
+        delete this;
+
+    return newRef;
+}
+
+HRESULT STDMETHODCALLTYPE WebInspector::show()
+{
+    if (m_webView)
+        if (Page* page = m_webView->page())
+            page->inspectorController()->show();
+
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebInspector::showConsole()
+{
+    if (m_webView)
+        if (Page* page = m_webView->page())
+            page->inspectorController()->showConsole();
+
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebInspector::showTimeline()
+{
+    if (m_webView)
+        if (Page* page = m_webView->page())
+            page->inspectorController()->showTimeline();
+
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebInspector::close()
+{
+    if (m_webView)
+        if (Page* page = m_webView->page())
+            page->inspectorController()->close();
+
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebInspector::attach()
+{
+    if (m_webView)
+        if (Page* page = m_webView->page())
+            page->inspectorController()->attachWindow();
+
+    return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE WebInspector::detach()
+{
+    if (m_webView)
+        if (Page* page = m_webView->page())
+            page->inspectorController()->detachWindow();
+
+    return S_OK;
+}
diff --git a/WebKit/win/WebInspector.h b/WebKit/win/WebInspector.h
new file mode 100644 (file)
index 0000000..6b22e52
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * 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.
+ */
+
+#ifndef WebInspector_h
+#define WebInspector_h
+
+#include "IWebInspector.h"
+#include <wtf/Noncopyable.h>
+
+class WebView;
+
+class WebInspector : public IWebInspector, Noncopyable {
+public:
+    static WebInspector* createInstance(WebView*);
+
+    void webViewClosed();
+
+    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, void** ppvObject);
+    virtual ULONG STDMETHODCALLTYPE AddRef();
+    virtual ULONG STDMETHODCALLTYPE Release();
+
+    virtual HRESULT STDMETHODCALLTYPE show();
+    virtual HRESULT STDMETHODCALLTYPE showConsole();
+    virtual HRESULT STDMETHODCALLTYPE showTimeline();
+    virtual HRESULT STDMETHODCALLTYPE close();
+    virtual HRESULT STDMETHODCALLTYPE attach();
+    virtual HRESULT STDMETHODCALLTYPE detach();
+
+private:
+    WebInspector(WebView*);
+    ~WebInspector();
+
+    ULONG m_refCount;
+    WebView* m_webView;
+};
+
+#endif // !defined(WebInspector_h)
index 9b53188698a92399e2520e7593bfd6f5106ec8cb..5f6ff4567dfa6855de19dd18a1d53389a2f81b40 100644 (file)
                        RelativePath="..\Interfaces\IWebIconDatabase.idl"\r
                        >\r
                </File>\r
+               <File\r
+                       RelativePath="..\Interfaces\IWebInspector.idl"\r
+                       >\r
+               </File>\r
                <File\r
                        RelativePath="..\Interfaces\IWebJavaScriptCollector.idl"\r
                        >\r
index 3d104c0cba6eafc3c32bc23c16117ca7d724b3a2..4ae877a96d0d5bb084d688ec23fd20e53aa5d227 100644 (file)
                                RelativePath="..\WebIconDatabase.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\WebInspector.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\WebInspectorClient.h"\r
                                >\r
                                RelativePath="..\WebIconDatabase.cpp"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\WebInspector.cpp"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="..\WebJavaScriptCollector.cpp"\r
                                >\r
index 4da989fa531db25a024e170c63ba8b2a6665906a..b448e9b6709935d1d813c80560bc09955e5f99d6 100644 (file)
                        RelativePath="$(WebKitOutputDir)\obj\WebKit\Interfaces\IWebIconDatabase_i.c"\r
                        >\r
                </File>\r
+               <File\r
+                       RelativePath="$(WebKitOutputDir)\obj\WebKit\Interfaces\IWebInspector_i.c"\r
+                       >\r
+               </File>\r
                <File\r
                        RelativePath="$(WebKitOutputDir)\obj\WebKit\Interfaces\IWebJavaScriptCollector_i.c"\r
                        >\r
index ec1bb895b01ecd074b94cb33fbe7cc53e53b7175..66fcf582f6f55e7a48f8d34769cc7029a46737ab 100644 (file)
@@ -40,6 +40,7 @@
 #include "WebContextMenuClient.h"
 #include "WebDragClient.h"
 #include "WebIconDatabase.h"
+#include "WebInspector.h"
 #include "WebInspectorClient.h"
 #include "WebKit.h"
 #include "WebKitStatisticsPrivate.h"
@@ -578,6 +579,9 @@ void WebView::close()
     setUIDelegate(0);
     setFormDelegate(0);
 
+    if (m_webInspector)
+        m_webInspector->webViewClosed();
+
     delete m_page;
     m_page = 0;
 
@@ -4426,6 +4430,14 @@ bool WebView::onIMESetContext(WPARAM, LPARAM)
     return false;
 }
 
+HRESULT STDMETHODCALLTYPE WebView::inspector(IWebInspector** inspector)
+{
+    if (!m_webInspector)
+        m_webInspector.adoptRef(WebInspector::createInstance(this));
+
+    return m_webInspector.copyRefTo(inspector);
+}
+
 class EnumTextMatches : public IEnumTextMatches
 {
     long m_ref;
index ac4a4b0cf968b00f6839e9f9c7a7c70f93d7401f..faa549b670145e3520efcc9ef49aae957b80b32a 100644 (file)
@@ -40,6 +40,7 @@
 
 class WebFrame;
 class WebBackForwardList;
+class WebInspector;
 class WebInspectorClient;
 
 WebCore::Page* core(IWebView*);
@@ -614,6 +615,9 @@ public:
     virtual HRESULT STDMETHODCALLTYPE loadBackForwardListFromOtherView( 
         /* [in] */ IWebView *otherView);
 
+    virtual HRESULT STDMETHODCALLTYPE inspector(
+        /* [retval][out] */ IWebInspector**);
+
     // WebView
     WebCore::Page* page();
     bool handleMouseEvent(UINT, WPARAM, LPARAM);
@@ -727,6 +731,8 @@ protected:
     COMPtr<IWebResourceLoadDelegate> m_resourceLoadDelegate;
     COMPtr<IWebDownloadDelegate> m_downloadDelegate;
     COMPtr<WebPreferences> m_preferences;
+    COMPtr<WebInspector> m_webInspector;
+
     bool m_userAgentOverridden;
     bool m_useBackForwardList;
     WebCore::String m_userAgentCustom;