ReactOS  0.4.14-dev-52-g6116262
shellbrowser.c
Go to the documentation of this file.
1 /*
2  * Implementation of IShellBrowser interface
3  *
4  * Copyright 2011 Piotr Caban for CodeWeavers
5  * Copyright 2012 Jacek Caban for CodeWeavers
6  *
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.
11  *
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.
16  *
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
20  */
21 
22 #include <assert.h>
23 
24 #include "ieframe.h"
25 #include "exdispid.h"
26 #include "shlwapi.h"
27 
28 #include "wine/debug.h"
29 
31 
33 {
34  return CONTAINING_RECORD(iface, ShellBrowser, IShellBrowser_iface);
35 }
36 
38 {
40 
42  TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
43  *ppv = &This->IShellBrowser_iface;
44  }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
45  TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv);
46  *ppv = &This->IShellBrowser_iface;
47  }else if(IsEqualGUID(&IID_IShellBrowser, riid)) {
48  TRACE("(%p)->(IID_IShellBrowser %p)\n", This, ppv);
49  *ppv = &This->IShellBrowser_iface;
50  }else if(IsEqualGUID(&IID_IBrowserService, riid)) {
51  TRACE("(%p)->(IID_IBrowserService %p)\n", This, ppv);
52  *ppv = &This->IBrowserService_iface;
53  }else if(IsEqualGUID(&IID_IDocObjectService, riid)) {
54  TRACE("(%p)->(IID_IDocObjectService %p)\n", This, ppv);
55  *ppv = &This->IDocObjectService_iface;
56  }else {
57  FIXME("%p %s %p\n", This, debugstr_guid(riid), ppv);
58  *ppv = NULL;
59  return E_NOINTERFACE;
60  }
61 
62  IUnknown_AddRef((IUnknown*)*ppv);
63  return S_OK;
64 }
65 
67  IShellBrowser* iface)
68 {
71 
72  TRACE("(%p) ref=%d\n", This, ref);
73 
74  return ref;
75 }
76 
78 {
81 
82  TRACE("(%p) ref=%d\n", This, ref);
83 
84  if(!ref) {
85  assert(!This->doc_host);
86  heap_free(This);
87  }
88 
89  return ref;
90 }
91 
93  IShellBrowser* iface,
94  HWND *phwnd)
95 {
97  FIXME("%p %p\n", This, phwnd);
98  return E_NOTIMPL;
99 }
100 
102  IShellBrowser* iface,
103  BOOL fEnterMode)
104 {
106  FIXME("%p %d\n", This, fEnterMode);
107  return E_NOTIMPL;
108 }
109 
111  IShellBrowser* iface,
112  HMENU hmenuShared,
113  LPOLEMENUGROUPWIDTHS lpMenuWidths)
114 {
116  FIXME("%p %p %p\n", This, hmenuShared, lpMenuWidths);
117  return E_NOTIMPL;
118 }
119 
121  IShellBrowser* iface,
122  HMENU hmenuShared,
123  HOLEMENU holemenuReserved,
124  HWND hwndActiveObject)
125 {
127  FIXME("%p %p %p %p\n", This, hmenuShared, holemenuReserved, hwndActiveObject);
128  return E_NOTIMPL;
129 }
130 
132  IShellBrowser* iface,
133  HMENU hmenuShared)
134 {
136  FIXME("%p %p\n", This, hmenuShared);
137  return E_NOTIMPL;
138 }
139 
141  IShellBrowser* iface,
142  LPCOLESTR pszStatusText)
143 {
145  FIXME("%p %s\n", This, debugstr_w(pszStatusText));
146  return E_NOTIMPL;
147 }
148 
150  IShellBrowser* iface,
151  BOOL fEnable)
152 {
154  FIXME("%p %d\n", This, fEnable);
155  return E_NOTIMPL;
156 }
157 
159  IShellBrowser* iface,
160  MSG *pmsg,
161  WORD wID)
162 {
164  FIXME("%p %p %d\n", This, pmsg, (int)wID);
165  return E_NOTIMPL;
166 }
167 
169  IShellBrowser* iface,
170  LPCITEMIDLIST pidl,
171  UINT wFlags)
172 {
174  FIXME("%p %p %u\n", This, pidl, wFlags);
175  return E_NOTIMPL;
176 }
177 
179  IShellBrowser* iface,
180  DWORD grfMode,
181  IStream **ppStrm)
182 {
184  FIXME("%p %x %p\n", This, grfMode, ppStrm);
185  return E_NOTIMPL;
186 }
187 
189  IShellBrowser* iface,
190  UINT id,
191  HWND *phwnd)
192 {
194  FIXME("%p %u %p\n", This, id, phwnd);
195  return E_NOTIMPL;
196 }
197 
199  IShellBrowser* iface,
200  UINT id,
201  UINT uMsg,
202  WPARAM wParam,
203  LPARAM lParam,
204  LRESULT *pret)
205 {
207  FIXME("%p %u %u %p\n", This, id, uMsg, pret);
208  return E_NOTIMPL;
209 }
210 
212  IShellBrowser* iface,
213  IShellView **ppshv)
214 {
216  FIXME("%p %p\n", This, ppshv);
217  return E_NOTIMPL;
218 }
219 
221  IShellBrowser* iface,
222  IShellView *pshv)
223 {
225  FIXME("%p %p\n", This, pshv);
226  return E_NOTIMPL;
227 }
228 
230  IShellBrowser* iface,
231  LPTBBUTTONSB lpButtons,
232  UINT nButtons,
233  UINT uFlags)
234 {
236  FIXME("%p %p %u %u\n", This, lpButtons, nButtons, uFlags);
237  return E_NOTIMPL;
238 }
239 
240 static const IShellBrowserVtbl ShellBrowserVtbl = {
259 };
260 
262 {
263  return CONTAINING_RECORD(iface, ShellBrowser, IBrowserService_iface);
264 }
265 
267  IBrowserService* iface,
268  REFIID riid,
269  void **ppvObject)
270 {
272  return IShellBrowser_QueryInterface(&This->IShellBrowser_iface, riid, ppvObject);
273 }
274 
276  IBrowserService *iface)
277 {
279  return IShellBrowser_AddRef(&This->IShellBrowser_iface);
280 }
281 
283  IBrowserService* iface)
284 {
286  return IShellBrowser_Release(&This->IShellBrowser_iface);
287 }
288 
290  IBrowserService* iface,
291  IOleInPlaceSite **ppipsite)
292 {
294  FIXME("%p %p\n", This, ppipsite);
295  return E_NOTIMPL;
296 }
297 
299  IBrowserService* iface,
300  IShellView *psv,
301  LPCWSTR pszName)
302 {
304  FIXME("%p %p %s\n", This, psv, debugstr_w(pszName));
305  return E_NOTIMPL;
306 }
307 
309  IBrowserService* iface,
310  IShellView *psv,
311  LPWSTR pszName,
312  DWORD cchName)
313 {
315  FIXME("%p %p %p %d\n", This, psv, pszName, cchName);
316  return E_NOTIMPL;
317 }
318 
320  IBrowserService* iface,
321  IOleObject **ppobjv)
322 {
324  FIXME("%p %p\n", This, ppobjv);
325  return E_NOTIMPL;
326 }
327 
329  IBrowserService* iface,
330  ITravelLog **pptl)
331 {
333  FIXME("%p %p\n", This, pptl);
334  return E_NOTIMPL;
335 }
336 
338  IBrowserService* iface,
339  UINT id,
340  BOOL fShow)
341 {
343  FIXME("%p %u %d\n", This, id, fShow);
344  return E_NOTIMPL;
345 }
346 
348  IBrowserService* iface,
349  UINT id,
350  BOOL *pfShown)
351 {
353  FIXME("%p %u %p\n", This, id, pfShown);
354  return E_NOTIMPL;
355 }
356 
358  IBrowserService* iface,
359  PCIDLIST_ABSOLUTE pidl,
360  LPWSTR pwszName,
361  UINT uFlags)
362 {
364  FIXME("%p %p %p %u\n", This, pidl, pwszName, uFlags);
365  return E_NOTIMPL;
366 }
367 
369  IBrowserService* iface,
370  UINT uiCP,
371  LPCWSTR pwszPath,
372  PIDLIST_ABSOLUTE *ppidlOut)
373 {
375  FIXME("%p %u %s %p\n", This, uiCP, debugstr_w(pwszPath), ppidlOut);
376  return E_NOTIMPL;
377 }
378 
380  IBrowserService* iface,
381  HRESULT hres,
382  LPCWSTR pwszPath)
383 {
385  FIXME("%p %x %s\n", This, hres, debugstr_w(pwszPath));
386  return E_NOTIMPL;
387 }
388 
390  IBrowserService* iface,
391  PCIDLIST_ABSOLUTE pidl,
392  DWORD grfHLNF)
393 {
395  FIXME("%p %p %d\n", This, pidl, grfHLNF);
396  return E_NOTIMPL;
397 }
398 
400  IBrowserService* iface,
401  BNSTATE bnstate)
402 {
404  FIXME("%p %d\n", This, bnstate);
405  return E_NOTIMPL;
406 }
407 
409  IBrowserService* iface,
410  BNSTATE *pbnstate)
411 {
413  FIXME("%p %p\n", This, pbnstate);
414  return E_NOTIMPL;
415 }
416 
418  IBrowserService* iface,
419  IShellView *psv,
420  PCIDLIST_ABSOLUTE pidl,
421  BOOL *pfDidBrowse)
422 {
424  FIXME("%p %p %p %p\n", This, psv, pidl, pfDidBrowse);
425  return E_NOTIMPL;
426 }
427 
429  IBrowserService* iface)
430 {
432  FIXME("%p\n", This);
433  return E_NOTIMPL;
434 }
435 
437  IBrowserService* iface)
438 {
440  FIXME("%p\n", This);
441  return E_NOTIMPL;
442 }
443 
445  IBrowserService* iface,
446  DWORD dwFlags,
447  DWORD dwFlagMask)
448 {
450  FIXME("%p %x %x\n", This, dwFlags, dwFlagMask);
451  return E_NOTIMPL;
452 }
453 
455  IBrowserService* iface,
456  DWORD *pdwFlags)
457 {
459  FIXME("%p %p\n", This, pdwFlags);
460  return E_NOTIMPL;
461 }
462 
464  IBrowserService* iface)
465 {
467  FIXME("%p\n", This);
468  return E_NOTIMPL;
469 }
470 
472  IBrowserService* iface,
473  PIDLIST_ABSOLUTE *ppidl)
474 {
476  FIXME("%p %p\n", This, ppidl);
477  return E_NOTIMPL;
478 }
479 
481  IBrowserService* iface,
482  PCIDLIST_ABSOLUTE pidl)
483 {
485  FIXME("%p %p\n", This, pidl);
486  return E_NOTIMPL;
487 }
488 
490  IBrowserService* iface)
491 {
493  FIXME("%p\n", This);
494  return E_NOTIMPL;
495 }
496 
498  IBrowserService* iface,
499  DWORD dwID,
500  IUnknown **ppunk)
501 {
503  FIXME("%p %x %p\n", This, dwID, ppunk);
504  return E_NOTIMPL;
505 }
506 
508  IBrowserService* iface,
509  IOleObject **ppole,
510  IStream **pstm,
511  IBindCtx **ppbc)
512 {
514  FIXME("%p %p %p %p\n", This, ppole, pstm, ppbc);
515  return E_NOTIMPL;
516 }
517 
519  IBrowserService* iface,
520  IOleObject *pole,
521  BOOL fIsLocalAnchor)
522 {
524  FIXME("%p %p %d\n", This, pole, fIsLocalAnchor);
525  return E_NOTIMPL;
526 }
527 
529  IBrowserService* iface,
530  IOleObject *pole)
531 {
533  FIXME("%p %p\n", This, pole);
534  return E_NOTIMPL;
535 }
536 
538  IBrowserService* iface,
539  VARIANT *pvarIn,
540  VARIANT *pvarOut)
541 {
543  FIXME("%p %s %p\n", This, debugstr_variant(pvarIn), pvarOut);
544  return E_NOTIMPL;
545 }
546 
548  IBrowserService* iface,
549  IShellView *psv,
550  BOOL fDone,
551  VARIANT *pvarargIn,
552  VARIANT *pvarargOut)
553 {
555  FIXME("%p %p %d %s %p\n", This, psv, fDone, debugstr_variant(pvarargIn), pvarargOut);
556  return E_NOTIMPL;
557 }
558 
560  IBrowserService* iface,
561  HPALETTE *hpal)
562 {
564  FIXME("%p %p\n", This, hpal);
565  return E_NOTIMPL;
566 }
567 
569  IBrowserService* iface,
570  BOOL fForceRegister,
571  int swc)
572 {
574  FIXME("%p %d %d\n", This, fForceRegister, swc);
575  return E_NOTIMPL;
576 }
577 
578 static const IBrowserServiceVtbl BrowserServiceVtbl = {
612 };
613 
615 {
616  return CONTAINING_RECORD(iface, ShellBrowser, IDocObjectService_iface);
617 }
618 
620  IDocObjectService* iface,
621  REFIID riid,
622  void **ppvObject)
623 {
625  return IShellBrowser_QueryInterface(&This->IShellBrowser_iface, riid, ppvObject);
626 }
627 
629  IDocObjectService* iface)
630 {
632  return IShellBrowser_AddRef(&This->IShellBrowser_iface);
633 }
634 
636  IDocObjectService* iface)
637 {
639  return IShellBrowser_Release(&This->IShellBrowser_iface);
640 }
641 
643  IDocObjectService* iface,
644  IDispatch *pDispatch,
645  LPCWSTR lpszUrl,
646  DWORD dwFlags,
647  LPCWSTR lpszFrameName,
648  BYTE *pPostData,
649  DWORD cbPostData,
650  LPCWSTR lpszHeaders,
651  BOOL fPlayNavSound,
652  BOOL *pfCancel)
653 {
655  VARIANT var_url, var_flags, var_frame_name, var_post_data, var_post_data2, var_headers;
656  VARIANTARG params[7];
657  DISPPARAMS dp = {params, NULL, 7, 0};
658  VARIANT_BOOL cancel = VARIANT_FALSE;
661  DWORD file_path_len = ARRAY_SIZE(file_path);
662 
663  TRACE("%p %p %s %x %s %p %d %s %d %p\n", This, pDispatch, debugstr_w(lpszUrl),
664  dwFlags, debugstr_w(lpszFrameName), pPostData, cbPostData,
665  debugstr_w(lpszHeaders), fPlayNavSound, pfCancel);
666 
667  if(cbPostData) {
668  post_data = SafeArrayCreateVector(VT_UI1, 0, cbPostData);
669  if(!post_data)
670  return E_OUTOFMEMORY;
671  memcpy(post_data->pvData, pPostData, cbPostData);
672  }else {
673  post_data = NULL;
674  }
675 
677  V_BOOLREF(params) = &cancel;
678 
680  V_VARIANTREF(params+1) = &var_headers;
681  V_VT(&var_headers) = VT_BSTR;
682  V_BSTR(&var_headers) = lpszHeaders ? SysAllocString(lpszHeaders) : NULL;
683 
685  V_VARIANTREF(params+2) = &var_post_data2;
686  V_VT(&var_post_data2) = (VT_BYREF|VT_VARIANT);
687  V_VARIANTREF(&var_post_data2) = &var_post_data;
688 
689  if(post_data) {
690  V_VT(&var_post_data) = VT_UI1|VT_ARRAY;
691  V_ARRAY(&var_post_data) = post_data;
692  }else {
693  V_VT(&var_post_data) = VT_EMPTY;
694  }
695 
697  V_VARIANTREF(params+3) = &var_frame_name;
698  V_VT(&var_frame_name) = VT_BSTR;
699  V_BSTR(&var_frame_name) = lpszFrameName ? SysAllocString(lpszFrameName) : NULL;
700 
702  V_VARIANTREF(params+4) = &var_flags;
703  V_VT(&var_flags) = VT_I4;
704  V_I4(&var_flags) = 0;
705 
707  V_VARIANTREF(params+5) = &var_url;
708  V_VT(&var_url) = VT_BSTR;
709  if(PathCreateFromUrlW(lpszUrl, file_path, &file_path_len, 0) == S_OK)
710  V_BSTR(&var_url) = SysAllocString(file_path);
711  else
712  V_BSTR(&var_url) = SysAllocString(lpszUrl);
713 
714  V_VT(params+6) = (VT_DISPATCH);
715  V_DISPATCH(params+6) = (IDispatch*)This->doc_host->wb;
716 
717  /* Keep reference to This. It may be released in event handler. */
718  IShellBrowser_AddRef(&This->IShellBrowser_iface);
719 
720  TRACE(">>>\n");
721  call_sink(This->doc_host->cps.wbe2, DISPID_BEFORENAVIGATE2, &dp);
722  TRACE("<<<\n");
723 
724  IShellBrowser_Release(&This->IShellBrowser_iface);
725 
726  SysFreeString(V_BSTR(&var_url));
727  SysFreeString(V_BSTR(&var_headers));
728  SysFreeString(V_BSTR(&var_frame_name));
730 
731  *pfCancel = !!cancel;
732  return S_OK;
733 }
734 
736  IDocObjectService* iface,
737  IHTMLWindow2 *pHTMLWindow2,
738  DWORD dwFlags)
739 {
741  DocHost *doc_host = This->doc_host;
742  IHTMLPrivateWindow *priv_window;
743  VARIANTARG params[2];
744  DISPPARAMS dp = {params, NULL, 2, 0};
745  VARIANT url_var;
746  BSTR url;
747  HRESULT hres;
748 
749  TRACE("%p %p %x\n", This, pHTMLWindow2, dwFlags);
750 
751  update_navigation_commands(This->doc_host);
752 
753  if(doc_host->travellog.loading_pos != -1) {
754  WARN("histupdate not notified\n");
755  doc_host->travellog.position = doc_host->travellog.loading_pos;
756  doc_host->travellog.loading_pos = -1;
757  }
758 
759  hres = IHTMLWindow2_QueryInterface(pHTMLWindow2, &IID_IHTMLPrivateWindow, (void**)&priv_window);
760  if(FAILED(hres))
761  return hres;
762 
763  hres = IHTMLPrivateWindow_GetAddressBarUrl(priv_window, &url);
764  IHTMLPrivateWindow_Release(priv_window);
765  if(FAILED(hres))
766  return hres;
767 
768  TRACE("got URL %s\n", debugstr_w(url));
769  set_dochost_url(This->doc_host, url);
770 
772  V_VARIANTREF(params) = &url_var;
773 
774  V_VT(params+1) = VT_DISPATCH;
775  V_DISPATCH(params+1) = (IDispatch*)doc_host->wb;
776 
777  V_VT(&url_var) = VT_BSTR;
778  V_BSTR(&url_var) = url;
779 
780  /* Keep reference to This. It may be released in event handler. */
781  IShellBrowser_AddRef(&This->IShellBrowser_iface);
782 
783  TRACE(">>>\n");
784  call_sink(This->doc_host->cps.wbe2, DISPID_NAVIGATECOMPLETE2, &dp);
785  TRACE("<<<\n");
786 
788 
789  This->doc_host->busy = VARIANT_FALSE;
790  IShellBrowser_Release(&This->IShellBrowser_iface);
791  return S_OK;
792 }
793 
795  IDocObjectService* iface)
796 {
798  FIXME("%p\n", This);
799  return E_NOTIMPL;
800 }
801 
803  IDocObjectService* iface)
804 {
806  FIXME("%p\n", This);
807  return E_NOTIMPL;
808 }
809 
811  IDocObjectService* iface,
812  IHTMLWindow2 *pHTMLWindow,
813  DWORD dwFlags)
814 {
816  IHTMLPrivateWindow *priv_window;
817  VARIANTARG params[2];
818  DISPPARAMS dp = {params, NULL, 2, 0};
819  VARIANT url_var;
820  BSTR url;
821  HRESULT hres;
822 
823  TRACE("%p %p %x\n", This, pHTMLWindow, dwFlags);
824 
825  hres = IHTMLWindow2_QueryInterface(pHTMLWindow, &IID_IHTMLPrivateWindow, (void**)&priv_window);
826  if(FAILED(hres))
827  return hres;
828 
829  hres = IHTMLPrivateWindow_GetAddressBarUrl(priv_window, &url);
830  IHTMLPrivateWindow_Release(priv_window);
831  if(FAILED(hres))
832  return hres;
833 
834  TRACE("got URL %s\n", debugstr_w(url));
835 
837  V_VARIANTREF(params) = &url_var;
838 
839  V_VT(params+1) = VT_DISPATCH;
840  V_DISPATCH(params+1) = (IDispatch*)This->doc_host->wb;
841 
842  V_VT(&url_var) = VT_BSTR;
843  V_BSTR(&url_var) = url;
844 
845  /* Keep reference to This. It may be released in event handler. */
846  IShellBrowser_AddRef(&This->IShellBrowser_iface);
847 
848  TRACE(">>>\n");
849  call_sink(This->doc_host->cps.wbe2, DISPID_DOCUMENTCOMPLETE, &dp);
850  TRACE("<<<\n");
851 
853  if(This->doc_host)
854  This->doc_host->busy = VARIANT_FALSE;
855 
856  IShellBrowser_Release(&This->IShellBrowser_iface);
857  return S_OK;
858 }
859 
861  IDocObjectService* iface,
862  IHTMLWindow2 *pHTMLWindow)
863 {
865  FIXME("%p %p\n", This, pHTMLWindow);
866  return E_NOTIMPL;
867 }
868 
870  IDocObjectService* iface,
871  BSTR *pbstrPendingUrl)
872 {
874  FIXME("%p %p\n", This, pbstrPendingUrl);
875  return E_NOTIMPL;
876 }
877 
879  IDocObjectService* iface,
880  IHTMLElement *pHTMLElement)
881 {
883  FIXME("%p %p\n", This, pHTMLElement);
884  return E_NOTIMPL;
885 }
886 
888  IDocObjectService* iface,
889  BSTR *pbstrSearch)
890 {
892  FIXME("%p %p\n", This, pbstrSearch);
893  return E_NOTIMPL;
894 }
895 
897  IDocObjectService* iface,
898  LPCWSTR lpszUrl,
899  BOOL *pfIsError)
900 {
902  FIXME("%p %s %p\n", This, debugstr_w(lpszUrl), pfIsError);
903 
904  *pfIsError = FALSE;
905  return S_OK;
906 }
907 
908 static const IDocObjectServiceVtbl DocObjectServiceVtbl = {
922 };
923 
925 {
926  ShellBrowser *sb;
927 
928  sb = heap_alloc(sizeof(ShellBrowser));
929  if(!sb)
930  return E_OUTOFMEMORY;
931 
932  sb->IShellBrowser_iface.lpVtbl = &ShellBrowserVtbl;
933  sb->IBrowserService_iface.lpVtbl = &BrowserServiceVtbl;
934  sb->IDocObjectService_iface.lpVtbl = &DocObjectServiceVtbl;
935 
936  sb->ref = 1;
937  sb->doc_host = doc_host;
938 
939  *ret = sb;
940  return S_OK;
941 }
942 
944 {
945  sb->doc_host = NULL;
946  IShellBrowser_Release(&sb->IShellBrowser_iface);
947 }
948 
950 {
951  return CONTAINING_RECORD(iface, NewWindowManager, INewWindowManager_iface);
952 }
953 
955 {
957 
958  if(IsEqualGUID(&IID_IUnknown, riid)) {
959  TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
960  *ppv = &This->INewWindowManager_iface;
961  }else if(IsEqualGUID(&IID_INewWindowManager, riid)) {
962  TRACE("(%p)->(IID_INewWindowManager %p)\n", This, ppv);
963  *ppv = &This->INewWindowManager_iface;
964  }else {
965  WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
966  *ppv = NULL;
967  return E_NOINTERFACE;
968  }
969 
970  IUnknown_AddRef((IUnknown*)*ppv);
971  return S_OK;
972 }
973 
975 {
977 
978  TRACE("(%p)\n", This);
979 
980  return IOleClientSite_AddRef(&This->doc_host->IOleClientSite_iface);
981 }
982 
984 {
986 
987  TRACE("(%p)\n", This);
988 
989  return IOleClientSite_Release(&This->doc_host->IOleClientSite_iface);
990 }
991 
993  LPCWSTR pszName, LPCWSTR pszUrlContext, LPCWSTR pszFeatures, BOOL fReplace, DWORD dwFlags,
994  DWORD dwUserActionTime)
995 {
997  FIXME("(%p)->(%s %s %s %s %x %x %d)\n", This, debugstr_w(pszUrl), debugstr_w(pszName), debugstr_w(pszUrlContext),
998  debugstr_w(pszFeatures), fReplace, dwFlags, dwUserActionTime);
999  return S_OK;
1000 }
1001 
1002 static const INewWindowManagerVtbl NewWindowManagerVtbl = {
1007 };
1008 
1010 {
1011  doc_host->nwm.INewWindowManager_iface.lpVtbl = &NewWindowManagerVtbl;
1012  doc_host->nwm.doc_host = doc_host;
1013 }
static DWORD WINAPI BrowserService_GetBrowserIndex(IBrowserService *iface)
Definition: shellbrowser.c:489
static ULONG WINAPI BrowserService_AddRef(IBrowserService *iface)
Definition: shellbrowser.c:275
static HRESULT WINAPI BrowserService_IsControlWindowShown(IBrowserService *iface, UINT id, BOOL *pfShown)
Definition: shellbrowser.c:347
static HRESULT WINAPI DocObjectService_FireDocumentComplete(IDocObjectService *iface, IHTMLWindow2 *pHTMLWindow, DWORD dwFlags)
Definition: shellbrowser.c:810
static HRESULT WINAPI DocObjectService_QueryInterface(IDocObjectService *iface, REFIID riid, void **ppvObject)
Definition: shellbrowser.c:619
#define DISPID_BEFORENAVIGATE2
Definition: exdispid.h:43
HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwReserved)
Definition: path.c:3334
static HRESULT WINAPI BrowserService_RegisterWindow(IBrowserService *iface, BOOL fForceRegister, int swc)
Definition: shellbrowser.c:568
static HRESULT WINAPI ShellBrowser_GetWindow(IShellBrowser *iface, HWND *phwnd)
Definition: shellbrowser.c:92
#define REFIID
Definition: guiddef.h:118
#define E_NOINTERFACE
Definition: winerror.h:2364
Definition: compat.h:1939
static HRESULT WINAPI ShellBrowser_ContextSensitiveHelp(IShellBrowser *iface, BOOL fEnterMode)
Definition: shellbrowser.c:101
WINE_DEFAULT_DEBUG_CHANNEL(ieframe)
static HRESULT WINAPI BrowserService_SetFlags(IBrowserService *iface, DWORD dwFlags, DWORD dwFlagMask)
Definition: shellbrowser.c:444
static NewWindowManager * impl_from_INewWindowManager(INewWindowManager *iface)
Definition: shellbrowser.c:949
static HRESULT WINAPI BrowserService_GetOleObject(IBrowserService *iface, IOleObject **ppobjv)
Definition: shellbrowser.c:319
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
superblock * sb
Definition: btrfs.c:4162
static HRESULT WINAPI ShellBrowser_SetStatusTextSB(IShellBrowser *iface, LPCOLESTR pszStatusText)
Definition: shellbrowser.c:140
REFIID riid
Definition: precomp.h:44
Implementation of IShellBrowserImpl interface in explorer child windows.
Definition: ieframe.h:84
static HRESULT WINAPI BrowserService_GetHistoryObject(IBrowserService *iface, IOleObject **ppole, IStream **pstm, IBindCtx **ppbc)
Definition: shellbrowser.c:507
#define V_ARRAY(A)
Definition: oleauto.h:222
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
enum tagBNSTATE BNSTATE
#define WARN(fmt,...)
Definition: debug.h:111
static HRESULT WINAPI ShellBrowser_QueryInterface(IShellBrowser *iface, REFIID riid, void **ppv)
Definition: shellbrowser.c:37
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
static ULONG WINAPI NewWindowManager_Release(INewWindowManager *iface)
Definition: shellbrowser.c:983
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define DISPID_DOCUMENTCOMPLETE
Definition: webchild.h:61
#define assert(x)
Definition: debug.h:53
static HRESULT WINAPI ShellBrowser_OnViewWindowActive(IShellBrowser *iface, IShellView *pshv)
Definition: shellbrowser.c:220
static ULONG WINAPI DocObjectService_AddRef(IDocObjectService *iface)
Definition: shellbrowser.c:628
static HRESULT WINAPI BrowserService_GetNavigateState(IBrowserService *iface, BNSTATE *pbnstate)
Definition: shellbrowser.c:408
UINT_PTR WPARAM
Definition: windef.h:207
OLECHAR * BSTR
Definition: compat.h:1934
__IHTMLWindow2_FWD_DEFINED__ typedef interface IHTMLWindow2 IHTMLWindow2
Definition: mshtmhst.idl:64
UINT uFlags
Definition: api.c:60
static HRESULT WINAPI ShellBrowser_InsertMenusSB(IShellBrowser *iface, HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
Definition: shellbrowser.c:110
static HRESULT WINAPI BrowserService_GetBrowserByIndex(IBrowserService *iface, DWORD dwID, IUnknown **ppunk)
Definition: shellbrowser.c:497
static HRESULT WINAPI BrowserService_SetHistoryObject(IBrowserService *iface, IOleObject *pole, BOOL fIsLocalAnchor)
Definition: shellbrowser.c:518
short VARIANT_BOOL
Definition: compat.h:1931
Definition: send.c:47
WPARAM wParam
Definition: combotst.c:138
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
static ULONG WINAPI ShellBrowser_Release(IShellBrowser *iface)
Definition: shellbrowser.c:77
static HRESULT WINAPI DocObjectService_GetUrlSearchComponent(IDocObjectService *iface, BSTR *pbstrSearch)
Definition: shellbrowser.c:887
void update_navigation_commands(DocHost *dochost)
Definition: dochost.c:106
#define V_I4(A)
Definition: oleauto.h:247
#define V_DISPATCH(A)
Definition: oleauto.h:239
static HRESULT WINAPI BrowserService_CanNavigateNow(IBrowserService *iface)
Definition: shellbrowser.c:463
static HRESULT WINAPI BrowserService_QueryInterface(IBrowserService *iface, REFIID riid, void **ppvObject)
Definition: shellbrowser.c:266
_In_ POINTL * pptl
Definition: winddi.h:3741
IWebBrowser2 * wb
Definition: ieframe.h:133
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
Definition: winbase.h:2706
static HRESULT WINAPI ShellBrowser_GetViewStateStream(IShellBrowser *iface, DWORD grfMode, IStream **ppStrm)
Definition: shellbrowser.c:178
HRESULT create_browser_service(DocHost *doc_host, ShellBrowser **ret)
Definition: shellbrowser.c:924
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static ULONG WINAPI NewWindowManager_AddRef(INewWindowManager *iface)
Definition: shellbrowser.c:974
GLenum const GLfloat * params
Definition: glext.h:5645
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
void call_sink(ConnectionPoint *This, DISPID dispid, DISPPARAMS *dispparams)
Definition: events.c:391
static ShellBrowser * impl_from_IShellBrowser(IShellBrowser *iface)
Definition: shellbrowser.c:32
static const INewWindowManagerVtbl NewWindowManagerVtbl
static HRESULT WINAPI DocObjectService_ActiveElementChanged(IDocObjectService *iface, IHTMLElement *pHTMLElement)
Definition: shellbrowser.c:878
#define debugstr_w
Definition: kernel32.h:32
static HRESULT WINAPI BrowserService_NavigateToPidl(IBrowserService *iface, PCIDLIST_ABSOLUTE pidl, DWORD grfHLNF)
Definition: shellbrowser.c:389
GLenum GLint ref
Definition: glext.h:6028
#define FIXME(fmt,...)
Definition: debug.h:110
static ULONG WINAPI DocObjectService_Release(IDocObjectService *iface)
Definition: shellbrowser.c:635
struct DocHost::@408 travellog
static HRESULT WINAPI BrowserService_OnHttpEquiv(IBrowserService *iface, IShellView *psv, BOOL fDone, VARIANT *pvarargIn, VARIANT *pvarargOut)
Definition: shellbrowser.c:547
#define DISPID_NAVIGATECOMPLETE2
Definition: webchild.h:54
#define V_BOOLREF(A)
Definition: oleauto.h:225
INewWindowManager INewWindowManager_iface
Definition: ieframe.h:100
smooth NULL
Definition: ftsmooth.c:416
static HRESULT WINAPI BrowserService_GetFlags(IBrowserService *iface, DWORD *pdwFlags)
Definition: shellbrowser.c:454
static HRESULT WINAPI BrowserService_UpdateBackForwardState(IBrowserService *iface)
Definition: shellbrowser.c:436
static HRESULT WINAPI ShellBrowser_SetMenuSB(IShellBrowser *iface, HMENU hmenuShared, HOLEMENU holemenuReserved, HWND hwndActiveObject)
Definition: shellbrowser.c:120
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:241
LONG_PTR LPARAM
Definition: windef.h:208
static const IDocObjectServiceVtbl DocObjectServiceVtbl
Definition: shellbrowser.c:908
static HRESULT WINAPI NewWindowManager_EvaluateNewWindow(INewWindowManager *iface, LPCWSTR pszUrl, LPCWSTR pszName, LPCWSTR pszUrlContext, LPCWSTR pszFeatures, BOOL fReplace, DWORD dwFlags, DWORD dwUserActionTime)
Definition: shellbrowser.c:992
#define debugstr_guid
Definition: kernel32.h:35
static HRESULT WINAPI BrowserService_IEParseDisplayName(IBrowserService *iface, UINT uiCP, LPCWSTR pwszPath, PIDLIST_ABSOLUTE *ppidlOut)
Definition: shellbrowser.c:368
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
static HRESULT WINAPI DocObjectService_FireBeforeNavigate2(IDocObjectService *iface, IDispatch *pDispatch, LPCWSTR lpszUrl, DWORD dwFlags, LPCWSTR lpszFrameName, BYTE *pPostData, DWORD cbPostData, LPCWSTR lpszHeaders, BOOL fPlayNavSound, BOOL *pfCancel)
Definition: shellbrowser.c:642
void NewWindowManager_Init(DocHost *doc_host)
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
static const WCHAR url[]
Definition: encode.c:1432
const GUID IID_IUnknown
static HRESULT WINAPI BrowserService_UpdateWindowList(IBrowserService *iface)
Definition: shellbrowser.c:428
static HRESULT WINAPI BrowserService_GetTitle(IBrowserService *iface, IShellView *psv, LPWSTR pszName, DWORD cchName)
Definition: shellbrowser.c:308
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:8
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
HRESULT set_dochost_url(DocHost *, const WCHAR *) DECLSPEC_HIDDEN
Definition: navigate.c:130
static HRESULT WINAPI BrowserService_SetNavigateState(IBrowserService *iface, BNSTATE bnstate)
Definition: shellbrowser.c:399
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
Definition: safearray.c:1349
SAFEARRAY *WINAPI SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements)
Definition: safearray.c:679
static const IShellBrowserVtbl ShellBrowserVtbl
Definition: shellbrowser.c:240
int ret
static HRESULT WINAPI DocObjectService_GetPendingUrl(IDocObjectService *iface, BSTR *pbstrPendingUrl)
Definition: shellbrowser.c:869
static const CHAR post_data[]
Definition: protocol.c:215
#define InterlockedDecrement
Definition: armddk.h:52
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
static HRESULT WINAPI DocObjectService_IsErrorUrl(IDocObjectService *iface, LPCWSTR lpszUrl, BOOL *pfIsError)
Definition: shellbrowser.c:896
#define V_VT(A)
Definition: oleauto.h:211
static HRESULT WINAPI BrowserService_SetReferrer(IBrowserService *iface, PCIDLIST_ABSOLUTE pidl)
Definition: shellbrowser.c:480
static HRESULT WINAPI DocObjectService_FireDownloadComplete(IDocObjectService *iface)
Definition: shellbrowser.c:802
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned char BYTE
Definition: mem.h:68
REFIID LPVOID * ppvObject
Definition: precomp.h:44
#define V_BSTR(A)
Definition: oleauto.h:226
static HRESULT WINAPI BrowserService_SetTitle(IBrowserService *iface, IShellView *psv, LPCWSTR pszName)
Definition: shellbrowser.c:298
static HRESULT WINAPI ShellBrowser_SetToolbarItems(IShellBrowser *iface, LPTBBUTTONSB lpButtons, UINT nButtons, UINT uFlags)
Definition: shellbrowser.c:229
static HRESULT WINAPI DocObjectService_FireDownloadBegin(IDocObjectService *iface)
Definition: shellbrowser.c:794
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:519
static const IBrowserServiceVtbl BrowserServiceVtbl
Definition: shellbrowser.c:578
static HRESULT WINAPI BrowserService_GetTravelLog(IBrowserService *iface, ITravelLog **pptl)
Definition: shellbrowser.c:328
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
static HRESULT WINAPI ShellBrowser_SendControlMsg(IShellBrowser *iface, UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret)
Definition: shellbrowser.c:198
#define S_OK
Definition: intsafe.h:59
#define InterlockedIncrement
Definition: armddk.h:53
static HRESULT WINAPI ShellBrowser_GetControlWindow(IShellBrowser *iface, UINT id, HWND *phwnd)
Definition: shellbrowser.c:188
static HRESULT WINAPI BrowserService_GetPidl(IBrowserService *iface, PIDLIST_ABSOLUTE *ppidl)
Definition: shellbrowser.c:471
static HRESULT WINAPI ShellBrowser_QueryActiveShellView(IShellBrowser *iface, IShellView **ppshv)
Definition: shellbrowser.c:211
static HRESULT WINAPI BrowserService_DisplayParseError(IBrowserService *iface, HRESULT hres, LPCWSTR pwszPath)
Definition: shellbrowser.c:379
#define ARRAY_SIZE(a)
Definition: main.h:24
void detach_browser_service(ShellBrowser *sb)
Definition: shellbrowser.c:943
#define E_NOTIMPL
Definition: ddrawi.h:99
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:274
unsigned int UINT
Definition: ndis.h:50
static HRESULT WINAPI ShellBrowser_RemoveMenusSB(IShellBrowser *iface, HMENU hmenuShared)
Definition: shellbrowser.c:131
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4021
static HRESULT WINAPI BrowserService_ShowControlWindow(IBrowserService *iface, UINT id, BOOL fShow)
Definition: shellbrowser.c:337
static HRESULT WINAPI BrowserService_CacheOLEServer(IBrowserService *iface, IOleObject *pole)
Definition: shellbrowser.c:528
static HRESULT WINAPI ShellBrowser_EnableModelessSB(IShellBrowser *iface, BOOL fEnable)
Definition: shellbrowser.c:149
static HRESULT WINAPI BrowserService_IEGetDisplayName(IBrowserService *iface, PCIDLIST_ABSOLUTE pidl, LPWSTR pwszName, UINT uFlags)
Definition: shellbrowser.c:357
static HRESULT WINAPI BrowserService_GetParentSite(IBrowserService *iface, IOleInPlaceSite **ppipsite)
Definition: shellbrowser.c:289
struct stdole::DISPPARAMS DISPPARAMS
const GUID IID_IOleWindow
unsigned int ULONG
Definition: retypes.h:1
static HRESULT WINAPI NewWindowManager_QueryInterface(INewWindowManager *iface, REFIID riid, void **ppv)
Definition: shellbrowser.c:954
static HRESULT WINAPI BrowserService_NotifyRedirect(IBrowserService *iface, IShellView *psv, PCIDLIST_ABSOLUTE pidl, BOOL *pfDidBrowse)
Definition: shellbrowser.c:417
static HRESULT WINAPI BrowserService_GetPalette(IBrowserService *iface, HPALETTE *hpal)
Definition: shellbrowser.c:559
static HRESULT WINAPI DocObjectService_UpdateDesktopComponent(IDocObjectService *iface, IHTMLWindow2 *pHTMLWindow)
Definition: shellbrowser.c:860
static ShellBrowser * impl_from_IDocObjectService(IDocObjectService *iface)
Definition: shellbrowser.c:614
static ShellBrowser * impl_from_IBrowserService(IBrowserService *iface)
Definition: shellbrowser.c:261
DocHost * doc_host
Definition: ieframe.h:101
#define V_VARIANTREF(A)
Definition: oleauto.h:283
static HRESULT WINAPI DocObjectService_FireNavigateComplete2(IDocObjectService *iface, IHTMLWindow2 *pHTMLWindow2, DWORD dwFlags)
Definition: shellbrowser.c:735
static ULONG WINAPI ShellBrowser_AddRef(IShellBrowser *iface)
Definition: shellbrowser.c:66
WCHAR * LPWSTR
Definition: xmlstorage.h:184
LONG_PTR LRESULT
Definition: windef.h:209
static HRESULT WINAPI ShellBrowser_TranslateAcceleratorSB(IShellBrowser *iface, MSG *pmsg, WORD wID)
Definition: shellbrowser.c:158
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
static HRESULT WINAPI BrowserService_GetSetCodePage(IBrowserService *iface, VARIANT *pvarIn, VARIANT *pvarOut)
Definition: shellbrowser.c:537
LPARAM lParam
Definition: combotst.c:139
static HRESULT WINAPI ShellBrowser_BrowseObject(IShellBrowser *iface, LPCITEMIDLIST pidl, UINT wFlags)
Definition: shellbrowser.c:168
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
TCHAR file_path[MAX_PATH]
Definition: sndrec32.cpp:57
static ULONG WINAPI BrowserService_Release(IBrowserService *iface)
Definition: shellbrowser.c:282
NewWindowManager nwm
Definition: ieframe.h:175