mshtml: Added IHTMLLocation::get_pathname implementation.

This commit is contained in:
Jacek Caban 2009-08-09 15:56:10 +02:00 committed by Alexandre Julliard
parent 3d1bb79983
commit 2ca7683dfb
3 changed files with 44 additions and 2 deletions

View File

@ -6,6 +6,7 @@ MODULE = mshtml.dll
IMPORTLIB = mshtml
IMPORTS = strmiids uuid urlmon shlwapi ole32 oleaut32 user32 gdi32 advapi32 kernel32
EXTRADEFS = -DCOM_NO_WINDOWS_H
DELAYIMPORTS = wininet
C_SRCS = \
conpoint.c \

View File

@ -23,7 +23,10 @@
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winreg.h"
#include "ole2.h"
#include "wininet.h"
#include "shlwapi.h"
#include "wine/debug.h"
@ -195,8 +198,41 @@ static HRESULT WINAPI HTMLLocation_put_pathname(IHTMLLocation *iface, BSTR v)
static HRESULT WINAPI HTMLLocation_get_pathname(IHTMLLocation *iface, BSTR *p)
{
HTMLLocation *This = HTMLLOCATION_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
WCHAR buf[INTERNET_MAX_PATH_LENGTH];
URL_COMPONENTSW url = {sizeof(url)};
DWORD size = 0;
HRESULT hres;
TRACE("(%p)->(%p)\n", This, p);
if(!This->doc || !This->doc->url) {
FIXME("No current URL\n");
return E_NOTIMPL;
}
hres = CoInternetParseUrl(This->doc->url, PARSE_PATH_FROM_URL, 0, buf, sizeof(buf), &size, 0);
if(SUCCEEDED(hres)) {
*p = SysAllocString(buf);
if(!*p)
return E_OUTOFMEMORY;
return S_OK;
}
url.dwUrlPathLength = 1;
if(!InternetCrackUrlW(This->doc->url, 0, 0, &url)) {
FIXME("InternetCrackUrl failed\n");
return E_FAIL;
}
if(!url.dwUrlPathLength) {
*p = NULL;
return S_OK;
}
*p = SysAllocStringLen(url.lpszUrlPath, url.dwUrlPathLength);
if(!*p)
return E_OUTOFMEMORY;
return S_OK;
}
static HRESULT WINAPI HTMLLocation_put_search(IHTMLLocation *iface, BSTR v)

View File

@ -2383,6 +2383,7 @@ static void test_location(IHTMLDocument2 *doc)
{
IHTMLLocation *location, *location2;
IHTMLWindow2 *window;
BSTR str;
ULONG ref;
HRESULT hres;
@ -2406,6 +2407,10 @@ static void test_location(IHTMLDocument2 *doc)
test_ifaces((IUnknown*)location, location_iids);
test_disp2((IUnknown*)location, &DIID_DispHTMLLocation, &IID_IHTMLLocation);
hres = IHTMLLocation_get_pathname(location, &str);
ok(hres == S_OK, "get_pathname failed: %08x\n", hres);
ok(!strcmp_wa(str, "blank"), "unexpected pathname %s\n", dbgstr_w(str));
ref = IHTMLLocation_Release(location);
ok(!ref, "location chould be destroyed here\n");
}