mshtml: Set binding channel, listener and context in AsyncOpen.
This commit is contained in:
parent
e0157ba201
commit
f1d2e37655
|
@ -115,6 +115,22 @@ struct NSContainer {
|
||||||
BSCallback *bscallback; /* hack */
|
BSCallback *bscallback; /* hack */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const nsIHttpChannelVtbl *lpHttpChannelVtbl;
|
||||||
|
const nsIUploadChannelVtbl *lpUploadChannelVtbl;
|
||||||
|
|
||||||
|
LONG ref;
|
||||||
|
|
||||||
|
nsIChannel *channel;
|
||||||
|
nsIHttpChannel *http_channel;
|
||||||
|
nsIWineURI *uri;
|
||||||
|
nsIInputStream *post_data_stream;
|
||||||
|
nsILoadGroup *load_group;
|
||||||
|
nsIInterfaceRequestor *notif_callback;
|
||||||
|
nsLoadFlags load_flags;
|
||||||
|
nsIURI *original_uri;
|
||||||
|
} nsChannel;
|
||||||
|
|
||||||
struct BSCallback {
|
struct BSCallback {
|
||||||
const IBindStatusCallbackVtbl *lpBindStatusCallbackVtbl;
|
const IBindStatusCallbackVtbl *lpBindStatusCallbackVtbl;
|
||||||
const IServiceProviderVtbl *lpServiceProviderVtbl;
|
const IServiceProviderVtbl *lpServiceProviderVtbl;
|
||||||
|
@ -126,6 +142,10 @@ struct BSCallback {
|
||||||
LPWSTR headers;
|
LPWSTR headers;
|
||||||
HGLOBAL post_data;
|
HGLOBAL post_data;
|
||||||
ULONG post_data_len;
|
ULONG post_data_len;
|
||||||
|
|
||||||
|
nsChannel *nschannel;
|
||||||
|
nsIStreamListener *nslistener;
|
||||||
|
nsISupports *nscontext;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HTMLDOMNode {
|
struct HTMLDOMNode {
|
||||||
|
@ -185,7 +205,6 @@ typedef struct {
|
||||||
#define SERVPROV(x) ((IServiceProvider*) &(x)->lpServiceProviderVtbl)
|
#define SERVPROV(x) ((IServiceProvider*) &(x)->lpServiceProviderVtbl)
|
||||||
#define CMDTARGET(x) ((IOleCommandTarget*) &(x)->lpOleCommandTargetVtbl)
|
#define CMDTARGET(x) ((IOleCommandTarget*) &(x)->lpOleCommandTargetVtbl)
|
||||||
#define CONTROL(x) ((IOleControl*) &(x)->lpOleControlVtbl)
|
#define CONTROL(x) ((IOleControl*) &(x)->lpOleControlVtbl)
|
||||||
#define STATUSCLB(x) ((IBindStatusCallback*) &(x)->lpBindStatusCallbackVtbl)
|
|
||||||
#define HLNKTARGET(x) ((IHlinkTarget*) &(x)->lpHlinkTargetVtbl)
|
#define HLNKTARGET(x) ((IHlinkTarget*) &(x)->lpHlinkTargetVtbl)
|
||||||
#define CONPTCONT(x) ((IConnectionPointContainer*) &(x)->lpConnectionPointContainerVtbl)
|
#define CONPTCONT(x) ((IConnectionPointContainer*) &(x)->lpConnectionPointContainerVtbl)
|
||||||
#define PERSTRINIT(x) ((IPersistStreamInit*) &(x)->lpPersistStreamInitVtbl)
|
#define PERSTRINIT(x) ((IPersistStreamInit*) &(x)->lpPersistStreamInitVtbl)
|
||||||
|
@ -199,9 +218,13 @@ typedef struct {
|
||||||
#define NSWEAKREF(x) ((nsIWeakReference*) &(x)->lpWeakReferenceVtbl)
|
#define NSWEAKREF(x) ((nsIWeakReference*) &(x)->lpWeakReferenceVtbl)
|
||||||
#define NSSUPWEAKREF(x) ((nsISupportsWeakReference*) &(x)->lpSupportsWeakReferenceVtbl)
|
#define NSSUPWEAKREF(x) ((nsISupportsWeakReference*) &(x)->lpSupportsWeakReferenceVtbl)
|
||||||
|
|
||||||
#define HTTPNEG(x) ((IHttpNegotiate2*) &(x)->lpHttpNegotiate2Vtbl)
|
#define NSCHANNEL(x) ((nsIChannel*) &(x)->lpHttpChannelVtbl)
|
||||||
#define BINDINFO(x) ((IInternetBindInfo*) &(x)->lpInternetBindInfoVtbl);
|
#define NSHTTPCHANNEL(x) ((nsIHttpChannel*) &(x)->lpHttpChannelVtbl)
|
||||||
|
#define NSUPCHANNEL(x) ((nsIUploadChannel*) &(x)->lpUploadChannelVtbl)
|
||||||
|
|
||||||
|
#define HTTPNEG(x) ((IHttpNegotiate2*) &(x)->lpHttpNegotiate2Vtbl)
|
||||||
|
#define STATUSCLB(x) ((IBindStatusCallback*) &(x)->lpBindStatusCallbackVtbl)
|
||||||
|
#define BINDINFO(x) ((IInternetBindInfo*) &(x)->lpInternetBindInfoVtbl);
|
||||||
|
|
||||||
#define HTMLELEM(x) ((IHTMLElement*) &(x)->lpHTMLElementVtbl)
|
#define HTMLELEM(x) ((IHTMLElement*) &(x)->lpHTMLElementVtbl)
|
||||||
#define HTMLELEM2(x) ((IHTMLElement2*) &(x)->lpHTMLElement2Vtbl)
|
#define HTMLELEM2(x) ((IHTMLElement2*) &(x)->lpHTMLElement2Vtbl)
|
||||||
|
@ -253,7 +276,9 @@ PRUint32 nsAString_GetData(const nsAString*,const PRUnichar**,PRBool*);
|
||||||
void nsAString_Finish(nsAString*);
|
void nsAString_Finish(nsAString*);
|
||||||
|
|
||||||
nsIInputStream *create_nsstream(const char*,PRInt32);
|
nsIInputStream *create_nsstream(const char*,PRInt32);
|
||||||
|
|
||||||
BSCallback *create_bscallback(HTMLDocument*,LPCOLESTR);
|
BSCallback *create_bscallback(HTMLDocument*,LPCOLESTR);
|
||||||
|
HRESULT start_binding(BSCallback*,IMoniker*);
|
||||||
|
|
||||||
IHlink *Hlink_Create(void);
|
IHlink *Hlink_Create(void);
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,12 @@ static ULONG WINAPI BindStatusCallback_Release(IBindStatusCallback *iface)
|
||||||
if(!ref) {
|
if(!ref) {
|
||||||
if(This->post_data)
|
if(This->post_data)
|
||||||
GlobalFree(This->post_data);
|
GlobalFree(This->post_data);
|
||||||
|
if(This->nschannel)
|
||||||
|
nsIChannel_Release(NSCHANNEL(This->nschannel));
|
||||||
|
if(This->nslistener)
|
||||||
|
nsIStreamListener_Release(This->nslistener);
|
||||||
|
if(This->nscontext)
|
||||||
|
nsISupports_Release(This->nscontext);
|
||||||
HeapFree(GetProcessHeap(), 0, This->headers);
|
HeapFree(GetProcessHeap(), 0, This->headers);
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
}
|
}
|
||||||
|
@ -371,6 +377,9 @@ BSCallback *create_bscallback(HTMLDocument *doc, LPCOLESTR url)
|
||||||
ret->post_data = NULL;
|
ret->post_data = NULL;
|
||||||
ret->headers = NULL;
|
ret->headers = NULL;
|
||||||
ret->post_data_len = 0;
|
ret->post_data_len = 0;
|
||||||
|
ret->nschannel = NULL;
|
||||||
|
ret->nslistener = NULL;
|
||||||
|
ret->nscontext = NULL;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,9 +87,7 @@ typedef nsISupports nsIWidget;
|
||||||
typedef nsISupports nsIProtocolHandler;
|
typedef nsISupports nsIProtocolHandler;
|
||||||
typedef nsISupports nsIDOMEventTarget;
|
typedef nsISupports nsIDOMEventTarget;
|
||||||
typedef nsISupports nsIDOMAbstractView;
|
typedef nsISupports nsIDOMAbstractView;
|
||||||
typedef nsISupports nsIStreamListener;
|
|
||||||
typedef nsISupports nsIHttpHeaderVisitor;
|
typedef nsISupports nsIHttpHeaderVisitor;
|
||||||
typedef nsISupports nsIRequestObserver;
|
|
||||||
typedef nsISupports nsIDOMBarProp;
|
typedef nsISupports nsIDOMBarProp;
|
||||||
typedef nsISupports nsIDOMWindowCollection;
|
typedef nsISupports nsIDOMWindowCollection;
|
||||||
typedef nsISupports nsISelection;
|
typedef nsISupports nsISelection;
|
||||||
|
@ -273,6 +271,26 @@ interface nsIRequest : nsISupports
|
||||||
nsresult SetLoadFlags(nsLoadFlags aLoadFlags);
|
nsresult SetLoadFlags(nsLoadFlags aLoadFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
uuid(fd91e2e0-1481-11d3-9333-00104ba0fd40)
|
||||||
|
]
|
||||||
|
interface nsIRequestObserver : nsISupports
|
||||||
|
{
|
||||||
|
nsresult OnStartRequest(nsIRequest *aRequest, nsISupports *aContext);
|
||||||
|
nsresult OnStopRequest(nsIRequest *aRequest, nsISupports *aContext, nsresult aStatusCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
object,
|
||||||
|
uuid(1a637020-1482-11d3-9333-00104ba0fd40)
|
||||||
|
]
|
||||||
|
interface nsIStreamListener : nsIRequestObserver
|
||||||
|
{
|
||||||
|
nsresult OnDataAvailable(nsIRequest *aRequest, nsISupports *aContext,
|
||||||
|
nsIInputStream *aInputStream, PRUint32 aOffset, PRUint32 aCount);
|
||||||
|
}
|
||||||
|
|
||||||
[
|
[
|
||||||
object,
|
object,
|
||||||
uuid(3de0a31c-feaf-400f-9f1e-4ef71f8b20cc)
|
uuid(3de0a31c-feaf-400f-9f1e-4ef71f8b20cc)
|
||||||
|
|
|
@ -45,22 +45,6 @@ static const IID NS_IOSERVICE_CID =
|
||||||
|
|
||||||
static nsIIOService *nsio = NULL;
|
static nsIIOService *nsio = NULL;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const nsIHttpChannelVtbl *lpHttpChannelVtbl;
|
|
||||||
const nsIUploadChannelVtbl *lpUploadChannelVtbl;
|
|
||||||
|
|
||||||
LONG ref;
|
|
||||||
|
|
||||||
nsIChannel *channel;
|
|
||||||
nsIHttpChannel *http_channel;
|
|
||||||
nsIWineURI *uri;
|
|
||||||
nsIInputStream *post_data_stream;
|
|
||||||
nsILoadGroup *load_group;
|
|
||||||
nsIInterfaceRequestor *notif_callback;
|
|
||||||
nsLoadFlags load_flags;
|
|
||||||
nsIURI *original_uri;
|
|
||||||
} nsChannel;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const nsIWineURIVtbl *lpWineURIVtbl;
|
const nsIWineURIVtbl *lpWineURIVtbl;
|
||||||
|
|
||||||
|
@ -70,9 +54,6 @@ typedef struct {
|
||||||
NSContainer *container;
|
NSContainer *container;
|
||||||
} nsURI;
|
} nsURI;
|
||||||
|
|
||||||
#define NSCHANNEL(x) ((nsIChannel*) &(x)->lpHttpChannelVtbl)
|
|
||||||
#define NSHTTPCHANNEL(x) ((nsIHttpChannel*) &(x)->lpHttpChannelVtbl)
|
|
||||||
#define NSUPCHANNEL(x) ((nsIUploadChannel*) &(x)->lpUploadChannelVtbl)
|
|
||||||
#define NSURI(x) ((nsIURI*) &(x)->lpWineURIVtbl)
|
#define NSURI(x) ((nsIURI*) &(x)->lpWineURIVtbl)
|
||||||
|
|
||||||
static nsresult create_uri(nsIURI*,NSContainer*,nsIURI**);
|
static nsresult create_uri(nsIURI*,NSContainer*,nsIURI**);
|
||||||
|
@ -590,6 +571,17 @@ static nsresult NSAPI nsChannel_AsyncOpen(nsIHttpChannel *iface, nsIStreamListen
|
||||||
}
|
}
|
||||||
|
|
||||||
if(container->bscallback) {
|
if(container->bscallback) {
|
||||||
|
nsIChannel_AddRef(NSCHANNEL(This));
|
||||||
|
container->bscallback->nschannel = This;
|
||||||
|
|
||||||
|
nsIStreamListener_AddRef(aListener);
|
||||||
|
container->bscallback->nslistener = aListener;
|
||||||
|
|
||||||
|
if(aContext) {
|
||||||
|
nsISupports_AddRef(aContext);
|
||||||
|
container->bscallback->nscontext = aContext;
|
||||||
|
}
|
||||||
|
|
||||||
nsIWebBrowserChrome_Release(NSWBCHROME(container));
|
nsIWebBrowserChrome_Release(NSWBCHROME(container));
|
||||||
}else {
|
}else {
|
||||||
BOOL cont = before_async_open(This, container);
|
BOOL cont = before_async_open(This, container);
|
||||||
|
|
Loading…
Reference in New Issue