Tizen 2.1 base
[framework/web/webkit-efl.git] / Tools / WinLauncher / DOMDefaultImpl.h
1 /*
2  * Copyright (C) 2011 Anthony Johnson. All Rights Reserved.
3  * Copyright (C) 2011 Brent Fulgham. All Rights Reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25  */
26
27 #ifndef DOMDefaultImpl_h
28 #define DOMDefaultImpl_h
29
30 #include <WebKit/WebKit.h>
31
32 class WebScriptObject : public IWebScriptObject {
33 public:
34     WebScriptObject() : m_refCount(0)
35     {
36     }
37
38     virtual ~WebScriptObject()
39     {
40     }
41
42     // IUnknown
43     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
44     virtual ULONG STDMETHODCALLTYPE AddRef(void);
45     virtual ULONG STDMETHODCALLTYPE Release(void);
46
47     // IWebScriptObject
48     virtual HRESULT STDMETHODCALLTYPE throwException(BSTR, BOOL*) { return E_NOTIMPL; }
49     virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(BSTR, const VARIANT[], int, VARIANT*) { return E_NOTIMPL; }
50     virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(BSTR, VARIANT*) { return E_NOTIMPL; }
51     virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(BSTR) { return E_NOTIMPL; }
52     virtual HRESULT STDMETHODCALLTYPE stringRepresentation(BSTR*) { return E_NOTIMPL; }
53     virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(unsigned int, VARIANT*)  { return E_NOTIMPL; }
54     virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(unsigned int, VARIANT)  { return E_NOTIMPL; }
55     virtual HRESULT STDMETHODCALLTYPE setException(BSTR)  { return E_NOTIMPL; }
56
57 protected:
58     ULONG m_refCount;
59 };
60
61
62 class DOMObject : public WebScriptObject, public IDOMObject {
63 public:
64     // IUnknown
65     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
66 };
67
68
69 class DOMEventListener : public DOMObject, public IDOMEventListener {
70 public:
71     // IUnknown
72     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
73     virtual ULONG STDMETHODCALLTYPE AddRef(void);
74     virtual ULONG STDMETHODCALLTYPE Release(void);
75
76     // IWebScriptObject
77     virtual HRESULT STDMETHODCALLTYPE throwException(BSTR, BOOL*)  { return E_NOTIMPL; }
78     virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(BSTR, const VARIANT[], int, VARIANT*)  { return E_NOTIMPL; }
79     virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(BSTR, VARIANT*)  { return E_NOTIMPL; }
80     virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(BSTR)  { return E_NOTIMPL; }
81     virtual HRESULT STDMETHODCALLTYPE stringRepresentation(BSTR*)  { return E_NOTIMPL; }
82     virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(unsigned int, VARIANT*)  { return E_NOTIMPL; }
83     virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(unsigned int, VARIANT)  { return E_NOTIMPL; }
84     virtual HRESULT STDMETHODCALLTYPE setException(BSTR) { return E_NOTIMPL; }
85
86     // IDOMEventListener
87     virtual HRESULT STDMETHODCALLTYPE handleEvent(IDOMEvent*) { return E_NOTIMPL; }
88 };
89
90 // IUnknown -------------------------------------------------------------------
91 HRESULT WebScriptObject::QueryInterface(REFIID riid, void** ppvObject)
92 {
93     *ppvObject = 0;
94     if (IsEqualGUID(riid, IID_IUnknown))
95         *ppvObject = static_cast<IWebScriptObject*>(this);
96     else if (IsEqualGUID(riid, IID_IWebScriptObject))
97         *ppvObject = static_cast<IWebScriptObject*>(this);
98     else
99         return E_NOINTERFACE;
100
101     AddRef();
102     return S_OK;
103 }
104
105 ULONG WebScriptObject::AddRef(void)
106 {
107     return ++m_refCount;
108 }
109
110 ULONG WebScriptObject::Release(void)
111 {
112     ULONG newRef = --m_refCount;
113     if (!newRef)
114         delete(this);
115
116     return newRef;
117 }
118
119 // DOMObject -------------------------------------------------------------------
120 HRESULT DOMObject::QueryInterface(REFIID riid, void** ppvObject)
121 {
122     *ppvObject = 0;
123     if (IsEqualGUID(riid, IID_IDOMObject))
124         *ppvObject = static_cast<IDOMObject*>(this);
125     else
126         return WebScriptObject::QueryInterface(riid, ppvObject);
127
128     WebScriptObject::AddRef();
129     return S_OK;
130 }
131
132
133 // DOMEventListener -------------------------------------------------------------------
134 HRESULT DOMEventListener::QueryInterface(const IID &riid, void** ppvObject)
135 {
136     *ppvObject = 0;
137     if (IsEqualGUID(riid, IID_IDOMEventListener))
138         *ppvObject = static_cast<IDOMEventListener*>(this);
139     else
140         return DOMObject::QueryInterface(riid, ppvObject);
141
142     AddRef();
143     return S_OK;
144 }
145
146 ULONG DOMEventListener::AddRef(void)
147 {
148     return WebScriptObject::AddRef();
149 }
150
151 ULONG DOMEventListener::Release(void)
152 {
153     return WebScriptObject::Release();
154 }
155
156 #endif