mshtml: Don't store moniker in nsURI.
This commit is contained in:
parent
5ea16d7856
commit
0da187dda8
|
@ -934,20 +934,13 @@ static nsresult NSAPI nsURIContentListener_OnStartURIOpen(nsIURIContentListener
|
||||||
nsIWineURI_SetIsDocumentURI(wine_uri, TRUE);
|
nsIWineURI_SetIsDocumentURI(wine_uri, TRUE);
|
||||||
|
|
||||||
if(This->bscallback && This->bscallback->mon) {
|
if(This->bscallback && This->bscallback->mon) {
|
||||||
LPWSTR url = NULL;
|
LPWSTR wine_url;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
hres = IMoniker_GetDisplayName(This->bscallback->mon, NULL, 0, &url);
|
hres = IMoniker_GetDisplayName(This->bscallback->mon, NULL, 0, &wine_url);
|
||||||
if(SUCCEEDED(hres)) {
|
if(SUCCEEDED(hres)) {
|
||||||
IMoniker *mon = NULL;
|
nsIWineURI_SetWineURL(wine_uri, wine_url);
|
||||||
|
CoTaskMemFree(wine_url);
|
||||||
hres = CreateURLMoniker(NULL, url, &mon);
|
|
||||||
if(SUCCEEDED(hres)) {
|
|
||||||
nsIWineURI_SetMoniker(wine_uri, mon);
|
|
||||||
IMoniker_Release(mon);
|
|
||||||
}else {
|
|
||||||
WARN("CreateURLMoniker failed: %08x\n", hres);
|
|
||||||
}
|
|
||||||
}else {
|
}else {
|
||||||
WARN("GetDisplayName failed: %08x\n", hres);
|
WARN("GetDisplayName failed: %08x\n", hres);
|
||||||
}
|
}
|
||||||
|
@ -1511,7 +1504,6 @@ NSContainer *NSContainer_Create(HTMLDocument *doc, NSContainer *parent)
|
||||||
ERR("GetContentDOMWindow failed: %08x\n", nsres);
|
ERR("GetContentDOMWindow failed: %08x\n", nsres);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -25,9 +25,11 @@
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "winuser.h"
|
#include "winuser.h"
|
||||||
|
#include "winreg.h"
|
||||||
#include "ole2.h"
|
#include "ole2.h"
|
||||||
#include "shlguid.h"
|
#include "shlguid.h"
|
||||||
#include "wininet.h"
|
#include "wininet.h"
|
||||||
|
#include "shlwapi.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "wine/unicode.h"
|
#include "wine/unicode.h"
|
||||||
|
@ -59,8 +61,9 @@ typedef struct {
|
||||||
} nsURI;
|
} nsURI;
|
||||||
|
|
||||||
#define NSURI(x) ((nsIURI*) &(x)->lpWineURIVtbl)
|
#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)
|
static BOOL exec_shldocvw_67(HTMLDocument *doc, LPCWSTR url)
|
||||||
{
|
{
|
||||||
|
@ -601,7 +604,9 @@ static nsresult NSAPI nsChannel_AsyncOpen(nsIHttpChannel *iface, nsIStreamListen
|
||||||
nsIWineURI *wine_uri;
|
nsIWineURI *wine_uri;
|
||||||
IMoniker *mon;
|
IMoniker *mon;
|
||||||
PRBool is_doc_uri;
|
PRBool is_doc_uri;
|
||||||
|
LPCWSTR wine_url;
|
||||||
nsresult nsres;
|
nsresult nsres;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
TRACE("(%p)->(%p %p)\n", This, aListener, aContext);
|
TRACE("(%p)->(%p %p)\n", This, aListener, aContext);
|
||||||
|
|
||||||
|
@ -696,11 +701,15 @@ static nsresult NSAPI nsChannel_AsyncOpen(nsIHttpChannel *iface, nsIStreamListen
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsIWineURI_GetMoniker(wine_uri, &mon);
|
nsIWineURI_GetWineURL(wine_uri, &wine_url);
|
||||||
nsIWineURI_Release(wine_uri);
|
if(!wine_url) {
|
||||||
|
TRACE("wine_url == NULL\n");
|
||||||
|
return NS_ERROR_UNEXPECTED;
|
||||||
|
}
|
||||||
|
|
||||||
if(!mon) {
|
hres = CreateURLMoniker(NULL, wine_url, &mon);
|
||||||
WARN("mon == NULL\n");
|
if(FAILED(hres)) {
|
||||||
|
WARN("CreateURLMonikrer failed: %08x\n", hres);
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1451,7 +1460,7 @@ static nsresult NSAPI nsURI_Clone(nsIWineURI *iface, nsIURI **_retval)
|
||||||
return nsres;
|
return nsres;
|
||||||
}
|
}
|
||||||
|
|
||||||
return create_uri(uri, This->container, _retval);
|
return create_uri(uri, This->container, (nsIWineURI**)_retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
FIXME("default action not implemented\n");
|
FIXME("default action not implemented\n");
|
||||||
|
@ -1687,7 +1696,7 @@ static const nsIWineURIVtbl nsWineURIVtbl = {
|
||||||
nsURI_SetWineURL
|
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));
|
nsURI *ret = mshtml_alloc(sizeof(nsURI));
|
||||||
|
|
||||||
|
@ -1703,7 +1712,7 @@ static nsresult create_uri(nsIURI *uri, NSContainer *container, nsIURI **_retval
|
||||||
nsIWebBrowserChrome_AddRef(NSWBCHROME(container));
|
nsIWebBrowserChrome_AddRef(NSWBCHROME(container));
|
||||||
|
|
||||||
TRACE("retval=%p\n", ret);
|
TRACE("retval=%p\n", ret);
|
||||||
*_retval = NSURI(ret);
|
*_retval = NSWINEURI(ret);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1760,7 +1769,8 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
|
||||||
NSContainer *nscontainer = NULL;
|
NSContainer *nscontainer = NULL;
|
||||||
nsIURI *uri = NULL;
|
nsIURI *uri = NULL;
|
||||||
PRBool is_javascript = FALSE;
|
PRBool is_javascript = FALSE;
|
||||||
IMoniker *base_mon = NULL;
|
LPCWSTR base_wine_url = NULL;
|
||||||
|
nsIWineURI *base_wine_uri = NULL, *wine_uri;
|
||||||
nsresult nsres;
|
nsresult nsres;
|
||||||
|
|
||||||
nsACString_GetData(aSpec, &spec, NULL);
|
nsACString_GetData(aSpec, &spec, NULL);
|
||||||
|
@ -1779,7 +1789,7 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
|
||||||
nsres = nsIURI_GetSpec(aBaseURI, &base_uri_str);
|
nsres = nsIURI_GetSpec(aBaseURI, &base_uri_str);
|
||||||
if(NS_SUCCEEDED(nsres)) {
|
if(NS_SUCCEEDED(nsres)) {
|
||||||
nsACString_GetData(&base_uri_str, &base_uri, NULL);
|
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 {
|
}else {
|
||||||
ERR("GetSpec failed: %08x\n", nsres);
|
ERR("GetSpec failed: %08x\n", nsres);
|
||||||
}
|
}
|
||||||
|
@ -1804,43 +1814,42 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
|
||||||
}
|
}
|
||||||
|
|
||||||
if(aBaseURI) {
|
if(aBaseURI) {
|
||||||
nsIWineURI *wine_uri;
|
nsres = nsIURI_QueryInterface(aBaseURI, &IID_nsIWineURI, (void**)&base_wine_uri);
|
||||||
|
|
||||||
nsres = nsIURI_QueryInterface(aBaseURI, &IID_nsIWineURI, (void**)&wine_uri);
|
|
||||||
if(NS_SUCCEEDED(nsres)) {
|
if(NS_SUCCEEDED(nsres)) {
|
||||||
nsIWineURI_GetNSContainer(wine_uri, &nscontainer);
|
nsIWineURI_GetNSContainer(base_wine_uri, &nscontainer);
|
||||||
nsIWineURI_GetMoniker(wine_uri, &base_mon);
|
nsIWineURI_GetWineURL(base_wine_uri, &base_wine_url);
|
||||||
nsIWineURI_Release(wine_uri);
|
|
||||||
}else {
|
}else {
|
||||||
ERR("Could not get nsIWineURI: %08x\n", nsres);
|
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)
|
if(nscontainer)
|
||||||
nsIWebBrowserChrome_Release(NSWBCHROME(nscontainer));
|
nsIWebBrowserChrome_Release(NSWBCHROME(nscontainer));
|
||||||
|
|
||||||
if(base_mon) {
|
if(base_wine_url) {
|
||||||
LPWSTR url;
|
WCHAR url[INTERNET_MAX_URL_LENGTH], rel_url[INTERNET_MAX_URL_LENGTH];
|
||||||
IMoniker *mon;
|
LPCSTR speca;
|
||||||
DWORD len;
|
DWORD len;
|
||||||
HRESULT hres;
|
HRESULT hres;
|
||||||
|
|
||||||
len = MultiByteToWideChar(CP_ACP, 0, spec, -1, NULL, 0);
|
nsACString_GetData(aSpec, &speca, NULL);
|
||||||
url = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
|
MultiByteToWideChar(CP_ACP, 0, speca, -1, rel_url, sizeof(rel_url)/sizeof(WCHAR));
|
||||||
MultiByteToWideChar(CP_ACP, 0, spec, -1, url, -1);
|
|
||||||
|
|
||||||
hres = CreateURLMoniker(base_mon, url, &mon);
|
hres = CoInternetCombineUrl(base_wine_url, rel_url,
|
||||||
HeapFree(GetProcessHeap(), 0, url);
|
URL_ESCAPE_SPACES_ONLY|URL_DONT_ESCAPE_EXTRA_INFO,
|
||||||
if(SUCCEEDED(hres)) {
|
url, sizeof(url)/sizeof(WCHAR), &len, 0);
|
||||||
nsIWineURI_SetMoniker((nsIWineURI*)*_retval, mon);
|
if(SUCCEEDED(hres))
|
||||||
IMoniker_Release(mon);
|
nsIWineURI_SetWineURL(wine_uri, url);
|
||||||
}else {
|
else
|
||||||
WARN("CreateURLMoniker failed: %08x\n", hres);
|
WARN("CoCombineUrl failed: %08x\n", hres);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(base_wine_uri)
|
||||||
|
nsIWineURI_Release(base_wine_uri);
|
||||||
|
|
||||||
return nsres;
|
return nsres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue