1 /* 2 * XML test 3 * 4 * Copyright 2010-2012 Nikolay Sivov for CodeWeavers 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 */ 20 21 #define WIN32_NO_STATUS 22 #define _INC_WINDOWS 23 #define COM_NO_WINDOWS_H 24 25 #define COBJMACROS 26 #define CONST_VTABLE 27 28 #include <stdio.h> 29 #include <assert.h> 30 31 //#include "windows.h" 32 33 #include <wine/test.h> 34 35 #include <winnls.h> 36 #include <wingdi.h> 37 #include <ole2.h> 38 //#include "msxml2.h" 39 //#include "msxml2did.h" 40 //#include "dispex.h" 41 #include <initguid.h> 42 #include <objsafe.h> 43 #include <mshtml.h> 44 45 46 #define EXPECT_HR(hr,hr_exp) \ 47 ok(hr == hr_exp, "got 0x%08x, expected 0x%08x\n", hr, hr_exp) 48 49 #define EXPECT_REF(node,ref) _expect_ref((IUnknown*)node, ref, __LINE__) 50 static void _expect_ref(IUnknown* obj, ULONG ref, int line) 51 { 52 ULONG rc; 53 IUnknown_AddRef(obj); 54 rc = IUnknown_Release(obj); 55 ok_(__FILE__, line)(rc == ref, "expected refcount %d, got %d\n", ref, rc); 56 } 57 58 DEFINE_GUID(SID_SContainerDispatch, 0xb722be00, 0x4e68, 0x101b, 0xa2, 0xbc, 0x00, 0xaa, 0x00, 0x40, 0x47, 0x70); 59 DEFINE_GUID(SID_UnknownSID, 0x75dd09cb, 0x6c40, 0x11d5, 0x85, 0x43, 0x00, 0xc0, 0x4f, 0xa0, 0xfb, 0xa3); 60 61 static BOOL g_enablecallchecks; 62 63 #define DEFINE_EXPECT(func) \ 64 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE 65 66 #define SET_EXPECT(func) \ 67 expect_ ## func = TRUE 68 69 #define CHECK_EXPECT2(func) \ 70 do { \ 71 if (g_enablecallchecks) \ 72 ok(expect_ ##func, "unexpected call " #func "\n"); \ 73 called_ ## func = TRUE; \ 74 }while(0) 75 76 #define CHECK_CALLED(func) \ 77 do { \ 78 ok(called_ ## func, "expected " #func "\n"); \ 79 expect_ ## func = called_ ## func = FALSE; \ 80 }while(0) 81 82 /* object site */ 83 DEFINE_EXPECT(site_qi_IServiceProvider); 84 DEFINE_EXPECT(site_qi_IXMLDOMDocument); 85 DEFINE_EXPECT(site_qi_IOleClientSite); 86 87 DEFINE_EXPECT(sp_queryservice_SID_SBindHost); 88 DEFINE_EXPECT(sp_queryservice_SID_SContainerDispatch_htmldoc2); 89 DEFINE_EXPECT(sp_queryservice_SID_secmgr_htmldoc2); 90 DEFINE_EXPECT(sp_queryservice_SID_secmgr_xmldomdoc); 91 DEFINE_EXPECT(sp_queryservice_SID_secmgr_secmgr); 92 93 DEFINE_EXPECT(htmldoc2_get_all); 94 DEFINE_EXPECT(htmldoc2_get_url); 95 DEFINE_EXPECT(collection_get_length); 96 97 static int g_unexpectedcall, g_expectedcall; 98 99 static BSTR alloc_str_from_narrow(const char *str) 100 { 101 int len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); 102 BSTR ret = SysAllocStringLen(NULL, len - 1); /* NUL character added automatically */ 103 MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len-1); 104 return ret; 105 } 106 107 static BSTR alloced_bstrs[256]; 108 static int alloced_bstrs_count; 109 110 static BSTR _bstr_(const char *str) 111 { 112 if(!str) 113 return NULL; 114 115 assert(alloced_bstrs_count < sizeof(alloced_bstrs)/sizeof(alloced_bstrs[0])); 116 alloced_bstrs[alloced_bstrs_count] = alloc_str_from_narrow(str); 117 return alloced_bstrs[alloced_bstrs_count++]; 118 } 119 120 static void free_bstrs(void) 121 { 122 int i; 123 for (i = 0; i < alloced_bstrs_count; i++) 124 SysFreeString(alloced_bstrs[i]); 125 alloced_bstrs_count = 0; 126 } 127 128 static BSTR a2bstr(const char *str) 129 { 130 BSTR ret; 131 int len; 132 133 if(!str) 134 return NULL; 135 136 len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0); 137 ret = SysAllocStringLen(NULL, len); 138 MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len); 139 140 return ret; 141 } 142 143 144 /* test IHTMLElementCollection */ 145 static HRESULT WINAPI htmlecoll_QueryInterface(IHTMLElementCollection *iface, REFIID riid, void **ppvObject) 146 { 147 ok(0, "unexpected call\n"); 148 *ppvObject = NULL; 149 return E_NOINTERFACE; 150 } 151 152 static ULONG WINAPI htmlecoll_AddRef(IHTMLElementCollection *iface) 153 { 154 return 2; 155 } 156 157 static ULONG WINAPI htmlecoll_Release(IHTMLElementCollection *iface) 158 { 159 return 1; 160 } 161 162 static HRESULT WINAPI htmlecoll_GetTypeInfoCount(IHTMLElementCollection *iface, UINT *pctinfo) 163 { 164 ok(0, "unexpected call\n"); 165 return E_NOTIMPL; 166 } 167 168 static HRESULT WINAPI htmlecoll_GetTypeInfo(IHTMLElementCollection *iface, UINT iTInfo, 169 LCID lcid, ITypeInfo **ppTInfo) 170 { 171 ok(0, "unexpected call\n"); 172 return E_NOTIMPL; 173 } 174 175 static HRESULT WINAPI htmlecoll_GetIDsOfNames(IHTMLElementCollection *iface, REFIID riid, 176 LPOLESTR *rgszNames, UINT cNames, 177 LCID lcid, DISPID *rgDispId) 178 { 179 ok(0, "unexpected call\n"); 180 return E_NOTIMPL; 181 } 182 183 static HRESULT WINAPI htmlecoll_Invoke(IHTMLElementCollection *iface, DISPID dispIdMember, 184 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, 185 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 186 { 187 ok(0, "unexpected call\n"); 188 return E_NOTIMPL; 189 } 190 191 static HRESULT WINAPI htmlecoll_toString(IHTMLElementCollection *iface, BSTR *String) 192 { 193 ok(0, "unexpected call\n"); 194 return E_NOTIMPL; 195 } 196 197 static HRESULT WINAPI htmlecoll_put_length(IHTMLElementCollection *iface, LONG v) 198 { 199 ok(0, "unexpected call\n"); 200 return E_NOTIMPL; 201 } 202 203 static HRESULT WINAPI htmlecoll_get_length(IHTMLElementCollection *iface, LONG *v) 204 { 205 CHECK_EXPECT2(collection_get_length); 206 return E_NOTIMPL; 207 } 208 209 static HRESULT WINAPI htmlecoll_get__newEnum(IHTMLElementCollection *iface, IUnknown **p) 210 { 211 ok(0, "unexpected call\n"); 212 return E_NOTIMPL; 213 } 214 215 static HRESULT WINAPI htmlecoll_item(IHTMLElementCollection *iface, VARIANT name, VARIANT index, IDispatch **pdisp) 216 { 217 ok(0, "unexpected call\n"); 218 return E_NOTIMPL; 219 } 220 221 static HRESULT WINAPI htmlecoll_tags(IHTMLElementCollection *iface, VARIANT tagName, IDispatch **pdisp) 222 { 223 ok(0, "unexpected call\n"); 224 return E_NOTIMPL; 225 } 226 227 static const IHTMLElementCollectionVtbl TestHTMLECollectionVtbl = { 228 htmlecoll_QueryInterface, 229 htmlecoll_AddRef, 230 htmlecoll_Release, 231 htmlecoll_GetTypeInfoCount, 232 htmlecoll_GetTypeInfo, 233 htmlecoll_GetIDsOfNames, 234 htmlecoll_Invoke, 235 htmlecoll_toString, 236 htmlecoll_put_length, 237 htmlecoll_get_length, 238 htmlecoll_get__newEnum, 239 htmlecoll_item, 240 htmlecoll_tags 241 }; 242 243 static IHTMLElementCollection htmlecoll = { &TestHTMLECollectionVtbl }; 244 245 /* test IHTMLDocument2 */ 246 static HRESULT WINAPI htmldoc2_QueryInterface(IHTMLDocument2 *iface, REFIID riid, void **ppvObject) 247 { 248 trace("\n"); 249 *ppvObject = NULL; 250 return E_NOINTERFACE; 251 } 252 253 static ULONG WINAPI htmldoc2_AddRef(IHTMLDocument2 *iface) 254 { 255 return 2; 256 } 257 258 static ULONG WINAPI htmldoc2_Release(IHTMLDocument2 *iface) 259 { 260 return 1; 261 } 262 263 static HRESULT WINAPI htmldoc2_GetTypeInfoCount(IHTMLDocument2 *iface, UINT *pctinfo) 264 { 265 ok(0, "unexpected call\n"); 266 return E_NOTIMPL; 267 } 268 269 static HRESULT WINAPI htmldoc2_GetTypeInfo(IHTMLDocument2 *iface, UINT iTInfo, 270 LCID lcid, ITypeInfo **ppTInfo) 271 { 272 ok(0, "unexpected call\n"); 273 return E_NOTIMPL; 274 } 275 276 static HRESULT WINAPI htmldoc2_GetIDsOfNames(IHTMLDocument2 *iface, REFIID riid, 277 LPOLESTR *rgszNames, UINT cNames, 278 LCID lcid, DISPID *rgDispId) 279 { 280 ok(0, "unexpected call\n"); 281 return E_NOTIMPL; 282 } 283 284 static HRESULT WINAPI htmldoc2_Invoke(IHTMLDocument2 *iface, DISPID dispIdMember, 285 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, 286 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 287 { 288 ok(0, "unexpected call\n"); 289 return E_NOTIMPL; 290 } 291 292 static HRESULT WINAPI htmldoc2_get_Script(IHTMLDocument2 *iface, IDispatch **p) 293 { 294 ok(0, "unexpected call\n"); 295 return E_NOTIMPL; 296 } 297 298 static HRESULT WINAPI htmldoc2_get_all(IHTMLDocument2 *iface, IHTMLElementCollection **p) 299 { 300 CHECK_EXPECT2(htmldoc2_get_all); 301 *p = &htmlecoll; 302 return S_OK; 303 } 304 305 static HRESULT WINAPI htmldoc2_get_body(IHTMLDocument2 *iface, IHTMLElement **p) 306 { 307 ok(0, "unexpected call\n"); 308 return E_NOTIMPL; 309 } 310 311 static HRESULT WINAPI htmldoc2_get_activeElement(IHTMLDocument2 *iface, IHTMLElement **p) 312 { 313 ok(0, "unexpected call\n"); 314 return E_NOTIMPL; 315 } 316 317 static HRESULT WINAPI htmldoc2_get_images(IHTMLDocument2 *iface, IHTMLElementCollection **p) 318 { 319 ok(0, "unexpected call\n"); 320 return E_NOTIMPL; 321 } 322 323 static HRESULT WINAPI htmldoc2_get_applets(IHTMLDocument2 *iface, IHTMLElementCollection **p) 324 { 325 ok(0, "unexpected call\n"); 326 return E_NOTIMPL; 327 } 328 329 static HRESULT WINAPI htmldoc2_get_links(IHTMLDocument2 *iface, IHTMLElementCollection **p) 330 { 331 ok(0, "unexpected call\n"); 332 return E_NOTIMPL; 333 } 334 335 static HRESULT WINAPI htmldoc2_get_forms(IHTMLDocument2 *iface, IHTMLElementCollection **p) 336 { 337 ok(0, "unexpected call\n"); 338 return E_NOTIMPL; 339 } 340 341 static HRESULT WINAPI htmldoc2_get_anchors(IHTMLDocument2 *iface, IHTMLElementCollection **p) 342 { 343 ok(0, "unexpected call\n"); 344 return E_NOTIMPL; 345 } 346 347 static HRESULT WINAPI htmldoc2_put_title(IHTMLDocument2 *iface, BSTR v) 348 { 349 ok(0, "unexpected call\n"); 350 return E_NOTIMPL; 351 } 352 353 static HRESULT WINAPI htmldoc2_get_title(IHTMLDocument2 *iface, BSTR *p) 354 { 355 ok(0, "unexpected call\n"); 356 return E_NOTIMPL; 357 } 358 359 static HRESULT WINAPI htmldoc2_get_scripts(IHTMLDocument2 *iface, IHTMLElementCollection **p) 360 { 361 ok(0, "unexpected call\n"); 362 return E_NOTIMPL; 363 } 364 365 static HRESULT WINAPI htmldoc2_put_designMode(IHTMLDocument2 *iface, BSTR v) 366 { 367 ok(0, "unexpected call\n"); 368 return E_NOTIMPL; 369 } 370 371 static HRESULT WINAPI htmldoc2_get_designMode(IHTMLDocument2 *iface, BSTR *p) 372 { 373 ok(0, "unexpected call\n"); 374 return E_NOTIMPL; 375 } 376 377 static HRESULT WINAPI htmldoc2_get_selection(IHTMLDocument2 *iface, IHTMLSelectionObject **p) 378 { 379 ok(0, "unexpected call\n"); 380 return E_NOTIMPL; 381 } 382 383 static HRESULT WINAPI htmldoc2_get_readyState(IHTMLDocument2 *iface, BSTR *p) 384 { 385 ok(0, "unexpected call\n"); 386 return E_NOTIMPL; 387 } 388 389 static HRESULT WINAPI htmldoc2_get_frames(IHTMLDocument2 *iface, IHTMLFramesCollection2 **p) 390 { 391 ok(0, "unexpected call\n"); 392 return E_NOTIMPL; 393 } 394 395 static HRESULT WINAPI htmldoc2_get_embeds(IHTMLDocument2 *iface, IHTMLElementCollection **p) 396 { 397 ok(0, "unexpected call\n"); 398 return E_NOTIMPL; 399 } 400 401 static HRESULT WINAPI htmldoc2_get_plugins(IHTMLDocument2 *iface, IHTMLElementCollection **p) 402 { 403 ok(0, "unexpected call\n"); 404 return E_NOTIMPL; 405 } 406 407 static HRESULT WINAPI htmldoc2_put_alinkColor(IHTMLDocument2 *iface, VARIANT v) 408 { 409 ok(0, "unexpected call\n"); 410 return E_NOTIMPL; 411 } 412 413 static HRESULT WINAPI htmldoc2_get_alinkColor(IHTMLDocument2 *iface, VARIANT *p) 414 { 415 ok(0, "unexpected call\n"); 416 return E_NOTIMPL; 417 } 418 419 static HRESULT WINAPI htmldoc2_put_bgColor(IHTMLDocument2 *iface, VARIANT v) 420 { 421 ok(0, "unexpected call\n"); 422 return E_NOTIMPL; 423 } 424 425 static HRESULT WINAPI htmldoc2_get_bgColor(IHTMLDocument2 *iface, VARIANT *p) 426 { 427 ok(0, "unexpected call\n"); 428 return E_NOTIMPL; 429 } 430 431 static HRESULT WINAPI htmldoc2_put_fgColor(IHTMLDocument2 *iface, VARIANT v) 432 { 433 ok(0, "unexpected call\n"); 434 return E_NOTIMPL; 435 } 436 437 static HRESULT WINAPI htmldoc2_get_fgColor(IHTMLDocument2 *iface, VARIANT *p) 438 { 439 ok(0, "unexpected call\n"); 440 return E_NOTIMPL; 441 } 442 443 static HRESULT WINAPI htmldoc2_put_linkColor(IHTMLDocument2 *iface, VARIANT v) 444 { 445 ok(0, "unexpected call\n"); 446 return E_NOTIMPL; 447 } 448 449 static HRESULT WINAPI htmldoc2_get_linkColor(IHTMLDocument2 *iface, VARIANT *p) 450 { 451 ok(0, "unexpected call\n"); 452 return E_NOTIMPL; 453 } 454 455 static HRESULT WINAPI htmldoc2_put_vlinkColor(IHTMLDocument2 *iface, VARIANT v) 456 { 457 ok(0, "unexpected call\n"); 458 return E_NOTIMPL; 459 } 460 461 static HRESULT WINAPI htmldoc2_get_vlinkColor(IHTMLDocument2 *iface, VARIANT *p) 462 { 463 ok(0, "unexpected call\n"); 464 return E_NOTIMPL; 465 } 466 467 static HRESULT WINAPI htmldoc2_get_referrer(IHTMLDocument2 *iface, BSTR *p) 468 { 469 ok(0, "unexpected call\n"); 470 return E_NOTIMPL; 471 } 472 473 static HRESULT WINAPI htmldoc2_get_location(IHTMLDocument2 *iface, IHTMLLocation **p) 474 { 475 ok(0, "unexpected call\n"); 476 return E_NOTIMPL; 477 } 478 479 static HRESULT WINAPI htmldoc2_get_lastModified(IHTMLDocument2 *iface, BSTR *p) 480 { 481 ok(0, "unexpected call\n"); 482 return E_NOTIMPL; 483 } 484 485 static HRESULT WINAPI htmldoc2_put_URL(IHTMLDocument2 *iface, BSTR v) 486 { 487 ok(0, "unexpected call\n"); 488 return E_NOTIMPL; 489 } 490 491 static HRESULT WINAPI htmldoc2_get_URL(IHTMLDocument2 *iface, BSTR *p) 492 { 493 CHECK_EXPECT2(htmldoc2_get_url); 494 *p = a2bstr("http://test.winehq.org/"); 495 return S_OK; 496 } 497 498 static HRESULT WINAPI htmldoc2_put_domain(IHTMLDocument2 *iface, BSTR v) 499 { 500 ok(0, "unexpected call\n"); 501 return E_NOTIMPL; 502 } 503 504 static HRESULT WINAPI htmldoc2_get_domain(IHTMLDocument2 *iface, BSTR *p) 505 { 506 ok(0, "unexpected call\n"); 507 return E_NOTIMPL; 508 } 509 510 static HRESULT WINAPI htmldoc2_put_cookie(IHTMLDocument2 *iface, BSTR v) 511 { 512 ok(0, "unexpected call\n"); 513 return E_NOTIMPL; 514 } 515 516 static HRESULT WINAPI htmldoc2_get_cookie(IHTMLDocument2 *iface, BSTR *p) 517 { 518 ok(0, "unexpected call\n"); 519 return E_NOTIMPL; 520 } 521 522 static HRESULT WINAPI htmldoc2_put_expando(IHTMLDocument2 *iface, VARIANT_BOOL v) 523 { 524 ok(0, "unexpected call\n"); 525 return E_NOTIMPL; 526 } 527 528 static HRESULT WINAPI htmldoc2_get_expando(IHTMLDocument2 *iface, VARIANT_BOOL *p) 529 { 530 ok(0, "unexpected call\n"); 531 return E_NOTIMPL; 532 } 533 534 static HRESULT WINAPI htmldoc2_put_charset(IHTMLDocument2 *iface, BSTR v) 535 { 536 ok(0, "unexpected call\n"); 537 return E_NOTIMPL; 538 } 539 540 static HRESULT WINAPI htmldoc2_get_charset(IHTMLDocument2 *iface, BSTR *p) 541 { 542 ok(0, "unexpected call\n"); 543 return E_NOTIMPL; 544 } 545 546 static HRESULT WINAPI htmldoc2_put_defaultCharset(IHTMLDocument2 *iface, BSTR v) 547 { 548 ok(0, "unexpected call\n"); 549 return E_NOTIMPL; 550 } 551 552 static HRESULT WINAPI htmldoc2_get_defaultCharset(IHTMLDocument2 *iface, BSTR *p) 553 { 554 ok(0, "unexpected call\n"); 555 return E_NOTIMPL; 556 } 557 558 static HRESULT WINAPI htmldoc2_get_mimeType(IHTMLDocument2 *iface, BSTR *p) 559 { 560 ok(0, "unexpected call\n"); 561 return E_NOTIMPL; 562 } 563 564 static HRESULT WINAPI htmldoc2_get_fileSize(IHTMLDocument2 *iface, BSTR *p) 565 { 566 ok(0, "unexpected call\n"); 567 return E_NOTIMPL; 568 } 569 570 static HRESULT WINAPI htmldoc2_get_fileCreatedDate(IHTMLDocument2 *iface, BSTR *p) 571 { 572 ok(0, "unexpected call\n"); 573 return E_NOTIMPL; 574 } 575 576 static HRESULT WINAPI htmldoc2_get_fileModifiedDate(IHTMLDocument2 *iface, BSTR *p) 577 { 578 ok(0, "unexpected call\n"); 579 return E_NOTIMPL; 580 } 581 582 static HRESULT WINAPI htmldoc2_get_fileUpdatedDate(IHTMLDocument2 *iface, BSTR *p) 583 { 584 ok(0, "unexpected call\n"); 585 return E_NOTIMPL; 586 } 587 588 static HRESULT WINAPI htmldoc2_get_security(IHTMLDocument2 *iface, BSTR *p) 589 { 590 ok(0, "unexpected call\n"); 591 return E_NOTIMPL; 592 } 593 594 static HRESULT WINAPI htmldoc2_get_protocol(IHTMLDocument2 *iface, BSTR *p) 595 { 596 ok(0, "unexpected call\n"); 597 return E_NOTIMPL; 598 } 599 600 static HRESULT WINAPI htmldoc2_get_nameProp(IHTMLDocument2 *iface, BSTR *p) 601 { 602 ok(0, "unexpected call\n"); 603 return E_NOTIMPL; 604 } 605 606 static HRESULT WINAPI htmldoc2_write(IHTMLDocument2 *iface, SAFEARRAY *psarray) 607 { 608 ok(0, "unexpected call\n"); 609 return E_NOTIMPL; 610 } 611 612 static HRESULT WINAPI htmldoc2_writeln(IHTMLDocument2 *iface, SAFEARRAY *psarray) 613 { 614 ok(0, "unexpected call\n"); 615 return E_NOTIMPL; 616 } 617 618 static HRESULT WINAPI htmldoc2_open(IHTMLDocument2 *iface, BSTR url, VARIANT name, 619 VARIANT features, VARIANT replace, IDispatch **pomWindowResult) 620 { 621 ok(0, "unexpected call\n"); 622 return E_NOTIMPL; 623 } 624 625 static HRESULT WINAPI htmldoc2_close(IHTMLDocument2 *iface) 626 { 627 ok(0, "unexpected call\n"); 628 return E_NOTIMPL; 629 } 630 631 static HRESULT WINAPI htmldoc2_clear(IHTMLDocument2 *iface) 632 { 633 ok(0, "unexpected call\n"); 634 return E_NOTIMPL; 635 } 636 637 static HRESULT WINAPI htmldoc2_queryCommandSupported(IHTMLDocument2 *iface, BSTR cmdID, 638 VARIANT_BOOL *pfRet) 639 { 640 ok(0, "unexpected call\n"); 641 return E_NOTIMPL; 642 } 643 644 static HRESULT WINAPI htmldoc2_queryCommandEnabled(IHTMLDocument2 *iface, BSTR cmdID, 645 VARIANT_BOOL *pfRet) 646 { 647 ok(0, "unexpected call\n"); 648 return E_NOTIMPL; 649 } 650 651 static HRESULT WINAPI htmldoc2_queryCommandState(IHTMLDocument2 *iface, BSTR cmdID, 652 VARIANT_BOOL *pfRet) 653 { 654 ok(0, "unexpected call\n"); 655 return E_NOTIMPL; 656 } 657 658 static HRESULT WINAPI htmldoc2_queryCommandIndeterm(IHTMLDocument2 *iface, BSTR cmdID, 659 VARIANT_BOOL *pfRet) 660 { 661 ok(0, "unexpected call\n"); 662 return E_NOTIMPL; 663 } 664 665 static HRESULT WINAPI htmldoc2_queryCommandText(IHTMLDocument2 *iface, BSTR cmdID, 666 BSTR *pfRet) 667 { 668 ok(0, "unexpected call\n"); 669 return E_NOTIMPL; 670 } 671 672 static HRESULT WINAPI htmldoc2_queryCommandValue(IHTMLDocument2 *iface, BSTR cmdID, 673 VARIANT *pfRet) 674 { 675 ok(0, "unexpected call\n"); 676 return E_NOTIMPL; 677 } 678 679 static HRESULT WINAPI htmldoc2_execCommand(IHTMLDocument2 *iface, BSTR cmdID, 680 VARIANT_BOOL showUI, VARIANT value, VARIANT_BOOL *pfRet) 681 { 682 ok(0, "unexpected call\n"); 683 return E_NOTIMPL; 684 } 685 686 static HRESULT WINAPI htmldoc2_execCommandShowHelp(IHTMLDocument2 *iface, BSTR cmdID, 687 VARIANT_BOOL *pfRet) 688 { 689 ok(0, "unexpected call\n"); 690 return E_NOTIMPL; 691 } 692 693 static HRESULT WINAPI htmldoc2_createElement(IHTMLDocument2 *iface, BSTR eTag, 694 IHTMLElement **newElem) 695 { 696 ok(0, "unexpected call\n"); 697 return E_NOTIMPL; 698 } 699 700 static HRESULT WINAPI htmldoc2_put_onhelp(IHTMLDocument2 *iface, VARIANT v) 701 { 702 ok(0, "unexpected call\n"); 703 return E_NOTIMPL; 704 } 705 706 static HRESULT WINAPI htmldoc2_get_onhelp(IHTMLDocument2 *iface, VARIANT *p) 707 { 708 ok(0, "unexpected call\n"); 709 return E_NOTIMPL; 710 } 711 712 static HRESULT WINAPI htmldoc2_put_onclick(IHTMLDocument2 *iface, VARIANT v) 713 { 714 ok(0, "unexpected call\n"); 715 return E_NOTIMPL; 716 } 717 718 static HRESULT WINAPI htmldoc2_get_onclick(IHTMLDocument2 *iface, VARIANT *p) 719 { 720 ok(0, "unexpected call\n"); 721 return E_NOTIMPL; 722 } 723 724 static HRESULT WINAPI htmldoc2_put_ondblclick(IHTMLDocument2 *iface, VARIANT v) 725 { 726 ok(0, "unexpected call\n"); 727 return E_NOTIMPL; 728 } 729 730 static HRESULT WINAPI htmldoc2_get_ondblclick(IHTMLDocument2 *iface, VARIANT *p) 731 { 732 ok(0, "unexpected call\n"); 733 return E_NOTIMPL; 734 } 735 736 static HRESULT WINAPI htmldoc2_put_onkeyup(IHTMLDocument2 *iface, VARIANT v) 737 { 738 ok(0, "unexpected call\n"); 739 return E_NOTIMPL; 740 } 741 742 static HRESULT WINAPI htmldoc2_get_onkeyup(IHTMLDocument2 *iface, VARIANT *p) 743 { 744 ok(0, "unexpected call\n"); 745 return E_NOTIMPL; 746 } 747 748 static HRESULT WINAPI htmldoc2_put_onkeydown(IHTMLDocument2 *iface, VARIANT v) 749 { 750 ok(0, "unexpected call\n"); 751 return E_NOTIMPL; 752 } 753 754 static HRESULT WINAPI htmldoc2_get_onkeydown(IHTMLDocument2 *iface, VARIANT *p) 755 { 756 ok(0, "unexpected call\n"); 757 return E_NOTIMPL; 758 } 759 760 static HRESULT WINAPI htmldoc2_put_onkeypress(IHTMLDocument2 *iface, VARIANT v) 761 { 762 ok(0, "unexpected call\n"); 763 return E_NOTIMPL; 764 } 765 766 static HRESULT WINAPI htmldoc2_get_onkeypress(IHTMLDocument2 *iface, VARIANT *p) 767 { 768 ok(0, "unexpected call\n"); 769 return E_NOTIMPL; 770 } 771 772 static HRESULT WINAPI htmldoc2_put_onmouseup(IHTMLDocument2 *iface, VARIANT v) 773 { 774 ok(0, "unexpected call\n"); 775 return E_NOTIMPL; 776 } 777 778 static HRESULT WINAPI htmldoc2_get_onmouseup(IHTMLDocument2 *iface, VARIANT *p) 779 { 780 ok(0, "unexpected call\n"); 781 return E_NOTIMPL; 782 } 783 784 static HRESULT WINAPI htmldoc2_put_onmousedown(IHTMLDocument2 *iface, VARIANT v) 785 { 786 ok(0, "unexpected call\n"); 787 return E_NOTIMPL; 788 } 789 790 static HRESULT WINAPI htmldoc2_get_onmousedown(IHTMLDocument2 *iface, VARIANT *p) 791 { 792 ok(0, "unexpected call\n"); 793 return E_NOTIMPL; 794 } 795 796 static HRESULT WINAPI htmldoc2_put_onmousemove(IHTMLDocument2 *iface, VARIANT v) 797 { 798 ok(0, "unexpected call\n"); 799 return E_NOTIMPL; 800 } 801 802 static HRESULT WINAPI htmldoc2_get_onmousemove(IHTMLDocument2 *iface, VARIANT *p) 803 { 804 ok(0, "unexpected call\n"); 805 return E_NOTIMPL; 806 } 807 808 static HRESULT WINAPI htmldoc2_put_onmouseout(IHTMLDocument2 *iface, VARIANT v) 809 { 810 ok(0, "unexpected call\n"); 811 return E_NOTIMPL; 812 } 813 814 static HRESULT WINAPI htmldoc2_get_onmouseout(IHTMLDocument2 *iface, VARIANT *p) 815 { 816 ok(0, "unexpected call\n"); 817 return E_NOTIMPL; 818 } 819 820 static HRESULT WINAPI htmldoc2_put_onmouseover(IHTMLDocument2 *iface, VARIANT v) 821 { 822 ok(0, "unexpected call\n"); 823 return E_NOTIMPL; 824 } 825 826 static HRESULT WINAPI htmldoc2_get_onmouseover(IHTMLDocument2 *iface, VARIANT *p) 827 { 828 ok(0, "unexpected call\n"); 829 return E_NOTIMPL; 830 } 831 832 static HRESULT WINAPI htmldoc2_put_onreadystatechange(IHTMLDocument2 *iface, VARIANT v) 833 { 834 ok(0, "unexpected call\n"); 835 return E_NOTIMPL; 836 } 837 838 static HRESULT WINAPI htmldoc2_get_onreadystatechange(IHTMLDocument2 *iface, VARIANT *p) 839 { 840 ok(0, "unexpected call\n"); 841 return E_NOTIMPL; 842 } 843 844 static HRESULT WINAPI htmldoc2_put_onafterupdate(IHTMLDocument2 *iface, VARIANT v) 845 { 846 ok(0, "unexpected call\n"); 847 return E_NOTIMPL; 848 } 849 850 static HRESULT WINAPI htmldoc2_get_onafterupdate(IHTMLDocument2 *iface, VARIANT *p) 851 { 852 ok(0, "unexpected call\n"); 853 return E_NOTIMPL; 854 } 855 856 static HRESULT WINAPI htmldoc2_put_onrowexit(IHTMLDocument2 *iface, VARIANT v) 857 { 858 ok(0, "unexpected call\n"); 859 return E_NOTIMPL; 860 } 861 862 static HRESULT WINAPI htmldoc2_get_onrowexit(IHTMLDocument2 *iface, VARIANT *p) 863 { 864 ok(0, "unexpected call\n"); 865 return E_NOTIMPL; 866 } 867 868 static HRESULT WINAPI htmldoc2_put_onrowenter(IHTMLDocument2 *iface, VARIANT v) 869 { 870 ok(0, "unexpected call\n"); 871 return E_NOTIMPL; 872 } 873 874 static HRESULT WINAPI htmldoc2_get_onrowenter(IHTMLDocument2 *iface, VARIANT *p) 875 { 876 ok(0, "unexpected call\n"); 877 return E_NOTIMPL; 878 } 879 880 static HRESULT WINAPI htmldoc2_put_ondragstart(IHTMLDocument2 *iface, VARIANT v) 881 { 882 ok(0, "unexpected call\n"); 883 return E_NOTIMPL; 884 } 885 886 static HRESULT WINAPI htmldoc2_get_ondragstart(IHTMLDocument2 *iface, VARIANT *p) 887 { 888 ok(0, "unexpected call\n"); 889 return E_NOTIMPL; 890 } 891 892 static HRESULT WINAPI htmldoc2_put_onselectstart(IHTMLDocument2 *iface, VARIANT v) 893 { 894 ok(0, "unexpected call\n"); 895 return E_NOTIMPL; 896 } 897 898 static HRESULT WINAPI htmldoc2_get_onselectstart(IHTMLDocument2 *iface, VARIANT *p) 899 { 900 ok(0, "unexpected call\n"); 901 return E_NOTIMPL; 902 } 903 904 static HRESULT WINAPI htmldoc2_elementFromPoint(IHTMLDocument2 *iface, LONG x, LONG y, 905 IHTMLElement **elementHit) 906 { 907 ok(0, "unexpected call\n"); 908 return E_NOTIMPL; 909 } 910 911 static HRESULT WINAPI htmldoc2_get_parentWindow(IHTMLDocument2 *iface, IHTMLWindow2 **p) 912 { 913 ok(0, "unexpected call\n"); 914 return E_NOTIMPL; 915 } 916 917 static HRESULT WINAPI htmldoc2_get_styleSheets(IHTMLDocument2 *iface, 918 IHTMLStyleSheetsCollection **p) 919 { 920 ok(0, "unexpected call\n"); 921 return E_NOTIMPL; 922 } 923 924 static HRESULT WINAPI htmldoc2_put_onbeforeupdate(IHTMLDocument2 *iface, VARIANT v) 925 { 926 ok(0, "unexpected call\n"); 927 return E_NOTIMPL; 928 } 929 930 static HRESULT WINAPI htmldoc2_get_onbeforeupdate(IHTMLDocument2 *iface, VARIANT *p) 931 { 932 ok(0, "unexpected call\n"); 933 return E_NOTIMPL; 934 } 935 936 static HRESULT WINAPI htmldoc2_put_onerrorupdate(IHTMLDocument2 *iface, VARIANT v) 937 { 938 ok(0, "unexpected call\n"); 939 return E_NOTIMPL; 940 } 941 942 static HRESULT WINAPI htmldoc2_get_onerrorupdate(IHTMLDocument2 *iface, VARIANT *p) 943 { 944 ok(0, "unexpected call\n"); 945 return E_NOTIMPL; 946 } 947 948 static HRESULT WINAPI htmldoc2_toString(IHTMLDocument2 *iface, BSTR *String) 949 { 950 ok(0, "unexpected call\n"); 951 return E_NOTIMPL; 952 } 953 954 static HRESULT WINAPI htmldoc2_createStyleSheet(IHTMLDocument2 *iface, BSTR bstrHref, 955 LONG lIndex, IHTMLStyleSheet **ppnewStyleSheet) 956 { 957 ok(0, "unexpected call\n"); 958 return E_NOTIMPL; 959 } 960 961 static const IHTMLDocument2Vtbl TestHTMLDocumentVtbl = { 962 htmldoc2_QueryInterface, 963 htmldoc2_AddRef, 964 htmldoc2_Release, 965 htmldoc2_GetTypeInfoCount, 966 htmldoc2_GetTypeInfo, 967 htmldoc2_GetIDsOfNames, 968 htmldoc2_Invoke, 969 htmldoc2_get_Script, 970 htmldoc2_get_all, 971 htmldoc2_get_body, 972 htmldoc2_get_activeElement, 973 htmldoc2_get_images, 974 htmldoc2_get_applets, 975 htmldoc2_get_links, 976 htmldoc2_get_forms, 977 htmldoc2_get_anchors, 978 htmldoc2_put_title, 979 htmldoc2_get_title, 980 htmldoc2_get_scripts, 981 htmldoc2_put_designMode, 982 htmldoc2_get_designMode, 983 htmldoc2_get_selection, 984 htmldoc2_get_readyState, 985 htmldoc2_get_frames, 986 htmldoc2_get_embeds, 987 htmldoc2_get_plugins, 988 htmldoc2_put_alinkColor, 989 htmldoc2_get_alinkColor, 990 htmldoc2_put_bgColor, 991 htmldoc2_get_bgColor, 992 htmldoc2_put_fgColor, 993 htmldoc2_get_fgColor, 994 htmldoc2_put_linkColor, 995 htmldoc2_get_linkColor, 996 htmldoc2_put_vlinkColor, 997 htmldoc2_get_vlinkColor, 998 htmldoc2_get_referrer, 999 htmldoc2_get_location, 1000 htmldoc2_get_lastModified, 1001 htmldoc2_put_URL, 1002 htmldoc2_get_URL, 1003 htmldoc2_put_domain, 1004 htmldoc2_get_domain, 1005 htmldoc2_put_cookie, 1006 htmldoc2_get_cookie, 1007 htmldoc2_put_expando, 1008 htmldoc2_get_expando, 1009 htmldoc2_put_charset, 1010 htmldoc2_get_charset, 1011 htmldoc2_put_defaultCharset, 1012 htmldoc2_get_defaultCharset, 1013 htmldoc2_get_mimeType, 1014 htmldoc2_get_fileSize, 1015 htmldoc2_get_fileCreatedDate, 1016 htmldoc2_get_fileModifiedDate, 1017 htmldoc2_get_fileUpdatedDate, 1018 htmldoc2_get_security, 1019 htmldoc2_get_protocol, 1020 htmldoc2_get_nameProp, 1021 htmldoc2_write, 1022 htmldoc2_writeln, 1023 htmldoc2_open, 1024 htmldoc2_close, 1025 htmldoc2_clear, 1026 htmldoc2_queryCommandSupported, 1027 htmldoc2_queryCommandEnabled, 1028 htmldoc2_queryCommandState, 1029 htmldoc2_queryCommandIndeterm, 1030 htmldoc2_queryCommandText, 1031 htmldoc2_queryCommandValue, 1032 htmldoc2_execCommand, 1033 htmldoc2_execCommandShowHelp, 1034 htmldoc2_createElement, 1035 htmldoc2_put_onhelp, 1036 htmldoc2_get_onhelp, 1037 htmldoc2_put_onclick, 1038 htmldoc2_get_onclick, 1039 htmldoc2_put_ondblclick, 1040 htmldoc2_get_ondblclick, 1041 htmldoc2_put_onkeyup, 1042 htmldoc2_get_onkeyup, 1043 htmldoc2_put_onkeydown, 1044 htmldoc2_get_onkeydown, 1045 htmldoc2_put_onkeypress, 1046 htmldoc2_get_onkeypress, 1047 htmldoc2_put_onmouseup, 1048 htmldoc2_get_onmouseup, 1049 htmldoc2_put_onmousedown, 1050 htmldoc2_get_onmousedown, 1051 htmldoc2_put_onmousemove, 1052 htmldoc2_get_onmousemove, 1053 htmldoc2_put_onmouseout, 1054 htmldoc2_get_onmouseout, 1055 htmldoc2_put_onmouseover, 1056 htmldoc2_get_onmouseover, 1057 htmldoc2_put_onreadystatechange, 1058 htmldoc2_get_onreadystatechange, 1059 htmldoc2_put_onafterupdate, 1060 htmldoc2_get_onafterupdate, 1061 htmldoc2_put_onrowexit, 1062 htmldoc2_get_onrowexit, 1063 htmldoc2_put_onrowenter, 1064 htmldoc2_get_onrowenter, 1065 htmldoc2_put_ondragstart, 1066 htmldoc2_get_ondragstart, 1067 htmldoc2_put_onselectstart, 1068 htmldoc2_get_onselectstart, 1069 htmldoc2_elementFromPoint, 1070 htmldoc2_get_parentWindow, 1071 htmldoc2_get_styleSheets, 1072 htmldoc2_put_onbeforeupdate, 1073 htmldoc2_get_onbeforeupdate, 1074 htmldoc2_put_onerrorupdate, 1075 htmldoc2_get_onerrorupdate, 1076 htmldoc2_toString, 1077 htmldoc2_createStyleSheet 1078 }; 1079 1080 static IHTMLDocument2 htmldoc2 = { &TestHTMLDocumentVtbl }; 1081 1082 static HRESULT WINAPI sp_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppvObject) 1083 { 1084 *ppvObject = NULL; 1085 1086 if (IsEqualGUID(riid, &IID_IUnknown) || 1087 IsEqualGUID(riid, &IID_IServiceProvider)) 1088 { 1089 *ppvObject = iface; 1090 IServiceProvider_AddRef(iface); 1091 return S_OK; 1092 } 1093 1094 ok(0, "unexpected query interface: %s\n", wine_dbgstr_guid(riid)); 1095 1096 return E_NOINTERFACE; 1097 } 1098 1099 static ULONG WINAPI sp_AddRef(IServiceProvider *iface) 1100 { 1101 return 2; 1102 } 1103 1104 static ULONG WINAPI sp_Release(IServiceProvider *iface) 1105 { 1106 return 1; 1107 } 1108 1109 static HRESULT WINAPI sp_QueryService(IServiceProvider *iface, REFGUID service, REFIID riid, void **obj) 1110 { 1111 *obj = NULL; 1112 1113 if (IsEqualGUID(service, &SID_SBindHost) && 1114 IsEqualGUID(riid, &IID_IBindHost)) 1115 { 1116 CHECK_EXPECT2(sp_queryservice_SID_SBindHost); 1117 } 1118 else if (IsEqualGUID(service, &SID_SContainerDispatch) && 1119 IsEqualGUID(riid, &IID_IHTMLDocument2)) 1120 { 1121 CHECK_EXPECT2(sp_queryservice_SID_SContainerDispatch_htmldoc2); 1122 } 1123 else if (IsEqualGUID(service, &SID_SInternetHostSecurityManager) && 1124 IsEqualGUID(riid, &IID_IHTMLDocument2)) 1125 { 1126 CHECK_EXPECT2(sp_queryservice_SID_secmgr_htmldoc2); 1127 *obj = &htmldoc2; 1128 return S_OK; 1129 } 1130 else if (IsEqualGUID(service, &SID_SInternetHostSecurityManager) && 1131 IsEqualGUID(riid, &IID_IXMLDOMDocument)) 1132 { 1133 CHECK_EXPECT2(sp_queryservice_SID_secmgr_xmldomdoc); 1134 } 1135 else if (IsEqualGUID(service, &SID_SInternetHostSecurityManager) && 1136 IsEqualGUID(riid, &IID_IInternetHostSecurityManager)) 1137 { 1138 CHECK_EXPECT2(sp_queryservice_SID_secmgr_secmgr); 1139 } 1140 else if (IsEqualGUID(service, &SID_UnknownSID) && 1141 IsEqualGUID(riid, &IID_IStream)) 1142 { 1143 /* FIXME: unidentified service id */ 1144 } 1145 else if ((IsEqualGUID(service, &IID_IInternetProtocol) && IsEqualGUID(riid, &IID_IInternetProtocol)) || 1146 (IsEqualGUID(service, &IID_IHttpNegotiate2) && IsEqualGUID(riid, &IID_IHttpNegotiate2)) || 1147 (IsEqualGUID(service, &IID_IGetBindHandle) && IsEqualGUID(riid, &IID_IGetBindHandle)) || 1148 (IsEqualGUID(service, &IID_IBindStatusCallback) && IsEqualGUID(riid, &IID_IBindStatusCallback)) || 1149 (IsEqualGUID(service, &IID_IWindowForBindingUI) && IsEqualGUID(riid, &IID_IWindowForBindingUI))) 1150 { 1151 } 1152 else 1153 ok(0, "unexpected request: sid %s, riid %s\n", wine_dbgstr_guid(service), wine_dbgstr_guid(riid)); 1154 1155 return E_NOTIMPL; 1156 } 1157 1158 static const IServiceProviderVtbl testprovVtbl = 1159 { 1160 sp_QueryInterface, 1161 sp_AddRef, 1162 sp_Release, 1163 sp_QueryService 1164 }; 1165 1166 static IServiceProvider testprov = { &testprovVtbl }; 1167 1168 static HRESULT WINAPI site_QueryInterface(IUnknown *iface, REFIID riid, void **ppvObject) 1169 { 1170 *ppvObject = NULL; 1171 1172 if (IsEqualGUID(riid, &IID_IServiceProvider)) 1173 CHECK_EXPECT2(site_qi_IServiceProvider); 1174 1175 if (IsEqualGUID(riid, &IID_IXMLDOMDocument)) 1176 CHECK_EXPECT2(site_qi_IXMLDOMDocument); 1177 1178 if (IsEqualGUID(riid, &IID_IOleClientSite)) 1179 CHECK_EXPECT2(site_qi_IOleClientSite); 1180 1181 if (IsEqualGUID(riid, &IID_IUnknown)) 1182 *ppvObject = iface; 1183 else if (IsEqualGUID(riid, &IID_IServiceProvider)) 1184 *ppvObject = &testprov; 1185 1186 if (*ppvObject) IUnknown_AddRef(iface); 1187 1188 return *ppvObject ? S_OK : E_NOINTERFACE; 1189 } 1190 1191 static ULONG WINAPI site_AddRef(IUnknown *iface) 1192 { 1193 return 2; 1194 } 1195 1196 static ULONG WINAPI site_Release(IUnknown *iface) 1197 { 1198 return 1; 1199 } 1200 1201 static const IUnknownVtbl testsiteVtbl = 1202 { 1203 site_QueryInterface, 1204 site_AddRef, 1205 site_Release 1206 }; 1207 1208 static IUnknown testsite = { &testsiteVtbl }; 1209 1210 typedef struct 1211 { 1212 IDispatch IDispatch_iface; 1213 LONG ref; 1214 } dispevent; 1215 1216 static IXMLHttpRequest *httpreq; 1217 1218 static inline dispevent *impl_from_IDispatch( IDispatch *iface ) 1219 { 1220 return CONTAINING_RECORD(iface, dispevent, IDispatch_iface); 1221 } 1222 1223 static HRESULT WINAPI dispevent_QueryInterface(IDispatch *iface, REFIID riid, void **ppvObject) 1224 { 1225 *ppvObject = NULL; 1226 1227 if ( IsEqualGUID( riid, &IID_IDispatch) || 1228 IsEqualGUID( riid, &IID_IUnknown) ) 1229 { 1230 *ppvObject = iface; 1231 } 1232 else 1233 return E_NOINTERFACE; 1234 1235 IDispatch_AddRef( iface ); 1236 1237 return S_OK; 1238 } 1239 1240 static ULONG WINAPI dispevent_AddRef(IDispatch *iface) 1241 { 1242 dispevent *This = impl_from_IDispatch( iface ); 1243 return InterlockedIncrement( &This->ref ); 1244 } 1245 1246 static ULONG WINAPI dispevent_Release(IDispatch *iface) 1247 { 1248 dispevent *This = impl_from_IDispatch( iface ); 1249 ULONG ref = InterlockedDecrement( &This->ref ); 1250 1251 if (ref == 0) 1252 HeapFree(GetProcessHeap(), 0, This); 1253 1254 return ref; 1255 } 1256 1257 static HRESULT WINAPI dispevent_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo) 1258 { 1259 g_unexpectedcall++; 1260 *pctinfo = 0; 1261 return S_OK; 1262 } 1263 1264 static HRESULT WINAPI dispevent_GetTypeInfo(IDispatch *iface, UINT iTInfo, 1265 LCID lcid, ITypeInfo **ppTInfo) 1266 { 1267 g_unexpectedcall++; 1268 return S_OK; 1269 } 1270 1271 static HRESULT WINAPI dispevent_GetIDsOfNames(IDispatch *iface, REFIID riid, 1272 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) 1273 { 1274 g_unexpectedcall++; 1275 return S_OK; 1276 } 1277 1278 static HRESULT WINAPI dispevent_Invoke(IDispatch *iface, DISPID member, REFIID riid, 1279 LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *result, 1280 EXCEPINFO *excepInfo, UINT *argErr) 1281 { 1282 LONG state; 1283 HRESULT hr; 1284 1285 ok(member == 0, "expected 0 member, got %d\n", member); 1286 ok(lcid == LOCALE_SYSTEM_DEFAULT, "expected LOCALE_SYSTEM_DEFAULT, got lcid %x\n", lcid); 1287 ok(flags == DISPATCH_METHOD, "expected DISPATCH_METHOD, got %d\n", flags); 1288 1289 ok(params->cArgs == 0, "got %d\n", params->cArgs); 1290 ok(params->cNamedArgs == 0, "got %d\n", params->cNamedArgs); 1291 ok(params->rgvarg == NULL, "got %p\n", params->rgvarg); 1292 ok(params->rgdispidNamedArgs == NULL, "got %p\n", params->rgdispidNamedArgs); 1293 1294 ok(result == NULL, "got %p\n", result); 1295 ok(excepInfo == NULL, "got %p\n", excepInfo); 1296 ok(argErr == NULL, "got %p\n", argErr); 1297 1298 g_expectedcall++; 1299 1300 state = READYSTATE_UNINITIALIZED; 1301 hr = IXMLHttpRequest_get_readyState(httpreq, &state); 1302 ok(hr == S_OK, "got 0x%08x\n", hr); 1303 if (state == READYSTATE_COMPLETE) 1304 { 1305 BSTR text = NULL; 1306 1307 hr = IXMLHttpRequest_get_responseText(httpreq, &text); 1308 ok(hr == S_OK, "got 0x%08x\n", hr); 1309 ok(*text != 0, "got %s\n", wine_dbgstr_w(text)); 1310 SysFreeString(text); 1311 } 1312 1313 return E_FAIL; 1314 } 1315 1316 static const IDispatchVtbl dispeventVtbl = 1317 { 1318 dispevent_QueryInterface, 1319 dispevent_AddRef, 1320 dispevent_Release, 1321 dispevent_GetTypeInfoCount, 1322 dispevent_GetTypeInfo, 1323 dispevent_GetIDsOfNames, 1324 dispevent_Invoke 1325 }; 1326 1327 static IDispatch* create_dispevent(void) 1328 { 1329 dispevent *event = HeapAlloc(GetProcessHeap(), 0, sizeof(*event)); 1330 1331 event->IDispatch_iface.lpVtbl = &dispeventVtbl; 1332 event->ref = 1; 1333 1334 return &event->IDispatch_iface; 1335 } 1336 1337 static IXMLHttpRequest *create_xhr(void) 1338 { 1339 IXMLHttpRequest *ret; 1340 HRESULT hr; 1341 1342 hr = CoCreateInstance(&CLSID_XMLHTTPRequest, NULL, CLSCTX_INPROC_SERVER, 1343 &IID_IXMLHttpRequest, (void**)&ret); 1344 1345 return SUCCEEDED(hr) ? ret : NULL; 1346 } 1347 1348 static void set_safety_opt(IUnknown *unk, DWORD mask, DWORD opts) 1349 { 1350 IObjectSafety *obj_safety; 1351 HRESULT hr; 1352 1353 hr = IUnknown_QueryInterface(unk, &IID_IObjectSafety, (void**)&obj_safety); 1354 ok(hr == S_OK, "Could not get IObjectSafety iface: %08x\n", hr); 1355 1356 hr = IObjectSafety_SetInterfaceSafetyOptions(obj_safety, &IID_IDispatch, mask, mask&opts); 1357 ok(hr == S_OK, "SetInterfaceSafetyOptions failed: %08x\n", hr); 1358 1359 IObjectSafety_Release(obj_safety); 1360 } 1361 1362 static void set_xhr_site(IXMLHttpRequest *xhr) 1363 { 1364 IObjectWithSite *obj_site; 1365 HRESULT hr; 1366 1367 hr = IXMLHttpRequest_QueryInterface(xhr, &IID_IObjectWithSite, (void**)&obj_site); 1368 ok(hr == S_OK, "Could not get IObjectWithSite iface: %08x\n", hr); 1369 1370 g_enablecallchecks = TRUE; 1371 1372 SET_EXPECT(site_qi_IServiceProvider); 1373 SET_EXPECT(sp_queryservice_SID_SBindHost); 1374 SET_EXPECT(sp_queryservice_SID_SContainerDispatch_htmldoc2); 1375 SET_EXPECT(sp_queryservice_SID_secmgr_htmldoc2); 1376 SET_EXPECT(sp_queryservice_SID_secmgr_xmldomdoc); 1377 SET_EXPECT(sp_queryservice_SID_secmgr_secmgr); 1378 1379 /* calls to IHTMLDocument2 */ 1380 SET_EXPECT(htmldoc2_get_all); 1381 SET_EXPECT(collection_get_length); 1382 SET_EXPECT(htmldoc2_get_url); 1383 1384 SET_EXPECT(site_qi_IXMLDOMDocument); 1385 SET_EXPECT(site_qi_IOleClientSite); 1386 1387 hr = IObjectWithSite_SetSite(obj_site, &testsite); 1388 EXPECT_HR(hr, S_OK); 1389 1390 CHECK_CALLED(site_qi_IServiceProvider); 1391 todo_wine 1392 CHECK_CALLED(sp_queryservice_SID_SBindHost); 1393 CHECK_CALLED(sp_queryservice_SID_SContainerDispatch_htmldoc2); 1394 CHECK_CALLED(sp_queryservice_SID_secmgr_htmldoc2); 1395 todo_wine 1396 CHECK_CALLED(sp_queryservice_SID_secmgr_xmldomdoc); 1397 /* this one isn't very reliable 1398 CHECK_CALLED(sp_queryservice_SID_secmgr_secmgr); */ 1399 todo_wine { 1400 CHECK_CALLED(htmldoc2_get_all); 1401 CHECK_CALLED(collection_get_length); 1402 } 1403 CHECK_CALLED(htmldoc2_get_url); 1404 1405 todo_wine { 1406 CHECK_CALLED(site_qi_IXMLDOMDocument); 1407 CHECK_CALLED(site_qi_IOleClientSite); 1408 } 1409 1410 g_enablecallchecks = FALSE; 1411 1412 IObjectWithSite_Release(obj_site); 1413 } 1414 1415 #define test_open(a,b,c,d) _test_open(__LINE__,a,b,c,d) 1416 static void _test_open(unsigned line, IXMLHttpRequest *xhr, const char *method, const char *url, HRESULT exhres) 1417 { 1418 VARIANT empty, vfalse; 1419 HRESULT hr; 1420 1421 V_VT(&empty) = VT_EMPTY; 1422 V_VT(&vfalse) = VT_BOOL; 1423 V_BOOL(&vfalse) = VARIANT_FALSE; 1424 1425 hr = IXMLHttpRequest_open(xhr, _bstr_(method), _bstr_(url), vfalse, empty, empty); 1426 ok_(__FILE__,line)(hr == exhres, "open(%s %s) failed: %08x, expected %08x\n", method, url, hr, exhres); 1427 } 1428 1429 static void test_XMLHTTP(void) 1430 { 1431 static const char bodyA[] = "mode=Test"; 1432 static const char urlA[] = "http://test.winehq.org/tests/post.php"; 1433 static const char xmltestA[] = "http://test.winehq.org/tests/xmltest.xml"; 1434 static const char referertesturl[] = "http://test.winehq.org/tests/referer.php"; 1435 static const WCHAR wszExpectedResponse[] = {'F','A','I','L','E','D',0}; 1436 static const CHAR xmltestbodyA[] = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<a>TEST</a>\n"; 1437 static const WCHAR norefererW[] = {'n','o',' ','r','e','f','e','r','e','r',' ','s','e','t',0}; 1438 1439 IXMLHttpRequest *xhr; 1440 IObjectWithSite *obj_site, *obj_site2; 1441 BSTR bstrResponse, str, str1; 1442 VARIANT varbody; 1443 VARIANT dummy; 1444 LONG state, status, bound; 1445 IDispatch *event; 1446 void *ptr; 1447 HRESULT hr; 1448 HGLOBAL g; 1449 1450 xhr = create_xhr(); 1451 1452 VariantInit(&dummy); 1453 V_VT(&dummy) = VT_ERROR; 1454 V_ERROR(&dummy) = DISP_E_MEMBERNOTFOUND; 1455 1456 hr = IXMLHttpRequest_put_onreadystatechange(xhr, NULL); 1457 EXPECT_HR(hr, S_OK); 1458 1459 hr = IXMLHttpRequest_abort(xhr); 1460 EXPECT_HR(hr, S_OK); 1461 1462 V_VT(&varbody) = VT_I2; 1463 V_I2(&varbody) = 1; 1464 hr = IXMLHttpRequest_get_responseBody(xhr, &varbody); 1465 EXPECT_HR(hr, E_PENDING); 1466 ok(V_VT(&varbody) == VT_EMPTY, "got type %d\n", V_VT(&varbody)); 1467 1468 V_VT(&varbody) = VT_I2; 1469 V_I2(&varbody) = 1; 1470 hr = IXMLHttpRequest_get_responseStream(xhr, &varbody); 1471 EXPECT_HR(hr, E_PENDING); 1472 ok(V_VT(&varbody) == VT_EMPTY, "got type %d\n", V_VT(&varbody)); 1473 1474 /* send before open */ 1475 hr = IXMLHttpRequest_send(xhr, dummy); 1476 ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); 1477 1478 /* initial status code */ 1479 hr = IXMLHttpRequest_get_status(xhr, NULL); 1480 ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); 1481 1482 status = 0xdeadbeef; 1483 hr = IXMLHttpRequest_get_status(xhr, &status); 1484 ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); 1485 ok(status == READYSTATE_UNINITIALIZED || broken(status == 0xdeadbeef) /* <win8 */, "got %d\n", status); 1486 1487 hr = IXMLHttpRequest_get_statusText(xhr, &str); 1488 ok(hr == E_FAIL, "got 0x%08x\n", hr); 1489 1490 /* invalid parameters */ 1491 test_open(xhr, NULL, NULL, E_INVALIDARG); 1492 test_open(xhr, "POST", NULL, E_INVALIDARG); 1493 test_open(xhr, NULL, urlA, E_INVALIDARG); 1494 1495 hr = IXMLHttpRequest_setRequestHeader(xhr, NULL, NULL); 1496 EXPECT_HR(hr, E_INVALIDARG); 1497 1498 hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_("header1"), NULL); 1499 ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); 1500 1501 hr = IXMLHttpRequest_setRequestHeader(xhr, NULL, _bstr_("value1")); 1502 EXPECT_HR(hr, E_INVALIDARG); 1503 1504 hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_("header1"), _bstr_("value1")); 1505 ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); 1506 1507 hr = IXMLHttpRequest_get_readyState(xhr, NULL); 1508 ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); 1509 1510 state = -1; 1511 hr = IXMLHttpRequest_get_readyState(xhr, &state); 1512 EXPECT_HR(hr, S_OK); 1513 ok(state == READYSTATE_UNINITIALIZED, "got %d, expected READYSTATE_UNINITIALIZED\n", state); 1514 1515 httpreq = xhr; 1516 event = create_dispevent(); 1517 1518 EXPECT_REF(event, 1); 1519 hr = IXMLHttpRequest_put_onreadystatechange(xhr, event); 1520 EXPECT_HR(hr, S_OK); 1521 EXPECT_REF(event, 2); 1522 1523 g_unexpectedcall = g_expectedcall = 0; 1524 1525 test_open(xhr, "POST", urlA, S_OK); 1526 1527 ok(g_unexpectedcall == 0, "unexpected disp event call\n"); 1528 ok(g_expectedcall == 1 || broken(g_expectedcall == 0) /* win2k */, "no expected disp event call\n"); 1529 1530 /* status code after ::open() */ 1531 status = 0xdeadbeef; 1532 hr = IXMLHttpRequest_get_status(xhr, &status); 1533 ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); 1534 ok(status == READYSTATE_UNINITIALIZED || broken(status == 0xdeadbeef) /* <win8 */, "got %d\n", status); 1535 1536 state = -1; 1537 hr = IXMLHttpRequest_get_readyState(xhr, &state); 1538 EXPECT_HR(hr, S_OK); 1539 ok(state == READYSTATE_LOADING, "got %d, expected READYSTATE_LOADING\n", state); 1540 1541 hr = IXMLHttpRequest_abort(xhr); 1542 EXPECT_HR(hr, S_OK); 1543 1544 state = -1; 1545 hr = IXMLHttpRequest_get_readyState(xhr, &state); 1546 EXPECT_HR(hr, S_OK); 1547 ok(state == READYSTATE_UNINITIALIZED || broken(state == READYSTATE_LOADING) /* win2k */, 1548 "got %d, expected READYSTATE_UNINITIALIZED\n", state); 1549 1550 test_open(xhr, "POST", urlA, S_OK); 1551 1552 hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_("header1"), _bstr_("value1")); 1553 EXPECT_HR(hr, S_OK); 1554 1555 hr = IXMLHttpRequest_setRequestHeader(xhr, NULL, _bstr_("value1")); 1556 EXPECT_HR(hr, E_INVALIDARG); 1557 1558 hr = IXMLHttpRequest_setRequestHeader(xhr, _bstr_(""), _bstr_("value1")); 1559 EXPECT_HR(hr, E_INVALIDARG); 1560 1561 V_VT(&varbody) = VT_BSTR; 1562 V_BSTR(&varbody) = _bstr_(bodyA); 1563 1564 hr = IXMLHttpRequest_send(xhr, varbody); 1565 if (hr == INET_E_RESOURCE_NOT_FOUND) 1566 { 1567 skip("No connection could be made with test.winehq.org\n"); 1568 IXMLHttpRequest_Release(xhr); 1569 return; 1570 } 1571 EXPECT_HR(hr, S_OK); 1572 1573 /* response headers */ 1574 hr = IXMLHttpRequest_getAllResponseHeaders(xhr, NULL); 1575 ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); 1576 hr = IXMLHttpRequest_getAllResponseHeaders(xhr, &str); 1577 EXPECT_HR(hr, S_OK); 1578 /* status line is stripped already */ 1579 ok(memcmp(str, _bstr_("HTTP"), 4*sizeof(WCHAR)), "got response headers %s\n", wine_dbgstr_w(str)); 1580 ok(*str, "got empty headers\n"); 1581 hr = IXMLHttpRequest_getAllResponseHeaders(xhr, &str1); 1582 EXPECT_HR(hr, S_OK); 1583 ok(str1 != str, "got %p\n", str1); 1584 SysFreeString(str1); 1585 SysFreeString(str); 1586 1587 hr = IXMLHttpRequest_getResponseHeader(xhr, NULL, NULL); 1588 EXPECT_HR(hr, E_INVALIDARG); 1589 hr = IXMLHttpRequest_getResponseHeader(xhr, _bstr_("Date"), NULL); 1590 ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); 1591 hr = IXMLHttpRequest_getResponseHeader(xhr, _bstr_("Date"), &str); 1592 EXPECT_HR(hr, S_OK); 1593 ok(*str != ' ', "got leading space in header %s\n", wine_dbgstr_w(str)); 1594 SysFreeString(str); 1595 1596 /* status code after ::send() */ 1597 status = 0xdeadbeef; 1598 hr = IXMLHttpRequest_get_status(xhr, &status); 1599 EXPECT_HR(hr, S_OK); 1600 ok(status == 200, "got %d\n", status); 1601 1602 hr = IXMLHttpRequest_get_statusText(xhr, NULL); 1603 ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); 1604 1605 hr = IXMLHttpRequest_get_statusText(xhr, &str); 1606 EXPECT_HR(hr, S_OK); 1607 ok(!lstrcmpW(str, _bstr_("OK")), "got status %s\n", wine_dbgstr_w(str)); 1608 SysFreeString(str); 1609 1610 /* another ::send() after completed request */ 1611 V_VT(&varbody) = VT_BSTR; 1612 V_BSTR(&varbody) = _bstr_(bodyA); 1613 1614 hr = IXMLHttpRequest_send(xhr, varbody); 1615 ok(hr == E_FAIL || broken(hr == E_UNEXPECTED) /* win2k */, "got 0x%08x\n", hr); 1616 1617 hr = IXMLHttpRequest_get_responseText(xhr, &bstrResponse); 1618 EXPECT_HR(hr, S_OK); 1619 /* the server currently returns "FAILED" because the Content-Type header is 1620 * not what the server expects */ 1621 if(hr == S_OK) 1622 { 1623 ok(!memcmp(bstrResponse, wszExpectedResponse, sizeof(wszExpectedResponse)), 1624 "expected %s, got %s\n", wine_dbgstr_w(wszExpectedResponse), wine_dbgstr_w(bstrResponse)); 1625 SysFreeString(bstrResponse); 1626 } 1627 1628 /* POST: VT_VARIANT body */ 1629 /* VT_VARIANT|VT_BYREF fails on Windows 10 */ 1630 test_open(xhr, "POST", urlA, S_OK); 1631 1632 hr = IXMLHttpRequest_send(xhr, varbody); 1633 EXPECT_HR(hr, S_OK); 1634 1635 /* GET request */ 1636 test_open(xhr, "GET", xmltestA, S_OK); 1637 1638 V_VT(&varbody) = VT_EMPTY; 1639 1640 hr = IXMLHttpRequest_send(xhr, varbody); 1641 if (hr == INET_E_RESOURCE_NOT_FOUND) 1642 { 1643 skip("No connection could be made with test.winehq.org\n"); 1644 IXMLHttpRequest_Release(xhr); 1645 return; 1646 } 1647 EXPECT_HR(hr, S_OK); 1648 1649 hr = IXMLHttpRequest_get_responseText(xhr, NULL); 1650 ok(hr == E_POINTER || broken(hr == E_INVALIDARG) /* <win8 */, "got 0x%08x\n", hr); 1651 1652 hr = IXMLHttpRequest_get_responseText(xhr, &bstrResponse); 1653 EXPECT_HR(hr, S_OK); 1654 ok(!memcmp(bstrResponse, _bstr_(xmltestbodyA), sizeof(xmltestbodyA)*sizeof(WCHAR)), 1655 "expected %s, got %s\n", xmltestbodyA, wine_dbgstr_w(bstrResponse)); 1656 SysFreeString(bstrResponse); 1657 1658 hr = IXMLHttpRequest_get_responseBody(xhr, NULL); 1659 EXPECT_HR(hr, E_INVALIDARG); 1660 1661 V_VT(&varbody) = VT_EMPTY; 1662 hr = IXMLHttpRequest_get_responseBody(xhr, &varbody); 1663 EXPECT_HR(hr, S_OK); 1664 ok(V_VT(&varbody) == (VT_ARRAY|VT_UI1), "got type %d, expected %d\n", V_VT(&varbody), VT_ARRAY|VT_UI1); 1665 ok(SafeArrayGetDim(V_ARRAY(&varbody)) == 1, "got %d, expected one dimension\n", SafeArrayGetDim(V_ARRAY(&varbody))); 1666 1667 bound = -1; 1668 hr = SafeArrayGetLBound(V_ARRAY(&varbody), 1, &bound); 1669 EXPECT_HR(hr, S_OK); 1670 ok(bound == 0, "got %d, expected zero bound\n", bound); 1671 1672 hr = SafeArrayAccessData(V_ARRAY(&varbody), &ptr); 1673 EXPECT_HR(hr, S_OK); 1674 ok(memcmp(ptr, xmltestbodyA, sizeof(xmltestbodyA)-1) == 0, "got wrong body data\n"); 1675 SafeArrayUnaccessData(V_ARRAY(&varbody)); 1676 1677 VariantClear(&varbody); 1678 1679 /* get_responseStream */ 1680 hr = IXMLHttpRequest_get_responseStream(xhr, NULL); 1681 EXPECT_HR(hr, E_INVALIDARG); 1682 1683 V_VT(&varbody) = VT_EMPTY; 1684 hr = IXMLHttpRequest_get_responseStream(xhr, &varbody); 1685 ok(V_VT(&varbody) == VT_UNKNOWN, "got type %d\n", V_VT(&varbody)); 1686 EXPECT_HR(hr, S_OK); 1687 EXPECT_REF(V_UNKNOWN(&varbody), 1); 1688 1689 g = NULL; 1690 hr = GetHGlobalFromStream((IStream*)V_UNKNOWN(&varbody), &g); 1691 EXPECT_HR(hr, S_OK); 1692 ok(g != NULL, "got %p\n", g); 1693 VariantClear(&varbody); 1694 1695 IDispatch_Release(event); 1696 1697 /* test if referrer header is sent */ 1698 test_open(xhr, "GET", referertesturl, S_OK); 1699 1700 V_VT(&varbody) = VT_EMPTY; 1701 hr = IXMLHttpRequest_send(xhr, varbody); 1702 ok(hr == S_OK, "got 0x%08x\n", hr); 1703 hr = IXMLHttpRequest_get_responseText(xhr, &str); 1704 ok(hr == S_OK, "got 0x%08x\n", hr); 1705 ok(!lstrcmpW(str, norefererW), "got response text %s\n", wine_dbgstr_w(str)); 1706 SysFreeString(str); 1707 1708 /* interaction with object site */ 1709 hr = IXMLHttpRequest_QueryInterface(xhr, &IID_IObjectWithSite, (void**)&obj_site); 1710 EXPECT_HR(hr, S_OK); 1711 1712 hr = IObjectWithSite_SetSite(obj_site, NULL); 1713 ok(hr == S_OK, "got 0x%08x\n", hr); 1714 1715 hr = IXMLHttpRequest_QueryInterface(xhr, &IID_IObjectWithSite, (void**)&obj_site2); 1716 EXPECT_HR(hr, S_OK); 1717 ok(obj_site == obj_site2 || broken(obj_site != obj_site2), "got new instance\n"); 1718 IObjectWithSite_Release(obj_site2); 1719 1720 set_xhr_site(xhr); 1721 1722 test_open(xhr, "GET", "tests/referer.php", S_OK); 1723 str1 = a2bstr("http://test.winehq.org/"); 1724 1725 V_VT(&varbody) = VT_EMPTY; 1726 hr = IXMLHttpRequest_send(xhr, varbody); 1727 ok(hr == S_OK, "got 0x%08x\n", hr); 1728 1729 hr = IXMLHttpRequest_get_responseText(xhr, &str); 1730 ok(hr == S_OK, "got 0x%08x\n", hr); 1731 ok(!lstrcmpW(str, str1), "got response text %s, expected %s\n", wine_dbgstr_w(str), wine_dbgstr_w(str1)); 1732 SysFreeString(str); 1733 SysFreeString(str1); 1734 1735 /* try to set site another time */ 1736 hr = IObjectWithSite_SetSite(obj_site, &testsite); 1737 EXPECT_HR(hr, S_OK); 1738 1739 IObjectWithSite_Release(obj_site); 1740 IXMLHttpRequest_Release(xhr); 1741 free_bstrs(); 1742 } 1743 1744 static void test_safe_httpreq(void) 1745 { 1746 IXMLHttpRequest *xhr; 1747 1748 xhr = create_xhr(); 1749 1750 set_safety_opt((IUnknown*)xhr, INTERFACESAFE_FOR_UNTRUSTED_DATA, -1); 1751 set_xhr_site(xhr); 1752 1753 /* different scheme */ 1754 test_open(xhr, "GET", "https://test.winehq.org/tests/hello.html", E_ACCESSDENIED); 1755 1756 /* different host */ 1757 test_open(xhr, "GET", "http://tests.winehq.org/tests/hello.html", E_ACCESSDENIED); 1758 test_open(xhr, "GET", "http://www.test.winehq.org/tests/hello.html", E_ACCESSDENIED); 1759 1760 IXMLHttpRequest_Release(xhr); 1761 free_bstrs(); 1762 } 1763 1764 START_TEST(httpreq) 1765 { 1766 IXMLHttpRequest *xhr; 1767 1768 CoInitialize(NULL); 1769 1770 if((xhr = create_xhr())) { 1771 IXMLHttpRequest_Release(xhr); 1772 1773 test_XMLHTTP(); 1774 test_safe_httpreq(); 1775 }else { 1776 win_skip("IXMLHTTPRequest is not available\n"); 1777 } 1778 1779 CoUninitialize(); 1780 } 1781