Commit 2ca7683d authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

mshtml: Added IHTMLLocation::get_pathname implementation.

parent 3d1bb799
......@@ -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 \
......
......@@ -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)
......
......@@ -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");
}
......
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