From 1243dc9fe42ab01aacc992c9739008fbf0a7021a Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 18 Nov 2011 12:21:47 +0100 Subject: [PATCH] mshtml: Implement nsIStandardURL interface in nsWineURI object. --- dlls/mshtml/nsiface.idl | 21 ++++++++++++++++ dlls/mshtml/nsio.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl index 5a1970d021c..7849ee5a64a 100644 --- a/dlls/mshtml/nsiface.idl +++ b/dlls/mshtml/nsiface.idl @@ -369,6 +369,27 @@ interface nsIURL : nsIURI [ object, + uuid(321578d0-03c1-4d95-8821-021ac612d18d), + local +] +interface nsIMutable : nsISupports +{ + nsresult GetMutable(PRBool *aMutable); + nsresult SetMutable(PRBool aMutable); +} + +[ + object, + uuid(babd6cca-ebe7-4329-967c-d6b9e33caa81), + local +] +interface nsIStandardURL : nsIMutable +{ + nsresult Init(PRUint32 aUrlType, PRInt32 aDefaultPort, const nsACString *aSpec, const char *aOriginCharset, nsIURI *aBaseURI); +} + +[ + object, uuid(ef6bfbd2-fd46-48d8-96b7-9f8f0fd387fe), local ] diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index b1497dc20d3..59f9c2fb937 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -54,6 +54,7 @@ static const char *request_method_strings[] = {"GET", "PUT", "POST"}; struct nsWineURI { nsIURL nsIURL_iface; + nsIStandardURL nsIStandardURL_iface; LONG ref; @@ -348,6 +349,7 @@ static nsresult get_channel_http_header(struct list *headers, const nsACString * if(!data) return NS_ERROR_UNEXPECTED; + TRACE("%s -> %s\n", debugstr_a(header_namea), debugstr_a(data)); nsACString_SetData(_retval, data); heap_free(data); return NS_OK; @@ -1708,6 +1710,12 @@ static nsresult NSAPI nsURI_QueryInterface(nsIURL *iface, nsIIDRef riid, void ** }else if(IsEqualGUID(&IID_nsIURL, riid)) { TRACE("(%p)->(IID_nsIURL %p)\n", This, result); *result = &This->nsIURL_iface; + }else if(IsEqualGUID(&IID_nsIMutable, riid)) { + TRACE("(%p)->(IID_nsIMutable %p)\n", This, result); + *result = &This->nsIStandardURL_iface; + }else if(IsEqualGUID(&IID_nsIStandardURL, riid)) { + TRACE("(%p)->(IID_nsIStandardURL %p)\n", This, result); + *result = &This->nsIStandardURL_iface; }else if(IsEqualGUID(&IID_nsWineURI, riid)) { TRACE("(%p)->(IID_nsWineURI %p)\n", This, result); *result = This; @@ -2719,11 +2727,70 @@ static const nsIURLVtbl nsURLVtbl = { nsURL_GetRelativeSpec }; +static inline nsWineURI *impl_from_nsIStandardURL(nsIStandardURL *iface) +{ + return CONTAINING_RECORD(iface, nsWineURI, nsIStandardURL_iface); +} + +static nsresult NSAPI nsStandardURL_QueryInterface(nsIStandardURL *iface, nsIIDRef riid, + void **result) +{ + nsWineURI *This = impl_from_nsIStandardURL(iface); + return nsIURL_QueryInterface(&This->nsIURL_iface, riid, result); +} + +static nsrefcnt NSAPI nsStandardURL_AddRef(nsIStandardURL *iface) +{ + nsWineURI *This = impl_from_nsIStandardURL(iface); + return nsIURL_AddRef(&This->nsIURL_iface); +} + +static nsrefcnt NSAPI nsStandardURL_Release(nsIStandardURL *iface) +{ + nsWineURI *This = impl_from_nsIStandardURL(iface); + return nsIURL_Release(&This->nsIURL_iface); +} + +static nsresult NSAPI nsStandardURL_GetMutable(nsIStandardURL *iface, PRBool *aMutable) +{ + nsWineURI *This = impl_from_nsIStandardURL(iface); + + TRACE("(%p)->(%p)\n", This, aMutable); + + *aMutable = TRUE; + return NS_OK; +} + +static nsresult NSAPI nsStandardURL_SetMutable(nsIStandardURL *iface, PRBool aMutable) +{ + nsWineURI *This = impl_from_nsIStandardURL(iface); + FIXME("(%p)->(%x)\n", This, aMutable); + return NS_ERROR_NOT_IMPLEMENTED; +} + +static nsresult NSAPI nsStandardURL_Init(nsIStandardURL *iface, PRUint32 aUrlType, PRInt32 aDefaultPort, + const nsACString *aSpec, const char *aOriginCharset, nsIURI *aBaseURI) +{ + nsWineURI *This = impl_from_nsIStandardURL(iface); + FIXME("(%p)->(%d %d %s %s %p)\n", This, aUrlType, aDefaultPort, debugstr_nsacstr(aSpec), debugstr_a(aOriginCharset), aBaseURI); + return NS_ERROR_NOT_IMPLEMENTED; +} + +static const nsIStandardURLVtbl nsStandardURLVtbl = { + nsStandardURL_QueryInterface, + nsStandardURL_AddRef, + nsStandardURL_Release, + nsStandardURL_GetMutable, + nsStandardURL_SetMutable, + nsStandardURL_Init +}; + static nsresult create_nsuri(IUri *iuri, nsIURI *nsuri, HTMLWindow *window, NSContainer *container, nsWineURI **_retval) { nsWineURI *ret = heap_alloc_zero(sizeof(nsWineURI)); ret->nsIURL_iface.lpVtbl = &nsURLVtbl; + ret->nsIStandardURL_iface.lpVtbl = &nsStandardURLVtbl; ret->ref = 1; ret->nsuri = nsuri; -- 2.11.4.GIT