msxml3: Use site's base URI when loading an XML file.

Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Dmitry Timoshkov 2020-07-09 15:18:11 +08:00 committed by Alexandre Julliard
parent 25abcac61a
commit f62b05dadd
3 changed files with 16 additions and 5 deletions

View File

@ -242,9 +242,10 @@ static const struct IBindStatusCallbackVtbl bsc_vtbl =
bsc_OnObjectAvailable
};
HRESULT create_uri(const WCHAR *url, IUri **uri)
HRESULT create_uri(IUri *base, const WCHAR *url, IUri **uri)
{
WCHAR fileUrl[INTERNET_MAX_URL_LENGTH];
HRESULT hr;
TRACE("%s\n", debugstr_w(url));
@ -271,7 +272,17 @@ HRESULT create_uri(const WCHAR *url, IUri **uri)
url = fileUrl;
}
return CreateUri(url, Uri_CREATE_ALLOW_RELATIVE | Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, uri);
hr = CreateUri(url, Uri_CREATE_ALLOW_RELATIVE | Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, uri);
if (hr == S_OK && base)
{
IUri *rebased_uri;
hr = CoInternetCombineIUri(base, *uri, 0, &rebased_uri, 0);
IUri_Release(*uri);
*uri = rebased_uri;
}
return hr;
}
HRESULT create_moniker_from_url(LPCWSTR url, IMoniker **mon)
@ -281,7 +292,7 @@ HRESULT create_moniker_from_url(LPCWSTR url, IMoniker **mon)
TRACE("%s\n", debugstr_w(url));
if (FAILED(hr = create_uri(url, &uri)))
if (FAILED(hr = create_uri(NULL, url, &uri)))
return hr;
hr = CreateURLMonikerEx2(NULL, uri, mon, 0);

View File

@ -2304,7 +2304,7 @@ static HRESULT WINAPI domdoc_load(
This->properties->uri = NULL;
}
hr = create_uri(filename, &uri);
hr = create_uri(This->base_uri, filename, &uri);
if (SUCCEEDED(hr))
hr = CreateURLMonikerEx2(NULL, uri, &mon, 0);
if ( SUCCEEDED(hr) )

View File

@ -532,7 +532,7 @@ static inline const CLSID* SchemaCache_version(MSXML_VERSION v)
typedef struct bsc_t bsc_t;
HRESULT create_moniker_from_url(LPCWSTR, IMoniker**) DECLSPEC_HIDDEN;
HRESULT create_uri(const WCHAR *, IUri **) DECLSPEC_HIDDEN;
HRESULT create_uri(IUri *base, const WCHAR *, IUri **) DECLSPEC_HIDDEN;
HRESULT bind_url(IMoniker*, HRESULT (*onDataAvailable)(void*,char*,DWORD), void*, bsc_t**) DECLSPEC_HIDDEN;
HRESULT detach_bsc(bsc_t*) DECLSPEC_HIDDEN;
IUri *get_base_uri(IUnknown *) DECLSPEC_HIDDEN;