mshtml: Fixed Exec_ShellDocView_84 tests.

This commit is contained in:
Jacek Caban 2012-05-29 14:38:04 +02:00 committed by Alexandre Julliard
parent db737291fc
commit 0675f5c3d1
5 changed files with 55 additions and 42 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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);