wined3d: Pass a wined3d_resource_desc structure to wined3d_texture_create_3d().
[wine/multimedia.git] / dlls / ieframe / shellbrowser.c
blob55763db0050d17ad356b67d0ff6dba7fba72d2ee
1 /*
2 * Implementation of IShellBrowser interface
4 * Copyright 2011 Piotr Caban for CodeWeavers
5 * Copyright 2012 Jacek Caban for CodeWeavers
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include <assert.h>
24 #include "ieframe.h"
25 #include "exdispid.h"
27 #include "wine/debug.h"
29 WINE_DEFAULT_DEBUG_CHANNEL(ieframe);
31 static inline ShellBrowser *impl_from_IShellBrowser(IShellBrowser *iface)
33 return CONTAINING_RECORD(iface, ShellBrowser, IShellBrowser_iface);
36 static HRESULT WINAPI ShellBrowser_QueryInterface(IShellBrowser* iface, REFIID riid, void **ppv)
38 ShellBrowser *This = impl_from_IShellBrowser(iface);
40 if(IsEqualGUID(&IID_IUnknown, riid)) {
41 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
42 *ppv = &This->IShellBrowser_iface;
43 }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
44 TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv);
45 *ppv = &This->IShellBrowser_iface;
46 }else if(IsEqualGUID(&IID_IShellBrowser, riid)) {
47 TRACE("(%p)->(IID_IShellBrowser %p)\n", This, ppv);
48 *ppv = &This->IShellBrowser_iface;
49 }else if(IsEqualGUID(&IID_IBrowserService, riid)) {
50 TRACE("(%p)->(IID_IBrowserService %p)\n", This, ppv);
51 *ppv = &This->IBrowserService_iface;
52 }else if(IsEqualGUID(&IID_IDocObjectService, riid)) {
53 TRACE("(%p)->(IID_IDocObjectService %p)\n", This, ppv);
54 *ppv = &This->IDocObjectService_iface;
55 }else {
56 FIXME("%p %s %p\n", This, debugstr_guid(riid), ppv);
57 *ppv = NULL;
58 return E_NOINTERFACE;
61 IUnknown_AddRef((IUnknown*)*ppv);
62 return S_OK;
65 static ULONG WINAPI ShellBrowser_AddRef(
66 IShellBrowser* iface)
68 ShellBrowser *This = impl_from_IShellBrowser(iface);
69 LONG ref = InterlockedIncrement(&This->ref);
71 TRACE("(%p) ref=%d\n", This, ref);
73 return ref;
76 static ULONG WINAPI ShellBrowser_Release(IShellBrowser* iface)
78 ShellBrowser *This = impl_from_IShellBrowser(iface);
79 LONG ref = InterlockedDecrement(&This->ref);
81 TRACE("(%p) ref=%d\n", This, ref);
83 if(!ref) {
84 assert(!This->doc_host);
85 heap_free(This);
88 return ref;
91 static HRESULT WINAPI ShellBrowser_GetWindow(
92 IShellBrowser* iface,
93 HWND *phwnd)
95 ShellBrowser *This = impl_from_IShellBrowser(iface);
96 FIXME("%p %p\n", This, phwnd);
97 return E_NOTIMPL;
100 static HRESULT WINAPI ShellBrowser_ContextSensitiveHelp(
101 IShellBrowser* iface,
102 BOOL fEnterMode)
104 ShellBrowser *This = impl_from_IShellBrowser(iface);
105 FIXME("%p %d\n", This, fEnterMode);
106 return E_NOTIMPL;
109 static HRESULT WINAPI ShellBrowser_InsertMenusSB(
110 IShellBrowser* iface,
111 HMENU hmenuShared,
112 LPOLEMENUGROUPWIDTHS lpMenuWidths)
114 ShellBrowser *This = impl_from_IShellBrowser(iface);
115 FIXME("%p %p %p\n", This, hmenuShared, lpMenuWidths);
116 return E_NOTIMPL;
119 static HRESULT WINAPI ShellBrowser_SetMenuSB(
120 IShellBrowser* iface,
121 HMENU hmenuShared,
122 HOLEMENU holemenuReserved,
123 HWND hwndActiveObject)
125 ShellBrowser *This = impl_from_IShellBrowser(iface);
126 FIXME("%p %p %p %p\n", This, hmenuShared, holemenuReserved, hwndActiveObject);
127 return E_NOTIMPL;
130 static HRESULT WINAPI ShellBrowser_RemoveMenusSB(
131 IShellBrowser* iface,
132 HMENU hmenuShared)
134 ShellBrowser *This = impl_from_IShellBrowser(iface);
135 FIXME("%p %p\n", This, hmenuShared);
136 return E_NOTIMPL;
139 static HRESULT WINAPI ShellBrowser_SetStatusTextSB(
140 IShellBrowser* iface,
141 LPCOLESTR pszStatusText)
143 ShellBrowser *This = impl_from_IShellBrowser(iface);
144 FIXME("%p %s\n", This, debugstr_w(pszStatusText));
145 return E_NOTIMPL;
148 static HRESULT WINAPI ShellBrowser_EnableModelessSB(
149 IShellBrowser* iface,
150 BOOL fEnable)
152 ShellBrowser *This = impl_from_IShellBrowser(iface);
153 FIXME("%p %d\n", This, fEnable);
154 return E_NOTIMPL;
157 static HRESULT WINAPI ShellBrowser_TranslateAcceleratorSB(
158 IShellBrowser* iface,
159 MSG *pmsg,
160 WORD wID)
162 ShellBrowser *This = impl_from_IShellBrowser(iface);
163 FIXME("%p %p %d\n", This, pmsg, (int)wID);
164 return E_NOTIMPL;
167 static HRESULT WINAPI ShellBrowser_BrowseObject(
168 IShellBrowser* iface,
169 LPCITEMIDLIST pidl,
170 UINT wFlags)
172 ShellBrowser *This = impl_from_IShellBrowser(iface);
173 FIXME("%p %p %u\n", This, pidl, wFlags);
174 return E_NOTIMPL;
177 static HRESULT WINAPI ShellBrowser_GetViewStateStream(
178 IShellBrowser* iface,
179 DWORD grfMode,
180 IStream **ppStrm)
182 ShellBrowser *This = impl_from_IShellBrowser(iface);
183 FIXME("%p %x %p\n", This, grfMode, ppStrm);
184 return E_NOTIMPL;
187 static HRESULT WINAPI ShellBrowser_GetControlWindow(
188 IShellBrowser* iface,
189 UINT id,
190 HWND *phwnd)
192 ShellBrowser *This = impl_from_IShellBrowser(iface);
193 FIXME("%p %u %p\n", This, id, phwnd);
194 return E_NOTIMPL;
197 static HRESULT WINAPI ShellBrowser_SendControlMsg(
198 IShellBrowser* iface,
199 UINT id,
200 UINT uMsg,
201 WPARAM wParam,
202 LPARAM lParam,
203 LRESULT *pret)
205 ShellBrowser *This = impl_from_IShellBrowser(iface);
206 FIXME("%p %u %u %p\n", This, id, uMsg, pret);
207 return E_NOTIMPL;
210 static HRESULT WINAPI ShellBrowser_QueryActiveShellView(
211 IShellBrowser* iface,
212 IShellView **ppshv)
214 ShellBrowser *This = impl_from_IShellBrowser(iface);
215 FIXME("%p %p\n", This, ppshv);
216 return E_NOTIMPL;
219 static HRESULT WINAPI ShellBrowser_OnViewWindowActive(
220 IShellBrowser* iface,
221 IShellView *pshv)
223 ShellBrowser *This = impl_from_IShellBrowser(iface);
224 FIXME("%p %p\n", This, pshv);
225 return E_NOTIMPL;
228 static HRESULT WINAPI ShellBrowser_SetToolbarItems(
229 IShellBrowser* iface,
230 LPTBBUTTONSB lpButtons,
231 UINT nButtons,
232 UINT uFlags)
234 ShellBrowser *This = impl_from_IShellBrowser(iface);
235 FIXME("%p %p %u %u\n", This, lpButtons, nButtons, uFlags);
236 return E_NOTIMPL;
239 static const IShellBrowserVtbl ShellBrowserVtbl = {
240 ShellBrowser_QueryInterface,
241 ShellBrowser_AddRef,
242 ShellBrowser_Release,
243 ShellBrowser_GetWindow,
244 ShellBrowser_ContextSensitiveHelp,
245 ShellBrowser_InsertMenusSB,
246 ShellBrowser_SetMenuSB,
247 ShellBrowser_RemoveMenusSB,
248 ShellBrowser_SetStatusTextSB,
249 ShellBrowser_EnableModelessSB,
250 ShellBrowser_TranslateAcceleratorSB,
251 ShellBrowser_BrowseObject,
252 ShellBrowser_GetViewStateStream,
253 ShellBrowser_GetControlWindow,
254 ShellBrowser_SendControlMsg,
255 ShellBrowser_QueryActiveShellView,
256 ShellBrowser_OnViewWindowActive,
257 ShellBrowser_SetToolbarItems
260 static inline ShellBrowser *impl_from_IBrowserService(IBrowserService *iface)
262 return CONTAINING_RECORD(iface, ShellBrowser, IBrowserService_iface);
265 static HRESULT WINAPI BrowserService_QueryInterface(
266 IBrowserService* iface,
267 REFIID riid,
268 void **ppvObject)
270 ShellBrowser *This = impl_from_IBrowserService(iface);
271 return IShellBrowser_QueryInterface(&This->IShellBrowser_iface, riid, ppvObject);
274 static ULONG WINAPI BrowserService_AddRef(
275 IBrowserService *iface)
277 ShellBrowser *This = impl_from_IBrowserService(iface);
278 return IShellBrowser_AddRef(&This->IShellBrowser_iface);
281 static ULONG WINAPI BrowserService_Release(
282 IBrowserService* iface)
284 ShellBrowser *This = impl_from_IBrowserService(iface);
285 return IShellBrowser_Release(&This->IShellBrowser_iface);
288 static HRESULT WINAPI BrowserService_GetParentSite(
289 IBrowserService* iface,
290 IOleInPlaceSite **ppipsite)
292 ShellBrowser *This = impl_from_IBrowserService(iface);
293 FIXME("%p %p\n", This, ppipsite);
294 return E_NOTIMPL;
297 static HRESULT WINAPI BrowserService_SetTitle(
298 IBrowserService* iface,
299 IShellView *psv,
300 LPCWSTR pszName)
302 ShellBrowser *This = impl_from_IBrowserService(iface);
303 FIXME("%p %p %s\n", This, psv, debugstr_w(pszName));
304 return E_NOTIMPL;
307 static HRESULT WINAPI BrowserService_GetTitle(
308 IBrowserService* iface,
309 IShellView *psv,
310 LPWSTR pszName,
311 DWORD cchName)
313 ShellBrowser *This = impl_from_IBrowserService(iface);
314 FIXME("%p %p %p %d\n", This, psv, pszName, cchName);
315 return E_NOTIMPL;
318 static HRESULT WINAPI BrowserService_GetOleObject(
319 IBrowserService* iface,
320 IOleObject **ppobjv)
322 ShellBrowser *This = impl_from_IBrowserService(iface);
323 FIXME("%p %p\n", This, ppobjv);
324 return E_NOTIMPL;
327 static HRESULT WINAPI BrowserService_GetTravelLog(
328 IBrowserService* iface,
329 ITravelLog **pptl)
331 ShellBrowser *This = impl_from_IBrowserService(iface);
332 FIXME("%p %p\n", This, pptl);
333 return E_NOTIMPL;
336 static HRESULT WINAPI BrowserService_ShowControlWindow(
337 IBrowserService* iface,
338 UINT id,
339 BOOL fShow)
341 ShellBrowser *This = impl_from_IBrowserService(iface);
342 FIXME("%p %u %d\n", This, id, fShow);
343 return E_NOTIMPL;
346 static HRESULT WINAPI BrowserService_IsControlWindowShown(
347 IBrowserService* iface,
348 UINT id,
349 BOOL *pfShown)
351 ShellBrowser *This = impl_from_IBrowserService(iface);
352 FIXME("%p %u %p\n", This, id, pfShown);
353 return E_NOTIMPL;
356 static HRESULT WINAPI BrowserService_IEGetDisplayName(
357 IBrowserService* iface,
358 PCIDLIST_ABSOLUTE pidl,
359 LPWSTR pwszName,
360 UINT uFlags)
362 ShellBrowser *This = impl_from_IBrowserService(iface);
363 FIXME("%p %p %p %u\n", This, pidl, pwszName, uFlags);
364 return E_NOTIMPL;
367 static HRESULT WINAPI BrowserService_IEParseDisplayName(
368 IBrowserService* iface,
369 UINT uiCP,
370 LPCWSTR pwszPath,
371 PIDLIST_ABSOLUTE *ppidlOut)
373 ShellBrowser *This = impl_from_IBrowserService(iface);
374 FIXME("%p %u %s %p\n", This, uiCP, debugstr_w(pwszPath), ppidlOut);
375 return E_NOTIMPL;
378 static HRESULT WINAPI BrowserService_DisplayParseError(
379 IBrowserService* iface,
380 HRESULT hres,
381 LPCWSTR pwszPath)
383 ShellBrowser *This = impl_from_IBrowserService(iface);
384 FIXME("%p %x %s\n", This, hres, debugstr_w(pwszPath));
385 return E_NOTIMPL;
388 static HRESULT WINAPI BrowserService_NavigateToPidl(
389 IBrowserService* iface,
390 PCIDLIST_ABSOLUTE pidl,
391 DWORD grfHLNF)
393 ShellBrowser *This = impl_from_IBrowserService(iface);
394 FIXME("%p %p %d\n", This, pidl, grfHLNF);
395 return E_NOTIMPL;
398 static HRESULT WINAPI BrowserService_SetNavigateState(
399 IBrowserService* iface,
400 BNSTATE bnstate)
402 ShellBrowser *This = impl_from_IBrowserService(iface);
403 FIXME("%p %d\n", This, bnstate);
404 return E_NOTIMPL;
407 static HRESULT WINAPI BrowserService_GetNavigateState(
408 IBrowserService* iface,
409 BNSTATE *pbnstate)
411 ShellBrowser *This = impl_from_IBrowserService(iface);
412 FIXME("%p %p\n", This, pbnstate);
413 return E_NOTIMPL;
416 static HRESULT WINAPI BrowserService_NotifyRedirect(
417 IBrowserService* iface,
418 IShellView *psv,
419 PCIDLIST_ABSOLUTE pidl,
420 BOOL *pfDidBrowse)
422 ShellBrowser *This = impl_from_IBrowserService(iface);
423 FIXME("%p %p %p %p\n", This, psv, pidl, pfDidBrowse);
424 return E_NOTIMPL;
427 static HRESULT WINAPI BrowserService_UpdateWindowList(
428 IBrowserService* iface)
430 ShellBrowser *This = impl_from_IBrowserService(iface);
431 FIXME("%p\n", This);
432 return E_NOTIMPL;
435 static HRESULT WINAPI BrowserService_UpdateBackForwardState(
436 IBrowserService* iface)
438 ShellBrowser *This = impl_from_IBrowserService(iface);
439 FIXME("%p\n", This);
440 return E_NOTIMPL;
443 static HRESULT WINAPI BrowserService_SetFlags(
444 IBrowserService* iface,
445 DWORD dwFlags,
446 DWORD dwFlagMask)
448 ShellBrowser *This = impl_from_IBrowserService(iface);
449 FIXME("%p %x %x\n", This, dwFlags, dwFlagMask);
450 return E_NOTIMPL;
453 static HRESULT WINAPI BrowserService_GetFlags(
454 IBrowserService* iface,
455 DWORD *pdwFlags)
457 ShellBrowser *This = impl_from_IBrowserService(iface);
458 FIXME("%p %p\n", This, pdwFlags);
459 return E_NOTIMPL;
462 static HRESULT WINAPI BrowserService_CanNavigateNow(
463 IBrowserService* iface)
465 ShellBrowser *This = impl_from_IBrowserService(iface);
466 FIXME("%p\n", This);
467 return E_NOTIMPL;
470 static HRESULT WINAPI BrowserService_GetPidl(
471 IBrowserService* iface,
472 PIDLIST_ABSOLUTE *ppidl)
474 ShellBrowser *This = impl_from_IBrowserService(iface);
475 FIXME("%p %p\n", This, ppidl);
476 return E_NOTIMPL;
479 static HRESULT WINAPI BrowserService_SetReferrer(
480 IBrowserService* iface,
481 PCIDLIST_ABSOLUTE pidl)
483 ShellBrowser *This = impl_from_IBrowserService(iface);
484 FIXME("%p %p\n", This, pidl);
485 return E_NOTIMPL;
488 static DWORD WINAPI BrowserService_GetBrowserIndex(
489 IBrowserService* iface)
491 ShellBrowser *This = impl_from_IBrowserService(iface);
492 FIXME("%p\n", This);
493 return E_NOTIMPL;
496 static HRESULT WINAPI BrowserService_GetBrowserByIndex(
497 IBrowserService* iface,
498 DWORD dwID,
499 IUnknown **ppunk)
501 ShellBrowser *This = impl_from_IBrowserService(iface);
502 FIXME("%p %x %p\n", This, dwID, ppunk);
503 return E_NOTIMPL;
506 static HRESULT WINAPI BrowserService_GetHistoryObject(
507 IBrowserService* iface,
508 IOleObject **ppole,
509 IStream **pstm,
510 IBindCtx **ppbc)
512 ShellBrowser *This = impl_from_IBrowserService(iface);
513 FIXME("%p %p %p %p\n", This, ppole, pstm, ppbc);
514 return E_NOTIMPL;
517 static HRESULT WINAPI BrowserService_SetHistoryObject(
518 IBrowserService* iface,
519 IOleObject *pole,
520 BOOL fIsLocalAnchor)
522 ShellBrowser *This = impl_from_IBrowserService(iface);
523 FIXME("%p %p %d\n", This, pole, fIsLocalAnchor);
524 return E_NOTIMPL;
527 static HRESULT WINAPI BrowserService_CacheOLEServer(
528 IBrowserService* iface,
529 IOleObject *pole)
531 ShellBrowser *This = impl_from_IBrowserService(iface);
532 FIXME("%p %p\n", This, pole);
533 return E_NOTIMPL;
536 static HRESULT WINAPI BrowserService_GetSetCodePage(
537 IBrowserService* iface,
538 VARIANT *pvarIn,
539 VARIANT *pvarOut)
541 ShellBrowser *This = impl_from_IBrowserService(iface);
542 FIXME("%p %p %p\n", This, pvarIn, pvarOut);
543 return E_NOTIMPL;
546 static HRESULT WINAPI BrowserService_OnHttpEquiv(
547 IBrowserService* iface,
548 IShellView *psv,
549 BOOL fDone,
550 VARIANT *pvarargIn,
551 VARIANT *pvarargOut)
553 ShellBrowser *This = impl_from_IBrowserService(iface);
554 FIXME("%p %p %d %p %p\n", This, psv, fDone, pvarargIn, pvarargOut);
555 return E_NOTIMPL;
558 static HRESULT WINAPI BrowserService_GetPalette(
559 IBrowserService* iface,
560 HPALETTE *hpal)
562 ShellBrowser *This = impl_from_IBrowserService(iface);
563 FIXME("%p %p\n", This, hpal);
564 return E_NOTIMPL;
567 static HRESULT WINAPI BrowserService_RegisterWindow(
568 IBrowserService* iface,
569 BOOL fForceRegister,
570 int swc)
572 ShellBrowser *This = impl_from_IBrowserService(iface);
573 FIXME("%p %d %d\n", This, fForceRegister, swc);
574 return E_NOTIMPL;
577 static const IBrowserServiceVtbl BrowserServiceVtbl = {
578 BrowserService_QueryInterface,
579 BrowserService_AddRef,
580 BrowserService_Release,
581 BrowserService_GetParentSite,
582 BrowserService_SetTitle,
583 BrowserService_GetTitle,
584 BrowserService_GetOleObject,
585 BrowserService_GetTravelLog,
586 BrowserService_ShowControlWindow,
587 BrowserService_IsControlWindowShown,
588 BrowserService_IEGetDisplayName,
589 BrowserService_IEParseDisplayName,
590 BrowserService_DisplayParseError,
591 BrowserService_NavigateToPidl,
592 BrowserService_SetNavigateState,
593 BrowserService_GetNavigateState,
594 BrowserService_NotifyRedirect,
595 BrowserService_UpdateWindowList,
596 BrowserService_UpdateBackForwardState,
597 BrowserService_SetFlags,
598 BrowserService_GetFlags,
599 BrowserService_CanNavigateNow,
600 BrowserService_GetPidl,
601 BrowserService_SetReferrer,
602 BrowserService_GetBrowserIndex,
603 BrowserService_GetBrowserByIndex,
604 BrowserService_GetHistoryObject,
605 BrowserService_SetHistoryObject,
606 BrowserService_CacheOLEServer,
607 BrowserService_GetSetCodePage,
608 BrowserService_OnHttpEquiv,
609 BrowserService_GetPalette,
610 BrowserService_RegisterWindow
613 static inline ShellBrowser *impl_from_IDocObjectService(IDocObjectService *iface)
615 return CONTAINING_RECORD(iface, ShellBrowser, IDocObjectService_iface);
618 static HRESULT WINAPI DocObjectService_QueryInterface(
619 IDocObjectService* iface,
620 REFIID riid,
621 void **ppvObject)
623 ShellBrowser *This = impl_from_IDocObjectService(iface);
624 return IShellBrowser_QueryInterface(&This->IShellBrowser_iface, riid, ppvObject);
627 static ULONG WINAPI DocObjectService_AddRef(
628 IDocObjectService* iface)
630 ShellBrowser *This = impl_from_IDocObjectService(iface);
631 return IShellBrowser_AddRef(&This->IShellBrowser_iface);
634 static ULONG WINAPI DocObjectService_Release(
635 IDocObjectService* iface)
637 ShellBrowser *This = impl_from_IDocObjectService(iface);
638 return IShellBrowser_Release(&This->IShellBrowser_iface);
641 static HRESULT WINAPI DocObjectService_FireBeforeNavigate2(
642 IDocObjectService* iface,
643 IDispatch *pDispatch,
644 LPCWSTR lpszUrl,
645 DWORD dwFlags,
646 LPCWSTR lpszFrameName,
647 BYTE *pPostData,
648 DWORD cbPostData,
649 LPCWSTR lpszHeaders,
650 BOOL fPlayNavSound,
651 BOOL *pfCancel)
653 ShellBrowser *This = impl_from_IDocObjectService(iface);
654 VARIANT var_url, var_flags, var_frame_name, var_post_data, var_post_data2, var_headers;
655 VARIANTARG params[7];
656 DISPPARAMS dp = {params, NULL, 7, 0};
657 VARIANT_BOOL cancel = VARIANT_FALSE;
658 SAFEARRAY *post_data;
660 TRACE("%p %p %s %x %s %p %d %s %d %p\n", This, pDispatch, debugstr_w(lpszUrl),
661 dwFlags, debugstr_w(lpszFrameName), pPostData, cbPostData,
662 debugstr_w(lpszHeaders), fPlayNavSound, pfCancel);
664 if(cbPostData) {
665 post_data = SafeArrayCreateVector(VT_UI1, 0, cbPostData);
666 if(!post_data)
667 return E_OUTOFMEMORY;
668 memcpy(post_data->pvData, pPostData, cbPostData);
669 }else {
670 post_data = NULL;
673 V_VT(params) = VT_BOOL|VT_BYREF;
674 V_BOOLREF(params) = &cancel;
676 V_VT(params+1) = (VT_BYREF|VT_VARIANT);
677 V_VARIANTREF(params+1) = &var_headers;
678 V_VT(&var_headers) = VT_BSTR;
679 V_BSTR(&var_headers) = lpszHeaders ? SysAllocString(lpszHeaders) : NULL;
681 V_VT(params+2) = (VT_BYREF|VT_VARIANT);
682 V_VARIANTREF(params+2) = &var_post_data2;
683 V_VT(&var_post_data2) = (VT_BYREF|VT_VARIANT);
684 V_VARIANTREF(&var_post_data2) = &var_post_data;
686 if(post_data) {
687 V_VT(&var_post_data) = VT_UI1|VT_ARRAY;
688 V_ARRAY(&var_post_data) = post_data;
689 }else {
690 V_VT(&var_post_data) = VT_EMPTY;
693 V_VT(params+3) = (VT_BYREF|VT_VARIANT);
694 V_VARIANTREF(params+3) = &var_frame_name;
695 V_VT(&var_frame_name) = VT_BSTR;
696 V_BSTR(&var_frame_name) = NULL;
698 V_VT(params+4) = (VT_BYREF|VT_VARIANT);
699 V_VARIANTREF(params+4) = &var_flags;
700 V_VT(&var_flags) = VT_I4;
701 V_I4(&var_flags) = 0;
703 V_VT(params+5) = (VT_BYREF|VT_VARIANT);
704 V_VARIANTREF(params+5) = &var_url;
705 V_VT(&var_url) = VT_BSTR;
706 V_BSTR(&var_url) = SysAllocString(lpszUrl);
708 V_VT(params+6) = (VT_DISPATCH);
709 V_DISPATCH(params+6) = (IDispatch*)This->doc_host->wb;
711 TRACE(">>>\n");
712 call_sink(This->doc_host->cps.wbe2, DISPID_BEFORENAVIGATE2, &dp);
713 TRACE("<<<\n");
715 SysFreeString(V_BSTR(&var_url));
716 SysFreeString(V_BSTR(&var_headers));
717 SafeArrayDestroy(post_data);
719 *pfCancel = !!cancel;
720 return S_OK;
723 static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
724 IDocObjectService* iface,
725 IHTMLWindow2 *pHTMLWindow2,
726 DWORD dwFlags)
728 ShellBrowser *This = impl_from_IDocObjectService(iface);
729 DocHost *doc_host = This->doc_host;
730 IHTMLPrivateWindow *priv_window;
731 VARIANTARG params[2];
732 DISPPARAMS dp = {params, NULL, 2, 0};
733 VARIANT url_var;
734 BSTR url;
735 HRESULT hres;
737 TRACE("%p %p %x\n", This, pHTMLWindow2, dwFlags);
739 if(doc_host->travellog.loading_pos != -1) {
740 WARN("histupdate not notified\n");
741 doc_host->travellog.position = doc_host->travellog.loading_pos;
742 doc_host->travellog.loading_pos = -1;
745 hres = IHTMLWindow2_QueryInterface(pHTMLWindow2, &IID_IHTMLPrivateWindow, (void**)&priv_window);
746 if(FAILED(hres))
747 return hres;
749 hres = IHTMLPrivateWindow_GetAddressBarUrl(priv_window, &url);
750 IHTMLPrivateWindow_Release(priv_window);
751 if(FAILED(hres))
752 return hres;
754 TRACE("got URL %s\n", debugstr_w(url));
755 set_dochost_url(This->doc_host, url);
757 V_VT(params) = (VT_BYREF|VT_VARIANT);
758 V_VARIANTREF(params) = &url_var;
760 V_VT(params+1) = VT_DISPATCH;
761 V_DISPATCH(params+1) = (IDispatch*)doc_host->wb;
763 V_VT(&url_var) = VT_BSTR;
764 V_BSTR(&url_var) = url;
766 TRACE(">>>\n");
767 call_sink(This->doc_host->cps.wbe2, DISPID_NAVIGATECOMPLETE2, &dp);
768 TRACE("<<<\n");
770 SysFreeString(url);
772 This->doc_host->busy = VARIANT_FALSE;
773 return S_OK;
776 static HRESULT WINAPI DocObjectService_FireDownloadBegin(
777 IDocObjectService* iface)
779 ShellBrowser *This = impl_from_IDocObjectService(iface);
780 FIXME("%p\n", This);
781 return E_NOTIMPL;
784 static HRESULT WINAPI DocObjectService_FireDownloadComplete(
785 IDocObjectService* iface)
787 ShellBrowser *This = impl_from_IDocObjectService(iface);
788 FIXME("%p\n", This);
789 return E_NOTIMPL;
792 static HRESULT WINAPI DocObjectService_FireDocumentComplete(
793 IDocObjectService* iface,
794 IHTMLWindow2 *pHTMLWindow,
795 DWORD dwFlags)
797 ShellBrowser *This = impl_from_IDocObjectService(iface);
798 IHTMLPrivateWindow *priv_window;
799 VARIANTARG params[2];
800 DISPPARAMS dp = {params, NULL, 2, 0};
801 VARIANT url_var;
802 BSTR url;
803 HRESULT hres;
805 TRACE("%p %p %x\n", This, pHTMLWindow, dwFlags);
807 hres = IHTMLWindow2_QueryInterface(pHTMLWindow, &IID_IHTMLPrivateWindow, (void**)&priv_window);
808 if(FAILED(hres))
809 return hres;
811 hres = IHTMLPrivateWindow_GetAddressBarUrl(priv_window, &url);
812 IHTMLPrivateWindow_Release(priv_window);
813 if(FAILED(hres))
814 return hres;
816 TRACE("got URL %s\n", debugstr_w(url));
818 V_VT(params) = (VT_BYREF|VT_VARIANT);
819 V_VARIANTREF(params) = &url_var;
821 V_VT(params+1) = VT_DISPATCH;
822 V_DISPATCH(params+1) = (IDispatch*)This->doc_host->wb;
824 V_VT(&url_var) = VT_BSTR;
825 V_BSTR(&url_var) = url;
827 /* Keep reference to This. It may be released in event handler. */
828 IShellBrowser_AddRef(&This->IShellBrowser_iface);
830 TRACE(">>>\n");
831 call_sink(This->doc_host->cps.wbe2, DISPID_DOCUMENTCOMPLETE, &dp);
832 TRACE("<<<\n");
834 SysFreeString(url);
835 if(This->doc_host)
836 This->doc_host->busy = VARIANT_FALSE;
838 IShellBrowser_Release(&This->IShellBrowser_iface);
839 return S_OK;
842 static HRESULT WINAPI DocObjectService_UpdateDesktopComponent(
843 IDocObjectService* iface,
844 IHTMLWindow2 *pHTMLWindow)
846 ShellBrowser *This = impl_from_IDocObjectService(iface);
847 FIXME("%p %p\n", This, pHTMLWindow);
848 return E_NOTIMPL;
851 static HRESULT WINAPI DocObjectService_GetPendingUrl(
852 IDocObjectService* iface,
853 BSTR *pbstrPendingUrl)
855 ShellBrowser *This = impl_from_IDocObjectService(iface);
856 FIXME("%p %p\n", This, pbstrPendingUrl);
857 return E_NOTIMPL;
860 static HRESULT WINAPI DocObjectService_ActiveElementChanged(
861 IDocObjectService* iface,
862 IHTMLElement *pHTMLElement)
864 ShellBrowser *This = impl_from_IDocObjectService(iface);
865 FIXME("%p %p\n", This, pHTMLElement);
866 return E_NOTIMPL;
869 static HRESULT WINAPI DocObjectService_GetUrlSearchComponent(
870 IDocObjectService* iface,
871 BSTR *pbstrSearch)
873 ShellBrowser *This = impl_from_IDocObjectService(iface);
874 FIXME("%p %p\n", This, pbstrSearch);
875 return E_NOTIMPL;
878 static HRESULT WINAPI DocObjectService_IsErrorUrl(
879 IDocObjectService* iface,
880 LPCWSTR lpszUrl,
881 BOOL *pfIsError)
883 ShellBrowser *This = impl_from_IDocObjectService(iface);
884 FIXME("%p %s %p\n", This, debugstr_w(lpszUrl), pfIsError);
886 *pfIsError = FALSE;
887 return S_OK;
890 static const IDocObjectServiceVtbl DocObjectServiceVtbl = {
891 DocObjectService_QueryInterface,
892 DocObjectService_AddRef,
893 DocObjectService_Release,
894 DocObjectService_FireBeforeNavigate2,
895 DocObjectService_FireNavigateComplete2,
896 DocObjectService_FireDownloadBegin,
897 DocObjectService_FireDownloadComplete,
898 DocObjectService_FireDocumentComplete,
899 DocObjectService_UpdateDesktopComponent,
900 DocObjectService_GetPendingUrl,
901 DocObjectService_ActiveElementChanged,
902 DocObjectService_GetUrlSearchComponent,
903 DocObjectService_IsErrorUrl
906 HRESULT create_browser_service(DocHost *doc_host, ShellBrowser **ret)
908 ShellBrowser *sb;
910 sb = heap_alloc(sizeof(ShellBrowser));
911 if(!sb)
912 return E_OUTOFMEMORY;
914 sb->IShellBrowser_iface.lpVtbl = &ShellBrowserVtbl;
915 sb->IBrowserService_iface.lpVtbl = &BrowserServiceVtbl;
916 sb->IDocObjectService_iface.lpVtbl = &DocObjectServiceVtbl;
918 sb->ref = 1;
919 sb->doc_host = doc_host;
921 *ret = sb;
922 return S_OK;
925 void detach_browser_service(ShellBrowser *sb)
927 sb->doc_host = NULL;
928 IShellBrowser_Release(&sb->IShellBrowser_iface);
931 static inline NewWindowManager *impl_from_INewWindowManager(INewWindowManager *iface)
933 return CONTAINING_RECORD(iface, NewWindowManager, INewWindowManager_iface);
936 static HRESULT WINAPI NewWindowManager_QueryInterface(INewWindowManager *iface, REFIID riid, void **ppv)
938 NewWindowManager *This = impl_from_INewWindowManager(iface);
940 if(IsEqualGUID(&IID_IUnknown, riid)) {
941 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
942 *ppv = &This->INewWindowManager_iface;
943 }else if(IsEqualGUID(&IID_INewWindowManager, riid)) {
944 TRACE("(%p)->(IID_INewWindowManager %p)\n", This, ppv);
945 *ppv = &This->INewWindowManager_iface;
946 }else {
947 WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
948 *ppv = NULL;
949 return E_NOINTERFACE;
952 IUnknown_AddRef((IUnknown*)*ppv);
953 return S_OK;
956 static ULONG WINAPI NewWindowManager_AddRef(INewWindowManager *iface)
958 NewWindowManager *This = impl_from_INewWindowManager(iface);
960 TRACE("(%p)\n", This);
962 return IOleClientSite_AddRef(&This->doc_host->IOleClientSite_iface);
965 static ULONG WINAPI NewWindowManager_Release(INewWindowManager *iface)
967 NewWindowManager *This = impl_from_INewWindowManager(iface);
969 TRACE("(%p)\n", This);
971 return IOleClientSite_Release(&This->doc_host->IOleClientSite_iface);
974 static HRESULT WINAPI NewWindowManager_EvaluateNewWindow(INewWindowManager *iface, LPCWSTR pszUrl,
975 LPCWSTR pszName, LPCWSTR pszUrlContext, LPCWSTR pszFeatures, BOOL fReplace, DWORD dwFlags,
976 DWORD dwUserActionTime)
978 NewWindowManager *This = impl_from_INewWindowManager(iface);
979 FIXME("(%p)->(%s %s %s %s %x %x %d)\n", This, debugstr_w(pszUrl), debugstr_w(pszName), debugstr_w(pszUrlContext),
980 debugstr_w(pszFeatures), fReplace, dwFlags, dwUserActionTime);
981 return S_OK;
984 static const INewWindowManagerVtbl NewWindowManagerVtbl = {
985 NewWindowManager_QueryInterface,
986 NewWindowManager_AddRef,
987 NewWindowManager_Release,
988 NewWindowManager_EvaluateNewWindow
991 void NewWindowManager_Init(DocHost *doc_host)
993 doc_host->nwm.INewWindowManager_iface.lpVtbl = &NewWindowManagerVtbl;
994 doc_host->nwm.doc_host = doc_host;