Module: wine Branch: master Commit: 86c097142bdc66bccab7dc5fd7b44a7bc86e43d0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=86c097142bdc66bccab7dc5fd7...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Dec 21 14:31:29 2015 +0100
mshtml: Added nsIChannel::Cancel implementation.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/binding.h | 2 ++ dlls/mshtml/navigate.c | 21 +++++++++++++++------ dlls/mshtml/nsio.c | 8 ++++++-- 3 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/binding.h b/dlls/mshtml/binding.h index e173431..3a4e06b 100644 --- a/dlls/mshtml/binding.h +++ b/dlls/mshtml/binding.h @@ -55,6 +55,8 @@ typedef struct { REQUEST_METHOD request_method; struct list response_headers; struct list request_headers; + + nsChannelBSC *binding; } nsChannel;
typedef struct { diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index ed61ab0..1854a70 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -927,6 +927,8 @@ static HRESULT on_start_nsrequest(nsChannelBSC *This) { nsresult nsres;
+ This->nschannel->binding = This; + /* FIXME: it's needed for http connections from BindToObject. */ if(!This->nschannel->response_status) This->nschannel->response_status = 200; @@ -972,11 +974,15 @@ static void on_stop_nsrequest(nsChannelBSC *This, HRESULT result) WARN("OnStopRequest failed: %08x\n", nsres); }
- if(This->nschannel && This->nschannel->load_group) { - nsres = nsILoadGroup_RemoveRequest(This->nschannel->load_group, - (nsIRequest*)&This->nschannel->nsIHttpChannel_iface, NULL, request_result); - if(NS_FAILED(nsres)) - ERR("RemoveRequest failed: %08x\n", nsres); + if(This->nschannel) { + if(This->nschannel->load_group) { + nsres = nsILoadGroup_RemoveRequest(This->nschannel->load_group, + (nsIRequest*)&This->nschannel->nsIHttpChannel_iface, NULL, request_result); + if(NS_FAILED(nsres)) + ERR("RemoveRequest failed: %08x\n", nsres); + } + if(This->nschannel->binding == This) + This->nschannel->binding = NULL; } }
@@ -1217,8 +1223,11 @@ static void nsChannelBSC_destroy(BSCallback *bsc) { nsChannelBSC *This = nsChannelBSC_from_BSCallback(bsc);
- if(This->nschannel) + if(This->nschannel) { + if(This->nschannel->binding == This) + This->nschannel->binding = NULL; nsIHttpChannel_Release(&This->nschannel->nsIHttpChannel_iface); + } if(This->nslistener) nsIStreamListener_Release(This->nslistener); if(This->nscontext) diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index a2615c4..a5a1ffd 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -617,9 +617,13 @@ static nsresult NSAPI nsChannel_Cancel(nsIHttpChannel *iface, nsresult aStatus) { nsChannel *This = impl_from_nsIHttpChannel(iface);
- FIXME("(%p)->(%08x)\n", This, aStatus); + TRACE("(%p)->(%08x)\n", This, aStatus);
- return NS_ERROR_NOT_IMPLEMENTED; + if(This->binding && This->binding->bsc.binding) + IBinding_Abort(This->binding->bsc.binding); + else + WARN("No binding to cancel\n"); + return NS_OK; }
static nsresult NSAPI nsChannel_Suspend(nsIHttpChannel *iface)