Commit a2ac4d23 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

mshtml: Added IDispatchEx support to HTMLLocation object.

parent cd31fd39
...@@ -106,6 +106,7 @@ static REFIID tid_ids[] = { ...@@ -106,6 +106,7 @@ static REFIID tid_ids[] = {
&IID_IHTMLGenericElement, &IID_IHTMLGenericElement,
&IID_IHTMLImgElement, &IID_IHTMLImgElement,
&IID_IHTMLInputElement, &IID_IHTMLInputElement,
&IID_IHTMLLocation,
&IID_IHTMLOptionElement, &IID_IHTMLOptionElement,
&IID_IHTMLSelectElement, &IID_IHTMLSelectElement,
&IID_IHTMLStyle, &IID_IHTMLStyle,
......
...@@ -43,12 +43,11 @@ static HRESULT WINAPI HTMLLocation_QueryInterface(IHTMLLocation *iface, REFIID r ...@@ -43,12 +43,11 @@ static HRESULT WINAPI HTMLLocation_QueryInterface(IHTMLLocation *iface, REFIID r
if(IsEqualGUID(&IID_IUnknown, riid)) { if(IsEqualGUID(&IID_IUnknown, riid)) {
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
*ppv = HTMLLOCATION(This); *ppv = HTMLLOCATION(This);
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
*ppv = HTMLLOCATION(This);
}else if(IsEqualGUID(&IID_IHTMLLocation, riid)) { }else if(IsEqualGUID(&IID_IHTMLLocation, riid)) {
TRACE("(%p)->(IID_IHTMLLocation %p)\n", This, ppv); TRACE("(%p)->(IID_IHTMLLocation %p)\n", This, ppv);
*ppv = HTMLLOCATION(This); *ppv = HTMLLOCATION(This);
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
return *ppv ? S_OK : E_NOINTERFACE;
} }
if(*ppv) { if(*ppv) {
...@@ -293,6 +292,18 @@ static const IHTMLLocationVtbl HTMLLocationVtbl = { ...@@ -293,6 +292,18 @@ static const IHTMLLocationVtbl HTMLLocationVtbl = {
HTMLLocation_toString HTMLLocation_toString
}; };
static const tid_t HTMLLocation_iface_tids[] = {
IHTMLLocation_tid,
0
};
static dispex_static_data_t HTMLLocation_dispex = {
NULL,
IHTMLLocation_tid,
NULL,
HTMLLocation_iface_tids
};
HTMLLocation *HTMLLocation_Create(HTMLDocument *doc) HTMLLocation *HTMLLocation_Create(HTMLDocument *doc)
{ {
HTMLLocation *ret = heap_alloc(sizeof(*ret)); HTMLLocation *ret = heap_alloc(sizeof(*ret));
...@@ -301,5 +312,7 @@ HTMLLocation *HTMLLocation_Create(HTMLDocument *doc) ...@@ -301,5 +312,7 @@ HTMLLocation *HTMLLocation_Create(HTMLDocument *doc)
ret->ref = 1; ret->ref = 1;
ret->doc = doc; ret->doc = doc;
init_dispex(&ret->dispex, (IUnknown*)HTMLLOCATION(ret), &HTMLLocation_dispex);
return ret; return ret;
} }
...@@ -102,6 +102,7 @@ typedef enum { ...@@ -102,6 +102,7 @@ typedef enum {
IHTMLGenericElement_tid, IHTMLGenericElement_tid,
IHTMLImgElement_tid, IHTMLImgElement_tid,
IHTMLInputElement_tid, IHTMLInputElement_tid,
IHTMLLocation_tid,
IHTMLOptionElement_tid, IHTMLOptionElement_tid,
IHTMLSelectElement_tid, IHTMLSelectElement_tid,
IHTMLStyle_tid, IHTMLStyle_tid,
...@@ -199,6 +200,7 @@ struct ConnectionPoint { ...@@ -199,6 +200,7 @@ struct ConnectionPoint {
}; };
typedef struct { typedef struct {
DispatchEx dispex;
const IHTMLLocationVtbl *lpHTMLLocationVtbl; const IHTMLLocationVtbl *lpHTMLLocationVtbl;
LONG ref; LONG ref;
......
...@@ -2207,6 +2207,7 @@ static void test_location(IHTMLDocument2 *doc) ...@@ -2207,6 +2207,7 @@ static void test_location(IHTMLDocument2 *doc)
IHTMLLocation_Release(location2); IHTMLLocation_Release(location2);
test_ifaces((IUnknown*)location, location_iids); test_ifaces((IUnknown*)location, location_iids);
test_disp((IUnknown*)location, &IID_IHTMLLocation);
ref = IHTMLLocation_Release(location); ref = IHTMLLocation_Release(location);
ok(!ref, "location chould be destroyed here\n"); ok(!ref, "location chould be destroyed here\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment