static void test_wmp(void) { IProvideClassInfo2 *class_info; IPersistStreamInit *psi; IOleObject *oleobj; GUID guid; LONG ref; HRESULT hres; hres = CoCreateInstance(&CLSID_WindowsMediaPlayer, NULL, CLSCTX_INPROC_SERVER, &IID_IOleObject, (void**)&oleobj); if(hres == REGDB_E_CLASSNOTREG) { win_skip("CLSID_WindowsMediaPlayer not registered\n"); return; } ok(hres == S_OK, "Coult not create CLSID_WindowsMediaPlayer instance: %08x\n", hres); hres = IOleObject_QueryInterface(oleobj, &IID_IProvideClassInfo2, (void**)&class_info); ok(hres == S_OK, "Could not get IProvideClassInfo2 iface: %08x\n", hres); hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &guid); ok(hres == S_OK, "GetGUID failed: %08x\n", hres); ok(IsEqualGUID(&guid, &IID__WMPOCXEvents), "guid = %s\n", wine_dbgstr_guid(&guid)); IProvideClassInfo2_Release(class_info); test_QI((IUnknown*)oleobj); hres = IOleObject_QueryInterface(oleobj, &IID_IPersistStreamInit, (void**)&psi); ok(hres == S_OK, "Could not get IPersistStreamInit iface: %08x\n", hres); IPersistStreamInit_Release(psi); ref = IOleObject_Release(oleobj); ok(!ref, "ref = %d\n", ref); }
BOOL InitWebBrowser(HHInfo *info, HWND hwndParent) { WebBrowserContainer *container; IOleInPlaceObject *inplace; HRESULT hr; RECT rc; container = heap_alloc_zero(sizeof(*container)); if (!container) return FALSE; container->IOleClientSite_iface.lpVtbl = &OleClientSiteVtbl; container->IOleInPlaceSite_iface.lpVtbl = &OleInPlaceSiteVtbl; container->IOleInPlaceFrame_iface.lpVtbl = &OleInPlaceFrameVtbl; container->IDocHostUIHandler_iface.lpVtbl = &DocHostUIHandlerVtbl; container->ref = 1; container->hwndWindow = hwndParent; info->web_browser = container; hr = OleCreate(&CLSID_WebBrowser, &IID_IOleObject, OLERENDER_DRAW, 0, &container->IOleClientSite_iface, &MyIStorage, (void **)&container->ole_obj); if (FAILED(hr)) goto error; GetClientRect(hwndParent, &rc); hr = OleSetContainedObject((struct IUnknown *)container->ole_obj, TRUE); if (FAILED(hr)) goto error; hr = IOleObject_DoVerb(container->ole_obj, OLEIVERB_SHOW, NULL, &container->IOleClientSite_iface, -1, hwndParent, &rc); if (FAILED(hr)) goto error; hr = IOleObject_QueryInterface(container->ole_obj, &IID_IOleInPlaceObject, (void**)&inplace); if (FAILED(hr)) goto error; IOleInPlaceObject_SetObjectRects(inplace, &rc, &rc); IOleInPlaceObject_Release(inplace); hr = IOleObject_QueryInterface(container->ole_obj, &IID_IWebBrowser2, (void **)&container->web_browser); if (SUCCEEDED(hr)) return TRUE; error: ReleaseWebBrowser(info); return FALSE; }
static void test_ConnectionPoint(IOleObject *unk) { IConnectionPointContainer *container; IConnectionPoint *point; HRESULT hres; static DWORD dw = 100; hres = IOleObject_QueryInterface(unk, &IID_IConnectionPointContainer, (void**)&container); ok(hres == S_OK, "QueryInterface(IID_IConnectionPointContainer) failed: %08x\n", hres); if(FAILED(hres)) return; hres = IConnectionPointContainer_FindConnectionPoint(container, &IID__WMPOCXEvents, &point); IConnectionPointContainer_Release(container); ok(hres == S_OK, "FindConnectionPoint failed: %08x\n", hres); if(FAILED(hres)) return; hres = IConnectionPoint_Advise(point, (IUnknown*)&WMPOCXEvents, &dw); ok(hres == S_OK, "Advise failed: %08x\n", hres); ok(dw == 1, "dw=%d, expected 1\n", dw); hres = IConnectionPoint_Unadvise(point, dw); ok(hres == S_OK, "Unadvise failed: %08x\n", hres); IConnectionPoint_Release(point); }
HRESULT WINAPI WMPFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) { WindowsMediaPlayer *wmp; HRESULT hres; TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv); wmp = heap_alloc_zero(sizeof(*wmp)); if(!wmp) return E_OUTOFMEMORY; wmp->IOleObject_iface.lpVtbl = &OleObjectVtbl; wmp->IProvideClassInfo2_iface.lpVtbl = &ProvideClassInfo2Vtbl; wmp->IPersistStreamInit_iface.lpVtbl = &PersistStreamInitVtbl; wmp->IOleInPlaceObjectWindowless_iface.lpVtbl = &OleInPlaceObjectWindowlessVtbl; wmp->IConnectionPointContainer_iface.lpVtbl = &ConnectionPointContainerVtbl; wmp->IOleControl_iface.lpVtbl = &OleControlVtbl; wmp->ref = 1; init_player_ifaces(wmp); hres = IOleObject_QueryInterface(&wmp->IOleObject_iface, riid, ppv); IOleObject_Release(&wmp->IOleObject_iface); return hres; }
static void IOCS_OnSize( IOCS* This, LPCRECT rect ) { SIZEL inPix, inHi; This->size.left = rect->left; This->size.right = rect->right; This->size.top = rect->top; This->size.bottom = rect->bottom; if ( !This->control ) return; inPix.cx = rect->right - rect->left; inPix.cy = rect->bottom - rect->top; AtlPixelToHiMetric( &inPix, &inHi ); IOleObject_SetExtent( This->control, DVASPECT_CONTENT, &inHi ); if ( This->fInPlace ) { IOleInPlaceObject *wl; if ( SUCCEEDED( IOleObject_QueryInterface( This->control, &IID_IOleInPlaceObject, (void**)&wl ) ) ) { IOleInPlaceObject_SetObjectRects( wl, rect, rect ); IOleInPlaceObject_Release( wl ); } } }
static void test_wmp_ifaces(IOleObject *oleobj) { IWMPSettings *settings, *settings_qi; IWMPPlayer4 *player4; HRESULT hres; hres = IOleObject_QueryInterface(oleobj, &IID_IWMPPlayer4, (void**)&player4); ok(hres == S_OK, "Could not get IWMPPlayer4 iface: %08x\n", hres); settings = NULL; hres = IWMPPlayer4_get_settings(player4, &settings); ok(hres == S_OK, "get_settings failed: %08x\n", hres); ok(settings != NULL, "settings = NULL\n"); hres = IOleObject_QueryInterface(oleobj, &IID_IWMPSettings, (void**)&settings_qi); ok(hres == S_OK, "Could not get IWMPSettings iface: %08x\n", hres); ok(settings == settings_qi, "settings != settings_qi\n"); IWMPSettings_Release(settings_qi); IWMPSettings_Release(settings); IWMPPlayer4_Release(player4); }
static HRESULT STDMETHODCALLTYPE InPlace_OnPosRectChange(IOleInPlaceSite *iface, LPCRECT lprcPosRect) { WebBrowserContainer *This = impl_from_IOleInPlaceSite(iface); IOleInPlaceObject *inplace; if (IOleObject_QueryInterface(This->ole_obj, &IID_IOleInPlaceObject, (void **)&inplace) == S_OK) { IOleInPlaceObject_SetObjectRects(inplace, lprcPosRect, lprcPosRect); IOleInPlaceObject_Release(inplace); } return S_OK; }
/*********************************************************************** * AtlAxGetControl [atl100.@] * */ HRESULT WINAPI AtlAxGetControl(HWND hWnd, IUnknown **pUnk) { IOCS *This; TRACE( "(%p, %p)\n", hWnd, pUnk ); *pUnk = NULL; This = (IOCS*) GetWindowLongPtrW( hWnd, GWLP_USERDATA ); if ( !This || !This->control ) { WARN("No control attached to %p\n", hWnd ); return E_FAIL; } return IOleObject_QueryInterface( This->control, &IID_IUnknown, (void**) pUnk ); }
static void test_IConnectionPointContainer(IOleObject *oleobj) { IConnectionPointContainer *container; IConnectionPoint *point; HRESULT hres; hres = IOleObject_QueryInterface(oleobj, &IID_IConnectionPointContainer, (void**)&container); ok(hres == S_OK, "Could not get IConnectionPointContainer iface: %08x\n", hres); hres = IConnectionPointContainer_FindConnectionPoint(container, &IID_IPropertyNotifySink, &point); ok(hres == CONNECT_E_NOCONNECTION, "got: %08x\n", hres); point = NULL; hres = IConnectionPointContainer_FindConnectionPoint(container, &IID_IWMPEvents, &point); todo_wine ok(hres == S_OK, "got: %08x\n", hres); if(point) IConnectionPoint_Release(point); point = NULL; hres = IConnectionPointContainer_FindConnectionPoint(container, &IID_IWMPEvents2, &point); todo_wine ok(hres == S_OK, "got: %08x\n", hres); if(point) IConnectionPoint_Release(point); point = NULL; hres = IConnectionPointContainer_FindConnectionPoint(container, &IID_IWMPEvents3, &point); if(FAILED(hres)) todo_wine win_skip("IWMPEvents3 not supported\n"); if(point) IConnectionPoint_Release(point); point = NULL; hres = IConnectionPointContainer_FindConnectionPoint(container, &IID_IWMPEvents4, &point); if(FAILED(hres)) todo_wine win_skip("IWMPEvents4 not supported\n"); if(point) IConnectionPoint_Release(point); point = NULL; hres = IConnectionPointContainer_FindConnectionPoint(container, &IID__WMPOCXEvents, &point); ok(hres == S_OK, "got: %08x\n", hres); if(point) IConnectionPoint_Release(point); IConnectionPointContainer_Release(container); }
static void test_olestream(void) { HRESULT hr; const CLSID non_existent_class = {0xa5f1772f, 0x3772, 0x490f, {0x9e, 0xc6, 0x77, 0x13, 0xe8, 0xb3, 0x4b, 0x5d}}; IOleObject *ole_obj; IPersistStorage *persist; IStorage *stg; IStream *stm; static const WCHAR olestream[] = {1,'O','l','e',0}; ULONG read; ole_stream_header_t header; hr = create_storage(&stg); ok(hr == S_OK, "got %08x\n", hr); hr = IStorage_OpenStream(stg, olestream, NULL, STGM_SHARE_EXCLUSIVE | STGM_READ, 0, &stm); ok(hr == STG_E_FILENOTFOUND, "got %08x\n", hr); hr = OleCreateDefaultHandler(&non_existent_class, 0, &IID_IOleObject, (void**)&ole_obj); ok(hr == S_OK, "got %08x\n", hr); hr = IOleObject_QueryInterface(ole_obj, &IID_IPersistStorage, (void**)&persist); ok(hr == S_OK, "got %08x\n", hr); hr = IPersistStorage_InitNew(persist, stg); ok(hr == S_OK, "got %08x\n", hr); hr = IStorage_OpenStream(stg, olestream, NULL, STGM_SHARE_EXCLUSIVE | STGM_READ, 0, &stm); ok(hr == S_OK, "got %08x\n", hr); hr = IStream_Read(stm, &header, sizeof(header), &read); ok(hr == S_OK, "got %08x\n", hr); ok(read == sizeof(header), "read %d\n", read); ok(header.version == 0x02000001, "got version %08x\n", header.version); ok(header.flags == 0x0, "got flags %08x\n", header.flags); ok(header.link_update_opt == 0x0, "got link update option %08x\n", header.link_update_opt); ok(header.res == 0x0, "got reserved %08x\n", header.res); ok(header.moniker_size == 0x0, "got moniker size %08x\n", header.moniker_size); IStream_Release(stm); IPersistStorage_Release(persist); IOleObject_Release(ole_obj); IStorage_Release(stg); }
static void IOCS_OnDraw( IOCS *This ) { IViewObject *view; if ( !This->control || !This->fWindowless ) return; if ( SUCCEEDED( IOleObject_QueryInterface( This->control, &IID_IViewObject, (void**)&view ) ) ) { HDC dc = GetDC( This->hWnd ); RECTL rect; rect.left = This->size.left; rect.top = This->size.top; rect.bottom = This->size.bottom; rect.right = This->size.right; IViewObject_Draw( view, DVASPECT_CONTENT, ~0, NULL, NULL, 0, dc, &rect, &rect, NULL, 0 ); IViewObject_Release( view ); ReleaseDC( This->hWnd, dc ); } }
void ReleaseWebBrowser(HHInfo *info) { WebBrowserContainer *container = info->web_browser; HRESULT hres; if(!container) return; if(container->ole_obj) { IOleInPlaceSite *inplace; hres = IOleObject_QueryInterface(container->ole_obj, &IID_IOleInPlaceSite, (void**)&inplace); if(SUCCEEDED(hres)) { IOleInPlaceSite_OnInPlaceDeactivate(inplace); IOleInPlaceSite_Release(inplace); } IOleObject_SetClientSite(container->ole_obj, NULL); } info->web_browser = NULL; IOleClientSite_Release(&container->IOleClientSite_iface); }
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite) { HTMLDocument *This = impl_from_IOleObject(iface); IOleCommandTarget *cmdtrg = NULL; IOleWindow *ole_window; BOOL hostui_setup; VARIANT silent; HWND hwnd; HRESULT hres; TRACE("(%p)->(%p)\n", This, pClientSite); if(pClientSite == This->doc_obj->client) return S_OK; if(This->doc_obj->client) { IOleClientSite_Release(This->doc_obj->client); This->doc_obj->client = NULL; This->doc_obj->usermode = UNKNOWN_USERMODE; } if(This->doc_obj->hostui && !This->doc_obj->custom_hostui) { IDocHostUIHandler_Release(This->doc_obj->hostui); This->doc_obj->hostui = NULL; } if(This->doc_obj->doc_object_service) { IDocObjectService_Release(This->doc_obj->doc_object_service); This->doc_obj->doc_object_service = NULL; } memset(&This->doc_obj->hostinfo, 0, sizeof(DOCHOSTUIINFO)); This->doc_obj->is_webbrowser = FALSE; if(!pClientSite) return S_OK; IOleClientSite_AddRef(pClientSite); This->doc_obj->client = pClientSite; hostui_setup = This->doc_obj->hostui_setup; if(!This->doc_obj->hostui) { IDocHostUIHandler *uihandler; This->doc_obj->custom_hostui = FALSE; hres = IOleObject_QueryInterface(pClientSite, &IID_IDocHostUIHandler, (void**)&uihandler); if(SUCCEEDED(hres)) This->doc_obj->hostui = uihandler; } if(This->doc_obj->hostui) { DOCHOSTUIINFO hostinfo; LPOLESTR key_path = NULL, override_key_path = NULL; IDocHostUIHandler2 *uihandler2; memset(&hostinfo, 0, sizeof(DOCHOSTUIINFO)); hostinfo.cbSize = sizeof(DOCHOSTUIINFO); hres = IDocHostUIHandler_GetHostInfo(This->doc_obj->hostui, &hostinfo); if(SUCCEEDED(hres)) { TRACE("hostinfo = {%u %08x %08x %s %s}\n", hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick, debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS)); update_hostinfo(This->doc_obj, &hostinfo); This->doc_obj->hostinfo = hostinfo; } if(!hostui_setup) { hres = IDocHostUIHandler_GetOptionKeyPath(This->doc_obj->hostui, &key_path, 0); if(hres == S_OK && key_path) { if(key_path[0]) { /* FIXME: use key_path */ TRACE("key_path = %s\n", debugstr_w(key_path)); } CoTaskMemFree(key_path); } hres = IDocHostUIHandler_QueryInterface(This->doc_obj->hostui, &IID_IDocHostUIHandler2, (void**)&uihandler2); if(SUCCEEDED(hres)) { hres = IDocHostUIHandler2_GetOverrideKeyPath(uihandler2, &override_key_path, 0); if(hres == S_OK && override_key_path && override_key_path[0]) { if(override_key_path[0]) { /*FIXME: use override_key_path */ TRACE("override_key_path = %s\n", debugstr_w(override_key_path)); } CoTaskMemFree(override_key_path); } IDocHostUIHandler2_Release(uihandler2); } This->doc_obj->hostui_setup = TRUE; } } /* Native calls here GetWindow. What is it for? * We don't have anything to do with it here (yet). */ hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleWindow, (void**)&ole_window); if(SUCCEEDED(hres)) { IOleWindow_GetWindow(ole_window, &hwnd); IOleWindow_Release(ole_window); } hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { VARIANT var; OLECMD cmd = {OLECMDID_SETPROGRESSTEXT, 0}; if(!hostui_setup) { IDocObjectService *doc_object_service; IBrowserService *browser_service; IWebBrowser2 *wb; V_VT(&var) = VT_UNKNOWN; V_UNKNOWN(&var) = (IUnknown*)&This->window->IHTMLWindow2_iface; IOleCommandTarget_Exec(cmdtrg, &CGID_DocHostCmdPriv, DOCHOST_DOCCANNAVIGATE, 0, &var, NULL); hres = do_query_service((IUnknown*)pClientSite, &IID_IShellBrowser, &IID_IBrowserService, (void**)&browser_service); if(SUCCEEDED(hres)) { hres = IBrowserService_QueryInterface(browser_service, &IID_IDocObjectService, (void**)&doc_object_service); if(SUCCEEDED(hres)) { This->doc_obj->doc_object_service = doc_object_service; /* * Some embedding routines, esp. in regards to use of IDocObjectService, differ if * embedder supports IWebBrowserApp. */ hres = do_query_service((IUnknown*)pClientSite, &IID_IWebBrowserApp, &IID_IWebBrowser2, (void**)&wb); if(SUCCEEDED(hres)) { This->doc_obj->is_webbrowser = TRUE; IWebBrowser2_Release(wb); } IBrowserService_Release(browser_service); } } } IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &cmd, NULL); V_VT(&var) = VT_I4; V_I4(&var) = 0; IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSMAX, OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL); IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSPOS, OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL); IOleCommandTarget_Release(cmdtrg); } if(This->doc_obj->usermode == UNKNOWN_USERMODE) IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_USERMODE); IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED); hres = get_client_disp_property(This->doc_obj->client, DISPID_AMBIENT_SILENT, &silent); if(SUCCEEDED(hres)) { if(V_VT(&silent) != VT_BOOL) WARN("V_VT(silent) = %d\n", V_VT(&silent)); else if(V_BOOL(&silent)) FIXME("silent == true\n"); } IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_USERAGENT); IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_PALETTE); return S_OK; }
static void test_wmp(void) { IProvideClassInfo2 *class_info; IOleClientSite *client_site; IOleInPlaceObject *ipobj; IPersistStreamInit *psi; IOleObject *oleobj; IWMPCore *wmpcore; DWORD misc_status; RECT pos = {0,0,100,100}; HWND hwnd; GUID guid; LONG ref; HRESULT hres; BSTR str; hres = CoCreateInstance(&CLSID_WindowsMediaPlayer, NULL, CLSCTX_INPROC_SERVER, &IID_IOleObject, (void**)&oleobj); if(hres == REGDB_E_CLASSNOTREG) { win_skip("CLSID_WindowsMediaPlayer not registered\n"); return; } ok(hres == S_OK, "Could not create CLSID_WindowsMediaPlayer instance: %08x\n", hres); hres = IOleObject_QueryInterface(oleobj, &IID_IWMPCore, (void**)&wmpcore); ok(hres == S_OK, "got 0x%08x\n", hres); hres = IWMPCore_get_versionInfo(wmpcore, NULL); ok(hres == E_POINTER, "got 0x%08x\n", hres); hres = IWMPCore_get_versionInfo(wmpcore, &str); ok(hres == S_OK, "got 0x%08x\n", hres); SysFreeString(str); IWMPCore_Release(wmpcore); hres = IOleObject_QueryInterface(oleobj, &IID_IProvideClassInfo2, (void**)&class_info); ok(hres == S_OK, "Could not get IProvideClassInfo2 iface: %08x\n", hres); hres = IProvideClassInfo2_GetGUID(class_info, GUIDKIND_DEFAULT_SOURCE_DISP_IID, &guid); ok(hres == S_OK, "GetGUID failed: %08x\n", hres); ok(IsEqualGUID(&guid, &IID__WMPOCXEvents), "guid = %s\n", wine_dbgstr_guid(&guid)); IProvideClassInfo2_Release(class_info); test_QI((IUnknown*)oleobj); hres = IOleObject_GetMiscStatus(oleobj, DVASPECT_CONTENT, &misc_status); ok(hres == S_OK, "GetMiscStatus failed: %08x\n", hres); ok(misc_status == (OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|OLEMISC_INSIDEOUT |OLEMISC_CANTLINKINSIDE|OLEMISC_RECOMPOSEONRESIZE), "misc_status = %x\n", misc_status); hres = IOleObject_QueryInterface(oleobj, &IID_IPersistStreamInit, (void**)&psi); ok(hres == S_OK, "Could not get IPersistStreamInit iface: %08x\n", hres); hres = IOleObject_QueryInterface(oleobj, &IID_IOleInPlaceObject, (void**)&ipobj); ok(hres == S_OK, "Could not get IOleInPlaceObject iface: %08x\n", hres); hres = IPersistStreamInit_InitNew(psi); ok(hres == E_FAIL || broken(hres == S_OK /* Old WMP */), "InitNew failed: %08x\n", hres); SET_EXPECT(GetContainer); SET_EXPECT(GetExtendedControl); SET_EXPECT(GetWindow); SET_EXPECT(Invoke_USERMODE); hres = IOleObject_SetClientSite(oleobj, &ClientSite); ok(hres == S_OK, "SetClientSite failed: %08x\n", hres); todo_wine CHECK_CALLED(GetContainer); CHECK_CALLED(GetExtendedControl); todo_wine CHECK_CALLED(GetWindow); todo_wine CHECK_CALLED(Invoke_USERMODE); client_site = NULL; hres = IOleObject_GetClientSite(oleobj, &client_site); ok(hres == S_OK, "GetClientSite failed: %08x\n", hres); ok(client_site == &ClientSite, "client_site != ClientSite\n"); SET_EXPECT(GetWindow); hres = IPersistStreamInit_InitNew(psi); ok(hres == S_OK, "InitNew failed: %08x\n", hres); CHECK_CALLED(GetWindow); hwnd = (HWND)0xdeadbeef; hres = IOleInPlaceObject_GetWindow(ipobj, &hwnd); ok(hres == E_UNEXPECTED, "GetWindow failed: %08x\n", hres); ok(!hwnd, "hwnd = %p\n", hwnd); SET_EXPECT(GetWindow); SET_EXPECT(CanWindowlessActivate); SET_EXPECT(OnInPlaceActivateEx); SET_EXPECT(GetWindowContext); SET_EXPECT(ShowObject); hres = IOleObject_DoVerb(oleobj, OLEIVERB_INPLACEACTIVATE, NULL, &ClientSite, 0, container_hwnd, &pos); ok(hres == S_OK, "DoVerb failed: %08x\n", hres); CHECK_CALLED(GetWindow); CHECK_CALLED(CanWindowlessActivate); CHECK_CALLED(OnInPlaceActivateEx); CHECK_CALLED(GetWindowContext); CHECK_CALLED(ShowObject); hwnd = NULL; hres = IOleInPlaceObject_GetWindow(ipobj, &hwnd); ok(hres == S_OK, "GetWindow failed: %08x\n", hres); ok(hwnd != NULL, "hwnd = NULL\n"); test_window(hwnd); SetRect(&pos, 1, 2, 301, 312); hres = IOleInPlaceObject_SetObjectRects(ipobj, &pos, &pos); ok(hres == S_OK, "SetObjectRects failed: %08x\n", hres); GetClientRect(hwnd, &pos); test_rect_size(&pos, 300, 310); test_wmp_ifaces(oleobj); hres = IOleObject_DoVerb(oleobj, OLEIVERB_HIDE, NULL, &ClientSite, 0, container_hwnd, &pos); ok(hres == S_OK, "DoVerb failed: %08x\n", hres); ok(!IsWindowVisible(hwnd), "Window is visible\n"); SET_EXPECT(OnShowWindow_FALSE); SET_EXPECT(OnInPlaceDeactivate); hres = IOleObject_Close(oleobj, 0); ok(hres == S_OK, "Close failed: %08x\n", hres); todo_wine CHECK_CALLED(OnShowWindow_FALSE); CHECK_CALLED(OnInPlaceDeactivate); hwnd = (HWND)0xdeadbeef; hres = IOleInPlaceObject_GetWindow(ipobj, &hwnd); ok(hres == E_UNEXPECTED, "GetWindow failed: %08x\n", hres); ok(!hwnd, "hwnd = %p\n", hwnd); hres = IOleObject_Close(oleobj, 0); ok(hres == S_OK, "Close failed: %08x\n", hres); hres = IOleObject_SetClientSite(oleobj, NULL); ok(hres == S_OK, "SetClientSite failed: %08x\n", hres); client_site = (void*)0xdeadbeef; hres = IOleObject_GetClientSite(oleobj, &client_site); ok(hres == E_FAIL || broken(hres == S_OK), "GetClientSite failed: %08x\n", hres); ok(!client_site, "client_site = %p\n", client_site); IPersistStreamInit_Release(psi); IOleInPlaceObject_Release(ipobj); ref = IOleObject_Release(oleobj); ok(!ref, "ref = %d\n", ref); }
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite) { HTMLDocument *This = OLEOBJ_THIS(iface); IDocHostUIHandler *pDocHostUIHandler = NULL; IOleCommandTarget *cmdtrg = NULL; BOOL hostui_setup; VARIANT silent; HRESULT hres; TRACE("(%p)->(%p)\n", This, pClientSite); if(pClientSite == This->doc_obj->client) return S_OK; if(This->doc_obj->client) { IOleClientSite_Release(This->doc_obj->client); This->doc_obj->client = NULL; This->doc_obj->usermode = UNKNOWN_USERMODE; } if(This->doc_obj->hostui) { IDocHostUIHandler_Release(This->doc_obj->hostui); This->doc_obj->hostui = NULL; } memset(&This->doc_obj->hostinfo, 0, sizeof(DOCHOSTUIINFO)); if(!pClientSite) return S_OK; hostui_setup = This->doc_obj->hostui_setup; hres = IOleObject_QueryInterface(pClientSite, &IID_IDocHostUIHandler, (void**)&pDocHostUIHandler); if(SUCCEEDED(hres)) { DOCHOSTUIINFO hostinfo; LPOLESTR key_path = NULL, override_key_path = NULL; IDocHostUIHandler2 *pDocHostUIHandler2; memset(&hostinfo, 0, sizeof(DOCHOSTUIINFO)); hostinfo.cbSize = sizeof(DOCHOSTUIINFO); hres = IDocHostUIHandler_GetHostInfo(pDocHostUIHandler, &hostinfo); if(SUCCEEDED(hres)) { TRACE("hostinfo = {%u %08x %08x %s %s}\n", hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick, debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS)); update_hostinfo(This->doc_obj, &hostinfo); This->doc_obj->hostinfo = hostinfo; } if(!hostui_setup) { hres = IDocHostUIHandler_GetOptionKeyPath(pDocHostUIHandler, &key_path, 0); if(hres == S_OK && key_path) { if(key_path[0]) { /* FIXME: use key_path */ TRACE("key_path = %s\n", debugstr_w(key_path)); } CoTaskMemFree(key_path); } hres = IDocHostUIHandler_QueryInterface(pDocHostUIHandler, &IID_IDocHostUIHandler2, (void**)&pDocHostUIHandler2); if(SUCCEEDED(hres)) { hres = IDocHostUIHandler2_GetOverrideKeyPath(pDocHostUIHandler2, &override_key_path, 0); if(hres == S_OK && override_key_path && override_key_path[0]) { if(override_key_path[0]) { /*FIXME: use override_key_path */ TRACE("override_key_path = %s\n", debugstr_w(override_key_path)); } CoTaskMemFree(override_key_path); } IDocHostUIHandler2_Release(pDocHostUIHandler2); } This->doc_obj->hostui_setup = TRUE; } } /* Native calls here GetWindow. What is it for? * We don't have anything to do with it here (yet). */ if(pClientSite) { IOleWindow *pOleWindow = NULL; HWND hwnd; hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleWindow, (void**)&pOleWindow); if(SUCCEEDED(hres)) { IOleWindow_GetWindow(pOleWindow, &hwnd); IOleWindow_Release(pOleWindow); } } hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleCommandTarget, (void**)&cmdtrg); if(SUCCEEDED(hres)) { VARIANT var; OLECMD cmd = {OLECMDID_SETPROGRESSTEXT, 0}; if(!hostui_setup) { V_VT(&var) = VT_UNKNOWN; V_UNKNOWN(&var) = (IUnknown*)HTMLWINDOW2(This->window); IOleCommandTarget_Exec(cmdtrg, &CGID_DocHostCmdPriv, DOCHOST_DOCCANNAVIGATE, 0, &var, NULL); } IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &cmd, NULL); V_VT(&var) = VT_I4; V_I4(&var) = 0; IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSMAX, OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL); IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSPOS, OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL); IOleCommandTarget_Release(cmdtrg); } IOleClientSite_AddRef(pClientSite); This->doc_obj->client = pClientSite; This->doc_obj->hostui = pDocHostUIHandler; if(This->doc_obj->usermode == UNKNOWN_USERMODE) IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_USERMODE); IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_OFFLINEIFNOTCONNECTED); hres = get_client_disp_property(This->doc_obj->client, DISPID_AMBIENT_SILENT, &silent); if(SUCCEEDED(hres)) { if(V_VT(&silent) != VT_BOOL) WARN("V_VT(silent) = %d\n", V_VT(&silent)); else if(V_BOOL(&silent)) FIXME("silent == true\n"); } IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_USERAGENT); IOleControl_OnAmbientPropertyChange(CONTROL(This), DISPID_AMBIENT_PALETTE); return S_OK; }
static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface, REFIID riid, void **ppv) { WindowsMediaPlayer *This = impl_from_IOleControl(iface); return IOleObject_QueryInterface(&This->IOleObject_iface, riid, ppv); }
void ME_DrawOLE(ME_Context *c, int x, int y, ME_Run *run, ME_Paragraph *para, BOOL selected) { IDataObject* ido; FORMATETC fmt; STGMEDIUM stgm; DIBSECTION dibsect; ENHMETAHEADER emh; HDC hMemDC; SIZE sz; BOOL has_size; assert(run->nFlags & MERF_GRAPHICS); assert(run->ole_obj); if (IOleObject_QueryInterface(run->ole_obj->poleobj, &IID_IDataObject, (void**)&ido) != S_OK) { FIXME("Couldn't get interface\n"); return; } has_size = run->ole_obj->sizel.cx != 0 || run->ole_obj->sizel.cy != 0; fmt.cfFormat = CF_BITMAP; fmt.ptd = NULL; fmt.dwAspect = DVASPECT_CONTENT; fmt.lindex = -1; fmt.tymed = TYMED_GDI; if (IDataObject_GetData(ido, &fmt, &stgm) != S_OK) { fmt.cfFormat = CF_ENHMETAFILE; fmt.tymed = TYMED_ENHMF; if (IDataObject_GetData(ido, &fmt, &stgm) != S_OK) { FIXME("Couldn't get storage medium\n"); IDataObject_Release(ido); return; } } switch (stgm.tymed) { case TYMED_GDI: GetObjectW(stgm.u.hBitmap, sizeof(dibsect), &dibsect); hMemDC = CreateCompatibleDC(c->hDC); SelectObject(hMemDC, stgm.u.hBitmap); if (has_size) { convert_sizel(c, &run->ole_obj->sizel, &sz); } else { sz.cx = MulDiv(dibsect.dsBm.bmWidth, c->dpi.cx, 96); sz.cy = MulDiv(dibsect.dsBm.bmHeight, c->dpi.cy, 96); } if (c->editor->nZoomNumerator != 0) { sz.cx = MulDiv(sz.cx, c->editor->nZoomNumerator, c->editor->nZoomDenominator); sz.cy = MulDiv(sz.cy, c->editor->nZoomNumerator, c->editor->nZoomDenominator); } if (sz.cx == dibsect.dsBm.bmWidth && sz.cy == dibsect.dsBm.bmHeight) { BitBlt(c->hDC, x, y - sz.cy, dibsect.dsBm.bmWidth, dibsect.dsBm.bmHeight, hMemDC, 0, 0, SRCCOPY); } else { StretchBlt(c->hDC, x, y - sz.cy, sz.cx, sz.cy, hMemDC, 0, 0, dibsect.dsBm.bmWidth, dibsect.dsBm.bmHeight, SRCCOPY); } DeleteDC(hMemDC); if (!stgm.pUnkForRelease) DeleteObject(stgm.u.hBitmap); break; case TYMED_ENHMF: GetEnhMetaFileHeader(stgm.u.hEnhMetaFile, sizeof(emh), &emh); if (has_size) { convert_sizel(c, &run->ole_obj->sizel, &sz); } else { sz.cy = MulDiv(emh.rclBounds.bottom - emh.rclBounds.top, c->dpi.cx, 96); sz.cx = MulDiv(emh.rclBounds.right - emh.rclBounds.left, c->dpi.cy, 96); } if (c->editor->nZoomNumerator != 0) { sz.cx = MulDiv(sz.cx, c->editor->nZoomNumerator, c->editor->nZoomDenominator); sz.cy = MulDiv(sz.cy, c->editor->nZoomNumerator, c->editor->nZoomDenominator); } { RECT rc; rc.left = x; rc.top = y - sz.cy; rc.right = x + sz.cx; rc.bottom = y; PlayEnhMetaFile(c->hDC, stgm.u.hEnhMetaFile, &rc); } if (!stgm.pUnkForRelease) DeleteEnhMetaFile(stgm.u.hEnhMetaFile); break; default: FIXME("Unsupported tymed %d\n", stgm.tymed); selected = FALSE; break; } if (selected && !c->editor->bHideSelection) PatBlt(c->hDC, x, y - sz.cy, sz.cx, sz.cy, DSTINVERT); IDataObject_Release(ido); }
/****************************************************************************** * ME_GetOLEObjectSize * * Sets run extent for OLE objects. */ void ME_GetOLEObjectSize(const ME_Context *c, ME_Run *run, SIZE *pSize) { IDataObject* ido; FORMATETC fmt; STGMEDIUM stgm; DIBSECTION dibsect; ENHMETAHEADER emh; assert(run->nFlags & MERF_GRAPHICS); assert(run->ole_obj); if (run->ole_obj->sizel.cx != 0 || run->ole_obj->sizel.cy != 0) { convert_sizel(c, &run->ole_obj->sizel, pSize); if (c->editor->nZoomNumerator != 0) { pSize->cx = MulDiv(pSize->cx, c->editor->nZoomNumerator, c->editor->nZoomDenominator); pSize->cy = MulDiv(pSize->cy, c->editor->nZoomNumerator, c->editor->nZoomDenominator); } return; } IOleObject_QueryInterface(run->ole_obj->poleobj, &IID_IDataObject, (void**)&ido); fmt.cfFormat = CF_BITMAP; fmt.ptd = NULL; fmt.dwAspect = DVASPECT_CONTENT; fmt.lindex = -1; fmt.tymed = TYMED_GDI; if (IDataObject_GetData(ido, &fmt, &stgm) != S_OK) { fmt.cfFormat = CF_ENHMETAFILE; fmt.tymed = TYMED_ENHMF; if (IDataObject_GetData(ido, &fmt, &stgm) != S_OK) { FIXME("unsupported format\n"); pSize->cx = pSize->cy = 0; IDataObject_Release(ido); return; } } switch (stgm.tymed) { case TYMED_GDI: GetObjectW(stgm.u.hBitmap, sizeof(dibsect), &dibsect); pSize->cx = dibsect.dsBm.bmWidth; pSize->cy = dibsect.dsBm.bmHeight; if (!stgm.pUnkForRelease) DeleteObject(stgm.u.hBitmap); break; case TYMED_ENHMF: GetEnhMetaFileHeader(stgm.u.hEnhMetaFile, sizeof(emh), &emh); pSize->cx = emh.rclBounds.right - emh.rclBounds.left; pSize->cy = emh.rclBounds.bottom - emh.rclBounds.top; if (!stgm.pUnkForRelease) DeleteEnhMetaFile(stgm.u.hEnhMetaFile); break; default: FIXME("Unsupported tymed %d\n", stgm.tymed); break; } IDataObject_Release(ido); if (c->editor->nZoomNumerator != 0) { pSize->cx = MulDiv(pSize->cx, c->editor->nZoomNumerator, c->editor->nZoomDenominator); pSize->cy = MulDiv(pSize->cy, c->editor->nZoomNumerator, c->editor->nZoomDenominator); } }
static void test_wmp_ifaces(IOleObject *oleobj) { IWMPSettings *settings, *settings_qi; IWMPPlayer4 *player4; IWMPPlayer *player; IWMPMedia *media; IWMPControls *controls; VARIANT_BOOL vbool; IWMPNetwork *network; HRESULT hres; BSTR filename; BSTR url; hres = IOleObject_QueryInterface(oleobj, &IID_IWMPPlayer4, (void**)&player4); ok(hres == S_OK, "Could not get IWMPPlayer4 iface: %08x\n", hres); controls = NULL; hres = IWMPPlayer4_get_controls(player4, &controls); ok(hres == S_OK, "get_controls failed: %08x\n", hres); ok(controls != NULL, "controls = NULL\n"); player = NULL; hres = IWMPControls_QueryInterface(controls, &IID_IWMPPlayer, (void**)&player); ok(hres != S_OK, "Getting IWMPPlayer from IWMPControls SUCCEEDED\n"); ok(player == NULL, "player != NULL\n"); IWMPControls_Release(controls); /* IWPNetwork */ network = NULL; hres = IWMPPlayer4_get_network(player4, &network); ok(hres == S_OK, "get_network failed: %08x\n", hres); ok(network != NULL, "network = NULL\n"); player = NULL; hres = IWMPNetwork_QueryInterface(network, &IID_IWMPPlayer, (void**)&player); ok(hres != S_OK, "Getting IWMPPlayer from IWMPNetwork SUCCEEDED\n"); ok(player == NULL, "player != NULL\n"); IWMPNetwork_Release(network); media = NULL; hres = IWMPPlayer4_QueryInterface(player4, &IID_IWMPMedia, (void**)&media); ok(hres == E_NOINTERFACE, "get_currentMedia SUCCEEDED: %08x\n", hres); ok(media == NULL, "media != NULL\n"); /* Test media put/get */ media = NULL; hres = IWMPPlayer4_get_currentMedia(player4, &media); ok(hres == S_FALSE, "get_currentMedia SUCCEEDED\n"); ok(media == NULL, "media != NULL\n"); filename = SysAllocString(load_resource(mp3file)); SET_EXPECT(GetContainer); SET_EXPECT(Invoke_USERMODE); hres = IWMPPlayer4_put_URL(player4, filename); ok(hres == S_OK, "IWMPPlayer4_put_URL failed: %08x\n", hres); todo_wine CHECK_CALLED_OR_BROKEN(GetContainer); todo_wine CHECK_CALLED(Invoke_USERMODE); url = NULL; SET_EXPECT(Invoke_USERMODE); hres = IWMPPlayer4_get_URL(player4, &url); ok(hres == S_OK, "IWMPPlayer4_get_URL failed: %08x\n", hres); ok(0 == lstrcmpW(url, filename), "%s != %s\n", wine_dbgstr_w(url), wine_dbgstr_w(filename)); todo_wine CHECK_CALLED(Invoke_USERMODE); SysFreeString(url); hres = IWMPPlayer4_get_currentMedia(player4, &media); ok(hres == S_OK, "get_currentMedia failed: %08x\n", hres); ok(media != NULL, "media = (%p)\n", media); url = NULL; hres = IWMPMedia_get_sourceURL(media, &url); ok(hres == S_OK, "IWMPMedia_get_sourceURL failed: %08x\n", hres); ok(0 == lstrcmpW(url, filename), "%s != %s\n", wine_dbgstr_w(url), wine_dbgstr_w(filename)); SysFreeString(url); SET_EXPECT(GetContainer); hres = IWMPPlayer4_put_currentMedia(player4, media); ok(hres == S_OK, "put_currentMedia failed: %08x\n", hres); todo_wine CHECK_CALLED_OR_BROKEN(GetContainer); IWMPMedia_Release(media); hres = IWMPPlayer4_get_currentMedia(player4, &media); ok(hres == S_OK, "get_currentMedia failed: %08x\n", hres); ok(media != NULL, "media = (%p)\n", media); IWMPMedia_Release(media); settings = NULL; hres = IWMPPlayer4_get_settings(player4, &settings); ok(hres == S_OK, "get_settings failed: %08x\n", hres); ok(settings != NULL, "settings = NULL\n"); hres = IOleObject_QueryInterface(oleobj, &IID_IWMPSettings, (void**)&settings_qi); ok(hres == S_OK, "Could not get IWMPSettings iface: %08x\n", hres); ok(settings == settings_qi, "settings != settings_qi\n"); IWMPSettings_Release(settings_qi); /* Test few settings put/gets */ hres = IWMPSettings_get_autoStart(settings, &vbool); ok(hres == S_OK, "Could not get autoStart from IWMPSettings: %08x\n", hres); ok(vbool == VARIANT_TRUE, "autoStart = %x\n", vbool); hres = IWMPSettings_put_autoStart(settings, VARIANT_FALSE); ok(hres == S_OK, "Could not put autoStart in IWMPSettings: %08x\n", hres); hres = IWMPSettings_get_autoStart(settings, &vbool); ok(hres == S_OK, "Could not get autoStart from IWMPSettings: %08x\n", hres); ok(!vbool, "autoStart = %x\n", vbool); hres = IWMPSettings_get_invokeURLs(settings, &vbool); ok(hres == S_OK, "Could not get invokeURLs from IWMPSettings: %08x\n", hres); ok(vbool == VARIANT_TRUE, "invokeURLs = %x\n", vbool); hres = IWMPSettings_put_invokeURLs(settings, VARIANT_FALSE); ok(hres == S_OK, "Could not put invokeURLs in IWMPSettings: %08x\n", hres); hres = IWMPSettings_get_invokeURLs(settings, &vbool); ok(hres == S_OK, "Could not get invokeURLs from IWMPSettings: %08x\n", hres); ok(!vbool, "invokeURLs = %x\n", vbool); hres = IWMPSettings_get_enableErrorDialogs(settings, &vbool); ok(hres == S_OK, "Could not get enableErrorDialogs from IWMPSettings: %08x\n", hres); ok(vbool == VARIANT_FALSE, "enableErrorDialogs = %x\n", vbool); hres = IWMPSettings_put_enableErrorDialogs(settings, VARIANT_TRUE); ok(hres == S_OK, "Could not put enableErrorDialogs in IWMPSettings: %08x\n", hres); hres = IWMPSettings_get_enableErrorDialogs(settings, &vbool); ok(hres == S_OK, "Could not get enableErrorDialogs from IWMPSettings: %08x\n", hres); ok(vbool == VARIANT_TRUE, "enableErrorDialogs = %x\n", vbool); IWMPSettings_Release(settings); IWMPPlayer4_Release(player4); hres = IOleObject_QueryInterface(oleobj, &IID_IWMPPlayer, (void**)&player); ok(hres == S_OK, "Could not get IWMPPlayer iface: %08x\n", hres); settings = NULL; hres = IWMPPlayer_get_settings(player, &settings); ok(hres == S_OK, "get_settings failed: %08x\n", hres); ok(settings != NULL, "settings = NULL\n"); hres = IOleObject_QueryInterface(oleobj, &IID_IWMPSettings, (void**)&settings_qi); ok(hres == S_OK, "Could not get IWMPSettings iface: %08x\n", hres); ok(settings == settings_qi, "settings != settings_qi\n"); IWMPSettings_Release(settings_qi); IWMPSettings_Release(settings); IWMPPlayer_Release(player); DeleteFileW(filename); SysFreeString(filename); }
static HRESULT WINAPI ProvideClassInfo2_QueryInterface(IProvideClassInfo2 *iface, REFIID riid, void **ppv) { WindowsMediaPlayer *This = impl_from_IProvideClassInfo2(iface); return IOleObject_QueryInterface(&This->IOleObject_iface, riid, ppv); }
/*********************************************************************** * AtlAxCreateControlEx [atl100.@] * * REMARKS * See http://www.codeproject.com/com/cwebpage.asp for some background * */ HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR lpszName, HWND hWnd, IStream *pStream, IUnknown **ppUnkContainer, IUnknown **ppUnkControl, REFIID iidSink, IUnknown *punkSink) { CLSID controlId; HRESULT hRes; IOleObject *pControl; IUnknown *pUnkControl; IPersistStreamInit *pPSInit; IUnknown *pContainer; enum {IsGUID=0,IsHTML=1,IsURL=2} content; TRACE("(%s %p %p %p %p %p %p)\n", debugstr_w(lpszName), hWnd, pStream, ppUnkContainer, ppUnkControl, iidSink, punkSink); hRes = CLSIDFromString( lpszName, &controlId ); if ( FAILED(hRes) ) hRes = CLSIDFromProgID( lpszName, &controlId ); if ( SUCCEEDED( hRes ) ) content = IsGUID; else { /* FIXME - check for MSHTML: prefix! */ content = IsURL; controlId = CLSID_WebBrowser; } hRes = CoCreateInstance( &controlId, 0, CLSCTX_ALL, &IID_IOleObject, (void**) &pControl ); if ( FAILED( hRes ) ) { WARN( "cannot create ActiveX control %s instance - error 0x%08x\n", debugstr_guid( &controlId ), hRes ); return hRes; } hRes = IOleObject_QueryInterface( pControl, &IID_IPersistStreamInit, (void**) &pPSInit ); if ( SUCCEEDED( hRes ) ) { if (!pStream) IPersistStreamInit_InitNew( pPSInit ); else IPersistStreamInit_Load( pPSInit, pStream ); IPersistStreamInit_Release( pPSInit ); } else WARN("cannot get IID_IPersistStreamInit out of control\n"); IOleObject_QueryInterface( pControl, &IID_IUnknown, (void**) &pUnkControl ); IOleObject_Release( pControl ); hRes = AtlAxAttachControl( pUnkControl, hWnd, &pContainer ); if ( FAILED( hRes ) ) WARN("cannot attach control to window\n"); if ( content == IsURL ) { IWebBrowser2 *browser; hRes = IOleObject_QueryInterface( pControl, &IID_IWebBrowser2, (void**) &browser ); if ( !browser ) WARN( "Cannot query IWebBrowser2 interface: %08x\n", hRes ); else { VARIANT url; IWebBrowser2_put_Visible( browser, VARIANT_TRUE ); /* it seems that native does this on URL (but do not on MSHTML:! why? */ V_VT(&url) = VT_BSTR; V_BSTR(&url) = SysAllocString( lpszName ); hRes = IWebBrowser2_Navigate2( browser, &url, NULL, NULL, NULL, NULL ); if ( FAILED( hRes ) ) WARN( "IWebBrowser2::Navigate2 failed: %08x\n", hRes ); SysFreeString( V_BSTR(&url) ); IWebBrowser2_Release( browser ); } } if (ppUnkContainer) { *ppUnkContainer = pContainer; if ( pContainer ) IUnknown_AddRef( pContainer ); } if (ppUnkControl) { *ppUnkControl = pUnkControl; if ( pUnkControl ) IUnknown_AddRef( pUnkControl ); } if ( pUnkControl ) IUnknown_Release( pUnkControl ); if ( pContainer ) IUnknown_Release( pContainer ); return S_OK; }
static HRESULT WINAPI PersistStreamInit_QueryInterface(IPersistStreamInit *iface, REFIID riid, void **ppv) { WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface); return IOleObject_QueryInterface(&This->IOleObject_iface, riid, ppv); }
static HRESULT WINAPI ConnectionPointContainer_QueryInterface(IConnectionPointContainer *iface, REFIID riid, LPVOID *ppv) { WindowsMediaPlayer *This = impl_from_IConnectionPointContainer(iface); return IOleObject_QueryInterface(&This->IOleObject_iface, riid, ppv); }
static void test_packager(void) { IOleObject *oleobj; IPersistStorage *persist; DWORD len, bytes_read, status; HRESULT hr; HANDLE file; WCHAR filename[MAX_PATH]; char contents[11]; BOOL br, extended = FALSE; static const WCHAR filename3W[] = {'f','i','l','e','n','a','m','e','3','.','t','x','t',0}; hr = CoCreateInstance(&CLSID_Package, NULL, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER, &IID_IOleObject, (void**)&oleobj); ok(hr == S_OK || hr == REGDB_E_CLASSNOTREG, "CoCreateInstance(CLSID_Package) failed: %08x\n", hr); if(hr == S_OK){ IOleObject_Release(oleobj); /* older OSes store temporary files in obscure locations, so don't run * the full tests on them */ extended = TRUE; }else win_skip("Older OS doesn't support modern packager\n"); hr = CoCreateInstance(&CLSID_Package_Alt, NULL, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER, &IID_IOleObject, (void**)&oleobj); ok(hr == S_OK, "CoCreateInstance(CLSID_Package_Alt) failed: %08x\n", hr); hr = IOleObject_SetClientSite(oleobj, NULL); ok(hr == S_OK, "SetClientSite failed: %08x\n", hr); hr = IOleObject_SetClientSite(oleobj, &clientsite); ok(hr == S_OK, "SetClientSite failed: %08x\n", hr); hr = IOleObject_GetMiscStatus(oleobj, DVASPECT_CONTENT, NULL); ok(hr == E_INVALIDARG, "GetMiscStatus failed: %08x\n", hr); hr = IOleObject_GetMiscStatus(oleobj, DVASPECT_CONTENT, &status); ok(hr == S_OK, "GetMiscStatus failed: %08x\n", hr); ok(status == OLEMISC_ONLYICONIC || status == OLEMISC_CANTLINKINSIDE /* winxp */, "Got wrong DVASPECT_CONTENT status: 0x%x\n", status); hr = IOleObject_QueryInterface(oleobj, &IID_IPersistStorage, (void**)&persist); ok(hr == S_OK, "QueryInterface(IPersistStorage) failed: %08x\n", hr); hr = IPersistStorage_Load(persist, &stg); ok(hr == S_OK, "Load failed: %08x\n", hr); if(extended){ len = GetTempPathW(sizeof(filename) / sizeof(*filename), filename); lstrcpyW(filename + len, filename3W); file = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ok(file != INVALID_HANDLE_VALUE, "Couldn't find temporary file %s: %u\n", wine_dbgstr_w(filename), GetLastError()); br = ReadFile(file, contents, sizeof(contents), &bytes_read, NULL); ok(br == TRUE, "ReadFile failed\n"); ok(bytes_read == 10, "Got wrong file size: %u\n", bytes_read); ok(!memcmp(contents, "some text\n", 10), "Got wrong file contents\n"); CloseHandle(file); } hr = IOleObject_Close(oleobj, OLECLOSE_NOSAVE); ok(hr == S_OK, "Close failed: %08x\n", hr); if(extended){ file = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ok(file != INVALID_HANDLE_VALUE, "Temporary file shouldn't be deleted\n"); CloseHandle(file); } IPersistStorage_Release(persist); IOleObject_Release(oleobj); if(extended){ file = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ok(file == INVALID_HANDLE_VALUE, "Temporary file should be deleted\n"); } }
static HRESULT WINAPI WMPSettings_QueryInterface(IWMPSettings *iface, REFIID riid, void **ppv) { WindowsMediaPlayer *This = impl_from_IWMPSettings(iface); return IOleObject_QueryInterface(&This->IOleObject_iface, riid, ppv); }