jscript: Added IObjectSafety stub implementation.
[wine] / dlls / jscript / jscript.c
1 /*
2  * Copyright 2008 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "jscript.h"
20 #include "activscp.h"
21 #include "objsafe.h"
22
23 #include "wine/debug.h"
24
25 WINE_DEFAULT_DEBUG_CHANNEL(jscript);
26
27 typedef struct {
28     const IActiveScriptVtbl                 *lpIActiveScriptVtbl;
29     const IActiveScriptParseVtbl            *lpIActiveScriptParseVtbl;
30     const IActiveScriptParseProcedure2Vtbl  *lpIActiveScriptParseProcedure2Vtbl;
31     const IActiveScriptPropertyVtbl         *lpIActiveScriptPropertyVtbl;
32     const IObjectSafetyVtbl                 *lpIObjectSafetyVtbl;
33
34     LONG ref;
35 } JScript;
36
37 #define ACTSCRIPT(x)    ((IActiveScript*)                 &(x)->lpIActiveScriptVtbl)
38 #define ASPARSE(x)      ((IActiveScriptParse*)            &(x)->lpIActiveScriptParseVtbl)
39 #define ASPARSEPROC(x)  ((IActiveScriptParseProcedure2*)  &(x)->lpIActiveScriptParseProcedure2Vtbl)
40 #define ACTSCPPROP(x)   ((IActiveScriptProperty*)         &(x)->lpIActiveScriptPropertyVtbl)
41 #define OBJSAFETY(x)    ((IObjectSafety*)                 &(x)->lpIObjectSafetyVtbl)
42
43 #define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
44
45 static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
46 {
47     JScript *This = ACTSCRIPT_THIS(iface);
48
49     *ppv = NULL;
50
51     if(IsEqualGUID(riid, &IID_IUnknown)) {
52         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
53         *ppv = ACTSCRIPT(This);
54     }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
55         TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
56         *ppv = ACTSCRIPT(This);
57     }else if(IsEqualGUID(riid, &IID_IActiveScriptParse)) {
58         TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This, ppv);
59         *ppv = ASPARSE(This);
60     }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure)) {
61         TRACE("(%p)->(IID_IActiveScriptParseProcedure %p)\n", This, ppv);
62         *ppv = ASPARSEPROC(This);
63     }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure2)) {
64         TRACE("(%p)->(IID_IActiveScriptParseProcedure2 %p)\n", This, ppv);
65         *ppv = ASPARSEPROC(This);
66     }else if(IsEqualGUID(riid, &IID_IActiveScriptProperty)) {
67         TRACE("(%p)->(IID_IActiveScriptProperty %p)\n", This, ppv);
68         *ppv = ACTSCPPROP(This);
69     }else if(IsEqualGUID(riid, &IID_IObjectSafety)) {
70         TRACE("(%p)->(IID_IObjectSafety %p)\n", This, ppv);
71         *ppv = OBJSAFETY(This);
72     }
73
74     if(*ppv) {
75         IUnknown_AddRef((IUnknown*)*ppv);
76         return S_OK;
77     }
78
79     FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
80     return E_NOINTERFACE;
81 }
82
83 static ULONG WINAPI JScript_AddRef(IActiveScript *iface)
84 {
85     JScript *This = ACTSCRIPT_THIS(iface);
86     LONG ref = InterlockedIncrement(&This->ref);
87
88     TRACE("(%p) ref=%d\n", This, ref);
89
90     return ref;
91 }
92
93 static ULONG WINAPI JScript_Release(IActiveScript *iface)
94 {
95     JScript *This = ACTSCRIPT_THIS(iface);
96     LONG ref = InterlockedDecrement(&This->ref);
97
98     TRACE("(%p) ref=%d\n", iface, ref);
99
100     if(!ref)
101         heap_free(This);
102
103     return ref;
104 }
105
106 static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface,
107                                             IActiveScriptSite *pass)
108 {
109     JScript *This = ACTSCRIPT_THIS(iface);
110     FIXME("(%p)->(%p)\n", This, pass);
111     return E_NOTIMPL;
112 }
113
114 static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid,
115                                             void **ppvObject)
116 {
117     JScript *This = ACTSCRIPT_THIS(iface);
118     FIXME("(%p)->()\n", This);
119     return E_NOTIMPL;
120 }
121
122 static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
123 {
124     JScript *This = ACTSCRIPT_THIS(iface);
125     FIXME("(%p)->(%d)\n", This, ss);
126     return E_NOTIMPL;
127 }
128
129 static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
130 {
131     JScript *This = ACTSCRIPT_THIS(iface);
132     FIXME("(%p)->(%p)\n", This, pssState);
133     return E_NOTIMPL;
134 }
135
136 static HRESULT WINAPI JScript_Close(IActiveScript *iface)
137 {
138     JScript *This = ACTSCRIPT_THIS(iface);
139     FIXME("(%p)->()\n", This);
140     return E_NOTIMPL;
141 }
142
143 static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface,
144                                            LPCOLESTR pstrName, DWORD dwFlags)
145 {
146     JScript *This = ACTSCRIPT_THIS(iface);
147     FIXME("(%p)->(%s %x)\n", This, debugstr_w(pstrName), dwFlags);
148     return E_NOTIMPL;
149 }
150
151 static HRESULT WINAPI JScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib,
152                                          DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
153 {
154     JScript *This = ACTSCRIPT_THIS(iface);
155     FIXME("(%p)->()\n", This);
156     return E_NOTIMPL;
157 }
158
159 static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName,
160                                                 IDispatch **ppdisp)
161 {
162     JScript *This = ACTSCRIPT_THIS(iface);
163     FIXME("(%p)->()\n", This);
164     return E_NOTIMPL;
165 }
166
167 static HRESULT WINAPI JScript_GetCurrentScriptThreadID(IActiveScript *iface,
168                                                        SCRIPTTHREADID *pstridThread)
169 {
170     JScript *This = ACTSCRIPT_THIS(iface);
171     FIXME("(%p)->()\n", This);
172     return E_NOTIMPL;
173 }
174
175 static HRESULT WINAPI JScript_GetScriptThreadID(IActiveScript *iface,
176                                                 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
177 {
178     JScript *This = ACTSCRIPT_THIS(iface);
179     FIXME("(%p)->()\n", This);
180     return E_NOTIMPL;
181 }
182
183 static HRESULT WINAPI JScript_GetScriptThreadState(IActiveScript *iface,
184         SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
185 {
186     JScript *This = ACTSCRIPT_THIS(iface);
187     FIXME("(%p)->()\n", This);
188     return E_NOTIMPL;
189 }
190
191 static HRESULT WINAPI JScript_InterruptScriptThread(IActiveScript *iface,
192         SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
193 {
194     JScript *This = ACTSCRIPT_THIS(iface);
195     FIXME("(%p)->()\n", This);
196     return E_NOTIMPL;
197 }
198
199 static HRESULT WINAPI JScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
200 {
201     JScript *This = ACTSCRIPT_THIS(iface);
202     FIXME("(%p)->()\n", This);
203     return E_NOTIMPL;
204 }
205
206 #undef ACTSCRIPT_THIS
207
208 static const IActiveScriptVtbl JScriptVtbl = {
209     JScript_QueryInterface,
210     JScript_AddRef,
211     JScript_Release,
212     JScript_SetScriptSite,
213     JScript_GetScriptSite,
214     JScript_SetScriptState,
215     JScript_GetScriptState,
216     JScript_Close,
217     JScript_AddNamedItem,
218     JScript_AddTypeLib,
219     JScript_GetScriptDispatch,
220     JScript_GetCurrentScriptThreadID,
221     JScript_GetScriptThreadID,
222     JScript_GetScriptThreadState,
223     JScript_InterruptScriptThread,
224     JScript_Clone
225 };
226
227 #define ASPARSE_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
228
229 static HRESULT WINAPI JScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
230 {
231     JScript *This = ASPARSE_THIS(iface);
232     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
233 }
234
235 static ULONG WINAPI JScriptParse_AddRef(IActiveScriptParse *iface)
236 {
237     JScript *This = ASPARSE_THIS(iface);
238     return IActiveScript_AddRef(ACTSCRIPT(This));
239 }
240
241 static ULONG WINAPI JScriptParse_Release(IActiveScriptParse *iface)
242 {
243     JScript *This = ASPARSE_THIS(iface);
244     return IActiveScript_Release(ACTSCRIPT(This));
245 }
246
247 static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
248 {
249     JScript *This = ASPARSE_THIS(iface);
250     FIXME("(%p)\n", This);
251     return E_NOTIMPL;
252 }
253
254 static HRESULT WINAPI JScriptParse_AddScriptlet(IActiveScriptParse *iface,
255         LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName,
256         LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter,
257         DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags,
258         BSTR *pbstrName, EXCEPINFO *pexcepinfo)
259 {
260     JScript *This = ASPARSE_THIS(iface);
261     FIXME("(%p)->(%s %s %s %s %s %s %x %u %x %p %p)\n", This, debugstr_w(pstrDefaultName),
262           debugstr_w(pstrCode), debugstr_w(pstrItemName), debugstr_w(pstrSubItemName),
263           debugstr_w(pstrEventName), debugstr_w(pstrDelimiter), dwSourceContextCookie,
264           ulStartingLineNumber, dwFlags, pbstrName, pexcepinfo);
265     return E_NOTIMPL;
266 }
267
268 static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface,
269         LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext,
270         LPCOLESTR pstrDelimiter, DWORD dwSourceContextCookie, ULONG ulStartingLine,
271         DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
272 {
273     JScript *This = ASPARSE_THIS(iface);
274     FIXME("(%p)->(%s %s %p %s %x %u %x %p %p)\n", This, debugstr_w(pstrCode),
275           debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
276           dwSourceContextCookie, ulStartingLine, dwFlags, pvarResult, pexcepinfo);
277     return E_NOTIMPL;
278 }
279
280 #undef ASPARSE_THIS
281
282 static const IActiveScriptParseVtbl JScriptParseVtbl = {
283     JScriptParse_QueryInterface,
284     JScriptParse_AddRef,
285     JScriptParse_Release,
286     JScriptParse_InitNew,
287     JScriptParse_AddScriptlet,
288     JScriptParse_ParseScriptText
289 };
290
291 #define ASPARSEPROC_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
292
293 static HRESULT WINAPI JScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
294 {
295     JScript *This = ASPARSEPROC_THIS(iface);
296     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
297 }
298
299 static ULONG WINAPI JScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface)
300 {
301     JScript *This = ASPARSEPROC_THIS(iface);
302     return IActiveScript_AddRef(ACTSCRIPT(This));
303 }
304
305 static ULONG WINAPI JScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface)
306 {
307     JScript *This = ASPARSEPROC_THIS(iface);
308     return IActiveScript_Release(ACTSCRIPT(This));
309 }
310
311 static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptParseProcedure2 *iface,
312         LPCOLESTR pstrCode, LPCOLESTR pstrFormalParams, LPCOLESTR pstrProcedureName,
313         LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter,
314         DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp)
315 {
316     JScript *This = ASPARSEPROC_THIS(iface);
317     FIXME("(%p)->()\n", This);
318     return E_NOTIMPL;
319 }
320
321 #undef ASPARSEPROC_THIS
322
323 static const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl = {
324     JScriptParseProcedure_QueryInterface,
325     JScriptParseProcedure_AddRef,
326     JScriptParseProcedure_Release,
327     JScriptParseProcedure_ParseProcedureText,
328 };
329
330 #define ACTSCPPROP_THIS(iface) DEFINE_THIS(JScript, IActiveScriptProperty, iface)
331
332 static HRESULT WINAPI JScriptProperty_QueryInterface(IActiveScriptProperty *iface, REFIID riid, void **ppv)
333 {
334     JScript *This = ACTSCPPROP_THIS(iface);
335     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
336 }
337
338 static ULONG WINAPI JScriptProperty_AddRef(IActiveScriptProperty *iface)
339 {
340     JScript *This = ACTSCPPROP_THIS(iface);
341     return IActiveScript_AddRef(ACTSCRIPT(This));
342 }
343
344 static ULONG WINAPI JScriptProperty_Release(IActiveScriptProperty *iface)
345 {
346     JScript *This = ACTSCPPROP_THIS(iface);
347     return IActiveScript_Release(ACTSCRIPT(This));
348 }
349
350 static HRESULT WINAPI JScriptProperty_GetProperty(IActiveScriptProperty *iface, DWORD dwProperty,
351         VARIANT *pvarIndex, VARIANT *pvarValue)
352 {
353     JScript *This = ACTSCPPROP_THIS(iface);
354     FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
355     return E_NOTIMPL;
356 }
357
358 static HRESULT WINAPI JScriptProperty_SetProperty(IActiveScriptProperty *iface, DWORD dwProperty,
359         VARIANT *pvarIndex, VARIANT *pvarValue)
360 {
361     JScript *This = ACTSCPPROP_THIS(iface);
362     FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
363     return E_NOTIMPL;
364 }
365
366 #undef ACTSCPPROP_THIS
367
368 static const IActiveScriptPropertyVtbl JScriptPropertyVtbl = {
369     JScriptProperty_QueryInterface,
370     JScriptProperty_AddRef,
371     JScriptProperty_Release,
372     JScriptProperty_GetProperty,
373     JScriptProperty_SetProperty
374 };
375
376 #define OBJSAFETY_THIS(iface) DEFINE_THIS(JScript, IObjectSafety, iface)
377
378 static HRESULT WINAPI JScriptSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
379 {
380     JScript *This = OBJSAFETY_THIS(iface);
381     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
382 }
383
384 static ULONG WINAPI JScriptSafety_AddRef(IObjectSafety *iface)
385 {
386     JScript *This = OBJSAFETY_THIS(iface);
387     return IActiveScript_AddRef(ACTSCRIPT(This));
388 }
389
390 static ULONG WINAPI JScriptSafety_Release(IObjectSafety *iface)
391 {
392     JScript *This = OBJSAFETY_THIS(iface);
393     return IActiveScript_Release(ACTSCRIPT(This));
394 }
395
396 static HRESULT WINAPI JScriptSafety_GetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid,
397         DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
398 {
399     JScript *This = OBJSAFETY_THIS(iface);
400     FIXME("(%p)->(%s %p %p)\n", This, debugstr_guid(riid), pdwSupportedOptions, pdwEnabledOptions);
401     return E_NOTIMPL;
402 }
403
404 static HRESULT WINAPI JScriptSafety_SetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid,
405         DWORD dwOptionSetMask, DWORD dwEnabledOptions)
406 {
407     JScript *This = OBJSAFETY_THIS(iface);
408     FIXME("(%p)->(%s %x %x)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions);
409     return S_OK;
410 }
411
412 #undef OBJSAFETY_THIS
413
414 static const IObjectSafetyVtbl JScriptSafetyVtbl = {
415     JScriptSafety_QueryInterface,
416     JScriptSafety_AddRef,
417     JScriptSafety_Release,
418     JScriptSafety_GetInterfaceSafetyOptions,
419     JScriptSafety_SetInterfaceSafetyOptions
420 };
421
422 HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter,
423                                              REFIID riid, void **ppv)
424 {
425     JScript *ret;
426     HRESULT hres;
427
428     TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
429
430     ret = heap_alloc(sizeof(*ret));
431
432     ret->lpIActiveScriptVtbl                 = &JScriptVtbl;
433     ret->lpIActiveScriptParseVtbl            = &JScriptParseVtbl;
434     ret->lpIActiveScriptParseProcedure2Vtbl  = &JScriptParseProcedureVtbl;
435     ret->lpIActiveScriptPropertyVtbl         = &JScriptPropertyVtbl;
436     ret->lpIObjectSafetyVtbl                 = &JScriptSafetyVtbl;
437     ret->ref = 1;
438
439     hres = IActiveScript_QueryInterface(ACTSCRIPT(ret), riid, ppv);
440     IActiveScript_Release(ACTSCRIPT(ret));
441     return hres;
442 }