urlmon: Implemented functionality for retrieving the RAW_URI property of a IUri.

This commit is contained in:
Thomas Mullaly 2010-07-06 16:19:58 -04:00 committed by Alexandre Julliard
parent 15f36468de
commit fe41d09d75
2 changed files with 69 additions and 22 deletions

View file

@ -104,7 +104,7 @@ static const uri_properties uri_tests[] = {
{"/",S_OK,TRUE}, /* PATH */
{"/",S_OK,TRUE}, /* PATH_AND_QUERY */
{"",S_FALSE,TRUE}, /* QUERY */
{"http://www.winehq.org/tests/../tests/../..",S_OK,TRUE}, /* RAW_URI */
{"http://www.winehq.org/tests/../tests/../..",S_OK,FALSE}, /* RAW_URI */
{"http",S_OK,TRUE}, /* SCHEME_NAME */
{"",S_FALSE,TRUE}, /* USER_INFO */
{"",S_FALSE,TRUE} /* USER_NAME */
@ -133,7 +133,7 @@ static const uri_properties uri_tests[] = {
{"/tests",S_OK,TRUE},
{"/tests",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"http://winehq.org/tests/.././tests",S_OK,TRUE},
{"http://winehq.org/tests/.././tests",S_OK,FALSE},
{"http",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE}
@ -162,7 +162,7 @@ static const uri_properties uri_tests[] = {
{"/",S_OK,TRUE},
{"/?query=x&return=y",S_OK,TRUE},
{"?query=x&return=y",S_OK,TRUE},
{"HtTp://www.winehq.org/tests/..?query=x&return=y",S_OK,TRUE},
{"HtTp://www.winehq.org/tests/..?query=x&return=y",S_OK,FALSE},
{"http",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE}
@ -191,7 +191,7 @@ static const uri_properties uri_tests[] = {
{"/path/a/Forbidden'%3C%7C%3E%20Characters",S_OK,TRUE},
{"/path/a/Forbidden'%3C%7C%3E%20Characters",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"hTTp://us%45r%3Ainfo@examp%4CE.com:80/path/a/b/./c/../%2E%2E/Forbidden'<|> Characters",S_OK,TRUE},
{"hTTp://us%45r%3Ainfo@examp%4CE.com:80/path/a/b/./c/../%2E%2E/Forbidden'<|> Characters",S_OK,FALSE},
{"http",S_OK,TRUE},
{"usEr%3Ainfo",S_OK,TRUE},
{"usEr%3Ainfo",S_OK,TRUE}
@ -221,7 +221,7 @@ static const uri_properties uri_tests[] = {
{"/dir/foo%20bar.txt",S_OK,TRUE},
{"/dir/foo%20bar.txt",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"ftp://winepass:wine@ftp.winehq.org:9999/dir/foo bar.txt",S_OK,TRUE},
{"ftp://winepass:wine@ftp.winehq.org:9999/dir/foo bar.txt",S_OK,FALSE},
{"ftp",S_OK,TRUE},
{"winepass:wine",S_OK,TRUE},
{"winepass",S_OK,TRUE}
@ -249,7 +249,7 @@ static const uri_properties uri_tests[] = {
{"/c:/tests/foo%2520bar.mp3",S_OK,TRUE},
{"/c:/tests/foo%2520bar.mp3",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"file://c:\\tests\\../tests/foo%20bar.mp3",S_OK,TRUE},
{"file://c:\\tests\\../tests/foo%20bar.mp3",S_OK,FALSE},
{"file",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE}
@ -277,7 +277,7 @@ static const uri_properties uri_tests[] = {
{"/tests/test%20file.README.txt",S_OK,TRUE},
{"/tests/test%20file.README.txt",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"FILE://localhost/test dir\\../tests/test%20file.README.txt",S_OK,TRUE},
{"FILE://localhost/test dir\\../tests/test%20file.README.txt",S_OK,FALSE},
{"file",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE}
@ -305,7 +305,7 @@ static const uri_properties uri_tests[] = {
{"nothing:should:happen here",S_OK,TRUE},
{"nothing:should:happen here",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"urn:nothing:should:happen here",S_OK,TRUE},
{"urn:nothing:should:happen here",S_OK,FALSE},
{"urn",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE}
@ -334,7 +334,7 @@ static const uri_properties uri_tests[] = {
{"/test%20dir/test.txt",S_OK,TRUE},
{"/test%20dir/test.txt",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"http://127.0.0.1/tests/../test dir/./test.txt",S_OK,TRUE},
{"http://127.0.0.1/tests/../test dir/./test.txt",S_OK,FALSE},
{"http",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE}
@ -363,7 +363,7 @@ static const uri_properties uri_tests[] = {
{"/",S_OK,TRUE},
{"/",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]",S_OK,TRUE},
{"http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]",S_OK,FALSE},
{"http",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE}
@ -392,7 +392,7 @@ static const uri_properties uri_tests[] = {
{"/",S_OK,TRUE},
{"/",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"ftp://[::13.1.68.3]",S_OK,TRUE},
{"ftp://[::13.1.68.3]",S_OK,FALSE},
{"ftp",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE}
@ -421,7 +421,7 @@ static const uri_properties uri_tests[] = {
{"/",S_OK,TRUE},
{"/",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"http://[FEDC:BA98:0:0:0:0:0:3210]",S_OK,TRUE},
{"http://[FEDC:BA98:0:0:0:0:0:3210]",S_OK,FALSE},
{"http",S_OK,TRUE},
{"",S_FALSE,TRUE},
{"",S_FALSE,TRUE},

View file

@ -25,6 +25,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
typedef struct {
const IUriVtbl *lpIUriVtbl;
LONG ref;
BSTR raw_uri;
} Uri;
typedef struct {
@ -74,8 +76,10 @@ static ULONG WINAPI Uri_Release(IUri *iface)
TRACE("(%p) ref=%d\n", This, ref);
if(!ref)
if(!ref) {
SysFreeString(This->raw_uri);
heap_free(This);
}
return ref;
}
@ -83,7 +87,8 @@ static ULONG WINAPI Uri_Release(IUri *iface)
static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BSTR *pbstrProperty, DWORD dwFlags)
{
Uri *This = URI_THIS(iface);
FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags);
HRESULT hres;
TRACE("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags);
if(!pbstrProperty)
return E_POINTER;
@ -99,13 +104,33 @@ static HRESULT WINAPI Uri_GetPropertyBSTR(IUri *iface, Uri_PROPERTY uriProp, BST
return S_OK;
}
return E_NOTIMPL;
/* Don't have support for flags yet. */
if(dwFlags) {
FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags);
return E_NOTIMPL;
}
switch(uriProp) {
case Uri_PROPERTY_RAW_URI:
*pbstrProperty = SysAllocString(This->raw_uri);
if(!(*pbstrProperty))
hres = E_OUTOFMEMORY;
else
hres = S_OK;
break;
default:
FIXME("(%p)->(%d %p %x)\n", This, uriProp, pbstrProperty, dwFlags);
hres = E_NOTIMPL;
}
return hres;
}
static HRESULT WINAPI Uri_GetPropertyLength(IUri *iface, Uri_PROPERTY uriProp, DWORD *pcchProperty, DWORD dwFlags)
{
Uri *This = URI_THIS(iface);
FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags);
HRESULT hres;
TRACE("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags);
if(!pcchProperty)
return E_INVALIDARG;
@ -114,7 +139,23 @@ static HRESULT WINAPI Uri_GetPropertyLength(IUri *iface, Uri_PROPERTY uriProp, D
if(uriProp > Uri_PROPERTY_STRING_LAST)
return E_INVALIDARG;
return E_NOTIMPL;
/* Don't have support for flags yet. */
if(dwFlags) {
FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags);
return E_NOTIMPL;
}
switch(uriProp) {
case Uri_PROPERTY_RAW_URI:
*pcchProperty = SysStringLen(This->raw_uri);
hres = S_OK;
break;
default:
FIXME("(%p)->(%d %p %x)\n", This, uriProp, pcchProperty, dwFlags);
hres = E_NOTIMPL;
}
return hres;
}
static HRESULT WINAPI Uri_GetPropertyDWORD(IUri *iface, Uri_PROPERTY uriProp, DWORD *pcchProperty, DWORD dwFlags)
@ -278,12 +319,10 @@ static HRESULT WINAPI Uri_GetQuery(IUri *iface, BSTR *pstrQuery)
static HRESULT WINAPI Uri_GetRawUri(IUri *iface, BSTR *pstrRawUri)
{
Uri *This = URI_THIS(iface);
FIXME("(%p)->(%p)\n", This, pstrRawUri);
TRACE("(%p)->(%p)\n", This, pstrRawUri);
if(!pstrRawUri)
return E_POINTER;
return E_NOTIMPL;
/* Just forward the call to GetPropertyBSTR. */
return Uri_GetPropertyBSTR(iface, Uri_PROPERTY_RAW_URI, pstrRawUri, 0);
}
static HRESULT WINAPI Uri_GetSchemeName(IUri *iface, BSTR *pstrSchemeName)
@ -454,6 +493,14 @@ HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IU
ret->lpIUriVtbl = &UriVtbl;
ret->ref = 1;
/* Create a copy of pwzURI and store it as the raw_uri. */
ret->raw_uri = SysAllocString(pwzURI);
if(!ret->raw_uri) {
heap_free(ret);
return E_OUTOFMEMORY;
}
*ppURI = URI(ret);
return S_OK;
}