mshtml: Added open and close implementation.
This commit is contained in:
parent
f27386fb81
commit
50393191a1
|
@ -815,15 +815,52 @@ static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT
|
|||
VARIANT features, VARIANT replace, IDispatch **pomWindowResult)
|
||||
{
|
||||
HTMLDocument *This = HTMLDOC_THIS(iface);
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_w(url), pomWindowResult);
|
||||
return E_NOTIMPL;
|
||||
nsresult nsres;
|
||||
|
||||
static const WCHAR text_htmlW[] = {'t','e','x','t','/','h','t','m','l',0};
|
||||
|
||||
TRACE("(%p)->(%s %s %s %s %p)\n", This, debugstr_w(url), debugstr_variant(&name),
|
||||
debugstr_variant(&features), debugstr_variant(&replace), pomWindowResult);
|
||||
|
||||
if(!This->nsdoc) {
|
||||
ERR("!nsdoc\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
if(!url || strcmpW(url, text_htmlW) || V_VT(&name) != VT_ERROR
|
||||
|| V_VT(&features) != VT_ERROR || V_VT(&replace) != VT_ERROR)
|
||||
FIXME("unsupported args\n");
|
||||
|
||||
nsres = nsIDOMHTMLDocument_Open(This->nsdoc);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Open failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
*pomWindowResult = (IDispatch*)HTMLWINDOW2(This->window);
|
||||
IHTMLWindow2_AddRef(HTMLWINDOW2(This->window));
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDocument_close(IHTMLDocument2 *iface)
|
||||
{
|
||||
HTMLDocument *This = HTMLDOC_THIS(iface);
|
||||
FIXME("(%p)\n", This);
|
||||
return E_NOTIMPL;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)\n", This);
|
||||
|
||||
if(!This->nsdoc) {
|
||||
ERR("!nsdoc\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMHTMLDocument_Close(This->nsdoc);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Close failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDocument_clear(IHTMLDocument2 *iface)
|
||||
|
|
|
@ -387,6 +387,21 @@ static BSTR a2bstr(const char *str)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
|
||||
{
|
||||
IUnknown *unk1, *unk2;
|
||||
|
||||
if(iface1 == iface2)
|
||||
return TRUE;
|
||||
|
||||
IUnknown_QueryInterface(iface1, &IID_IUnknown, (void**)&unk1);
|
||||
IUnknown_Release(unk1);
|
||||
IUnknown_QueryInterface(iface1, &IID_IUnknown, (void**)&unk2);
|
||||
IUnknown_Release(unk2);
|
||||
|
||||
return unk1 == unk2;
|
||||
}
|
||||
|
||||
static IHTMLDocument2 *create_document(void)
|
||||
{
|
||||
IHTMLDocument2 *doc;
|
||||
|
@ -2630,13 +2645,48 @@ static void test_table_elem(IHTMLElement *elem)
|
|||
IHTMLTable_Release(table);
|
||||
}
|
||||
|
||||
static void doc_write(IHTMLDocument2 *doc, const char *text)
|
||||
{
|
||||
SAFEARRAYBOUND dim;
|
||||
SAFEARRAY *sa;
|
||||
VARIANT *var;
|
||||
BSTR str;
|
||||
HRESULT hres;
|
||||
|
||||
dim.lLbound = 0;
|
||||
dim.cElements = 1;
|
||||
sa = SafeArrayCreate(VT_VARIANT, 1, &dim);
|
||||
SafeArrayAccessData(sa, (void**)&var);
|
||||
V_VT(var) = VT_BSTR;
|
||||
V_BSTR(var) = str = a2bstr(text);
|
||||
SafeArrayUnaccessData(sa);
|
||||
|
||||
hres = IHTMLDocument2_write(doc, sa);
|
||||
ok(hres == S_OK, "write failed: %08x\n", hres);
|
||||
|
||||
SysFreeString(str);
|
||||
SafeArrayDestroy(sa);
|
||||
}
|
||||
|
||||
static void test_iframe_elem(IHTMLElement *elem)
|
||||
{
|
||||
IHTMLElementCollection *col;
|
||||
IHTMLDocument2 *content_doc;
|
||||
IHTMLWindow2 *content_window;
|
||||
IHTMLFrameBase2 *base2;
|
||||
IDispatch *disp;
|
||||
VARIANT errv;
|
||||
BSTR str;
|
||||
HRESULT hres;
|
||||
|
||||
static const elem_type_t all_types[] = {
|
||||
ET_HTML,
|
||||
ET_HEAD,
|
||||
ET_TITLE,
|
||||
ET_BODY,
|
||||
ET_BR
|
||||
};
|
||||
|
||||
hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLFrameBase2, (void**)&base2);
|
||||
ok(hres == S_OK, "Could not get IHTMFrameBase2 iface: %08x\n", hres);
|
||||
|
||||
|
@ -2652,6 +2702,26 @@ static void test_iframe_elem(IHTMLElement *elem)
|
|||
ok(hres == S_OK, "get_document failed: %08x\n", hres);
|
||||
ok(content_doc != NULL, "content_doc = NULL\n");
|
||||
|
||||
str = a2bstr("text/html");
|
||||
V_VT(&errv) = VT_ERROR;
|
||||
disp = NULL;
|
||||
hres = IHTMLDocument2_open(content_doc, str, errv, errv, errv, &disp);
|
||||
SysFreeString(str);
|
||||
ok(hres == S_OK, "open failed: %08x\n", hres);
|
||||
ok(disp != NULL, "disp == NULL\n");
|
||||
ok(iface_cmp((IUnknown*)disp, (IUnknown*)content_window), "disp != content_window\n");
|
||||
IDispatch_Release(disp);
|
||||
|
||||
doc_write(content_doc, "<html><head><title>test</title></head><body><br /></body></html>");
|
||||
|
||||
hres = IHTMLDocument2_get_all(content_doc, &col);
|
||||
ok(hres == S_OK, "get_all failed: %08x\n", hres);
|
||||
test_elem_collection((IUnknown*)col, all_types, sizeof(all_types)/sizeof(all_types[0]));
|
||||
IHTMLElementCollection_Release(col);
|
||||
|
||||
hres = IHTMLDocument2_close(content_doc);
|
||||
ok(hres == S_OK, "close failed: %08x\n", hres);
|
||||
|
||||
IHTMLDocument2_Release(content_doc);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue