Jacek Caban : mshtml: Added IHTMLLocation::get_pathname implementation.
Alexandre Julliard
julliard at winehq.org
Mon Aug 10 10:35:45 CDT 2009
Module: wine
Branch: master
Commit: 2ca7683dfb03a286ec09f3d3d4039a9e844db78c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2ca7683dfb03a286ec09f3d3d4039a9e844db78c
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sun Aug 9 15:56:10 2009 +0200
mshtml: Added IHTMLLocation::get_pathname implementation.
---
dlls/mshtml/Makefile.in | 1 +
dlls/mshtml/htmllocation.c | 40 ++++++++++++++++++++++++++++++++++++++--
dlls/mshtml/tests/dom.c | 5 +++++
3 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/Makefile.in b/dlls/mshtml/Makefile.in
index acda821..7f44bb1 100644
--- a/dlls/mshtml/Makefile.in
+++ b/dlls/mshtml/Makefile.in
@@ -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 \
diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c
index 35f042a..e2001bb 100644
--- a/dlls/mshtml/htmllocation.c
+++ b/dlls/mshtml/htmllocation.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)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 4846848..87581f1 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -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");
}
More information about the wine-cvs
mailing list