mshtml: Added open and close implementation.
This commit is contained in:
parent
f27386fb81
commit
50393191a1
|
@ -815,17 +815,54 @@ static HRESULT WINAPI HTMLDocument_open(IHTMLDocument2 *iface, BSTR url, VARIANT
|
||||||
VARIANT features, VARIANT replace, IDispatch **pomWindowResult)
|
VARIANT features, VARIANT replace, IDispatch **pomWindowResult)
|
||||||
{
|
{
|
||||||
HTMLDocument *This = HTMLDOC_THIS(iface);
|
HTMLDocument *This = HTMLDOC_THIS(iface);
|
||||||
FIXME("(%p)->(%s %p)\n", This, debugstr_w(url), pomWindowResult);
|
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;
|
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)
|
static HRESULT WINAPI HTMLDocument_close(IHTMLDocument2 *iface)
|
||||||
{
|
{
|
||||||
HTMLDocument *This = HTMLDOC_THIS(iface);
|
HTMLDocument *This = HTMLDOC_THIS(iface);
|
||||||
FIXME("(%p)\n", This);
|
nsresult nsres;
|
||||||
|
|
||||||
|
TRACE("(%p)\n", This);
|
||||||
|
|
||||||
|
if(!This->nsdoc) {
|
||||||
|
ERR("!nsdoc\n");
|
||||||
return E_NOTIMPL;
|
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)
|
static HRESULT WINAPI HTMLDocument_clear(IHTMLDocument2 *iface)
|
||||||
{
|
{
|
||||||
HTMLDocument *This = HTMLDOC_THIS(iface);
|
HTMLDocument *This = HTMLDOC_THIS(iface);
|
||||||
|
|
|
@ -387,6 +387,21 @@ static BSTR a2bstr(const char *str)
|
||||||
return ret;
|
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)
|
static IHTMLDocument2 *create_document(void)
|
||||||
{
|
{
|
||||||
IHTMLDocument2 *doc;
|
IHTMLDocument2 *doc;
|
||||||
|
@ -2630,13 +2645,48 @@ static void test_table_elem(IHTMLElement *elem)
|
||||||
IHTMLTable_Release(table);
|
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)
|
static void test_iframe_elem(IHTMLElement *elem)
|
||||||
{
|
{
|
||||||
|
IHTMLElementCollection *col;
|
||||||
IHTMLDocument2 *content_doc;
|
IHTMLDocument2 *content_doc;
|
||||||
IHTMLWindow2 *content_window;
|
IHTMLWindow2 *content_window;
|
||||||
IHTMLFrameBase2 *base2;
|
IHTMLFrameBase2 *base2;
|
||||||
|
IDispatch *disp;
|
||||||
|
VARIANT errv;
|
||||||
|
BSTR str;
|
||||||
HRESULT hres;
|
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);
|
hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLFrameBase2, (void**)&base2);
|
||||||
ok(hres == S_OK, "Could not get IHTMFrameBase2 iface: %08x\n", hres);
|
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(hres == S_OK, "get_document failed: %08x\n", hres);
|
||||||
ok(content_doc != NULL, "content_doc = NULL\n");
|
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);
|
IHTMLDocument2_Release(content_doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue