Module: wine Branch: refs/heads/master Commit: 6a6f9158b1a69cac8323399a2f21e0e3cdfdb66f URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=6a6f9158b1a69cac8323399a...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Aug 9 16:40:50 2006 +0200
mshtml: Added default GetSpec implementation.
---
dlls/mshtml/nsio.c | 35 +++++++++++++++++++++++++++++++++-- 1 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index 67207bb..d315028 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -53,6 +53,7 @@ typedef struct { nsIURI *uri; NSContainer *container; IMoniker *mon; + LPSTR spec; } nsURI;
#define NSURI(x) ((nsIURI*) &(x)->lpWineURIVtbl) @@ -1050,6 +1051,9 @@ static nsrefcnt NSAPI nsURI_Release(nsIW nsIWebBrowserChrome_Release(NSWBCHROME(This->container)); if(This->uri) nsIURI_Release(This->uri); + if(This->mon) + IMoniker_Release(This->mon); + mshtml_free(This->spec); mshtml_free(This); }
@@ -1065,7 +1069,12 @@ static nsresult NSAPI nsURI_GetSpec(nsIW if(This->uri) return nsIURI_GetSpec(This->uri, aSpec);
- FIXME("default action not implemented\n"); + if(This->spec) { + nsACString_Init(aSpec, This->spec); + return NS_OK; + } + + WARN("mon and uri are NULL\n"); return NS_ERROR_NOT_IMPLEMENTED;
} @@ -1459,10 +1468,31 @@ static nsresult NSAPI nsURI_SetMoniker(n if(This->mon) { WARN("Moniker already set: %p\n", This->container); IMoniker_Release(This->mon); + + mshtml_free(This->spec); + This->spec = NULL; }
- if(aMoniker) + if(aMoniker) { + LPWSTR url = NULL; + HRESULT hres; + + hres = IMoniker_GetDisplayName(aMoniker, NULL, NULL, &url); + if(SUCCEEDED(hres)) { + DWORD len; + + len = WideCharToMultiByte(CP_ACP, 0, url, -1, NULL, 0, NULL, NULL); + This->spec = mshtml_alloc(len*sizeof(WCHAR)); + WideCharToMultiByte(CP_ACP, 0, url, -1, This->spec, -1, NULL, NULL); + CoTaskMemFree(url); + + TRACE("spec %s\n", debugstr_a(This->spec)); + }else { + ERR("GetDisplayName failed: %08lx\n", hres); + } + IMoniker_AddRef(aMoniker); + } This->mon = aMoniker;
return NS_OK; @@ -1515,6 +1545,7 @@ static nsresult create_uri(nsIURI *uri, ret->uri = uri; ret->container = container; ret->mon = NULL; + ret->spec = NULL;
if(container) nsIWebBrowserChrome_AddRef(NSWBCHROME(container));