ieframe: Keep Busy property in sync with download state.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47069 Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
d636cc18ba
commit
d535df42f6
|
@ -136,7 +136,6 @@ static void notif_complete(DocHost *This, DISPID dispid)
|
||||||
TRACE("%d <<<\n", dispid);
|
TRACE("%d <<<\n", dispid);
|
||||||
|
|
||||||
SysFreeString(V_BSTR(&url));
|
SysFreeString(V_BSTR(&url));
|
||||||
This->busy = VARIANT_FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void object_available(DocHost *This)
|
static void object_available(DocHost *This)
|
||||||
|
@ -681,6 +680,8 @@ static HRESULT WINAPI ClOleCommandTarget_Exec(IOleCommandTarget *iface,
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
|
return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
|
||||||
case OLECMDID_SETDOWNLOADSTATE:
|
case OLECMDID_SETDOWNLOADSTATE:
|
||||||
|
if(pvaIn && V_VT(pvaIn) == VT_I4)
|
||||||
|
This->busy = V_I4(pvaIn) ? VARIANT_TRUE : VARIANT_FALSE;
|
||||||
if(This->olecmd)
|
if(This->olecmd)
|
||||||
return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
|
return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
|
||||||
|
|
||||||
|
|
|
@ -150,6 +150,7 @@ void notify_download_state(DocHost *dochost, BOOL is_downloading)
|
||||||
{
|
{
|
||||||
DISPPARAMS dwl_dp = {NULL};
|
DISPPARAMS dwl_dp = {NULL};
|
||||||
TRACE("(%x)\n", is_downloading);
|
TRACE("(%x)\n", is_downloading);
|
||||||
|
dochost->busy = is_downloading ? VARIANT_TRUE : VARIANT_FALSE;
|
||||||
call_sink(dochost->cps.wbe2, is_downloading ? DISPID_DOWNLOADBEGIN : DISPID_DOWNLOADCOMPLETE, &dwl_dp);
|
call_sink(dochost->cps.wbe2, is_downloading ? DISPID_DOWNLOADBEGIN : DISPID_DOWNLOADCOMPLETE, &dwl_dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -583,8 +584,6 @@ static void on_before_navigate2(DocHost *This, LPCWSTR url, SAFEARRAY *post_data
|
||||||
dispparams.rgdispidNamedArgs = NULL;
|
dispparams.rgdispidNamedArgs = NULL;
|
||||||
dispparams.rgvarg = params;
|
dispparams.rgvarg = params;
|
||||||
|
|
||||||
This->busy = VARIANT_TRUE;
|
|
||||||
|
|
||||||
V_VT(params) = VT_BOOL|VT_BYREF;
|
V_VT(params) = VT_BOOL|VT_BYREF;
|
||||||
V_BOOLREF(params) = cancel;
|
V_BOOLREF(params) = cancel;
|
||||||
|
|
||||||
|
@ -888,6 +887,8 @@ static HRESULT navigate_bsc(DocHost *This, BindStatusCallback *bsc, IMoniker *mo
|
||||||
}
|
}
|
||||||
|
|
||||||
notify_download_state(This, TRUE);
|
notify_download_state(This, TRUE);
|
||||||
|
This->busy = VARIANT_FALSE;
|
||||||
|
|
||||||
on_commandstate_change(This, CSC_NAVIGATEBACK, FALSE);
|
on_commandstate_change(This, CSC_NAVIGATEBACK, FALSE);
|
||||||
on_commandstate_change(This, CSC_NAVIGATEFORWARD, FALSE);
|
on_commandstate_change(This, CSC_NAVIGATEFORWARD, FALSE);
|
||||||
|
|
||||||
|
|
|
@ -786,7 +786,6 @@ static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
|
||||||
|
|
||||||
SysFreeString(url);
|
SysFreeString(url);
|
||||||
|
|
||||||
This->doc_host->busy = VARIANT_FALSE;
|
|
||||||
IShellBrowser_Release(&This->IShellBrowser_iface);
|
IShellBrowser_Release(&This->IShellBrowser_iface);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -850,8 +849,6 @@ static HRESULT WINAPI DocObjectService_FireDocumentComplete(
|
||||||
TRACE("<<<\n");
|
TRACE("<<<\n");
|
||||||
|
|
||||||
SysFreeString(url);
|
SysFreeString(url);
|
||||||
if(This->doc_host)
|
|
||||||
This->doc_host->busy = VARIANT_FALSE;
|
|
||||||
|
|
||||||
IShellBrowser_Release(&This->IShellBrowser_iface);
|
IShellBrowser_Release(&This->IShellBrowser_iface);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
@ -170,6 +170,8 @@ static const char *current_url;
|
||||||
static int wb_version, expect_update_commands_enable, set_update_commands_enable;
|
static int wb_version, expect_update_commands_enable, set_update_commands_enable;
|
||||||
static BOOL nav_back_todo, nav_forward_todo; /* FIXME */
|
static BOOL nav_back_todo, nav_forward_todo; /* FIXME */
|
||||||
|
|
||||||
|
#define BUSY_FAIL 2
|
||||||
|
|
||||||
#define DWL_EXPECT_BEFORE_NAVIGATE 0x01
|
#define DWL_EXPECT_BEFORE_NAVIGATE 0x01
|
||||||
#define DWL_FROM_PUT_HREF 0x02
|
#define DWL_FROM_PUT_HREF 0x02
|
||||||
#define DWL_FROM_GOBACK 0x04
|
#define DWL_FROM_GOBACK 0x04
|
||||||
|
@ -267,15 +269,26 @@ static void _test_LocationURL(unsigned line, IWebBrowser2 *wb, const char *exurl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define test_ready_state(ex) _test_ready_state(__LINE__,ex)
|
#define test_ready_state(a,b) _test_ready_state(__LINE__,a,b)
|
||||||
static void _test_ready_state(unsigned line, READYSTATE exstate)
|
static void _test_ready_state(unsigned line, READYSTATE exstate, VARIANT_BOOL expect_busy)
|
||||||
{
|
{
|
||||||
READYSTATE state;
|
READYSTATE state;
|
||||||
|
VARIANT_BOOL busy;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
hres = IWebBrowser2_get_ReadyState(wb, &state);
|
hres = IWebBrowser2_get_ReadyState(wb, &state);
|
||||||
ok_(__FILE__,line)(hres == S_OK, "get_ReadyState failed: %08x\n", hres);
|
ok_(__FILE__,line)(hres == S_OK, "get_ReadyState failed: %08x\n", hres);
|
||||||
ok_(__FILE__,line)(state == exstate, "ReadyState = %d, expected %d\n", state, exstate);
|
ok_(__FILE__,line)(state == exstate, "ReadyState = %d, expected %d\n", state, exstate);
|
||||||
|
|
||||||
|
hres = IWebBrowser2_get_Busy(wb, &busy);
|
||||||
|
if(expect_busy != BUSY_FAIL) {
|
||||||
|
ok_(__FILE__,line)(hres == S_OK, "get_ReadyState failed: %08x\n", hres);
|
||||||
|
ok_(__FILE__,line)(busy == expect_busy, "Busy = %x, exoected %x for ready state %d\n",
|
||||||
|
busy, expect_busy, state);
|
||||||
|
}else {
|
||||||
|
todo_wine
|
||||||
|
ok_(__FILE__,line)(hres == E_FAIL, "get_ReadyState returned: %08x\n", hres);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define get_document(u) _get_document(__LINE__,u)
|
#define get_document(u) _get_document(__LINE__,u)
|
||||||
|
@ -806,8 +819,10 @@ static void test_navigatecomplete2(DISPPARAMS *dp)
|
||||||
ok(V_VT(dp->rgvarg+1) == VT_DISPATCH, "V_VT(dp->rgvarg+1) = %d\n", V_VT(dp->rgvarg+1));
|
ok(V_VT(dp->rgvarg+1) == VT_DISPATCH, "V_VT(dp->rgvarg+1) = %d\n", V_VT(dp->rgvarg+1));
|
||||||
ok(V_DISPATCH(dp->rgvarg+1) == (IDispatch*)wb, "V_DISPATCH=%p, wb=%p\n", V_DISPATCH(dp->rgvarg+1), wb);
|
ok(V_DISPATCH(dp->rgvarg+1) == (IDispatch*)wb, "V_DISPATCH=%p, wb=%p\n", V_DISPATCH(dp->rgvarg+1), wb);
|
||||||
|
|
||||||
test_ready_state((dwl_flags & (DWL_FROM_PUT_HREF|DWL_FROM_GOBACK|DWL_FROM_GOFORWARD))
|
if(dwl_flags & (DWL_FROM_PUT_HREF|DWL_FROM_GOBACK|DWL_FROM_GOFORWARD))
|
||||||
? READYSTATE_COMPLETE : READYSTATE_LOADING);
|
test_ready_state(READYSTATE_COMPLETE, VARIANT_TRUE);
|
||||||
|
else
|
||||||
|
test_ready_state(READYSTATE_LOADING, VARIANT_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_documentcomplete(DISPPARAMS *dp)
|
static void test_documentcomplete(DISPPARAMS *dp)
|
||||||
|
@ -827,7 +842,7 @@ static void test_documentcomplete(DISPPARAMS *dp)
|
||||||
ok(V_VT(dp->rgvarg+1) == VT_DISPATCH, "V_VT(dp->rgvarg+1) = %d\n", V_VT(dp->rgvarg+1));
|
ok(V_VT(dp->rgvarg+1) == VT_DISPATCH, "V_VT(dp->rgvarg+1) = %d\n", V_VT(dp->rgvarg+1));
|
||||||
ok(V_DISPATCH(dp->rgvarg+1) == (IDispatch*)wb, "V_DISPATCH=%p, wb=%p\n", V_DISPATCH(dp->rgvarg+1), wb);
|
ok(V_DISPATCH(dp->rgvarg+1) == (IDispatch*)wb, "V_DISPATCH=%p, wb=%p\n", V_DISPATCH(dp->rgvarg+1), wb);
|
||||||
|
|
||||||
test_ready_state(READYSTATE_COMPLETE);
|
test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
|
static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid,
|
||||||
|
@ -869,9 +884,9 @@ static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMe
|
||||||
ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
|
ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
|
||||||
ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
|
ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
|
||||||
if(dwl_flags & (DWL_FROM_PUT_HREF|DWL_FROM_GOFORWARD|DWL_FROM_GOBACK))
|
if(dwl_flags & (DWL_FROM_PUT_HREF|DWL_FROM_GOFORWARD|DWL_FROM_GOBACK))
|
||||||
test_ready_state(READYSTATE_COMPLETE);
|
test_ready_state(READYSTATE_COMPLETE, VARIANT_TRUE);
|
||||||
else if(!(dwl_flags & DWL_REFRESH)) /* todo_wine */
|
else if(!(dwl_flags & DWL_REFRESH)) /* todo_wine */
|
||||||
test_ready_state(READYSTATE_LOADING);
|
test_ready_state(READYSTATE_LOADING, VARIANT_TRUE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DISPID_BEFORENAVIGATE2:
|
case DISPID_BEFORENAVIGATE2:
|
||||||
|
@ -882,7 +897,10 @@ static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMe
|
||||||
test_OnBeforeNavigate(pDispParams->rgvarg+6, pDispParams->rgvarg+5, pDispParams->rgvarg+4,
|
test_OnBeforeNavigate(pDispParams->rgvarg+6, pDispParams->rgvarg+5, pDispParams->rgvarg+4,
|
||||||
pDispParams->rgvarg+3, pDispParams->rgvarg+2, pDispParams->rgvarg+1,
|
pDispParams->rgvarg+3, pDispParams->rgvarg+2, pDispParams->rgvarg+1,
|
||||||
pDispParams->rgvarg);
|
pDispParams->rgvarg);
|
||||||
test_ready_state((dwl_flags & (DWL_FROM_PUT_HREF|DWL_FROM_GOFORWARD)) ? READYSTATE_COMPLETE : READYSTATE_LOADING);
|
if(dwl_flags & (DWL_FROM_PUT_HREF|DWL_FROM_GOFORWARD))
|
||||||
|
test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
|
||||||
|
else
|
||||||
|
test_ready_state(READYSTATE_LOADING, VARIANT_FALSE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DISPID_SETSECURELOCKICON:
|
case DISPID_SETSECURELOCKICON:
|
||||||
|
@ -943,7 +961,7 @@ static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMe
|
||||||
ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
|
ok(pDispParams->rgvarg == NULL, "rgvarg=%p, expected NULL\n", pDispParams->rgvarg);
|
||||||
ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
|
ok(pDispParams->cArgs == 0, "cArgs=%d, expected 0\n", pDispParams->cArgs);
|
||||||
if(use_container_olecmd)
|
if(use_container_olecmd)
|
||||||
test_ready_state(READYSTATE_LOADING);
|
test_ready_state(READYSTATE_LOADING, VARIANT_FALSE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DISPID_ONMENUBAR:
|
case DISPID_ONMENUBAR:
|
||||||
|
@ -2744,7 +2762,7 @@ static void test_Navigate2(IWebBrowser2 *webbrowser, const char *nav_url)
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
test_LocationURL(webbrowser, is_first_load ? "" : current_url);
|
test_LocationURL(webbrowser, is_first_load ? "" : current_url);
|
||||||
test_ready_state(is_first_load ? READYSTATE_UNINITIALIZED : READYSTATE_COMPLETE);
|
test_ready_state(is_first_load ? READYSTATE_UNINITIALIZED : READYSTATE_COMPLETE, VARIANT_FALSE);
|
||||||
|
|
||||||
is_http = !memcmp(nav_url, "http:", 5);
|
is_http = !memcmp(nav_url, "http:", 5);
|
||||||
V_VT(&url) = VT_BSTR;
|
V_VT(&url) = VT_BSTR;
|
||||||
|
@ -2824,7 +2842,7 @@ static void test_Navigate2(IWebBrowser2 *webbrowser, const char *nav_url)
|
||||||
|
|
||||||
VariantClear(&url);
|
VariantClear(&url);
|
||||||
|
|
||||||
test_ready_state(READYSTATE_LOADING);
|
test_ready_state(READYSTATE_LOADING, VARIANT_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_QueryStatusWB(IWebBrowser2 *webbrowser, BOOL has_document)
|
static void test_QueryStatusWB(IWebBrowser2 *webbrowser, BOOL has_document)
|
||||||
|
@ -2922,8 +2940,10 @@ static void test_download(DWORD flags)
|
||||||
is_downloading = TRUE;
|
is_downloading = TRUE;
|
||||||
dwl_flags = flags;
|
dwl_flags = flags;
|
||||||
|
|
||||||
test_ready_state((flags & (DWL_FROM_PUT_HREF|DWL_FROM_GOBACK|DWL_FROM_GOFORWARD|DWL_REFRESH))
|
if(flags & (DWL_FROM_PUT_HREF|DWL_FROM_GOBACK|DWL_FROM_GOFORWARD|DWL_REFRESH))
|
||||||
? READYSTATE_COMPLETE : READYSTATE_LOADING);
|
test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
|
||||||
|
else
|
||||||
|
test_ready_state(READYSTATE_LOADING, VARIANT_FALSE);
|
||||||
|
|
||||||
if(flags & (DWL_EXPECT_BEFORE_NAVIGATE|(is_http ? DWL_FROM_PUT_HREF : 0)|DWL_FROM_GOFORWARD|DWL_REFRESH))
|
if(flags & (DWL_EXPECT_BEFORE_NAVIGATE|(is_http ? DWL_FROM_PUT_HREF : 0)|DWL_FROM_GOFORWARD|DWL_REFRESH))
|
||||||
SET_EXPECT(Invoke_PROPERTYCHANGE);
|
SET_EXPECT(Invoke_PROPERTYCHANGE);
|
||||||
|
@ -3052,7 +3072,7 @@ static void test_download(DWORD flags)
|
||||||
|
|
||||||
is_downloading = FALSE;
|
is_downloading = FALSE;
|
||||||
|
|
||||||
test_ready_state(READYSTATE_COMPLETE);
|
test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
|
||||||
|
|
||||||
while(use_container_olecmd && !called_Exec_UPDATECOMMANDS && GetMessageA(&msg, NULL, 0, 0)) {
|
while(use_container_olecmd && !called_Exec_UPDATECOMMANDS && GetMessageA(&msg, NULL, 0, 0)) {
|
||||||
TranslateMessage(&msg);
|
TranslateMessage(&msg);
|
||||||
|
@ -3195,7 +3215,7 @@ static void test_put_href(IWebBrowser2 *unk, const char *url)
|
||||||
SysFreeString(str);
|
SysFreeString(str);
|
||||||
ok(hres == S_OK, "put_href failed: %08x\n", hres);
|
ok(hres == S_OK, "put_href failed: %08x\n", hres);
|
||||||
|
|
||||||
test_ready_state(READYSTATE_COMPLETE);
|
test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_go_back(IWebBrowser2 *wb, const char *back_url, int back_enable, int forward_enable, int forward_todo)
|
static void test_go_back(IWebBrowser2 *wb, const char *back_url, int back_enable, int forward_enable, int forward_todo)
|
||||||
|
@ -3724,7 +3744,7 @@ static void test_WebBrowser(DWORD flags, BOOL do_close)
|
||||||
test_QueryStatusWB(webbrowser, FALSE);
|
test_QueryStatusWB(webbrowser, FALSE);
|
||||||
test_ExecWB(webbrowser, FALSE);
|
test_ExecWB(webbrowser, FALSE);
|
||||||
test_QueryInterface(webbrowser);
|
test_QueryInterface(webbrowser);
|
||||||
test_ready_state(READYSTATE_UNINITIALIZED);
|
test_ready_state(READYSTATE_UNINITIALIZED, BUSY_FAIL);
|
||||||
test_ClassInfo(webbrowser);
|
test_ClassInfo(webbrowser);
|
||||||
test_EnumVerbs(webbrowser);
|
test_EnumVerbs(webbrowser);
|
||||||
test_LocationURL(webbrowser, "");
|
test_LocationURL(webbrowser, "");
|
||||||
|
@ -3760,7 +3780,7 @@ static void test_WebBrowser(DWORD flags, BOOL do_close)
|
||||||
|
|
||||||
if(!do_close) {
|
if(!do_close) {
|
||||||
trace("Navigate2 http URL...\n");
|
trace("Navigate2 http URL...\n");
|
||||||
test_ready_state(READYSTATE_COMPLETE);
|
test_ready_state(READYSTATE_COMPLETE, VARIANT_FALSE);
|
||||||
test_Navigate2(webbrowser, "http://test.winehq.org/tests/hello.html");
|
test_Navigate2(webbrowser, "http://test.winehq.org/tests/hello.html");
|
||||||
nav_back_todo = TRUE;
|
nav_back_todo = TRUE;
|
||||||
test_download(DWL_EXPECT_BEFORE_NAVIGATE|DWL_HTTP);
|
test_download(DWL_EXPECT_BEFORE_NAVIGATE|DWL_HTTP);
|
||||||
|
@ -3841,7 +3861,7 @@ static void test_WebBrowserV1(void)
|
||||||
test_QueryStatusWB(wb, FALSE);
|
test_QueryStatusWB(wb, FALSE);
|
||||||
test_ExecWB(wb, FALSE);
|
test_ExecWB(wb, FALSE);
|
||||||
test_QueryInterface(wb);
|
test_QueryInterface(wb);
|
||||||
test_ready_state(READYSTATE_UNINITIALIZED);
|
test_ready_state(READYSTATE_UNINITIALIZED, BUSY_FAIL);
|
||||||
test_ClassInfo(wb);
|
test_ClassInfo(wb);
|
||||||
test_EnumVerbs(wb);
|
test_EnumVerbs(wb);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue