* Sync with Wine 1.7.17.
CORE-8080
svn path=/trunk/; revision=63005
list(APPEND mshtml_winetest_rc_deps
${CMAKE_CURRENT_BINARY_DIR}/test_tlb.tlb
+ ${CMAKE_CURRENT_SOURCE_DIR}/blank.html
${CMAKE_CURRENT_SOURCE_DIR}/exectest.html
${CMAKE_CURRENT_SOURCE_DIR}/jstest.html
+ ${CMAKE_CURRENT_SOURCE_DIR}/nav_test.html
${CMAKE_CURRENT_SOURCE_DIR}/vbtest.html
${CMAKE_CURRENT_SOURCE_DIR}/events.html
${CMAKE_CURRENT_SOURCE_DIR}/externscr.js)
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS "${mshtml_winetest_rc_deps}")
-target_link_libraries(mshtml_winetest wine uuid strmiids)
+target_link_libraries(mshtml_winetest uuid strmiids)
set_module_type(mshtml_winetest win32cui)
-add_importlibs(mshtml_winetest wininet ole32 oleaut32 user32 gdi32 urlmon advapi32 msvcrt kernel32 ntdll)
+add_importlibs(mshtml_winetest wininet ole32 oleaut32 user32 gdi32 urlmon advapi32 msvcrt kernel32)
add_dependencies(mshtml_winetest test_tlb_header stdole2)
add_cd_file(TARGET mshtml_winetest DESTINATION reactos/bin FOR all)
static HWND container_hwnd, plugin_hwnd;
static int plugin_behavior;
static BOOL no_quickact;
+static LONG activex_refcnt;
#define TESTACTIVEX_CLSID "{178fc163-f585-4e24-9c13-4bb7f6680746}"
NULL
};
-static const char *debugstr_guid(REFIID riid)
-{
- static char buf[50];
-
- sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
- riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
- riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
- riid->Data4[5], riid->Data4[6], riid->Data4[7]);
-
- return buf;
-}
-
static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2)
{
IUnknown *unk1, *unk2;
for(piid = iids; *piid; piid++) {
hres = IUnknown_QueryInterface(iface, *piid, (void**)&unk);
- ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", debugstr_guid(*piid), hres);
+ ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", wine_dbgstr_guid(*piid), hres);
if(SUCCEEDED(hres))
IUnknown_Release(unk);
}
}
}
- return DefWindowProc(hwnd, msg, wParam, lParam);
+ return DefWindowProcW(hwnd, msg, wParam, lParam);
}
static void create_plugin_window(HWND parent, const RECT *rect)
static HRESULT WINAPI ConnectionPoint_QueryInterface(IConnectionPoint *iface, REFIID riid, void **ppv)
{
- ok(0, "unexpected QI call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected QI call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI OleControl_Release(IOleControl *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
static ULONG WINAPI QuickActivate_AddRef(IQuickActivate *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI QuickActivate_Release(IQuickActivate *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI QuickActivate_QuickActivate(IQuickActivate *iface, QACONTAINER *container, QACONTROL *control)
static ULONG WINAPI PersistPropertyBag_AddRef(IPersistPropertyBag *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI PersistPropertyBag_Release(IPersistPropertyBag *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI PersistPropertyBag_GetClassID(IPersistPropertyBag *face, CLSID *pClassID)
static ULONG WINAPI Dispatch_AddRef(IDispatch *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI Dispatch_Release(IDispatch *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI Dispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
static HRESULT WINAPI Dispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames,
UINT cNames, LCID lcid, DISPID *rgDispId)
{
- ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", wine_dbgstr_guid(riid));
ok(cNames == 1, "cNames = %d\n", cNames);
ok(rgszNames != NULL, "rgszNames == NULL\n");
ok(rgDispId != NULL, "rgDispId == NULL\n");
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
- ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(riid, &IID_NULL), "riid = %s\n", wine_dbgstr_guid(riid));
ok(pDispParams != NULL, "pDispParams == NULL\n");
ok(!pDispParams->cNamedArgs, "pDispParams->cNamedArgs = %d\n", pDispParams->cNamedArgs);
ok(!pDispParams->rgdispidNamedArgs, "pDispParams->rgdispidNamedArgs != NULL\n");
static ULONG WINAPI ProvideClassInfo_AddRef(IProvideClassInfo *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI ProvideClassInfo_Release(IProvideClassInfo *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI ProvideClassInfo_GetClassInfo(IProvideClassInfo *iface, ITypeInfo **ppTI)
static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface,
}
CHECK_EXPECT(FindConnectionPoint);
- ok(IsEqualGUID(riid, &DIID_DispActiveXTest), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(riid, &DIID_DispActiveXTest), "riid = %s\n", wine_dbgstr_guid(riid));
+ IConnectionPoint_AddRef(&ConnectionPoint);
*ppCP = &ConnectionPoint;
return S_OK;
}
static ULONG WINAPI ViewObjectEx_AddRef(IViewObjectEx *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI ViewObjectEx_Release(IViewObjectEx *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI ViewObjectEx_Draw(IViewObjectEx *iface, DWORD dwDrawAspect, LONG lindex, void *pvAspect, DVTARGETDEVICE *ptd,
static HRESULT WINAPI ViewObjectEx_QueryHitPoint(IViewObjectEx *iface, DWORD dwAspect, LPCRECT pRectBounds, POINT ptlLoc,
LONG lCloseHint, DWORD *pHitResult)
{
- ok(0, "unexpected call\n");
+ trace("QueryHitPoint call ignored\n");
return E_NOTIMPL;
}
static ULONG WINAPI OleObject_AddRef(IOleObject *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI OleObject_Release(IOleObject *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
static ULONG WINAPI OleInPlaceObject_AddRef(IOleInPlaceObjectWindowless *iface)
{
- return 2;
+ return ++activex_refcnt;
}
static ULONG WINAPI OleInPlaceObject_Release(IOleInPlaceObjectWindowless *iface)
{
- return 1;
+ return --activex_refcnt;
}
static HRESULT WINAPI OleInPlaceObject_GetWindow(IOleInPlaceObjectWindowless *iface,
static HRESULT WINAPI OleInPlaceObject_SetObjectRects(IOleInPlaceObjectWindowless *iface,
LPCRECT lprcPosRect, LPCRECT lprcClipRect)
{
- CHECK_EXPECT(SetObjectRects);
+ CHECK_EXPECT2(SetObjectRects);
return S_OK;
}
}else if(IsEqualGUID(riid, &IID_ITestActiveX)) {
CHECK_EXPECT(QI_ITestActiveX);
*ppv = &wrapped_iface;
+ return S_OK;
}else if(IsEqualGUID(riid, &IID_IOleWindow) || IsEqualGUID(riid, &IID_IOleInPlaceObject)
|| IsEqualGUID(&IID_IOleInPlaceObjectWindowless, riid)) {
*ppv = plugin_behavior == TEST_DISPONLY ? NULL : &OleInPlaceObjectWindowless;
}else {
- trace("QI %s\n", debugstr_guid(riid));
+ trace("QI %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
}
- return *ppv ? S_OK : E_NOINTERFACE;
+ if(!*ppv)
+ return E_NOINTERFACE;
+
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
}
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
if(IsEqualGUID(&IID_IClassFactoryEx, riid))
return E_NOINTERFACE; /* TODO */
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOTIMPL;
}
CHECK_EXPECT(CreateInstance);
ok(!outer, "outer = %p\n", outer);
- ok(IsEqualGUID(riid, &IID_IUnknown), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(riid, &IID_IUnknown), "riid = %s\n", wine_dbgstr_guid(riid));
+ activex_refcnt++;
*ppv = &OleControl;
return S_OK;
}
hres = IHTMLObjectElement_put_width(objelem, v);
ok(hres == S_OK, "put_width failed: %08x\n", hres);
CHECK_CALLED(OnAmbientPropertyChange_UNKNOWN);
- CHECK_CALLED(Invoke_ENABLED);
+ CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
hres = IHTMLObjectElement_get_width(objelem, &v);
ok(hres == S_OK, "get_width failed: %08x\n", hres);
hres = IHTMLObjectElement_put_height(objelem, v);
ok(hres == S_OK, "put_height failed: %08x\n", hres);
CHECK_CALLED(OnAmbientPropertyChange_UNKNOWN);
- CHECK_CALLED(Invoke_ENABLED);
+ CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
hres = IHTMLObjectElement_get_height(objelem, &v);
ok(hres == S_OK, "get_height failed: %08x\n", hres);
ok(hres == S_OK, "QueryService(CLSID_TestActiveX) failed: %08x\n", hres);
ok(unk == (IUnknown*)&OleObject, "unexpected unk %p\n", unk);
CHECK_CALLED(QueryService_TestActiveX);
+ IUnknown_Release(unk);
IServiceProvider_Release(serv_prov);
SET_EXPECT(Invoke_ENABLED);
hres = IOleInPlaceSite_OnUIActivate(ip_site);
ok(hres == S_OK, "OnUIActivate failed: %08x\n", hres);
- CHECK_CALLED(Invoke_ENABLED);
+ CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
IOleInPlaceSite_Release(ip_site);
}
static const GUID undocumented_frame_iid = {0xfbece6c9,0x48d7,0x4a37,{0x8f,0xe3,0x6a,0xd4,0x27,0x2f,0xdd,0xac}};
if(!IsEqualGUID(&undocumented_frame_iid, riid))
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
{
if(IsEqualGUID(&CLSID_TestActiveX, guidService)) {
CHECK_EXPECT(QueryService_TestActiveX);
- ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IUnknown, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = &OleObject;
return S_OK;
}
doc_load_string(doc, str);
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
- while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
+ while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
return doc;
DestroyWindow(plugin_hwnd);
plugin_hwnd = NULL;
}
+
+ ok(!activex_refcnt, "activex_refcnt = %d\n", activex_refcnt);
}
static void init_test(int behavior)
{
plugin_behavior = behavior;
+ activex_refcnt = 0;
no_quickact = behavior == TEST_NOQUICKACT || behavior == TEST_DISPONLY;
}
static void test_flash_ax(void)
{
IHTMLDocument2 *doc;
+ IOleClientSite *cs;
init_test(TEST_FLASH);
skip("Skipping test_object_elem(notif_doc). ROSTESTS-114.\n");
}
+ IOleClientSite_AddRef(client_site);
+ cs = client_site;
+
SET_EXPECT(UIDeactivate);
SET_EXPECT(Invoke_ENABLED);
SET_EXPECT(Invoke_VALID);
SET_EXPECT(SetClientSite_NULL);
release_doc(doc);
CHECK_CALLED(UIDeactivate);
- todo_wine
- CHECK_CALLED(Invoke_ENABLED);
+ CLEAR_CALLED(Invoke_ENABLED); /* Not called on IE10 */
todo_wine
CHECK_CALLED(Invoke_VALID);
CHECK_CALLED(InPlaceDeactivate);
CHECK_CALLED(Close);
CHECK_CALLED(SetClientSite_NULL);
+
+ IOleClientSite_Release(cs);
}
static void test_noquickact_ax(void)
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- return DefWindowProc(hwnd, msg, wParam, lParam);
+ return DefWindowProcW(hwnd, msg, wParam, lParam);
}
static HWND create_container_window(void)
DWORD res;
if(!init) {
- RegDeleteKey(HKEY_CLASSES_ROOT, key_name);
+ RegDeleteKeyA(HKEY_CLASSES_ROOT, key_name);
return TRUE;
}
--- /dev/null
+<html></html>
{"BUTTON", button_iids, &DIID_DispHTMLButtonElement}
};
-static const char *dbgstr_guid(REFIID riid)
-{
- static char buf[50];
-
- sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
- riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
- riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
- riid->Data4[5], riid->Data4[6], riid->Data4[7]);
-
- return buf;
-}
-
static int strcmp_wa(LPCWSTR strw, const char *stra)
{
CHAR buf[512];
for(piid = iids; *piid; piid++) {
hres = IUnknown_QueryInterface(iface, *piid, (void**)&unk);
- ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", dbgstr_guid(*piid), hres);
+ ok_(__FILE__,line) (hres == S_OK, "Could not get %s interface: %08x\n", wine_dbgstr_guid(*piid), hres);
if(SUCCEEDED(hres))
IUnknown_Release(unk);
}
IID iid;
if(_test_get_dispid(line, unk, &iid))
- ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", dbgstr_guid(&iid));
+ ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", wine_dbgstr_guid(&iid));
if(val)
_test_disp_value(line, unk, val);
if(_test_get_dispid(line, unk, &iid))
ok_(__FILE__,line) (IsEqualGUID(&iid, diid) || broken(IsEqualGUID(&iid, diid2)),
- "unexpected guid %s\n", dbgstr_guid(&iid));
+ "unexpected guid %s\n", wine_dbgstr_guid(&iid));
if(val)
_test_disp_value(line, unk, val);
if(SUCCEEDED(hres))
{
ok_(__FILE__,line)(IsEqualGUID(&type_attr->guid, &CLSID_HTMLDocument),
- "unexpected guid %s\n", dbgstr_guid(&type_attr->guid));
+ "unexpected guid %s\n", wine_dbgstr_guid(&type_attr->guid));
ok_(__FILE__,line)(type_attr->typekind == TKIND_COCLASS,
"unexpected typekind %d\n", type_attr->typekind);
ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
return elem;
}
+#define get_doc3_iface(u) _get_doc3_iface(__LINE__,u)
+static IHTMLDocument3 *_get_doc3_iface(unsigned line, IHTMLDocument2 *doc)
+{
+ IHTMLDocument3 *doc3;
+ HRESULT hres;
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**)&doc3);
+ ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDocument3 interface: %08x\n", hres);
+
+ return doc3;
+}
+
#define get_node_iface(u) _get_node_iface(__LINE__,u)
static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk)
{
SysFreeString(type);
}
+#define test_select_multiple(s,t) _test_select_multiple(__LINE__,s,t)
+static void _test_select_multiple(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL exmultiple)
+{
+ VARIANT_BOOL b = 100;
+ HRESULT hres;
+
+ hres = IHTMLSelectElement_get_multiple(select, &b);
+ ok_(__FILE__,line) (hres == S_OK, "get_multiple failed: %08x\n", hres);
+ ok_(__FILE__,line) (b == exmultiple, "multiple=%x, expected %x\n", b, exmultiple);
+}
+
+#define test_select_set_multiple(s,v) _test_select_set_multiple(__LINE__,s,v)
+static void _test_select_set_multiple(unsigned line, IHTMLSelectElement *select, VARIANT_BOOL val)
+{
+ HRESULT hres;
+
+ hres = IHTMLSelectElement_put_multiple(select, val);
+ ok_(__FILE__,line) (hres == S_OK, "put_multiple failed: %08x\n", hres);
+
+ _test_select_multiple(line, select, val);
+}
+
#define test_range_text(r,t) _test_range_text(__LINE__,r,t)
static void _test_range_text(unsigned line, IHTMLTxtRange *range, const char *extext)
{
ok(iface_cmp((IUnknown*)disp, (IUnknown*)disp2), "disp != disp2\n");
IDispatch_Release(disp2);
IDispatch_Release(disp);
+
+ test_select_multiple(select, VARIANT_FALSE);
+ test_select_set_multiple(select, VARIANT_TRUE);
}
static void test_form_item(IHTMLElement *elem)
VariantClear(&v);
}
+#define test_body_scroll(a,b) _test_body_scroll(__LINE__,a,b)
+static void _test_body_scroll(unsigned line, IHTMLBodyElement *body, const char *ex)
+{
+ BSTR str;
+ HRESULT hres;
+
+ hres = IHTMLBodyElement_get_scroll(body, &str);
+ ok_(__FILE__,line)(hres == S_OK, "get_scroll failed: %08x\n", hres);
+ ok_(__FILE__,line)(ex ? !strcmp_wa(str, ex) : !str, "scroll = %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+}
+
+#define set_body_scroll(a,b) _set_body_scroll(__LINE__,a,b)
+static void _set_body_scroll(unsigned line, IHTMLBodyElement *body, const char *val)
+{
+ BSTR str = a2bstr(val);
+ HRESULT hres;
+
+ hres = IHTMLBodyElement_put_scroll(body, str);
+ ok_(__FILE__,line)(hres == S_OK, "put_scroll failed: %08x\n", hres);
+ SysFreeString(str);
+
+ _test_body_scroll(line, body, val);
+}
+
static void test_body_funs(IHTMLBodyElement *body)
{
VARIANT vbg, vDefaultbg;
hres = IHTMLBodyElement_put_bgColor(body, vDefaultbg);
ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vDefaultbg);
+
+ test_body_scroll(body, NULL);
+ set_body_scroll(body, "yes");
+ set_body_scroll(body, "no");
+ set_body_scroll(body, "auto");
}
static void test_history(IHTMLWindow2 *window)
IHTMLElementCollection *col;
IHTMLTableRow *row;
HRESULT hres;
+ BSTR bstr;
+ LONG lval;
+ VARIANT vbg, vDefaultbg;
static const elem_type_t cell_types[] = {ET_TD,ET_TD};
test_elem_collection((IUnknown*)col, cell_types, sizeof(cell_types)/sizeof(*cell_types));
IHTMLElementCollection_Release(col);
+ bstr = a2bstr("left");
+ hres = IHTMLTableRow_put_align(row, bstr);
+ ok(hres == S_OK, "set_align failed: %08x\n", hres);
+ SysFreeString(bstr);
+
+ bstr = NULL;
+ hres = IHTMLTableRow_get_align(row, &bstr);
+ ok(hres == S_OK, "get_align failed: %08x\n", hres);
+ ok(bstr != NULL, "get_align returned NULL\n");
+ ok(!strcmp_wa(bstr, "left"), "get_align returned %s\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+
+ bstr = a2bstr("top");
+ hres = IHTMLTableRow_put_vAlign(row, bstr);
+ ok(hres == S_OK, "set_valign failed: %08x\n", hres);
+ SysFreeString(bstr);
+
+ bstr = NULL;
+ hres = IHTMLTableRow_get_vAlign(row, &bstr);
+ ok(hres == S_OK, "get_valign failed: %08x\n", hres);
+ ok(bstr != NULL, "get_valign returned NULL\n");
+ ok(!strcmp_wa(bstr, "top"), "get_valign returned %s\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+
+ lval = 0xdeadbeef;
+ hres = IHTMLTableRow_get_rowIndex(row, &lval);
+ ok(hres == S_OK, "get_rowIndex failed: %08x\n", hres);
+ ok(lval == 1, "get_rowIndex returned %d\n", lval);
+
+ lval = 0xdeadbeef;
+ hres = IHTMLTableRow_get_sectionRowIndex(row, &lval);
+ ok(hres == S_OK, "get_sectionRowIndex failed: %08x\n", hres);
+ ok(lval == 1, "get_sectionRowIndex returned %d\n", lval);
+
+ hres = IHTMLTableRow_get_bgColor(row, &vDefaultbg);
+ ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vDefaultbg) == VT_BSTR, "bstr != NULL\n");
+ ok(!V_BSTR(&vDefaultbg), "V_BSTR(bgColor) = %s\n", wine_dbgstr_w(V_BSTR(&vDefaultbg)));
+
+ V_VT(&vbg) = VT_BSTR;
+ V_BSTR(&vbg) = a2bstr("red");
+ hres = IHTMLTableRow_put_bgColor(row, vbg);
+ ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vbg);
+
+ hres = IHTMLTableRow_get_bgColor(row, &vbg);
+ ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
+ ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
+ VariantClear(&vbg);
+
+ V_VT(&vbg) = VT_I4;
+ V_I4(&vbg) = 0xff0000;
+ hres = IHTMLTableRow_put_bgColor(row, vbg);
+ ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vbg);
+
+ hres = IHTMLTableRow_get_bgColor(row, &vbg);
+ ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
+ ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
+ VariantClear(&vbg);
+
+ /* Restore Originial */
+ hres = IHTMLTableRow_put_bgColor(row, vDefaultbg);
+ ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vDefaultbg);
+
IHTMLTableRow_Release(row);
}
IHTMLDOMNode *node;
VARIANT v;
HRESULT hres;
+ BSTR bstr;
+ VARIANT vbg, vDefaultbg;
static const elem_type_t row_types[] = {ET_TR,ET_TR};
static const elem_type_t all_types[] = {ET_TBODY,ET_TR,ET_TR,ET_TD,ET_TD};
test_table_cell_spacing(table, "11");
VariantClear(&v);
+ bstr = a2bstr("left");
+ hres = IHTMLTable_put_align(table, bstr);
+ ok(hres == S_OK, "set_align failed: %08x\n", hres);
+ SysFreeString(bstr);
+
+ bstr = NULL;
+ hres = IHTMLTable_get_align(table, &bstr);
+ ok(hres == S_OK, "get_align failed: %08x\n", hres);
+ ok(bstr != NULL, "get_align returned NULL\n");
+ ok(!strcmp_wa(bstr, "left"), "get_align returned %s\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+
+ hres = IHTMLTable_get_bgColor(table, &vDefaultbg);
+ ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vDefaultbg) == VT_BSTR, "bstr != NULL\n");
+ ok(!V_BSTR(&vDefaultbg), "V_BSTR(bgColor) = %s\n", wine_dbgstr_w(V_BSTR(&vDefaultbg)));
+
+ V_VT(&vbg) = VT_BSTR;
+ V_BSTR(&vbg) = a2bstr("red");
+ hres = IHTMLTable_put_bgColor(table, vbg);
+ ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vbg);
+
+ hres = IHTMLTable_get_bgColor(table, &vbg);
+ ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
+ ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
+ VariantClear(&vbg);
+
+ V_VT(&vbg) = VT_I4;
+ V_I4(&vbg) = 0xff0000;
+ hres = IHTMLTable_put_bgColor(table, vbg);
+ ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vbg);
+
+ hres = IHTMLTable_get_bgColor(table, &vbg);
+ ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
+ ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
+ ok(!strcmp_wa(V_BSTR(&vbg), "#ff0000"), "Unexpected bgcolor %s\n", wine_dbgstr_w(V_BSTR(&vbg)));
+ VariantClear(&vbg);
+
+ /* Restore Originial */
+ hres = IHTMLTable_put_bgColor(table, vDefaultbg);
+ ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
+ VariantClear(&vDefaultbg);
+
IHTMLTable_Release(table);
}
IHTMLStyleSheetRulesCollection *col = NULL;
IHTMLStyleSheet *stylesheet;
HRESULT hres;
+ BSTR href;
test_disp2((IUnknown*)disp, &DIID_DispHTMLStyleSheet, &IID_IHTMLStyleSheet, "[object]");
hres = IHTMLStyleSheet_get_rules(stylesheet, &col);
ok(hres == S_OK, "get_rules failed: %08x\n", hres);
ok(col != NULL, "col == NULL\n");
-
IHTMLStyleSheetRulesCollection_Release(col);
+
+ href = (void*)0xdeadbeef;
+ hres = IHTMLStyleSheet_get_href(stylesheet, &href);
+ ok(hres == S_OK, "get_href failed: %08x\n", hres);
+ ok(href == NULL, "got href != NULL\n");
+ SysFreeString(href);
+
IHTMLStyleSheet_Release(stylesheet);
}
hres = IHTMLStyleSheetsCollection_item(col, &idx, &res);
ok(hres == E_INVALIDARG, "item failed: %08x, expected E_INVALIDARG\n", hres);
ok(V_VT(&res) == VT_EMPTY, "V_VT(res) = %d\n", V_VT(&res));
- ok(V_DISPATCH(&res) != NULL, "V_DISPATCH(&res) == NULL\n");
VariantClear(&res);
IHTMLStyleSheetsCollection_Release(col);
}
}
+#define doc_get_elems_by_name(a,b) _doc_get_elems_by_name(__LINE__,a,b)
+static IHTMLElementCollection *_doc_get_elems_by_name(unsigned line, IHTMLDocument2 *doc, const char *name)
+{
+ IHTMLDocument3 *doc3 = _get_doc3_iface(line, doc);
+ IHTMLElementCollection *col;
+ BSTR str = a2bstr(name);
+ HRESULT hres;
+
+ hres = IHTMLDocument3_getElementsByName(doc3, str, &col);
+ ok_(__FILE__,line)(hres == S_OK, "getElementsByName failed: %08x\n", hres);
+ ok_(__FILE__,line)(col != NULL, "col = NULL\n");
+
+ IHTMLDocument3_Release(doc3);
+ SysFreeString(str);
+ return col;
+}
+
+static void test_elem_names(IHTMLDocument2 *doc)
+{
+ IHTMLElementCollection *col;
+ IHTMLElement *body;
+ LONG len;
+ HRESULT hres;
+
+ static const elem_type_t test1_types[] = {ET_INPUT, ET_A, ET_DIV};
+
+ body = doc_get_body(doc);
+
+ test_elem_set_innerhtml((IUnknown*)body,
+ "<input name=\"test\"><a name=\"test\"></a><a name=\"xxx\"></a><div id=\"test\"></div>");
+ col = doc_get_elems_by_name(doc, "test");
+ test_elem_collection((IUnknown*)col, test1_types, sizeof(test1_types)/sizeof(*test1_types));
+ IHTMLElementCollection_Release(col);
+
+ col = doc_get_elems_by_name(doc, "yyy");
+ test_elem_collection((IUnknown*)col, NULL, 0);
+ IHTMLElementCollection_Release(col);
+
+ /* case insensivity test */
+ col = doc_get_elems_by_name(doc, "Xxx");
+ hres = IHTMLElementCollection_get_length(col, &len);
+ ok(hres == S_OK, "get_length failed: %08x\n", hres);
+ todo_wine ok(len == 1, "len = %d\n", len);
+ IHTMLElementCollection_Release(col);
+
+ IHTMLElement_Release(body);
+}
+
static void test_elems2(IHTMLDocument2 *doc)
{
IHTMLElement *elem, *elem2, *div;
test_attr(div);
test_blocked(doc, div);
+ test_elem_names(doc);
IHTMLElement_Release(div);
}
static HRESULT WINAPI Unknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
{
- ok(IsEqualGUID(riid, &IID_IServiceProvider), "riid = %s\n", dbgstr_guid(riid));
+ ok(IsEqualGUID(riid, &IID_IServiceProvider), "riid = %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
- while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
+ while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
test(doc);
DEFINE_EXPECT(submit_onclick_attached_check_cancel);
DEFINE_EXPECT(submit_onclick_setret);
DEFINE_EXPECT(elem2_cp_onclick);
+DEFINE_EXPECT(iframe_onload);
static HWND container_hwnd = NULL;
static IHTMLWindow2 *window;
static IOleDocumentView *view;
static BOOL xy_todo;
+static BOOL is_ie9plus;
typedef struct {
LONG x;
"<input type=\"submit\" id=\"submitid\" />"
"</form></body></html>";
-static const char *debugstr_guid(REFIID riid)
-{
- static char buf[50];
-
- sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
- riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
- riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
- riid->Data4[5], riid->Data4[6], riid->Data4[7]);
-
- return buf;
-}
-
static int strcmp_wa(LPCWSTR strw, const char *stra)
{
CHAR buf[512];
hres = ITypeInfo_GetTypeAttr(typeinfo, &type_attr);
ok_(__FILE__,line) (hres == S_OK, "GetTypeAttr failed: %08x\n", hres);
ok_(__FILE__,line) (IsEqualGUID(&type_attr->guid, diid), "unexpected guid %s\n",
- debugstr_guid(&type_attr->guid));
+ wine_dbgstr_guid(&type_attr->guid));
ITypeInfo_ReleaseTypeAttr(typeinfo, type_attr);
ITypeInfo_Release(typeinfo);
return elem3;
}
+#define get_iframe_iface(u) _get_iframe_iface(__LINE__,u)
+static IHTMLIFrameElement *_get_iframe_iface(unsigned line, IUnknown *unk)
+{
+ IHTMLIFrameElement *iframe;
+ HRESULT hres;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IHTMLIFrameElement, (void**)&iframe);
+ ok_(__FILE__,line)(hres == S_OK, "QueryInterface(IID_IHTMLIFrameElement) failed: %08x\n", hres);
+
+ return iframe;
+}
+
#define doc_get_body(d) _doc_get_body(__LINE__,d)
static IHTMLElement *_doc_get_body(unsigned line, IHTMLDocument2 *doc)
{
|| IsEqualGUID(riid, &IID_IDispatchEx))
*ppv = iface;
else {
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
}else if(IsEqualGUID(riid, &IID_IDispatchEx)) {
return E_NOINTERFACE;
}else {
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
EVENT_HANDLER_FUNC_OBJ(submit_onclick);
+static HRESULT WINAPI iframe_onload(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
+ VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
+{
+ CHECK_EXPECT(iframe_onload);
+ test_event_args(&DIID_DispHTMLIFrame, id, wFlags, pdp, pvarRes, pei, pspCaller);
+ test_event_src("IFRAME");
+ return S_OK;
+}
+
+EVENT_HANDLER_FUNC_OBJ(iframe_onload);
+
static HRESULT WINAPI submit_onclick_attached(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
{
|| IsEqualGUID(riid, &diid)) \
*ppv = iface; \
else { \
- ok(0, "unexpected riid %s\n", debugstr_guid(riid)); \
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid)); \
return E_NOINTERFACE; \
} \
return S_OK; \
#define test_cp_args(a,b,c,d,e,f) _test_cp_args(__LINE__,a,b,c,d,e,f)
static void _test_cp_args(unsigned line, REFIID riid, WORD flags, DISPPARAMS *dp, VARIANT *vres, EXCEPINFO *ei, UINT *argerr)
{
- ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok_(__FILE__,line)(flags == DISPATCH_METHOD, "flags = %x\n", flags);
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
ok_(__FILE__,line)(!dp->cArgs, "dp->cArgs = %d\n", dp->cArgs);
{
IHTMLEventObj *event;
- ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok_(__FILE__,line)(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok_(__FILE__,line)(flags == DISPATCH_METHOD, "flags = %x\n", flags);
ok_(__FILE__,line)(dp != NULL, "dp == NULL\n");
ok_(__FILE__,line)(dp->cArgs == 1, "dp->cArgs = %d\n", dp->cArgs);
CHECK_EXPECT(timeout);
ok(dispIdMember == DISPID_VALUE, "dispIdMember = %d\n", dispIdMember);
- ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(wFlags == DISPATCH_METHOD, "wFlags = %x\n", wFlags);
ok(!lcid, "lcid = %x\n", lcid);
ok(pDispParams != NULL, "pDispParams == NULL\n");
test_attached_event_args(id, wFlags, pdp, pvarRes, pei);
- ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(!puArgErr, "puArgErr = %p\n", puArgErr);
return S_OK;
if(b) {
while(!*b && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
}else {
while(!b && PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
}
}
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
- ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(pDispParams != NULL, "pDispParams == NULL\n");
ok(pExcepInfo != NULL, "pExcepInfo == NULL\n");
ok(puArgErr != NULL, "puArgErr == NULL\n");
CHECK_CALLED(submit_onclick_attached_check_cancel);
CHECK_CALLED(submit_onclick_attached);
+ if(1)pump_msgs(NULL);
+
IHTMLElement_Release(submit);
}
static void test_iframe_connections(IHTMLDocument2 *doc)
{
- HRESULT hres;
IHTMLIFrameElement *iframe;
IHTMLDocument2 *iframes_doc;
DWORD cookie;
IConnectionPoint *cp;
- IHTMLElement *element = find_element_by_id(doc, "ifr");
+ IHTMLElement *element;
+ BSTR str;
+ HRESULT hres;
- hres = IHTMLElement_QueryInterface(element, &IID_IHTMLIFrameElement, (void**)&iframe);
+ trace("iframe tests...\n");
+
+ element = find_element_by_id(doc, "ifr");
+ iframe = get_iframe_iface((IUnknown*)element);
IHTMLElement_Release(element);
- ok(hres == S_OK, "QueryInterface(IID_IHTMLIFrameElement) failed: %08x\n", hres);
iframes_doc = get_iframe_doc(iframe);
IHTMLIFrameElement_Release(iframe);
IConnectionPoint_Release(cp);
ok(hres == CONNECT_E_NOCONNECTION, "Unadvise returned %08x, expected CONNECT_E_NOCONNECTION\n", hres);
+ unregister_cp((IUnknown*)iframes_doc, &IID_IDispatch, cookie);
+
+ if(is_ie9plus) {
+ IHTMLFrameBase2 *frame_base2;
+ VARIANT v;
+
+ hres = IHTMLIFrameElement_QueryInterface(iframe, &IID_IHTMLFrameBase2, (void**)&frame_base2);
+ ok(hres == S_OK, "Could not get IHTMLFrameBase2 iface: %08x\n", hres);
+
+ V_VT(&v) = VT_DISPATCH;
+ V_DISPATCH(&v) = (IDispatch*)&iframe_onload_obj;
+ hres = IHTMLFrameBase2_put_onload(frame_base2, v);
+ ok(hres == S_OK, "put_onload failed: %08x\n", hres);
+
+ IHTMLFrameBase2_Release(frame_base2);
+
+ str = a2bstr("about:blank");
+ hres = IHTMLDocument2_put_URL(iframes_doc, str);
+ ok(hres == S_OK, "put_URL failed: %08x\n", hres);
+ SysFreeString(str);
+
+ SET_EXPECT(iframe_onload);
+ pump_msgs(&called_iframe_onload);
+ CHECK_CALLED(iframe_onload);
+
+ str = a2bstr("about:test");
+ hres = IHTMLDocument2_put_URL(iframes_doc, str);
+ ok(hres == S_OK, "put_URL failed: %08x\n", hres);
+ SysFreeString(str);
+
+ SET_EXPECT(iframe_onload);
+ pump_msgs(&called_iframe_onload);
+ CHECK_CALLED(iframe_onload);
+ }else {
+ win_skip("Skipping iframe onload tests on IE older than 9.\n");
+ }
+
IHTMLDocument2_Release(iframes_doc);
}
static IHTMLDocument2 *create_document(void)
{
IHTMLDocument2 *doc;
- IHTMLDocument5 *doc5;
HRESULT hres;
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IHTMLDocument2, (void**)&doc);
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
- if (FAILED(hres))
- return NULL;
-
- hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
- if(FAILED(hres)) {
- win_skip("Could not get IHTMLDocument5 interface, probably too old IE\n");
- IHTMLDocument2_Release(doc);
- return NULL;
- }
-
- IHTMLDocument5_Release(doc5);
- return doc;
+ return SUCCEEDED(hres) ? doc : NULL;
}
doc_load_string(doc, str);
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
- while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
+ while(!doc_complete && GetMessageA(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageA(&msg);
}
hres = IHTMLDocument2_get_body(doc, &body);
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- return DefWindowProc(hwnd, msg, wParam, lParam);
+ return DefWindowProcA(hwnd, msg, wParam, lParam);
}
static HWND create_container_window(void)
IHTMLDocument2_Release(doc);
}
+static BOOL check_ie(void)
+{
+ IHTMLDocument2 *doc;
+ IHTMLDocument5 *doc5;
+ IHTMLDocument7 *doc7;
+ HRESULT hres;
+
+ doc = create_document();
+ if(!doc)
+ return FALSE;
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument7, (void**)&doc7);
+ if(SUCCEEDED(hres)) {
+ is_ie9plus = TRUE;
+ IHTMLDocument7_Release(doc7);
+ }
+
+ trace("is_ie9plus %x\n", is_ie9plus);
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
+ if(SUCCEEDED(hres))
+ IHTMLDocument5_Release(doc5);
+
+ IHTMLDocument2_Release(doc);
+ return SUCCEEDED(hres);
+}
+
START_TEST(events)
{
CoInitialize(NULL);
- container_hwnd = create_container_window();
- if(winetest_interactive)
- ShowWindow(container_hwnd, SW_SHOW);
+ if(check_ie()) {
+ container_hwnd = create_container_window();
- run_test(empty_doc_str, test_timeout);
- run_test(click_doc_str, test_onclick);
- run_test(readystate_doc_str, test_onreadystatechange);
- run_test(img_doc_str, test_imgload);
- run_test(input_doc_str, test_focus);
- run_test(form_doc_str, test_submit);
- run_test(iframe_doc_str, test_iframe_connections);
+ if(winetest_interactive)
+ ShowWindow(container_hwnd, SW_SHOW);
- test_empty_document();
+ run_test(empty_doc_str, test_timeout);
+ run_test(click_doc_str, test_onclick);
+ run_test(readystate_doc_str, test_onreadystatechange);
+ run_test(img_doc_str, test_imgload);
+ run_test(input_doc_str, test_focus);
+ run_test(form_doc_str, test_submit);
+ run_test(iframe_doc_str, test_iframe_connections);
+
+ test_empty_document();
+
+ DestroyWindow(container_hwnd);
+ }else {
+ win_skip("Too old IE\n");
+ }
- DestroyWindow(container_hwnd);
CoUninitialize();
}
<html>
<head>
<script>
-var testevent_divid2_called = false, cnt=0;
+var testevent_divid2_called = false, testevent_document_called = false, cnt=0;
function ok(b,m) {
return external.ok(b, m);
ok("onclick" in div, "testevent not in div");
ok(typeof(div.onclick) === "function", "typeof(div.onclick) = " + typeof(div.onclick));
ok(testevent_divid2_called === false, "testevent_divid2_called = " + testevent_divid2_called);
+ ok(typeof(document.onclick) === "function", "typeof(document.onclick) = " + typeof(document.onclick));
+ ok(testevent_document_called === false, "testevent_document_called = " + testevent_document_called);
div.click();
ok(testevent_divid2_called === true, "testevent_divid2_called = " + testevent_divid2_called);
+ ok(testevent_document_called === true, "testevent_document_called = " + testevent_document_called);
ok(!("ontest" in div), "testevent in div");
ok(typeof(div.ontest) === "undefined", "typeof(div.ontest) = " + typeof(div.ontest));
<script event="onclick" for="divid2">
testevent_divid2_called = true;
</script>
+<script event="onclick" for="document">
+ testevent_document_called = true;
+</script>
<script event="ontest" for="divid2">
ok(false, "unexpected ontest");
</script>
DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_0);
DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1);
DEFINE_EXPECT(Exec_ShellDocView_37);
+DEFINE_EXPECT(Exec_ShellDocView_62);
DEFINE_EXPECT(Exec_ShellDocView_63);
DEFINE_EXPECT(Exec_ShellDocView_67);
DEFINE_EXPECT(Exec_ShellDocView_84);
DEFINE_EXPECT(Exec_Explorer_38);
DEFINE_EXPECT(Exec_Explorer_69);
DEFINE_EXPECT(Exec_DOCCANNAVIGATE);
+DEFINE_EXPECT(Exec_DOCCANNAVIGATE_NULL);
DEFINE_EXPECT(Invoke_AMBIENT_USERMODE);
DEFINE_EXPECT(Invoke_AMBIENT_DLCONTROL);
DEFINE_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
DEFINE_EXPECT(EnumConnections);
DEFINE_EXPECT(EnumConnections_Next);
DEFINE_EXPECT(WindowClosing);
+DEFINE_EXPECT(NavigateWithBindCtx);
+static BOOL is_ie9plus;
static IUnknown *doc_unk;
static IMoniker *doc_mon;
static BOOL expect_LockContainer_fLock;
static BOOL complete, loading_js, loading_hash, is_refresh;
static DWORD status_code = HTTP_STATUS_OK;
static BOOL asynchronous_binding = FALSE;
-static BOOL support_wbapp, allow_new_window;
+static BOOL support_wbapp, allow_new_window, no_travellog;
static BOOL report_mime;
+static BOOL testing_submit;
+static BOOL resetting_document;
static int stream_read, protocol_read;
static IStream *history_stream;
static enum load_state_t {
static const WCHAR wszArial[] =
{'A','r','i','a','l',0};
-static const char *debugstr_guid(REFIID riid)
+static int strcmp_wa(LPCWSTR strw, const char *stra)
{
- static char buf[50];
-
- if(!riid)
- return "(null)";
-
- sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
- riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
- riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
- riid->Data4[5], riid->Data4[6], riid->Data4[7]);
-
- return buf;
+ CHAR buf[512];
+ WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
+ return lstrcmpA(stra, buf);
}
-static int strcmp_wa(LPCWSTR strw, const char *stra)
+static BOOL wstr_contains(const WCHAR *strw, const char *stra)
{
CHAR buf[512];
WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
- return lstrcmpA(stra, buf);
+ return strstr(buf, stra) != NULL;
}
static const WCHAR *strstrW( const WCHAR *str, const WCHAR *sub )
if(flags & EXPECT_SETTITLE)
SET_EXPECT(Exec_SETTITLE);
- while(!*b && GetMessage(&msg, doc_hwnd, 0, 0)) {
+ while(!*b && GetMessageA(&msg, doc_hwnd, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageA(&msg);
}
if(flags & EXPECT_UPDATEUI) {
static IMoniker Moniker;
-#define test_GetCurMoniker(u,m,v) _test_GetCurMoniker(__LINE__,u,m,v)
-static void _test_GetCurMoniker(unsigned line, IUnknown *unk, IMoniker *exmon, const char *exurl)
+#define test_GetCurMoniker(u,m,v,t) _test_GetCurMoniker(__LINE__,u,m,v,t)
+static void _test_GetCurMoniker(unsigned line, IUnknown *unk, IMoniker *exmon, const char *exurl, BOOL is_todo)
{
IHTMLDocument2 *doc;
IPersistMoniker *permon;
hres = IMoniker_GetDisplayName(mon, NULL, NULL, &url);
ok(hres == S_OK, "GetDisplayName failed: %08x\n", hres);
- ok_(__FILE__,line)(!strcmp_wa(url, exurl), "unexpected url %s\n", wine_dbgstr_w(url));
+ if(is_todo)
+ todo_wine ok_(__FILE__,line)(!strcmp_wa(url, exurl), "unexpected url %s\n", wine_dbgstr_w(url));
+ else
+ ok_(__FILE__,line)(!strcmp_wa(url, exurl), "unexpected url %s\n", wine_dbgstr_w(url));
if(!*ptr)
ok_(__FILE__,line)(!lstrcmpW(url, doc_url), "url %s != doc_url %s\n", wine_dbgstr_w(url), wine_dbgstr_w(doc_url));
return E_NOINTERFACE; /* TODO */
if(!ignore_external_qi)
- ok(0, "unexpected riid: %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid: %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
bindinfo.cbSize = sizeof(bindinfo);
hres = IInternetBindInfo_GetBindInfo(pOIBindInfo, &bindf, &bindinfo);
ok(hres == S_OK, "GetBindInfo failed: %08x\n", hres);
- ok(bindf == (BINDF_FROMURLMON|BINDF_PULLDATA|BINDF_NEEDFILE|BINDF_ASYNCSTORAGE|BINDF_ASYNCHRONOUS),
- "bindf = %x\n", bindf);
+ if(!testing_submit)
+ ok(bindf == (BINDF_FROMURLMON|BINDF_PULLDATA|BINDF_NEEDFILE|BINDF_ASYNCSTORAGE|BINDF_ASYNCHRONOUS),
+ "bindf = %x\n", bindf);
+ else
+ ok(bindf == (BINDF_FROMURLMON|BINDF_FORMS_SUBMIT|BINDF_PRAGMA_NO_CACHE|BINDF_HYPERLINK
+ |BINDF_PULLDATA|BINDF_NEEDFILE|BINDF_GETNEWESTVERSION|BINDF_ASYNCSTORAGE|BINDF_ASYNCHRONOUS),
+ "bindf = %x\n", bindf);
ok(bindinfo.cbSize == sizeof(bindinfo), "bindinfo.cbSize=%d\n", bindinfo.cbSize);
ok(bindinfo.szExtraInfo == NULL, "bindinfo.szExtraInfo=%p\n", bindinfo.szExtraInfo);
/* TODO: test stgmedData */
ok(bindinfo.grfBindInfoF == 0, "bindinfo.grfBinfInfoF=%08x\n", bindinfo.grfBindInfoF);
- ok(bindinfo.dwBindVerb == 0, "bindinfo.dwBindVerb=%d\n", bindinfo.dwBindVerb);
+ if(!testing_submit) {
+ ok(bindinfo.dwBindVerb == BINDVERB_GET, "bindinfo.dwBindVerb=%d\n", bindinfo.dwBindVerb);
+ ok(bindinfo.cbstgmedData == 0, "bindinfo.cbstgmedData=%d\n", bindinfo.cbstgmedData);
+ ok(bindinfo.stgmedData.tymed == TYMED_NULL, "bindinfo.stgmedData.tymed=%d\n", bindinfo.stgmedData.tymed);
+ }else {
+ ok(bindinfo.dwBindVerb == BINDVERB_POST, "bindinfo.dwBindVerb=%d\n", bindinfo.dwBindVerb);
+ ok(bindinfo.cbstgmedData == 8, "bindinfo.cbstgmedData=%d\n", bindinfo.cbstgmedData);
+ ok(bindinfo.stgmedData.tymed == TYMED_HGLOBAL, "bindinfo.stgmedData.tymed=%d\n", bindinfo.stgmedData.tymed);
+ ok(!memcmp(U(bindinfo.stgmedData).hGlobal, "cmd=TEST", 8), "unexpected hGlobal\n");
+ }
ok(bindinfo.szCustomVerb == 0, "bindinfo.szCustomVerb=%p\n", bindinfo.szCustomVerb);
- ok(bindinfo.cbstgmedData == 0, "bindinfo.cbstgmedData=%d\n", bindinfo.cbstgmedData);
ok(bindinfo.dwOptions == 0x80000 ||
bindinfo.dwOptions == 0x4080000, /* win2k3 */
"bindinfo.dwOptions=%x\n", bindinfo.dwOptions);
protocol_read += *pcbRead = sizeof(css_data)-1;
memcpy(pv, css_data, sizeof(css_data)-1);
+
return S_OK;
}
static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, DISPID dispID)
{
+ if(resetting_document)
+ return S_OK;
+
switch(dispID) {
case DISPID_READYSTATE:
CHECK_EXPECT2(OnChanged_READYSTATE);
return S_OK;
}
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
}
if(IsEqualGUID(&IID_IGetBindHandle, riid))
return E_NOINTERFACE;
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
return E_NOINTERFACE;
}
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ trace("Binding::QI(%s)\n", wine_dbgstr_guid(riid));
+ *ppv = NULL;
return E_NOINTERFACE;
}
{
CHECK_EXPECT(Abort);
if(asynchronous_binding)
- PeekMessage(NULL, container_hwnd, WM_CONTINUE_BINDING, WM_CONTINUE_BINDING, PM_REMOVE);
+ PeekMessageA(NULL, container_hwnd, WM_CONTINUE_BINDING, WM_CONTINUE_BINDING, PM_REMOVE);
return S_OK;
}
if(IsEqualGUID(&IID_IMoniker_unk2, riid))
return E_NOINTERFACE; /* TODO */
- ok(0, "unexpected riid: %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid: %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
static HRESULT WINAPI Moniker_GetClassID(IMoniker *iface, CLSID *pClassID)
{
CHECK_EXPECT(GetClassID);
- ok(IsEqualGUID(pClassID, &IID_NULL), "pClassID = %s\n", debugstr_guid(pClassID));
+ ok(IsEqualGUID(pClassID, &IID_NULL), "pClassID = %s\n", wine_dbgstr_guid(pClassID));
return E_FAIL;
}
static const GUID undocumented_frame_iid = {0xfbece6c9,0x48d7,0x4a37,{0x8f,0xe3,0x6a,0xd4,0x27,0x2f,0xdd,0xac}};
if(!IsEqualGUID(&undocumented_frame_iid, riid))
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText)
{
- CHECK_EXPECT2(SetStatusText);
+ if(!resetting_document)
+ CHECK_EXPECT2(SetStatusText);
if(!expect_status_text)
ok(pszStatusText == NULL, "pszStatusText=%p, expected NULL\n", pszStatusText);
return S_OK;
static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
{
- CHECK_EXPECT(GetHostInfo);
+ if(!resetting_document)
+ CHECK_EXPECT(GetHostInfo);
ok(iface == expect_uihandler_iface, "called on unexpected iface\n");
ok(pInfo != NULL, "pInfo=NULL\n");
if(pInfo) {
return S_OK;
}
+ *ppv = NULL;
+
if(IsEqualGUID(&IID_IOleCommandTarget, riid))
return E_NOINTERFACE;
- else if(IsEqualGUID(&IID_IDocHostShowUI, riid))
+ if(IsEqualGUID(&IID_IDocHostShowUI, riid))
return E_NOINTERFACE; /* TODO */
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ trace("CustomDocHostUIHandler::QI(%s)\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
{
+ if(resetting_document)
+ return E_FAIL;
+
if(!pguidCmdGroup) {
test_readyState(NULL);
load_state = LD_LOADING;
}else {
if(nav_url)
- test_GetCurMoniker(doc_unk, NULL, nav_serv_url);
+ test_GetCurMoniker(doc_unk, NULL, nav_serv_url, FALSE);
else if(load_from_stream)
- test_GetCurMoniker(doc_unk, NULL, "about:blank");
+ test_GetCurMoniker(doc_unk, NULL, "about:blank", FALSE);
else if(!editmode)
- test_GetCurMoniker(doc_unk, doc_mon, NULL);
+ test_GetCurMoniker(doc_unk, doc_mon, NULL, FALSE);
}
ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
}
return S_OK;
+ case 62:
+ CHECK_EXPECT(Exec_ShellDocView_62);
+ ok(!pvaIn, "pvaIn != NULL\n");
+ ok(!pvaOut, "pvaOut != NULL\n");
+ return S_OK;
+
case 63: {
IHTMLPrivateWindow *priv_window;
HRESULT hres;
return E_NOTIMPL;
+ case 83:
+ case 102:
case 134: /* TODO */
+ case 135:
case 136: /* TODO */
case 139: /* TODO */
case 143: /* TODO */
case 144: /* TODO */
+ case 178:
return E_NOTIMPL;
default:
if(IsEqualGUID(&CGID_DocHostCmdPriv, pguidCmdGroup)) {
switch(nCmdID) {
case DOCHOST_DOCCANNAVIGATE:
- CHECK_EXPECT(Exec_DOCCANNAVIGATE);
+ if(pvaIn) {
+ CHECK_EXPECT(Exec_DOCCANNAVIGATE);
+ ok(V_VT(pvaIn) == VT_UNKNOWN, "V_VT(pvaIn) != VT_UNKNOWN\n");
+ /* FIXME: test V_UNKNOWN(pvaIn) == window */
+ }else {
+ CHECK_EXPECT(Exec_DOCCANNAVIGATE_NULL);
+ }
test_readyState(NULL);
-
- ok(pvaIn != NULL, "pvaIn == NULL\n");
ok(pvaOut == NULL, "pvaOut != NULL\n");
- ok(V_VT(pvaIn) == VT_UNKNOWN, "V_VT(pvaIn) != VT_UNKNOWN\n");
- /* FIXME: test V_UNKNOWN(pvaIn) == window */
return S_OK;
case 1: {
SAFEARRAY *sa;
ok(ind == 0, "Lower bound = %d\n", ind);
hres = SafeArrayGetUBound(sa, 1, &ind);
ok(hres == S_OK, "SafeArrayGetUBound failed: %x\n", hres);
- ok(ind == 7 || broken(ind == 5), "Upper bound = %d\n", ind);
+ ok(ind == 7 || ind == 8 /* IE11 */ ||broken(ind == 5), "Upper bound = %d\n", ind);
ind = 0;
SafeArrayGetElement(sa, &ind, &var);
}
}
- ok(0, "unexpected pguidCmdGroup: %s\n", debugstr_guid(pguidCmdGroup));
+ ok(0, "unexpected pguidCmdGroup: %s\n", wine_dbgstr_guid(pguidCmdGroup));
return E_NOTIMPL;
}
LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
+ if(resetting_document)
+ return E_FAIL;
+
ok(IsEqualGUID(&IID_NULL, riid), "riid != IID_NULL\n");
ok(pDispParams != NULL, "pDispParams == NULL\n");
ok(pExcepInfo == NULL, "pExcepInfo=%p, expected NULL\n", pExcepInfo);
IHTMLDocument2 *doc;
BSTR state;
- ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", debugstr_guid(riid));
+ if(resetting_document)
+ return E_FAIL;
+
+ ok(IsEqualGUID(&IID_NULL, riid), "riid = %s\n", wine_dbgstr_guid(riid));
ok(pDispParams != NULL, "pDispParams == NULL\n");
ok(pExcepInfo != NULL, "pExcepInfo == NULL\n");
ok(puArgErr != NULL, "puArgErr == NULL\n");
}
if(!IsEqualGUID(&IID_IIETravelLog2, riid) && !IsEqualGUID(&IID_unk_travellog, riid))
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
ok(!strcmp_wa(lpszUrl, nav_url), "lpszUrl = %s, expected %s\n", wine_dbgstr_w(lpszUrl), nav_url);
ok(dwFlags == 0x40 || !dwFlags || dwFlags == 0x50, "dwFlags = %x\n", dwFlags);
ok(!lpszFrameName, "lpszFrameName = %s\n", wine_dbgstr_w(lpszFrameName));
- ok(!pPostData, "pPostData = %p\n", pPostData);
- ok(!cbPostData, "cbPostData = %d\n", cbPostData);
- ok(!lpszHeaders, "lpszHeaders = %s\n", wine_dbgstr_w(lpszHeaders));
+ if(!testing_submit) {
+ ok(!pPostData, "pPostData = %p\n", pPostData);
+ ok(!cbPostData, "cbPostData = %d\n", cbPostData);
+ ok(!lpszHeaders, "lpszHeaders = %s\n", wine_dbgstr_w(lpszHeaders));
+ }else {
+ ok(cbPostData == 9, "cbPostData = %d\n", cbPostData);
+ ok(!memcmp(pPostData, "cmd=TEST", cbPostData), "pPostData = %p\n", pPostData);
+ ok(wstr_contains(lpszHeaders, "Content-Type: application/x-www-form-urlencoded\r\n"),
+ "lpszHeaders = %s\n", wine_dbgstr_w(lpszHeaders));
+
+ }
ok(fPlayNavSound, "fPlayNavSound = %x\n", fPlayNavSound);
ok(pfCancel != NULL, "pfCancel = NULL\n");
ok(!*pfCancel, "*pfCancel = %x\n", *pfCancel);
IDocObjectService* This,
BSTR *pbstrPendingUrl)
{
- CHECK_EXPECT(GetPendingUrl);
+ if(!resetting_document)
+ CHECK_EXPECT(GetPendingUrl);
return E_NOTIMPL;
}
}
*ppv = NULL;
- ok(0, "unexpected riid: %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid: %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
return S_OK;
}
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOTIMPL;
}
static IConnectionPointContainer ConnectionPointContainer = { &ConnectionPointContainerVtbl };
-static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid, void **ppv)
+static void test_NavigateWithBindCtx(BSTR uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data,
+ VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment)
{
- *ppv = NULL;
+ ok(!strcmp_wa(uri, nav_url), "uri = %s\n", wine_dbgstr_w(uri));
+ ok(V_VT(flags) == VT_I4, "V_VT(flags) = %d\n", V_VT(flags));
+ ok(V_I4(flags) == navHyperlink, "V_I4(flags) = %x\n", V_I4(flags));
+ ok(!target_frame, "target_frame != NULL\n");
+ ok(!post_data, "post_data != NULL\n");
+ ok(!headers, "headers != NULL\n");
+ ok(bind_ctx != NULL, "bind_ctx == NULL\n");
+ ok(!url_fragment, "url_dragment = %s\n", wine_dbgstr_w(url_fragment));
+}
- if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IWebBrowser, riid)
- || IsEqualGUID(&IID_IWebBrowserApp, riid) || IsEqualGUID(&IID_IWebBrowser2, riid)) {
- *ppv = iface;
- return S_OK;
- }
+static HRESULT wb_qi(REFIID riid, void **ppv);
- if(IsEqualGUID(riid, &IID_IOleObject))
- return E_NOINTERFACE; /* TODO */
+static HRESULT WINAPI WebBrowserPriv_QueryInterface(IWebBrowserPriv *iface, REFIID riid, void **ppv)
+{
+ return wb_qi(riid, ppv);
+}
- if(IsEqualGUID(riid, &IID_IConnectionPointContainer)) {
- *ppv = &ConnectionPointContainer;
- return S_OK;
- }
+static ULONG WINAPI WebBrowserPriv_AddRef(IWebBrowserPriv *iface)
+{
+ return 2;
+}
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
- return E_NOINTERFACE;
+static ULONG WINAPI WebBrowserPriv_Release(IWebBrowserPriv *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI WebBrowserPriv_NavigateWithBindCtx(IWebBrowserPriv *iface, VARIANT *uri, VARIANT *flags,
+ VARIANT *target_frame, VARIANT *post_data, VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment)
+{
+ trace("NavigateWithBindCtx\n");
+
+ CHECK_EXPECT(NavigateWithBindCtx);
+
+ ok(V_VT(uri) == VT_BSTR, "V_VT(uri) = %d\n", V_VT(uri));
+ test_NavigateWithBindCtx(V_BSTR(uri), flags, target_frame, post_data, headers, bind_ctx, url_fragment);
+ return S_OK;
+}
+
+static HRESULT WINAPI WebBrowserPriv_OnClose(IWebBrowserPriv *iface)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static const IWebBrowserPrivVtbl WebBrowserPrivVtbl = {
+ WebBrowserPriv_QueryInterface,
+ WebBrowserPriv_AddRef,
+ WebBrowserPriv_Release,
+ WebBrowserPriv_NavigateWithBindCtx,
+ WebBrowserPriv_OnClose
+};
+
+static IWebBrowserPriv WebBrowserPriv = { &WebBrowserPrivVtbl };
+
+static HRESULT WINAPI WebBrowserPriv2IE8_QueryInterface(IWebBrowserPriv2IE8 *iface, REFIID riid, void **ppv)
+{
+ return wb_qi(riid, ppv);
+}
+
+static ULONG WINAPI WebBrowserPriv2IE8_AddRef(IWebBrowserPriv2IE8 *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI WebBrowserPriv2IE8_Release(IWebBrowserPriv2IE8 *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_NavigateWithBindCtx2(IWebBrowserPriv2IE8 *iface, IUri *uri, VARIANT *flags,
+ VARIANT *target_frame, VARIANT *post_data, VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment)
+{
+ BSTR str;
+ HRESULT hres;
+
+ trace("IE8: NavigateWithBindCtx2\n");
+
+ CHECK_EXPECT(NavigateWithBindCtx);
+
+ hres = IUri_GetDisplayUri(uri, &str);
+ ok(hres == S_OK, "GetDisplayUri failed: %08x\n", hres);
+ test_NavigateWithBindCtx(str, flags, target_frame, post_data, headers, bind_ctx, url_fragment);
+ SysFreeString(str);
+ return S_OK;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_SetBrowserFrameOptions(IWebBrowserPriv2IE8 *iface, DWORD opt1, DWORD opt2)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_DetachConnectionPoints(IWebBrowserPriv2IE8 *iface)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_GetProcessId(IWebBrowserPriv2IE8 *iface, DWORD *pid)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_CompatAttachEditEvents(IWebBrowserPriv2IE8 *iface)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_HandleOpenOptions(IWebBrowserPriv2IE8 *iface, IUnknown *obj, BSTR bstr, int options)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_SetSearchTerm(IWebBrowserPriv2IE8 *iface, BSTR term)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_GetSearchTerm(IWebBrowserPriv2IE8 *iface, BSTR *term)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE8_GetCurrentDocument(IWebBrowserPriv2IE8 *iface, IDispatch **doc)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static const IWebBrowserPriv2IE8Vtbl WebBrowserPriv2IE8Vtbl = {
+ WebBrowserPriv2IE8_QueryInterface,
+ WebBrowserPriv2IE8_AddRef,
+ WebBrowserPriv2IE8_Release,
+ WebBrowserPriv2IE8_NavigateWithBindCtx2,
+ WebBrowserPriv2IE8_SetBrowserFrameOptions,
+ WebBrowserPriv2IE8_DetachConnectionPoints,
+ WebBrowserPriv2IE8_GetProcessId,
+ WebBrowserPriv2IE8_CompatAttachEditEvents,
+ WebBrowserPriv2IE8_HandleOpenOptions,
+ WebBrowserPriv2IE8_SetSearchTerm,
+ WebBrowserPriv2IE8_GetSearchTerm,
+ WebBrowserPriv2IE8_GetCurrentDocument
+};
+
+static IWebBrowserPriv2IE8 WebBrowserPriv2IE8 = { &WebBrowserPriv2IE8Vtbl };
+
+static HRESULT WINAPI WebBrowserPriv2IE9_QueryInterface(IWebBrowserPriv2IE9 *iface, REFIID riid, void **ppv)
+{
+ return wb_qi(riid, ppv);
+}
+
+static ULONG WINAPI WebBrowserPriv2IE9_AddRef(IWebBrowserPriv2IE9 *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI WebBrowserPriv2IE9_Release(IWebBrowserPriv2IE9 *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI WebBrowserPriv2IE9_NavigateWithBindCtx2(IWebBrowserPriv2IE9 *iface, IUri *uri, VARIANT *flags,
+ VARIANT *target_frame, VARIANT *post_data, VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment, DWORD unknown)
+{
+ BSTR str;
+ HRESULT hres;
+
+ trace("IE9: NavigateWithBindCtx2\n");
+
+ CHECK_EXPECT(NavigateWithBindCtx);
+
+ hres = IUri_GetDisplayUri(uri, &str);
+ ok(hres == S_OK, "GetDisplayUri failed: %08x\n", hres);
+ test_NavigateWithBindCtx(str, flags, target_frame, post_data, headers, bind_ctx, url_fragment);
+ SysFreeString(str);
+ return S_OK;
+}
+
+static const IWebBrowserPriv2IE9Vtbl WebBrowserPriv2IE9Vtbl = {
+ WebBrowserPriv2IE9_QueryInterface,
+ WebBrowserPriv2IE9_AddRef,
+ WebBrowserPriv2IE9_Release,
+ WebBrowserPriv2IE9_NavigateWithBindCtx2
+};
+
+static IWebBrowserPriv2IE9 WebBrowserPriv2IE9 = { &WebBrowserPriv2IE9Vtbl };
+
+static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid, void **ppv)
+{
+ return wb_qi(riid, ppv);
}
static ULONG WINAPI WebBrowser_AddRef(IWebBrowser2 *iface)
static HRESULT WINAPI WebBrowser_get_AddressBar(IWebBrowser2 *iface, VARIANT_BOOL *Value)
{
- ok(0, "unexpected call\n");
+ trace("get_AddressBar: ignoring\n"); /* Some old IEs call it */
return E_NOTIMPL;
}
static IWebBrowser2 WebBrowser2 = { &WebBrowser2Vtbl };
+static HRESULT wb_qi(REFIID riid, void **ppv)
+{
+ static const IID IID_IWebBrowserPriv2IE7 = {0x1af32b6c, 0xa3ba,0x48b9,{0xb2,0x4e,0x8a,0xa9,0xc4,0x1f,0x6e,0xcd}};
+ static const IID IID_IWebBrowserPriv2IE8XP = {0x486f6159,0x9f3f,0x4827,{0x82,0xd4,0x28,0x3c,0xef,0x39,0x77,0x33}};
+
+ *ppv = NULL;
+
+ if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IWebBrowser, riid)
+ || IsEqualGUID(&IID_IWebBrowserApp, riid) || IsEqualGUID(&IID_IWebBrowser2, riid)) {
+ *ppv = &WebBrowser2;
+ return S_OK;
+ }
+
+ if(IsEqualGUID(riid, &IID_IOleObject))
+ return E_NOINTERFACE; /* TODO */
+
+ if(IsEqualGUID(riid, &IID_IConnectionPointContainer)) {
+ *ppv = &ConnectionPointContainer;
+ return S_OK;
+ }
+
+ if(IsEqualGUID(riid, &IID_IWebBrowserPriv)) {
+ *ppv = &WebBrowserPriv;
+ return S_OK;
+ }
+
+ if(IsEqualGUID(riid, &IID_IWebBrowserPriv2IE8)) {
+ /* IE8 and IE9 versions use the same IID, but have different declarations. */
+ *ppv = is_ie9plus ? (void*)&WebBrowserPriv2IE9 : (void*)&WebBrowserPriv2IE8;
+ return S_OK;
+ }
+
+ if(IsEqualGUID(riid, &IID_IWebBrowserPriv2IE7)) {
+ trace("QI(IID_IWebBrowserPriv2IE7)\n");
+ return E_NOINTERFACE;
+ }
+
+ if(IsEqualGUID(riid, &IID_IWebBrowserPriv2IE8XP)) {
+ trace("QI(IID_IWebBrowserPriv2IE8XP)\n");
+ return E_NOINTERFACE;
+ }
+
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
+ return E_NOINTERFACE;
+}
+
static HRESULT WINAPI ServiceProvider_QueryInterface(IServiceProvider *iface,
REFIID riid, void **ppv)
{
*ppv = &WebBrowser2;
return S_OK;
}
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
}
return E_NOINTERFACE;
return S_OK;
}
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
}
else if(IsEqualGUID(&IID_IDocHostUIHandlerPriv, riid))
return E_NOINTERFACE; /* ? */
else
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ trace("QI(%s)\n", wine_dbgstr_guid(riid));
if(*ppv)
return S_OK;
continue_binding(callback);
}
- return DefWindowProc(hwnd, msg, wParam, lParam);
+ return DefWindowProcW(hwnd, msg, wParam, lParam);
}
static void test_doscroll(IUnknown *unk)
"uninitialized"
};
- if(open_call)
+ if(open_call || resetting_document)
return; /* FIXME */
if(!unk)
set_clientsite = container_locked = TRUE;
- test_GetCurMoniker((IUnknown*)persist, mon, NULL);
+ test_GetCurMoniker((IUnknown*)persist, mon, NULL, FALSE);
IBindCtx_Release(bind);
#define DWL_FROM_HISTORY 0x0100
#define DWL_REFRESH 0x0200
#define DWL_EX_GETHOSTINFO 0x0400
+#define DWL_EXTERNAL 0x0800
static void test_download(DWORD flags)
{
+ const BOOL is_extern = (flags & DWL_EXTERNAL) != 0;
const BOOL is_js = (flags & DWL_JAVASCRIPT) != 0;
HWND hwnd;
BOOL *b;
MSG msg;
- b = is_js ? &called_Exec_SETDOWNLOADSTATE_0 : &called_Exec_HTTPEQUIV_DONE;
+ if(is_js)
+ b = &called_Exec_SETDOWNLOADSTATE_0;
+ else if(is_extern)
+ b = &called_NavigateWithBindCtx;
+ else
+ b = &called_Exec_HTTPEQUIV_DONE;
is_refresh = (flags & DWL_REFRESH) != 0;
hwnd = FindWindowA("Internet Explorer_Hidden", NULL);
SET_EXPECT(Invoke_OnReadyStateChange_Loading);
if(!(flags & (DWL_EMPTY|DWL_JAVASCRIPT)))
SET_EXPECT(Invoke_OnReadyStateChange_Interactive);
- if(!is_js)
+ if(!is_js && !is_extern)
SET_EXPECT(Invoke_OnReadyStateChange_Complete);
SET_EXPECT(Exec_Explorer_69);
SET_EXPECT(EnableModeless_TRUE); /* IE7 */
SET_EXPECT(Frame_EnableModeless_TRUE); /* IE7 */
SET_EXPECT(EnableModeless_FALSE); /* IE7 */
SET_EXPECT(Frame_EnableModeless_FALSE); /* IE7 */
- if((nav_url && !is_js) || (flags & (DWL_CSS|DWL_HTTP)))
+ if((nav_url && !is_js && !is_extern) || (flags & (DWL_CSS|DWL_HTTP)))
SET_EXPECT(Exec_ShellDocView_37);
if(flags & DWL_HTTP) {
if(!(flags & DWL_FROM_HISTORY))
SET_EXPECT(Exec_HTTPEQUIV);
SET_EXPECT(Exec_SETTITLE);
}
- if(!is_js)
+ if(!is_js && !is_extern)
SET_EXPECT(OnChanged_1005);
SET_EXPECT(OnChanged_READYSTATE);
SET_EXPECT(Exec_SETPROGRESSPOS);
SET_EXPECT(Exec_ShellDocView_103);
SET_EXPECT(Exec_ShellDocView_105);
SET_EXPECT(Exec_ShellDocView_140);
- if(!is_js) {
+ if(!is_js && !is_extern) {
SET_EXPECT(Exec_MSHTML_PARSECOMPLETE);
if(support_wbapp) /* Called on some Vista installations */
SET_EXPECT(CountEntries);
SET_EXPECT(Exec_Explorer_38);
SET_EXPECT(UpdateBackForwardState);
}
- if(!is_js) {
+ if(!is_js && !is_extern) {
if(!editmode && !(flags & DWL_REFRESH)) {
if(!(flags & DWL_EMPTY))
SET_EXPECT(FireNavigateComplete2);
SET_EXPECT(ActiveElementChanged);
}
SET_EXPECT(IsErrorUrl);
+ if(is_extern) {
+ SET_EXPECT(Exec_ShellDocView_62);
+ SET_EXPECT(Exec_DOCCANNAVIGATE_NULL);
+ SET_EXPECT(NavigateWithBindCtx);
+ SET_EXPECT(Exec_Explorer_38); /* todo_wine */
+ }
expect_status_text = (LPWSTR)0xdeadbeef; /* TODO */
- while(!*b && GetMessage(&msg, NULL, 0, 0)) {
+ while(!*b && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageA(&msg);
}
if(flags & DWL_REFRESH) {
}
if(flags & DWL_ONREADY_LOADING)
CHECK_CALLED(Invoke_OnReadyStateChange_Loading);
- if(!(flags & (DWL_EMPTY|DWL_JAVASCRIPT)))
- CHECK_CALLED(Invoke_OnReadyStateChange_Interactive);
- if(!is_js)
+ if(!(flags & (DWL_EMPTY|DWL_JAVASCRIPT))) {
+ if(!is_extern)
+ CHECK_CALLED(Invoke_OnReadyStateChange_Interactive);
+ else
+ todo_wine CHECK_CALLED(Invoke_OnReadyStateChange_Interactive);
+ }
+ if(!is_js && !is_extern)
CHECK_CALLED(Invoke_OnReadyStateChange_Complete);
SET_CALLED(Exec_Explorer_69);
SET_CALLED(EnableModeless_TRUE); /* IE7 */
SET_CALLED(Frame_EnableModeless_TRUE); /* IE7 */
SET_CALLED(EnableModeless_FALSE); /* IE7 */
SET_CALLED(Frame_EnableModeless_FALSE); /* IE7 */
- if(nav_url && !is_js && !(flags & DWL_REFRESH))
+ if(nav_url && !is_js && !is_extern && !(flags & DWL_REFRESH))
todo_wine CHECK_CALLED(Exec_ShellDocView_37);
else if(flags & (DWL_CSS|DWL_HTTP))
CLEAR_CALLED(Exec_ShellDocView_37); /* Called by IE9 */
CHECK_CALLED(Exec_SETTITLE);
}
if(!is_js) {
- CHECK_CALLED(OnChanged_1005);
+ if(!is_extern)
+ CHECK_CALLED(OnChanged_1005);
CHECK_CALLED(OnChanged_READYSTATE);
CHECK_CALLED(Exec_SETPROGRESSPOS);
}else {
CLEAR_CALLED(OnChanged_READYSTATE); /* sometimes called */
todo_wine CHECK_CALLED(Exec_SETPROGRESSPOS);
}
- if(!(flags & DWL_EMPTY))
- CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
+ if(!(flags & DWL_EMPTY)) {
+ if(!is_extern)
+ CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
+ else
+ todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
+ }
CLEAR_CALLED(Exec_ShellDocView_103);
CLEAR_CALLED(Exec_ShellDocView_105);
CLEAR_CALLED(Exec_ShellDocView_140);
- if(!is_js) {
+ if(!is_js && !is_extern) {
CHECK_CALLED(Exec_MSHTML_PARSECOMPLETE);
if(support_wbapp) /* Called on some Vista installations */
CLEAR_CALLED(CountEntries);
CLEAR_CALLED(UpdateUI);
CLEAR_CALLED(Exec_UPDATECOMMANDS);
CLEAR_CALLED(Exec_SETTITLE);
- if(flags & DWL_EXPECT_HISTUPDATE)
- CHECK_CALLED(Exec_Explorer_38);
+ if(flags & DWL_EXPECT_HISTUPDATE) {
+ if(flags & DWL_FROM_HISTORY)
+ CHECK_CALLED_BROKEN(Exec_Explorer_38); /* Some old IEs don't call it. */
+ else
+ CHECK_CALLED(Exec_Explorer_38);
+ }
todo_wine CHECK_CALLED_BROKEN(UpdateBackForwardState);
}
- if(!is_js) {
+ if(!is_js && !is_extern) {
if(!editmode && !(flags & DWL_REFRESH)) {
if(!(flags & DWL_EMPTY)) {
if(support_wbapp)
todo_wine CHECK_CALLED(ActiveElementChanged);
}
todo_wine CHECK_CALLED_BROKEN(IsErrorUrl);
+ if(is_extern) {
+ CHECK_CALLED(Exec_ShellDocView_62);
+ CHECK_CALLED(Exec_DOCCANNAVIGATE_NULL);
+ CHECK_CALLED(NavigateWithBindCtx);
+ todo_wine CHECK_NOT_CALLED(Exec_Explorer_38);
+ }
- load_state = LD_COMPLETE;
+ if(!is_extern)
+ load_state = LD_COMPLETE;
test_readyState(NULL);
}
}
if(doc_mon) {
- test_GetCurMoniker(doc_unk, doc_mon, NULL);
+ test_GetCurMoniker(doc_unk, doc_mon, NULL, FALSE);
doc_mon = NULL;
}
ok(!strcmp_wa(str2, prev_nav_url), "unexpected address bar url: %s, expected %s\n", wine_dbgstr_w(str2), prev_nav_url);
SysFreeString(str2);
- if(is_js)
+ if(is_js) {
ignore_external_qi = TRUE;
- test_download(DWL_VERBDONE | (is_js ? DWL_JAVASCRIPT : DWL_ONREADY_LOADING|DWL_EX_GETHOSTINFO) | dwl_flags);
+ dwl_flags |= DWL_JAVASCRIPT;
+ }else {
+ if(!(dwl_flags & DWL_EXTERNAL))
+ dwl_flags |= DWL_EX_GETHOSTINFO;
+ dwl_flags |= DWL_ONREADY_LOADING;
+ }
+ test_download(DWL_VERBDONE | dwl_flags);
if(is_js)
ignore_external_qi = FALSE;
ok(hres == S_OK, "GetAddressBarUrl failed: %08x\n", hres);
if(is_js)
ok(!strcmp_wa(str2, prev_nav_url), "unexpected address bar url: %s\n", wine_dbgstr_w(str2));
+ else if (dwl_flags & DWL_EXTERNAL)
+ todo_wine ok(!strcmp_wa(str2, prev_nav_url), "unexpected address bar url: %s\n", wine_dbgstr_w(str2));
else
ok(!strcmp_wa(str2, nav_url), "unexpected address bar url: %s\n", wine_dbgstr_w(str2));
SysFreeString(str2);
IHTMLWindow2_Release(top_window);
if(hres == E_NOINTERFACE) {
win_skip("ITravelLogClient not supported\n");
+ no_travellog = TRUE;
return;
}
ok(hres == S_OK, "Could not get ITraveLogClient iface: %08x\n", hres);
todo_wine CHECK_CALLED(GetPendingUrl);
test_timer(EXPECT_SETTITLE);
- test_GetCurMoniker((IUnknown*)doc, NULL, "about:blank");
+ test_GetCurMoniker((IUnknown*)doc, NULL, "about:blank", FALSE);
IPersistStreamInit_Release(init);
}
todo_wine CHECK_CALLED(GetPendingUrl);
test_timer(EXPECT_SETTITLE);
- test_GetCurMoniker((IUnknown*)doc, NULL, "about:blank");
+ test_GetCurMoniker((IUnknown*)doc, NULL, "about:blank", FALSE);
IPersistStreamInit_Release(init);
}
ipsex = FALSE;
inplace_deactivated = FALSE;
complete = FALSE;
+ testing_submit = FALSE;
expect_uihandler_iface = &DocHostUIHandler;
}
test_external(doc, FALSE);
test_ViewAdviseSink(doc);
test_ConnectionPointContainer(doc);
- test_GetCurMoniker((IUnknown*)doc, NULL, NULL);
+ test_GetCurMoniker((IUnknown*)doc, NULL, NULL, FALSE);
test_Persist(doc, &Moniker);
if(!do_load)
test_OnAmbientPropertyChange2(doc);
if(do_load) {
set_custom_uihandler(doc, &CustomDocHostUIHandler);
test_download(DWL_CSS|DWL_TRYCSS);
- test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL);
+ test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL, FALSE);
test_elem_from_point(doc);
}
test_CloseView();
test_Close(doc, TRUE);
test_OnAmbientPropertyChange2(doc);
- test_GetCurMoniker((IUnknown*)doc, do_load ? &Moniker : NULL, NULL);
+ test_GetCurMoniker((IUnknown*)doc, do_load ? &Moniker : NULL, NULL, FALSE);
if(!do_load) {
/* Activate HTMLDocument again, calling UIActivate after showing the window */
set_custom_uihandler(doc, &CustomDocHostUIHandler);
test_ViewAdviseSink(doc);
test_ConnectionPointContainer(doc);
- test_GetCurMoniker((IUnknown*)doc, NULL, NULL);
+ test_GetCurMoniker((IUnknown*)doc, NULL, NULL, FALSE);
test_Persist(doc, &Moniker);
test_Navigate(doc);
test_InPlaceDeactivate(doc, TRUE);
test_Close(doc, FALSE);
test_IsDirty(doc, S_FALSE);
- test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL);
+ test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL, FALSE);
test_clear(doc);
- test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL);
+ test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL, FALSE);
if(view)
IOleDocumentView_Release(view);
b = InternetGetCookieW(http_urlW, NULL, buf, &size);
ok(b, "InternetGetCookieW failed: %08x\n", GetLastError());
ok(!lstrcmpW(buf, str2), "cookie = %s, expected %s\n", wine_dbgstr_w(str2), wine_dbgstr_w(buf));
- ok(strstrW(str2, str) != NULL, "could not find %s in %s\n", wine_dbgstr_w(str), wine_dbgstr_w(str2));
+ if(str2)
+ ok(strstrW(str2, str) != NULL, "could not find %s in %s\n", wine_dbgstr_w(str), wine_dbgstr_w(str2));
SysFreeString(str);
SysFreeString(str2);
b = InternetGetCookieW(http_urlW, NULL, buf, &size);
ok(b, "InternetGetCookieW failed: %08x\n", GetLastError());
ok(!lstrcmpW(buf, str2), "cookie = %s, expected %s\n", wine_dbgstr_w(str2), wine_dbgstr_w(buf));
- ok(strstrW(str2, str) != NULL, "could not find %s in %s\n", wine_dbgstr_w(str), wine_dbgstr_w(str2));
+ if(str2)
+ ok(strstrW(str2, str) != NULL, "could not find %s in %s\n", wine_dbgstr_w(str), wine_dbgstr_w(str2));
SysFreeString(str);
SysFreeString(str2);
}
test_ViewAdviseSink(doc);
test_ConnectionPointContainer(doc);
- test_GetCurMoniker((IUnknown*)doc, NULL, NULL);
+ test_GetCurMoniker((IUnknown*)doc, NULL, NULL, FALSE);
test_Persist(doc, http_mon);
test_Navigate(doc);
test_download(DWL_HTTP);
test_cookies(doc);
test_IsDirty(doc, S_FALSE);
test_MSHTML_QueryStatus(doc, OLECMDF_SUPPORTED);
- test_GetCurMoniker((IUnknown*)doc, http_mon, NULL);
+ test_GetCurMoniker((IUnknown*)doc, http_mon, NULL, FALSE);
test_travellog(doc);
test_binding_ui((IUnknown*)doc);
test_open_window(doc, TRUE);
if(!support_wbapp) /* FIXME */
test_open_window(doc, FALSE);
- if(support_wbapp)
+ if(support_wbapp) {
+ test_put_href(doc, FALSE, NULL, "http://test.winehq.org/tests/file.winetest", FALSE, FALSE, DWL_EXTERNAL);
test_window_close(doc);
+ }
test_InPlaceDeactivate(doc, TRUE);
test_Close(doc, FALSE);
test_IsDirty(doc, S_FALSE);
- test_GetCurMoniker((IUnknown*)doc, NULL, prev_url);
+ test_GetCurMoniker((IUnknown*)doc, NULL, prev_url, support_wbapp);
if(view)
IOleDocumentView_Release(view);
ok(!ref, "ref=%d, expected 0\n", ref);
}
+static void put_inner_html(IHTMLElement *elem, const char *html)
+{
+ BSTR str = a2bstr(html);
+ HRESULT hres;
+
+ hres = IHTMLElement_put_innerHTML(elem, str);
+ ok(hres == S_OK, "put_innerHTML failed: %08x\n", hres);
+
+ SysFreeString(str);
+}
+
+static IHTMLElement *get_elem_by_id(IHTMLDocument2 *doc, const char *id)
+{
+ IHTMLDocument3 *doc3;
+ BSTR str = a2bstr(id);
+ IHTMLElement *ret;
+ HRESULT hres;
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**)&doc3);
+ ok(hres == S_OK, "Could not get IHTMLDocument3 iface: %08x\n", hres);
+
+ hres = IHTMLDocument3_getElementById(doc3, str, &ret);
+ ok(hres == S_OK, "getElementById failed: %08x\n", hres);
+
+ IHTMLDocument3_Release(doc3);
+ return ret;
+}
+
+static void reset_document(IHTMLDocument2 *doc)
+{
+ IPersistStreamInit *init;
+ HRESULT hres;
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IPersistStreamInit, (void**)&init);
+ ok(hres == S_OK, "QueryInterface(IID_IPersistStreamInit) failed: %08x\n", hres);
+ if(FAILED(hres))
+ return;
+
+ resetting_document = TRUE;
+
+ hres = IPersistStreamInit_InitNew(init);
+ ok(hres == S_OK, "Load failed: %08x\n", hres);
+
+ resetting_document = FALSE;
+
+ test_GetCurMoniker((IUnknown*)doc, NULL, "about:blank", FALSE);
+
+ IPersistStreamInit_Release(init);
+}
+
+static void test_submit(void)
+{
+ IHTMLElement *body, *form_elem;
+ IHTMLFormElement *form;
+ IHTMLDocument2 *doc;
+ HRESULT hres;
+
+ if(no_travellog)
+ return;
+
+ trace("Testing submit...\n");
+
+ support_wbapp = TRUE;
+
+ if(!winetest_interactive && is_ie_hardened()) {
+ win_skip("IE running in Enhanced Security Configuration\n");
+ return;
+ }
+
+ init_test(LD_DOLOAD);
+ ipsex = TRUE;
+
+ doc = create_document();
+ doc_unk = (IUnknown*)doc;
+
+ test_ConnectionPointContainer(doc);
+ test_ViewAdviseSink(doc);
+ test_Persist(doc, &Moniker);
+ test_Navigate(doc);
+ test_download(DWL_CSS|DWL_TRYCSS);
+
+ hres = IHTMLDocument2_get_body(doc, &body);
+ ok(hres == S_OK, "get_body failed: %08x\n", hres);
+ ok(body != NULL, "body = NULL\n");
+
+ put_inner_html(body, "<form action='test_submit' method='post' id='fid'><input type='hidden' name='cmd' value='TEST'></form>");
+ IHTMLElement_Release(body);
+
+ form_elem = get_elem_by_id(doc, "fid");
+ ok(form_elem != NULL, "form = NULL\n");
+
+ hres = IHTMLElement_QueryInterface(form_elem, &IID_IHTMLFormElement, (void**)&form);
+ ok(hres == S_OK, "Could not get IHTMLFormElement: %08x\n", hres);
+ IHTMLElement_Release(form_elem);
+
+ nav_url = nav_serv_url = "winetest:test_submit";
+ testing_submit = TRUE;
+
+ SET_EXPECT(TranslateUrl);
+ SET_EXPECT(FireBeforeNavigate2);
+ SET_EXPECT(Exec_ShellDocView_67);
+ SET_EXPECT(Invoke_AMBIENT_SILENT);
+ SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+ SET_EXPECT(Exec_ShellDocView_63);
+ SET_EXPECT(Exec_ShellDocView_84);
+ SET_EXPECT(CreateInstance);
+ SET_EXPECT(Start);
+ SET_EXPECT(Protocol_Read);
+ SET_EXPECT(LockRequest);
+ SET_EXPECT(GetClassID);
+ SET_EXPECT(Exec_ShellDocView_138);
+ SET_EXPECT(OnViewChange);
+
+ SET_EXPECT(UnlockRequest);
+ SET_EXPECT(Terminate);
+
+ hres = IHTMLFormElement_submit(form);
+ ok(hres == S_OK, "submit failed: %08x\n", hres);
+
+ CHECK_CALLED(TranslateUrl);
+ CHECK_CALLED(FireBeforeNavigate2);
+ CHECK_CALLED(Exec_ShellDocView_67);
+ CHECK_CALLED(Invoke_AMBIENT_SILENT);
+ CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
+ CHECK_CALLED(Exec_ShellDocView_63);
+ todo_wine CHECK_CALLED(Exec_ShellDocView_84);
+ CHECK_CALLED(CreateInstance);
+ CHECK_CALLED(Start);
+ CHECK_CALLED(Protocol_Read);
+ CHECK_CALLED(LockRequest);
+ todo_wine CHECK_CALLED(GetClassID);
+ CLEAR_CALLED(Exec_ShellDocView_138); /* called only by some versions */
+ CLEAR_CALLED(OnViewChange); /* called only by some versions */
+
+ todo_wine CHECK_NOT_CALLED(UnlockRequest);
+ todo_wine CHECK_NOT_CALLED(Terminate);
+
+ IHTMLFormElement_Release(form);
+
+ test_GetCurMoniker((IUnknown*)doc, &Moniker, NULL, FALSE);
+
+ SET_EXPECT(UnlockRequest);
+ reset_document(doc);
+ todo_wine CHECK_CALLED(UnlockRequest);
+
+ test_InPlaceDeactivate(doc, TRUE);
+ test_Close(doc, FALSE);
+
+ if(view)
+ IOleDocumentView_Release(view);
+ view = NULL;
+
+ release_document(doc);
+}
+
static void test_QueryService(IHTMLDocument2 *doc, BOOL success)
{
IHTMLWindow2 *window, *sp_window;
test_DoVerb(oleobj);
test_MSHTML_QueryStatus(doc, OLECMDF_SUPPORTED);
- test_GetCurMoniker((IUnknown*)doc, NULL, NULL);
+ test_GetCurMoniker((IUnknown*)doc, NULL, NULL, FALSE);
test_StreamLoad(doc);
test_download(DWL_VERBDONE|DWL_TRYCSS);
test_MSHTML_QueryStatus(doc, OLECMDF_SUPPORTED);
IOleObject_Release(oleobj);
- test_GetCurMoniker((IUnknown*)doc, NULL, NULL);
+ test_GetCurMoniker((IUnknown*)doc, NULL, NULL, FALSE);
test_StreamInitNew(doc);
SET_EXPECT(Invoke_OnReadyStateChange_Interactive);
{
IHTMLDocument2 *doc;
IHTMLDocument5 *doc5;
+ IHTMLDocument7 *doc7;
HRESULT hres;
doc = create_document();
if(!doc)
return FALSE;
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument7, (void**)&doc7);
+ if(SUCCEEDED(hres)) {
+ is_ie9plus = TRUE;
+ IHTMLDocument7_Release(doc7);
+ }
+
+ trace("is_ie9plus %x\n", is_ie9plus);
+
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
if(SUCCEEDED(hres))
IHTMLDocument5_Release(doc5);
skip("Skipping test_HTMLDocument_http(TRUE). ROSTESTS-113.\n");
}
+ test_submit();
test_UIActivate(FALSE, FALSE, FALSE);
test_UIActivate(FALSE, TRUE, FALSE);
test_UIActivate(FALSE, TRUE, TRUE);
DWORD ie_harden, type, size;
ie_harden = 0;
- if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
+ if(RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
0, KEY_QUERY_VALUE, &zone_map) == ERROR_SUCCESS) {
size = sizeof(DWORD);
- if (RegQueryValueEx(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
+ if (RegQueryValueExA(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
type != REG_DWORD) {
ie_harden = 0;
}
--- /dev/null
+<html>
+<head>
+<script>
+function ok(b,m) {
+ return external.ok(b, m);
+}
+
+function nav_back_test() {
+ external.trace("Running _parent navigation tests...");
+
+ var iframe = document.getElementById("testframe");
+ var subframe = iframe.contentWindow.document.createElement("iframe");
+
+ subframe.onload = function() {
+ var doc = subframe.contentWindow.document;
+ doc.body.innerHTML = '<a href="blank2.html" id="aid" target="_parent">test</a>';
+ doc.getElementById("aid").click();
+ }
+
+ iframe.onload = function() {
+ var href = iframe.contentWindow.location.href;
+ ok(/.*blank2.html/.test(href), "Unexpected href " + href);
+ next_test();
+ }
+
+ iframe.contentWindow.document.body.appendChild(subframe);
+ subframe.src = "blank.html";
+}
+
+var tests = [
+ nav_back_test,
+ function() { external.reportSuccess(); }
+];
+
+function next_test() {
+ window.setTimeout(tests.shift(), 0);
+}
+</script>
+<body onload="next_test()">
+<iframe src="about:blank" id="testframe"></iframe>
+</body>
+</html>
//#include "windef.h"
//#include "winbase.h"
//#include "ole2.h"
-//#include "urlmon.h"
+#include <urlmon.h>
#include <shlwapi.h>
#include <wininet.h>
static WCHAR res_url_base[INTERNET_MAX_URL_LENGTH] = {'r','e','s',':','/','/'};
static unsigned res_url_base_len;
-static const char *debugstr_guid(REFIID riid)
-{
- static char buf[50];
-
- sprintf(buf, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
- riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
- riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
- riid->Data4[5], riid->Data4[6], riid->Data4[7]);
-
- return buf;
-}
-
static HRESULT WINAPI ProtocolSink_QueryInterface(IInternetProtocolSink *iface, REFIID riid, void **ppv)
{
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocolSink, riid)) {
}
*ppv = NULL;
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
}
*ppv = NULL;
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
/* @makedep: externscr.js */
externscr.js HTML "externscr.js"
+/* @makedep: nav_test.html */
+nav_test.html HTML "nav_test.html"
+
+/* @makedep: blank.html */
+blank.html HTML "blank.html"
+
+/* @makedep: blank.html */
+blank2.html HTML "blank.html"
+
/* @makedep: test_tlb.tlb */
1 TYPELIB test_tlb.tlb
static const GUID CLSID_TestActiveX =
{0x178fc163,0xf585,0x4e24,{0x9c,0x13,0x4b,0xb7,0xfa,0xf8,0x06,0x46}};
+static BOOL is_ie9plus;
static IHTMLDocument2 *notif_doc;
static IOleDocumentView *view;
static IDispatchEx *window_dispex;
static HRESULT ax_setopt_disp_caller_hres = S_OK, ax_setopt_disp_data_hres = S_OK;
static BOOL skip_loadobject_tests;
-static const char *debugstr_guid(REFIID riid)
-{
- static char buf[50];
-
- sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
- riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
- riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
- riid->Data4[5], riid->Data4[6], riid->Data4[7]);
-
- return buf;
-}
-
static int strcmp_wa(LPCWSTR strw, const char *stra)
{
CHAR buf[512];
DWORD res;
if(!init) {
- RegDeleteKey(HKEY_CLASSES_ROOT, key_name);
+ RegDeleteKeyA(HKEY_CLASSES_ROOT, key_name);
return TRUE;
}
static HRESULT WINAPI VariantChangeType_QueryInterface(IVariantChangeType *iface, REFIID riid, void **ppv)
{
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
*ppv = NULL;
return E_NOINTERFACE;
}
{
if(IsEqualGUID(guidService, &SID_VariantConversion)) {
CHECK_EXPECT(QS_VariantConversion);
- ok(IsEqualGUID(riid, &IID_IVariantChangeType), "uenxpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(riid, &IID_IVariantChangeType), "uenxpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = &VChangeType;
return S_OK;
}
- ok(0, "unexpected service %s\n", debugstr_guid(guidService));
+ ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
return E_NOINTERFACE;
}
static IHTMLDocument2 *create_document(void)
{
IHTMLDocument2 *doc;
- IHTMLDocument5 *doc5;
HRESULT hres;
hres = CoCreateInstance(&CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IHTMLDocument2, (void**)&doc);
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
- if (hres != S_OK) return NULL;
-
- hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
- if(FAILED(hres)) {
- win_skip("Could not get IHTMLDocument5, probably too old IE\n");
- IHTMLDocument2_Release(doc);
- return NULL;
- }
-
- IHTMLDocument5_Release(doc5);
- return doc;
+ return SUCCEEDED(hres) ? doc : NULL;
}
static void load_string(IHTMLDocument2 *doc, const char *str)
load_string(doc, str);
do_advise(doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
- while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
+ while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
hres = IHTMLDocument2_get_body(doc, &body);
static HRESULT WINAPI ObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
{
*ppv = NULL;
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
{
CHECK_EXPECT(GetInterfaceSafetyOptions);
- ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
{
CHECK_EXPECT(SetInterfaceSafetyOptions);
- ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IActiveScriptParse, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(dwOptionSetMask == (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER),
"dwOptionSetMask=%x\n", dwOptionSetMask);
return S_OK;
}
- ok(0, "unexpected call %s\n", debugstr_guid(riid));
+ ok(0, "unexpected call %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
{
CHECK_EXPECT(AXGetInterfaceSafetyOptions);
- ok(IsEqualGUID(&IID_IDispatchEx, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IDispatchEx, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
ok(pdwSupportedOptions != NULL, "pdwSupportedOptions == NULL\n");
ok(pdwEnabledOptions != NULL, "pdwEnabledOptions == NULL\n");
return hres;
}
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
if(IsEqualGUID(&IID_IActiveScriptDebug, riid))
return E_NOINTERFACE;
- trace("QI(%s)\n", debugstr_guid(riid));
+ trace("QI(%s)\n", wine_dbgstr_guid(riid));
return E_NOINTERFACE;
}
if(IsEqualGUID(&CLSID_IdentityUnmarshal, riid))
return E_NOINTERFACE;
- ok(0, "unexpected riid %s\n", debugstr_guid(riid));
+ ok(0, "unexpected riid %s\n", wine_dbgstr_guid(riid));
return E_NOTIMPL;
}
CHECK_EXPECT(CreateInstance);
ok(!outer, "outer = %p\n", outer);
- ok(IsEqualGUID(&IID_IActiveScript, riid), "unexpected riid %s\n", debugstr_guid(riid));
+ ok(IsEqualGUID(&IID_IActiveScript, riid), "unexpected riid %s\n", wine_dbgstr_guid(riid));
*ppv = &ActiveScript;
return S_OK;
}
SET_EXPECT(external_success);
- while(!called_external_success && GetMessage(&msg, NULL, 0, 0)) {
+ while(!called_external_success && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
CHECK_CALLED(external_success);
run_js_script("exectest.html");
run_js_script("vbtest.html");
run_js_script("events.html");
+ if(is_ie9plus)
+ run_js_script("nav_test.html");
+ else
+ win_skip("Skipping nav_test.html on IE older than 9 (for broken ieframe onload).\n");
}
static BOOL init_registry(BOOL init)
static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- return DefWindowProc(hwnd, msg, wParam, lParam);
+ return DefWindowProcA(hwnd, msg, wParam, lParam);
}
static HWND create_container_window(void)
300, 300, NULL, NULL, NULL, NULL);
}
+static BOOL check_ie(void)
+{
+ IHTMLDocument2 *doc;
+ IHTMLDocument5 *doc5;
+ IHTMLDocument7 *doc7;
+ HRESULT hres;
+
+ doc = create_document();
+ if(!doc)
+ return FALSE;
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument7, (void**)&doc7);
+ if(SUCCEEDED(hres)) {
+ is_ie9plus = TRUE;
+ IHTMLDocument7_Release(doc7);
+ }
+
+ trace("is_ie9plus %x\n", is_ie9plus);
+
+ hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
+ if(SUCCEEDED(hres))
+ IHTMLDocument5_Release(doc5);
+
+ IHTMLDocument2_Release(doc);
+ return SUCCEEDED(hres);
+}
+
START_TEST(script)
{
CoInitialize(NULL);
container_hwnd = create_container_window();
- if(winetest_interactive || ! is_ie_hardened()) {
- if(register_script_engine()) {
- test_simple_script();
- init_registry(FALSE);
+ if(check_ie()) {
+ if(winetest_interactive || ! is_ie_hardened()) {
+ if(register_script_engine()) {
+ test_simple_script();
+ init_registry(FALSE);
+ }else {
+ skip("Could not register TestScript engine\n");
+ }
+ run_js_tests();
}else {
- skip("Could not register TestScript engine\n");
+ skip("IE running in Enhanced Security Configuration\n");
}
- run_js_tests();
}else {
- skip("IE running in Enhanced Security Configuration\n");
+ win_skip("Too old IE.\n");
}
DestroyWindow(container_hwnd);
return lstrcmpA(stra, buf);
}
+static BOOL wstr_contains(const WCHAR *strw, const char *stra)
+{
+ CHAR buf[512];
+ WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
+ return strstr(buf, stra) != NULL;
+}
+
static BSTR a2bstr(const char *str)
{
BSTR ret;
VariantClear(&vdefault);
}
+static void test_style6(IHTMLStyle6 *style)
+{
+ BSTR str;
+ HRESULT hres;
+
+ str = (void*)0xdeadbeef;
+ hres = IHTMLStyle6_get_outline(style, &str);
+ ok(hres == S_OK, "get_outline failed: %08x\n", hres);
+ ok(str && !*str, "outline = %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
+ str = a2bstr("1px");
+ hres = IHTMLStyle6_put_outline(style, str);
+ ok(hres == S_OK, "put_outline failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = (void*)0xdeadbeef;
+ hres = IHTMLStyle6_get_outline(style, &str);
+ ok(hres == S_OK, "get_outline failed: %08x\n", hres);
+ ok(wstr_contains(str, "1px"), "outline = %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
+ str = (void*)0xdeadbeef;
+ hres = IHTMLStyle6_get_boxSizing(style, &str);
+ ok(hres == S_OK, "get_boxSizing failed: %08x\n", hres);
+ ok(!str, "boxSizing = %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
+ str = a2bstr("border-box");
+ hres = IHTMLStyle6_put_boxSizing(style, str);
+ ok(hres == S_OK, "put_boxSizing failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = NULL;
+ hres = IHTMLStyle6_get_boxSizing(style, &str);
+ ok(hres == S_OK, "get_boxSizing failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "border-box"), "boxSizing = %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+}
+
static void test_body_style(IHTMLStyle *style)
{
IHTMLStyle2 *style2;
IHTMLStyle3 *style3;
IHTMLStyle4 *style4;
+ IHTMLStyle6 *style6;
VARIANT_BOOL b;
VARIANT v;
BSTR str;
ok(!strcmp_wa(str, "nowrap"), "whiteSpace = %s\n", wine_dbgstr_w(str));
SysFreeString(str);
+ /* listStyleType */
+ hres = IHTMLStyle_get_listStyleType(style, &str);
+ ok(hres == S_OK, "get_listStyleType failed: %08x\n", hres);
+ ok(!str, "listStyleType = %s\n", wine_dbgstr_w(str));
+
+ str = a2bstr("square");
+ hres = IHTMLStyle_put_listStyleType(style, str);
+ ok(hres == S_OK, "put_listStyleType failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = NULL;
+ hres = IHTMLStyle_get_listStyleType(style, &str);
+ ok(hres == S_OK, "get_listStyleType failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "square"), "listStyleType = %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle2, (void**)&style2);
ok(hres == S_OK, "Could not get IHTMLStyle2 iface: %08x\n", hres);
if(SUCCEEDED(hres)) {
test_style4(style4);
IHTMLStyle4_Release(style4);
}
+
+ hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle6, (void**)&style6);
+ if(SUCCEEDED(hres)) {
+ test_style6(style6);
+ IHTMLStyle6_Release(style6);
+ }else {
+ win_skip("IHTMLStyle6 not available\n");
+ }
}
#define test_style_filter(a,b) _test_style_filter(__LINE__,a,b)
do_advise((IUnknown*)doc, &IID_IPropertyNotifySink, (IUnknown*)&PropertyNotifySink);
- while(!doc_complete && GetMessage(&msg, NULL, 0, 0)) {
+ while(!doc_complete && GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
- DispatchMessage(&msg);
+ DispatchMessageW(&msg);
}
test(doc);
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#pragma makedep typelib
+
import "oaidl.idl";
[