mshtml: Added IBindStatusCallback::OnResponse implementation.

oldstable
Jacek Caban 2009-08-11 19:15:07 +02:00 committed by Alexandre Julliard
parent 902829ea70
commit 3768ae7336
3 changed files with 31 additions and 3 deletions

View File

@ -377,6 +377,7 @@ typedef struct {
nsIURI *original_uri;
char *content_type;
char *charset;
PRUint32 response_status;
} nsChannel;
typedef struct {

View File

@ -58,6 +58,7 @@ typedef struct {
HRESULT (*stop_binding)(BSCallback*,HRESULT);
HRESULT (*read_data)(BSCallback*,IStream*);
HRESULT (*on_progress)(BSCallback*,ULONG,LPCWSTR);
HRESULT (*on_response)(BSCallback*,DWORD);
} BSCallbackVtbl;
struct BSCallback {
@ -473,9 +474,11 @@ static HRESULT WINAPI HttpNegotiate_OnResponse(IHttpNegotiate2 *iface, DWORD dwR
LPCWSTR szResponseHeaders, LPCWSTR szRequestHeaders, LPWSTR *pszAdditionalRequestHeaders)
{
BSCallback *This = HTTPNEG_THIS(iface);
FIXME("(%p)->(%d %s %s %p)\n", This, dwResponseCode, debugstr_w(szResponseHeaders),
TRACE("(%p)->(%d %s %s %p)\n", This, dwResponseCode, debugstr_w(szResponseHeaders),
debugstr_w(szRequestHeaders), pszAdditionalRequestHeaders);
return E_NOTIMPL;
return This->vtbl->on_response(This, dwResponseCode);
}
static HRESULT WINAPI HttpNegotiate_GetRootSecurityId(IHttpNegotiate2 *iface,
@ -798,6 +801,11 @@ static HRESULT BufferBSC_on_progress(BSCallback *bsc, ULONG status_code, LPCWSTR
return S_OK;
}
static HRESULT BufferBSC_on_response(BSCallback *bsc, DWORD response_code)
{
return S_OK;
}
#undef BUFFERBSC_THIS
static const BSCallbackVtbl BufferBSCVtbl = {
@ -806,6 +814,7 @@ static const BSCallbackVtbl BufferBSCVtbl = {
BufferBSC_stop_binding,
BufferBSC_read_data,
BufferBSC_on_progress,
BufferBSC_on_response
};
@ -887,6 +896,10 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
&& (BYTE)This->nsstream->buf[1] == 0xfe)
This->nschannel->charset = heap_strdupA(UTF16_STR);
/* FIXME: it's needed for http connections from BindToObject. */
if(!This->nschannel->response_status)
This->nschannel->response_status = 200;
nsres = nsIStreamListener_OnStartRequest(This->nslistener,
(nsIRequest*)NSCHANNEL(This->nschannel), This->nscontext);
if(NS_FAILED(nsres))
@ -1009,6 +1022,14 @@ static HRESULT nsChannelBSC_on_progress(BSCallback *bsc, ULONG status_code, LPCW
return S_OK;
}
static HRESULT nsChannelBSC_on_response(BSCallback *bsc, DWORD response_code)
{
nsChannelBSC *This = NSCHANNELBSC_THIS(bsc);
This->nschannel->response_status = response_code;
return S_OK;
}
#undef NSCHANNELBSC_THIS
static const BSCallbackVtbl nsChannelBSCVtbl = {
@ -1017,6 +1038,7 @@ static const BSCallbackVtbl nsChannelBSCVtbl = {
nsChannelBSC_stop_binding,
nsChannelBSC_read_data,
nsChannelBSC_on_progress,
nsChannelBSC_on_response
};
nsChannelBSC *create_channelbsc(IMoniker *mon)

View File

@ -980,10 +980,15 @@ static nsresult NSAPI nsChannel_GetResponseStatus(nsIHttpChannel *iface, PRUint3
TRACE("(%p)->(%p)\n", This, aResponseStatus);
if(This->response_status) {
*aResponseStatus = This->response_status;
return NS_OK;
}
if(This->http_channel)
return nsIHttpChannel_GetResponseStatus(This->http_channel, aResponseStatus);
return NS_ERROR_NOT_IMPLEMENTED;
return NS_ERROR_UNEXPECTED;
}
static nsresult NSAPI nsChannel_GetResponseStatusText(nsIHttpChannel *iface,