2 * Copyright 2008,2009 Jacek Caban for CodeWeavers
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.
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.
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
28 #include "wine/debug.h"
30 #include "mshtml_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
34 typedef struct HTMLPluginsCollection HTMLPluginsCollection
;
35 typedef struct HTMLMimeTypesCollection HTMLMimeTypesCollection
;
39 IOmNavigator IOmNavigator_iface
;
43 HTMLPluginsCollection
*plugins
;
44 HTMLMimeTypesCollection
*mime_types
;
49 IHTMLDOMImplementation IHTMLDOMImplementation_iface
;
50 IHTMLDOMImplementation2 IHTMLDOMImplementation2_iface
;
54 nsIDOMDOMImplementation
*implementation
;
55 GeckoBrowser
*browser
;
56 } HTMLDOMImplementation
;
58 static inline HTMLDOMImplementation
*impl_from_IHTMLDOMImplementation(IHTMLDOMImplementation
*iface
)
60 return CONTAINING_RECORD(iface
, HTMLDOMImplementation
, IHTMLDOMImplementation_iface
);
63 static HRESULT WINAPI
HTMLDOMImplementation_QueryInterface(IHTMLDOMImplementation
*iface
, REFIID riid
, void **ppv
)
65 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation(iface
);
67 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
69 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IHTMLDOMImplementation
, riid
)) {
70 *ppv
= &This
->IHTMLDOMImplementation_iface
;
71 }else if(IsEqualGUID(&IID_IHTMLDOMImplementation2
, riid
)) {
72 *ppv
= &This
->IHTMLDOMImplementation2_iface
;
73 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
74 return *ppv
? S_OK
: E_NOINTERFACE
;
76 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
81 IUnknown_AddRef((IUnknown
*)*ppv
);
85 static ULONG WINAPI
HTMLDOMImplementation_AddRef(IHTMLDOMImplementation
*iface
)
87 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation(iface
);
88 LONG ref
= InterlockedIncrement(&This
->ref
);
90 TRACE("(%p) ref=%ld\n", This
, ref
);
95 static ULONG WINAPI
HTMLDOMImplementation_Release(IHTMLDOMImplementation
*iface
)
97 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation(iface
);
98 LONG ref
= InterlockedDecrement(&This
->ref
);
100 TRACE("(%p) ref=%ld\n", This
, ref
);
103 assert(!This
->browser
);
104 if(This
->implementation
)
105 nsIDOMDOMImplementation_Release(This
->implementation
);
106 release_dispex(&This
->dispex
);
113 static HRESULT WINAPI
HTMLDOMImplementation_GetTypeInfoCount(IHTMLDOMImplementation
*iface
, UINT
*pctinfo
)
115 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation(iface
);
117 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
120 static HRESULT WINAPI
HTMLDOMImplementation_GetTypeInfo(IHTMLDOMImplementation
*iface
, UINT iTInfo
,
121 LCID lcid
, ITypeInfo
**ppTInfo
)
123 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation(iface
);
125 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
128 static HRESULT WINAPI
HTMLDOMImplementation_GetIDsOfNames(IHTMLDOMImplementation
*iface
, REFIID riid
,
129 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
131 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation(iface
);
133 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
,
134 cNames
, lcid
, rgDispId
);
137 static HRESULT WINAPI
HTMLDOMImplementation_Invoke(IHTMLDOMImplementation
*iface
, DISPID dispIdMember
,
138 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
139 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
141 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation(iface
);
143 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
,
144 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
147 static HRESULT WINAPI
HTMLDOMImplementation_hasFeature(IHTMLDOMImplementation
*iface
, BSTR feature
,
148 VARIANT version
, VARIANT_BOOL
*pfHasFeature
)
150 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation(iface
);
152 FIXME("(%p)->(%s %s %p) returning false\n", This
, debugstr_w(feature
), debugstr_variant(&version
), pfHasFeature
);
154 *pfHasFeature
= VARIANT_FALSE
;
158 static const IHTMLDOMImplementationVtbl HTMLDOMImplementationVtbl
= {
159 HTMLDOMImplementation_QueryInterface
,
160 HTMLDOMImplementation_AddRef
,
161 HTMLDOMImplementation_Release
,
162 HTMLDOMImplementation_GetTypeInfoCount
,
163 HTMLDOMImplementation_GetTypeInfo
,
164 HTMLDOMImplementation_GetIDsOfNames
,
165 HTMLDOMImplementation_Invoke
,
166 HTMLDOMImplementation_hasFeature
169 static inline HTMLDOMImplementation
*impl_from_IHTMLDOMImplementation2(IHTMLDOMImplementation2
*iface
)
171 return CONTAINING_RECORD(iface
, HTMLDOMImplementation
, IHTMLDOMImplementation2_iface
);
174 static HRESULT WINAPI
HTMLDOMImplementation2_QueryInterface(IHTMLDOMImplementation2
*iface
, REFIID riid
, void **ppv
)
176 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
177 return IHTMLDOMImplementation_QueryInterface(&This
->IHTMLDOMImplementation_iface
, riid
, ppv
);
180 static ULONG WINAPI
HTMLDOMImplementation2_AddRef(IHTMLDOMImplementation2
*iface
)
182 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
183 return IHTMLDOMImplementation_AddRef(&This
->IHTMLDOMImplementation_iface
);
186 static ULONG WINAPI
HTMLDOMImplementation2_Release(IHTMLDOMImplementation2
*iface
)
188 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
189 return IHTMLDOMImplementation_Release(&This
->IHTMLDOMImplementation_iface
);
192 static HRESULT WINAPI
HTMLDOMImplementation2_GetTypeInfoCount(IHTMLDOMImplementation2
*iface
, UINT
*pctinfo
)
194 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
195 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
198 static HRESULT WINAPI
HTMLDOMImplementation2_GetTypeInfo(IHTMLDOMImplementation2
*iface
, UINT iTInfo
,
199 LCID lcid
, ITypeInfo
**ppTInfo
)
201 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
202 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
205 static HRESULT WINAPI
HTMLDOMImplementation2_GetIDsOfNames(IHTMLDOMImplementation2
*iface
, REFIID riid
,
206 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
208 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
209 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
,
210 cNames
, lcid
, rgDispId
);
213 static HRESULT WINAPI
HTMLDOMImplementation2_Invoke(IHTMLDOMImplementation2
*iface
, DISPID dispIdMember
,
214 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
215 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
217 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
218 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
,
219 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
222 static HRESULT WINAPI
HTMLDOMImplementation2_createDocumentType(IHTMLDOMImplementation2
*iface
, BSTR name
,
223 VARIANT
*public_id
, VARIANT
*system_id
, IDOMDocumentType
**new_type
)
225 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
226 FIXME("(%p)->(%s %s %s %p)\n", This
, debugstr_w(name
), debugstr_variant(public_id
),
227 debugstr_variant(system_id
), new_type
);
231 static HRESULT WINAPI
HTMLDOMImplementation2_createDocument(IHTMLDOMImplementation2
*iface
, VARIANT
*ns
,
232 VARIANT
*tag_name
, IDOMDocumentType
*document_type
, IHTMLDocument7
**new_document
)
234 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
235 FIXME("(%p)->(%s %s %p %p)\n", This
, debugstr_variant(ns
), debugstr_variant(tag_name
),
236 document_type
, new_document
);
240 static HRESULT WINAPI
HTMLDOMImplementation2_createHTMLDocument(IHTMLDOMImplementation2
*iface
, BSTR title
,
241 IHTMLDocument7
**new_document
)
243 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
244 HTMLDocumentNode
*new_document_node
;
245 nsIDOMHTMLDocument
*html_doc
;
251 FIXME("(%p)->(%s %p)\n", This
, debugstr_w(title
), new_document
);
256 nsAString_InitDepend(&title_str
, title
);
257 nsres
= nsIDOMDOMImplementation_CreateHTMLDocument(This
->implementation
, &title_str
, &doc
);
258 nsAString_Finish(&title_str
);
259 if(NS_FAILED(nsres
)) {
260 ERR("CreateHTMLDocument failed: %08lx\n", nsres
);
264 nsres
= nsIDOMDocument_QueryInterface(doc
, &IID_nsIDOMHTMLDocument
, (void**)&html_doc
);
265 nsIDOMDocument_Release(doc
);
266 assert(nsres
== NS_OK
);
268 hres
= create_document_node(html_doc
, This
->browser
, NULL
, dispex_compat_mode(&This
->dispex
), &new_document_node
);
269 nsIDOMHTMLDocument_Release(html_doc
);
273 *new_document
= &new_document_node
->basedoc
.IHTMLDocument7_iface
;
277 static HRESULT WINAPI
HTMLDOMImplementation2_hasFeature(IHTMLDOMImplementation2
*iface
, BSTR feature
,
278 VARIANT version
, VARIANT_BOOL
*pfHasFeature
)
280 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
282 FIXME("(%p)->(%s %s %p) returning false\n", This
, debugstr_w(feature
), debugstr_variant(&version
), pfHasFeature
);
284 *pfHasFeature
= VARIANT_FALSE
;
288 static const IHTMLDOMImplementation2Vtbl HTMLDOMImplementation2Vtbl
= {
289 HTMLDOMImplementation2_QueryInterface
,
290 HTMLDOMImplementation2_AddRef
,
291 HTMLDOMImplementation2_Release
,
292 HTMLDOMImplementation2_GetTypeInfoCount
,
293 HTMLDOMImplementation2_GetTypeInfo
,
294 HTMLDOMImplementation2_GetIDsOfNames
,
295 HTMLDOMImplementation2_Invoke
,
296 HTMLDOMImplementation2_createDocumentType
,
297 HTMLDOMImplementation2_createDocument
,
298 HTMLDOMImplementation2_createHTMLDocument
,
299 HTMLDOMImplementation2_hasFeature
302 static const tid_t HTMLDOMImplementation_iface_tids
[] = {
303 IHTMLDOMImplementation_tid
,
306 static dispex_static_data_t HTMLDOMImplementation_dispex
= {
307 L
"DOMImplementation",
309 DispHTMLDOMImplementation_tid
,
310 HTMLDOMImplementation_iface_tids
313 HRESULT
create_dom_implementation(HTMLDocumentNode
*doc_node
, IHTMLDOMImplementation
**ret
)
315 HTMLDOMImplementation
*dom_implementation
;
318 if(!doc_node
->browser
)
321 dom_implementation
= heap_alloc_zero(sizeof(*dom_implementation
));
322 if(!dom_implementation
)
323 return E_OUTOFMEMORY
;
325 dom_implementation
->IHTMLDOMImplementation_iface
.lpVtbl
= &HTMLDOMImplementationVtbl
;
326 dom_implementation
->IHTMLDOMImplementation2_iface
.lpVtbl
= &HTMLDOMImplementation2Vtbl
;
327 dom_implementation
->ref
= 1;
328 dom_implementation
->browser
= doc_node
->browser
;
330 init_dispatch(&dom_implementation
->dispex
, (IUnknown
*)&dom_implementation
->IHTMLDOMImplementation_iface
,
331 &HTMLDOMImplementation_dispex
, doc_node
->document_mode
);
333 nsres
= nsIDOMHTMLDocument_GetImplementation(doc_node
->nsdoc
, &dom_implementation
->implementation
);
334 if(NS_FAILED(nsres
)) {
335 ERR("GetDOMImplementation failed: %08lx\n", nsres
);
336 IHTMLDOMImplementation_Release(&dom_implementation
->IHTMLDOMImplementation_iface
);
340 *ret
= &dom_implementation
->IHTMLDOMImplementation_iface
;
344 void detach_dom_implementation(IHTMLDOMImplementation
*iface
)
346 HTMLDOMImplementation
*dom_implementation
= impl_from_IHTMLDOMImplementation(iface
);
347 dom_implementation
->browser
= NULL
;
352 IHTMLScreen IHTMLScreen_iface
;
357 static inline HTMLScreen
*impl_from_IHTMLScreen(IHTMLScreen
*iface
)
359 return CONTAINING_RECORD(iface
, HTMLScreen
, IHTMLScreen_iface
);
362 static HRESULT WINAPI
HTMLScreen_QueryInterface(IHTMLScreen
*iface
, REFIID riid
, void **ppv
)
364 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
366 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
368 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
369 *ppv
= &This
->IHTMLScreen_iface
;
370 }else if(IsEqualGUID(&IID_IHTMLScreen
, riid
)) {
371 *ppv
= &This
->IHTMLScreen_iface
;
372 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
373 return *ppv
? S_OK
: E_NOINTERFACE
;
376 WARN("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
377 return E_NOINTERFACE
;
380 IUnknown_AddRef((IUnknown
*)*ppv
);
384 static ULONG WINAPI
HTMLScreen_AddRef(IHTMLScreen
*iface
)
386 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
387 LONG ref
= InterlockedIncrement(&This
->ref
);
389 TRACE("(%p) ref=%ld\n", This
, ref
);
394 static ULONG WINAPI
HTMLScreen_Release(IHTMLScreen
*iface
)
396 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
397 LONG ref
= InterlockedDecrement(&This
->ref
);
399 TRACE("(%p) ref=%ld\n", This
, ref
);
402 release_dispex(&This
->dispex
);
409 static HRESULT WINAPI
HTMLScreen_GetTypeInfoCount(IHTMLScreen
*iface
, UINT
*pctinfo
)
411 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
412 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
415 static HRESULT WINAPI
HTMLScreen_GetTypeInfo(IHTMLScreen
*iface
, UINT iTInfo
,
416 LCID lcid
, ITypeInfo
**ppTInfo
)
418 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
419 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
422 static HRESULT WINAPI
HTMLScreen_GetIDsOfNames(IHTMLScreen
*iface
, REFIID riid
,
423 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
425 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
426 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
430 static HRESULT WINAPI
HTMLScreen_Invoke(IHTMLScreen
*iface
, DISPID dispIdMember
,
431 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
432 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
434 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
435 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
436 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
439 static HRESULT WINAPI
HTMLScreen_get_colorDepth(IHTMLScreen
*iface
, LONG
*p
)
441 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
444 TRACE("(%p)->(%p)\n", This
, p
);
446 *p
= GetDeviceCaps(hdc
, BITSPIXEL
);
451 static HRESULT WINAPI
HTMLScreen_put_bufferDepth(IHTMLScreen
*iface
, LONG v
)
453 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
454 FIXME("(%p)->(%ld)\n", This
, v
);
458 static HRESULT WINAPI
HTMLScreen_get_bufferDepth(IHTMLScreen
*iface
, LONG
*p
)
460 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
461 FIXME("(%p)->(%p)\n", This
, p
);
465 static HRESULT WINAPI
HTMLScreen_get_width(IHTMLScreen
*iface
, LONG
*p
)
467 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
469 TRACE("(%p)->(%p)\n", This
, p
);
471 *p
= GetSystemMetrics(SM_CXSCREEN
);
475 static HRESULT WINAPI
HTMLScreen_get_height(IHTMLScreen
*iface
, LONG
*p
)
477 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
479 TRACE("(%p)->(%p)\n", This
, p
);
481 *p
= GetSystemMetrics(SM_CYSCREEN
);
485 static HRESULT WINAPI
HTMLScreen_put_updateInterval(IHTMLScreen
*iface
, LONG v
)
487 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
488 FIXME("(%p)->(%ld)\n", This
, v
);
492 static HRESULT WINAPI
HTMLScreen_get_updateInterval(IHTMLScreen
*iface
, LONG
*p
)
494 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
495 FIXME("(%p)->(%p)\n", This
, p
);
499 static HRESULT WINAPI
HTMLScreen_get_availHeight(IHTMLScreen
*iface
, LONG
*p
)
501 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
504 TRACE("(%p)->(%p)\n", This
, p
);
506 if(!SystemParametersInfoW(SPI_GETWORKAREA
, 0, &work_area
, 0))
509 *p
= work_area
.bottom
-work_area
.top
;
513 static HRESULT WINAPI
HTMLScreen_get_availWidth(IHTMLScreen
*iface
, LONG
*p
)
515 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
518 TRACE("(%p)->(%p)\n", This
, p
);
520 if(!SystemParametersInfoW(SPI_GETWORKAREA
, 0, &work_area
, 0))
523 *p
= work_area
.right
-work_area
.left
;
527 static HRESULT WINAPI
HTMLScreen_get_fontSmoothingEnabled(IHTMLScreen
*iface
, VARIANT_BOOL
*p
)
529 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
530 FIXME("(%p)->(%p)\n", This
, p
);
534 static const IHTMLScreenVtbl HTMLSreenVtbl
= {
535 HTMLScreen_QueryInterface
,
538 HTMLScreen_GetTypeInfoCount
,
539 HTMLScreen_GetTypeInfo
,
540 HTMLScreen_GetIDsOfNames
,
542 HTMLScreen_get_colorDepth
,
543 HTMLScreen_put_bufferDepth
,
544 HTMLScreen_get_bufferDepth
,
545 HTMLScreen_get_width
,
546 HTMLScreen_get_height
,
547 HTMLScreen_put_updateInterval
,
548 HTMLScreen_get_updateInterval
,
549 HTMLScreen_get_availHeight
,
550 HTMLScreen_get_availWidth
,
551 HTMLScreen_get_fontSmoothingEnabled
554 static const tid_t HTMLScreen_iface_tids
[] = {
558 static dispex_static_data_t HTMLScreen_dispex
= {
562 HTMLScreen_iface_tids
565 HRESULT
create_html_screen(compat_mode_t compat_mode
, IHTMLScreen
**ret
)
569 screen
= heap_alloc_zero(sizeof(HTMLScreen
));
571 return E_OUTOFMEMORY
;
573 screen
->IHTMLScreen_iface
.lpVtbl
= &HTMLSreenVtbl
;
576 init_dispatch(&screen
->dispex
, (IUnknown
*)&screen
->IHTMLScreen_iface
, &HTMLScreen_dispex
, compat_mode
);
578 *ret
= &screen
->IHTMLScreen_iface
;
582 static inline OmHistory
*impl_from_IOmHistory(IOmHistory
*iface
)
584 return CONTAINING_RECORD(iface
, OmHistory
, IOmHistory_iface
);
587 static HRESULT WINAPI
OmHistory_QueryInterface(IOmHistory
*iface
, REFIID riid
, void **ppv
)
589 OmHistory
*This
= impl_from_IOmHistory(iface
);
591 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
593 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
594 *ppv
= &This
->IOmHistory_iface
;
595 }else if(IsEqualGUID(&IID_IOmHistory
, riid
)) {
596 *ppv
= &This
->IOmHistory_iface
;
597 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
598 return *ppv
? S_OK
: E_NOINTERFACE
;
600 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
602 return E_NOINTERFACE
;
605 IUnknown_AddRef((IUnknown
*)*ppv
);
609 static ULONG WINAPI
OmHistory_AddRef(IOmHistory
*iface
)
611 OmHistory
*This
= impl_from_IOmHistory(iface
);
612 LONG ref
= InterlockedIncrement(&This
->ref
);
614 TRACE("(%p) ref=%ld\n", This
, ref
);
619 static ULONG WINAPI
OmHistory_Release(IOmHistory
*iface
)
621 OmHistory
*This
= impl_from_IOmHistory(iface
);
622 LONG ref
= InterlockedDecrement(&This
->ref
);
624 TRACE("(%p) ref=%ld\n", This
, ref
);
627 release_dispex(&This
->dispex
);
634 static HRESULT WINAPI
OmHistory_GetTypeInfoCount(IOmHistory
*iface
, UINT
*pctinfo
)
636 OmHistory
*This
= impl_from_IOmHistory(iface
);
637 FIXME("(%p)->(%p)\n", This
, pctinfo
);
641 static HRESULT WINAPI
OmHistory_GetTypeInfo(IOmHistory
*iface
, UINT iTInfo
,
642 LCID lcid
, ITypeInfo
**ppTInfo
)
644 OmHistory
*This
= impl_from_IOmHistory(iface
);
646 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
649 static HRESULT WINAPI
OmHistory_GetIDsOfNames(IOmHistory
*iface
, REFIID riid
, LPOLESTR
*rgszNames
, UINT cNames
,
650 LCID lcid
, DISPID
*rgDispId
)
652 OmHistory
*This
= impl_from_IOmHistory(iface
);
654 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
658 static HRESULT WINAPI
OmHistory_Invoke(IOmHistory
*iface
, DISPID dispIdMember
, REFIID riid
, LCID lcid
,
659 WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
661 OmHistory
*This
= impl_from_IOmHistory(iface
);
663 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
664 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
667 static HRESULT WINAPI
OmHistory_get_length(IOmHistory
*iface
, short *p
)
669 OmHistory
*This
= impl_from_IOmHistory(iface
);
670 GeckoBrowser
*browser
= NULL
;
672 TRACE("(%p)->(%p)\n", This
, p
);
674 if(This
->window
&& This
->window
->base
.outer_window
)
675 browser
= This
->window
->base
.outer_window
->browser
;
677 *p
= browser
&& browser
->doc
->travel_log
678 ? ITravelLog_CountEntries(browser
->doc
->travel_log
, browser
->doc
->browser_service
)
683 static HRESULT WINAPI
OmHistory_back(IOmHistory
*iface
, VARIANT
*pvargdistance
)
685 OmHistory
*This
= impl_from_IOmHistory(iface
);
686 FIXME("(%p)->(%s)\n", This
, debugstr_variant(pvargdistance
));
690 static HRESULT WINAPI
OmHistory_forward(IOmHistory
*iface
, VARIANT
*pvargdistance
)
692 OmHistory
*This
= impl_from_IOmHistory(iface
);
693 FIXME("(%p)->(%s)\n", This
, debugstr_variant(pvargdistance
));
697 static HRESULT WINAPI
OmHistory_go(IOmHistory
*iface
, VARIANT
*pvargdistance
)
699 OmHistory
*This
= impl_from_IOmHistory(iface
);
700 FIXME("(%p)->(%s)\n", This
, debugstr_variant(pvargdistance
));
704 static const IOmHistoryVtbl OmHistoryVtbl
= {
705 OmHistory_QueryInterface
,
708 OmHistory_GetTypeInfoCount
,
709 OmHistory_GetTypeInfo
,
710 OmHistory_GetIDsOfNames
,
712 OmHistory_get_length
,
718 static const tid_t OmHistory_iface_tids
[] = {
722 static dispex_static_data_t OmHistory_dispex
= {
730 HRESULT
create_history(HTMLInnerWindow
*window
, OmHistory
**ret
)
734 history
= heap_alloc_zero(sizeof(*history
));
736 return E_OUTOFMEMORY
;
738 init_dispatch(&history
->dispex
, (IUnknown
*)&history
->IOmHistory_iface
, &OmHistory_dispex
,
739 dispex_compat_mode(&window
->event_target
.dispex
));
740 history
->IOmHistory_iface
.lpVtbl
= &OmHistoryVtbl
;
743 history
->window
= window
;
749 struct HTMLPluginsCollection
{
751 IHTMLPluginsCollection IHTMLPluginsCollection_iface
;
755 OmNavigator
*navigator
;
758 static inline HTMLPluginsCollection
*impl_from_IHTMLPluginsCollection(IHTMLPluginsCollection
*iface
)
760 return CONTAINING_RECORD(iface
, HTMLPluginsCollection
, IHTMLPluginsCollection_iface
);
763 static HRESULT WINAPI
HTMLPluginsCollection_QueryInterface(IHTMLPluginsCollection
*iface
, REFIID riid
, void **ppv
)
765 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
767 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
769 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
770 *ppv
= &This
->IHTMLPluginsCollection_iface
;
771 }else if(IsEqualGUID(&IID_IHTMLPluginsCollection
, riid
)) {
772 *ppv
= &This
->IHTMLPluginsCollection_iface
;
773 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
774 return *ppv
? S_OK
: E_NOINTERFACE
;
777 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
778 return E_NOINTERFACE
;
781 IUnknown_AddRef((IUnknown
*)*ppv
);
785 static ULONG WINAPI
HTMLPluginsCollection_AddRef(IHTMLPluginsCollection
*iface
)
787 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
788 LONG ref
= InterlockedIncrement(&This
->ref
);
790 TRACE("(%p) ref=%ld\n", This
, ref
);
795 static ULONG WINAPI
HTMLPluginsCollection_Release(IHTMLPluginsCollection
*iface
)
797 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
798 LONG ref
= InterlockedDecrement(&This
->ref
);
800 TRACE("(%p) ref=%ld\n", This
, ref
);
804 This
->navigator
->plugins
= NULL
;
805 release_dispex(&This
->dispex
);
812 static HRESULT WINAPI
HTMLPluginsCollection_GetTypeInfoCount(IHTMLPluginsCollection
*iface
, UINT
*pctinfo
)
814 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
815 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
818 static HRESULT WINAPI
HTMLPluginsCollection_GetTypeInfo(IHTMLPluginsCollection
*iface
, UINT iTInfo
,
819 LCID lcid
, ITypeInfo
**ppTInfo
)
821 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
822 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
825 static HRESULT WINAPI
HTMLPluginsCollection_GetIDsOfNames(IHTMLPluginsCollection
*iface
, REFIID riid
,
826 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
828 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
829 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
833 static HRESULT WINAPI
HTMLPluginsCollection_Invoke(IHTMLPluginsCollection
*iface
, DISPID dispIdMember
,
834 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
835 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
837 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
838 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
,
839 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
842 static HRESULT WINAPI
HTMLPluginsCollection_get_length(IHTMLPluginsCollection
*iface
, LONG
*p
)
844 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
846 TRACE("(%p)->(%p)\n", This
, p
);
848 /* IE always returns 0 here */
853 static HRESULT WINAPI
HTMLPluginsCollection_refresh(IHTMLPluginsCollection
*iface
, VARIANT_BOOL reload
)
855 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
857 TRACE("(%p)->(%x)\n", This
, reload
);
859 /* Nothing to do here. */
863 static const IHTMLPluginsCollectionVtbl HTMLPluginsCollectionVtbl
= {
864 HTMLPluginsCollection_QueryInterface
,
865 HTMLPluginsCollection_AddRef
,
866 HTMLPluginsCollection_Release
,
867 HTMLPluginsCollection_GetTypeInfoCount
,
868 HTMLPluginsCollection_GetTypeInfo
,
869 HTMLPluginsCollection_GetIDsOfNames
,
870 HTMLPluginsCollection_Invoke
,
871 HTMLPluginsCollection_get_length
,
872 HTMLPluginsCollection_refresh
875 static const tid_t HTMLPluginsCollection_iface_tids
[] = {
876 IHTMLPluginsCollection_tid
,
879 static dispex_static_data_t HTMLPluginsCollection_dispex
= {
883 HTMLPluginsCollection_iface_tids
886 static HRESULT
create_plugins_collection(OmNavigator
*navigator
, HTMLPluginsCollection
**ret
)
888 HTMLPluginsCollection
*col
;
890 col
= heap_alloc_zero(sizeof(*col
));
892 return E_OUTOFMEMORY
;
894 col
->IHTMLPluginsCollection_iface
.lpVtbl
= &HTMLPluginsCollectionVtbl
;
896 col
->navigator
= navigator
;
898 init_dispatch(&col
->dispex
, (IUnknown
*)&col
->IHTMLPluginsCollection_iface
,
899 &HTMLPluginsCollection_dispex
, dispex_compat_mode(&navigator
->dispex
));
905 struct HTMLMimeTypesCollection
{
907 IHTMLMimeTypesCollection IHTMLMimeTypesCollection_iface
;
911 OmNavigator
*navigator
;
914 static inline HTMLMimeTypesCollection
*impl_from_IHTMLMimeTypesCollection(IHTMLMimeTypesCollection
*iface
)
916 return CONTAINING_RECORD(iface
, HTMLMimeTypesCollection
, IHTMLMimeTypesCollection_iface
);
919 static HRESULT WINAPI
HTMLMimeTypesCollection_QueryInterface(IHTMLMimeTypesCollection
*iface
, REFIID riid
, void **ppv
)
921 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
923 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
925 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
926 *ppv
= &This
->IHTMLMimeTypesCollection_iface
;
927 }else if(IsEqualGUID(&IID_IHTMLMimeTypesCollection
, riid
)) {
928 *ppv
= &This
->IHTMLMimeTypesCollection_iface
;
929 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
930 return *ppv
? S_OK
: E_NOINTERFACE
;
932 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
934 return E_NOINTERFACE
;
937 IUnknown_AddRef((IUnknown
*)*ppv
);
941 static ULONG WINAPI
HTMLMimeTypesCollection_AddRef(IHTMLMimeTypesCollection
*iface
)
943 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
944 LONG ref
= InterlockedIncrement(&This
->ref
);
946 TRACE("(%p) ref=%ld\n", This
, ref
);
951 static ULONG WINAPI
HTMLMimeTypesCollection_Release(IHTMLMimeTypesCollection
*iface
)
953 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
954 LONG ref
= InterlockedDecrement(&This
->ref
);
956 TRACE("(%p) ref=%ld\n", This
, ref
);
960 This
->navigator
->mime_types
= NULL
;
961 release_dispex(&This
->dispex
);
968 static HRESULT WINAPI
HTMLMimeTypesCollection_GetTypeInfoCount(IHTMLMimeTypesCollection
*iface
, UINT
*pctinfo
)
970 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
971 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
974 static HRESULT WINAPI
HTMLMimeTypesCollection_GetTypeInfo(IHTMLMimeTypesCollection
*iface
, UINT iTInfo
,
975 LCID lcid
, ITypeInfo
**ppTInfo
)
977 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
978 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
981 static HRESULT WINAPI
HTMLMimeTypesCollection_GetIDsOfNames(IHTMLMimeTypesCollection
*iface
, REFIID riid
,
982 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
984 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
985 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
989 static HRESULT WINAPI
HTMLMimeTypesCollection_Invoke(IHTMLMimeTypesCollection
*iface
, DISPID dispIdMember
,
990 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
991 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
993 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
994 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
,
995 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
998 static HRESULT WINAPI
HTMLMimeTypesCollection_get_length(IHTMLMimeTypesCollection
*iface
, LONG
*p
)
1000 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
1002 TRACE("(%p)->(%p)\n", This
, p
);
1004 /* This is just a stub for compatibility with other browser in IE */
1009 static const IHTMLMimeTypesCollectionVtbl HTMLMimeTypesCollectionVtbl
= {
1010 HTMLMimeTypesCollection_QueryInterface
,
1011 HTMLMimeTypesCollection_AddRef
,
1012 HTMLMimeTypesCollection_Release
,
1013 HTMLMimeTypesCollection_GetTypeInfoCount
,
1014 HTMLMimeTypesCollection_GetTypeInfo
,
1015 HTMLMimeTypesCollection_GetIDsOfNames
,
1016 HTMLMimeTypesCollection_Invoke
,
1017 HTMLMimeTypesCollection_get_length
1020 static const tid_t HTMLMimeTypesCollection_iface_tids
[] = {
1021 IHTMLMimeTypesCollection_tid
,
1024 static dispex_static_data_t HTMLMimeTypesCollection_dispex
= {
1027 IHTMLMimeTypesCollection_tid
,
1028 HTMLMimeTypesCollection_iface_tids
1031 static HRESULT
create_mime_types_collection(OmNavigator
*navigator
, HTMLMimeTypesCollection
**ret
)
1033 HTMLMimeTypesCollection
*col
;
1035 col
= heap_alloc_zero(sizeof(*col
));
1037 return E_OUTOFMEMORY
;
1039 col
->IHTMLMimeTypesCollection_iface
.lpVtbl
= &HTMLMimeTypesCollectionVtbl
;
1041 col
->navigator
= navigator
;
1043 init_dispatch(&col
->dispex
, (IUnknown
*)&col
->IHTMLMimeTypesCollection_iface
,
1044 &HTMLMimeTypesCollection_dispex
, dispex_compat_mode(&navigator
->dispex
));
1050 static inline OmNavigator
*impl_from_IOmNavigator(IOmNavigator
*iface
)
1052 return CONTAINING_RECORD(iface
, OmNavigator
, IOmNavigator_iface
);
1055 static HRESULT WINAPI
OmNavigator_QueryInterface(IOmNavigator
*iface
, REFIID riid
, void **ppv
)
1057 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1059 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
1061 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1062 *ppv
= &This
->IOmNavigator_iface
;
1063 }else if(IsEqualGUID(&IID_IOmNavigator
, riid
)) {
1064 *ppv
= &This
->IOmNavigator_iface
;
1065 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
1066 return *ppv
? S_OK
: E_NOINTERFACE
;
1068 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
1070 return E_NOINTERFACE
;
1073 IUnknown_AddRef((IUnknown
*)*ppv
);
1077 static ULONG WINAPI
OmNavigator_AddRef(IOmNavigator
*iface
)
1079 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1080 LONG ref
= InterlockedIncrement(&This
->ref
);
1082 TRACE("(%p) ref=%ld\n", This
, ref
);
1087 static ULONG WINAPI
OmNavigator_Release(IOmNavigator
*iface
)
1089 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1090 LONG ref
= InterlockedDecrement(&This
->ref
);
1092 TRACE("(%p) ref=%ld\n", This
, ref
);
1096 This
->plugins
->navigator
= NULL
;
1097 if(This
->mime_types
)
1098 This
->mime_types
->navigator
= NULL
;
1099 release_dispex(&This
->dispex
);
1106 static HRESULT WINAPI
OmNavigator_GetTypeInfoCount(IOmNavigator
*iface
, UINT
*pctinfo
)
1108 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1109 FIXME("(%p)->(%p)\n", This
, pctinfo
);
1113 static HRESULT WINAPI
OmNavigator_GetTypeInfo(IOmNavigator
*iface
, UINT iTInfo
,
1114 LCID lcid
, ITypeInfo
**ppTInfo
)
1116 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1118 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
1121 static HRESULT WINAPI
OmNavigator_GetIDsOfNames(IOmNavigator
*iface
, REFIID riid
,
1122 LPOLESTR
*rgszNames
, UINT cNames
,
1123 LCID lcid
, DISPID
*rgDispId
)
1125 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1127 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
1131 static HRESULT WINAPI
OmNavigator_Invoke(IOmNavigator
*iface
, DISPID dispIdMember
,
1132 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
1133 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
1135 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1137 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
1138 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
1141 static HRESULT WINAPI
OmNavigator_get_appCodeName(IOmNavigator
*iface
, BSTR
*p
)
1143 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1145 TRACE("(%p)->(%p)\n", This
, p
);
1147 *p
= SysAllocString(L
"Mozilla");
1151 static HRESULT WINAPI
OmNavigator_get_appName(IOmNavigator
*iface
, BSTR
*p
)
1153 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1155 TRACE("(%p)->(%p)\n", This
, p
);
1157 *p
= SysAllocString(dispex_compat_mode(&This
->dispex
) == COMPAT_MODE_IE11
1158 ? L
"Netscape" : L
"Microsoft Internet Explorer");
1160 return E_OUTOFMEMORY
;
1165 /* undocumented, added in IE8 */
1166 extern HRESULT WINAPI
MapBrowserEmulationModeToUserAgent(const void*,WCHAR
**);
1168 /* Retrieves allocated user agent via CoTaskMemAlloc */
1169 static HRESULT
get_user_agent(OmNavigator
*navigator
, WCHAR
**user_agent
)
1173 switch(dispex_compat_mode(&navigator
->dispex
)) {
1174 case COMPAT_MODE_QUIRKS
:
1175 case COMPAT_MODE_IE5
:
1176 case COMPAT_MODE_IE7
:
1179 case COMPAT_MODE_IE8
:
1182 case COMPAT_MODE_IE9
:
1185 case COMPAT_MODE_IE10
:
1188 case COMPAT_MODE_IE11
:
1195 return MapBrowserEmulationModeToUserAgent(&version
, user_agent
);
1198 static HRESULT WINAPI
OmNavigator_get_appVersion(IOmNavigator
*iface
, BSTR
*p
)
1200 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1204 const unsigned skip_prefix
= 8; /* strlen("Mozilla/") */
1206 TRACE("(%p)->(%p)\n", This
, p
);
1208 hres
= get_user_agent(This
, &user_agent
);
1211 len
= wcslen(user_agent
);
1213 if(len
< skip_prefix
) {
1214 CoTaskMemFree(user_agent
);
1219 *p
= SysAllocStringLen(user_agent
+ skip_prefix
, len
- skip_prefix
);
1220 CoTaskMemFree(user_agent
);
1221 return *p
? S_OK
: E_OUTOFMEMORY
;
1224 static HRESULT WINAPI
OmNavigator_get_userAgent(IOmNavigator
*iface
, BSTR
*p
)
1226 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1230 TRACE("(%p)->(%p)\n", This
, p
);
1232 hres
= get_user_agent(This
, &user_agent
);
1236 *p
= SysAllocString(user_agent
);
1237 CoTaskMemFree(user_agent
);
1238 return *p
? S_OK
: E_OUTOFMEMORY
;
1241 static HRESULT WINAPI
OmNavigator_javaEnabled(IOmNavigator
*iface
, VARIANT_BOOL
*enabled
)
1243 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1245 FIXME("(%p)->(%p) semi-stub\n", This
, enabled
);
1247 *enabled
= VARIANT_TRUE
;
1251 static HRESULT WINAPI
OmNavigator_taintEnabled(IOmNavigator
*iface
, VARIANT_BOOL
*enabled
)
1253 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1254 FIXME("(%p)->(%p)\n", This
, enabled
);
1258 static HRESULT WINAPI
OmNavigator_get_mimeTypes(IOmNavigator
*iface
, IHTMLMimeTypesCollection
**p
)
1260 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1262 TRACE("(%p)->(%p)\n", This
, p
);
1264 if(!This
->mime_types
) {
1267 hres
= create_mime_types_collection(This
, &This
->mime_types
);
1271 IHTMLMimeTypesCollection_AddRef(&This
->mime_types
->IHTMLMimeTypesCollection_iface
);
1274 *p
= &This
->mime_types
->IHTMLMimeTypesCollection_iface
;
1278 static HRESULT WINAPI
OmNavigator_get_plugins(IOmNavigator
*iface
, IHTMLPluginsCollection
**p
)
1280 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1282 TRACE("(%p)->(%p)\n", This
, p
);
1284 if(!This
->plugins
) {
1287 hres
= create_plugins_collection(This
, &This
->plugins
);
1291 IHTMLPluginsCollection_AddRef(&This
->plugins
->IHTMLPluginsCollection_iface
);
1294 *p
= &This
->plugins
->IHTMLPluginsCollection_iface
;
1298 static HRESULT WINAPI
OmNavigator_get_cookieEnabled(IOmNavigator
*iface
, VARIANT_BOOL
*p
)
1300 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1302 WARN("(%p)->(%p) semi-stub\n", This
, p
);
1308 static HRESULT WINAPI
OmNavigator_get_opsProfile(IOmNavigator
*iface
, IHTMLOpsProfile
**p
)
1310 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1311 FIXME("(%p)->(%p)\n", This
, p
);
1315 static HRESULT WINAPI
OmNavigator_toString(IOmNavigator
*iface
, BSTR
*String
)
1317 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1319 TRACE("(%p)->(%p)\n", This
, String
);
1321 return dispex_to_string(&This
->dispex
, String
);
1324 static HRESULT WINAPI
OmNavigator_get_cpuClass(IOmNavigator
*iface
, BSTR
*p
)
1326 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1328 TRACE("(%p)->(%p)\n", This
, p
);
1331 *p
= SysAllocString(L
"x64");
1333 *p
= SysAllocString(L
"x86");
1335 return *p
? S_OK
: E_OUTOFMEMORY
;
1338 static HRESULT
get_language_string(LCID lcid
, BSTR
*p
)
1343 len
= LCIDToLocaleName(lcid
, NULL
, 0, 0);
1345 WARN("LCIDToLocaleName failed: %lu\n", GetLastError());
1349 ret
= SysAllocStringLen(NULL
, len
-1);
1351 return E_OUTOFMEMORY
;
1353 len
= LCIDToLocaleName(lcid
, ret
, len
, 0);
1355 WARN("LCIDToLocaleName failed: %lu\n", GetLastError());
1364 static HRESULT WINAPI
OmNavigator_get_systemLanguage(IOmNavigator
*iface
, BSTR
*p
)
1366 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1368 TRACE("(%p)->(%p)\n", This
, p
);
1370 return get_language_string(LOCALE_SYSTEM_DEFAULT
, p
);
1373 static HRESULT WINAPI
OmNavigator_get_browserLanguage(IOmNavigator
*iface
, BSTR
*p
)
1375 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1377 TRACE("(%p)->(%p)\n", This
, p
);
1379 return get_language_string(GetUserDefaultUILanguage(), p
);
1382 static HRESULT WINAPI
OmNavigator_get_userLanguage(IOmNavigator
*iface
, BSTR
*p
)
1384 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1386 TRACE("(%p)->(%p)\n", This
, p
);
1388 return get_language_string(LOCALE_USER_DEFAULT
, p
);
1391 static HRESULT WINAPI
OmNavigator_get_platform(IOmNavigator
*iface
, BSTR
*p
)
1393 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1395 TRACE("(%p)->(%p)\n", This
, p
);
1398 *p
= SysAllocString(L
"Win64");
1400 *p
= SysAllocString(L
"Win32");
1405 static HRESULT WINAPI
OmNavigator_get_appMinorVersion(IOmNavigator
*iface
, BSTR
*p
)
1407 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1409 TRACE("(%p)->(%p)\n", This
, p
);
1411 /* NOTE: MSIE returns "0" or values like ";SP2;". Returning "0" should be enough. */
1412 *p
= SysAllocString(L
"0");
1416 static HRESULT WINAPI
OmNavigator_get_connectionSpeed(IOmNavigator
*iface
, LONG
*p
)
1418 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1419 FIXME("(%p)->(%p)\n", This
, p
);
1423 static HRESULT WINAPI
OmNavigator_get_onLine(IOmNavigator
*iface
, VARIANT_BOOL
*p
)
1425 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1427 WARN("(%p)->(%p) semi-stub, returning true\n", This
, p
);
1433 static HRESULT WINAPI
OmNavigator_get_userProfile(IOmNavigator
*iface
, IHTMLOpsProfile
**p
)
1435 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1436 FIXME("(%p)->(%p)\n", This
, p
);
1440 static const IOmNavigatorVtbl OmNavigatorVtbl
= {
1441 OmNavigator_QueryInterface
,
1443 OmNavigator_Release
,
1444 OmNavigator_GetTypeInfoCount
,
1445 OmNavigator_GetTypeInfo
,
1446 OmNavigator_GetIDsOfNames
,
1448 OmNavigator_get_appCodeName
,
1449 OmNavigator_get_appName
,
1450 OmNavigator_get_appVersion
,
1451 OmNavigator_get_userAgent
,
1452 OmNavigator_javaEnabled
,
1453 OmNavigator_taintEnabled
,
1454 OmNavigator_get_mimeTypes
,
1455 OmNavigator_get_plugins
,
1456 OmNavigator_get_cookieEnabled
,
1457 OmNavigator_get_opsProfile
,
1458 OmNavigator_toString
,
1459 OmNavigator_get_cpuClass
,
1460 OmNavigator_get_systemLanguage
,
1461 OmNavigator_get_browserLanguage
,
1462 OmNavigator_get_userLanguage
,
1463 OmNavigator_get_platform
,
1464 OmNavigator_get_appMinorVersion
,
1465 OmNavigator_get_connectionSpeed
,
1466 OmNavigator_get_onLine
,
1467 OmNavigator_get_userProfile
1470 static const tid_t OmNavigator_iface_tids
[] = {
1474 static dispex_static_data_t OmNavigator_dispex
= {
1477 DispHTMLNavigator_tid
,
1478 OmNavigator_iface_tids
1481 HRESULT
create_navigator(compat_mode_t compat_mode
, IOmNavigator
**navigator
)
1485 ret
= heap_alloc_zero(sizeof(*ret
));
1487 return E_OUTOFMEMORY
;
1489 ret
->IOmNavigator_iface
.lpVtbl
= &OmNavigatorVtbl
;
1492 init_dispatch(&ret
->dispex
, (IUnknown
*)&ret
->IOmNavigator_iface
, &OmNavigator_dispex
, compat_mode
);
1494 *navigator
= &ret
->IOmNavigator_iface
;
1500 IHTMLPerformanceTiming IHTMLPerformanceTiming_iface
;
1503 } HTMLPerformanceTiming
;
1505 static inline HTMLPerformanceTiming
*impl_from_IHTMLPerformanceTiming(IHTMLPerformanceTiming
*iface
)
1507 return CONTAINING_RECORD(iface
, HTMLPerformanceTiming
, IHTMLPerformanceTiming_iface
);
1510 static HRESULT WINAPI
HTMLPerformanceTiming_QueryInterface(IHTMLPerformanceTiming
*iface
, REFIID riid
, void **ppv
)
1512 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1514 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
1516 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1517 *ppv
= &This
->IHTMLPerformanceTiming_iface
;
1518 }else if(IsEqualGUID(&IID_IHTMLPerformanceTiming
, riid
)) {
1519 *ppv
= &This
->IHTMLPerformanceTiming_iface
;
1520 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
1521 return *ppv
? S_OK
: E_NOINTERFACE
;
1523 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
1525 return E_NOINTERFACE
;
1528 IUnknown_AddRef((IUnknown
*)*ppv
);
1532 static ULONG WINAPI
HTMLPerformanceTiming_AddRef(IHTMLPerformanceTiming
*iface
)
1534 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1535 LONG ref
= InterlockedIncrement(&This
->ref
);
1537 TRACE("(%p) ref=%ld\n", This
, ref
);
1542 static ULONG WINAPI
HTMLPerformanceTiming_Release(IHTMLPerformanceTiming
*iface
)
1544 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1545 LONG ref
= InterlockedDecrement(&This
->ref
);
1547 TRACE("(%p) ref=%ld\n", This
, ref
);
1550 release_dispex(&This
->dispex
);
1557 static HRESULT WINAPI
HTMLPerformanceTiming_GetTypeInfoCount(IHTMLPerformanceTiming
*iface
, UINT
*pctinfo
)
1559 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1560 FIXME("(%p)->(%p)\n", This
, pctinfo
);
1564 static HRESULT WINAPI
HTMLPerformanceTiming_GetTypeInfo(IHTMLPerformanceTiming
*iface
, UINT iTInfo
,
1565 LCID lcid
, ITypeInfo
**ppTInfo
)
1567 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1569 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
1572 static HRESULT WINAPI
HTMLPerformanceTiming_GetIDsOfNames(IHTMLPerformanceTiming
*iface
, REFIID riid
,
1573 LPOLESTR
*rgszNames
, UINT cNames
,
1574 LCID lcid
, DISPID
*rgDispId
)
1576 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1578 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
1582 static HRESULT WINAPI
HTMLPerformanceTiming_Invoke(IHTMLPerformanceTiming
*iface
, DISPID dispIdMember
,
1583 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
1584 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
1586 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1588 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
1589 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
1592 #define TIMING_FAKE_TIMESTAMP 0xdeadbeef
1594 static HRESULT WINAPI
HTMLPerformanceTiming_get_navigationStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1596 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1598 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1600 *p
= TIMING_FAKE_TIMESTAMP
;
1604 static HRESULT WINAPI
HTMLPerformanceTiming_get_unloadEventStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1606 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1608 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1610 *p
= TIMING_FAKE_TIMESTAMP
;
1614 static HRESULT WINAPI
HTMLPerformanceTiming_get_unloadEventEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1616 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1618 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1620 *p
= TIMING_FAKE_TIMESTAMP
;
1624 static HRESULT WINAPI
HTMLPerformanceTiming_get_redirectStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1626 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1628 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1630 *p
= TIMING_FAKE_TIMESTAMP
;
1634 static HRESULT WINAPI
HTMLPerformanceTiming_get_redirectEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1636 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1638 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1640 *p
= TIMING_FAKE_TIMESTAMP
;
1644 static HRESULT WINAPI
HTMLPerformanceTiming_get_fetchStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1646 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1648 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1650 *p
= TIMING_FAKE_TIMESTAMP
;
1654 static HRESULT WINAPI
HTMLPerformanceTiming_get_domainLookupStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1656 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1658 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1660 *p
= TIMING_FAKE_TIMESTAMP
;
1664 static HRESULT WINAPI
HTMLPerformanceTiming_get_domainLookupEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1666 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1668 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1670 *p
= TIMING_FAKE_TIMESTAMP
;
1674 static HRESULT WINAPI
HTMLPerformanceTiming_get_connectStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1676 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1678 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1680 *p
= TIMING_FAKE_TIMESTAMP
;
1684 static HRESULT WINAPI
HTMLPerformanceTiming_get_connectEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1686 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1688 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1690 *p
= TIMING_FAKE_TIMESTAMP
;
1694 static HRESULT WINAPI
HTMLPerformanceTiming_get_requestStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1696 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1698 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1700 *p
= TIMING_FAKE_TIMESTAMP
;
1704 static HRESULT WINAPI
HTMLPerformanceTiming_get_responseStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1706 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1708 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1710 *p
= TIMING_FAKE_TIMESTAMP
;
1714 static HRESULT WINAPI
HTMLPerformanceTiming_get_responseEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1716 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1718 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1720 *p
= TIMING_FAKE_TIMESTAMP
;
1724 static HRESULT WINAPI
HTMLPerformanceTiming_get_domLoading(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1726 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1728 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1730 *p
= TIMING_FAKE_TIMESTAMP
;
1734 static HRESULT WINAPI
HTMLPerformanceTiming_get_domInteractive(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1736 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1738 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1740 *p
= TIMING_FAKE_TIMESTAMP
;
1744 static HRESULT WINAPI
HTMLPerformanceTiming_get_domContentLoadedEventStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1746 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1748 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1750 *p
= TIMING_FAKE_TIMESTAMP
;
1754 static HRESULT WINAPI
HTMLPerformanceTiming_get_domContentLoadedEventEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1756 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1758 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1760 *p
= TIMING_FAKE_TIMESTAMP
;
1764 static HRESULT WINAPI
HTMLPerformanceTiming_get_domComplete(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1766 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1768 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1770 *p
= TIMING_FAKE_TIMESTAMP
;
1774 static HRESULT WINAPI
HTMLPerformanceTiming_get_loadEventStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1776 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1778 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1780 *p
= TIMING_FAKE_TIMESTAMP
;
1784 static HRESULT WINAPI
HTMLPerformanceTiming_get_loadEventEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1786 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1788 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1790 *p
= TIMING_FAKE_TIMESTAMP
;
1794 static HRESULT WINAPI
HTMLPerformanceTiming_get_msFirstPaint(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1796 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1798 FIXME("(%p)->(%p) returning fake value\n", This
, p
);
1800 *p
= TIMING_FAKE_TIMESTAMP
;
1804 static HRESULT WINAPI
HTMLPerformanceTiming_toString(IHTMLPerformanceTiming
*iface
, BSTR
*string
)
1806 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1808 TRACE("(%p)->(%p)\n", This
, string
);
1810 return dispex_to_string(&This
->dispex
, string
);
1813 static HRESULT WINAPI
HTMLPerformanceTiming_toJSON(IHTMLPerformanceTiming
*iface
, VARIANT
*p
)
1815 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1816 FIXME("(%p)->(%p)\n", This
, p
);
1820 static const IHTMLPerformanceTimingVtbl HTMLPerformanceTimingVtbl
= {
1821 HTMLPerformanceTiming_QueryInterface
,
1822 HTMLPerformanceTiming_AddRef
,
1823 HTMLPerformanceTiming_Release
,
1824 HTMLPerformanceTiming_GetTypeInfoCount
,
1825 HTMLPerformanceTiming_GetTypeInfo
,
1826 HTMLPerformanceTiming_GetIDsOfNames
,
1827 HTMLPerformanceTiming_Invoke
,
1828 HTMLPerformanceTiming_get_navigationStart
,
1829 HTMLPerformanceTiming_get_unloadEventStart
,
1830 HTMLPerformanceTiming_get_unloadEventEnd
,
1831 HTMLPerformanceTiming_get_redirectStart
,
1832 HTMLPerformanceTiming_get_redirectEnd
,
1833 HTMLPerformanceTiming_get_fetchStart
,
1834 HTMLPerformanceTiming_get_domainLookupStart
,
1835 HTMLPerformanceTiming_get_domainLookupEnd
,
1836 HTMLPerformanceTiming_get_connectStart
,
1837 HTMLPerformanceTiming_get_connectEnd
,
1838 HTMLPerformanceTiming_get_requestStart
,
1839 HTMLPerformanceTiming_get_responseStart
,
1840 HTMLPerformanceTiming_get_responseEnd
,
1841 HTMLPerformanceTiming_get_domLoading
,
1842 HTMLPerformanceTiming_get_domInteractive
,
1843 HTMLPerformanceTiming_get_domContentLoadedEventStart
,
1844 HTMLPerformanceTiming_get_domContentLoadedEventEnd
,
1845 HTMLPerformanceTiming_get_domComplete
,
1846 HTMLPerformanceTiming_get_loadEventStart
,
1847 HTMLPerformanceTiming_get_loadEventEnd
,
1848 HTMLPerformanceTiming_get_msFirstPaint
,
1849 HTMLPerformanceTiming_toString
,
1850 HTMLPerformanceTiming_toJSON
1853 static const tid_t HTMLPerformanceTiming_iface_tids
[] = {
1854 IHTMLPerformanceTiming_tid
,
1857 static dispex_static_data_t HTMLPerformanceTiming_dispex
= {
1858 L
"PerformanceTiming",
1860 IHTMLPerformanceTiming_tid
,
1861 HTMLPerformanceTiming_iface_tids
1866 IHTMLPerformanceNavigation IHTMLPerformanceNavigation_iface
;
1869 } HTMLPerformanceNavigation
;
1871 static inline HTMLPerformanceNavigation
*impl_from_IHTMLPerformanceNavigation(IHTMLPerformanceNavigation
*iface
)
1873 return CONTAINING_RECORD(iface
, HTMLPerformanceNavigation
, IHTMLPerformanceNavigation_iface
);
1876 static HRESULT WINAPI
HTMLPerformanceNavigation_QueryInterface(IHTMLPerformanceNavigation
*iface
, REFIID riid
, void **ppv
)
1878 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1880 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
1882 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1883 *ppv
= &This
->IHTMLPerformanceNavigation_iface
;
1884 }else if(IsEqualGUID(&IID_IHTMLPerformanceNavigation
, riid
)) {
1885 *ppv
= &This
->IHTMLPerformanceNavigation_iface
;
1886 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
1887 return *ppv
? S_OK
: E_NOINTERFACE
;
1889 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
1891 return E_NOINTERFACE
;
1894 IUnknown_AddRef((IUnknown
*)*ppv
);
1898 static ULONG WINAPI
HTMLPerformanceNavigation_AddRef(IHTMLPerformanceNavigation
*iface
)
1900 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1901 LONG ref
= InterlockedIncrement(&This
->ref
);
1903 TRACE("(%p) ref=%ld\n", This
, ref
);
1908 static ULONG WINAPI
HTMLPerformanceNavigation_Release(IHTMLPerformanceNavigation
*iface
)
1910 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1911 LONG ref
= InterlockedDecrement(&This
->ref
);
1913 TRACE("(%p) ref=%ld\n", This
, ref
);
1916 release_dispex(&This
->dispex
);
1923 static HRESULT WINAPI
HTMLPerformanceNavigation_GetTypeInfoCount(IHTMLPerformanceNavigation
*iface
, UINT
*pctinfo
)
1925 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1926 FIXME("(%p)->(%p)\n", This
, pctinfo
);
1930 static HRESULT WINAPI
HTMLPerformanceNavigation_GetTypeInfo(IHTMLPerformanceNavigation
*iface
, UINT iTInfo
,
1931 LCID lcid
, ITypeInfo
**ppTInfo
)
1933 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1935 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
1938 static HRESULT WINAPI
HTMLPerformanceNavigation_GetIDsOfNames(IHTMLPerformanceNavigation
*iface
, REFIID riid
,
1939 LPOLESTR
*rgszNames
, UINT cNames
,
1940 LCID lcid
, DISPID
*rgDispId
)
1942 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1944 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
1948 static HRESULT WINAPI
HTMLPerformanceNavigation_Invoke(IHTMLPerformanceNavigation
*iface
, DISPID dispIdMember
,
1949 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
1950 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
1952 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1954 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
1955 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
1958 static HRESULT WINAPI
HTMLPerformanceNavigation_get_type(IHTMLPerformanceNavigation
*iface
, ULONG
*p
)
1960 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1962 FIXME("(%p)->(%p) returning TYPE_NAVIGATE\n", This
, p
);
1964 *p
= 0; /* TYPE_NAVIGATE */
1968 static HRESULT WINAPI
HTMLPerformanceNavigation_get_redirectCount(IHTMLPerformanceNavigation
*iface
, ULONG
*p
)
1970 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1971 FIXME("(%p)->(%p)\n", This
, p
);
1975 static HRESULT WINAPI
HTMLPerformanceNavigation_toString(IHTMLPerformanceNavigation
*iface
, BSTR
*string
)
1977 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1979 TRACE("(%p)->(%p)\n", This
, string
);
1981 return dispex_to_string(&This
->dispex
, string
);
1984 static HRESULT WINAPI
HTMLPerformanceNavigation_toJSON(IHTMLPerformanceNavigation
*iface
, VARIANT
*p
)
1986 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1987 FIXME("(%p)->(%p)\n", This
, p
);
1991 static const IHTMLPerformanceNavigationVtbl HTMLPerformanceNavigationVtbl
= {
1992 HTMLPerformanceNavigation_QueryInterface
,
1993 HTMLPerformanceNavigation_AddRef
,
1994 HTMLPerformanceNavigation_Release
,
1995 HTMLPerformanceNavigation_GetTypeInfoCount
,
1996 HTMLPerformanceNavigation_GetTypeInfo
,
1997 HTMLPerformanceNavigation_GetIDsOfNames
,
1998 HTMLPerformanceNavigation_Invoke
,
1999 HTMLPerformanceNavigation_get_type
,
2000 HTMLPerformanceNavigation_get_redirectCount
,
2001 HTMLPerformanceNavigation_toString
,
2002 HTMLPerformanceNavigation_toJSON
2005 static const tid_t HTMLPerformanceNavigation_iface_tids
[] = {
2006 IHTMLPerformanceNavigation_tid
,
2009 static dispex_static_data_t HTMLPerformanceNavigation_dispex
= {
2010 L
"PerformanceNavigation",
2012 IHTMLPerformanceNavigation_tid
,
2013 HTMLPerformanceNavigation_iface_tids
2018 IHTMLPerformance IHTMLPerformance_iface
;
2022 IHTMLPerformanceNavigation
*navigation
;
2023 IHTMLPerformanceTiming
*timing
;
2026 static inline HTMLPerformance
*impl_from_IHTMLPerformance(IHTMLPerformance
*iface
)
2028 return CONTAINING_RECORD(iface
, HTMLPerformance
, IHTMLPerformance_iface
);
2031 static HRESULT WINAPI
HTMLPerformance_QueryInterface(IHTMLPerformance
*iface
, REFIID riid
, void **ppv
)
2033 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2035 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
2037 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
2038 *ppv
= &This
->IHTMLPerformance_iface
;
2039 }else if(IsEqualGUID(&IID_IHTMLPerformance
, riid
)) {
2040 *ppv
= &This
->IHTMLPerformance_iface
;
2041 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
2042 return *ppv
? S_OK
: E_NOINTERFACE
;
2044 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
2046 return E_NOINTERFACE
;
2049 IUnknown_AddRef((IUnknown
*)*ppv
);
2053 static ULONG WINAPI
HTMLPerformance_AddRef(IHTMLPerformance
*iface
)
2055 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2056 LONG ref
= InterlockedIncrement(&This
->ref
);
2058 TRACE("(%p) ref=%ld\n", This
, ref
);
2063 static ULONG WINAPI
HTMLPerformance_Release(IHTMLPerformance
*iface
)
2065 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2066 LONG ref
= InterlockedDecrement(&This
->ref
);
2068 TRACE("(%p) ref=%ld\n", This
, ref
);
2072 IHTMLPerformanceTiming_Release(This
->timing
);
2073 if(This
->navigation
)
2074 IHTMLPerformanceNavigation_Release(This
->navigation
);
2075 release_dispex(&This
->dispex
);
2082 static HRESULT WINAPI
HTMLPerformance_GetTypeInfoCount(IHTMLPerformance
*iface
, UINT
*pctinfo
)
2084 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2085 FIXME("(%p)->(%p)\n", This
, pctinfo
);
2089 static HRESULT WINAPI
HTMLPerformance_GetTypeInfo(IHTMLPerformance
*iface
, UINT iTInfo
,
2090 LCID lcid
, ITypeInfo
**ppTInfo
)
2092 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2094 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
2097 static HRESULT WINAPI
HTMLPerformance_GetIDsOfNames(IHTMLPerformance
*iface
, REFIID riid
,
2098 LPOLESTR
*rgszNames
, UINT cNames
,
2099 LCID lcid
, DISPID
*rgDispId
)
2101 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2103 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
2107 static HRESULT WINAPI
HTMLPerformance_Invoke(IHTMLPerformance
*iface
, DISPID dispIdMember
,
2108 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
2109 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2111 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2113 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
2114 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
2117 static HRESULT WINAPI
HTMLPerformance_get_navigation(IHTMLPerformance
*iface
,
2118 IHTMLPerformanceNavigation
**p
)
2120 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2122 TRACE("(%p)->(%p)\n", This
, p
);
2124 if(!This
->navigation
) {
2125 HTMLPerformanceNavigation
*navigation
;
2127 navigation
= heap_alloc_zero(sizeof(*navigation
));
2129 return E_OUTOFMEMORY
;
2131 navigation
->IHTMLPerformanceNavigation_iface
.lpVtbl
= &HTMLPerformanceNavigationVtbl
;
2132 navigation
->ref
= 1;
2133 init_dispatch(&navigation
->dispex
, (IUnknown
*)&navigation
->IHTMLPerformanceNavigation_iface
,
2134 &HTMLPerformanceNavigation_dispex
, dispex_compat_mode(&This
->dispex
));
2136 This
->navigation
= &navigation
->IHTMLPerformanceNavigation_iface
;
2139 IHTMLPerformanceNavigation_AddRef(*p
= This
->navigation
);
2143 static HRESULT WINAPI
HTMLPerformance_get_timing(IHTMLPerformance
*iface
, IHTMLPerformanceTiming
**p
)
2145 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2147 TRACE("(%p)->(%p)\n", This
, p
);
2150 HTMLPerformanceTiming
*timing
;
2152 timing
= heap_alloc_zero(sizeof(*timing
));
2154 return E_OUTOFMEMORY
;
2156 timing
->IHTMLPerformanceTiming_iface
.lpVtbl
= &HTMLPerformanceTimingVtbl
;
2158 init_dispatch(&timing
->dispex
, (IUnknown
*)&timing
->IHTMLPerformanceTiming_iface
,
2159 &HTMLPerformanceTiming_dispex
, dispex_compat_mode(&This
->dispex
));
2161 This
->timing
= &timing
->IHTMLPerformanceTiming_iface
;
2164 IHTMLPerformanceTiming_AddRef(*p
= This
->timing
);
2168 static HRESULT WINAPI
HTMLPerformance_toString(IHTMLPerformance
*iface
, BSTR
*string
)
2170 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2172 TRACE("(%p)->(%p)\n", This
, string
);
2174 return dispex_to_string(&This
->dispex
, string
);
2177 static HRESULT WINAPI
HTMLPerformance_toJSON(IHTMLPerformance
*iface
, VARIANT
*var
)
2179 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2180 FIXME("(%p)->(%p)\n", This
, var
);
2184 static const IHTMLPerformanceVtbl HTMLPerformanceVtbl
= {
2185 HTMLPerformance_QueryInterface
,
2186 HTMLPerformance_AddRef
,
2187 HTMLPerformance_Release
,
2188 HTMLPerformance_GetTypeInfoCount
,
2189 HTMLPerformance_GetTypeInfo
,
2190 HTMLPerformance_GetIDsOfNames
,
2191 HTMLPerformance_Invoke
,
2192 HTMLPerformance_get_navigation
,
2193 HTMLPerformance_get_timing
,
2194 HTMLPerformance_toString
,
2195 HTMLPerformance_toJSON
2198 static const tid_t HTMLPerformance_iface_tids
[] = {
2199 IHTMLPerformance_tid
,
2202 static dispex_static_data_t HTMLPerformance_dispex
= {
2205 IHTMLPerformance_tid
,
2206 HTMLPerformance_iface_tids
2209 HRESULT
create_performance(compat_mode_t compat_mode
, IHTMLPerformance
**ret
)
2211 HTMLPerformance
*performance
;
2213 performance
= heap_alloc_zero(sizeof(*performance
));
2215 return E_OUTOFMEMORY
;
2217 performance
->IHTMLPerformance_iface
.lpVtbl
= &HTMLPerformanceVtbl
;
2218 performance
->ref
= 1;
2220 init_dispatch(&performance
->dispex
, (IUnknown
*)&performance
->IHTMLPerformance_iface
,
2221 &HTMLPerformance_dispex
, compat_mode
);
2223 *ret
= &performance
->IHTMLPerformance_iface
;
2229 IHTMLNamespaceCollection IHTMLNamespaceCollection_iface
;
2232 } HTMLNamespaceCollection
;
2234 static inline HTMLNamespaceCollection
*impl_from_IHTMLNamespaceCollection(IHTMLNamespaceCollection
*iface
)
2236 return CONTAINING_RECORD(iface
, HTMLNamespaceCollection
, IHTMLNamespaceCollection_iface
);
2239 static HRESULT WINAPI
HTMLNamespaceCollection_QueryInterface(IHTMLNamespaceCollection
*iface
, REFIID riid
, void **ppv
)
2241 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2243 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
2245 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
2246 *ppv
= &This
->IHTMLNamespaceCollection_iface
;
2247 }else if(IsEqualGUID(&IID_IHTMLNamespaceCollection
, riid
)) {
2248 *ppv
= &This
->IHTMLNamespaceCollection_iface
;
2249 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
2250 return *ppv
? S_OK
: E_NOINTERFACE
;
2252 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
2254 return E_NOINTERFACE
;
2257 IUnknown_AddRef((IUnknown
*)*ppv
);
2261 static ULONG WINAPI
HTMLNamespaceCollection_AddRef(IHTMLNamespaceCollection
*iface
)
2263 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2264 LONG ref
= InterlockedIncrement(&This
->ref
);
2266 TRACE("(%p) ref=%ld\n", This
, ref
);
2271 static ULONG WINAPI
HTMLNamespaceCollection_Release(IHTMLNamespaceCollection
*iface
)
2273 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2274 LONG ref
= InterlockedDecrement(&This
->ref
);
2276 TRACE("(%p) ref=%ld\n", This
, ref
);
2279 release_dispex(&This
->dispex
);
2286 static HRESULT WINAPI
HTMLNamespaceCollection_GetTypeInfoCount(IHTMLNamespaceCollection
*iface
, UINT
*pctinfo
)
2288 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2289 FIXME("(%p)->(%p)\n", This
, pctinfo
);
2293 static HRESULT WINAPI
HTMLNamespaceCollection_GetTypeInfo(IHTMLNamespaceCollection
*iface
, UINT iTInfo
,
2294 LCID lcid
, ITypeInfo
**ppTInfo
)
2296 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2298 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
2301 static HRESULT WINAPI
HTMLNamespaceCollection_GetIDsOfNames(IHTMLNamespaceCollection
*iface
, REFIID riid
,
2302 LPOLESTR
*rgszNames
, UINT cNames
,
2303 LCID lcid
, DISPID
*rgDispId
)
2305 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2307 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
2311 static HRESULT WINAPI
HTMLNamespaceCollection_Invoke(IHTMLNamespaceCollection
*iface
, DISPID dispIdMember
,
2312 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
2313 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2315 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2317 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
2318 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
2321 static HRESULT WINAPI
HTMLNamespaceCollection_get_length(IHTMLNamespaceCollection
*iface
, LONG
*p
)
2323 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2324 FIXME("(%p)->(%p) returning 0\n", This
, p
);
2329 static HRESULT WINAPI
HTMLNamespaceCollection_item(IHTMLNamespaceCollection
*iface
, VARIANT index
, IDispatch
**p
)
2331 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2332 FIXME("(%p)->(%s %p)\n", This
, debugstr_variant(&index
), p
);
2336 static HRESULT WINAPI
HTMLNamespaceCollection_add(IHTMLNamespaceCollection
*iface
, BSTR
namespace, BSTR urn
,
2337 VARIANT implementation_url
, IDispatch
**p
)
2339 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2340 FIXME("(%p)->(%s %s %s %p)\n", This
, debugstr_w(namespace), debugstr_w(urn
), debugstr_variant(&implementation_url
), p
);
2344 static const IHTMLNamespaceCollectionVtbl HTMLNamespaceCollectionVtbl
= {
2345 HTMLNamespaceCollection_QueryInterface
,
2346 HTMLNamespaceCollection_AddRef
,
2347 HTMLNamespaceCollection_Release
,
2348 HTMLNamespaceCollection_GetTypeInfoCount
,
2349 HTMLNamespaceCollection_GetTypeInfo
,
2350 HTMLNamespaceCollection_GetIDsOfNames
,
2351 HTMLNamespaceCollection_Invoke
,
2352 HTMLNamespaceCollection_get_length
,
2353 HTMLNamespaceCollection_item
,
2354 HTMLNamespaceCollection_add
2357 static const tid_t HTMLNamespaceCollection_iface_tids
[] = {
2358 IHTMLNamespaceCollection_tid
,
2361 static dispex_static_data_t HTMLNamespaceCollection_dispex
= {
2362 L
"MSNamespaceInfoCollection",
2364 DispHTMLNamespaceCollection_tid
,
2365 HTMLNamespaceCollection_iface_tids
2368 HRESULT
create_namespace_collection(compat_mode_t compat_mode
, IHTMLNamespaceCollection
**ret
)
2370 HTMLNamespaceCollection
*namespaces
;
2372 if (!(namespaces
= heap_alloc_zero(sizeof(*namespaces
))))
2373 return E_OUTOFMEMORY
;
2375 namespaces
->IHTMLNamespaceCollection_iface
.lpVtbl
= &HTMLNamespaceCollectionVtbl
;
2376 namespaces
->ref
= 1;
2377 init_dispatch(&namespaces
->dispex
, (IUnknown
*)&namespaces
->IHTMLNamespaceCollection_iface
,
2378 &HTMLNamespaceCollection_dispex
, compat_mode
);
2379 *ret
= &namespaces
->IHTMLNamespaceCollection_iface
;
2385 IWineMSHTMLConsole IWineMSHTMLConsole_iface
;
2389 static inline struct console
*impl_from_IWineMSHTMLConsole(IWineMSHTMLConsole
*iface
)
2391 return CONTAINING_RECORD(iface
, struct console
, IWineMSHTMLConsole_iface
);
2394 static HRESULT WINAPI
console_QueryInterface(IWineMSHTMLConsole
*iface
, REFIID riid
, void **ppv
)
2396 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2398 TRACE("(%p)->(%s %p)\n", console
, debugstr_mshtml_guid(riid
), ppv
);
2400 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
2401 *ppv
= &console
->IWineMSHTMLConsole_iface
;
2402 }else if(IsEqualGUID(&IID_IWineMSHTMLConsole
, riid
)) {
2403 *ppv
= &console
->IWineMSHTMLConsole_iface
;
2404 }else if(dispex_query_interface(&console
->dispex
, riid
, ppv
)) {
2405 return *ppv
? S_OK
: E_NOINTERFACE
;
2407 WARN("(%p)->(%s %p)\n", console
, debugstr_mshtml_guid(riid
), ppv
);
2409 return E_NOINTERFACE
;
2412 IUnknown_AddRef((IUnknown
*)*ppv
);
2416 static ULONG WINAPI
console_AddRef(IWineMSHTMLConsole
*iface
)
2418 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2419 LONG ref
= InterlockedIncrement(&console
->ref
);
2421 TRACE("(%p) ref=%ld\n", console
, ref
);
2426 static ULONG WINAPI
console_Release(IWineMSHTMLConsole
*iface
)
2428 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2429 LONG ref
= InterlockedDecrement(&console
->ref
);
2431 TRACE("(%p) ref=%ld\n", console
, ref
);
2434 release_dispex(&console
->dispex
);
2441 static HRESULT WINAPI
console_GetTypeInfoCount(IWineMSHTMLConsole
*iface
, UINT
*pctinfo
)
2443 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2444 FIXME("(%p)->(%p)\n", console
, pctinfo
);
2448 static HRESULT WINAPI
console_GetTypeInfo(IWineMSHTMLConsole
*iface
, UINT iTInfo
,
2449 LCID lcid
, ITypeInfo
**ppTInfo
)
2451 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2453 return IDispatchEx_GetTypeInfo(&console
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
2456 static HRESULT WINAPI
console_GetIDsOfNames(IWineMSHTMLConsole
*iface
, REFIID riid
,
2457 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
2459 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2461 return IDispatchEx_GetIDsOfNames(&console
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
2465 static HRESULT WINAPI
console_Invoke(IWineMSHTMLConsole
*iface
, DISPID dispIdMember
,
2466 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
2467 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2469 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2471 return IDispatchEx_Invoke(&console
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
2472 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
2475 static HRESULT WINAPI
console_assert(IWineMSHTMLConsole
*iface
, VARIANT_BOOL
*assertion
, VARIANT
*vararg_start
)
2477 FIXME("iface %p, assertion %p, vararg_start %p stub.\n", iface
, assertion
, vararg_start
);
2482 static HRESULT WINAPI
console_clear(IWineMSHTMLConsole
*iface
)
2484 FIXME("iface %p stub.\n", iface
);
2489 static HRESULT WINAPI
console_count(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2491 FIXME("iface %p, label %p stub.\n", iface
, label
);
2496 static HRESULT WINAPI
console_debug(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2498 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2503 static HRESULT WINAPI
console_dir(IWineMSHTMLConsole
*iface
, VARIANT
*object
)
2505 FIXME("iface %p, object %p stub.\n", iface
, object
);
2510 static HRESULT WINAPI
console_dirxml(IWineMSHTMLConsole
*iface
, VARIANT
*object
)
2512 FIXME("iface %p, object %p stub.\n", iface
, object
);
2517 static HRESULT WINAPI
console_error(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2519 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2524 static HRESULT WINAPI
console_group(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2526 FIXME("iface %p, label %p stub.\n", iface
, label
);
2531 static HRESULT WINAPI
console_group_collapsed(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2533 FIXME("iface %p, label %p stub.\n", iface
, label
);
2538 static HRESULT WINAPI
console_group_end(IWineMSHTMLConsole
*iface
)
2540 FIXME("iface %p, stub.\n", iface
);
2545 static HRESULT WINAPI
console_info(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2547 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2552 static HRESULT WINAPI
console_log(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2554 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2559 static HRESULT WINAPI
console_time(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2561 FIXME("iface %p, label %p stub.\n", iface
, label
);
2566 static HRESULT WINAPI
console_time_end(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2568 FIXME("iface %p, label %p stub.\n", iface
, label
);
2573 static HRESULT WINAPI
console_trace(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2575 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2580 static HRESULT WINAPI
console_warn(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2582 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2587 static const IWineMSHTMLConsoleVtbl WineMSHTMLConsoleVtbl
= {
2588 console_QueryInterface
,
2591 console_GetTypeInfoCount
,
2592 console_GetTypeInfo
,
2593 console_GetIDsOfNames
,
2603 console_group_collapsed
,
2613 static const tid_t console_iface_tids
[] = {
2614 IWineMSHTMLConsole_tid
,
2617 static dispex_static_data_t console_dispex
= {
2620 IWineMSHTMLConsole_tid
,
2624 void create_console(compat_mode_t compat_mode
, IWineMSHTMLConsole
**ret
)
2626 struct console
*obj
;
2628 obj
= heap_alloc_zero(sizeof(*obj
));
2631 ERR("No memory.\n");
2635 obj
->IWineMSHTMLConsole_iface
.lpVtbl
= &WineMSHTMLConsoleVtbl
;
2637 init_dispatch(&obj
->dispex
, (IUnknown
*)&obj
->IWineMSHTMLConsole_iface
, &console_dispex
, compat_mode
);
2639 *ret
= &obj
->IWineMSHTMLConsole_iface
;