mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-04 19:48:03 +00:00
mshtml: Implement url
prop for StorageEvent objs.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
This commit is contained in:
parent
cfefbb8f45
commit
79a2fb719f
|
@ -346,6 +346,20 @@ static DOMUIEvent *DOMUIEvent_from_DOMEvent(DOMEvent *event)
|
|||
return CONTAINING_RECORD(event, DOMUIEvent, event);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
DOMEvent event;
|
||||
IDOMStorageEvent IDOMStorageEvent_iface;
|
||||
BSTR key;
|
||||
BSTR old_value;
|
||||
BSTR new_value;
|
||||
BSTR url;
|
||||
} DOMStorageEvent;
|
||||
|
||||
static DOMStorageEvent *DOMStorageEvent_from_DOMEvent(DOMEvent *event)
|
||||
{
|
||||
return CONTAINING_RECORD(event, DOMStorageEvent, event);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
DispatchEx dispex;
|
||||
IHTMLEventObj IHTMLEventObj_iface;
|
||||
|
@ -1765,20 +1779,44 @@ static HRESULT WINAPI HTMLEventObj5_Invoke(IHTMLEventObj5 *iface, DISPID dispIdM
|
|||
static HRESULT WINAPI HTMLEventObj5_put_url(IHTMLEventObj5 *iface, BSTR v)
|
||||
{
|
||||
HTMLEventObj *This = impl_from_IHTMLEventObj5(iface);
|
||||
IDOMStorageEvent *storage_event;
|
||||
DOMStorageEvent *p;
|
||||
BSTR url;
|
||||
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
return DISP_E_MEMBERNOTFOUND;
|
||||
if(!v)
|
||||
return E_POINTER;
|
||||
|
||||
if(!This->event || FAILED(IDOMEvent_QueryInterface(&This->event->IDOMEvent_iface, &IID_IDOMStorageEvent, (void**)&storage_event)))
|
||||
return DISP_E_MEMBERNOTFOUND;
|
||||
IDOMStorageEvent_Release(storage_event);
|
||||
|
||||
if(!(url = SysAllocString(v)))
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
p = DOMStorageEvent_from_DOMEvent(This->event);
|
||||
SysFreeString(p->url);
|
||||
p->url = url;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj5_get_url(IHTMLEventObj5 *iface, BSTR *p)
|
||||
{
|
||||
HTMLEventObj *This = impl_from_IHTMLEventObj5(iface);
|
||||
IDOMStorageEvent *storage_event;
|
||||
HRESULT hres;
|
||||
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
*p = NULL;
|
||||
return S_OK;
|
||||
if(!This->event || FAILED(IDOMEvent_QueryInterface(&This->event->IDOMEvent_iface, &IID_IDOMStorageEvent, (void**)&storage_event))) {
|
||||
*p = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
hres = IDOMStorageEvent_get_url(storage_event, p);
|
||||
IDOMStorageEvent_Release(storage_event);
|
||||
return hres;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj5_put_data(IHTMLEventObj5 *iface, BSTR v)
|
||||
|
@ -3954,15 +3992,6 @@ static void DOMProgressEvent_unlink(DispatchEx *dispex)
|
|||
unlink_ref(&This->nsevent);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
DOMEvent event;
|
||||
IDOMStorageEvent IDOMStorageEvent_iface;
|
||||
BSTR key;
|
||||
BSTR old_value;
|
||||
BSTR new_value;
|
||||
BSTR url;
|
||||
} DOMStorageEvent;
|
||||
|
||||
static inline DOMStorageEvent *impl_from_IDOMStorageEvent(IDOMStorageEvent *iface)
|
||||
{
|
||||
return CONTAINING_RECORD(iface, DOMStorageEvent, IDOMStorageEvent_iface);
|
||||
|
@ -4097,11 +4126,6 @@ static const IDOMStorageEventVtbl DOMStorageEventVtbl = {
|
|||
DOMStorageEvent_initStorageEvent
|
||||
};
|
||||
|
||||
static DOMStorageEvent *DOMStorageEvent_from_DOMEvent(DOMEvent *event)
|
||||
{
|
||||
return CONTAINING_RECORD(event, DOMStorageEvent, event);
|
||||
}
|
||||
|
||||
static void *DOMStorageEvent_query_interface(DispatchEx *dispex, REFIID riid)
|
||||
{
|
||||
DOMStorageEvent *storage_event = DOMStorageEvent_from_DOMEvent(DOMEvent_from_DispatchEx(dispex));
|
||||
|
|
|
@ -3872,9 +3872,11 @@ static void test_storage_event(DISPPARAMS *params, BOOL doc_onstorage)
|
|||
{
|
||||
const WCHAR *expect_key = onstorage_expect_key, *expect_old_value = onstorage_expect_old_value, *expect_new_value = onstorage_expect_new_value;
|
||||
unsigned line = onstorage_expect_line;
|
||||
IHTMLEventObj5 *event_obj5;
|
||||
IHTMLEventObj *event_obj;
|
||||
IDOMStorageEvent *event;
|
||||
IDispatchEx *dispex;
|
||||
IDispatch *disp;
|
||||
HRESULT hres;
|
||||
unsigned i;
|
||||
DISPID id;
|
||||
|
@ -3898,6 +3900,8 @@ static void test_storage_event(DISPPARAMS *params, BOOL doc_onstorage)
|
|||
|
||||
hres = IDispatchEx_QueryInterface(dispex, &IID_IHTMLEventObj, (void**)&event_obj);
|
||||
ok_(__FILE__,line)(hres == S_OK, "Could not get IHTMLEventObj: %08lx\n", hres);
|
||||
hres = IHTMLEventObj_QueryInterface(event_obj, &IID_IHTMLEventObj5, (void**)&event_obj5);
|
||||
ok_(__FILE__,line)(hres == S_OK, "Could not get IHTMLEventObj5: %08lx\n", hres);
|
||||
IHTMLEventObj_Release(event_obj);
|
||||
|
||||
for(i = 0; i < ARRAY_SIZE(props); i++) {
|
||||
|
@ -3906,8 +3910,39 @@ static void test_storage_event(DISPPARAMS *params, BOOL doc_onstorage)
|
|||
ok_(__FILE__,line)(hres == DISP_E_UNKNOWNNAME, "GetDispID(%s) failed: %08lx\n", wine_dbgstr_w(bstr), hres);
|
||||
SysFreeString(bstr);
|
||||
}
|
||||
|
||||
IDispatchEx_Release(dispex);
|
||||
|
||||
hres = IHTMLEventObj5_get_data(event_obj5, &bstr);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_data failed: %08lx\n", hres);
|
||||
ok_(__FILE__,line)(!bstr, "data = %s\n", wine_dbgstr_w(bstr));
|
||||
|
||||
hres = IHTMLEventObj5_get_origin(event_obj5, &bstr);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_origin failed: %08lx\n", hres);
|
||||
ok_(__FILE__,line)(!bstr, "origin = %s\n", wine_dbgstr_w(bstr));
|
||||
|
||||
hres = IHTMLEventObj5_get_source(event_obj5, &disp);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_source failed: %08lx\n", hres);
|
||||
ok_(__FILE__,line)(!disp, "source != NULL\n");
|
||||
|
||||
hres = IHTMLEventObj5_get_url(event_obj5, &bstr);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_url failed: %08lx\n", hres);
|
||||
ok_(__FILE__,line)(!wcscmp(bstr, L"http://winetest.example.org/"), "url = %s\n", wine_dbgstr_w(bstr));
|
||||
SysFreeString(bstr);
|
||||
|
||||
bstr = SysAllocString(L"barfoo");
|
||||
hres = IHTMLEventObj5_put_url(event_obj5, bstr);
|
||||
ok_(__FILE__,line)(hres == S_OK, "put_url failed: %08lx\n", hres);
|
||||
SysFreeString(bstr);
|
||||
|
||||
hres = IHTMLEventObj5_get_url(event_obj5, &bstr);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_url after put failed: %08lx\n", hres);
|
||||
ok_(__FILE__,line)(!wcscmp(bstr, L"barfoo"), "url after put = %s\n", wine_dbgstr_w(bstr));
|
||||
SysFreeString(bstr);
|
||||
|
||||
hres = IHTMLEventObj5_put_url(event_obj5, NULL);
|
||||
ok_(__FILE__,line)(hres == E_POINTER, "put_url NULL returned: %08lx\n", hres);
|
||||
|
||||
IHTMLEventObj5_Release(event_obj5);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue