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
;
250 FIXME("(%p)->(%s %p)\n", This
, debugstr_w(title
), new_document
);
255 nsAString_InitDepend(&title_str
, title
);
256 nsres
= nsIDOMDOMImplementation_CreateHTMLDocument(This
->implementation
, &title_str
, &doc
);
257 nsAString_Finish(&title_str
);
258 if(NS_FAILED(nsres
)) {
259 ERR("CreateHTMLDocument failed: %08lx\n", nsres
);
263 hres
= create_document_node(doc
, This
->browser
, NULL
, dispex_compat_mode(&This
->dispex
), &new_document_node
);
264 nsIDOMDocument_Release(doc
);
268 *new_document
= &new_document_node
->IHTMLDocument7_iface
;
272 static HRESULT WINAPI
HTMLDOMImplementation2_hasFeature(IHTMLDOMImplementation2
*iface
, BSTR feature
,
273 VARIANT version
, VARIANT_BOOL
*pfHasFeature
)
275 HTMLDOMImplementation
*This
= impl_from_IHTMLDOMImplementation2(iface
);
277 FIXME("(%p)->(%s %s %p) returning false\n", This
, debugstr_w(feature
), debugstr_variant(&version
), pfHasFeature
);
279 *pfHasFeature
= VARIANT_FALSE
;
283 static const IHTMLDOMImplementation2Vtbl HTMLDOMImplementation2Vtbl
= {
284 HTMLDOMImplementation2_QueryInterface
,
285 HTMLDOMImplementation2_AddRef
,
286 HTMLDOMImplementation2_Release
,
287 HTMLDOMImplementation2_GetTypeInfoCount
,
288 HTMLDOMImplementation2_GetTypeInfo
,
289 HTMLDOMImplementation2_GetIDsOfNames
,
290 HTMLDOMImplementation2_Invoke
,
291 HTMLDOMImplementation2_createDocumentType
,
292 HTMLDOMImplementation2_createDocument
,
293 HTMLDOMImplementation2_createHTMLDocument
,
294 HTMLDOMImplementation2_hasFeature
297 static void HTMLDOMImplementation_init_dispex_info(dispex_data_t
*info
, compat_mode_t compat_mode
)
299 if(compat_mode
>= COMPAT_MODE_IE9
)
300 dispex_info_add_interface(info
, IHTMLDOMImplementation2_tid
, NULL
);
303 static const tid_t HTMLDOMImplementation_iface_tids
[] = {
304 IHTMLDOMImplementation_tid
,
307 static dispex_static_data_t HTMLDOMImplementation_dispex
= {
308 L
"DOMImplementation",
310 DispHTMLDOMImplementation_tid
,
311 HTMLDOMImplementation_iface_tids
,
312 HTMLDOMImplementation_init_dispex_info
315 HRESULT
create_dom_implementation(HTMLDocumentNode
*doc_node
, IHTMLDOMImplementation
**ret
)
317 HTMLDOMImplementation
*dom_implementation
;
320 if(!doc_node
->browser
)
323 dom_implementation
= calloc(1, sizeof(*dom_implementation
));
324 if(!dom_implementation
)
325 return E_OUTOFMEMORY
;
327 dom_implementation
->IHTMLDOMImplementation_iface
.lpVtbl
= &HTMLDOMImplementationVtbl
;
328 dom_implementation
->IHTMLDOMImplementation2_iface
.lpVtbl
= &HTMLDOMImplementation2Vtbl
;
329 dom_implementation
->ref
= 1;
330 dom_implementation
->browser
= doc_node
->browser
;
332 init_dispatch(&dom_implementation
->dispex
, (IUnknown
*)&dom_implementation
->IHTMLDOMImplementation_iface
,
333 &HTMLDOMImplementation_dispex
, doc_node
->document_mode
);
335 nsres
= nsIDOMDocument_GetImplementation(doc_node
->dom_document
, &dom_implementation
->implementation
);
336 if(NS_FAILED(nsres
)) {
337 ERR("GetDOMImplementation failed: %08lx\n", nsres
);
338 IHTMLDOMImplementation_Release(&dom_implementation
->IHTMLDOMImplementation_iface
);
342 *ret
= &dom_implementation
->IHTMLDOMImplementation_iface
;
346 void detach_dom_implementation(IHTMLDOMImplementation
*iface
)
348 HTMLDOMImplementation
*dom_implementation
= impl_from_IHTMLDOMImplementation(iface
);
349 dom_implementation
->browser
= NULL
;
354 IHTMLScreen IHTMLScreen_iface
;
359 static inline HTMLScreen
*impl_from_IHTMLScreen(IHTMLScreen
*iface
)
361 return CONTAINING_RECORD(iface
, HTMLScreen
, IHTMLScreen_iface
);
364 static HRESULT WINAPI
HTMLScreen_QueryInterface(IHTMLScreen
*iface
, REFIID riid
, void **ppv
)
366 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
368 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
370 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
371 *ppv
= &This
->IHTMLScreen_iface
;
372 }else if(IsEqualGUID(&IID_IHTMLScreen
, riid
)) {
373 *ppv
= &This
->IHTMLScreen_iface
;
374 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
375 return *ppv
? S_OK
: E_NOINTERFACE
;
378 WARN("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
379 return E_NOINTERFACE
;
382 IUnknown_AddRef((IUnknown
*)*ppv
);
386 static ULONG WINAPI
HTMLScreen_AddRef(IHTMLScreen
*iface
)
388 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
389 LONG ref
= InterlockedIncrement(&This
->ref
);
391 TRACE("(%p) ref=%ld\n", This
, ref
);
396 static ULONG WINAPI
HTMLScreen_Release(IHTMLScreen
*iface
)
398 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
399 LONG ref
= InterlockedDecrement(&This
->ref
);
401 TRACE("(%p) ref=%ld\n", This
, ref
);
404 release_dispex(&This
->dispex
);
411 static HRESULT WINAPI
HTMLScreen_GetTypeInfoCount(IHTMLScreen
*iface
, UINT
*pctinfo
)
413 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
414 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
417 static HRESULT WINAPI
HTMLScreen_GetTypeInfo(IHTMLScreen
*iface
, UINT iTInfo
,
418 LCID lcid
, ITypeInfo
**ppTInfo
)
420 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
421 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
424 static HRESULT WINAPI
HTMLScreen_GetIDsOfNames(IHTMLScreen
*iface
, REFIID riid
,
425 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
427 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
428 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
432 static HRESULT WINAPI
HTMLScreen_Invoke(IHTMLScreen
*iface
, DISPID dispIdMember
,
433 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
434 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
436 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
437 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
438 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
441 static HRESULT WINAPI
HTMLScreen_get_colorDepth(IHTMLScreen
*iface
, LONG
*p
)
443 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
446 TRACE("(%p)->(%p)\n", This
, p
);
448 *p
= GetDeviceCaps(hdc
, BITSPIXEL
);
453 static HRESULT WINAPI
HTMLScreen_put_bufferDepth(IHTMLScreen
*iface
, LONG v
)
455 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
456 FIXME("(%p)->(%ld)\n", This
, v
);
460 static HRESULT WINAPI
HTMLScreen_get_bufferDepth(IHTMLScreen
*iface
, LONG
*p
)
462 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
463 FIXME("(%p)->(%p)\n", This
, p
);
467 static HRESULT WINAPI
HTMLScreen_get_width(IHTMLScreen
*iface
, LONG
*p
)
469 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
471 TRACE("(%p)->(%p)\n", This
, p
);
473 *p
= GetSystemMetrics(SM_CXSCREEN
);
477 static HRESULT WINAPI
HTMLScreen_get_height(IHTMLScreen
*iface
, LONG
*p
)
479 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
481 TRACE("(%p)->(%p)\n", This
, p
);
483 *p
= GetSystemMetrics(SM_CYSCREEN
);
487 static HRESULT WINAPI
HTMLScreen_put_updateInterval(IHTMLScreen
*iface
, LONG v
)
489 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
490 FIXME("(%p)->(%ld)\n", This
, v
);
494 static HRESULT WINAPI
HTMLScreen_get_updateInterval(IHTMLScreen
*iface
, LONG
*p
)
496 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
497 FIXME("(%p)->(%p)\n", This
, p
);
501 static HRESULT WINAPI
HTMLScreen_get_availHeight(IHTMLScreen
*iface
, LONG
*p
)
503 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
506 TRACE("(%p)->(%p)\n", This
, p
);
508 if(!SystemParametersInfoW(SPI_GETWORKAREA
, 0, &work_area
, 0))
511 *p
= work_area
.bottom
-work_area
.top
;
515 static HRESULT WINAPI
HTMLScreen_get_availWidth(IHTMLScreen
*iface
, LONG
*p
)
517 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
520 TRACE("(%p)->(%p)\n", This
, p
);
522 if(!SystemParametersInfoW(SPI_GETWORKAREA
, 0, &work_area
, 0))
525 *p
= work_area
.right
-work_area
.left
;
529 static HRESULT WINAPI
HTMLScreen_get_fontSmoothingEnabled(IHTMLScreen
*iface
, VARIANT_BOOL
*p
)
531 HTMLScreen
*This
= impl_from_IHTMLScreen(iface
);
532 FIXME("(%p)->(%p)\n", This
, p
);
536 static const IHTMLScreenVtbl HTMLSreenVtbl
= {
537 HTMLScreen_QueryInterface
,
540 HTMLScreen_GetTypeInfoCount
,
541 HTMLScreen_GetTypeInfo
,
542 HTMLScreen_GetIDsOfNames
,
544 HTMLScreen_get_colorDepth
,
545 HTMLScreen_put_bufferDepth
,
546 HTMLScreen_get_bufferDepth
,
547 HTMLScreen_get_width
,
548 HTMLScreen_get_height
,
549 HTMLScreen_put_updateInterval
,
550 HTMLScreen_get_updateInterval
,
551 HTMLScreen_get_availHeight
,
552 HTMLScreen_get_availWidth
,
553 HTMLScreen_get_fontSmoothingEnabled
556 static const tid_t HTMLScreen_iface_tids
[] = {
560 static dispex_static_data_t HTMLScreen_dispex
= {
564 HTMLScreen_iface_tids
567 HRESULT
create_html_screen(compat_mode_t compat_mode
, IHTMLScreen
**ret
)
571 screen
= calloc(1, sizeof(HTMLScreen
));
573 return E_OUTOFMEMORY
;
575 screen
->IHTMLScreen_iface
.lpVtbl
= &HTMLSreenVtbl
;
578 init_dispatch(&screen
->dispex
, (IUnknown
*)&screen
->IHTMLScreen_iface
, &HTMLScreen_dispex
, compat_mode
);
580 *ret
= &screen
->IHTMLScreen_iface
;
584 static inline OmHistory
*impl_from_IOmHistory(IOmHistory
*iface
)
586 return CONTAINING_RECORD(iface
, OmHistory
, IOmHistory_iface
);
589 static HRESULT WINAPI
OmHistory_QueryInterface(IOmHistory
*iface
, REFIID riid
, void **ppv
)
591 OmHistory
*This
= impl_from_IOmHistory(iface
);
593 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
595 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
596 *ppv
= &This
->IOmHistory_iface
;
597 }else if(IsEqualGUID(&IID_IOmHistory
, riid
)) {
598 *ppv
= &This
->IOmHistory_iface
;
599 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
600 return *ppv
? S_OK
: E_NOINTERFACE
;
602 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
604 return E_NOINTERFACE
;
607 IUnknown_AddRef((IUnknown
*)*ppv
);
611 static ULONG WINAPI
OmHistory_AddRef(IOmHistory
*iface
)
613 OmHistory
*This
= impl_from_IOmHistory(iface
);
614 LONG ref
= InterlockedIncrement(&This
->ref
);
616 TRACE("(%p) ref=%ld\n", This
, ref
);
621 static ULONG WINAPI
OmHistory_Release(IOmHistory
*iface
)
623 OmHistory
*This
= impl_from_IOmHistory(iface
);
624 LONG ref
= InterlockedDecrement(&This
->ref
);
626 TRACE("(%p) ref=%ld\n", This
, ref
);
629 release_dispex(&This
->dispex
);
636 static HRESULT WINAPI
OmHistory_GetTypeInfoCount(IOmHistory
*iface
, UINT
*pctinfo
)
638 OmHistory
*This
= impl_from_IOmHistory(iface
);
639 FIXME("(%p)->(%p)\n", This
, pctinfo
);
643 static HRESULT WINAPI
OmHistory_GetTypeInfo(IOmHistory
*iface
, UINT iTInfo
,
644 LCID lcid
, ITypeInfo
**ppTInfo
)
646 OmHistory
*This
= impl_from_IOmHistory(iface
);
648 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
651 static HRESULT WINAPI
OmHistory_GetIDsOfNames(IOmHistory
*iface
, REFIID riid
, LPOLESTR
*rgszNames
, UINT cNames
,
652 LCID lcid
, DISPID
*rgDispId
)
654 OmHistory
*This
= impl_from_IOmHistory(iface
);
656 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
660 static HRESULT WINAPI
OmHistory_Invoke(IOmHistory
*iface
, DISPID dispIdMember
, REFIID riid
, LCID lcid
,
661 WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
663 OmHistory
*This
= impl_from_IOmHistory(iface
);
665 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
666 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
669 static HRESULT WINAPI
OmHistory_get_length(IOmHistory
*iface
, short *p
)
671 OmHistory
*This
= impl_from_IOmHistory(iface
);
672 GeckoBrowser
*browser
= NULL
;
674 TRACE("(%p)->(%p)\n", This
, p
);
676 if(This
->window
&& This
->window
->base
.outer_window
)
677 browser
= This
->window
->base
.outer_window
->browser
;
679 *p
= browser
&& browser
->doc
->travel_log
680 ? ITravelLog_CountEntries(browser
->doc
->travel_log
, browser
->doc
->browser_service
)
685 static HRESULT WINAPI
OmHistory_back(IOmHistory
*iface
, VARIANT
*pvargdistance
)
687 OmHistory
*This
= impl_from_IOmHistory(iface
);
688 FIXME("(%p)->(%s)\n", This
, debugstr_variant(pvargdistance
));
692 static HRESULT WINAPI
OmHistory_forward(IOmHistory
*iface
, VARIANT
*pvargdistance
)
694 OmHistory
*This
= impl_from_IOmHistory(iface
);
695 FIXME("(%p)->(%s)\n", This
, debugstr_variant(pvargdistance
));
699 static HRESULT WINAPI
OmHistory_go(IOmHistory
*iface
, VARIANT
*pvargdistance
)
701 OmHistory
*This
= impl_from_IOmHistory(iface
);
702 FIXME("(%p)->(%s)\n", This
, debugstr_variant(pvargdistance
));
706 static const IOmHistoryVtbl OmHistoryVtbl
= {
707 OmHistory_QueryInterface
,
710 OmHistory_GetTypeInfoCount
,
711 OmHistory_GetTypeInfo
,
712 OmHistory_GetIDsOfNames
,
714 OmHistory_get_length
,
720 static const tid_t OmHistory_iface_tids
[] = {
724 static dispex_static_data_t OmHistory_dispex
= {
732 HRESULT
create_history(HTMLInnerWindow
*window
, OmHistory
**ret
)
736 history
= calloc(1, sizeof(*history
));
738 return E_OUTOFMEMORY
;
740 init_dispatch(&history
->dispex
, (IUnknown
*)&history
->IOmHistory_iface
, &OmHistory_dispex
,
741 dispex_compat_mode(&window
->event_target
.dispex
));
742 history
->IOmHistory_iface
.lpVtbl
= &OmHistoryVtbl
;
745 history
->window
= window
;
751 struct HTMLPluginsCollection
{
753 IHTMLPluginsCollection IHTMLPluginsCollection_iface
;
757 OmNavigator
*navigator
;
760 static inline HTMLPluginsCollection
*impl_from_IHTMLPluginsCollection(IHTMLPluginsCollection
*iface
)
762 return CONTAINING_RECORD(iface
, HTMLPluginsCollection
, IHTMLPluginsCollection_iface
);
765 static HRESULT WINAPI
HTMLPluginsCollection_QueryInterface(IHTMLPluginsCollection
*iface
, REFIID riid
, void **ppv
)
767 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
769 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
771 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
772 *ppv
= &This
->IHTMLPluginsCollection_iface
;
773 }else if(IsEqualGUID(&IID_IHTMLPluginsCollection
, riid
)) {
774 *ppv
= &This
->IHTMLPluginsCollection_iface
;
775 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
776 return *ppv
? S_OK
: E_NOINTERFACE
;
779 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
780 return E_NOINTERFACE
;
783 IUnknown_AddRef((IUnknown
*)*ppv
);
787 static ULONG WINAPI
HTMLPluginsCollection_AddRef(IHTMLPluginsCollection
*iface
)
789 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
790 LONG ref
= InterlockedIncrement(&This
->ref
);
792 TRACE("(%p) ref=%ld\n", This
, ref
);
797 static ULONG WINAPI
HTMLPluginsCollection_Release(IHTMLPluginsCollection
*iface
)
799 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
800 LONG ref
= InterlockedDecrement(&This
->ref
);
802 TRACE("(%p) ref=%ld\n", This
, ref
);
806 This
->navigator
->plugins
= NULL
;
807 release_dispex(&This
->dispex
);
814 static HRESULT WINAPI
HTMLPluginsCollection_GetTypeInfoCount(IHTMLPluginsCollection
*iface
, UINT
*pctinfo
)
816 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
817 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
820 static HRESULT WINAPI
HTMLPluginsCollection_GetTypeInfo(IHTMLPluginsCollection
*iface
, UINT iTInfo
,
821 LCID lcid
, ITypeInfo
**ppTInfo
)
823 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
824 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
827 static HRESULT WINAPI
HTMLPluginsCollection_GetIDsOfNames(IHTMLPluginsCollection
*iface
, REFIID riid
,
828 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
830 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
831 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
835 static HRESULT WINAPI
HTMLPluginsCollection_Invoke(IHTMLPluginsCollection
*iface
, DISPID dispIdMember
,
836 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
837 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
839 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
840 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
,
841 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
844 static HRESULT WINAPI
HTMLPluginsCollection_get_length(IHTMLPluginsCollection
*iface
, LONG
*p
)
846 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
848 TRACE("(%p)->(%p)\n", This
, p
);
850 /* IE always returns 0 here */
855 static HRESULT WINAPI
HTMLPluginsCollection_refresh(IHTMLPluginsCollection
*iface
, VARIANT_BOOL reload
)
857 HTMLPluginsCollection
*This
= impl_from_IHTMLPluginsCollection(iface
);
859 TRACE("(%p)->(%x)\n", This
, reload
);
861 /* Nothing to do here. */
865 static const IHTMLPluginsCollectionVtbl HTMLPluginsCollectionVtbl
= {
866 HTMLPluginsCollection_QueryInterface
,
867 HTMLPluginsCollection_AddRef
,
868 HTMLPluginsCollection_Release
,
869 HTMLPluginsCollection_GetTypeInfoCount
,
870 HTMLPluginsCollection_GetTypeInfo
,
871 HTMLPluginsCollection_GetIDsOfNames
,
872 HTMLPluginsCollection_Invoke
,
873 HTMLPluginsCollection_get_length
,
874 HTMLPluginsCollection_refresh
877 static const tid_t HTMLPluginsCollection_iface_tids
[] = {
878 IHTMLPluginsCollection_tid
,
881 static dispex_static_data_t HTMLPluginsCollection_dispex
= {
885 HTMLPluginsCollection_iface_tids
888 static HRESULT
create_plugins_collection(OmNavigator
*navigator
, HTMLPluginsCollection
**ret
)
890 HTMLPluginsCollection
*col
;
892 col
= calloc(1, sizeof(*col
));
894 return E_OUTOFMEMORY
;
896 col
->IHTMLPluginsCollection_iface
.lpVtbl
= &HTMLPluginsCollectionVtbl
;
898 col
->navigator
= navigator
;
900 init_dispatch(&col
->dispex
, (IUnknown
*)&col
->IHTMLPluginsCollection_iface
,
901 &HTMLPluginsCollection_dispex
, dispex_compat_mode(&navigator
->dispex
));
907 struct HTMLMimeTypesCollection
{
909 IHTMLMimeTypesCollection IHTMLMimeTypesCollection_iface
;
913 OmNavigator
*navigator
;
916 static inline HTMLMimeTypesCollection
*impl_from_IHTMLMimeTypesCollection(IHTMLMimeTypesCollection
*iface
)
918 return CONTAINING_RECORD(iface
, HTMLMimeTypesCollection
, IHTMLMimeTypesCollection_iface
);
921 static HRESULT WINAPI
HTMLMimeTypesCollection_QueryInterface(IHTMLMimeTypesCollection
*iface
, REFIID riid
, void **ppv
)
923 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
925 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
927 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
928 *ppv
= &This
->IHTMLMimeTypesCollection_iface
;
929 }else if(IsEqualGUID(&IID_IHTMLMimeTypesCollection
, riid
)) {
930 *ppv
= &This
->IHTMLMimeTypesCollection_iface
;
931 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
932 return *ppv
? S_OK
: E_NOINTERFACE
;
934 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
936 return E_NOINTERFACE
;
939 IUnknown_AddRef((IUnknown
*)*ppv
);
943 static ULONG WINAPI
HTMLMimeTypesCollection_AddRef(IHTMLMimeTypesCollection
*iface
)
945 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
946 LONG ref
= InterlockedIncrement(&This
->ref
);
948 TRACE("(%p) ref=%ld\n", This
, ref
);
953 static ULONG WINAPI
HTMLMimeTypesCollection_Release(IHTMLMimeTypesCollection
*iface
)
955 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
956 LONG ref
= InterlockedDecrement(&This
->ref
);
958 TRACE("(%p) ref=%ld\n", This
, ref
);
962 This
->navigator
->mime_types
= NULL
;
963 release_dispex(&This
->dispex
);
970 static HRESULT WINAPI
HTMLMimeTypesCollection_GetTypeInfoCount(IHTMLMimeTypesCollection
*iface
, UINT
*pctinfo
)
972 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
973 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
976 static HRESULT WINAPI
HTMLMimeTypesCollection_GetTypeInfo(IHTMLMimeTypesCollection
*iface
, UINT iTInfo
,
977 LCID lcid
, ITypeInfo
**ppTInfo
)
979 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
980 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
983 static HRESULT WINAPI
HTMLMimeTypesCollection_GetIDsOfNames(IHTMLMimeTypesCollection
*iface
, REFIID riid
,
984 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
986 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
987 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
991 static HRESULT WINAPI
HTMLMimeTypesCollection_Invoke(IHTMLMimeTypesCollection
*iface
, DISPID dispIdMember
,
992 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
,
993 EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
995 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
996 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
,
997 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
1000 static HRESULT WINAPI
HTMLMimeTypesCollection_get_length(IHTMLMimeTypesCollection
*iface
, LONG
*p
)
1002 HTMLMimeTypesCollection
*This
= impl_from_IHTMLMimeTypesCollection(iface
);
1004 TRACE("(%p)->(%p)\n", This
, p
);
1006 /* This is just a stub for compatibility with other browser in IE */
1011 static const IHTMLMimeTypesCollectionVtbl HTMLMimeTypesCollectionVtbl
= {
1012 HTMLMimeTypesCollection_QueryInterface
,
1013 HTMLMimeTypesCollection_AddRef
,
1014 HTMLMimeTypesCollection_Release
,
1015 HTMLMimeTypesCollection_GetTypeInfoCount
,
1016 HTMLMimeTypesCollection_GetTypeInfo
,
1017 HTMLMimeTypesCollection_GetIDsOfNames
,
1018 HTMLMimeTypesCollection_Invoke
,
1019 HTMLMimeTypesCollection_get_length
1022 static const tid_t HTMLMimeTypesCollection_iface_tids
[] = {
1023 IHTMLMimeTypesCollection_tid
,
1026 static dispex_static_data_t HTMLMimeTypesCollection_dispex
= {
1029 IHTMLMimeTypesCollection_tid
,
1030 HTMLMimeTypesCollection_iface_tids
1033 static HRESULT
create_mime_types_collection(OmNavigator
*navigator
, HTMLMimeTypesCollection
**ret
)
1035 HTMLMimeTypesCollection
*col
;
1037 col
= calloc(1, sizeof(*col
));
1039 return E_OUTOFMEMORY
;
1041 col
->IHTMLMimeTypesCollection_iface
.lpVtbl
= &HTMLMimeTypesCollectionVtbl
;
1043 col
->navigator
= navigator
;
1045 init_dispatch(&col
->dispex
, (IUnknown
*)&col
->IHTMLMimeTypesCollection_iface
,
1046 &HTMLMimeTypesCollection_dispex
, dispex_compat_mode(&navigator
->dispex
));
1052 static inline OmNavigator
*impl_from_IOmNavigator(IOmNavigator
*iface
)
1054 return CONTAINING_RECORD(iface
, OmNavigator
, IOmNavigator_iface
);
1057 static HRESULT WINAPI
OmNavigator_QueryInterface(IOmNavigator
*iface
, REFIID riid
, void **ppv
)
1059 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1061 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
1063 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1064 *ppv
= &This
->IOmNavigator_iface
;
1065 }else if(IsEqualGUID(&IID_IOmNavigator
, riid
)) {
1066 *ppv
= &This
->IOmNavigator_iface
;
1067 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
1068 return *ppv
? S_OK
: E_NOINTERFACE
;
1070 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
1072 return E_NOINTERFACE
;
1075 IUnknown_AddRef((IUnknown
*)*ppv
);
1079 static ULONG WINAPI
OmNavigator_AddRef(IOmNavigator
*iface
)
1081 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1082 LONG ref
= InterlockedIncrement(&This
->ref
);
1084 TRACE("(%p) ref=%ld\n", This
, ref
);
1089 static ULONG WINAPI
OmNavigator_Release(IOmNavigator
*iface
)
1091 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1092 LONG ref
= InterlockedDecrement(&This
->ref
);
1094 TRACE("(%p) ref=%ld\n", This
, ref
);
1098 This
->plugins
->navigator
= NULL
;
1099 if(This
->mime_types
)
1100 This
->mime_types
->navigator
= NULL
;
1101 release_dispex(&This
->dispex
);
1108 static HRESULT WINAPI
OmNavigator_GetTypeInfoCount(IOmNavigator
*iface
, UINT
*pctinfo
)
1110 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1111 FIXME("(%p)->(%p)\n", This
, pctinfo
);
1115 static HRESULT WINAPI
OmNavigator_GetTypeInfo(IOmNavigator
*iface
, UINT iTInfo
,
1116 LCID lcid
, ITypeInfo
**ppTInfo
)
1118 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1120 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
1123 static HRESULT WINAPI
OmNavigator_GetIDsOfNames(IOmNavigator
*iface
, REFIID riid
,
1124 LPOLESTR
*rgszNames
, UINT cNames
,
1125 LCID lcid
, DISPID
*rgDispId
)
1127 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1129 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
1133 static HRESULT WINAPI
OmNavigator_Invoke(IOmNavigator
*iface
, DISPID dispIdMember
,
1134 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
1135 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
1137 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1139 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
1140 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
1143 static HRESULT WINAPI
OmNavigator_get_appCodeName(IOmNavigator
*iface
, BSTR
*p
)
1145 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1147 TRACE("(%p)->(%p)\n", This
, p
);
1149 *p
= SysAllocString(L
"Mozilla");
1153 static HRESULT WINAPI
OmNavigator_get_appName(IOmNavigator
*iface
, BSTR
*p
)
1155 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1157 TRACE("(%p)->(%p)\n", This
, p
);
1159 *p
= SysAllocString(dispex_compat_mode(&This
->dispex
) == COMPAT_MODE_IE11
1160 ? L
"Netscape" : L
"Microsoft Internet Explorer");
1162 return E_OUTOFMEMORY
;
1167 /* undocumented, added in IE8 */
1168 extern HRESULT WINAPI
MapBrowserEmulationModeToUserAgent(const void*,WCHAR
**);
1170 /* Retrieves allocated user agent via CoTaskMemAlloc */
1171 static HRESULT
get_user_agent(OmNavigator
*navigator
, WCHAR
**user_agent
)
1173 DWORD version
= get_compat_mode_version(dispex_compat_mode(&navigator
->dispex
));
1175 return MapBrowserEmulationModeToUserAgent(&version
, user_agent
);
1178 static HRESULT WINAPI
OmNavigator_get_appVersion(IOmNavigator
*iface
, BSTR
*p
)
1180 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1184 const unsigned skip_prefix
= 8; /* strlen("Mozilla/") */
1186 TRACE("(%p)->(%p)\n", This
, p
);
1188 hres
= get_user_agent(This
, &user_agent
);
1191 len
= wcslen(user_agent
);
1193 if(len
< skip_prefix
) {
1194 CoTaskMemFree(user_agent
);
1199 *p
= SysAllocStringLen(user_agent
+ skip_prefix
, len
- skip_prefix
);
1200 CoTaskMemFree(user_agent
);
1201 return *p
? S_OK
: E_OUTOFMEMORY
;
1204 static HRESULT WINAPI
OmNavigator_get_userAgent(IOmNavigator
*iface
, BSTR
*p
)
1206 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1210 TRACE("(%p)->(%p)\n", This
, p
);
1212 hres
= get_user_agent(This
, &user_agent
);
1216 *p
= SysAllocString(user_agent
);
1217 CoTaskMemFree(user_agent
);
1218 return *p
? S_OK
: E_OUTOFMEMORY
;
1221 static HRESULT WINAPI
OmNavigator_javaEnabled(IOmNavigator
*iface
, VARIANT_BOOL
*enabled
)
1223 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1225 FIXME("(%p)->(%p) semi-stub\n", This
, enabled
);
1227 *enabled
= VARIANT_TRUE
;
1231 static HRESULT WINAPI
OmNavigator_taintEnabled(IOmNavigator
*iface
, VARIANT_BOOL
*enabled
)
1233 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1234 FIXME("(%p)->(%p)\n", This
, enabled
);
1238 static HRESULT WINAPI
OmNavigator_get_mimeTypes(IOmNavigator
*iface
, IHTMLMimeTypesCollection
**p
)
1240 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1242 TRACE("(%p)->(%p)\n", This
, p
);
1244 if(!This
->mime_types
) {
1247 hres
= create_mime_types_collection(This
, &This
->mime_types
);
1251 IHTMLMimeTypesCollection_AddRef(&This
->mime_types
->IHTMLMimeTypesCollection_iface
);
1254 *p
= &This
->mime_types
->IHTMLMimeTypesCollection_iface
;
1258 static HRESULT WINAPI
OmNavigator_get_plugins(IOmNavigator
*iface
, IHTMLPluginsCollection
**p
)
1260 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1262 TRACE("(%p)->(%p)\n", This
, p
);
1264 if(!This
->plugins
) {
1267 hres
= create_plugins_collection(This
, &This
->plugins
);
1271 IHTMLPluginsCollection_AddRef(&This
->plugins
->IHTMLPluginsCollection_iface
);
1274 *p
= &This
->plugins
->IHTMLPluginsCollection_iface
;
1278 static HRESULT WINAPI
OmNavigator_get_cookieEnabled(IOmNavigator
*iface
, VARIANT_BOOL
*p
)
1280 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1282 WARN("(%p)->(%p) semi-stub\n", This
, p
);
1288 static HRESULT WINAPI
OmNavigator_get_opsProfile(IOmNavigator
*iface
, IHTMLOpsProfile
**p
)
1290 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1291 FIXME("(%p)->(%p)\n", This
, p
);
1295 static HRESULT WINAPI
OmNavigator_toString(IOmNavigator
*iface
, BSTR
*String
)
1297 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1299 TRACE("(%p)->(%p)\n", This
, String
);
1301 return dispex_to_string(&This
->dispex
, String
);
1304 static HRESULT WINAPI
OmNavigator_get_cpuClass(IOmNavigator
*iface
, BSTR
*p
)
1306 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1308 TRACE("(%p)->(%p)\n", This
, p
);
1311 *p
= SysAllocString(L
"x64");
1313 *p
= SysAllocString(L
"x86");
1315 return *p
? S_OK
: E_OUTOFMEMORY
;
1318 static HRESULT
get_language_string(LCID lcid
, BSTR
*p
)
1323 len
= LCIDToLocaleName(lcid
, NULL
, 0, 0);
1325 WARN("LCIDToLocaleName failed: %lu\n", GetLastError());
1329 ret
= SysAllocStringLen(NULL
, len
-1);
1331 return E_OUTOFMEMORY
;
1333 len
= LCIDToLocaleName(lcid
, ret
, len
, 0);
1335 WARN("LCIDToLocaleName failed: %lu\n", GetLastError());
1344 static HRESULT WINAPI
OmNavigator_get_systemLanguage(IOmNavigator
*iface
, BSTR
*p
)
1346 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1348 TRACE("(%p)->(%p)\n", This
, p
);
1350 return get_language_string(LOCALE_SYSTEM_DEFAULT
, p
);
1353 static HRESULT WINAPI
OmNavigator_get_browserLanguage(IOmNavigator
*iface
, BSTR
*p
)
1355 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1357 TRACE("(%p)->(%p)\n", This
, p
);
1359 return get_language_string(GetUserDefaultUILanguage(), p
);
1362 static HRESULT WINAPI
OmNavigator_get_userLanguage(IOmNavigator
*iface
, BSTR
*p
)
1364 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1366 TRACE("(%p)->(%p)\n", This
, p
);
1368 return get_language_string(LOCALE_USER_DEFAULT
, p
);
1371 static HRESULT WINAPI
OmNavigator_get_platform(IOmNavigator
*iface
, BSTR
*p
)
1373 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1375 TRACE("(%p)->(%p)\n", This
, p
);
1378 *p
= SysAllocString(L
"Win64");
1380 *p
= SysAllocString(L
"Win32");
1385 static HRESULT WINAPI
OmNavigator_get_appMinorVersion(IOmNavigator
*iface
, BSTR
*p
)
1387 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1389 TRACE("(%p)->(%p)\n", This
, p
);
1391 /* NOTE: MSIE returns "0" or values like ";SP2;". Returning "0" should be enough. */
1392 *p
= SysAllocString(L
"0");
1396 static HRESULT WINAPI
OmNavigator_get_connectionSpeed(IOmNavigator
*iface
, LONG
*p
)
1398 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1399 FIXME("(%p)->(%p)\n", This
, p
);
1403 static HRESULT WINAPI
OmNavigator_get_onLine(IOmNavigator
*iface
, VARIANT_BOOL
*p
)
1405 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1407 WARN("(%p)->(%p) semi-stub, returning true\n", This
, p
);
1413 static HRESULT WINAPI
OmNavigator_get_userProfile(IOmNavigator
*iface
, IHTMLOpsProfile
**p
)
1415 OmNavigator
*This
= impl_from_IOmNavigator(iface
);
1416 FIXME("(%p)->(%p)\n", This
, p
);
1420 static const IOmNavigatorVtbl OmNavigatorVtbl
= {
1421 OmNavigator_QueryInterface
,
1423 OmNavigator_Release
,
1424 OmNavigator_GetTypeInfoCount
,
1425 OmNavigator_GetTypeInfo
,
1426 OmNavigator_GetIDsOfNames
,
1428 OmNavigator_get_appCodeName
,
1429 OmNavigator_get_appName
,
1430 OmNavigator_get_appVersion
,
1431 OmNavigator_get_userAgent
,
1432 OmNavigator_javaEnabled
,
1433 OmNavigator_taintEnabled
,
1434 OmNavigator_get_mimeTypes
,
1435 OmNavigator_get_plugins
,
1436 OmNavigator_get_cookieEnabled
,
1437 OmNavigator_get_opsProfile
,
1438 OmNavigator_toString
,
1439 OmNavigator_get_cpuClass
,
1440 OmNavigator_get_systemLanguage
,
1441 OmNavigator_get_browserLanguage
,
1442 OmNavigator_get_userLanguage
,
1443 OmNavigator_get_platform
,
1444 OmNavigator_get_appMinorVersion
,
1445 OmNavigator_get_connectionSpeed
,
1446 OmNavigator_get_onLine
,
1447 OmNavigator_get_userProfile
1450 static const tid_t OmNavigator_iface_tids
[] = {
1454 static dispex_static_data_t OmNavigator_dispex
= {
1457 DispHTMLNavigator_tid
,
1458 OmNavigator_iface_tids
1461 HRESULT
create_navigator(compat_mode_t compat_mode
, IOmNavigator
**navigator
)
1465 ret
= calloc(1, sizeof(*ret
));
1467 return E_OUTOFMEMORY
;
1469 ret
->IOmNavigator_iface
.lpVtbl
= &OmNavigatorVtbl
;
1472 init_dispatch(&ret
->dispex
, (IUnknown
*)&ret
->IOmNavigator_iface
, &OmNavigator_dispex
, compat_mode
);
1474 *navigator
= &ret
->IOmNavigator_iface
;
1478 static inline HTMLPerformanceTiming
*impl_from_IHTMLPerformanceTiming(IHTMLPerformanceTiming
*iface
)
1480 return CONTAINING_RECORD(iface
, HTMLPerformanceTiming
, IHTMLPerformanceTiming_iface
);
1483 static HRESULT WINAPI
HTMLPerformanceTiming_QueryInterface(IHTMLPerformanceTiming
*iface
, REFIID riid
, void **ppv
)
1485 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1487 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
1489 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1490 *ppv
= &This
->IHTMLPerformanceTiming_iface
;
1491 }else if(IsEqualGUID(&IID_IHTMLPerformanceTiming
, riid
)) {
1492 *ppv
= &This
->IHTMLPerformanceTiming_iface
;
1493 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
1494 return *ppv
? S_OK
: E_NOINTERFACE
;
1496 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
1498 return E_NOINTERFACE
;
1501 IUnknown_AddRef((IUnknown
*)*ppv
);
1505 static ULONG WINAPI
HTMLPerformanceTiming_AddRef(IHTMLPerformanceTiming
*iface
)
1507 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1508 LONG ref
= InterlockedIncrement(&This
->ref
);
1510 TRACE("(%p) ref=%ld\n", This
, ref
);
1515 static ULONG WINAPI
HTMLPerformanceTiming_Release(IHTMLPerformanceTiming
*iface
)
1517 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1518 LONG ref
= InterlockedDecrement(&This
->ref
);
1520 TRACE("(%p) ref=%ld\n", This
, ref
);
1523 if(This
->dispex
.outer
)
1524 release_dispex(&This
->dispex
);
1531 static HRESULT WINAPI
HTMLPerformanceTiming_GetTypeInfoCount(IHTMLPerformanceTiming
*iface
, UINT
*pctinfo
)
1533 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1534 FIXME("(%p)->(%p)\n", This
, pctinfo
);
1538 static HRESULT WINAPI
HTMLPerformanceTiming_GetTypeInfo(IHTMLPerformanceTiming
*iface
, UINT iTInfo
,
1539 LCID lcid
, ITypeInfo
**ppTInfo
)
1541 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1543 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
1546 static HRESULT WINAPI
HTMLPerformanceTiming_GetIDsOfNames(IHTMLPerformanceTiming
*iface
, REFIID riid
,
1547 LPOLESTR
*rgszNames
, UINT cNames
,
1548 LCID lcid
, DISPID
*rgDispId
)
1550 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1552 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
1556 static HRESULT WINAPI
HTMLPerformanceTiming_Invoke(IHTMLPerformanceTiming
*iface
, DISPID dispIdMember
,
1557 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
1558 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
1560 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1562 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
1563 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
1566 static ULONGLONG
get_fetch_time(HTMLPerformanceTiming
*This
)
1568 /* If there's no prior doc unloaded and no redirects, fetch time == navigationStart time */
1569 if(!This
->unload_event_end_time
&& !This
->redirect_time
)
1570 return This
->navigation_start_time
;
1572 if(This
->dns_lookup_time
)
1573 return This
->dns_lookup_time
;
1574 if(This
->connect_time
)
1575 return This
->connect_time
;
1576 if(This
->request_time
)
1577 return This
->request_time
;
1578 if(This
->unload_event_end_time
)
1579 return This
->unload_event_end_time
;
1581 return This
->redirect_time
;
1584 static HRESULT WINAPI
HTMLPerformanceTiming_get_navigationStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1586 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1588 TRACE("(%p)->(%p)\n", This
, p
);
1590 *p
= This
->navigation_start_time
;
1594 static HRESULT WINAPI
HTMLPerformanceTiming_get_unloadEventStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1596 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1598 TRACE("(%p)->(%p)\n", This
, p
);
1600 *p
= This
->unload_event_start_time
;
1604 static HRESULT WINAPI
HTMLPerformanceTiming_get_unloadEventEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1606 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1608 TRACE("(%p)->(%p)\n", This
, p
);
1610 *p
= This
->unload_event_end_time
;
1614 static HRESULT WINAPI
HTMLPerformanceTiming_get_redirectStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1616 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1618 TRACE("(%p)->(%p)\n", This
, p
);
1620 *p
= This
->redirect_time
;
1624 static HRESULT WINAPI
HTMLPerformanceTiming_get_redirectEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1626 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1628 TRACE("(%p)->(%p)\n", This
, p
);
1630 *p
= This
->redirect_time
? get_fetch_time(This
) : 0;
1634 static HRESULT WINAPI
HTMLPerformanceTiming_get_fetchStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1636 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1638 TRACE("(%p)->(%p)\n", This
, p
);
1640 *p
= get_fetch_time(This
);
1644 static HRESULT WINAPI
HTMLPerformanceTiming_get_domainLookupStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1646 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1648 TRACE("(%p)->(%p)\n", This
, p
);
1650 *p
= This
->dns_lookup_time
? This
->dns_lookup_time
: get_fetch_time(This
);
1654 static HRESULT WINAPI
HTMLPerformanceTiming_get_domainLookupEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1656 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1658 TRACE("(%p)->(%p)\n", This
, p
);
1660 *p
= This
->connect_time
? This
->connect_time
:
1661 This
->dns_lookup_time
? This
->dns_lookup_time
: get_fetch_time(This
);
1665 static HRESULT WINAPI
HTMLPerformanceTiming_get_connectStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1667 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1669 TRACE("(%p)->(%p)\n", This
, p
);
1671 *p
= This
->connect_time
? This
->connect_time
:
1672 This
->dns_lookup_time
? This
->dns_lookup_time
: get_fetch_time(This
);
1676 static HRESULT WINAPI
HTMLPerformanceTiming_get_connectEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1678 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1680 TRACE("(%p)->(%p)\n", This
, p
);
1682 *p
= This
->request_time
? This
->request_time
:
1683 This
->connect_time
? This
->connect_time
:
1684 This
->dns_lookup_time
? This
->dns_lookup_time
: get_fetch_time(This
);
1688 static HRESULT WINAPI
HTMLPerformanceTiming_get_requestStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1690 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1692 TRACE("(%p)->(%p)\n", This
, p
);
1694 *p
= This
->request_time
? This
->request_time
:
1695 This
->connect_time
? This
->connect_time
:
1696 This
->dns_lookup_time
? This
->dns_lookup_time
: get_fetch_time(This
);
1700 static HRESULT WINAPI
HTMLPerformanceTiming_get_responseStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1702 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1704 TRACE("(%p)->(%p)\n", This
, p
);
1706 *p
= This
->response_start_time
;
1710 static HRESULT WINAPI
HTMLPerformanceTiming_get_responseEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1712 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1714 TRACE("(%p)->(%p)\n", This
, p
);
1716 *p
= This
->response_end_time
;
1720 static HRESULT WINAPI
HTMLPerformanceTiming_get_domLoading(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1722 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1724 TRACE("(%p)->(%p)\n", This
, p
);
1726 /* Make sure this is after responseEnd, when the Gecko parser starts */
1727 *p
= This
->response_end_time
;
1731 static HRESULT WINAPI
HTMLPerformanceTiming_get_domInteractive(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1733 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1735 TRACE("(%p)->(%p)\n", This
, p
);
1737 *p
= This
->dom_interactive_time
;
1741 static HRESULT WINAPI
HTMLPerformanceTiming_get_domContentLoadedEventStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1743 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1745 TRACE("(%p)->(%p)\n", This
, p
);
1747 *p
= This
->dom_content_loaded_event_start_time
;
1751 static HRESULT WINAPI
HTMLPerformanceTiming_get_domContentLoadedEventEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1753 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1755 TRACE("(%p)->(%p)\n", This
, p
);
1757 *p
= This
->dom_content_loaded_event_end_time
;
1761 static HRESULT WINAPI
HTMLPerformanceTiming_get_domComplete(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1763 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1765 TRACE("(%p)->(%p)\n", This
, p
);
1767 *p
= This
->dom_complete_time
;
1771 static HRESULT WINAPI
HTMLPerformanceTiming_get_loadEventStart(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1773 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1775 TRACE("(%p)->(%p)\n", This
, p
);
1777 *p
= This
->load_event_start_time
;
1781 static HRESULT WINAPI
HTMLPerformanceTiming_get_loadEventEnd(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1783 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1785 TRACE("(%p)->(%p)\n", This
, p
);
1787 *p
= This
->load_event_end_time
;
1791 static HRESULT WINAPI
HTMLPerformanceTiming_get_msFirstPaint(IHTMLPerformanceTiming
*iface
, ULONGLONG
*p
)
1793 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1795 TRACE("(%p)->(%p)\n", This
, p
);
1797 *p
= This
->first_paint_time
;
1801 static HRESULT WINAPI
HTMLPerformanceTiming_toString(IHTMLPerformanceTiming
*iface
, BSTR
*string
)
1803 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1805 TRACE("(%p)->(%p)\n", This
, string
);
1807 return dispex_to_string(&This
->dispex
, string
);
1810 static HRESULT WINAPI
HTMLPerformanceTiming_toJSON(IHTMLPerformanceTiming
*iface
, VARIANT
*p
)
1812 HTMLPerformanceTiming
*This
= impl_from_IHTMLPerformanceTiming(iface
);
1813 FIXME("(%p)->(%p)\n", This
, p
);
1817 static const IHTMLPerformanceTimingVtbl HTMLPerformanceTimingVtbl
= {
1818 HTMLPerformanceTiming_QueryInterface
,
1819 HTMLPerformanceTiming_AddRef
,
1820 HTMLPerformanceTiming_Release
,
1821 HTMLPerformanceTiming_GetTypeInfoCount
,
1822 HTMLPerformanceTiming_GetTypeInfo
,
1823 HTMLPerformanceTiming_GetIDsOfNames
,
1824 HTMLPerformanceTiming_Invoke
,
1825 HTMLPerformanceTiming_get_navigationStart
,
1826 HTMLPerformanceTiming_get_unloadEventStart
,
1827 HTMLPerformanceTiming_get_unloadEventEnd
,
1828 HTMLPerformanceTiming_get_redirectStart
,
1829 HTMLPerformanceTiming_get_redirectEnd
,
1830 HTMLPerformanceTiming_get_fetchStart
,
1831 HTMLPerformanceTiming_get_domainLookupStart
,
1832 HTMLPerformanceTiming_get_domainLookupEnd
,
1833 HTMLPerformanceTiming_get_connectStart
,
1834 HTMLPerformanceTiming_get_connectEnd
,
1835 HTMLPerformanceTiming_get_requestStart
,
1836 HTMLPerformanceTiming_get_responseStart
,
1837 HTMLPerformanceTiming_get_responseEnd
,
1838 HTMLPerformanceTiming_get_domLoading
,
1839 HTMLPerformanceTiming_get_domInteractive
,
1840 HTMLPerformanceTiming_get_domContentLoadedEventStart
,
1841 HTMLPerformanceTiming_get_domContentLoadedEventEnd
,
1842 HTMLPerformanceTiming_get_domComplete
,
1843 HTMLPerformanceTiming_get_loadEventStart
,
1844 HTMLPerformanceTiming_get_loadEventEnd
,
1845 HTMLPerformanceTiming_get_msFirstPaint
,
1846 HTMLPerformanceTiming_toString
,
1847 HTMLPerformanceTiming_toJSON
1850 static const tid_t HTMLPerformanceTiming_iface_tids
[] = {
1851 IHTMLPerformanceTiming_tid
,
1854 static dispex_static_data_t HTMLPerformanceTiming_dispex
= {
1855 L
"PerformanceTiming",
1857 IHTMLPerformanceTiming_tid
,
1858 HTMLPerformanceTiming_iface_tids
1861 HRESULT
create_performance_timing(HTMLPerformanceTiming
**ret
)
1863 HTMLPerformanceTiming
*timing
;
1865 timing
= calloc(1, sizeof(*timing
));
1867 return E_OUTOFMEMORY
;
1869 timing
->IHTMLPerformanceTiming_iface
.lpVtbl
= &HTMLPerformanceTimingVtbl
;
1872 /* Defer initializing the dispex until it's actually needed (for compat mode) */
1879 IHTMLPerformanceNavigation IHTMLPerformanceNavigation_iface
;
1882 HTMLPerformanceTiming
*timing
;
1883 } HTMLPerformanceNavigation
;
1885 static inline HTMLPerformanceNavigation
*impl_from_IHTMLPerformanceNavigation(IHTMLPerformanceNavigation
*iface
)
1887 return CONTAINING_RECORD(iface
, HTMLPerformanceNavigation
, IHTMLPerformanceNavigation_iface
);
1890 static HRESULT WINAPI
HTMLPerformanceNavigation_QueryInterface(IHTMLPerformanceNavigation
*iface
, REFIID riid
, void **ppv
)
1892 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1894 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
1896 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
1897 *ppv
= &This
->IHTMLPerformanceNavigation_iface
;
1898 }else if(IsEqualGUID(&IID_IHTMLPerformanceNavigation
, riid
)) {
1899 *ppv
= &This
->IHTMLPerformanceNavigation_iface
;
1900 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
1901 return *ppv
? S_OK
: E_NOINTERFACE
;
1903 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
1905 return E_NOINTERFACE
;
1908 IUnknown_AddRef((IUnknown
*)*ppv
);
1912 static ULONG WINAPI
HTMLPerformanceNavigation_AddRef(IHTMLPerformanceNavigation
*iface
)
1914 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1915 LONG ref
= InterlockedIncrement(&This
->ref
);
1917 TRACE("(%p) ref=%ld\n", This
, ref
);
1922 static ULONG WINAPI
HTMLPerformanceNavigation_Release(IHTMLPerformanceNavigation
*iface
)
1924 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1925 LONG ref
= InterlockedDecrement(&This
->ref
);
1927 TRACE("(%p) ref=%ld\n", This
, ref
);
1930 IHTMLPerformanceTiming_Release(&This
->timing
->IHTMLPerformanceTiming_iface
);
1931 release_dispex(&This
->dispex
);
1938 static HRESULT WINAPI
HTMLPerformanceNavigation_GetTypeInfoCount(IHTMLPerformanceNavigation
*iface
, UINT
*pctinfo
)
1940 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1941 FIXME("(%p)->(%p)\n", This
, pctinfo
);
1945 static HRESULT WINAPI
HTMLPerformanceNavigation_GetTypeInfo(IHTMLPerformanceNavigation
*iface
, UINT iTInfo
,
1946 LCID lcid
, ITypeInfo
**ppTInfo
)
1948 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1950 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
1953 static HRESULT WINAPI
HTMLPerformanceNavigation_GetIDsOfNames(IHTMLPerformanceNavigation
*iface
, REFIID riid
,
1954 LPOLESTR
*rgszNames
, UINT cNames
,
1955 LCID lcid
, DISPID
*rgDispId
)
1957 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1959 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
1963 static HRESULT WINAPI
HTMLPerformanceNavigation_Invoke(IHTMLPerformanceNavigation
*iface
, DISPID dispIdMember
,
1964 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
1965 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
1967 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1969 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
1970 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
1973 static HRESULT WINAPI
HTMLPerformanceNavigation_get_type(IHTMLPerformanceNavigation
*iface
, ULONG
*p
)
1975 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1977 TRACE("(%p)->(%p)\n", This
, p
);
1979 *p
= This
->timing
->navigation_type
;
1983 static HRESULT WINAPI
HTMLPerformanceNavigation_get_redirectCount(IHTMLPerformanceNavigation
*iface
, ULONG
*p
)
1985 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1987 TRACE("(%p)->(%p)\n", This
, p
);
1989 *p
= This
->timing
->redirect_count
;
1993 static HRESULT WINAPI
HTMLPerformanceNavigation_toString(IHTMLPerformanceNavigation
*iface
, BSTR
*string
)
1995 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
1997 TRACE("(%p)->(%p)\n", This
, string
);
1999 return dispex_to_string(&This
->dispex
, string
);
2002 static HRESULT WINAPI
HTMLPerformanceNavigation_toJSON(IHTMLPerformanceNavigation
*iface
, VARIANT
*p
)
2004 HTMLPerformanceNavigation
*This
= impl_from_IHTMLPerformanceNavigation(iface
);
2005 FIXME("(%p)->(%p)\n", This
, p
);
2009 static const IHTMLPerformanceNavigationVtbl HTMLPerformanceNavigationVtbl
= {
2010 HTMLPerformanceNavigation_QueryInterface
,
2011 HTMLPerformanceNavigation_AddRef
,
2012 HTMLPerformanceNavigation_Release
,
2013 HTMLPerformanceNavigation_GetTypeInfoCount
,
2014 HTMLPerformanceNavigation_GetTypeInfo
,
2015 HTMLPerformanceNavigation_GetIDsOfNames
,
2016 HTMLPerformanceNavigation_Invoke
,
2017 HTMLPerformanceNavigation_get_type
,
2018 HTMLPerformanceNavigation_get_redirectCount
,
2019 HTMLPerformanceNavigation_toString
,
2020 HTMLPerformanceNavigation_toJSON
2023 static const tid_t HTMLPerformanceNavigation_iface_tids
[] = {
2024 IHTMLPerformanceNavigation_tid
,
2027 static dispex_static_data_t HTMLPerformanceNavigation_dispex
= {
2028 L
"PerformanceNavigation",
2030 IHTMLPerformanceNavigation_tid
,
2031 HTMLPerformanceNavigation_iface_tids
2036 IHTMLPerformance IHTMLPerformance_iface
;
2040 IHTMLPerformanceNavigation
*navigation
;
2041 HTMLPerformanceTiming
*timing
;
2044 static inline HTMLPerformance
*impl_from_IHTMLPerformance(IHTMLPerformance
*iface
)
2046 return CONTAINING_RECORD(iface
, HTMLPerformance
, IHTMLPerformance_iface
);
2049 static HRESULT WINAPI
HTMLPerformance_QueryInterface(IHTMLPerformance
*iface
, REFIID riid
, void **ppv
)
2051 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2053 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
2055 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
2056 *ppv
= &This
->IHTMLPerformance_iface
;
2057 }else if(IsEqualGUID(&IID_IHTMLPerformance
, riid
)) {
2058 *ppv
= &This
->IHTMLPerformance_iface
;
2059 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
2060 return *ppv
? S_OK
: E_NOINTERFACE
;
2062 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
2064 return E_NOINTERFACE
;
2067 IUnknown_AddRef((IUnknown
*)*ppv
);
2071 static ULONG WINAPI
HTMLPerformance_AddRef(IHTMLPerformance
*iface
)
2073 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2074 LONG ref
= InterlockedIncrement(&This
->ref
);
2076 TRACE("(%p) ref=%ld\n", This
, ref
);
2081 static ULONG WINAPI
HTMLPerformance_Release(IHTMLPerformance
*iface
)
2083 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2084 LONG ref
= InterlockedDecrement(&This
->ref
);
2086 TRACE("(%p) ref=%ld\n", This
, ref
);
2089 IHTMLPerformanceTiming_Release(&This
->timing
->IHTMLPerformanceTiming_iface
);
2090 if(This
->navigation
)
2091 IHTMLPerformanceNavigation_Release(This
->navigation
);
2092 release_dispex(&This
->dispex
);
2099 static HRESULT WINAPI
HTMLPerformance_GetTypeInfoCount(IHTMLPerformance
*iface
, UINT
*pctinfo
)
2101 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2102 FIXME("(%p)->(%p)\n", This
, pctinfo
);
2106 static HRESULT WINAPI
HTMLPerformance_GetTypeInfo(IHTMLPerformance
*iface
, UINT iTInfo
,
2107 LCID lcid
, ITypeInfo
**ppTInfo
)
2109 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2111 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
2114 static HRESULT WINAPI
HTMLPerformance_GetIDsOfNames(IHTMLPerformance
*iface
, REFIID riid
,
2115 LPOLESTR
*rgszNames
, UINT cNames
,
2116 LCID lcid
, DISPID
*rgDispId
)
2118 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2120 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
2124 static HRESULT WINAPI
HTMLPerformance_Invoke(IHTMLPerformance
*iface
, DISPID dispIdMember
,
2125 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
2126 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2128 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2130 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
2131 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
2134 static HRESULT WINAPI
HTMLPerformance_get_navigation(IHTMLPerformance
*iface
,
2135 IHTMLPerformanceNavigation
**p
)
2137 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2139 TRACE("(%p)->(%p)\n", This
, p
);
2141 if(!This
->navigation
) {
2142 HTMLPerformanceNavigation
*navigation
;
2144 navigation
= calloc(1, sizeof(*navigation
));
2146 return E_OUTOFMEMORY
;
2148 navigation
->IHTMLPerformanceNavigation_iface
.lpVtbl
= &HTMLPerformanceNavigationVtbl
;
2149 navigation
->ref
= 1;
2150 navigation
->timing
= This
->timing
;
2151 IHTMLPerformanceTiming_AddRef(&This
->timing
->IHTMLPerformanceTiming_iface
);
2153 init_dispatch(&navigation
->dispex
, (IUnknown
*)&navigation
->IHTMLPerformanceNavigation_iface
,
2154 &HTMLPerformanceNavigation_dispex
, dispex_compat_mode(&This
->dispex
));
2156 This
->navigation
= &navigation
->IHTMLPerformanceNavigation_iface
;
2159 IHTMLPerformanceNavigation_AddRef(*p
= This
->navigation
);
2163 static HRESULT WINAPI
HTMLPerformance_get_timing(IHTMLPerformance
*iface
, IHTMLPerformanceTiming
**p
)
2165 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2167 TRACE("(%p)->(%p)\n", This
, p
);
2169 IHTMLPerformanceTiming_AddRef(*p
= &This
->timing
->IHTMLPerformanceTiming_iface
);
2173 static HRESULT WINAPI
HTMLPerformance_toString(IHTMLPerformance
*iface
, BSTR
*string
)
2175 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2177 TRACE("(%p)->(%p)\n", This
, string
);
2179 return dispex_to_string(&This
->dispex
, string
);
2182 static HRESULT WINAPI
HTMLPerformance_toJSON(IHTMLPerformance
*iface
, VARIANT
*var
)
2184 HTMLPerformance
*This
= impl_from_IHTMLPerformance(iface
);
2185 FIXME("(%p)->(%p)\n", This
, var
);
2189 static const IHTMLPerformanceVtbl HTMLPerformanceVtbl
= {
2190 HTMLPerformance_QueryInterface
,
2191 HTMLPerformance_AddRef
,
2192 HTMLPerformance_Release
,
2193 HTMLPerformance_GetTypeInfoCount
,
2194 HTMLPerformance_GetTypeInfo
,
2195 HTMLPerformance_GetIDsOfNames
,
2196 HTMLPerformance_Invoke
,
2197 HTMLPerformance_get_navigation
,
2198 HTMLPerformance_get_timing
,
2199 HTMLPerformance_toString
,
2200 HTMLPerformance_toJSON
2203 static const tid_t HTMLPerformance_iface_tids
[] = {
2204 IHTMLPerformance_tid
,
2207 static dispex_static_data_t HTMLPerformance_dispex
= {
2210 IHTMLPerformance_tid
,
2211 HTMLPerformance_iface_tids
2214 HRESULT
create_performance(HTMLInnerWindow
*window
, IHTMLPerformance
**ret
)
2216 compat_mode_t compat_mode
= dispex_compat_mode(&window
->event_target
.dispex
);
2217 HTMLPerformance
*performance
;
2219 performance
= calloc(1, sizeof(*performance
));
2221 return E_OUTOFMEMORY
;
2223 performance
->IHTMLPerformance_iface
.lpVtbl
= &HTMLPerformanceVtbl
;
2224 performance
->ref
= 1;
2226 init_dispatch(&performance
->dispex
, (IUnknown
*)&performance
->IHTMLPerformance_iface
,
2227 &HTMLPerformance_dispex
, compat_mode
);
2229 performance
->timing
= window
->performance_timing
;
2230 IHTMLPerformanceTiming_AddRef(&performance
->timing
->IHTMLPerformanceTiming_iface
);
2232 init_dispatch(&performance
->timing
->dispex
, (IUnknown
*)&performance
->timing
->IHTMLPerformanceTiming_iface
,
2233 &HTMLPerformanceTiming_dispex
, compat_mode
);
2235 *ret
= &performance
->IHTMLPerformance_iface
;
2241 IHTMLNamespaceCollection IHTMLNamespaceCollection_iface
;
2244 } HTMLNamespaceCollection
;
2246 static inline HTMLNamespaceCollection
*impl_from_IHTMLNamespaceCollection(IHTMLNamespaceCollection
*iface
)
2248 return CONTAINING_RECORD(iface
, HTMLNamespaceCollection
, IHTMLNamespaceCollection_iface
);
2251 static HRESULT WINAPI
HTMLNamespaceCollection_QueryInterface(IHTMLNamespaceCollection
*iface
, REFIID riid
, void **ppv
)
2253 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2255 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
2257 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
2258 *ppv
= &This
->IHTMLNamespaceCollection_iface
;
2259 }else if(IsEqualGUID(&IID_IHTMLNamespaceCollection
, riid
)) {
2260 *ppv
= &This
->IHTMLNamespaceCollection_iface
;
2261 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
2262 return *ppv
? S_OK
: E_NOINTERFACE
;
2264 WARN("Unsupported interface %s\n", debugstr_mshtml_guid(riid
));
2266 return E_NOINTERFACE
;
2269 IUnknown_AddRef((IUnknown
*)*ppv
);
2273 static ULONG WINAPI
HTMLNamespaceCollection_AddRef(IHTMLNamespaceCollection
*iface
)
2275 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2276 LONG ref
= InterlockedIncrement(&This
->ref
);
2278 TRACE("(%p) ref=%ld\n", This
, ref
);
2283 static ULONG WINAPI
HTMLNamespaceCollection_Release(IHTMLNamespaceCollection
*iface
)
2285 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2286 LONG ref
= InterlockedDecrement(&This
->ref
);
2288 TRACE("(%p) ref=%ld\n", This
, ref
);
2291 release_dispex(&This
->dispex
);
2298 static HRESULT WINAPI
HTMLNamespaceCollection_GetTypeInfoCount(IHTMLNamespaceCollection
*iface
, UINT
*pctinfo
)
2300 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2301 FIXME("(%p)->(%p)\n", This
, pctinfo
);
2305 static HRESULT WINAPI
HTMLNamespaceCollection_GetTypeInfo(IHTMLNamespaceCollection
*iface
, UINT iTInfo
,
2306 LCID lcid
, ITypeInfo
**ppTInfo
)
2308 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2310 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
2313 static HRESULT WINAPI
HTMLNamespaceCollection_GetIDsOfNames(IHTMLNamespaceCollection
*iface
, REFIID riid
,
2314 LPOLESTR
*rgszNames
, UINT cNames
,
2315 LCID lcid
, DISPID
*rgDispId
)
2317 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2319 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
2323 static HRESULT WINAPI
HTMLNamespaceCollection_Invoke(IHTMLNamespaceCollection
*iface
, DISPID dispIdMember
,
2324 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
2325 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2327 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2329 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
2330 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
2333 static HRESULT WINAPI
HTMLNamespaceCollection_get_length(IHTMLNamespaceCollection
*iface
, LONG
*p
)
2335 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2336 FIXME("(%p)->(%p) returning 0\n", This
, p
);
2341 static HRESULT WINAPI
HTMLNamespaceCollection_item(IHTMLNamespaceCollection
*iface
, VARIANT index
, IDispatch
**p
)
2343 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2344 FIXME("(%p)->(%s %p)\n", This
, debugstr_variant(&index
), p
);
2348 static HRESULT WINAPI
HTMLNamespaceCollection_add(IHTMLNamespaceCollection
*iface
, BSTR
namespace, BSTR urn
,
2349 VARIANT implementation_url
, IDispatch
**p
)
2351 HTMLNamespaceCollection
*This
= impl_from_IHTMLNamespaceCollection(iface
);
2352 FIXME("(%p)->(%s %s %s %p)\n", This
, debugstr_w(namespace), debugstr_w(urn
), debugstr_variant(&implementation_url
), p
);
2356 static const IHTMLNamespaceCollectionVtbl HTMLNamespaceCollectionVtbl
= {
2357 HTMLNamespaceCollection_QueryInterface
,
2358 HTMLNamespaceCollection_AddRef
,
2359 HTMLNamespaceCollection_Release
,
2360 HTMLNamespaceCollection_GetTypeInfoCount
,
2361 HTMLNamespaceCollection_GetTypeInfo
,
2362 HTMLNamespaceCollection_GetIDsOfNames
,
2363 HTMLNamespaceCollection_Invoke
,
2364 HTMLNamespaceCollection_get_length
,
2365 HTMLNamespaceCollection_item
,
2366 HTMLNamespaceCollection_add
2369 static const tid_t HTMLNamespaceCollection_iface_tids
[] = {
2370 IHTMLNamespaceCollection_tid
,
2373 static dispex_static_data_t HTMLNamespaceCollection_dispex
= {
2374 L
"MSNamespaceInfoCollection",
2376 DispHTMLNamespaceCollection_tid
,
2377 HTMLNamespaceCollection_iface_tids
2380 HRESULT
create_namespace_collection(compat_mode_t compat_mode
, IHTMLNamespaceCollection
**ret
)
2382 HTMLNamespaceCollection
*namespaces
;
2384 if (!(namespaces
= calloc(1, sizeof(*namespaces
))))
2385 return E_OUTOFMEMORY
;
2387 namespaces
->IHTMLNamespaceCollection_iface
.lpVtbl
= &HTMLNamespaceCollectionVtbl
;
2388 namespaces
->ref
= 1;
2389 init_dispatch(&namespaces
->dispex
, (IUnknown
*)&namespaces
->IHTMLNamespaceCollection_iface
,
2390 &HTMLNamespaceCollection_dispex
, compat_mode
);
2391 *ret
= &namespaces
->IHTMLNamespaceCollection_iface
;
2397 IWineMSHTMLConsole IWineMSHTMLConsole_iface
;
2401 static inline struct console
*impl_from_IWineMSHTMLConsole(IWineMSHTMLConsole
*iface
)
2403 return CONTAINING_RECORD(iface
, struct console
, IWineMSHTMLConsole_iface
);
2406 static HRESULT WINAPI
console_QueryInterface(IWineMSHTMLConsole
*iface
, REFIID riid
, void **ppv
)
2408 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2410 TRACE("(%p)->(%s %p)\n", console
, debugstr_mshtml_guid(riid
), ppv
);
2412 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
2413 *ppv
= &console
->IWineMSHTMLConsole_iface
;
2414 }else if(IsEqualGUID(&IID_IWineMSHTMLConsole
, riid
)) {
2415 *ppv
= &console
->IWineMSHTMLConsole_iface
;
2416 }else if(dispex_query_interface(&console
->dispex
, riid
, ppv
)) {
2417 return *ppv
? S_OK
: E_NOINTERFACE
;
2419 WARN("(%p)->(%s %p)\n", console
, debugstr_mshtml_guid(riid
), ppv
);
2421 return E_NOINTERFACE
;
2424 IUnknown_AddRef((IUnknown
*)*ppv
);
2428 static ULONG WINAPI
console_AddRef(IWineMSHTMLConsole
*iface
)
2430 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2431 LONG ref
= InterlockedIncrement(&console
->ref
);
2433 TRACE("(%p) ref=%ld\n", console
, ref
);
2438 static ULONG WINAPI
console_Release(IWineMSHTMLConsole
*iface
)
2440 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2441 LONG ref
= InterlockedDecrement(&console
->ref
);
2443 TRACE("(%p) ref=%ld\n", console
, ref
);
2446 release_dispex(&console
->dispex
);
2453 static HRESULT WINAPI
console_GetTypeInfoCount(IWineMSHTMLConsole
*iface
, UINT
*pctinfo
)
2455 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2456 FIXME("(%p)->(%p)\n", console
, pctinfo
);
2460 static HRESULT WINAPI
console_GetTypeInfo(IWineMSHTMLConsole
*iface
, UINT iTInfo
,
2461 LCID lcid
, ITypeInfo
**ppTInfo
)
2463 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2465 return IDispatchEx_GetTypeInfo(&console
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
2468 static HRESULT WINAPI
console_GetIDsOfNames(IWineMSHTMLConsole
*iface
, REFIID riid
,
2469 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
2471 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2473 return IDispatchEx_GetIDsOfNames(&console
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
2477 static HRESULT WINAPI
console_Invoke(IWineMSHTMLConsole
*iface
, DISPID dispIdMember
,
2478 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
2479 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2481 struct console
*console
= impl_from_IWineMSHTMLConsole(iface
);
2483 return IDispatchEx_Invoke(&console
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
2484 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
2487 static HRESULT WINAPI
console_assert(IWineMSHTMLConsole
*iface
, VARIANT_BOOL
*assertion
, VARIANT
*vararg_start
)
2489 FIXME("iface %p, assertion %p, vararg_start %p stub.\n", iface
, assertion
, vararg_start
);
2494 static HRESULT WINAPI
console_clear(IWineMSHTMLConsole
*iface
)
2496 FIXME("iface %p stub.\n", iface
);
2501 static HRESULT WINAPI
console_count(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2503 FIXME("iface %p, label %p stub.\n", iface
, label
);
2508 static HRESULT WINAPI
console_debug(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2510 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2515 static HRESULT WINAPI
console_dir(IWineMSHTMLConsole
*iface
, VARIANT
*object
)
2517 FIXME("iface %p, object %p stub.\n", iface
, object
);
2522 static HRESULT WINAPI
console_dirxml(IWineMSHTMLConsole
*iface
, VARIANT
*object
)
2524 FIXME("iface %p, object %p stub.\n", iface
, object
);
2529 static HRESULT WINAPI
console_error(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2531 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2536 static HRESULT WINAPI
console_group(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2538 FIXME("iface %p, label %p stub.\n", iface
, label
);
2543 static HRESULT WINAPI
console_group_collapsed(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2545 FIXME("iface %p, label %p stub.\n", iface
, label
);
2550 static HRESULT WINAPI
console_group_end(IWineMSHTMLConsole
*iface
)
2552 FIXME("iface %p, stub.\n", iface
);
2557 static HRESULT WINAPI
console_info(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2559 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2564 static HRESULT WINAPI
console_log(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2566 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2571 static HRESULT WINAPI
console_time(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2573 FIXME("iface %p, label %p stub.\n", iface
, label
);
2578 static HRESULT WINAPI
console_time_end(IWineMSHTMLConsole
*iface
, VARIANT
*label
)
2580 FIXME("iface %p, label %p stub.\n", iface
, label
);
2585 static HRESULT WINAPI
console_trace(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2587 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2592 static HRESULT WINAPI
console_warn(IWineMSHTMLConsole
*iface
, VARIANT
*vararg_start
)
2594 FIXME("iface %p, vararg_start %p stub.\n", iface
, vararg_start
);
2599 static const IWineMSHTMLConsoleVtbl WineMSHTMLConsoleVtbl
= {
2600 console_QueryInterface
,
2603 console_GetTypeInfoCount
,
2604 console_GetTypeInfo
,
2605 console_GetIDsOfNames
,
2615 console_group_collapsed
,
2625 static const tid_t console_iface_tids
[] = {
2626 IWineMSHTMLConsole_tid
,
2629 static dispex_static_data_t console_dispex
= {
2632 IWineMSHTMLConsole_tid
,
2636 void create_console(compat_mode_t compat_mode
, IWineMSHTMLConsole
**ret
)
2638 struct console
*obj
;
2640 obj
= calloc(1, sizeof(*obj
));
2643 ERR("No memory.\n");
2647 obj
->IWineMSHTMLConsole_iface
.lpVtbl
= &WineMSHTMLConsoleVtbl
;
2649 init_dispatch(&obj
->dispex
, (IUnknown
*)&obj
->IWineMSHTMLConsole_iface
, &console_dispex
, compat_mode
);
2651 *ret
= &obj
->IWineMSHTMLConsole_iface
;
2654 struct media_query_list_listener
{
2656 IDispatch
*function
;
2659 struct media_query_list_callback
;
2660 struct media_query_list
{
2662 IWineMSHTMLMediaQueryList IWineMSHTMLMediaQueryList_iface
;
2664 nsIDOMMediaQueryList
*nsquerylist
;
2665 struct media_query_list_callback
*callback
;
2666 struct list listeners
;
2669 struct media_query_list_callback
{
2670 nsIDOMMediaQueryListListener nsIDOMMediaQueryListListener_iface
;
2671 struct media_query_list
*media_query_list
;
2675 static inline struct media_query_list
*impl_from_IWineMSHTMLMediaQueryList(IWineMSHTMLMediaQueryList
*iface
)
2677 return CONTAINING_RECORD(iface
, struct media_query_list
, IWineMSHTMLMediaQueryList_iface
);
2680 static HRESULT WINAPI
media_query_list_QueryInterface(IWineMSHTMLMediaQueryList
*iface
, REFIID riid
, void **ppv
)
2682 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2684 TRACE("(%p)->(%s %p)\n", media_query_list
, debugstr_mshtml_guid(riid
), ppv
);
2686 if(IsEqualGUID(&IID_IUnknown
, riid
) || IsEqualGUID(&IID_IWineMSHTMLMediaQueryList
, riid
)) {
2687 *ppv
= &media_query_list
->IWineMSHTMLMediaQueryList_iface
;
2688 }else if(dispex_query_interface(&media_query_list
->dispex
, riid
, ppv
)) {
2689 return *ppv
? S_OK
: E_NOINTERFACE
;
2692 return E_NOINTERFACE
;
2695 IUnknown_AddRef((IUnknown
*)*ppv
);
2699 static ULONG WINAPI
media_query_list_AddRef(IWineMSHTMLMediaQueryList
*iface
)
2701 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2702 LONG ref
= InterlockedIncrement(&media_query_list
->ref
);
2704 TRACE("(%p) ref=%ld\n", media_query_list
, ref
);
2709 static ULONG WINAPI
media_query_list_Release(IWineMSHTMLMediaQueryList
*iface
)
2711 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2712 LONG ref
= InterlockedDecrement(&media_query_list
->ref
);
2713 struct media_query_list_listener
*listener
, *listener2
;
2715 TRACE("(%p) ref=%ld\n", media_query_list
, ref
);
2718 media_query_list
->callback
->media_query_list
= NULL
;
2719 LIST_FOR_EACH_ENTRY_SAFE(listener
, listener2
, &media_query_list
->listeners
, struct media_query_list_listener
, entry
) {
2720 IDispatch_Release(listener
->function
);
2723 nsIDOMMediaQueryListListener_Release(&media_query_list
->callback
->nsIDOMMediaQueryListListener_iface
);
2724 nsIDOMMediaQueryList_Release(media_query_list
->nsquerylist
);
2725 release_dispex(&media_query_list
->dispex
);
2726 free(media_query_list
);
2732 static HRESULT WINAPI
media_query_list_GetTypeInfoCount(IWineMSHTMLMediaQueryList
*iface
, UINT
*pctinfo
)
2734 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2736 TRACE("(%p)->(%p)\n", media_query_list
, pctinfo
);
2738 return IDispatchEx_GetTypeInfoCount(&media_query_list
->dispex
.IDispatchEx_iface
, pctinfo
);
2741 static HRESULT WINAPI
media_query_list_GetTypeInfo(IWineMSHTMLMediaQueryList
*iface
, UINT iTInfo
,
2742 LCID lcid
, ITypeInfo
**ppTInfo
)
2744 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2746 return IDispatchEx_GetTypeInfo(&media_query_list
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
2749 static HRESULT WINAPI
media_query_list_GetIDsOfNames(IWineMSHTMLMediaQueryList
*iface
, REFIID riid
,
2750 LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
2752 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2754 return IDispatchEx_GetIDsOfNames(&media_query_list
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
2758 static HRESULT WINAPI
media_query_list_Invoke(IWineMSHTMLMediaQueryList
*iface
, DISPID dispIdMember
,
2759 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
2760 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
2762 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2764 return IDispatchEx_Invoke(&media_query_list
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
2765 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
2768 static HRESULT WINAPI
media_query_list_get_media(IWineMSHTMLMediaQueryList
*iface
, BSTR
*p
)
2770 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2773 TRACE("(%p)->(%p)\n", media_query_list
, p
);
2775 nsAString_InitDepend(&nsstr
, NULL
);
2776 return return_nsstr(nsIDOMMediaQueryList_GetMedia(media_query_list
->nsquerylist
, &nsstr
), &nsstr
, p
);
2779 static HRESULT WINAPI
media_query_list_get_matches(IWineMSHTMLMediaQueryList
*iface
, VARIANT_BOOL
*p
)
2781 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2785 TRACE("(%p)->(%p)\n", media_query_list
, p
);
2787 nsres
= nsIDOMMediaQueryList_GetMatches(media_query_list
->nsquerylist
, &b
);
2788 if(NS_FAILED(nsres
))
2789 return map_nsresult(nsres
);
2790 *p
= b
? VARIANT_TRUE
: VARIANT_FALSE
;
2794 static HRESULT WINAPI
media_query_list_addListener(IWineMSHTMLMediaQueryList
*iface
, VARIANT
*listener
)
2796 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2797 struct media_query_list_listener
*entry
;
2799 TRACE("(%p)->(%s)\n", media_query_list
, debugstr_variant(listener
));
2801 if(V_VT(listener
) != VT_DISPATCH
|| !V_DISPATCH(listener
))
2804 LIST_FOR_EACH_ENTRY(entry
, &media_query_list
->listeners
, struct media_query_list_listener
, entry
)
2805 if(entry
->function
== V_DISPATCH(listener
))
2808 if(!(entry
= malloc(sizeof(*entry
))))
2809 return E_OUTOFMEMORY
;
2810 entry
->function
= V_DISPATCH(listener
);
2811 IDispatch_AddRef(V_DISPATCH(listener
));
2813 list_add_tail(&media_query_list
->listeners
, &entry
->entry
);
2817 static HRESULT WINAPI
media_query_list_removeListener(IWineMSHTMLMediaQueryList
*iface
, VARIANT
*listener
)
2819 struct media_query_list
*media_query_list
= impl_from_IWineMSHTMLMediaQueryList(iface
);
2820 struct media_query_list_listener
*entry
;
2822 TRACE("(%p)->(%s)\n", media_query_list
, debugstr_variant(listener
));
2824 if(V_VT(listener
) != VT_DISPATCH
|| !V_DISPATCH(listener
))
2827 LIST_FOR_EACH_ENTRY(entry
, &media_query_list
->listeners
, struct media_query_list_listener
, entry
) {
2828 if(entry
->function
== V_DISPATCH(listener
)) {
2829 list_remove(&entry
->entry
);
2830 IDispatch_Release(entry
->function
);
2839 static const IWineMSHTMLMediaQueryListVtbl media_query_list_vtbl
= {
2840 media_query_list_QueryInterface
,
2841 media_query_list_AddRef
,
2842 media_query_list_Release
,
2843 media_query_list_GetTypeInfoCount
,
2844 media_query_list_GetTypeInfo
,
2845 media_query_list_GetIDsOfNames
,
2846 media_query_list_Invoke
,
2847 media_query_list_get_media
,
2848 media_query_list_get_matches
,
2849 media_query_list_addListener
,
2850 media_query_list_removeListener
2853 static inline struct media_query_list_callback
*impl_from_nsIDOMMediaQueryListListener(nsIDOMMediaQueryListListener
*iface
)
2855 return CONTAINING_RECORD(iface
, struct media_query_list_callback
, nsIDOMMediaQueryListListener_iface
);
2858 static nsresult NSAPI
media_query_list_callback_QueryInterface(nsIDOMMediaQueryListListener
*iface
,
2859 nsIIDRef riid
, void **result
)
2861 struct media_query_list_callback
*callback
= impl_from_nsIDOMMediaQueryListListener(iface
);
2863 if(IsEqualGUID(&IID_nsISupports
, riid
) || IsEqualGUID(&IID_nsIDOMMediaQueryListListener
, riid
)) {
2864 *result
= &callback
->nsIDOMMediaQueryListListener_iface
;
2867 return NS_NOINTERFACE
;
2870 nsIDOMMediaQueryListListener_AddRef(&callback
->nsIDOMMediaQueryListListener_iface
);
2874 static nsrefcnt NSAPI
media_query_list_callback_AddRef(nsIDOMMediaQueryListListener
*iface
)
2876 struct media_query_list_callback
*callback
= impl_from_nsIDOMMediaQueryListListener(iface
);
2877 LONG ref
= InterlockedIncrement(&callback
->ref
);
2879 TRACE("(%p) ref=%ld\n", callback
, ref
);
2884 static nsrefcnt NSAPI
media_query_list_callback_Release(nsIDOMMediaQueryListListener
*iface
)
2886 struct media_query_list_callback
*callback
= impl_from_nsIDOMMediaQueryListListener(iface
);
2887 LONG ref
= InterlockedDecrement(&callback
->ref
);
2889 TRACE("(%p) ref=%ld\n", callback
, ref
);
2896 static nsresult NSAPI
media_query_list_callback_HandleChange(nsIDOMMediaQueryListListener
*iface
, nsIDOMMediaQueryList
*mql
)
2898 struct media_query_list_callback
*callback
= impl_from_nsIDOMMediaQueryListListener(iface
);
2899 IDispatch
*listener_funcs_buf
[4], **listener_funcs
= listener_funcs_buf
;
2900 struct media_query_list
*media_query_list
= callback
->media_query_list
;
2901 struct media_query_list_listener
*listener
;
2902 unsigned cnt
, i
= 0;
2906 if(!media_query_list
)
2909 cnt
= list_count(&media_query_list
->listeners
);
2910 if(cnt
> ARRAY_SIZE(listener_funcs_buf
) && !(listener_funcs
= malloc(cnt
* sizeof(*listener_funcs
))))
2911 return NS_ERROR_OUT_OF_MEMORY
;
2913 LIST_FOR_EACH_ENTRY(listener
, &media_query_list
->listeners
, struct media_query_list_listener
, entry
) {
2914 listener_funcs
[i
] = listener
->function
;
2915 IDispatch_AddRef(listener_funcs
[i
++]);
2918 for(i
= 0; i
< cnt
; i
++) {
2919 DISPPARAMS dp
= { args
, NULL
, 1, 0 };
2921 V_VT(args
) = VT_DISPATCH
;
2922 V_DISPATCH(args
) = (IDispatch
*)&media_query_list
->dispex
.IDispatchEx_iface
;
2923 V_VT(&v
) = VT_EMPTY
;
2925 TRACE("%p >>>\n", media_query_list
);
2926 hres
= call_disp_func(listener_funcs
[i
], &dp
, &v
);
2928 TRACE("%p <<< %s\n", media_query_list
, debugstr_variant(&v
));
2931 WARN("%p <<< %08lx\n", media_query_list
, hres
);
2933 IDispatch_Release(listener_funcs
[i
]);
2936 if(listener_funcs
!= listener_funcs_buf
)
2937 free(listener_funcs
);
2941 static const nsIDOMMediaQueryListListenerVtbl media_query_list_callback_vtbl
= {
2942 media_query_list_callback_QueryInterface
,
2943 media_query_list_callback_AddRef
,
2944 media_query_list_callback_Release
,
2945 media_query_list_callback_HandleChange
2948 static const tid_t media_query_list_iface_tids
[] = {
2949 IWineMSHTMLMediaQueryList_tid
,
2952 static dispex_static_data_t media_query_list_dispex
= {
2955 IWineMSHTMLMediaQueryList_tid
,
2956 media_query_list_iface_tids
2959 HRESULT
create_media_query_list(HTMLWindow
*window
, BSTR media_query
, IDispatch
**ret
)
2961 struct media_query_list
*media_query_list
;
2966 if(!media_query
|| !media_query
[0])
2967 return E_INVALIDARG
;
2969 if(!(media_query_list
= malloc(sizeof(*media_query_list
))))
2970 return E_OUTOFMEMORY
;
2972 if(!(media_query_list
->callback
= malloc(sizeof(*media_query_list
->callback
)))) {
2973 free(media_query_list
);
2974 return E_OUTOFMEMORY
;
2976 media_query_list
->callback
->nsIDOMMediaQueryListListener_iface
.lpVtbl
= &media_query_list_callback_vtbl
;
2977 media_query_list
->callback
->media_query_list
= media_query_list
;
2978 media_query_list
->callback
->ref
= 1;
2980 nsAString_InitDepend(&nsstr
, media_query
);
2981 nsres
= nsIDOMWindow_MatchMedia(window
->outer_window
->nswindow
, &nsstr
, &nsunk
);
2982 nsAString_Finish(&nsstr
);
2983 if(NS_FAILED(nsres
)) {
2984 free(media_query_list
->callback
);
2985 free(media_query_list
);
2986 return map_nsresult(nsres
);
2988 nsres
= nsISupports_QueryInterface(nsunk
, &IID_nsIDOMMediaQueryList
, (void**)&media_query_list
->nsquerylist
);
2989 assert(NS_SUCCEEDED(nsres
));
2990 nsISupports_Release(nsunk
);
2992 nsres
= nsIDOMMediaQueryList_SetListener(media_query_list
->nsquerylist
, &media_query_list
->callback
->nsIDOMMediaQueryListListener_iface
);
2993 assert(NS_SUCCEEDED(nsres
));
2995 media_query_list
->IWineMSHTMLMediaQueryList_iface
.lpVtbl
= &media_query_list_vtbl
;
2996 media_query_list
->ref
= 1;
2997 list_init(&media_query_list
->listeners
);
2998 init_dispatch(&media_query_list
->dispex
, (IUnknown
*)&media_query_list
->IWineMSHTMLMediaQueryList_iface
,
2999 &media_query_list_dispex
, dispex_compat_mode(&window
->inner_window
->event_target
.dispex
));
3001 *ret
= (IDispatch
*)&media_query_list
->IWineMSHTMLMediaQueryList_iface
;