Jacek Caban : mshtml: Don't store moniker in nsURI.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Feb 12 09:23:47 CST 2007
Module: wine
Branch: master
Commit: 0da187dda839d437ff05abdc4abf0b9536ae5292
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0da187dda839d437ff05abdc4abf0b9536ae5292
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Feb 9 20:19:13 2007 +0100
mshtml: Don't store moniker in nsURI.
---
dlls/mshtml/nsembed.c | 16 +++--------
dlls/mshtml/nsio.c | 73 +++++++++++++++++++++++++++---------------------
2 files changed, 45 insertions(+), 44 deletions(-)
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index b7b32e7..31e9551 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -934,20 +934,13 @@ static nsresult NSAPI nsURIContentListen
nsIWineURI_SetIsDocumentURI(wine_uri, TRUE);
if(This->bscallback && This->bscallback->mon) {
- LPWSTR url = NULL;
+ LPWSTR wine_url;
HRESULT hres;
- hres = IMoniker_GetDisplayName(This->bscallback->mon, NULL, 0, &url);
+ hres = IMoniker_GetDisplayName(This->bscallback->mon, NULL, 0, &wine_url);
if(SUCCEEDED(hres)) {
- IMoniker *mon = NULL;
-
- hres = CreateURLMoniker(NULL, url, &mon);
- if(SUCCEEDED(hres)) {
- nsIWineURI_SetMoniker(wine_uri, mon);
- IMoniker_Release(mon);
- }else {
- WARN("CreateURLMoniker failed: %08x\n", hres);
- }
+ nsIWineURI_SetWineURL(wine_uri, wine_url);
+ CoTaskMemFree(wine_url);
}else {
WARN("GetDisplayName failed: %08x\n", hres);
}
@@ -1511,7 +1504,6 @@ NSContainer *NSContainer_Create(HTMLDocu
ERR("GetContentDOMWindow failed: %08x\n", nsres);
}
-
return ret;
}
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index af6a124..2cd226c 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2006 Jacek Caban for CodeWeavers
+ * Copyright 2006-2007 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -25,9 +25,11 @@
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
+#include "winreg.h"
#include "ole2.h"
#include "shlguid.h"
#include "wininet.h"
+#include "shlwapi.h"
#include "wine/debug.h"
#include "wine/unicode.h"
@@ -59,8 +61,9 @@ typedef struct {
} nsURI;
#define NSURI(x) ((nsIURI*) &(x)->lpWineURIVtbl)
+#define NSWINEURI(x) ((nsIWineURI*) &(x)->lpWineURIVtbl)
-static nsresult create_uri(nsIURI*,NSContainer*,nsIURI**);
+static nsresult create_uri(nsIURI*,NSContainer*,nsIWineURI**);
static BOOL exec_shldocvw_67(HTMLDocument *doc, LPCWSTR url)
{
@@ -601,7 +604,9 @@ static nsresult NSAPI nsChannel_AsyncOpe
nsIWineURI *wine_uri;
IMoniker *mon;
PRBool is_doc_uri;
+ LPCWSTR wine_url;
nsresult nsres;
+ HRESULT hres;
TRACE("(%p)->(%p %p)\n", This, aListener, aContext);
@@ -696,11 +701,15 @@ static nsresult NSAPI nsChannel_AsyncOpe
return NS_ERROR_UNEXPECTED;
}
- nsIWineURI_GetMoniker(wine_uri, &mon);
- nsIWineURI_Release(wine_uri);
+ nsIWineURI_GetWineURL(wine_uri, &wine_url);
+ if(!wine_url) {
+ TRACE("wine_url == NULL\n");
+ return NS_ERROR_UNEXPECTED;
+ }
- if(!mon) {
- WARN("mon == NULL\n");
+ hres = CreateURLMoniker(NULL, wine_url, &mon);
+ if(FAILED(hres)) {
+ WARN("CreateURLMonikrer failed: %08x\n", hres);
return NS_ERROR_UNEXPECTED;
}
@@ -1451,7 +1460,7 @@ static nsresult NSAPI nsURI_Clone(nsIWin
return nsres;
}
- return create_uri(uri, This->container, _retval);
+ return create_uri(uri, This->container, (nsIWineURI**)_retval);
}
FIXME("default action not implemented\n");
@@ -1687,7 +1696,7 @@ static const nsIWineURIVtbl nsWineURIVtb
nsURI_SetWineURL
};
-static nsresult create_uri(nsIURI *uri, NSContainer *container, nsIURI **_retval)
+static nsresult create_uri(nsIURI *uri, NSContainer *container, nsIWineURI **_retval)
{
nsURI *ret = mshtml_alloc(sizeof(nsURI));
@@ -1703,7 +1712,7 @@ static nsresult create_uri(nsIURI *uri,
nsIWebBrowserChrome_AddRef(NSWBCHROME(container));
TRACE("retval=%p\n", ret);
- *_retval = NSURI(ret);
+ *_retval = NSWINEURI(ret);
return NS_OK;
}
@@ -1760,7 +1769,8 @@ static nsresult NSAPI nsIOService_NewURI
NSContainer *nscontainer = NULL;
nsIURI *uri = NULL;
PRBool is_javascript = FALSE;
- IMoniker *base_mon = NULL;
+ LPCWSTR base_wine_url = NULL;
+ nsIWineURI *base_wine_uri = NULL, *wine_uri;
nsresult nsres;
nsACString_GetData(aSpec, &spec, NULL);
@@ -1779,7 +1789,7 @@ static nsresult NSAPI nsIOService_NewURI
nsres = nsIURI_GetSpec(aBaseURI, &base_uri_str);
if(NS_SUCCEEDED(nsres)) {
nsACString_GetData(&base_uri_str, &base_uri, NULL);
- TRACE("uri=%s\n", debugstr_a(base_uri));
+ TRACE("base_uri=%s\n", debugstr_a(base_uri));
}else {
ERR("GetSpec failed: %08x\n", nsres);
}
@@ -1804,43 +1814,42 @@ static nsresult NSAPI nsIOService_NewURI
}
if(aBaseURI) {
- nsIWineURI *wine_uri;
-
- nsres = nsIURI_QueryInterface(aBaseURI, &IID_nsIWineURI, (void**)&wine_uri);
+ nsres = nsIURI_QueryInterface(aBaseURI, &IID_nsIWineURI, (void**)&base_wine_uri);
if(NS_SUCCEEDED(nsres)) {
- nsIWineURI_GetNSContainer(wine_uri, &nscontainer);
- nsIWineURI_GetMoniker(wine_uri, &base_mon);
- nsIWineURI_Release(wine_uri);
+ nsIWineURI_GetNSContainer(base_wine_uri, &nscontainer);
+ nsIWineURI_GetWineURL(base_wine_uri, &base_wine_url);
}else {
ERR("Could not get nsIWineURI: %08x\n", nsres);
}
}
- nsres = create_uri(uri, nscontainer, _retval);
+ nsres = create_uri(uri, nscontainer, &wine_uri);
+ *_retval = (nsIURI*)wine_uri;
if(nscontainer)
nsIWebBrowserChrome_Release(NSWBCHROME(nscontainer));
- if(base_mon) {
- LPWSTR url;
- IMoniker *mon;
+ if(base_wine_url) {
+ WCHAR url[INTERNET_MAX_URL_LENGTH], rel_url[INTERNET_MAX_URL_LENGTH];
+ LPCSTR speca;
DWORD len;
HRESULT hres;
- len = MultiByteToWideChar(CP_ACP, 0, spec, -1, NULL, 0);
- url = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
- MultiByteToWideChar(CP_ACP, 0, spec, -1, url, -1);
+ nsACString_GetData(aSpec, &speca, NULL);
+ MultiByteToWideChar(CP_ACP, 0, speca, -1, rel_url, sizeof(rel_url)/sizeof(WCHAR));
- hres = CreateURLMoniker(base_mon, url, &mon);
- HeapFree(GetProcessHeap(), 0, url);
- if(SUCCEEDED(hres)) {
- nsIWineURI_SetMoniker((nsIWineURI*)*_retval, mon);
- IMoniker_Release(mon);
- }else {
- WARN("CreateURLMoniker failed: %08x\n", hres);
- }
+ hres = CoInternetCombineUrl(base_wine_url, rel_url,
+ URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO,
+ url, sizeof(url)/sizeof(WCHAR), &len, 0);
+ if(SUCCEEDED(hres))
+ nsIWineURI_SetWineURL(wine_uri, url);
+ else
+ WARN("CoCombineUrl failed: %08x\n", hres);
}
+ if(base_wine_uri)
+ nsIWineURI_Release(base_wine_uri);
+
return nsres;
}
More information about the wine-cvs
mailing list