diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index d26250e..66bb11d 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -434,6 +434,8 @@ HRESULT load_stream(BSCallback*,IStream*);
void set_document_bscallback(HTMLDocument*,BSCallback*);
void set_current_mon(HTMLDocument*,IMoniker*);
+void channelbsc_set_channel(BSCallback*,nsChannel*,nsIStreamListener*,nsISupports*);
+
IHTMLSelectionObject *HTMLSelectionObject_Create(HTMLDocument*,nsISelection*);
IHTMLTxtRange *HTMLTxtRange_Create(HTMLDocument*,nsIDOMRange*);
IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration*);
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index cc48b93..66cea25 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -908,3 +908,17 @@ HRESULT load_stream(BSCallback *bscallback, IStream *stream)
return hres;
}
+
+void channelbsc_set_channel(BSCallback *This, nsChannel *channel, nsIStreamListener *listener, nsISupports *context)
+{
+ nsIChannel_AddRef(NSCHANNEL(channel));
+ This->nschannel = channel;
+
+ nsIStreamListener_AddRef(listener);
+ This->nslistener = listener;
+
+ if(context) {
+ nsISupports_AddRef(context);
+ This->nscontext = context;
+ }
+}
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index d55546d..8c996b8 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -685,16 +685,7 @@ static nsresult async_open_doc_uri(nsChannel *This, NSContainer *container,
*open = FALSE;
if(container->bscallback) {
- nsIChannel_AddRef(NSCHANNEL(This));
- container->bscallback->nschannel = This;
-
- nsIStreamListener_AddRef(listener);
- container->bscallback->nslistener = listener;
-
- if(context) {
- nsISupports_AddRef(context);
- container->bscallback->nscontext = context;
- }
+ channelbsc_set_channel(container->bscallback, This, listener, context);
if(container->doc && container->doc->mime) {
DWORD len;
@@ -781,16 +772,7 @@ static nsresult async_open(nsChannel *This, NSContainer *container, nsIStreamLis
bscallback = create_bscallback(mon);
IMoniker_Release(mon);
- nsIChannel_AddRef(NSCHANNEL(This));
- bscallback->nschannel = This;
-
- nsIStreamListener_AddRef(listener);
- bscallback->nslistener = listener;
-
- if(context) {
- nsISupports_AddRef(context);
- bscallback->nscontext = context;
- }
+ channelbsc_set_channel(bscallback, This, listener, context);
task = heap_alloc(sizeof(task_t));