Commit a5b2075e authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

urlmon: Added StdURLMoniker implementation.

parent 53b1a310
...@@ -2571,6 +2571,25 @@ static void test_BindToStorage_fail(void) ...@@ -2571,6 +2571,25 @@ static void test_BindToStorage_fail(void)
test_ReportResult(S_FALSE); test_ReportResult(S_FALSE);
} }
static void test_StdURLMoniker(void)
{
IMoniker *mon, *async_mon;
HRESULT hres;
hres = CoCreateInstance(&IID_IInternet, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
&IID_IMoniker, (void**)&mon);
ok(hres == S_OK, "Could not create IInternet instance: %08x\n", hres);
if(FAILED(hres))
return;
hres = IMoniker_QueryInterface(mon, &IID_IAsyncMoniker, (void**)&async_mon);
ok(hres == S_OK, "Could not get IAsyncMoniker iface: %08x\n", hres);
ok(mon == async_mon, "mon != async_mon\n");
IMoniker_Release(async_mon);
IMoniker_Release(mon);
}
static void gecko_installer_workaround(BOOL disable) static void gecko_installer_workaround(BOOL disable)
{ {
HKEY hkey; HKEY hkey;
...@@ -2622,6 +2641,9 @@ START_TEST(url) ...@@ -2622,6 +2641,9 @@ START_TEST(url)
CoInitialize(NULL); CoInitialize(NULL);
trace("test StdURLMoniker...");
test_StdURLMoniker();
trace("synchronous http test...\n"); trace("synchronous http test...\n");
test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM); test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
......
...@@ -376,7 +376,7 @@ static HRESULT WINAPI URLMoniker_GetDisplayName(IMoniker *iface, IBindCtx *pbc, ...@@ -376,7 +376,7 @@ static HRESULT WINAPI URLMoniker_GetDisplayName(IMoniker *iface, IBindCtx *pbc,
if(!ppszDisplayName) if(!ppszDisplayName)
return E_INVALIDARG; return E_INVALIDARG;
/* FIXME: If this is a partial URL, try and get a URL moniker from SZ_URLCONTEXT in the bind context, /* FIXME: If this is a partial URL, try and get a URL moniker from SZ_URLCONTEXT in the bind context,
then look at pmkToLeft to try and complete the URL then look at pmkToLeft to try and complete the URL
*/ */
...@@ -436,19 +436,28 @@ static const IMonikerVtbl URLMonikerVtbl = ...@@ -436,19 +436,28 @@ static const IMonikerVtbl URLMonikerVtbl =
URLMoniker_IsSystemMoniker URLMoniker_IsSystemMoniker
}; };
/****************************************************************************** static URLMoniker *alloc_moniker(void)
* URLMoniker_Construct (local function) {
*******************************************************************************/ URLMoniker *ret;
static HRESULT URLMoniker_Construct(URLMoniker *This, LPCOLESTR lpszLeftURLName, LPCOLESTR lpszURLName)
ret = heap_alloc(sizeof(URLMoniker));
if(!ret)
return NULL;
ret->lpIMonikerVtbl = &URLMonikerVtbl;
ret->ref = 1;
ret->URLName = NULL;
return ret;
}
static HRESULT URLMoniker_Init(URLMoniker *This, LPCOLESTR lpszLeftURLName, LPCOLESTR lpszURLName)
{ {
HRESULT hres; HRESULT hres;
DWORD sizeStr = 0; DWORD sizeStr = 0;
TRACE("(%p,%s,%s)\n",This,debugstr_w(lpszLeftURLName),debugstr_w(lpszURLName)); TRACE("(%p,%s,%s)\n",This,debugstr_w(lpszLeftURLName),debugstr_w(lpszURLName));
This->lpIMonikerVtbl = &URLMonikerVtbl;
This->ref = 0;
This->URLName = heap_alloc(INTERNET_MAX_URL_LENGTH*sizeof(WCHAR)); This->URLName = heap_alloc(INTERNET_MAX_URL_LENGTH*sizeof(WCHAR));
if(lpszLeftURLName) if(lpszLeftURLName)
...@@ -473,6 +482,14 @@ static HRESULT URLMoniker_Construct(URLMoniker *This, LPCOLESTR lpszLeftURLName, ...@@ -473,6 +482,14 @@ static HRESULT URLMoniker_Construct(URLMoniker *This, LPCOLESTR lpszLeftURLName,
return S_OK; return S_OK;
} }
HRESULT StdURLMoniker_Construct(IUnknown *outer, void **ppv)
{
TRACE("(%p %p)\n", outer, ppv);
*ppv = alloc_moniker();
return *ppv ? S_OK : E_OUTOFMEMORY;
}
/*********************************************************************** /***********************************************************************
* CreateURLMonikerEx (URLMON.@) * CreateURLMonikerEx (URLMON.@)
* *
...@@ -499,7 +516,7 @@ HRESULT WINAPI CreateURLMonikerEx(IMoniker *pmkContext, LPCWSTR szURL, IMoniker ...@@ -499,7 +516,7 @@ HRESULT WINAPI CreateURLMonikerEx(IMoniker *pmkContext, LPCWSTR szURL, IMoniker
if (dwFlags & URL_MK_UNIFORM) FIXME("ignoring flag URL_MK_UNIFORM\n"); if (dwFlags & URL_MK_UNIFORM) FIXME("ignoring flag URL_MK_UNIFORM\n");
if(!(obj = heap_alloc(sizeof(*obj)))) if(!(obj = alloc_moniker()))
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
if(pmkContext) { if(pmkContext) {
...@@ -513,12 +530,11 @@ HRESULT WINAPI CreateURLMonikerEx(IMoniker *pmkContext, LPCWSTR szURL, IMoniker ...@@ -513,12 +530,11 @@ HRESULT WINAPI CreateURLMonikerEx(IMoniker *pmkContext, LPCWSTR szURL, IMoniker
} }
} }
hres = URLMoniker_Construct(obj, lefturl, szURL); hres = URLMoniker_Init(obj, lefturl, szURL);
CoTaskMemFree(lefturl); CoTaskMemFree(lefturl);
if(SUCCEEDED(hres)) if(SUCCEEDED(hres))
hres = URLMoniker_QueryInterface((IMoniker*)obj, &IID_IMoniker, (void**)ppmk); hres = URLMoniker_QueryInterface((IMoniker*)obj, &IID_IMoniker, (void**)ppmk);
else IMoniker_Release((IMoniker*)obj);
heap_free(obj);
return hres; return hres;
} }
......
...@@ -185,6 +185,8 @@ static const ClassFactory SecurityManagerCF = ...@@ -185,6 +185,8 @@ static const ClassFactory SecurityManagerCF =
{ &ClassFactoryVtbl, SecManagerImpl_Construct}; { &ClassFactoryVtbl, SecManagerImpl_Construct};
static const ClassFactory ZoneManagerCF = static const ClassFactory ZoneManagerCF =
{ &ClassFactoryVtbl, ZoneMgrImpl_Construct}; { &ClassFactoryVtbl, ZoneMgrImpl_Construct};
static const ClassFactory StdURLMonikerCF =
{ &ClassFactoryVtbl, StdURLMoniker_Construct};
struct object_creation_info struct object_creation_info
{ {
...@@ -209,7 +211,8 @@ static const struct object_creation_info object_creation[] = ...@@ -209,7 +211,8 @@ static const struct object_creation_info object_creation[] =
{ &CLSID_HttpSProtocol, CLASSFACTORY(&HttpSProtocolCF), wszHttps }, { &CLSID_HttpSProtocol, CLASSFACTORY(&HttpSProtocolCF), wszHttps },
{ &CLSID_MkProtocol, CLASSFACTORY(&MkProtocolCF), wszMk }, { &CLSID_MkProtocol, CLASSFACTORY(&MkProtocolCF), wszMk },
{ &CLSID_InternetSecurityManager, CLASSFACTORY(&SecurityManagerCF), NULL }, { &CLSID_InternetSecurityManager, CLASSFACTORY(&SecurityManagerCF), NULL },
{ &CLSID_InternetZoneManager, CLASSFACTORY(&ZoneManagerCF), NULL } { &CLSID_InternetZoneManager, CLASSFACTORY(&ZoneManagerCF), NULL },
{ &CLSID_StdURLMoniker, CLASSFACTORY(&StdURLMonikerCF), NULL }
}; };
static void init_session(BOOL init) static void init_session(BOOL init)
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
extern HINSTANCE URLMON_hInstance; extern HINSTANCE URLMON_hInstance;
extern HRESULT SecManagerImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT SecManagerImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
extern HRESULT ZoneMgrImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT ZoneMgrImpl_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
extern HRESULT StdURLMoniker_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
extern HRESULT FileProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT FileProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
extern HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
extern HRESULT HttpSProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT HttpSProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment