Jacek Caban : mshtml: Added nsIURI::Clone implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Feb 27 09:32:59 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 9b6c08a243c374bdd6dd58fcec5d6e72b2300bb9
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9b6c08a243c374bdd6dd58fcec5d6e72b2300bb9
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Feb 24 20:31:12 2006 +0100
mshtml: Added nsIURI::Clone implementation.
---
dlls/mshtml/nsio.c | 45 ++++++++++++++++++++++++++++++++-------------
1 files changed, 32 insertions(+), 13 deletions(-)
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 8c86de7..393d088 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -40,7 +40,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
#define NS_IOSERVICE_CLASSNAME "nsIOService"
#define NS_IOSERVICE_CONTRACTID "@mozilla.org/network/io-service;1"
-static IID NS_IOSERVICE_CID =
+static const IID NS_IOSERVICE_CID =
{0x9ac9e770, 0x18bc, 0x11d3, {0x93, 0x37, 0x00, 0x10, 0x4b, 0xa0, 0xfd, 0x40}};
static nsIIOService *nsio = NULL;
@@ -75,6 +75,8 @@ typedef struct {
#define NSUPCHANNEL(x) ((nsIUploadChannel*) &(x)->lpUploadChannelVtbl)
#define NSURI(x) ((nsIURI*) &(x)->lpWineURIVtbl)
+static nsresult create_uri(nsIURI*,NSContainer*,nsIURI**);
+
static BOOL exec_shldocvw_67(NSContainer *container, LPCWSTR url)
{
IOleCommandTarget *cmdtrg = NULL;
@@ -1180,8 +1182,18 @@ static nsresult NSAPI nsURI_SchemeIs(nsI
static nsresult NSAPI nsURI_Clone(nsIWineURI *iface, nsIURI **_retval)
{
nsURI *This = NSURI_THIS(iface);
+ nsIURI *uri;
+ nsresult nsres;
+
TRACE("(%p)->(%p)\n", This, _retval);
- return nsIURI_Clone(This->uri, _retval);
+
+ nsres = nsIURI_Clone(This->uri, &uri);
+ if(NS_FAILED(nsres)) {
+ WARN("Clone failed: %08lx\n", nsres);
+ return nsres;
+ }
+
+ return create_uri(uri, This->container, _retval);
}
static nsresult NSAPI nsURI_Resolve(nsIWineURI *iface, const nsACString *arelativePath,
@@ -1280,6 +1292,23 @@ static const nsIWineURIVtbl nsWineURIVtb
nsURI_SetNSContainer,
};
+static nsresult create_uri(nsIURI *uri, NSContainer *container, nsIURI **_retval)
+{
+ nsURI *ret = HeapAlloc(GetProcessHeap(), 0, sizeof(nsURI));
+
+ ret->lpWineURIVtbl = &nsWineURIVtbl;
+ ret->ref = 1;
+ ret->uri = uri;
+ ret->container = container;
+
+ if(container)
+ nsIWebBrowserChrome_AddRef(NSWBCHROME(container));
+
+ TRACE("retval=%p\n", ret);
+ *_retval = NSURI(ret);
+ return NS_OK;
+}
+
static nsresult NSAPI nsIOService_QueryInterface(nsIIOService *iface, nsIIDRef riid,
nsQIResult result)
{
@@ -1331,7 +1360,6 @@ static nsresult NSAPI nsIOService_NewURI
{
const char *spec = NULL;
nsIURI *uri;
- nsURI *ret;
PRBool is_javascript = FALSE;
nsresult nsres;
@@ -1368,16 +1396,7 @@ static nsresult NSAPI nsIOService_NewURI
return NS_OK;
}
- ret = HeapAlloc(GetProcessHeap(), 0, sizeof(nsURI));
-
- ret->lpWineURIVtbl = &nsWineURIVtbl;
- ret->ref = 1;
- ret->uri = uri;
- ret->container = NULL;
-
- TRACE("_retval = %p\n", ret);
- *_retval = NSURI(ret);
- return NS_OK;
+ return create_uri(uri, NULL, _retval);
}
static nsresult NSAPI nsIOService_NewFileURI(nsIIOService *iface, nsIFile *aFile,
More information about the wine-cvs
mailing list