Jacek Caban : mshtml: Added nsIURI::GetOriginCharset implementation.
Alexandre Julliard
julliard at winehq.org
Wed Nov 21 14:45:16 CST 2012
Module: wine
Branch: master
Commit: 2f5123cbbc8655fc410ed47b0e7dff51d857a3ae
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2f5123cbbc8655fc410ed47b0e7dff51d857a3ae
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Nov 21 15:06:46 2012 +0100
mshtml: Added nsIURI::GetOriginCharset implementation.
---
dlls/mshtml/nsio.c | 34 +++++++++++++++++++++++++---------
1 files changed, 25 insertions(+), 9 deletions(-)
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index e3520d1..89a7fe8 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -63,6 +63,7 @@ struct nsWineURI {
nsChannelBSC *channel_bsc;
IUri *uri;
IUriBuilder *uri_builder;
+ char *origin_charset;
BOOL is_doc_uri;
BOOL is_mutable;
DWORD scheme;
@@ -140,7 +141,7 @@ static BOOL compare_ignoring_frag(IUri *uri1, IUri *uri2)
return ret;
}
-static nsresult create_nsuri(IUri*,HTMLOuterWindow*,NSContainer*,nsWineURI**);
+static nsresult create_nsuri(IUri*,HTMLOuterWindow*,NSContainer*,const char*,nsWineURI**);
static const char *debugstr_nsacstr(const nsACString *nsstr)
{
@@ -1847,6 +1848,7 @@ static nsrefcnt NSAPI nsURI_Release(nsIFileURL *iface)
nsIWebBrowserChrome_Release(&This->container->nsIWebBrowserChrome_iface);
if(This->uri)
IUri_Release(This->uri);
+ heap_free(This->origin_charset);
heap_free(This);
}
@@ -2309,7 +2311,8 @@ static nsresult NSAPI nsURI_Clone(nsIFileURL *iface, nsIURI **_retval)
if(!ensure_uri(This))
return NS_ERROR_UNEXPECTED;
- nsres = create_nsuri(This->uri, This->window_ref ? This->window_ref->window : NULL, This->container, &wine_uri);
+ nsres = create_nsuri(This->uri, This->window_ref ? This->window_ref->window : NULL,
+ This->container, This->origin_charset, &wine_uri);
if(NS_FAILED(nsres)) {
WARN("create_nsuri failed: %08x\n", nsres);
return nsres;
@@ -2384,8 +2387,11 @@ static nsresult NSAPI nsURI_GetAsciiHost(nsIFileURL *iface, nsACString *aAsciiHo
static nsresult NSAPI nsURI_GetOriginCharset(nsIFileURL *iface, nsACString *aOriginCharset)
{
nsWineURI *This = impl_from_nsIFileURL(iface);
- FIXME("(%p)->(%p)\n", This, aOriginCharset);
- return NS_ERROR_NOT_IMPLEMENTED;
+
+ TRACE("(%p)->(%p)\n", This, aOriginCharset);
+
+ nsACString_SetData(aOriginCharset, This->origin_charset);
+ return NS_OK;
}
static nsresult NSAPI nsURL_GetRef(nsIFileURL *iface, nsACString *aRef)
@@ -2481,7 +2487,8 @@ static nsresult NSAPI nsURI_CloneIgnoreRef(nsIFileURL *iface, nsIURI **_retval)
if(!uri)
return NS_ERROR_FAILURE;
- nsres = create_nsuri(uri, This->window_ref ? This->window_ref->window : NULL, This->container, &wine_uri);
+ nsres = create_nsuri(uri, This->window_ref ? This->window_ref->window : NULL, This->container,
+ This->origin_charset, &wine_uri);
IUri_Release(uri);
if(NS_FAILED(nsres)) {
WARN("create_nsuri failed: %08x\n", nsres);
@@ -2850,7 +2857,8 @@ static const nsIStandardURLVtbl nsStandardURLVtbl = {
nsStandardURL_Init
};
-static nsresult create_nsuri(IUri *iuri, HTMLOuterWindow *window, NSContainer *container, nsWineURI **_retval)
+static nsresult create_nsuri(IUri *iuri, HTMLOuterWindow *window, NSContainer *container,
+ const char *origin_charset, nsWineURI **_retval)
{
nsWineURI *ret;
HRESULT hres;
@@ -2874,6 +2882,14 @@ static nsresult create_nsuri(IUri *iuri, HTMLOuterWindow *window, NSContainer *c
if(FAILED(hres))
ret->scheme = URL_SCHEME_UNKNOWN;
+ if(origin_charset && *origin_charset && strcmp(origin_charset, "UTF-8")) {
+ ret->origin_charset = heap_strdupA(origin_charset);
+ if(!ret->origin_charset) {
+ nsIFileURL_Release(&ret->nsIFileURL_iface);
+ return NS_ERROR_OUT_OF_MEMORY;
+ }
+ }
+
TRACE("retval=%p\n", ret);
*_retval = ret;
return NS_OK;
@@ -2890,7 +2906,7 @@ HRESULT create_doc_uri(HTMLOuterWindow *window, const WCHAR *url, nsWineURI **re
if(FAILED(hres))
return hres;
- nsres = create_nsuri(iuri, window, window->doc_obj->nscontainer, &uri);
+ nsres = create_nsuri(iuri, window, window->doc_obj->nscontainer, NULL, &uri);
IUri_Release(iuri);
if(NS_FAILED(nsres))
return E_FAIL;
@@ -2942,7 +2958,7 @@ HRESULT create_redirect_nschannel(const WCHAR *url, nsChannel *orig_channel, nsC
if(orig_channel->uri->window_ref)
window = orig_channel->uri->window_ref->window;
- nsres = create_nsuri(iuri, window, NULL, &uri);
+ nsres = create_nsuri(iuri, window, NULL, NULL, &uri);
IUri_Release(iuri);
if(NS_FAILED(nsres))
return E_FAIL;
@@ -3257,7 +3273,7 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
if(FAILED(hres))
return nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, _retval);
- nsres = create_nsuri(urlmon_uri, window, NULL, &wine_uri);
+ nsres = create_nsuri(urlmon_uri, window, NULL, NULL, &wine_uri);
IUri_Release(urlmon_uri);
if(base_wine_uri)
nsIFileURL_Release(&base_wine_uri->nsIFileURL_iface);
More information about the wine-cvs
mailing list