Module: wine Branch: master Commit: b14fc2c9d1b98e1f99ba41806852b1169309b232 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b14fc2c9d1b98e1f99ba418068...
Author: Jacek Caban jacek@codeweavers.com Date: Sat Jul 23 12:51:38 2011 +0200
mshtml: Split set_moniker implementation.
---
dlls/mshtml/binding.h | 1 + dlls/mshtml/htmlwindow.c | 1 + dlls/mshtml/persist.c | 60 ++++++++++++++++++++++++--------------------- 3 files changed, 34 insertions(+), 28 deletions(-)
diff --git a/dlls/mshtml/binding.h b/dlls/mshtml/binding.h index f3c4d3e..3e8b87c 100644 --- a/dlls/mshtml/binding.h +++ b/dlls/mshtml/binding.h @@ -106,6 +106,7 @@ HRESULT hlink_frame_navigate(HTMLDocument*,LPCWSTR,nsChannel*,DWORD,BOOL*) DECLS HRESULT create_doc_uri(HTMLWindow*,WCHAR*,nsWineURI**) DECLSPEC_HIDDEN; HRESULT load_nsuri(HTMLWindow*,nsWineURI*,nsChannelBSC*,DWORD) DECLSPEC_HIDDEN; HRESULT set_moniker(HTMLDocument*,IMoniker*,IBindCtx*,nsChannelBSC*,BOOL) DECLSPEC_HIDDEN; +void prepare_for_binding(HTMLDocument*,IMoniker*,IBindCtx*,BOOL) DECLSPEC_HIDDEN;
HRESULT create_channelbsc(IMoniker*,WCHAR*,BYTE*,DWORD,nsChannelBSC**) DECLSPEC_HIDDEN; HRESULT channelbsc_load_stream(nsChannelBSC*,IStream*) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 377825d..911e1f2 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -1747,6 +1747,7 @@ static HRESULT WINAPI HTMLPrivateWindow_SuperNavigate(IHTMLPrivateWindow *iface, return hres; }
+ prepare_for_binding(&This->doc_obj->basedoc, mon, NULL, TRUE); hres = set_moniker(&This->doc_obj->basedoc, mon, NULL, bsc, TRUE); if(SUCCEEDED(hres)) hres = async_start_doc_binding(This, bsc); diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index 0907810..550414f 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -188,23 +188,10 @@ static void set_downloading_proc(task_t *_task) } }
-HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannelBSC *async_bsc, BOOL set_download) +void prepare_for_binding(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BOOL navigated_binding) { - nsChannelBSC *bscallback; - docobj_task_t *task; - download_proc_task_t *download_task; - nsWineURI *nsuri; - LPOLESTR url; HRESULT hres;
- hres = IMoniker_GetDisplayName(mon, pibc, NULL, &url); - if(FAILED(hres)) { - WARN("GetDiaplayName failed: %08x\n", hres); - return hres; - } - - TRACE("got url: %s\n", debugstr_w(url)); - if(This->doc_obj->client) { VARIANT silent, offline;
@@ -233,8 +220,6 @@ HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannel set_current_mon(This->window, mon); }
- set_ready_state(This->window, READYSTATE_LOADING); - if(This->doc_obj->client) { IOleCommandTarget *cmdtrg = NULL;
@@ -243,7 +228,7 @@ HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannel if(SUCCEEDED(hres)) { VARIANT var, out;
- if(!async_bsc) { + if(!navigated_binding) { V_VT(&var) = VT_I4; V_I4(&var) = 0; IOleCommandTarget_Exec(cmdtrg, &CGID_ShellDocView, 37, 0, &var, NULL); @@ -259,24 +244,39 @@ HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannel IOleCommandTarget_Release(cmdtrg); } } +}
- hres = create_doc_uri(This->window, url, &nsuri); +HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannelBSC *async_bsc, BOOL set_download) +{ + download_proc_task_t *download_task; + nsChannelBSC *bscallback; + nsWineURI *nsuri; + LPOLESTR url; + HRESULT hres;
- if(SUCCEEDED(hres)) - { - if(async_bsc) { + hres = IMoniker_GetDisplayName(mon, pibc, NULL, &url); + if(FAILED(hres)) { + WARN("GetDiaplayName failed: %08x\n", hres); + return hres; + } + + TRACE("got url: %s\n", debugstr_w(url)); + + set_ready_state(This->window, READYSTATE_LOADING); + + hres = create_doc_uri(This->window, url, &nsuri); + if(SUCCEEDED(hres)) { + if(async_bsc) bscallback = async_bsc; - }else { + else hres = create_channelbsc(mon, NULL, NULL, 0, &bscallback); - } }
- if(SUCCEEDED(hres)) - { + if(SUCCEEDED(hres)) { remove_target_tasks(This->task_magic); abort_document_bindings(This->doc_node);
- hres = load_nsuri(This->window, nsuri, bscallback, LOAD_INITIAL_DOCUMENT_URI); + hres = load_nsuri(This->window, nsuri, bscallback, 0/*LOAD_INITIAL_DOCUMENT_URI*/); nsISupports_Release((nsISupports*)nsuri); /* FIXME */ if(SUCCEEDED(hres)) set_window_bscallback(This->window, bscallback); @@ -284,8 +284,7 @@ HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannel IUnknown_Release((IUnknown*)bscallback); }
- if(FAILED(hres)) - { + if(FAILED(hres)) { CoTaskMemFree(url); return hres; } @@ -293,6 +292,8 @@ HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannel HTMLDocument_LockContainer(This->doc_obj, TRUE);
if(This->doc_obj->frame) { + docobj_task_t *task; + task = heap_alloc(sizeof(docobj_task_t)); task->doc = This->doc_obj; push_task(&task->header, set_progress_proc, This->doc_obj->basedoc.task_magic); @@ -433,6 +434,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva } }
+ prepare_for_binding(This, pimkName, pibc, FALSE); hres = set_moniker(This, pimkName, pibc, NULL, TRUE); if(FAILED(hres)) return hres; @@ -703,6 +705,7 @@ static HRESULT WINAPI PersistStreamInit_Load(IPersistStreamInit *iface, LPSTREAM return hres; }
+ prepare_for_binding(This, mon, NULL, FALSE); hres = set_moniker(This, mon, NULL, NULL, TRUE); IMoniker_Release(mon); if(FAILED(hres)) @@ -761,6 +764,7 @@ static HRESULT WINAPI PersistStreamInit_InitNew(IPersistStreamInit *iface) return hres; }
+ prepare_for_binding(This, mon, NULL, FALSE); hres = set_moniker(This, mon, NULL, NULL, FALSE); IMoniker_Release(mon); if(FAILED(hres))