From 0675f5c3d1f839544f27bf35d8cd6afca94f6573 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 29 May 2012 14:38:04 +0200 Subject: [PATCH] mshtml: Fixed Exec_ShellDocView_84 tests. --- dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/navigate.c | 41 ++++++++++------------------------------- dlls/mshtml/oleobj.c | 23 +++++++++++++++++++++++ dlls/mshtml/persist.c | 1 + dlls/mshtml/tests/htmldoc.c | 31 ++++++++++++++++++++----------- 5 files changed, 55 insertions(+), 42 deletions(-) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index cabe04e4755..7eaaa572a0e 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -727,6 +727,7 @@ HRESULT start_binding(HTMLWindow*,HTMLDocumentNode*,BSCallback*,IBindCtx*) DECLS HRESULT async_start_doc_binding(HTMLWindow*,nsChannelBSC*) DECLSPEC_HIDDEN; void abort_document_bindings(HTMLDocumentNode*) DECLSPEC_HIDDEN; void set_download_state(HTMLDocumentObj*,int) DECLSPEC_HIDDEN; +void call_docview_84(HTMLDocumentObj*) DECLSPEC_HIDDEN; HRESULT bind_mon_to_buffer(HTMLDocumentNode*,IMoniker*,void**,DWORD*) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 2c6d8265e9d..36970701bd0 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -610,27 +610,6 @@ static void init_bscallback(BSCallback *This, const BSCallbackVtbl *vtbl, IMonik This->mon = mon; } -/* Calls undocumented 84 cmd of CGID_ShellDocView */ -static void call_docview_84(HTMLDocumentObj *doc) -{ - IOleCommandTarget *olecmd; - VARIANT var; - HRESULT hres; - - if(!doc->client) - return; - - hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); - if(FAILED(hres)) - return; - - VariantInit(&var); - hres = IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 84, 0, NULL, &var); - IOleCommandTarget_Release(olecmd); - if(SUCCEEDED(hres) && V_VT(&var) != VT_NULL) - FIXME("handle result\n"); -} - static void parse_content_type(nsChannelBSC *This, const WCHAR *value) { const WCHAR *ptr; @@ -745,11 +724,8 @@ HRESULT start_binding(HTMLWindow *window, HTMLDocumentNode *doc, BSCallback *bsc /* NOTE: IE7 calls IsSystemMoniker here*/ - if(window) { - if(bscallback->mon != window->mon) - set_current_mon(window, bscallback->mon); - call_docview_84(window->doc_obj); - } + if(window && bscallback->mon != window->mon) + set_current_mon(window, bscallback->mon); if(bctx) { RegisterBindStatusCallback(bctx, &bscallback->IBindStatusCallback_iface, NULL, 0); @@ -1969,13 +1945,15 @@ HRESULT super_navigate(HTMLWindow *window, IUri *uri, const WCHAR *headers, BYTE return E_OUTOFMEMORY; } + /* Silently and repeated when real loading starts? */ + window->readystate = READYSTATE_LOADING; + call_docview_84(window->doc_obj); + task->window = window; task->bscallback = bsc; task->mon = mon; push_task(&task->header, navigate_proc, navigate_task_destr, window->task_magic); - /* Silently and repeated when real loading starts? */ - window->readystate = READYSTATE_LOADING; }else { navigate_javascript_task_t *task; @@ -1986,13 +1964,14 @@ HRESULT super_navigate(HTMLWindow *window, IUri *uri, const WCHAR *headers, BYTE if(!task) return E_OUTOFMEMORY; + /* Why silently? */ + window->readystate = READYSTATE_COMPLETE; + call_docview_84(window->doc_obj); + IUri_AddRef(uri); task->window = window; task->uri = uri; push_task(&task->header, navigate_javascript_proc, navigate_javascript_task_destr, window->task_magic); - - /* Why silently? */ - window->readystate = READYSTATE_COMPLETE; } return S_OK; diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c index 7db44400a03..3acd5622aa9 100644 --- a/dlls/mshtml/oleobj.c +++ b/dlls/mshtml/oleobj.c @@ -189,6 +189,27 @@ static void update_hostinfo(HTMLDocumentObj *This, DOCHOSTUIINFO *hostinfo) } } +/* Calls undocumented 84 cmd of CGID_ShellDocView */ +void call_docview_84(HTMLDocumentObj *doc) +{ + IOleCommandTarget *olecmd; + VARIANT var; + HRESULT hres; + + if(!doc->client) + return; + + hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd); + if(FAILED(hres)) + return; + + VariantInit(&var); + hres = IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 84, 0, NULL, &var); + IOleCommandTarget_Release(olecmd); + if(SUCCEEDED(hres) && V_VT(&var) != VT_NULL) + FIXME("handle result\n"); +} + static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite) { HTMLDocument *This = impl_from_IOleObject(iface); @@ -330,6 +351,8 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite } } + call_docview_84(This->doc_obj); + IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &cmd, NULL); V_VT(&var) = VT_I4; diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index 4c04ff2ba6f..5ad6104c04f 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -533,6 +533,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva } prepare_for_binding(This, pimkName, FALSE); + call_docview_84(This->doc_obj); hres = set_moniker(This, pimkName, pibc, NULL, TRUE); if(FAILED(hres)) return hres; diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c index 5240f2ec014..838e2aec4a8 100644 --- a/dlls/mshtml/tests/htmldoc.c +++ b/dlls/mshtml/tests/htmldoc.c @@ -92,6 +92,7 @@ DEFINE_GUID(SID_SContainerDispatch,0xb722be00,0x4e68,0x101b,0xa2,0xbc,0x00,0xaa, #define CLEAR_CALLED(func) \ expect_ ## func = called_ ## func = FALSE + static IOleDocumentView *view = NULL; static HWND container_hwnd = NULL, hwnd = NULL, last_hwnd = NULL; @@ -4882,7 +4883,6 @@ static void test_Load(IPersistMoniker *persist, IMoniker *mon) } SET_EXPECT(OnChanged_READYSTATE); SET_EXPECT(Invoke_OnReadyStateChange_Loading); - SET_EXPECT(Exec_ShellDocView_84); SET_EXPECT(IsSystemMoniker); if(mon == &Moniker) SET_EXPECT(BindToStorage); @@ -4892,9 +4892,10 @@ static void test_Load(IPersistMoniker *persist, IMoniker *mon) SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); SET_EXPECT(Exec_ShellDocView_37); SET_EXPECT(IsErrorUrl); - } - else + }else { SET_EXPECT(GetTravelLog); + } + SET_EXPECT(Exec_ShellDocView_84); SET_EXPECT(GetPendingUrl); load_state = LD_DOLOAD; expect_LockContainer_fLock = TRUE; @@ -4930,7 +4931,6 @@ static void test_Load(IPersistMoniker *persist, IMoniker *mon) CHECK_CALLED(OnChanged_READYSTATE); CHECK_CALLED(Invoke_OnReadyStateChange_Loading); CLEAR_CALLED(IsSystemMoniker); /* IE7 */ - SET_CALLED(Exec_ShellDocView_84); if(mon == &Moniker) CHECK_CALLED(BindToStorage); CLEAR_CALLED(SetActiveObject); /* FIXME */ @@ -4939,9 +4939,10 @@ static void test_Load(IPersistMoniker *persist, IMoniker *mon) CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); CHECK_CALLED(Exec_ShellDocView_37); todo_wine CHECK_CALLED_BROKEN(IsErrorUrl); - } - else + }else { todo_wine CHECK_CALLED(GetTravelLog); + } + CHECK_CALLED(Exec_ShellDocView_84); todo_wine CHECK_CALLED(GetPendingUrl); set_clientsite = container_locked = TRUE; @@ -4987,7 +4988,7 @@ static void test_download(DWORD flags) SET_EXPECT(GetExternal); SET_EXPECT(OnViewChange); SET_EXPECT(GetDropTarget); - if(flags & DWL_TRYCSS) + if((flags & DWL_TRYCSS) && !(flags & DWL_EMPTY)) SET_EXPECT(Exec_ShellDocView_84); if(flags & DWL_CSS) { SET_EXPECT(CreateInstance); @@ -5070,8 +5071,8 @@ static void test_download(DWORD flags) CHECK_CALLED(GetExternal); CHECK_CALLED(OnViewChange); CLEAR_CALLED(GetDropTarget); - if(flags & DWL_TRYCSS) - SET_CALLED(Exec_ShellDocView_84); + if((flags & DWL_TRYCSS) && !(flags & DWL_EMPTY)) + todo_wine CHECK_CALLED(Exec_ShellDocView_84); if(flags & DWL_CSS) { CHECK_CALLED(CreateInstance); CHECK_CALLED(Start); @@ -5220,6 +5221,7 @@ static void test_put_href(IHTMLDocument2 *doc, BOOL use_replace, const char *hre SET_EXPECT(Invoke_AMBIENT_SILENT); SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); SET_EXPECT(Exec_ShellDocView_63); + SET_EXPECT(Exec_ShellDocView_84); }else { SET_EXPECT(FireNavigateComplete2); SET_EXPECT(FireDocumentComplete); @@ -5247,6 +5249,7 @@ static void test_put_href(IHTMLDocument2 *doc, BOOL use_replace, const char *hre CHECK_CALLED(Invoke_AMBIENT_SILENT); CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); CHECK_CALLED(Exec_ShellDocView_63); + CHECK_CALLED(Exec_ShellDocView_84); }else { CHECK_CALLED(FireNavigateComplete2); CHECK_CALLED(FireDocumentComplete); @@ -5263,6 +5266,7 @@ static void test_put_href(IHTMLDocument2 *doc, BOOL use_replace, const char *hre CLEAR_CALLED(Invoke_AMBIENT_SILENT); CLEAR_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); CLEAR_CALLED(Exec_ShellDocView_63); + todo_wine CLEAR_CALLED(Exec_ShellDocView_84); }else { CLEAR_CALLED(FireNavigateComplete2); CLEAR_CALLED(FireDocumentComplete); @@ -5295,6 +5299,7 @@ static void test_put_href(IHTMLDocument2 *doc, BOOL use_replace, const char *hre SET_EXPECT(Invoke_AMBIENT_SILENT); SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); SET_EXPECT(Exec_ShellDocView_63); + SET_EXPECT(Exec_ShellDocView_84); str = a2bstr(nav_url); str2 = a2bstr(""); @@ -5309,6 +5314,7 @@ static void test_put_href(IHTMLDocument2 *doc, BOOL use_replace, const char *hre CHECK_CALLED(Invoke_AMBIENT_SILENT); CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED); CHECK_CALLED(Exec_ShellDocView_63); + CHECK_CALLED(Exec_ShellDocView_84); } if(doc_mon) { @@ -5679,7 +5685,7 @@ static void test_exec_editmode(IUnknown *unk, BOOL loaded) CHECK_CALLED(OnChanged_READYSTATE); CHECK_CALLED(Invoke_OnReadyStateChange_Loading); CLEAR_CALLED(IsSystemMoniker); /* IE7 */ - SET_CALLED(Exec_ShellDocView_84); + CHECK_CALLED(Exec_ShellDocView_84); if(loaded) CHECK_CALLED(BindToStorage); CHECK_CALLED(InPlaceUIWindow_SetActiveObject); @@ -5888,6 +5894,7 @@ static void test_ClientSite(IOleObject *oleobj, DWORD flags) SET_EXPECT(Invoke_AMBIENT_PALETTE); SET_EXPECT(GetOverrideKeyPath); SET_EXPECT(GetTravelLog); + SET_EXPECT(Exec_ShellDocView_84); hres = IOleObject_SetClientSite(oleobj, &ClientSite); ok(hres == S_OK, "SetClientSite failed: %08x\n", hres); @@ -5912,6 +5919,7 @@ static void test_ClientSite(IOleObject *oleobj, DWORD flags) CLEAR_CALLED(Invoke_AMBIENT_PALETTE); /* not called on IE9 */ CLEAR_CALLED(GetOverrideKeyPath); /* Called by IE9 */ todo_wine CHECK_CALLED(GetTravelLog); + CHECK_CALLED(Exec_ShellDocView_84); set_clientsite = TRUE; } @@ -7075,7 +7083,6 @@ static void test_editing_mode(BOOL do_load) test_MSHTML_QueryStatus(doc, OLECMDF_SUPPORTED|OLECMDF_ENABLED); if(!do_load) { - test_exec_fontname(unk, NULL, wszTimesNewRoman); test_exec_fontname(unk, wszArial, wszTimesNewRoman); test_timer(EXPECT_UPDATEUI); test_exec_fontname(unk, NULL, wszArial); @@ -7150,6 +7157,7 @@ static void test_UIActivate(BOOL do_load, BOOL use_ipsex, BOOL use_ipsw) SET_EXPECT(Exec_SETPROGRESSMAX); SET_EXPECT(Exec_SETPROGRESSPOS); SET_EXPECT(GetTravelLog); + SET_EXPECT(Exec_ShellDocView_84); hres = IOleObject_SetClientSite(oleobj, &ClientSite); ok(hres == S_OK, "SetClientSite failed: %08x\n", hres); @@ -7170,6 +7178,7 @@ static void test_UIActivate(BOOL do_load, BOOL use_ipsex, BOOL use_ipsw) CHECK_CALLED(Exec_SETPROGRESSMAX); CHECK_CALLED(Exec_SETPROGRESSPOS); todo_wine CHECK_CALLED(GetTravelLog); + CHECK_CALLED(Exec_ShellDocView_84); hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); ok(hres == S_OK, "GetInPlaceSite failed: %08x\n", hres); -- 2.11.4.GIT