diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 8829bf73ddc..ef36afb6886 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -2320,14 +2320,35 @@ static nsresult NSAPI nsURL_SetRef(nsIURL *iface, const nsACString *aRef)
static nsresult NSAPI nsURL_GetDirectory(nsIURL *iface, nsACString *aDirectory)
{
nsWineURI *This = impl_from_nsIURL(iface);
+ char *dir = NULL;
+ WCHAR *ptr;
+ BSTR path;
+ HRESULT hres;
TRACE("(%p)->(%p)\n", This, aDirectory);
- if(This->nsurl)
- return nsIURL_GetDirectory(This->nsurl, aDirectory);
+ if(!ensure_uri(This))
+ return NS_ERROR_UNEXPECTED;
- FIXME("default action not implemented\n");
- return NS_ERROR_NOT_IMPLEMENTED;
+ hres = IUri_GetPath(This->uri, &path);
+ if(FAILED(hres))
+ return NS_ERROR_FAILURE;
+
+ ptr = strrchrW(path, '/');
+ if(ptr) {
+ if(ptr[1])
+ *ptr = 0;
+ dir = heap_strdupWtoA(path);
+ if(!dir) {
+ SysFreeString(path);
+ return NS_ERROR_OUT_OF_MEMORY;
+ }
+ }
+
+ SysFreeString(path);
+ TRACE("ret %s\n", debugstr_a(dir));
+ nsACString_SetData(aDirectory, dir ? dir : "");
+ return NS_OK;
}
static nsresult NSAPI nsURL_SetDirectory(nsIURL *iface, const nsACString *aDirectory)