diff --git a/mozilla/accessible/src/base/nsRootAccessible.cpp b/mozilla/accessible/src/base/nsRootAccessible.cpp index b0a37de6c96..72ed66d5f8c 100644 --- a/mozilla/accessible/src/base/nsRootAccessible.cpp +++ b/mozilla/accessible/src/base/nsRootAccessible.cpp @@ -586,15 +586,15 @@ NS_IMETHODIMP nsDocAccessibleMixin::GetURL(nsAWritableString& aURL) GetDocShellFromPS(presShell, getter_AddRefs(docShell)); nsCOMPtr webNav(do_GetInterface(docShell)); - nsXPIDLCString theURL; + nsCAutoString theURL; if (webNav) { nsCOMPtr pURI; webNav->GetCurrentURI(getter_AddRefs(pURI)); if (pURI) - pURI->GetSpec(getter_Copies(theURL)); + pURI->GetSpec(theURL); } //XXXaaronl Need to use CopyUTF8toUCS2(nsDependentCString(theURL), aURL); when it's written - aURL.Assign(NS_ConvertUTF8toUCS2(theURL).get()); + aURL.Assign(NS_ConvertUTF8toUCS2(theURL)); return NS_OK; } diff --git a/mozilla/caps/src/nsCodebasePrincipal.cpp b/mozilla/caps/src/nsCodebasePrincipal.cpp index 068da13d520..6d01d32c669 100644 --- a/mozilla/caps/src/nsCodebasePrincipal.cpp +++ b/mozilla/caps/src/nsCodebasePrincipal.cpp @@ -151,19 +151,30 @@ nsCodebasePrincipal::GetURI(nsIURI **uri) NS_IMETHODIMP nsCodebasePrincipal::GetOrigin(char **origin) { - nsXPIDLCString s; - if (NS_SUCCEEDED(mURI->GetHost(getter_Copies(s)))) - return mURI->GetPrePath(origin); + nsresult rv; + nsCAutoString s; + if (NS_SUCCEEDED(mURI->GetHost(s))) + rv = mURI->GetPrePath(s); + else { + // Some URIs (e.g., nsSimpleURI) don't support host. Just + // get the full spec. + rv = mURI->GetSpec(s); + } + if (NS_FAILED(rv)) return rv; - // Some URIs (e.g., nsSimpleURI) don't support host. Just - // get the full spec. - return mURI->GetSpec(origin); + *origin = ToNewCString(s); + return *origin ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } NS_IMETHODIMP nsCodebasePrincipal::GetSpec(char **spec) { - return mURI->GetSpec(spec); + nsCAutoString buf; + nsresult rv = mURI->GetSpec(buf); + if (NS_FAILED(rv)) return rv; + + *spec = ToNewCString(buf); + return *spec ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } @@ -189,44 +200,43 @@ nsCodebasePrincipal::Equals(nsIPrincipal *other, PRBool *result) nsCOMPtr otherURI; if (NS_FAILED(otherCodebase->GetURI(getter_AddRefs(otherURI)))) return NS_ERROR_FAILURE; - nsXPIDLCString otherScheme; - nsresult rv = otherURI->GetScheme(getter_Copies(otherScheme)); - nsXPIDLCString myScheme; + nsCAutoString otherScheme; + nsresult rv = otherURI->GetScheme(otherScheme); + nsCAutoString myScheme; if (NS_SUCCEEDED(rv)) - rv = mURI->GetScheme(getter_Copies(myScheme)); - if (NS_SUCCEEDED(rv) && PL_strcmp(otherScheme, myScheme) == 0) - { - - if (PL_strcmp(otherScheme, "file") == 0) + rv = mURI->GetScheme(myScheme); + if (NS_SUCCEEDED(rv) && strcmp(otherScheme.get(), myScheme.get()) == 0) + { + if (strcmp(otherScheme.get(), "file") == 0) { // All file: urls are considered to have the same origin. *result = PR_TRUE; } - else if (PL_strcmp(otherScheme, "imap") == 0 || - PL_strcmp(otherScheme, "mailbox") == 0 || - PL_strcmp(otherScheme, "news") == 0) + else if (strcmp(otherScheme.get(), "imap") == 0 || + strcmp(otherScheme.get(), "mailbox") == 0 || + strcmp(otherScheme.get(), "news") == 0) { // Each message is a distinct trust domain; use the // whole spec for comparison - nsXPIDLCString otherSpec; - if (NS_FAILED(otherURI->GetSpec(getter_Copies(otherSpec)))) + nsCAutoString otherSpec; + if (NS_FAILED(otherURI->GetSpec(otherSpec))) return NS_ERROR_FAILURE; - nsXPIDLCString mySpec; - if (NS_FAILED(mURI->GetSpec(getter_Copies(mySpec)))) + nsCAutoString mySpec; + if (NS_FAILED(mURI->GetSpec(mySpec))) return NS_ERROR_FAILURE; - *result = PL_strcmp(otherSpec, mySpec) == 0; + *result = strcmp(otherSpec.get(), mySpec.get()) == 0; } else { // Need to check the host - nsXPIDLCString otherHost; - rv = otherURI->GetHost(getter_Copies(otherHost)); - nsXPIDLCString myHost; + nsCAutoString otherHost; + rv = otherURI->GetHost(otherHost); + nsCAutoString myHost; if (NS_SUCCEEDED(rv)) - rv = mURI->GetHost(getter_Copies(myHost)); - *result = NS_SUCCEEDED(rv) && PL_strcmp(otherHost, myHost) == 0; + rv = mURI->GetHost(myHost); + *result = NS_SUCCEEDED(rv) && strcmp(otherHost.get(), myHost.get()) == 0; if (*result) - { + { int otherPort; rv = otherURI->GetPort(&otherPort); int myPort; @@ -277,15 +287,12 @@ nsCodebasePrincipal::nsCodebasePrincipal() : mTrusted(PR_FALSE) nsresult nsCodebasePrincipal::Init(nsIURI *uri) { - char *codebase; - if (uri == nsnull || NS_FAILED(uri->GetSpec(&codebase))) + nsCAutoString codebase; + if (uri == nsnull || NS_FAILED(uri->GetSpec(codebase))) return NS_ERROR_FAILURE; - if (NS_FAILED(mJSPrincipals.Init(codebase))) - { - nsCRT::free(codebase); + if (NS_FAILED(mJSPrincipals.Init(ToNewCString(codebase)))) return NS_ERROR_FAILURE; - } - // JSPrincipals::Init adopts codebase, so no need to free now + // JSPrincipals::Init adopts its input mURI = uri; return NS_OK; } @@ -298,7 +305,7 @@ nsCodebasePrincipal::InitFromPersistent(const char* aPrefName, const char* aURLS { nsresult rv; nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), aURLStr, nsnull); + rv = NS_NewURI(getter_AddRefs(uri), nsDependentCString(aURLStr), nsnull); NS_ASSERTION(NS_SUCCEEDED(rv), "Malformed URI in security.principal preference."); if (NS_FAILED(rv)) return rv; diff --git a/mozilla/caps/src/nsScriptSecurityManager.cpp b/mozilla/caps/src/nsScriptSecurityManager.cpp index e70912cc0e3..08b7ca79a46 100644 --- a/mozilla/caps/src/nsScriptSecurityManager.cpp +++ b/mozilla/caps/src/nsScriptSecurityManager.cpp @@ -822,10 +822,10 @@ nsScriptSecurityManager::CheckLoadURIFromScript(JSContext *cx, nsIURI *aURI) } // Report error. - nsXPIDLCString spec; - if (NS_FAILED(aURI->GetSpec(getter_Copies(spec)))) + nsCAutoString spec; + if (NS_FAILED(aURI->GetAsciiSpec(spec))) return NS_ERROR_FAILURE; - JS_ReportError(cx, "illegal URL method '%s'", (const char *)spec); + JS_ReportError(cx, "illegal URL method '%s'", spec.get()); return NS_ERROR_DOM_BAD_URI; } @@ -839,19 +839,19 @@ nsScriptSecurityManager::GetBaseURIScheme(nsIURI* aURI, char** aScheme) nsCOMPtr uri(aURI); //-- get the source scheme - nsXPIDLCString scheme; - rv = uri->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + rv = uri->GetScheme(scheme); if (NS_FAILED(rv)) return rv; //-- If uri is a view-source URI, drill down to the base URI - nsXPIDLCString path; - while(PL_strcmp(scheme, "view-source") == 0) + nsCAutoString path; + while(PL_strcmp(scheme.get(), "view-source") == 0) { - rv = uri->GetPath(getter_Copies(path)); + rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; rv = NS_NewURI(getter_AddRefs(uri), path, nsnull); if (NS_FAILED(rv)) return rv; - rv = uri->GetScheme(getter_Copies(scheme)); + rv = uri->GetScheme(scheme); if (NS_FAILED(rv)) return rv; } @@ -866,30 +866,30 @@ nsScriptSecurityManager::GetBaseURIScheme(nsIURI* aURI, char** aScheme) if (!uri) return NS_ERROR_FAILURE; if (isJAR) { - rv = uri->GetScheme(getter_Copies(scheme)); + rv = uri->GetScheme(scheme); if (NS_FAILED(rv)) return rv; } //-- if uri is an about uri, distinguish 'safe' and 'unsafe' about URIs static const char aboutScheme[] = "about"; - if(nsCRT::strcasecmp(scheme, aboutScheme) == 0) - *aScheme = PL_strdup(scheme); + if(nsCRT::strcasecmp(scheme.get(), aboutScheme) == 0) + *aScheme = nsCRT::strdup(scheme.get()); { - nsXPIDLCString spec; - if(NS_FAILED(uri->GetSpec(getter_Copies(spec)))) + nsCAutoString spec; + if(NS_FAILED(uri->GetAsciiSpec(spec))) return NS_ERROR_FAILURE; const char* page = spec.get() + sizeof(aboutScheme); - if ((PL_strcmp(page, "blank") == 0) || - (PL_strcmp(page, "") == 0) || - (PL_strcmp(page, "mozilla") == 0) || - (PL_strcmp(page, "credits") == 0)) + if ((strcmp(page, "blank") == 0) || + (strcmp(page, "") == 0) || + (strcmp(page, "mozilla") == 0) || + (strcmp(page, "credits") == 0)) { - *aScheme = PL_strdup("about safe"); + *aScheme = nsCRT::strdup("about safe"); return *aScheme ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } } - *aScheme = PL_strdup(scheme); + *aScheme = nsCRT::strdup(scheme.get()); return *aScheme ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } @@ -999,13 +999,13 @@ nsScriptSecurityManager::CheckLoadURI(nsIURI *aSourceURI, nsIURI *aTargetURI, nsresult nsScriptSecurityManager::ReportErrorToConsole(nsIURI* aTarget) { - nsXPIDLCString spec; - nsresult rv = aTarget->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + nsresult rv = aTarget->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; nsAutoString msg; msg.Assign(NS_LITERAL_STRING("The link to ")); - msg.AppendWithConversion(spec); + msg.AppendWithConversion(spec.get()); msg.Append(NS_LITERAL_STRING(" was blocked by the security manager.\nRemote content may not link to local content.")); // Report error in JS console nsCOMPtr console(do_GetService("@mozilla.org/consoleservice;1")); @@ -1034,10 +1034,10 @@ nsScriptSecurityManager::CheckLoadURIStr(const char* aSourceURIStr, const char* PRUint32 aFlags) { nsCOMPtr source; - nsresult rv = NS_NewURI(getter_AddRefs(source), aSourceURIStr, nsnull); + nsresult rv = NS_NewURI(getter_AddRefs(source), nsDependentCString(aSourceURIStr), nsnull); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr target; - rv = NS_NewURI(getter_AddRefs(target), aTargetURIStr, nsnull); + rv = NS_NewURI(getter_AddRefs(target), nsDependentCString(aTargetURIStr), nsnull); NS_ENSURE_SUCCESS(rv, rv); return CheckLoadURI(source, target, aFlags); } @@ -1688,7 +1688,7 @@ Localize(const char *genericString, nsString &result) return ret; } nsIURI *uri = nsnull; - ret = pNetService->NewURI(PROPERTIES_URL, nsnull, &uri); + ret = pNetService->NewURI(NS_LITERAL_CSTRING(PROPERTIES_URL), nsnull, nsnull, &uri); if (NS_FAILED(ret)) { NS_WARNING("cannot create URI\n"); @@ -1715,18 +1715,16 @@ Localize(const char *genericString, nsString &result) NS_WARNING("cannot get string service\n"); return ret; } - char *spec = nsnull; - ret = url->GetSpec(&spec); + nsCAutoString spec; + ret = url->GetAsciiSpec(spec); if (NS_FAILED(ret)) { NS_WARNING("cannot get url spec\n"); nsServiceManager::ReleaseService(kStringBundleServiceCID, pStringService); - nsCRT::free(spec); return ret; } nsIStringBundle *bundle = nsnull; - ret = pStringService->CreateBundle(spec, &bundle); - nsCRT::free(spec); + ret = pStringService->CreateBundle(spec.get(), &bundle); nsServiceManager::ReleaseService(kStringBundleServiceCID, pStringService); if (NS_FAILED(ret)) { diff --git a/mozilla/chrome/src/nsChromeProtocolHandler.cpp b/mozilla/chrome/src/nsChromeProtocolHandler.cpp index fd953bff545..7a75e2ad953 100644 --- a/mozilla/chrome/src/nsChromeProtocolHandler.cpp +++ b/mozilla/chrome/src/nsChromeProtocolHandler.cpp @@ -52,6 +52,7 @@ #include "nsIEventQueueService.h" #include "nsIFastLoadService.h" #include "nsIFile.h" +#include "nsIFileURL.h" #include "nsIFileChannel.h" #include "nsIIOService.h" #include "nsIJARChannel.h" @@ -60,11 +61,13 @@ #include "nsIObjectOutputStream.h" #include "nsIScriptSecurityManager.h" #include "nsIServiceManager.h" +#include "nsIStandardURL.h" #include "nsIStreamListener.h" #include "nsIXULPrototypeCache.h" #include "nsIXULPrototypeDocument.h" #include "nsNetCID.h" #include "nsXPIDLString.h" +#include "nsString.h" #include "prlog.h" //---------------------------------------------------------------------- @@ -515,11 +518,9 @@ nsChromeProtocolHandler::Create(nsISupports *aOuter, REFNSIID aIID, void **aResu // nsIProtocolHandler methods: NS_IMETHODIMP -nsChromeProtocolHandler::GetScheme(char* *result) +nsChromeProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("chrome"); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = "chrome"; return NS_OK; } @@ -546,7 +547,9 @@ nsChromeProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsChromeProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsChromeProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, nsIURI **result) { nsresult rv; @@ -554,26 +557,15 @@ nsChromeProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, // Chrome: URLs (currently) have no additional structure beyond that provided // by standard URLs, so there is no "outer" given to CreateInstance - nsCOMPtr url(do_CreateInstance(kStandardURLCID, &rv)); + nsCOMPtr url(do_CreateInstance(kStandardURLCID, &rv)); if (NS_FAILED(rv)) return rv; - if (aBaseURI) { - nsXPIDLCString aResolvedURI; - rv = aBaseURI->Resolve(aSpec, getter_Copies(aResolvedURI)); - if (NS_SUCCEEDED(rv)) - rv = url->SetSpec(aResolvedURI); - } - else { - rv = url->SetSpec((char*)aSpec); - } - + rv = url->Init(nsIStandardURL::URLTYPE_STANDARD, -1, aSpec, aCharset, aBaseURI); if (NS_FAILED(rv)) return rv; - *result = url; - NS_ADDREF(*result); - return rv; + return CallQueryInterface(url, result); } NS_IMETHODIMP @@ -623,7 +615,7 @@ nsChromeProtocolHandler::NewChannel(nsIURI* aURI, if (NS_FAILED(rv)) return rv; nsCOMPtr chromeURI; - rv = ioServ->NewURI(spec, nsnull, getter_AddRefs(chromeURI)); + rv = ioServ->NewURI(spec, nsnull, nsnull, getter_AddRefs(chromeURI)); if (NS_FAILED(rv)) return rv; rv = ioServ->NewChannelFromURI(chromeURI, getter_AddRefs(result)); @@ -649,11 +641,11 @@ nsChromeProtocolHandler::NewChannel(nsIURI* aURI, // Get a system principal for xul files and set the owner // property of the result nsCOMPtr url = do_QueryInterface(aURI); - nsXPIDLCString fileExtension; - rv = url->GetFileExtension(getter_Copies(fileExtension)); - if (PL_strcasecmp(fileExtension, "xul") == 0 || - PL_strcasecmp(fileExtension, "html") == 0 || - PL_strcasecmp(fileExtension, "xml") == 0) + nsCAutoString fileExtension; + rv = url->GetFileExtension(fileExtension); + if (PL_strcasecmp(fileExtension.get(), "xul") == 0 || + PL_strcasecmp(fileExtension.get(), "html") == 0 || + PL_strcasecmp(fileExtension.get(), "xml") == 0) { nsCOMPtr securityManager = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); diff --git a/mozilla/chrome/src/nsChromeRegistry.cpp b/mozilla/chrome/src/nsChromeRegistry.cpp index 09b440a4944..4d7d35cfa3a 100644 --- a/mozilla/chrome/src/nsChromeRegistry.cpp +++ b/mozilla/chrome/src/nsChromeRegistry.cpp @@ -221,7 +221,7 @@ NS_IMETHODIMP nsOverlayEnumerator::GetNext(nsISupports **aResult) return rv; nsCOMPtr url; - rv = NS_NewURI(getter_AddRefs(url), NS_LossyConvertUCS2toASCII(valueStr).get()); + rv = NS_NewURI(getter_AddRefs(url), NS_ConvertUCS2toUTF8(valueStr)); if (NS_FAILED(rv)) return NS_OK; @@ -387,16 +387,13 @@ SplitURL(nsIURI *aChromeURI, nsCString& aPackage, nsCString& aProvider, nsCStrin nsresult rv; - nsXPIDLCString str; - rv = aChromeURI->GetSpec(getter_Copies(str)); + nsCAutoString str; + rv = aChromeURI->GetSpec(str); if (NS_FAILED(rv)) return rv; - if (!str.get()) - return NS_ERROR_OUT_OF_MEMORY; - // We only want to deal with "chrome:" URLs here. We could return // an error code if the URL isn't properly prefixed here... - if (PL_strncmp(str, kChromePrefix, sizeof(kChromePrefix) - 1) != 0) + if (PL_strncmp(str.get(), kChromePrefix, sizeof(kChromePrefix) - 1) != 0) return NS_ERROR_INVALID_ARG; // Cull out the "package" string; e.g., "navigator" @@ -497,7 +494,7 @@ nsChromeRegistry::Canonify(nsIURI* aChromeURI) canonical += "/"; canonical += file; - return aChromeURI->SetSpec(canonical.get()); + return aChromeURI->SetSpec(canonical); } NS_IMETHODIMP @@ -534,11 +531,11 @@ nsChromeRegistry::ConvertChromeURL(nsIURI* aChromeURL, char** aResult) #ifdef DEBUG if (NS_FAILED(rv)) { nsCAutoString msg("chrome: failed to get base url"); - nsXPIDLCString url; - rv = aChromeURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + rv = aChromeURL->GetSpec(url); if (NS_SUCCEEDED(rv)) { msg += " for "; - msg += (const char*)url; + msg += url.get(); } msg += " -- using wacky default"; NS_WARNING(msg.get()); @@ -858,10 +855,10 @@ NS_IMETHODIMP nsChromeRegistry::GetStyleSheets(nsIURI *aChromeURL, nsISupportsAr nsCOMPtr url(do_QueryInterface(supp)); if (url) { nsCOMPtr sheet; - nsXPIDLCString str; - rv = url->GetSpec(getter_Copies(str)); + nsCAutoString str; + rv = url->GetSpec(str); if (NS_FAILED(rv)) return rv; - rv = LoadStyleSheet(getter_AddRefs(sheet), nsCAutoString(str)); + rv = LoadStyleSheet(getter_AddRefs(sheet), str); if (NS_FAILED(rv)) return rv; rv = (*aResult)->AppendElement(sheet) ? NS_OK : NS_ERROR_FAILURE; if (NS_FAILED(rv)) return rv; @@ -894,13 +891,13 @@ NS_IMETHODIMP nsChromeRegistry::GetDynamicInfo(nsIURI *aChromeURL, PRBool aIsOve if (NS_FAILED(rv)) return rv; } - nsXPIDLCString lookup; - rv = aChromeURL->GetSpec(getter_Copies(lookup)); + nsCAutoString lookup; + rv = aChromeURL->GetSpec(lookup); if (NS_FAILED(rv)) return rv; // Get the chromeResource from this lookup string nsCOMPtr chromeResource; - rv = GetResource(nsCAutoString(lookup), getter_AddRefs(chromeResource)); + rv = GetResource(lookup, getter_AddRefs(chromeResource)); if (NS_FAILED(rv)) { NS_ERROR("Unable to retrieve the resource corresponding to the chrome skin or content."); return rv; @@ -1345,7 +1342,7 @@ NS_IMETHODIMP nsChromeRegistry::WriteInfoToDataSource(const char *aDocURI, nsresult rv; nsCOMPtr uri; nsCAutoString str(aDocURI); - rv = NS_NewURI(getter_AddRefs(uri), str.get()); + rv = NS_NewURI(getter_AddRefs(uri), str); if (NS_FAILED(rv)) return rv; nsCOMPtr dataSource; @@ -2529,13 +2526,7 @@ nsChromeRegistry::GetProfileRoot(nsCString& aFileURL) if (NS_FAILED(rv)) return rv; - nsXPIDLCString urlSpec; - rv = NS_GetURLSpecFromFile(userChromeDir, getter_Copies(urlSpec)); - if (NS_FAILED(rv)) - return rv; - aFileURL = urlSpec; - - return NS_OK; + return NS_GetURLSpecFromFile(userChromeDir, aFileURL); } NS_IMETHODIMP @@ -2550,13 +2541,7 @@ nsChromeRegistry::GetInstallRoot(nsCString& aFileURL) if (NS_FAILED(rv) || !appChromeDir) return NS_ERROR_FAILURE; - nsXPIDLCString urlSpec; - rv = NS_GetURLSpecFromFile(appChromeDir, getter_Copies(urlSpec)); - if (NS_FAILED(rv)) - return rv; - aFileURL = urlSpec; - - return NS_OK; + return NS_GetURLSpecFromFile(appChromeDir, aFileURL); } NS_IMETHODIMP @@ -2719,7 +2704,7 @@ nsChromeRegistry::GetAgentSheets(nsIDocShell* aDocShell, nsISupportsArray **aRes nsCOMPtr docURL; doc->GetDocumentURL(getter_AddRefs(docURL)); nsCOMPtr url; - rv = NS_NewURI(getter_AddRefs(url), token, docURL); + rv = NS_NewURI(getter_AddRefs(url), nsDependentCString(token), nsnull, docURL); PRBool enabled = PR_FALSE; nsCOMPtr sheet; @@ -2790,7 +2775,7 @@ nsChromeRegistry::GetUserSheets(PRBool aIsChrome, nsISupportsArray **aResult) nsresult nsChromeRegistry::LoadStyleSheet(nsICSSStyleSheet** aSheet, const nsCString& aURL) { nsCOMPtr uri; - nsresult rv = NS_NewURI(getter_AddRefs(uri), aURL.get()); + nsresult rv = NS_NewURI(getter_AddRefs(uri), aURL); if (NS_FAILED(rv)) return rv; rv = LoadStyleSheetWithURL(uri, aSheet); @@ -3084,11 +3069,8 @@ nsChromeRegistry::ProcessNewChromeBuffer(char *aBuffer, PRInt32 aLength) /* xpidl strings aren't unified with strings, so this fu is necessary. * all we want here is the canonical url */ - nsXPIDLCString chromeURLfoopy; - rv = NS_GetURLSpecFromFile(chromeFile, getter_Copies(chromeURLfoopy)); - if (NS_FAILED(rv)) - return rv; - chromeURL = chromeURLfoopy; + rv = NS_GetURLSpecFromFile(chromeFile, chromeURL); + if (NS_FAILED(rv)) return rv; /* if we're a file, we must be a jar file. do appropriate string munging. * otherwise, the string we got from GetSpec is fine. diff --git a/mozilla/content/base/src/nsContentAreaDragDrop.cpp b/mozilla/content/base/src/nsContentAreaDragDrop.cpp index 0ef14dbd4ae..b85f1bb529c 100644 --- a/mozilla/content/base/src/nsContentAreaDragDrop.cpp +++ b/mozilla/content/base/src/nsContentAreaDragDrop.cpp @@ -298,9 +298,9 @@ nsContentAreaDragDrop::ExtractURLFromData(const nsACString & inFlavor, nsISuppor nsCOMPtr ioService(do_GetService("@mozilla.org/network/io-service;1")); nsCOMPtr file(do_QueryInterface(inDataWrapper)); if ( ioService && file ) { - nsXPIDLCString url; - ioService->GetURLSpecFromFile(file, getter_Copies(url)); - outURL = NS_ConvertUTF8toUCS2(url.get()); + nsCAutoString url; + ioService->GetURLSpecFromFile(file, url); + outURL = NS_ConvertUTF8toUCS2(url); } } } diff --git a/mozilla/content/base/src/nsDocument.cpp b/mozilla/content/base/src/nsDocument.cpp index 3d79523b118..46d5cb82be1 100644 --- a/mozilla/content/base/src/nsDocument.cpp +++ b/mozilla/content/base/src/nsDocument.cpp @@ -3138,11 +3138,9 @@ nsDocument::GetBaseURI(nsAWritableString &aURI) { aURI.Truncate(); if (mDocumentBaseURL) { - nsXPIDLCString spec; - mDocumentBaseURL->GetSpec(getter_Copies(spec)); - if (spec) { - CopyASCIItoUCS2(nsDependentCString(spec), aURI); - } + nsCAutoString spec; + mDocumentBaseURL->GetSpec(spec); + aURI = NS_ConvertUTF8toUCS2(spec); } return NS_OK; } diff --git a/mozilla/content/base/src/nsDocumentViewer.cpp b/mozilla/content/base/src/nsDocumentViewer.cpp index 03df8a72b31..c9aa5912f48 100644 --- a/mozilla/content/base/src/nsDocumentViewer.cpp +++ b/mozilla/content/base/src/nsDocumentViewer.cpp @@ -1302,12 +1302,11 @@ DocumentViewerImpl::LoadComplete(nsresult aStatus) mDocument->GetDocumentURL(getter_AddRefs(uri)); if (uri.get() != nsnull) { //printf("DEBUG: getting spec fro uri (%p)\n", uri.get()); - char *spec = nsnull; - uri->GetSpec(&spec); - if (spec && !strcmp(spec, "chrome://navigator/content/navigator.xul")) { + nsCAutoString spec; + uri->GetSpec(spec); + if (!strcmp(spec.get(), "chrome://navigator/content/navigator.xul")) { NS_TIMELINE_MARK("Navigator Window visible now"); } - CRTFREEIF(spec); } } #endif /* MOZ_TIMELINE */ @@ -2461,11 +2460,9 @@ DocumentViewerImpl::GetWebShellTitleAndURL(nsIWebShell * aWebShell, doc->GetDocumentURL(getter_AddRefs(url)); if (!url) return; - nsXPIDLCString urlCStr; - url->GetSpec(getter_Copies(urlCStr)); - if (urlCStr.get()) { - *aURLStr = ToNewUnicode(urlCStr); - } + nsCAutoString urlCStr; + url->GetSpec(urlCStr); + *aURLStr = ToNewUnicode(NS_ConvertUTF8toUCS2(urlCStr)); } //------------------------------------------------------- diff --git a/mozilla/content/base/src/nsGenericElement.cpp b/mozilla/content/base/src/nsGenericElement.cpp index ea527ab844b..2bb0fd95d1e 100644 --- a/mozilla/content/base/src/nsGenericElement.cpp +++ b/mozilla/content/base/src/nsGenericElement.cpp @@ -237,11 +237,9 @@ nsNode3Tearoff::GetBaseURI(nsAWritableString& aURI) } if (uri) { - nsXPIDLCString spec; - - uri->GetSpec(getter_Copies(spec)); - - CopyASCIItoUCS2(nsDependentCString(spec), aURI); + nsCAutoString spec; + uri->GetSpec(spec); + aURI = NS_ConvertUTF8toUCS2(spec); } return NS_OK; @@ -2623,7 +2621,7 @@ nsGenericElement::TriggerLink(nsIPresContext* aPresContext, do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); nsCOMPtr absURI; if (NS_SUCCEEDED(rv)) - rv = NS_NewURI(getter_AddRefs(absURI), absURLSpec, aBaseURL); + rv = NS_NewURI(getter_AddRefs(absURI), absURLSpec, nsnull, aBaseURL); if (NS_SUCCEEDED(rv)) proceed = securityManager->CheckLoadURI(aBaseURL, absURI, nsIScriptSecurityManager::STANDARD); diff --git a/mozilla/content/base/src/nsScriptLoader.cpp b/mozilla/content/base/src/nsScriptLoader.cpp index cd621de819b..76ce84d4157 100644 --- a/mozilla/content/base/src/nsScriptLoader.cpp +++ b/mozilla/content/base/src/nsScriptLoader.cpp @@ -348,7 +348,7 @@ nsScriptLoader::ProcessScriptElement(nsIDOMHTMLScriptElement *aElement, // Use the SRC attribute value to load the URL mDocument->GetBaseURL(*getter_AddRefs(baseURI)); - rv = NS_NewURI(getter_AddRefs(scriptURI), src, baseURI); + rv = NS_NewURI(getter_AddRefs(scriptURI), src, nsnull, baseURI); if (NS_FAILED(rv)) { return FireErrorNotification(rv, aElement, aObserver); } @@ -568,10 +568,10 @@ nsScriptLoader::EvaluateScript(nsScriptLoadRequest* aRequest, NS_ASSERTION(principal, "principal required for document"); nsAutoString ret; - nsXPIDLCString url; + nsCAutoString url; if (aRequest->mURI) { - rv = aRequest->mURI->GetSpec(getter_Copies(url)); + rv = aRequest->mURI->GetSpec(url); if (NS_FAILED(rv)) { return rv; } @@ -580,7 +580,7 @@ nsScriptLoader::EvaluateScript(nsScriptLoadRequest* aRequest, context->SetProcessingScriptTag(PR_TRUE); PRBool isUndefined; - context->EvaluateString(aScript, nsnull, principal, url, + context->EvaluateString(aScript, nsnull, principal, url.get(), aRequest->mLineNo, aRequest->mJSVersion, ret, &isUndefined); diff --git a/mozilla/content/base/src/nsStyleSet.cpp b/mozilla/content/base/src/nsStyleSet.cpp index e3efe7dcb71..ca9dc575c8b 100644 --- a/mozilla/content/base/src/nsStyleSet.cpp +++ b/mozilla/content/base/src/nsStyleSet.cpp @@ -363,8 +363,8 @@ StyleSetImpl::StyleSetImpl() NS_INIT_REFCNT(); if (gInstances++ == 0) { - const char kQuirk_href[] = "resource:/res/quirk.css"; - NS_NewURI (&gQuirkURI, kQuirk_href); + static const char kQuirk_href[] = "resource:/res/quirk.css"; + NS_NewURI (&gQuirkURI, NS_LITERAL_CSTRING(kQuirk_href)); NS_ASSERTION (gQuirkURI != 0, "Cannot allocate nsStyleSetImpl::gQuirkURI"); } } diff --git a/mozilla/content/base/src/nsSyncLoadService.cpp b/mozilla/content/base/src/nsSyncLoadService.cpp index 7f8a918f452..27191c77108 100644 --- a/mozilla/content/base/src/nsSyncLoadService.cpp +++ b/mozilla/content/base/src/nsSyncLoadService.cpp @@ -210,7 +210,7 @@ nsSyncLoader::LoadDocument(nsIURI* documentURI, nsIDocument *aLoader, nsIDOMDocu getter_AddRefs(DOMDocument)); NS_ENSURE_SUCCESS(rv, rv); - rv = NS_OpenURI(getter_AddRefs(mChannel), documentURI, nsnull, loadGroup); + rv = NS_NewChannel(getter_AddRefs(mChannel), documentURI, nsnull, loadGroup); NS_ENSURE_SUCCESS(rv, rv); // Make sure we've been opened diff --git a/mozilla/content/build/nsContentDLF.cpp b/mozilla/content/build/nsContentDLF.cpp index bb95a4e3ef7..458813929af 100644 --- a/mozilla/content/build/nsContentDLF.cpp +++ b/mozilla/content/build/nsContentDLF.cpp @@ -317,7 +317,7 @@ nsContentDLF::CreateBlankDocument(nsILoadGroup *aLoadGroup, nsIDocument **aDocum if (blankDoc) { // initialize nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), "about:blank", 0); + NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING("about:blank")); if (uri) rv = blankDoc->ResetToURI(uri, aLoadGroup); } @@ -674,7 +674,7 @@ nsContentDLF::EnsureUAStyleSheet() // Load the UA style sheet nsCOMPtr uri; - nsresult rv = NS_NewURI(getter_AddRefs(uri), UA_CSS_URL); + nsresult rv = NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING(UA_CSS_URL)); if (NS_FAILED(rv)) { #ifdef DEBUG printf("*** open of %s failed: error=%x\n", UA_CSS_URL, rv); diff --git a/mozilla/content/html/content/src/nsFormSubmission.cpp b/mozilla/content/html/content/src/nsFormSubmission.cpp index 3ea7f5da5ae..7d30356bb8c 100644 --- a/mozilla/content/html/content/src/nsFormSubmission.cpp +++ b/mozilla/content/html/content/src/nsFormSubmission.cpp @@ -302,8 +302,8 @@ nsFSURLEncoded::GetEncodedSubmission(nsIURI* aURI, return NS_OK; } - nsXPIDLCString path; - rv = aURI->GetPath(getter_Copies(path)); + nsCAutoString path; + rv = aURI->GetPath(path); NS_ENSURE_SUCCESS(rv, rv); // Bug 42616: Trim off named anchor and save it to add later PRInt32 namedAnchorPos = path.FindChar('#'); @@ -324,7 +324,7 @@ nsFSURLEncoded::GetEncodedSubmission(nsIURI* aURI, // Bug 42616: Add named anchor to end after query string path.Append(mQueryString + namedAnchor); - aURI->SetPath(path.get()); + aURI->SetPath(path); } return rv; @@ -736,8 +736,8 @@ nsFormSubmission::SubmitTo(nsIURI* aActionURL, const nsAString& aTarget, nsCOMPtr handler; aPresContext->GetLinkHandler(getter_AddRefs(handler)); if (handler) { - nsXPIDLCString actionURLSpec; - aActionURL->GetSpec(getter_Copies(actionURLSpec)); + nsCAutoString actionURLSpec; + aActionURL->GetSpec(actionURLSpec); handler->OnLinkClick(aSource, eLinkVerb_Replace, NS_ConvertUTF8toUCS2(actionURLSpec).get(), diff --git a/mozilla/content/html/content/src/nsGenericHTMLElement.cpp b/mozilla/content/html/content/src/nsGenericHTMLElement.cpp index 34e7f9aa95d..e407a7c13cd 100644 --- a/mozilla/content/html/content/src/nsGenericHTMLElement.cpp +++ b/mozilla/content/html/content/src/nsGenericHTMLElement.cpp @@ -68,6 +68,7 @@ #include "nsISupportsArray.h" #include "nsIURL.h" #include "nsNetUtil.h" +#include "nsEscape.h" #include "nsStyleConsts.h" #include "nsIFrame.h" #include "nsIScrollableFrame.h" @@ -1416,8 +1417,7 @@ nsGenericHTMLElement::HandleDOMEventForAnchors(nsIContent* aOuter, // Only bother to handle the mouse event if there was an href // specified. if (hrefCStr) { - nsAutoString href; - href.AssignWithConversion(hrefCStr); + NS_ConvertUTF8toUCS2 href(hrefCStr); // Strip off any unneeded CF/LF (for Bug 52119) // It can't be done in the parser because of Bug 15204 href.StripChars("\r\n"); @@ -2261,7 +2261,7 @@ nsGenericHTMLElement::GetBaseURL(const nsHTMLValue& aBaseHref, nsIURI* url = nsnull; { - result = NS_NewURI(&url, baseHref, docBaseURL); + result = NS_NewURI(&url, baseHref, nsnull, docBaseURL); } NS_IF_RELEASE(docBaseURL); *aBaseURL = url; @@ -4483,10 +4483,10 @@ nsGenericHTMLElement::SetProtocolInHrefString(const nsAReadableString &aHref, aProtocol.EndReading(end); nsAString::const_iterator iter(start); FindCharInReadable(':', iter, end); - uri->SetScheme(NS_ConvertUCS2toUTF8(Substring(start, iter)).get()); + uri->SetScheme(NS_ConvertUCS2toUTF8(Substring(start, iter))); - nsXPIDLCString newHref; - uri->GetSpec(getter_Copies(newHref)); + nsCAutoString newHref; + uri->GetSpec(newHref); aResult.Assign(NS_ConvertUTF8toUCS2(newHref)); @@ -4505,10 +4505,10 @@ nsGenericHTMLElement::SetHostnameInHrefString(const nsAReadableString &aHref, if (NS_FAILED(rv)) return rv; - uri->SetHost(NS_ConvertUCS2toUTF8(aHostname).get()); + uri->SetHost(NS_ConvertUCS2toUTF8(aHostname)); - nsXPIDLCString newHref; - uri->GetSpec(getter_Copies(newHref)); + nsCAutoString newHref; + uri->GetSpec(newHref); aResult.Assign(NS_ConvertUTF8toUCS2(newHref)); @@ -4531,10 +4531,10 @@ nsGenericHTMLElement::SetPathnameInHrefString(const nsAReadableString &aHref, if (NS_FAILED(rv)) return rv; - url->SetFilePath(NS_ConvertUCS2toUTF8(aPathname).get()); + url->SetFilePath(NS_ConvertUCS2toUTF8(aPathname)); - nsXPIDLCString newHref; - uri->GetSpec(getter_Copies(newHref)); + nsCAutoString newHref; + uri->GetSpec(newHref); aResult.Assign(NS_ConvertUTF8toUCS2(newHref)); return NS_OK; @@ -4555,17 +4555,17 @@ nsGenericHTMLElement::SetHostInHrefString(const nsAReadableString &aHref, if (NS_FAILED(rv)) return rv; - nsXPIDLCString scheme; - uri->GetScheme(getter_Copies(scheme)); - nsXPIDLCString preHost; - uri->GetPreHost(getter_Copies(preHost)); - nsXPIDLCString path; - uri->GetPath(getter_Copies(path)); + nsCAutoString scheme, userpass, path; + uri->GetScheme(scheme); + uri->GetUserPass(userpass); + uri->GetPath(path); + + if (!userpass.IsEmpty()) + userpass.Append('@'); aResult.Assign(NS_ConvertUTF8toUCS2(scheme) + NS_LITERAL_STRING("://") + - NS_ConvertUTF8toUCS2(preHost) + aHost + + NS_ConvertUTF8toUCS2(userpass) + aHost + NS_ConvertUTF8toUCS2(path)); - return NS_OK; } @@ -4586,10 +4586,10 @@ nsGenericHTMLElement::SetSearchInHrefString(const nsAReadableString &aHref, if (NS_FAILED(rv)) return rv; - url->SetQuery(NS_ConvertUCS2toUTF8(aSearch).get()); + url->SetQuery(NS_ConvertUCS2toUTF8(aSearch)); - nsXPIDLCString newHref; - uri->GetSpec(getter_Copies(newHref)); + nsCAutoString newHref; + uri->GetSpec(newHref); aResult.Assign(NS_ConvertUTF8toUCS2(newHref)); return NS_OK; @@ -4612,10 +4612,10 @@ nsGenericHTMLElement::SetHashInHrefString(const nsAReadableString &aHref, if (NS_FAILED(rv)) return rv; - rv = url->SetRef(NS_ConvertUCS2toUTF8(aHash).get()); + rv = url->SetRef(NS_ConvertUCS2toUTF8(aHash)); - nsXPIDLCString newHref; - uri->GetSpec(getter_Copies(newHref)); + nsCAutoString newHref; + uri->GetSpec(newHref); aResult.Assign(NS_ConvertUTF8toUCS2(newHref)); return NS_OK; @@ -4641,8 +4641,8 @@ nsGenericHTMLElement::SetPortInHrefString(const nsAReadableString &aHref, uri->SetPort(port); - nsXPIDLCString newHref; - uri->GetSpec(getter_Copies(newHref)); + nsCAutoString newHref; + uri->GetSpec(newHref); aResult.Assign(NS_ConvertUTF8toUCS2(newHref)); return NS_OK; @@ -4658,12 +4658,10 @@ nsGenericHTMLElement::GetProtocolFromHrefString(const nsAReadableString& aHref, NS_ENSURE_TRUE(nsHTMLUtils::IOService, NS_ERROR_FAILURE); - nsXPIDLCString protocol; + nsCAutoString protocol; nsresult rv = - nsHTMLUtils::IOService->ExtractScheme(NS_ConvertUCS2toUTF8(aHref).get(), - nsnull, nsnull, - getter_Copies(protocol)); + nsHTMLUtils::IOService->ExtractScheme(NS_ConvertUCS2toUTF8(aHref), protocol); if (NS_SUCCEEDED(rv)) { aProtocol.Assign(NS_ConvertASCIItoUCS2(protocol) + NS_LITERAL_STRING(":")); @@ -4681,7 +4679,7 @@ nsGenericHTMLElement::GetProtocolFromHrefString(const nsAReadableString& aHref, } if (uri) { - uri->GetScheme(getter_Copies(protocol)); + uri->GetScheme(protocol); } if (protocol.IsEmpty()) { @@ -4708,22 +4706,12 @@ nsGenericHTMLElement::GetHostFromHrefString(const nsAReadableString& aHref, if (NS_FAILED(rv)) return rv; - nsXPIDLCString host; - rv = uri->GetHost(getter_Copies(host)); + nsCAutoString hostport; + rv = uri->GetHostPort(hostport); if (NS_FAILED(rv)) return rv; - aHost.Assign(NS_ConvertASCIItoUCS2(host)); - - PRInt32 port; - uri->GetPort(&port); - if (-1 != port) { - aHost.Append(PRUnichar(':')); - nsAutoString portStr; - portStr.AppendInt(port, 10); - aHost.Append(portStr); - } - + aHost.Assign(NS_ConvertUTF8toUCS2(hostport)); return NS_OK; } @@ -4738,13 +4726,12 @@ nsGenericHTMLElement::GetHostnameFromHrefString(const nsAReadableString& aHref, if (NS_FAILED(rv)) return rv; - nsXPIDLCString host; - rv = url->GetHost(getter_Copies(host)); + nsCAutoString host; + rv = url->GetHost(host); if (NS_FAILED(rv)) return rv; - CopyASCIItoUCS2(host, aHostname); - + aHostname.Assign(NS_ConvertUTF8toUCS2(host)); return NS_OK; } @@ -4764,14 +4751,12 @@ nsGenericHTMLElement::GetPathnameFromHrefString(const nsAReadableString& aHref, if (NS_FAILED(rv)) return rv; - nsXPIDLCString file; - rv = url->GetFilePath(getter_Copies(file)); + nsCAutoString file; + rv = url->GetFilePath(file); if (NS_FAILED(rv)) return rv; - // XXX is filepath really ASCII and not UTF8? - CopyASCIItoUCS2(file, aPathname); - + aPathname.Assign(NS_ConvertUTF8toUCS2(file)); return NS_OK; } @@ -4791,16 +4776,13 @@ nsGenericHTMLElement::GetSearchFromHrefString(const nsAReadableString& aHref, if (NS_FAILED(rv)) return rv; - nsXPIDLCString search; - rv = url->GetEscapedQuery(getter_Copies(search)); + nsCAutoString search; + rv = url->GetQuery(search); if (NS_FAILED(rv)) return rv; - if (!search.IsEmpty()) { - // XXX is escapedQuery really ASCII or UTF8 - CopyASCIItoUCS2(NS_LITERAL_CSTRING("?") + search, aSearch); - } - + if (!search.IsEmpty()) + aSearch.Assign(NS_LITERAL_STRING("?") + NS_ConvertUTF8toUCS2(search)); return NS_OK; } @@ -4849,14 +4831,13 @@ nsGenericHTMLElement::GetHashFromHrefString(const nsAReadableString& aHref, if (NS_FAILED(rv)) return rv; - nsXPIDLCString ref; - rv = url->GetRef(getter_Copies(ref)); + nsCAutoString ref; + rv = url->GetRef(ref); if (NS_FAILED(rv)) return rv; + NS_UnescapeURL(ref); // XXX may result in random non-ASCII bytes! - if (!ref.IsEmpty()) { - CopyASCIItoUCS2(NS_LITERAL_CSTRING("#") + ref, aHash); - } - + if (!ref.IsEmpty()) + aHash.Assign(NS_LITERAL_STRING("#") + NS_ConvertASCIItoUCS2(ref)); return NS_OK; } diff --git a/mozilla/content/html/content/src/nsHTMLAnchorElement.cpp b/mozilla/content/html/content/src/nsHTMLAnchorElement.cpp index 16f7c795465..8faec73cc04 100644 --- a/mozilla/content/html/content/src/nsHTMLAnchorElement.cpp +++ b/mozilla/content/html/content/src/nsHTMLAnchorElement.cpp @@ -775,9 +775,11 @@ nsHTMLAnchorElement::GetHrefCString(char* &aBuf) if (baseURL) { // Get absolute URL. - NS_MakeAbsoluteURIWithCharset(&aBuf, relURLSpec, mDocument, baseURL, + nsCAutoString buf; + NS_MakeAbsoluteURIWithCharset(buf, relURLSpec, mDocument, baseURL, nsHTMLUtils::IOService, nsHTMLUtils::CharsetMgr); + aBuf = ToNewCString(buf); } else { // Absolute URL is same as relative URL. diff --git a/mozilla/content/html/content/src/nsHTMLAreaElement.cpp b/mozilla/content/html/content/src/nsHTMLAreaElement.cpp index b691ab72050..cf07b3c3d01 100644 --- a/mozilla/content/html/content/src/nsHTMLAreaElement.cpp +++ b/mozilla/content/html/content/src/nsHTMLAreaElement.cpp @@ -516,8 +516,10 @@ nsHTMLAreaElement::GetHrefCString(char* &aBuf) if (baseURL) { // Get absolute URL. - NS_MakeAbsoluteURIWithCharset(&aBuf, relURLSpec, mDocument, baseURL, + nsCAutoString buf; + NS_MakeAbsoluteURIWithCharset(buf, relURLSpec, mDocument, baseURL, nsHTMLUtils::IOService, nsHTMLUtils::CharsetMgr); + aBuf = ToNewCString(buf); } else { // Absolute URL is same as relative URL. diff --git a/mozilla/content/html/content/src/nsHTMLFormElement.cpp b/mozilla/content/html/content/src/nsHTMLFormElement.cpp index 3553348df22..6400b63f45c 100644 --- a/mozilla/content/html/content/src/nsHTMLFormElement.cpp +++ b/mozilla/content/html/content/src/nsHTMLFormElement.cpp @@ -900,7 +900,7 @@ nsHTMLFormElement::GetActionURL(nsIURI** aActionURL) rv = docURL->Clone(getter_AddRefs(actionURL)); NS_ENSURE_SUCCESS(rv, rv); } else { - rv = NS_NewURI(getter_AddRefs(actionURL), action, docURL); + rv = NS_NewURI(getter_AddRefs(actionURL), action, nsnull, docURL); NS_ENSURE_SUCCESS(rv, rv); } diff --git a/mozilla/content/html/content/src/nsHTMLImageElement.cpp b/mozilla/content/html/content/src/nsHTMLImageElement.cpp index 57ae1a9fa93..42cc280872b 100644 --- a/mozilla/content/html/content/src/nsHTMLImageElement.cpp +++ b/mozilla/content/html/content/src/nsHTMLImageElement.cpp @@ -913,7 +913,7 @@ nsHTMLImageElement::SetSrcInner(nsIURI* aBaseURL, } nsCOMPtr uri; - result = NS_NewURI(getter_AddRefs(uri), aSrc, aBaseURL); + result = NS_NewURI(getter_AddRefs(uri), aSrc, nsnull, aBaseURL); if (NS_FAILED(result)) return result; nsCOMPtr document; diff --git a/mozilla/content/html/content/src/nsHTMLLinkElement.cpp b/mozilla/content/html/content/src/nsHTMLLinkElement.cpp index 4a48ad4d35c..20a24183555 100644 --- a/mozilla/content/html/content/src/nsHTMLLinkElement.cpp +++ b/mozilla/content/html/content/src/nsHTMLLinkElement.cpp @@ -397,9 +397,11 @@ nsHTMLLinkElement::GetHrefCString(char* &aBuf) if (baseURL) { // Get absolute URL. - NS_MakeAbsoluteURIWithCharset(&aBuf, relURLSpec, mDocument, baseURL, + nsCAutoString buf; + NS_MakeAbsoluteURIWithCharset(buf, relURLSpec, mDocument, baseURL, nsHTMLUtils::IOService, nsHTMLUtils::CharsetMgr); + aBuf = ToNewCString(buf); } else { // Absolute URL is same as relative URL. diff --git a/mozilla/content/html/content/src/nsHTMLScriptElement.cpp b/mozilla/content/html/content/src/nsHTMLScriptElement.cpp index 70259c76f65..e5cd3a4930d 100644 --- a/mozilla/content/html/content/src/nsHTMLScriptElement.cpp +++ b/mozilla/content/html/content/src/nsHTMLScriptElement.cpp @@ -327,8 +327,8 @@ nsHTMLScriptElement::ScriptAvailable(nsresult aResult, NS_NAMED_LITERAL_STRING(errorString, "Error loading script"); event.errorMsg = errorString.get(); - nsXPIDLCString spec; - aURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + aURI->GetSpec(spec); NS_ConvertUTF8toUCS2 fileName(spec); diff --git a/mozilla/content/html/content/src/nsHTMLStyleElement.cpp b/mozilla/content/html/content/src/nsHTMLStyleElement.cpp index e7493849bc0..ed782bdb9dd 100644 --- a/mozilla/content/html/content/src/nsHTMLStyleElement.cpp +++ b/mozilla/content/html/content/src/nsHTMLStyleElement.cpp @@ -285,9 +285,11 @@ nsHTMLStyleElement::GetHrefCString(char* &aBuf) if (baseURL) { // Get absolute URL. - NS_MakeAbsoluteURIWithCharset(&aBuf, relURLSpec, mDocument, baseURL, + nsCAutoString buf; + NS_MakeAbsoluteURIWithCharset(buf, relURLSpec, mDocument, baseURL, nsHTMLUtils::IOService, nsHTMLUtils::CharsetMgr); + aBuf = ToNewCString(buf); } else { // Absolute URL is same as relative URL. diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp index 539e9c827a6..99c702bce8b 100644 --- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp +++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp @@ -574,7 +574,7 @@ DummyParserRequest::DummyParserRequest(nsIHTMLContentSink* aSink) if (gRefCnt++ == 0) { nsresult rv; - rv = NS_NewURI(&gURI, "about:parser-dummy-request", nsnull); + rv = NS_NewURI(&gURI, NS_LITERAL_CSTRING("about:parser-dummy-request")); NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create about:parser-dummy-request"); } @@ -2624,12 +2624,11 @@ HTMLContentSink::Init(nsIDocument* aDoc, mContextStack.AppendElement(mCurrentContext); #ifdef NS_DEBUG - char* spec; - (void)aURL->GetSpec(&spec); + nsCAutoString spec; + (void)aURL->GetSpec(spec); SINK_TRACE(SINK_TRACE_CALLS, ("HTMLContentSink::Init: this=%p url='%s'", - this, spec)); - nsCRT::free(spec); + this, spec.get())); #endif MOZ_TIMER_DEBUGLOG(("Stop: nsHTMLContentSink::Init()\n")); @@ -3936,21 +3935,19 @@ HTMLContentSink::StartLayout() // frameset document, disable the scroll bars on the views. if (mDocumentURI) { - nsXPIDLCString ref; + nsCAutoString ref; // Since all URI's that pass through here aren't URL's we can't // rely on the nsIURI implementation for providing a way for // finding the 'ref' part of the URI, we'll haveto revert to // string routines for finding the data past '#' - rv = mDocumentURI->GetSpec(getter_Copies(ref)); - - nsDependentCString refstr(ref); + rv = mDocumentURI->GetSpec(ref); nsReadingIterator start, end; - refstr.BeginReading(start); - refstr.EndReading(end); + ref.BeginReading(start); + ref.EndReading(end); if (FindCharInReadable('#', start, end)) { ++start; // Skip over the '#' @@ -4454,7 +4451,7 @@ HTMLContentSink::ProcessStyleLink(nsIHTMLContent* aElement, if (isStyleSheet) { nsIURI* url = nsnull; { - result = NS_NewURI(&url, aHref, mDocumentBaseURL); + result = NS_NewURI(&url, aHref, nsnull, mDocumentBaseURL); } if (NS_OK != result) { return NS_OK; // The URL is bad, move along, don't propagate the error (for now) @@ -5324,9 +5321,9 @@ HTMLContentSink::DumpContentModel() mDocument->GetRootContent(&root); if(root) { if(mDocumentURI) { - char* buff[1]={0}; - mDocumentURI->GetSpec(buff); - fputs(buff[0],out); + nsCAutoString buf; + mDocumentURI->GetSpec(buf); + fputs(buf.get(),out); } fputs(";",out); result=root->DumpContent(out,0,PR_FALSE); diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index d4f95c24fb8..71ed7cb2573 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -41,6 +41,7 @@ #include "nsCOMPtr.h" #include "nsIFileChannel.h" #include "nsXPIDLString.h" +#include "nsPrintfCString.h" #include "nsReadableUtils.h" #include "nsUnicharUtils.h" #include "nsHTMLDocument.h" @@ -607,7 +608,7 @@ nsHTMLDocument::TryCacheCharset(nsICacheEntryDescriptor* aCacheDescriptor, } PRBool -nsHTMLDocument::TryBookmarkCharset(nsXPIDLCString* aUrlSpec, +nsHTMLDocument::TryBookmarkCharset(nsAFlatCString* aUrlSpec, PRInt32& aCharsetSource, nsAString& aCharset) { @@ -621,7 +622,7 @@ nsHTMLDocument::TryBookmarkCharset(nsXPIDLCString* aUrlSpec, if (bookmarks) { if (aUrlSpec) { nsXPIDLString pBookmarkedCharset; - rv = bookmarks->GetLastCharset(*aUrlSpec, getter_Copies(pBookmarkedCharset)); + rv = bookmarks->GetLastCharset(aUrlSpec->get(), getter_Copies(pBookmarkedCharset)); if (NS_SUCCEEDED(rv) && (rv != NS_RDF_NO_VALUE)) { aCharset = pBookmarkedCharset; aCharsetSource = kCharsetFromBookmarks; @@ -947,11 +948,11 @@ nsHTMLDocument::StartDocumentLoad(const char* aCommand, } } - nsXPIDLCString scheme; - aURL->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + aURL->GetScheme(scheme); - nsXPIDLCString urlSpec; - aURL->GetSpec(getter_Copies(urlSpec)); + nsCAutoString urlSpec; + aURL->GetSpec(urlSpec); PRInt32 charsetSource = kCharsetUninitialized; nsAutoString charset; @@ -968,11 +969,11 @@ nsHTMLDocument::StartDocumentLoad(const char* aCommand, if (TryHttpHeaderCharset(httpChannel, charsetSource, charset)) { // Use the header's charset. } - else if (scheme && nsCRT::strcasecmp("about", scheme) && // don't try to access bookmarks for about:blank + else if (nsCRT::strcasecmp("about", scheme.get()) && // don't try to access bookmarks for about:blank TryBookmarkCharset(&urlSpec, charsetSource, charset)) { // Use the bookmark's charset. } - else if (cacheDescriptor && urlSpec && + else if (cacheDescriptor && !urlSpec.IsEmpty() && TryCacheCharset(cacheDescriptor, charsetSource, charset)) { // Use the cache's charset. } @@ -1800,11 +1801,9 @@ nsHTMLDocument::GetBaseURI(nsAWritableString &aURI) aURI.Truncate(); nsCOMPtr uri(do_QueryInterface(mBaseURL ? mBaseURL : mDocumentURL)); if (uri) { - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); - if (spec) { - CopyASCIItoUCS2(nsDependentCString(spec), aURI); - } + nsCAutoString spec; + uri->GetSpec(spec); + aURI = NS_ConvertUTF8toUCS2(spec); } return NS_OK; } @@ -1872,11 +1871,10 @@ nsHTMLDocument::GetDomain(nsAWritableString& aDomain) if (NS_FAILED(GetDomainURI(getter_AddRefs(uri)))) return NS_ERROR_FAILURE; - char *hostName; - if (NS_FAILED(uri->GetHost(&hostName))) + nsCAutoString hostName; + if (NS_FAILED(uri->GetHost(hostName))) return NS_ERROR_FAILURE; - aDomain.Assign(NS_ConvertASCIItoUCS2(hostName)); - nsCRT::free(hostName); + aDomain.Assign(NS_ConvertUTF8toUCS2(hostName)); return NS_OK; } @@ -1909,16 +1907,14 @@ nsHTMLDocument::SetDomain(const nsAReadableString& aDomain) nsCOMPtr uri; if (NS_FAILED(GetDomainURI(getter_AddRefs(uri)))) return NS_ERROR_FAILURE; - nsXPIDLCString scheme; - if (NS_FAILED(uri->GetScheme(getter_Copies(scheme)))) + nsCAutoString scheme; + if (NS_FAILED(uri->GetScheme(scheme))) return NS_ERROR_FAILURE; - nsXPIDLCString path; - if (NS_FAILED(uri->GetPath(getter_Copies(path)))) + nsCAutoString path; + if (NS_FAILED(uri->GetPath(path))) return NS_ERROR_FAILURE; - nsAutoString newURIString; newURIString.AssignWithConversion( NS_STATIC_CAST(const char*, scheme) ); - newURIString.Append(NS_LITERAL_STRING("://")); - newURIString += aDomain; - newURIString.AppendWithConversion(path); + NS_ConvertUTF8toUCS2 newURIString(scheme); + newURIString += NS_LITERAL_STRING("://") + aDomain + NS_ConvertUTF8toUCS2(path); nsIURI *newURI; if (NS_FAILED(NS_NewURI(&newURI, newURIString))) return NS_ERROR_FAILURE; @@ -1959,10 +1955,9 @@ NS_IMETHODIMP nsHTMLDocument::GetURL(nsAWritableString& aURL) { if (nsnull != mDocumentURL) { - char* str; - mDocumentURL->GetSpec(&str); - aURL.Assign(NS_ConvertASCIItoUCS2(str)); - nsCRT::free(str); + nsCAutoString str; + mDocumentURL->GetSpec(str); + aURL.Assign(NS_ConvertUTF8toUCS2(str)); } return NS_OK; } @@ -2268,7 +2263,7 @@ nsHTMLDocument::OpenCommon(nsIURI* aSourceURL) nsCOMPtr channel; nsCOMPtr group = do_QueryReferent(mDocumentLoadGroup); - result = NS_OpenURI(getter_AddRefs(channel), aSourceURL, nsnull, group); + result = NS_NewChannel(getter_AddRefs(channel), aSourceURL, nsnull, group); if (NS_FAILED(result)) return result; @@ -2432,7 +2427,7 @@ nsHTMLDocument::Open(nsIDOMDocument** aReturn) result = GetSourceDocumentURL(cx, getter_AddRefs(sourceURL)); // Recover if we had a problem obtaining the source URL if (!sourceURL) { - result = NS_NewURI(getter_AddRefs(sourceURL), "about:blank"); + result = NS_NewURI(getter_AddRefs(sourceURL), NS_LITERAL_CSTRING("about:blank")); } if (NS_SUCCEEDED(result)) { @@ -2560,14 +2555,14 @@ nsHTMLDocument::ScriptWriteCommon(PRBool aNewlineTerminate) NS_ENSURE_SUCCESS(rv, rv); } - nsXPIDLCString spec; + nsCAutoString spec; if (mDocumentURL) { - rv = mDocumentURL->GetSpec(getter_Copies(spec)); + rv = mDocumentURL->GetSpec(spec); NS_ENSURE_SUCCESS(rv, rv); } - if (!mDocumentURL || nsCRT::strcasecmp(spec, "about:blank") == 0) { + if (!mDocumentURL || nsCRT::strcasecmp(spec.get(), "about:blank") == 0) { // The current document's URL and principal are empty or "about:blank". // By writing to this document, the script acquires responsibility for the // document for security purposes. Thus a document.write of a script tag @@ -3825,17 +3820,15 @@ nsresult nsHTMLDocument::CreateAndAddWyciwygChannel(void) { nsresult rv = NS_OK; - nsAutoString url; - nsXPIDLCString originalSpec, urlPart; - + nsCAutoString url, originalSpec; - mDocumentURL->GetSpec(getter_Copies(originalSpec)); + mDocumentURL->GetSpec(originalSpec); // Generate the wyciwyg url - url.Assign(NS_LITERAL_STRING( "wyciwyg://" )); - url.AppendInt(mWyciwygSessionCnt++, 10); - url.Append(NS_LITERAL_STRING("/")); - url.Append(NS_ConvertUTF8toUCS2(originalSpec)); + url = NS_LITERAL_CSTRING("wyciwyg://") + + nsPrintfCString("%d", mWyciwygSessionCnt++) + + NS_LITERAL_CSTRING("/") + + originalSpec; nsCOMPtr wcwgURI; NS_NewURI(getter_AddRefs(wcwgURI), url); @@ -3844,10 +3837,10 @@ nsHTMLDocument::CreateAndAddWyciwygChannel(void) // out-of-band document.write() script to cache nsCOMPtr channel; // Create a wyciwyg Channel - rv = NS_OpenURI(getter_AddRefs(channel), wcwgURI); + rv = NS_NewChannel(getter_AddRefs(channel), wcwgURI); if (NS_SUCCEEDED(rv) && channel) { mWyciwygChannel = do_QueryInterface(channel); - mWyciwygChannel->CreateCacheEntry(NS_ConvertUCS2toUTF8(url).get()); + mWyciwygChannel->CreateCacheEntry(url.get()); } nsCOMPtr loadGroup; diff --git a/mozilla/content/html/document/src/nsHTMLDocument.h b/mozilla/content/html/document/src/nsHTMLDocument.h index 38d10a42f0a..f60e80c7529 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.h +++ b/mozilla/content/html/document/src/nsHTMLDocument.h @@ -260,7 +260,7 @@ protected: static PRBool TryCacheCharset(nsICacheEntryDescriptor* aCacheDescriptor, PRInt32& aCharsetSource, nsAString& aCharset); - static PRBool TryBookmarkCharset(nsXPIDLCString* aUrlSpec, + static PRBool TryBookmarkCharset(nsAFlatCString* aUrlSpec, PRInt32& aCharsetSource, nsAString& aCharset); static PRBool TryParentCharset(nsIDocumentCharsetInfo* aDocInfo, diff --git a/mozilla/content/html/document/src/nsImageDocument.cpp b/mozilla/content/html/document/src/nsImageDocument.cpp index 58c7b5f762a..6a1b6ad01fe 100644 --- a/mozilla/content/html/document/src/nsImageDocument.cpp +++ b/mozilla/content/html/document/src/nsImageDocument.cpp @@ -391,10 +391,10 @@ nsImageDocument::CreateSyntheticDocument() } image->SetDocument(this, PR_FALSE, PR_TRUE); - nsXPIDLCString src; - mDocumentURL->GetSpec(getter_Copies(src)); + nsCAutoString src; + mDocumentURL->GetSpec(src); - nsString src_string; src_string.AssignWithConversion(src); + NS_ConvertUTF8toUCS2 src_string(src); nsHTMLValue val(src_string); image->SetHTMLAttribute(nsHTMLAtoms::src, val, PR_FALSE); @@ -506,11 +506,9 @@ nsresult nsImageDocument::UpdateTitle( void ) nsCOMPtr url = do_QueryInterface(mDocumentURL); if (url) { - nsXPIDLCString pName; - url->GetFileName(getter_Copies(pName)); - if(pName){ - fileStr.Assign(NS_ConvertUTF8toUCS2(pName)); - } + nsCAutoString pName; + url->GetFileName(pName); + fileStr.Assign(NS_ConvertUTF8toUCS2(pName)); } if (mImageRequest) { diff --git a/mozilla/content/html/document/src/nsWyciwygChannel.cpp b/mozilla/content/html/document/src/nsWyciwygChannel.cpp index 84bee1653ff..03c6660de1e 100644 --- a/mozilla/content/html/document/src/nsWyciwygChannel.cpp +++ b/mozilla/content/html/document/src/nsWyciwygChannel.cpp @@ -95,10 +95,10 @@ NS_IMETHODIMP nsWyciwygChannel::GetName(PRUnichar**aName) { NS_ENSURE_ARG_POINTER(aName); - nsXPIDLCString spec; - mURI->GetSpec(getter_Copies(spec)); - *aName = ToNewUnicode(spec); - return NS_OK; + nsCAutoString spec; + mURI->GetSpec(spec); + *aName = ToNewUnicode(NS_ConvertUTF8toUCS2(spec)); + return *aName ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } NS_IMETHODIMP @@ -359,7 +359,7 @@ nsWyciwygChannel::WriteToCache(const char * aScript) // Get the outputstream from the transport. if (mCacheTransport) - rv = mCacheTransport->OpenOutputStream(0, -1, 0, getter_AddRefs(mCacheOutputStream)); + rv = mCacheTransport->OpenOutputStream(0, PRUint32(-1), 0, getter_AddRefs(mCacheOutputStream)); } if (mCacheOutputStream) @@ -568,8 +568,8 @@ nsWyciwygChannel::Connect(PRBool aFirstTime) if (aFirstTime) { PRBool delayed = PR_FALSE; - nsXPIDLCString spec; - mURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + mURI->GetSpec(spec); // open a cache entry for this channel... rv = OpenCacheEntry(spec.get(), nsICache::ACCESS_READ, &delayed); diff --git a/mozilla/content/html/document/src/nsWyciwygProtocolHandler.cpp b/mozilla/content/html/document/src/nsWyciwygProtocolHandler.cpp index 27959083c05..5019c5023cf 100644 --- a/mozilla/content/html/document/src/nsWyciwygProtocolHandler.cpp +++ b/mozilla/content/html/document/src/nsWyciwygProtocolHandler.cpp @@ -50,10 +50,10 @@ NS_IMPL_ISUPPORTS1(nsWyciwygProtocolHandler, nsIProtocolHandler); //////////////////////////////////////////////////////////////////////////////// NS_IMETHODIMP -nsWyciwygProtocolHandler::GetScheme(char* *result) +nsWyciwygProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("wyciwyg"); - return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + result = "wyciwyg"; + return NS_OK; } NS_IMETHODIMP @@ -71,8 +71,10 @@ nsWyciwygProtocolHandler::AllowPort(PRInt32 port, const char *scheme, PRBool *_r } NS_IMETHODIMP -nsWyciwygProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) +nsWyciwygProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignored + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; @@ -84,7 +86,7 @@ nsWyciwygProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, NS_GET_IID(nsIURI), (void**)&url); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec((char*)aSpec); + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); return rv; diff --git a/mozilla/content/html/style/src/nsCSSLoader.cpp b/mozilla/content/html/style/src/nsCSSLoader.cpp index 38587d92e89..3d21b03a261 100644 --- a/mozilla/content/html/style/src/nsCSSLoader.cpp +++ b/mozilla/content/html/style/src/nsCSSLoader.cpp @@ -73,39 +73,28 @@ MOZ_DECL_CTOR_COUNTER(URLKey) class URLKey: public nsHashKey { public: URLKey(nsIURI* aURL) - : nsHashKey(), - mURL(aURL), - mSpec(nsnull) + : mURL(aURL) { MOZ_COUNT_CTOR(URLKey); - NS_ADDREF(mURL); mHashValue = 0; - mURL->GetSpec((char **)&mSpec); - if (mSpec) { - mHashValue = nsCRT::HashCode(mSpec); + mURL->GetSpec(mSpec); + if (!mSpec.IsEmpty()) { + mHashValue = nsCRT::HashCode(mSpec.get()); } } URLKey(const URLKey& aKey) - : nsHashKey(), - mURL(aKey.mURL), + : mURL(aKey.mURL), mHashValue(aKey.mHashValue), - mSpec(nsnull) + mSpec(aKey.mSpec) { MOZ_COUNT_CTOR(URLKey); - NS_ADDREF(mURL); - if (aKey.mSpec) - mSpec = nsCRT::strdup(aKey.mSpec); } virtual ~URLKey(void) { MOZ_COUNT_DTOR(URLKey); - NS_RELEASE(mURL); - if (mSpec) - nsCRT::free((char *)mSpec); - mSpec = nsnull; } virtual PRUint32 HashCode(void) const @@ -121,7 +110,7 @@ public: nsresult result = mURL->Equals(key->mURL, &equals); return (NS_SUCCEEDED(result) && equals); #else - return (nsCRT::strcasecmp(mSpec, key->mSpec) == 0); + return (nsCRT::strcasecmp(mSpec.get(), key->mSpec.get()) == 0); #endif } @@ -130,9 +119,9 @@ public: return new URLKey(*this); } - nsIURI* mURL; - PRUint32 mHashValue; - const char* mSpec; + nsCOMPtr mURL; + PRUint32 mHashValue; + nsSharableCString mSpec; }; class SheetLoadData : public nsIStreamLoaderObserver @@ -722,8 +711,8 @@ SheetLoadData::OnStreamComplete(nsIStreamLoader* aLoader, * being fixed */ - nsXPIDLCString uriStr; - mURL->GetSpec(getter_Copies(uriStr)); + nsCAutoString uriStr; + mURL->GetSpec(uriStr); nsCAutoString errorMessage; errorMessage = NS_LITERAL_CSTRING("Decoding sheet from ") + uriStr + @@ -1000,10 +989,10 @@ CSSLoaderImpl::DidLoadStyle(nsIStreamLoader* aLoader, #ifdef DEBUG if (mDocument && NS_FAILED(aStatus)) { // still have doc, must have failed // Dump error message to console. - nsXPIDLCString url; - aLoadData->mURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + aLoadData->mURL->GetSpec(url); nsCAutoString errorMessage(NS_LITERAL_CSTRING("CSSLoaderImpl::DidLoadStyle: Load of URL '") + - nsDependentCString(url) + + url + NS_LITERAL_CSTRING("' failed. Error code: ")); errorMessage.AppendInt(NS_ERROR_GET_CODE(aStatus)); NS_WARNING(errorMessage.get()); @@ -1286,10 +1275,10 @@ CSSLoaderImpl::LoadSheet(URLKey& aKey, SheetLoadData* aData) #ifdef DEBUG else { // Dump an error message to the console - nsXPIDLCString url; - aKey.mURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + aKey.mURL->GetSpec(url); nsCAutoString errorMessage(NS_LITERAL_CSTRING("CSSLoaderImpl::LoadSheet: Load of URL '") + - nsDependentCString(url) + + url + NS_LITERAL_CSTRING("' failed. Error code: ")); errorMessage.AppendInt(NS_ERROR_GET_CODE(result)); NS_WARNING(errorMessage.get()); @@ -1635,8 +1624,8 @@ CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, else { // Dump an error message to the console PRBool ignoreError = PR_FALSE; - nsXPIDLCString url; - aURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + aURL->GetSpec(url); // Ignore userChrome.css and userContent.css failures #define USERCHROMECSS "userChrome.css" #define USERCONTENTCSS "userContent.css" @@ -1651,7 +1640,7 @@ CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, if (!ignoreError) { nsCAutoString errorMessage(NS_LITERAL_CSTRING("CSSLoaderImpl::LoadAgentSheet: Load of URL '") + - nsDependentCString(url) + + url + NS_LITERAL_CSTRING("' failed. Error code: ")); errorMessage.AppendInt(NS_ERROR_GET_CODE(result)); NS_WARNING(errorMessage.get()); diff --git a/mozilla/content/html/style/src/nsCSSParser.cpp b/mozilla/content/html/style/src/nsCSSParser.cpp index 32c31deb183..0508806082a 100644 --- a/mozilla/content/html/style/src/nsCSSParser.cpp +++ b/mozilla/content/html/style/src/nsCSSParser.cpp @@ -1144,11 +1144,8 @@ PRBool CSSParserImpl::ProcessImport(PRInt32& aErrorCode, const nsString& aURLSpe (*aAppendFunc)(rule, aData); if (mChildLoader) { - // XXX probably need a way to encode unicode junk for the part of - // the url that follows a "?" nsCOMPtr url; - // XXX need to have nsILoadGroup passed in here - aErrorCode = NS_NewURI(getter_AddRefs(url), aURLSpec, mURL/*, group*/); + aErrorCode = NS_NewURI(getter_AddRefs(url), aURLSpec, nsnull, mURL); if (NS_FAILED(aErrorCode)) { // import url is bad diff --git a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp index 952aad603de..a5fe0885193 100644 --- a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp @@ -2485,11 +2485,10 @@ void CSSStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const } fputs("CSS Style Sheet: ", out); - char* urlSpec = nsnull; - nsresult rv = mInner->mURL->GetSpec(&urlSpec); - if (NS_SUCCEEDED(rv) && urlSpec) { - fputs(urlSpec, out); - nsCRT::free(urlSpec); + nsCAutoString urlSpec; + nsresult rv = mInner->mURL->GetSpec(urlSpec); + if (NS_SUCCEEDED(rv) && !urlSpec.IsEmpty()) { + fputs(urlSpec.get(), out); } if (mMedia) { @@ -2677,12 +2676,9 @@ NS_IMETHODIMP CSSStyleSheetImpl::GetHref(nsAWritableString& aHref) { if (mInner && mInner->mURL) { - char* str = nsnull; - mInner->mURL->GetSpec(&str); - aHref.Assign(NS_ConvertASCIItoUCS2(str)); - if (str) { - nsCRT::free(str); - } + nsCAutoString str; + mInner->mURL->GetSpec(str); + aHref.Assign(NS_ConvertUTF8toUCS2(str)); } else { aHref.Truncate(); diff --git a/mozilla/content/html/style/src/nsHTMLCSSStyleSheet.cpp b/mozilla/content/html/style/src/nsHTMLCSSStyleSheet.cpp index 902e079b39e..21a89c69259 100644 --- a/mozilla/content/html/style/src/nsHTMLCSSStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsHTMLCSSStyleSheet.cpp @@ -531,11 +531,10 @@ void HTMLCSSStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); fputs("HTML CSS Style Sheet: ", out); - char* urlSpec = nsnull; - mURL->GetSpec(&urlSpec); - if (urlSpec) { - fputs(urlSpec, out); - nsCRT::free(urlSpec); + nsCAutoString urlSpec; + mURL->GetSpec(urlSpec); + if (!urlSpec.IsEmpty()) { + fputs(urlSpec.get(), out); } fputs("\n", out); } diff --git a/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp b/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp index 1ec64eabe97..0f3b584f98e 100644 --- a/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp @@ -1523,11 +1523,10 @@ void HTMLStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); fputs("HTML Style Sheet: ", out); - char* urlSpec = nsnull; - mURL->GetSpec(&urlSpec); - if (urlSpec) { - fputs(urlSpec, out); - nsCRT::free(urlSpec); + nsCAutoString urlSpec; + mURL->GetSpec(urlSpec); + if (!urlSpec.IsEmpty()) { + fputs(urlSpec.get(), out); } fputs("\n", out); } diff --git a/mozilla/content/shared/public/nsHTMLUtils.h b/mozilla/content/shared/public/nsHTMLUtils.h index a7963aef8f5..301a63c0bf6 100644 --- a/mozilla/content/shared/public/nsHTMLUtils.h +++ b/mozilla/content/shared/public/nsHTMLUtils.h @@ -50,14 +50,17 @@ class nsIDocument; class nsIIOService; class nsIURI; class nsString; +class nsACString; /** * A version of NS_MakeAbsoluteURI that's savvy to document character * set encodings, and will recode a relative spec in the specified * charset and URL-escape it before resolving. + * + * XXXdarin this should really return a nsIURI */ nsresult -NS_MakeAbsoluteURIWithCharset(char* *aResult, +NS_MakeAbsoluteURIWithCharset(nsACString &aResult, const nsString& aSpec, nsIDocument* aDocument, nsIURI* aBaseURI = nsnull, diff --git a/mozilla/content/shared/src/nsHTMLUtils.cpp b/mozilla/content/shared/src/nsHTMLUtils.cpp index 140b89bb308..af5bc8819c3 100644 --- a/mozilla/content/shared/src/nsHTMLUtils.cpp +++ b/mozilla/content/shared/src/nsHTMLUtils.cpp @@ -48,68 +48,17 @@ #include "nsIIOService.h" #include "nsIServiceManager.h" #include "nsICharsetConverterManager.h" -#include "nsNetUtil.h" #include "nsString.h" #include "nsXPIDLString.h" #include "prprf.h" -#include "nsEscape.h" +#include "nsNetCID.h" +#include "nsReadableUtils.h" +#include "nsIURI.h" static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); -/* - * Extracts the hostname part from the given |uSpec|, encodes it to UTF8, - * and use it to update the hostname part in |spec|, putting the result - * in |targetSpec| - * XXX: If the hostname is ASCII, i.e. there is no need for conversion, - * |*targetSpec| would be set to nsnull. - */ nsresult -ConvertHostnameToUTF8(char* *targetSpec, - const char* spec, - const nsString& uSpec, - nsIIOService* aIOService) -{ - nsresult rv; - - *targetSpec = nsnull; - - nsCOMPtr serv; - if (!aIOService) { - serv = do_GetIOService(&rv); - if (NS_FAILED(rv)) - return rv; - aIOService = serv.get(); - } - - NS_ConvertUCS2toUTF8 specUTF8(uSpec); - nsXPIDLCString hostUTF8; - - rv = aIOService->ExtractUrlPart(specUTF8.get(), nsIIOService::url_Host, - nsnull, nsnull, getter_Copies(hostUTF8)); - NS_ASSERTION(NS_SUCCEEDED(rv), "Unable to extract Hostname part from URL"); - if (NS_FAILED(rv) || hostUTF8.IsEmpty()) - return NS_OK; // spec may be relative, bailing out. - - // If hostname is pure ASCII, get out of here. - if (nsCRT::IsAscii(hostUTF8.get())) - return NS_OK; - - // Try creating a URI from the original spec - nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), spec, nsnull, aIOService); - if (NS_FAILED(rv)) - return NS_OK; // spec may be relative, bailing out - - // replace the original hostname with hostUTF8 - rv = uri->SetHost(hostUTF8.get()); - if (NS_FAILED(rv)) - return rv; - - return uri->GetSpec(targetSpec); -} - -nsresult -NS_MakeAbsoluteURIWithCharset(char* *aResult, +NS_MakeAbsoluteURIWithCharset(nsACString &aResult, const nsString& aSpec, nsIDocument* aDocument, nsIURI* aBaseURI, @@ -117,7 +66,7 @@ NS_MakeAbsoluteURIWithCharset(char* *aResult, nsICharsetConverterManager* aConvMgr) { // Initialize aResult in case of tragedy - *aResult = nsnull; + aResult.Truncate(); // Sanity NS_PRECONDITION(aBaseURI != nsnull, "no base URI"); @@ -126,112 +75,25 @@ NS_MakeAbsoluteURIWithCharset(char* *aResult, // This gets the relative spec after gyrating it through all the // necessary encodings and escaping. - nsCAutoString spec; - if (nsCRT::IsAscii(aSpec.get())) { + if (IsASCII(aSpec)) { // If it's ASCII, then just copy the characters - spec.AssignWithConversion(aSpec); - } - else { - // If the scheme is javascript then no charset conversion is needed, - // escape non ASCII in \uxxxx form. - PRInt32 pos = aSpec.FindChar(':'); - static const char kJavaScript[] = "javascript"; - nsAutoString scheme; - if ((pos == (PRInt32)(sizeof kJavaScript - 1)) && - (aSpec.Left(scheme, pos)) && - scheme.EqualsIgnoreCase(kJavaScript)) { - char buf[6+1]; // space for \uXXXX plus a NUL at the end - spec.Truncate(0); - for (const PRUnichar* uch = aSpec.get(); *uch; ++uch) { - if (!nsCRT::IsAscii(*uch)) { - PR_snprintf(buf, sizeof(buf), "\\u%.4x", *uch); - spec.Append(buf); - } - else { - // it's ascii, so we're safe - spec.Append(char(*uch)); - } - } - } - else { - // If the scheme is mailtourl then should not convert to a document charset - // because the charset cannot be passes to mailnews code, - // use UTF-8 instead and apply URL escape. - static const char kMailToURI[] = "mailto"; - if ((pos == (PRInt32)(sizeof kMailToURI - 1)) && - (aSpec.Left(scheme, pos)) && - scheme.EqualsIgnoreCase(kMailToURI)) { - spec = NS_ConvertUCS2toUTF8(aSpec.get()); - } - else { - // Otherwise, we'll need to use aDocument to cough up a character - // set converter, and re-encode the relative portion of the URL as - // 8-bit characters. - nsCOMPtr encoder; - - if (aDocument) { - nsCOMPtr convmgr; - if (aConvMgr) { - convmgr = aConvMgr; - } - else { - convmgr = do_GetService(NS_CHARSETCONVERTERMANAGER_CONTRACTID); - } - - if (! convmgr) - return NS_ERROR_FAILURE; - - nsAutoString charSetID; - aDocument->GetDocumentCharacterSet(charSetID); - - convmgr->GetUnicodeEncoder(&charSetID, getter_AddRefs(encoder)); - } - - if (encoder) { - // Got the encoder: let's party. - PRInt32 len = aSpec.Length(); - PRInt32 maxlen; - encoder->GetMaxLength(aSpec.get(), len, &maxlen); - - char buf[64], *p = buf; - if (PRUint32(maxlen) > sizeof(buf) - 1) - p = new char[maxlen + 1]; - - if (! p) - return NS_ERROR_OUT_OF_MEMORY; - - encoder->Convert(aSpec.get(), &len, p, &maxlen); - p[maxlen] = 0; - spec = p; - encoder->Finish(p, &len); - p[len] = 0; - spec += p; - - if (p != buf) - delete[] p; - - // iDNS support: encode the hostname in the URL to UTF8 - nsresult rv; - nsXPIDLCString newSpec; - rv = ConvertHostnameToUTF8(getter_Copies(newSpec), spec.get(), aSpec, aIOService); - if (NS_FAILED(rv)) - return rv; - - if (!newSpec.IsEmpty()) // hostname is non-ASCII - spec = newSpec; - } - else { - // No encoder, but we've got non-ASCII data. Let's UTF-8 encode - // by default. - spec = NS_ConvertUCS2toUTF8(aSpec.get()); - } - - } - } + return aBaseURI->Resolve(NS_LossyConvertUCS2toASCII(aSpec), aResult); } - return aBaseURI->Resolve(spec.get(), aResult); + nsCOMPtr absURI; + nsresult rv; + + nsAutoString originCharset; // XXX why store charset as UCS2? + if (aDocument && NS_FAILED(aDocument->GetDocumentCharacterSet(originCharset))) + originCharset.Truncate(); + + rv = nsHTMLUtils::IOService->NewURI(NS_ConvertUCS2toUTF8(aSpec), + NS_LossyConvertUCS2toASCII(originCharset).get(), + aBaseURI, getter_AddRefs(absURI)); + if (NS_FAILED(rv)) return rv; + + return absURI->GetSpec(aResult); } diff --git a/mozilla/content/xbl/src/nsBindingManager.cpp b/mozilla/content/xbl/src/nsBindingManager.cpp index 6d121723d8c..67dc15b121a 100644 --- a/mozilla/content/xbl/src/nsBindingManager.cpp +++ b/mozilla/content/xbl/src/nsBindingManager.cpp @@ -831,17 +831,17 @@ NS_IMETHODIMP nsBindingManager::LoadBindingDocument(nsIDocument* aBoundDoc, const nsAReadableString& aURL, nsIDocument** aResult) { - nsCAutoString url; url.AssignWithConversion(PromiseFlatString(aURL).get()); + NS_ConvertUCS2toUTF8 url(aURL); - nsXPIDLCString otherScheme; - nsCOMPtr ioService = do_GetService(NS_IOSERVICE_CONTRACTID); + nsCAutoString otherScheme; + nsCOMPtr ioService = do_GetIOService(); if (!ioService) return NS_ERROR_FAILURE; - ioService->ExtractScheme(url.get(), 0, 0, getter_Copies(otherScheme)); + ioService->ExtractScheme(url, otherScheme); nsCOMPtr docURL; aBoundDoc->GetDocumentURL(getter_AddRefs(docURL)); - nsXPIDLCString scheme; - docURL->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + docURL->GetScheme(scheme); // First we need to load our binding. *aResult = nsnull; @@ -857,7 +857,7 @@ nsBindingManager::LoadBindingDocument(nsIDocument* aBoundDoc, const nsAReadableS if (!info) return NS_ERROR_FAILURE; - if (!PL_strcmp(scheme, otherScheme)) + if (!strcmp(scheme.get(), otherScheme.get())) info->GetDocument(aResult); // Addref happens here. return NS_OK; @@ -948,10 +948,10 @@ nsBindingManager::PutXBLDocumentInfo(nsIXBLDocumentInfo* aDocumentInfo) nsCOMPtr uri; doc->GetDocumentURL(getter_AddRefs(uri)); - nsXPIDLCString str; - uri->GetSpec(getter_Copies(str)); + nsCAutoString str; + uri->GetSpec(str); - nsCStringKey key((const char*)str); + nsCStringKey key(str.get()); mDocumentTable->Put(&key, aDocumentInfo); return NS_OK; } @@ -967,10 +967,10 @@ nsBindingManager::RemoveXBLDocumentInfo(nsIXBLDocumentInfo* aDocumentInfo) nsCOMPtr uri; doc->GetDocumentURL(getter_AddRefs(uri)); - nsXPIDLCString str; - uri->GetSpec(getter_Copies(str)); + nsCAutoString str; + uri->GetSpec(str); - nsCStringKey key((const char*)str); + nsCStringKey key(str.get()); mDocumentTable->Remove(&key); return NS_OK; } @@ -1035,11 +1035,11 @@ PRBool PR_CALLBACK MarkForDeath(nsHashKey* aKey, void* aData, void* aClosure) nsCAutoString uriStr; binding->GetDocURI(uriStr); nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), uriStr.get()); + NS_NewURI(getter_AddRefs(uri), uriStr); if (uri) { - nsXPIDLCString path; - uri->GetPath(getter_Copies(path)); - if (!PL_strncmp(path.get(), "/skin", 5)) + nsCAutoString path; + uri->GetPath(path); + if (!strncmp(path.get(), "/skin", 5)) binding->MarkForDeath(); } return PR_TRUE; diff --git a/mozilla/content/xbl/src/nsXBLDocumentInfo.cpp b/mozilla/content/xbl/src/nsXBLDocumentInfo.cpp index 19b3bbd61ed..b5ce41cfb4e 100644 --- a/mozilla/content/xbl/src/nsXBLDocumentInfo.cpp +++ b/mozilla/content/xbl/src/nsXBLDocumentInfo.cpp @@ -436,10 +436,10 @@ nsresult NS_NewXBLDocumentInfo(nsIDocument* aDocument, nsIXBLDocumentInfo** aRes nsCOMPtr url; aDocument->GetDocumentURL(getter_AddRefs(url)); - nsXPIDLCString str; - url->GetSpec(getter_Copies(str)); + nsCAutoString str; + url->GetSpec(str); - *aResult = new nsXBLDocumentInfo((const char*)str, aDocument); + *aResult = new nsXBLDocumentInfo(str.get(), aDocument); NS_IF_ADDREF(*aResult); return NS_OK; diff --git a/mozilla/content/xbl/src/nsXBLResourceLoader.cpp b/mozilla/content/xbl/src/nsXBLResourceLoader.cpp index 7ba55e39c91..dd061b1750f 100644 --- a/mozilla/content/xbl/src/nsXBLResourceLoader.cpp +++ b/mozilla/content/xbl/src/nsXBLResourceLoader.cpp @@ -113,7 +113,7 @@ nsXBLResourceLoader::LoadResources(PRBool* aResult) if (curr->mSrc.IsEmpty()) continue; - if (NS_FAILED(NS_NewURI(getter_AddRefs(url), curr->mSrc, docURL))) + if (NS_FAILED(NS_NewURI(getter_AddRefs(url), curr->mSrc, nsnull, docURL))) continue; if (curr->mType == nsXBLAtoms::image) { diff --git a/mozilla/content/xbl/src/nsXBLService.cpp b/mozilla/content/xbl/src/nsXBLService.cpp index 9991a8b9770..7d65d378b33 100644 --- a/mozilla/content/xbl/src/nsXBLService.cpp +++ b/mozilla/content/xbl/src/nsXBLService.cpp @@ -312,9 +312,9 @@ nsXBLStreamListener::OnStopRequest(nsIRequest* request, nsISupports* aCtxt, nsre { nsCOMPtr channelURI; aChannel->GetURI(getter_AddRefs(channelURI)); - nsXPIDLCString str; - channelURI->GetSpec(getter_Copies(str)); - printf("Failed to load XBL document %s\n", (const char*)str); + nsCAutoString str; + channelURI->GetAsciiSpec(str); + printf("Failed to load XBL document %s\n", str.get()); } PRUint32 count = mBindingRequests.Count(); @@ -377,9 +377,9 @@ nsXBLStreamListener::Load(nsIDOMEvent* aEvent) doc->GetBindingManager(getter_AddRefs(bindingManager)); nsCOMPtr uri; mBindingDocument->GetDocumentURL(getter_AddRefs(uri)); - nsXPIDLCString str; - uri->GetSpec(getter_Copies(str)); - bindingManager->RemoveLoadingDocListener(nsCAutoString(NS_STATIC_CAST(const char*, str))); + nsCAutoString str; + uri->GetSpec(str); + bindingManager->RemoveLoadingDocListener(str); nsCOMPtr root; mBindingDocument->GetRootContent(getter_AddRefs(root)); @@ -392,7 +392,7 @@ nsXBLStreamListener::Load(nsIDOMEvent* aEvent) nsCOMPtr info; nsCOMPtr xblDocBindingManager; mBindingDocument->GetBindingManager(getter_AddRefs(xblDocBindingManager)); - xblDocBindingManager->GetXBLDocumentInfo(nsCAutoString(NS_STATIC_CAST(const char*, str)), getter_AddRefs(info)); + xblDocBindingManager->GetXBLDocumentInfo(str, getter_AddRefs(info)); xblDocBindingManager->RemoveXBLDocumentInfo(info); // Break the self-imposed cycle. if (!info) { NS_ERROR("An XBL file is malformed. Did you forget the XBL namespace on the bindings tag?"); @@ -1047,13 +1047,12 @@ NS_IMETHODIMP nsXBLService::GetBindingInternal(nsIContent* aBoundElement, if (hasExtends && (hasDisplay || nameSpace.IsEmpty())) { // Look up the prefix. // We have a base class binding. Load it right now. - nsCAutoString urlCString; urlCString.AssignWithConversion(value); + NS_ConvertUCS2toUTF8 urlCString(value); nsCOMPtr docURI; doc->GetDocumentURL(getter_AddRefs(docURI)); - nsXPIDLCString urlStr; - docURI->Resolve(urlCString.get(), getter_Copies(urlStr)); - urlCString = urlStr.get(); - if (NS_FAILED(GetBindingInternal(aBoundElement, urlCString, aPeekOnly, aIsReady, getter_AddRefs(baseBinding)))) + nsCAutoString urlStr; + docURI->Resolve(urlCString, urlStr); + if (NS_FAILED(GetBindingInternal(aBoundElement, urlStr, aPeekOnly, aIsReady, getter_AddRefs(baseBinding)))) return NS_ERROR_FAILURE; // Binding not yet ready or an error occurred. if (!aPeekOnly) { // Make sure to set the base prototype. @@ -1141,7 +1140,7 @@ nsXBLService::LoadBindingDocumentInfo(nsIContent* aBoundElement, nsIDocument* aB // Finally, if all lines of defense fail, we go and fetch the binding // document. nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), aURLStr.get()); + rv = NS_NewURI(getter_AddRefs(uri), aURLStr); NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create a url"); nsCOMPtr document; @@ -1206,7 +1205,7 @@ nsXBLService::FetchSyncXMLDocument(nsIURI* aURI, nsIDocument** aResult) // Create an XML content sink and a parser. nsCOMPtr request; nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), aURI, nsnull, nsnull); + rv = NS_NewChannel(getter_AddRefs(channel), aURI, nsnull, nsnull); if (NS_FAILED(rv)) return rv; nsCOMPtr listener; @@ -1310,7 +1309,7 @@ nsXBLService::FetchBindingDocument(nsIContent* aBoundElement, nsIDocument* aBoun aBoundDocument->GetDocumentLoadGroup(getter_AddRefs(loadGroup)); nsCOMPtr request; nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), aURI, nsnull, loadGroup); + rv = NS_NewChannel(getter_AddRefs(channel), aURI, nsnull, loadGroup); if (NS_FAILED(rv)) return rv; nsCOMPtr tagName; @@ -1350,10 +1349,10 @@ nsXBLService::FetchBindingDocument(nsIContent* aBoundElement, nsIDocument* aBoun nsCOMPtr bindingManager; if (aBoundDocument) aBoundDocument->GetBindingManager(getter_AddRefs(bindingManager)); - nsXPIDLCString uri; - aURI->GetSpec(getter_Copies(uri)); + nsCAutoString uri; + aURI->GetSpec(uri); if (bindingManager) - bindingManager->PutLoadingDocListener(nsCAutoString(NS_STATIC_CAST(const char*, uri)), xblListener); + bindingManager->PutLoadingDocListener(uri, xblListener); // Add our request. nsCAutoString bindingURI(uri); diff --git a/mozilla/content/xml/content/src/nsXMLElement.cpp b/mozilla/content/xml/content/src/nsXMLElement.cpp index caaab6946c7..ffca9fdbddb 100644 --- a/mozilla/content/xml/content/src/nsXMLElement.cpp +++ b/mozilla/content/xml/content/src/nsXMLElement.cpp @@ -169,7 +169,7 @@ NS_IMPL_ADDREF_INHERITED(nsXMLElement, nsGenericElement) NS_IMPL_RELEASE_INHERITED(nsXMLElement, nsGenericElement) -static inline nsresult MakeURI(const char *aSpec, nsIURI *aBase, nsIURI **aURI) +static inline nsresult MakeURI(const nsACString &aSpec, nsIURI *aBase, nsIURI **aURI) { nsresult rv; static NS_DEFINE_CID(ioServCID,NS_IOSERVICE_CID); @@ -177,7 +177,7 @@ static inline nsresult MakeURI(const char *aSpec, nsIURI *aBase, nsIURI **aURI) if (NS_FAILED(rv)) return rv; - return service->NewURI(aSpec,aBase,aURI); + return service->NewURI(aSpec,nsnull,aBase,aURI); } NS_IMETHODIMP @@ -202,18 +202,16 @@ nsXMLElement::GetXMLBaseURI(nsIURI **aURI) // The complex looking if above is to make sure that we do not erroneously // think a value of "./this:that" would have a scheme of "./that" - // XXX URL escape? - nsCAutoString str; str.AssignWithConversion(value); + NS_ConvertUCS2toUTF8 str(value); - rv = MakeURI(str.get(),nsnull,aURI); + rv = MakeURI(str,nsnull,aURI); if (NS_FAILED(rv)) break; - if (!base.IsEmpty()) { - // XXX URL escape? - str.AssignWithConversion(base.get()); - nsXPIDLCString resolvedStr; - rv = (*aURI)->Resolve(str.get(), getter_Copies(resolvedStr)); + if (!base.IsEmpty()) { // XXXdarin base is always empty + str = NS_ConvertUCS2toUTF8(base); + nsCAutoString resolvedStr; + rv = (*aURI)->Resolve(str, resolvedStr); if (NS_FAILED(rv)) break; rv = (*aURI)->SetSpec(resolvedStr); } @@ -252,9 +250,8 @@ nsXMLElement::GetXMLBaseURI(nsIURI **aURI) *aURI = docBase.get(); NS_IF_ADDREF(*aURI); // nsCOMPtr releases this once } else { - // XXX URL escape? - nsCAutoString str; str.AssignWithConversion(base); - rv = MakeURI(str.get(),docBase,aURI); + NS_ConvertUCS2toUTF8 str(base); + rv = MakeURI(str,docBase,aURI); } } } else { @@ -316,13 +313,12 @@ static nsresult WebShellToPresContext(nsIWebShell *aShell, static nsresult CheckLoadURI(nsIURI *aBaseURI, const nsAReadableString& aURI, nsIURI **aAbsURI) { - // XXX URL escape? - nsCAutoString str; str.Assign(NS_ConvertUCS2toUTF8(aURI)); + NS_ConvertUCS2toUTF8 str(aURI); *aAbsURI = nsnull; nsresult rv; - rv = MakeURI(str.get(),aBaseURI,aAbsURI); + rv = MakeURI(str,aBaseURI,aAbsURI); if (NS_SUCCEEDED(rv)) { nsCOMPtr securityManager = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); diff --git a/mozilla/content/xml/document/src/nsXMLContentSink.cpp b/mozilla/content/xml/document/src/nsXMLContentSink.cpp index 140c41f23b2..61e38b9289c 100644 --- a/mozilla/content/xml/document/src/nsXMLContentSink.cpp +++ b/mozilla/content/xml/document/src/nsXMLContentSink.cpp @@ -713,7 +713,7 @@ nsXMLContentSink::ProcessStyleLink(nsIContent* aElement, return NS_OK; nsCOMPtr url; - rv = NS_NewURI(getter_AddRefs(url), aHref, mDocumentBaseURL); + rv = NS_NewURI(getter_AddRefs(url), aHref, nsnull, mDocumentBaseURL); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr secMan = @@ -749,7 +749,7 @@ nsXMLContentSink::ProcessBASETag() if (NS_CONTENT_ATTR_HAS_VALUE == mBaseElement->GetAttr(kNameSpaceID_HTML, nsHTMLAtoms::href, value)) { nsCOMPtr baseURI; - rv = NS_NewURI(getter_AddRefs(baseURI), value, nsnull); + rv = NS_NewURI(getter_AddRefs(baseURI), value); if (NS_SUCCEEDED(rv)) { rv = mDocument->SetBaseURL(baseURI); // The document checks if it is legal to set this base if (NS_SUCCEEDED(rv)) { @@ -970,15 +970,16 @@ nsXMLContentSink::StartLayout() // If the document we are loading has a reference or it is a top level // frameset document, disable the scroll bars on the views. - nsXPIDLCString ref; + nsCAutoString ref; nsIURL* url; nsresult rv = mDocumentURL->QueryInterface(NS_GET_IID(nsIURL), (void**)&url); if (NS_SUCCEEDED(rv)) { - rv = url->GetRef(getter_Copies(ref)); + rv = url->GetRef(ref); NS_RELEASE(url); } if (rv == NS_OK) { - mRef.AssignWithConversion(ref); + NS_UnescapeURL(ref); // XXX this may result in random non-ASCII bytes! + mRef = NS_ConvertASCIItoUCS2(ref); } PRBool topLevelFrameset = PR_FALSE; @@ -991,7 +992,7 @@ nsXMLContentSink::StartLayout() } } - if (ref || topLevelFrameset) { + if (!ref.IsEmpty() || topLevelFrameset) { // XXX support more than one presentation-shell here // Get initial scroll preference and save it away; disable the diff --git a/mozilla/content/xml/document/src/nsXMLDocument.cpp b/mozilla/content/xml/document/src/nsXMLDocument.cpp index d811f7911fa..22bfab4b37d 100644 --- a/mozilla/content/xml/document/src/nsXMLDocument.cpp +++ b/mozilla/content/xml/document/src/nsXMLDocument.cpp @@ -339,7 +339,7 @@ nsXMLDocument::Load(const nsAReadableString& aUrl) nsresult rv; // Create a new URI - rv = NS_NewURI(getter_AddRefs(uri), aUrl, mDocumentURL); + rv = NS_NewURI(getter_AddRefs(uri), aUrl, nsnull, mDocumentURL); if (NS_FAILED(rv)) return rv; // Get security manager, check to see if we're allowed to load this URI @@ -365,7 +365,7 @@ nsXMLDocument::Load(const nsAReadableString& aUrl) SetBaseURL(uri); // Create a channel - rv = NS_OpenURI(getter_AddRefs(channel), uri, nsnull, nsnull, this); + rv = NS_NewChannel(getter_AddRefs(channel), uri, nsnull, nsnull, this); if (NS_FAILED(rv)) return rv; // Set a principal for this document diff --git a/mozilla/content/xsl/document/src/nsXSLContentSink.cpp b/mozilla/content/xsl/document/src/nsXSLContentSink.cpp index 34d67029b30..d60d4d3f3ad 100644 --- a/mozilla/content/xsl/document/src/nsXSLContentSink.cpp +++ b/mozilla/content/xsl/document/src/nsXSLContentSink.cpp @@ -44,6 +44,7 @@ #include "nsIParser.h" #include "nsIURL.h" #include "nsString2.h" +#include "nsEscape.h" nsresult NS_NewXSLContentSink(nsIXMLContentSink** aResult, @@ -109,13 +110,14 @@ nsXSLContentSink::DidBuildModel(PRInt32 aQualityLevel) nsCOMPtr styleNode; nsCOMPtr url = do_QueryInterface(mDocumentURL); if (url) { - nsXPIDLCString ref; - url->GetRef(getter_Copies(ref)); + nsCAutoString ref; + url->GetRef(ref); if (!ref.IsEmpty()) { + NS_UnescapeURL(ref); // XXX this may result in non-ASCII octets nsCOMPtr styleDoc = do_QueryInterface(mDocument); NS_ENSURE_TRUE(styleDoc, NS_ERROR_NO_INTERFACE); nsCOMPtr elem; - styleDoc->GetElementById(NS_ConvertASCIItoUCS2(ref), + styleDoc->GetElementById(NS_ConvertUTF8toUCS2(ref), getter_AddRefs(elem)); styleNode = elem; } diff --git a/mozilla/content/xul/content/src/nsXULElement.cpp b/mozilla/content/xul/content/src/nsXULElement.cpp index 1b8ede9e105..017f914d454 100644 --- a/mozilla/content/xul/content/src/nsXULElement.cpp +++ b/mozilla/content/xul/content/src/nsXULElement.cpp @@ -5205,15 +5205,15 @@ nsXULPrototypeScript::Compile(const PRUnichar* aText, if (NS_FAILED(rv)) return rv; - nsXPIDLCString urlspec; - aURI->GetSpec(getter_Copies(urlspec)); + nsCAutoString urlspec; + aURI->GetSpec(urlspec); // Ok, compile it to create a prototype script object! rv = context->CompileScript(aText, aTextLength, scopeObject, principal, - urlspec, + urlspec.get(), PRUint32(aLineNo), mLangVersion, (void**)&mJSObject); diff --git a/mozilla/content/xul/document/src/nsXULContentSink.cpp b/mozilla/content/xul/document/src/nsXULContentSink.cpp index f7a8083bc80..95c33ffd17b 100644 --- a/mozilla/content/xul/document/src/nsXULContentSink.cpp +++ b/mozilla/content/xul/document/src/nsXULContentSink.cpp @@ -611,7 +611,7 @@ XULContentSinkImpl::ProcessStyleLink(nsIContent* aElement, if ((mimeType.IsEmpty()) || mimeType.EqualsIgnoreCase(kCSSType)) { nsCOMPtr url; - rv = NS_NewURI(getter_AddRefs(url), aHref, mDocumentURL); + rv = NS_NewURI(getter_AddRefs(url), aHref, nsnull, mDocumentURL); if (NS_OK != rv) { return NS_OK; // The URL is bad, move along, don't propagate the error (for now) } @@ -1072,7 +1072,7 @@ XULContentSinkImpl::HandleProcessingInstruction(const PRUnichar *aTarget, // Add the overlay to our list of overlays that need to be processed. nsCOMPtr url; - nsresult rv = NS_NewURI(getter_AddRefs(url), href, mDocumentURL); + nsresult rv = NS_NewURI(getter_AddRefs(url), href, nsnull, mDocumentURL); if (NS_FAILED(rv)) { // XXX This is wrong, the error message could be out of memory // or something else equally bad, which we should propagate. @@ -1495,7 +1495,7 @@ XULContentSinkImpl::OpenScript(const PRUnichar** aAttributes, // If there is a SRC attribute... if (! src.IsEmpty()) { // Use the SRC attribute value to load the URL - rv = NS_NewURI(getter_AddRefs(script->mSrcURI), src, mDocumentURL); + rv = NS_NewURI(getter_AddRefs(script->mSrcURI), src, nsnull, mDocumentURL); if (NS_FAILED(rv)) { delete script; return rv; @@ -1546,10 +1546,10 @@ XULContentSinkImpl::OpenScript(const PRUnichar** aAttributes, // AbortFastLoads if things look bad. nsresult rv2 = NS_OK; if (script->mSrcURI) { - nsXPIDLCString spec; - script->mSrcURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + script->mSrcURI->GetAsciiSpec(spec); rv2 = fastLoadService->StartMuxedDocument(script->mSrcURI, - spec, + spec.get(), nsIFastLoadService::NS_FASTLOAD_READ); if (NS_SUCCEEDED(rv2)) rv2 = fastLoadService->SelectMuxedDocument(script->mSrcURI); @@ -1653,7 +1653,7 @@ XULContentSinkImpl::AddAttributes(const PRUnichar** aAttributes, qnameC.Assign(aAttributes[0]); PR_LOG(gLog, PR_LOG_ALWAYS, ("xul: unable to parse attribute '%s' at line %d", - NS_ConvertUCS2toUTF8(qnameC), -1)); // XXX pass in line number + NS_ConvertUCS2toUTF8(qnameC).get(), -1)); // XXX pass in line number #endif // Bring it. We'll just fail to copy an attribute that we // can't parse. And that's one less attribute to worry @@ -1675,9 +1675,9 @@ XULContentSinkImpl::AddAttributes(const PRUnichar** aAttributes, PR_LOG(gLog, PR_LOG_DEBUG, ("xul: %.5d. %s %s=%s", -1, // XXX pass in line number - NS_ConvertUCS2toUTF8(extraWhiteSpace), - NS_ConvertUCS2toUTF8(qnameC), - NS_ConvertUCS2toUTF8(valueC))); + NS_ConvertUCS2toUTF8(extraWhiteSpace).get(), + NS_ConvertUCS2toUTF8(qnameC).get(), + NS_ConvertUCS2toUTF8(valueC).get())); } #endif ++attrs; diff --git a/mozilla/content/xul/document/src/nsXULDocument.cpp b/mozilla/content/xul/document/src/nsXULDocument.cpp index b1918191d7c..4a31e623912 100644 --- a/mozilla/content/xul/document/src/nsXULDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULDocument.cpp @@ -394,7 +394,7 @@ PlaceHolderRequest::PlaceHolderRequest() if (gRefCnt++ == 0) { nsresult rv; - rv = NS_NewURI(&gURI, "about:xul-master-placeholder", nsnull); + rv = NS_NewURI(&gURI, NS_LITERAL_CSTRING("about:xul-master-placeholder"), nsnull); NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create about:xul-master-placeholder"); } } @@ -2996,12 +2996,12 @@ nsXULDocument::Persist(nsIContent* aElement, PRInt32 aNameSpaceID, // Add it to the persisted set for this document (if it's not // there already). { - nsXPIDLCString docurl; - rv = mDocumentURL->GetSpec(getter_Copies(docurl)); + nsCAutoString docurl; + rv = mDocumentURL->GetSpec(docurl); if (NS_FAILED(rv)) return rv; nsCOMPtr doc; - rv = gRDFService->GetResource(docurl, getter_AddRefs(doc)); + rv = gRDFService->GetResource(docurl.get(), getter_AddRefs(doc)); if (NS_FAILED(rv)) return rv; PRBool hasAssertion; @@ -4149,11 +4149,9 @@ nsXULDocument::GetBaseURI(nsAWritableString &aURI) { aURI.Truncate(); if (mDocumentBaseURL) { - nsXPIDLCString spec; - mDocumentBaseURL->GetSpec(getter_Copies(spec)); - if (spec) { - CopyASCIItoUCS2(nsDependentCString(spec), aURI); - } + nsCAutoString spec; + mDocumentBaseURL->GetSpec(spec); + aURI = NS_ConvertUTF8toUCS2(spec); } return NS_OK; } @@ -4345,11 +4343,11 @@ nsXULDocument::StartLayout(void) { if (! mRootContent) { #ifdef PR_LOGGING - nsXPIDLCString urlspec; - mDocumentURL->GetSpec(getter_Copies(urlspec)); + nsCAutoString urlspec; + mDocumentURL->GetSpec(urlspec); PR_LOG(gXULLog, PR_LOG_ALWAYS, - ("xul: unable to layout '%s'; no root content", (const char*) urlspec)); + ("xul: unable to layout '%s'; no root content", urlspec.get())); #endif return NS_OK; } @@ -5210,8 +5208,8 @@ nsXULDocument::PrepareToLoadPrototype(nsIURI* aURI, const char* aCommand, // sinking content, it "selects" the memorized document from the // FastLoad multiplexor, using the nsIURI* as a fast identifier. if (mIsFastLoad) { - nsXPIDLCString urlspec; - rv = aURI->GetSpec(getter_Copies(urlspec)); + nsCAutoString urlspec; + rv = aURI->GetAsciiSpec(urlspec); if (NS_FAILED(rv)) return rv; // If StartMuxedDocument returns NS_ERROR_NOT_AVAILABLE, then @@ -5220,7 +5218,7 @@ nsXULDocument::PrepareToLoadPrototype(nsIURI* aURI, const char* aCommand, // will therefore arrange to update the file, writing new data // at the end while old (available) data continues to be read // from the pre-existing part of the file. - rv = gFastLoadService->StartMuxedDocument(aURI, urlspec, + rv = gFastLoadService->StartMuxedDocument(aURI, urlspec.get(), nsIFastLoadService::NS_FASTLOAD_READ | nsIFastLoadService::NS_FASTLOAD_WRITE); NS_ASSERTION(rv != NS_ERROR_NOT_AVAILABLE, "only reading FastLoad?!"); @@ -5278,11 +5276,11 @@ nsXULDocument::ApplyPersistentAttributes() rv = NS_NewISupportsArray(getter_AddRefs(elements)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString docurl; - mDocumentURL->GetSpec(getter_Copies(docurl)); + nsCAutoString docurl; + mDocumentURL->GetSpec(docurl); nsCOMPtr doc; - gRDFService->GetResource(docurl, getter_AddRefs(doc)); + gRDFService->GetResource(docurl.get(), getter_AddRefs(doc)); nsCOMPtr persisted; mLocalStore->GetTargets(doc, kNC_persist, PR_TRUE, getter_AddRefs(persisted)); @@ -5559,12 +5557,12 @@ nsXULDocument::PrepareToWalk() rv = mCurrentPrototype->GetURI(getter_AddRefs(url)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString urlspec; - rv = url->GetSpec(getter_Copies(urlspec)); + nsCAutoString urlspec; + rv = url->GetSpec(urlspec); if (NS_FAILED(rv)) return rv; PR_LOG(gXULLog, PR_LOG_ALWAYS, - ("xul: error parsing '%s'", (const char*) urlspec)); + ("xul: error parsing '%s'", urlspec.get())); #endif return NS_OK; @@ -5844,11 +5842,11 @@ nsXULDocument::ResumeWalk() #ifdef PR_LOGGING if (PR_LOG_TEST(gXULLog, PR_LOG_DEBUG)) { - nsXPIDLCString urlspec; - uri->GetSpec(getter_Copies(urlspec)); + nsCAutoString urlspec; + uri->GetSpec(urlspec); PR_LOG(gXULLog, PR_LOG_DEBUG, - ("xul: loading overlay %s", (const char*) urlspec)); + ("xul: loading overlay %s", urlspec.get())); } #endif // Look in the prototype cache for the prototype document with @@ -6051,10 +6049,9 @@ nsXULDocument::OnStreamComplete(nsIStreamLoader* aLoader, nsCOMPtr uri; channel->GetURI(getter_AddRefs(uri)); if (uri) { - nsXPIDLCString uriSpec; - uri->GetSpec(getter_Copies(uriSpec)); - printf("Failed to load %s\n", - uriSpec.get() ? (const char*) uriSpec : ""); + nsCAutoString uriSpec; + uri->GetSpec(uriSpec); + printf("Failed to load %s\n", uriSpec.get()); } } } @@ -6093,9 +6090,9 @@ nsXULDocument::OnStreamComplete(nsIStreamLoader* aLoader, // End muxing afterward. nsCOMPtr uri = scriptProto->mSrcURI; if (mIsFastLoad) { - nsXPIDLCString urispec; - uri->GetSpec(getter_Copies(urispec)); - rv = gFastLoadService->StartMuxedDocument(uri, urispec, + nsCAutoString urispec; + uri->GetAsciiSpec(urispec); + rv = gFastLoadService->StartMuxedDocument(uri, urispec.get(), nsIFastLoadService::NS_FASTLOAD_WRITE); NS_ASSERTION(rv != NS_ERROR_NOT_AVAILABLE, "reading FastLoad?!"); if (NS_SUCCEEDED(rv)) @@ -7255,10 +7252,10 @@ nsXULDocument::ParserObserver::OnStopRequest(nsIRequest *request, nsCOMPtr uri; aChannel->GetOriginalURI(getter_AddRefs(uri)); - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + uri->GetSpec(spec); - printf("*** Failed to load overlay %s\n", (const char*) spec); + printf("*** Failed to load overlay %s\n", spec.get()); #endif rv = mDocument->ResumeWalk(); diff --git a/mozilla/content/xul/document/src/nsXULPrototypeCache.cpp b/mozilla/content/xul/document/src/nsXULPrototypeCache.cpp index 6a75aeaccdd..18b11479748 100644 --- a/mozilla/content/xul/document/src/nsXULPrototypeCache.cpp +++ b/mozilla/content/xul/document/src/nsXULPrototypeCache.cpp @@ -108,9 +108,9 @@ protected: ~nsIURIKey(void) {} PRUint32 HashCode(void) const { - nsXPIDLCString spec; - mKey->GetSpec(getter_Copies(spec)); - return (PRUint32) PL_HashString(spec); + nsCAutoString spec; + mKey->GetSpec(spec); + return (PRUint32) PL_HashString(spec.get()); } PRBool Equals(const nsHashKey *aKey) const { @@ -311,10 +311,10 @@ nsXULPrototypeCache::PutXBLDocumentInfo(nsIXBLDocumentInfo* aDocumentInfo) nsCOMPtr uri; doc->GetDocumentURL(getter_AddRefs(uri)); - nsXPIDLCString str; - uri->GetSpec(getter_Copies(str)); + nsCAutoString str; + uri->GetSpec(str); - nsCStringKey key((const char*)str); + nsCStringKey key(str.get()); nsCOMPtr info = getter_AddRefs(NS_STATIC_CAST(nsIXBLDocumentInfo*, mXBLDocTable.Get(&key))); if (!info) mXBLDocTable.Put(&key, aDocumentInfo); @@ -367,9 +367,9 @@ PRBool PR_CALLBACK FlushSkinXBL(nsHashKey* aKey, void* aData, void* aClosure) docInfo->GetDocument(getter_AddRefs(doc)); nsCOMPtr uri; doc->GetDocumentURL(getter_AddRefs(uri)); - nsXPIDLCString str; - uri->GetPath(getter_Copies(str)); - if (!PL_strncmp(str.get(), "/skin", 5)) { + nsCAutoString str; + uri->GetPath(str); + if (!strncmp(str.get(), "/skin", 5)) { // This is a skin binding. Add the key to the list. nsHashKeys* list = (nsHashKeys*)aClosure; list->AppendKey(aKey); @@ -382,9 +382,9 @@ PRBool PR_CALLBACK FlushSkinSheets(nsHashKey* aKey, void* aData, void* aClosure) nsICSSStyleSheet* sheet = (nsICSSStyleSheet*)aData; nsCOMPtr uri; sheet->GetURL(*getter_AddRefs(uri)); - nsXPIDLCString str; - uri->GetPath(getter_Copies(str)); - if (!PL_strncmp(str.get(), "/skin", 5)) { + nsCAutoString str; + uri->GetPath(str); + if (!strncmp(str.get(), "/skin", 5)) { // This is a skin binding. Add the key to the list. nsHashKeys* list = (nsHashKeys*)aClosure; list->AppendKey(aKey); diff --git a/mozilla/content/xul/templates/src/nsXULContentUtils.cpp b/mozilla/content/xul/templates/src/nsXULContentUtils.cpp index 5b4a533901a..4ee77d89e28 100644 --- a/mozilla/content/xul/templates/src/nsXULContentUtils.cpp +++ b/mozilla/content/xul/templates/src/nsXULContentUtils.cpp @@ -373,17 +373,12 @@ nsXULContentUtils::MakeElementURI(nsIDocument* aDocument, const nsAReadableStrin // figure out. #define USE_BROKEN_RELATIVE_PARSING #ifdef USE_BROKEN_RELATIVE_PARSING - nsXPIDLCString spec; - docURL->GetSpec(getter_Copies(spec)); - if (! spec) - return NS_ERROR_FAILURE; - - aURI.Assign(spec); + docURL->GetSpec(aURI); if (aElementID.First() != '#') { aURI.Append('#'); } - aURI.AppendWithConversion(aElementID); + aURI.Append(NS_ConvertUCS2toUTF8(aElementID)); #else nsXPIDLCString spec; rv = NS_MakeAbsoluteURI(nsCAutoString(aElementID), docURL, getter_Copies(spec)); @@ -431,10 +426,8 @@ nsXULContentUtils::MakeElementID(nsIDocument* aDocument, const nsAReadableString rv = aDocument->GetBaseURL(*getter_AddRefs(docURL)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString spec; - docURL->GetSpec(getter_Copies(spec)); - if (! spec) - return NS_ERROR_FAILURE; + nsCAutoString spec; + docURL->GetSpec(spec); // XXX FIX ME to not do a copy nsAutoString str(aURI); @@ -444,7 +437,7 @@ nsXULContentUtils::MakeElementID(nsIDocument* aDocument, const nsAReadableString #else static const PRInt32 kFudge = 0; #endif - PRInt32 len = PL_strlen(spec); + PRInt32 len = spec.Length(); aURI.Right(aElementID, aURI.Length() - (len + kFudge)); } else { diff --git a/mozilla/directory/xpcom/base/src/nsLDAPProtocolHandler.cpp b/mozilla/directory/xpcom/base/src/nsLDAPProtocolHandler.cpp index 4b72f49735e..cbb6b65c648 100644 --- a/mozilla/directory/xpcom/base/src/nsLDAPProtocolHandler.cpp +++ b/mozilla/directory/xpcom/base/src/nsLDAPProtocolHandler.cpp @@ -59,13 +59,10 @@ nsLDAPProtocolHandler::~nsLDAPProtocolHandler() // getter method for scheme attr // NS_IMETHODIMP -nsLDAPProtocolHandler::GetScheme(char **result) +nsLDAPProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("ldap"); - if ( ! *result ) - return NS_ERROR_OUT_OF_MEMORY; - else - return NS_OK; + result = "ldap"; + return NS_OK; } // getter method for defaultPort attribute @@ -89,7 +86,9 @@ nsLDAPProtocolHandler::GetProtocolFlags(PRUint32 *result) // construct an appropriate URI // NS_IMETHODIMP -nsLDAPProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsLDAPProtocolHandler::NewURI(const char *aSpec, + const char *aOriginCharset, // ignored + nsIURI *aBaseURI, nsIURI **result) { nsCOMPtr url; diff --git a/mozilla/directory/xpcom/base/src/nsLDAPService.cpp b/mozilla/directory/xpcom/base/src/nsLDAPService.cpp index 1c6dc03d66a..1153651e746 100644 --- a/mozilla/directory/xpcom/base/src/nsLDAPService.cpp +++ b/mozilla/directory/xpcom/base/src/nsLDAPService.cpp @@ -716,7 +716,7 @@ nsLDAPService::EstablishConnection(nsLDAPServiceEntry *aEntry, nsCOMPtr url; nsCOMPtr conn, conn2; nsCOMPtr message; - nsXPIDLCString host; + nsCAutoString host; nsXPIDLString binddn; nsXPIDLString password; PRInt32 port; @@ -744,7 +744,7 @@ nsLDAPService::EstablishConnection(nsLDAPServiceEntry *aEntry, if (NS_FAILED(rv)) { return NS_ERROR_FAILURE; } - rv = url->GetHost(getter_Copies(host)); + rv = url->GetAsciiHost(host); if (NS_FAILED(rv)) { return NS_ERROR_FAILURE; } @@ -764,7 +764,7 @@ nsLDAPService::EstablishConnection(nsLDAPServiceEntry *aEntry, // Here we need to provide the binddn, see bug #75990 // - rv = conn->Init(host, port, 0, this); + rv = conn->Init(host.get(), port, 0, this); if (NS_FAILED(rv)) { switch (rv) { // Only pass along errors we are aware of diff --git a/mozilla/directory/xpcom/base/src/nsLDAPURL.cpp b/mozilla/directory/xpcom/base/src/nsLDAPURL.cpp index 03c017894d4..3e1f151c880 100644 --- a/mozilla/directory/xpcom/base/src/nsLDAPURL.cpp +++ b/mozilla/directory/xpcom/base/src/nsLDAPURL.cpp @@ -35,11 +35,12 @@ #include "nsLDAPURL.h" #include "nsReadableUtils.h" +#include "netCore.h" // The two schemes we support, LDAP and LDAPS // -static const char *kLDAPScheme = "ldap"; -static const char *kLDAPSSLScheme = "ldaps"; +static const char kLDAPScheme[] = "ldap"; +static const char kLDAPSSLScheme[] = "ldaps"; // Constructor and destructor @@ -83,16 +84,11 @@ nsLDAPURL::Init() // attribute string spec; // NS_IMETHODIMP -nsLDAPURL::GetSpec(char **_retval) +nsLDAPURL::GetSpec(nsACString &_retval) { nsCAutoString spec; PRUint32 count; - if (!_retval) { - NS_ERROR("nsLDAPURL::GetSpec: null pointer "); - return NS_ERROR_NULL_POINTER; - } - spec = ((mOptions & OPT_SECURE) ? kLDAPSSLScheme : kLDAPScheme); spec.Append("://"); if (mHost.Length() > 0) { @@ -134,16 +130,11 @@ nsLDAPURL::GetSpec(char **_retval) } } - *_retval = ToNewCString(spec); - if (!*_retval) { - NS_ERROR("nsLDAPURL::GetSpec: out of memory "); - return NS_ERROR_OUT_OF_MEMORY; - } - + _retval = spec; return NS_OK; } NS_IMETHODIMP -nsLDAPURL::SetSpec(const char *aSpec) +nsLDAPURL::SetSpec(const nsACString &aSpec) { PRUint32 rv, count; LDAPURLDesc *desc; @@ -153,7 +144,7 @@ nsLDAPURL::SetSpec(const char *aSpec) // This is from the LDAP C-SDK, which currently doesn't // support everything from RFC 2255... :( // - rv = ldap_url_parse(aSpec, &desc); + rv = ldap_url_parse(PromiseFlatCString(aSpec).get(), &desc); switch (rv) { case LDAP_SUCCESS: mHost = desc->lud_host; @@ -204,39 +195,24 @@ nsLDAPURL::SetSpec(const char *aSpec) // attribute string prePath; // -NS_IMETHODIMP nsLDAPURL::GetPrePath(char **_retval) +NS_IMETHODIMP nsLDAPURL::GetPrePath(nsACString &_retval) { - return NS_ERROR_NOT_IMPLEMENTED; -} -NS_IMETHODIMP nsLDAPURL::SetPrePath(const char *aPrePath) -{ - return NS_ERROR_NOT_IMPLEMENTED; + _retval.Truncate(); + return NS_OK; } // attribute string scheme; // -NS_IMETHODIMP nsLDAPURL::GetScheme(char **_retval) +NS_IMETHODIMP nsLDAPURL::GetScheme(nsACString &_retval) { - if (!_retval) { - NS_ERROR("nsLDAPURL::GetScheme: null pointer "); - return NS_ERROR_NULL_POINTER; - } - - - *_retval = nsCRT::strdup((mOptions & OPT_SECURE) ? kLDAPSSLScheme : - kLDAPScheme); - if (!*_retval) { - NS_ERROR("nsLDAPURL::GetScheme: out of memory "); - return NS_ERROR_OUT_OF_MEMORY; - } - + _retval = (mOptions & OPT_SECURE) ? kLDAPSSLScheme : kLDAPScheme; return NS_OK; } -NS_IMETHODIMP nsLDAPURL::SetScheme(const char *aScheme) +NS_IMETHODIMP nsLDAPURL::SetScheme(const nsACString &aScheme) { - if (nsCRT::strcasecmp(aScheme, kLDAPScheme) == 0) { + if (aScheme.Equals(kLDAPScheme, nsCaseInsensitiveCStringComparator())) { mOptions ^= OPT_SECURE; - } else if (nsCRT::strcasecmp(aScheme, kLDAPSSLScheme) == 0) { + } else if (aScheme.Equals(kLDAPSSLScheme, nsCaseInsensitiveCStringComparator())) { mOptions |= OPT_SECURE; } else { return NS_ERROR_MALFORMED_URI; @@ -245,15 +221,16 @@ NS_IMETHODIMP nsLDAPURL::SetScheme(const char *aScheme) return NS_OK; } -// attribute string preHost; +// attribute string userPass; // NS_IMETHODIMP -nsLDAPURL::GetPreHost(char **_retval) +nsLDAPURL::GetUserPass(nsACString &_retval) { - return NS_ERROR_NOT_IMPLEMENTED; + _retval.Truncate(); + return NS_OK; } NS_IMETHODIMP -nsLDAPURL::SetPreHost(const char *aPreHost) +nsLDAPURL::SetUserPass(const nsACString &aPreHost) { return NS_ERROR_NOT_IMPLEMENTED; } @@ -261,12 +238,13 @@ nsLDAPURL::SetPreHost(const char *aPreHost) // attribute string username // NS_IMETHODIMP -nsLDAPURL::GetUsername(char **_retval) +nsLDAPURL::GetUsername(nsACString &_retval) { - return NS_ERROR_NOT_IMPLEMENTED; + _retval.Truncate(); + return NS_OK; } NS_IMETHODIMP -nsLDAPURL::SetUsername(const char *aUsername) +nsLDAPURL::SetUsername(const nsACString &aUsername) { return NS_ERROR_NOT_IMPLEMENTED; } @@ -274,12 +252,27 @@ nsLDAPURL::SetUsername(const char *aUsername) // attribute string password; // NS_IMETHODIMP -nsLDAPURL::GetPassword(char **_retval) +nsLDAPURL::GetPassword(nsACString &_retval) +{ + _retval.Truncate(); + return NS_OK; +} +NS_IMETHODIMP +nsLDAPURL::SetPassword(const nsACString &aPassword) { return NS_ERROR_NOT_IMPLEMENTED; } + +// attribute string hostPort; +// NS_IMETHODIMP -nsLDAPURL::SetPassword(const char *aPassword) +nsLDAPURL::GetHostPort(nsACString &_retval) +{ + _retval.Truncate(); + return NS_OK; +} +NS_IMETHODIMP +nsLDAPURL::SetHostPort(const nsACString &aHostPort) { return NS_ERROR_NOT_IMPLEMENTED; } @@ -287,23 +280,13 @@ nsLDAPURL::SetPassword(const char *aPassword) // attribute string host; // NS_IMETHODIMP -nsLDAPURL::GetHost(char **_retval) +nsLDAPURL::GetHost(nsACString &_retval) { - if (!_retval) { - NS_ERROR("nsLDAPURL::GetHost: null pointer "); - return NS_ERROR_NULL_POINTER; - } - - *_retval = ToNewCString(mHost); - if (!*_retval) { - NS_ERROR("nsLDAPURL::GetHost: out of memory "); - return NS_ERROR_OUT_OF_MEMORY; - } - + _retval = mHost; return NS_OK; } NS_IMETHODIMP -nsLDAPURL::SetHost(const char *aHost) +nsLDAPURL::SetHost(const nsACString &aHost) { mHost = aHost; return NS_OK; @@ -346,27 +329,34 @@ nsLDAPURL::SetPort(PRInt32 aPort) // attribute string path; // XXXleif: For now, these are identical to SetDn()/GetDn(). -NS_IMETHODIMP nsLDAPURL::GetPath(char **_retval) +NS_IMETHODIMP nsLDAPURL::GetPath(nsACString &_retval) { - if (!_retval) { - NS_ERROR("nsLDAPURL::GetPath: null pointer "); - return NS_ERROR_NULL_POINTER; - } - - *_retval = ToNewCString(mDN); - if (!*_retval) { - NS_ERROR("nsLDAPURL::GetPath: out of memory "); - return NS_ERROR_OUT_OF_MEMORY; - } - + _retval = mDN; return NS_OK; } -NS_IMETHODIMP nsLDAPURL::SetPath(const char *aPath) +NS_IMETHODIMP nsLDAPURL::SetPath(const nsACString &aPath) { mDN = aPath; return NS_OK; } +// attribute string specA +NS_IMETHODIMP nsLDAPURL::GetAsciiSpec(nsACString &_retval) +{ + return GetSpec(_retval); +} +// attribute string hostA +NS_IMETHODIMP nsLDAPURL::GetAsciiHost(nsACString &_retval) +{ + return GetHost(_retval); +} + +NS_IMETHODIMP nsLDAPURL::GetOriginCharset(nsACString &result) +{ + result.Truncate(); + return NS_OK; +} + // boolean equals (in nsIURI other) // NS_IMETHODIMP nsLDAPURL::Equals(nsIURI *other, PRBool *_retval) @@ -397,8 +387,8 @@ NS_IMETHODIMP nsLDAPURL::Clone(nsIURI **_retval) // string resolve (in string relativePath); // -NS_IMETHODIMP nsLDAPURL::Resolve(const char *relativePath, - char **_retval) +NS_IMETHODIMP nsLDAPURL::Resolve(const nsACString &relativePath, + nsACString &_retval) { return NS_ERROR_NOT_IMPLEMENTED; } diff --git a/mozilla/docshell/base/nsDefaultURIFixup.cpp b/mozilla/docshell/base/nsDefaultURIFixup.cpp index 5bfe754330a..bd751abe063 100644 --- a/mozilla/docshell/base/nsDefaultURIFixup.cpp +++ b/mozilla/docshell/base/nsDefaultURIFixup.cpp @@ -88,10 +88,9 @@ nsDefaultURIFixup::CreateFixupURI(const PRUnichar *aStringURI, PRUint32 aFixupFl getter_AddRefs(uri)); if (NS_FAILED(rv) || !uri) return NS_ERROR_FAILURE; - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); - uriString.Assign(NS_LITERAL_STRING("view-source:")); - uriString.Append(NS_ConvertASCIItoUCS2(spec)); + nsCAutoString spec; + uri->GetSpec(spec); + uriString.Assign(NS_LITERAL_STRING("view-source:") + NS_ConvertUTF8toUCS2(spec)); } else { // Check for if it is a file URL @@ -205,20 +204,14 @@ PRBool nsDefaultURIFixup::MakeAlternateURI(nsIURI *aURI) } // Security - URLs with user / password info should NOT be fixed up - nsXPIDLCString username; - nsXPIDLCString password; - aURI->GetUsername(getter_Copies(username)); - aURI->GetPassword(getter_Copies(password)); - if (username.Length() > 0 || password.Length() > 0) - { + nsCAutoString userpass; + aURI->GetUserPass(userpass); + if (userpass.Length() > 0) { return PR_FALSE; } - nsXPIDLCString host; - aURI->GetHost(getter_Copies(host)); - - nsCAutoString oldHost(host); - nsCAutoString newHost; + nsCAutoString oldHost, newHost; + aURI->GetHost(oldHost); // Count the dots PRInt32 numDots = 0; @@ -267,7 +260,7 @@ PRBool nsDefaultURIFixup::MakeAlternateURI(nsIURI *aURI) } // Assign the new host string over the old one - aURI->SetHost(newHost.get()); + aURI->SetHost(newHost); return PR_TRUE; } @@ -352,9 +345,7 @@ nsresult nsDefaultURIFixup::ConvertFileToStringURI(nsString& aIn, nsresult rv = NS_NewLocalFile(file.get(), PR_FALSE, getter_AddRefs(filePath)); if (NS_SUCCEEDED(rv)) { - nsXPIDLCString fileurl; - NS_GetURLSpecFromFile(filePath, getter_Copies(fileurl)); - aOut.Assign(fileurl); + NS_GetURLSpecFromFile(filePath, aOut); return NS_OK; } } diff --git a/mozilla/docshell/base/nsDocShell.cpp b/mozilla/docshell/base/nsDocShell.cpp index 3ed3bec1c0e..94e81366566 100644 --- a/mozilla/docshell/base/nsDocShell.cpp +++ b/mozilla/docshell/base/nsDocShell.cpp @@ -516,8 +516,8 @@ nsDocShell::LoadURI(nsIURI * aURI, #ifdef PR_LOGGING if (PR_LOG_TEST(gDocShellLog, PR_LOG_DEBUG)) { - nsXPIDLCString uristr; - aURI->GetSpec(getter_Copies(uristr)); + nsCAutoString uristr; + aURI->GetAsciiSpec(uristr); PR_LOG(gDocShellLog, PR_LOG_DEBUG, ("nsDocShell[%p]: loading %s with flags 0x%08x", this, uristr.get(), aLoadFlags)); @@ -675,7 +675,7 @@ nsDocShell::LoadStream(nsIInputStream * aStream, nsIURI * aURI, return rv; // Make sure that the URI spec "looks" like a protocol and path... // For now, just use a bogus protocol called "internal" - rv = uri->SetSpec("internal:load-stream"); + rv = uri->SetSpec(NS_LITERAL_CSTRING("internal:load-stream")); if (NS_FAILED(rv)) return rv; } @@ -770,35 +770,35 @@ nsDocShell::FireUnloadNotification() static PRBool SameOrSubdomainOfTarget(nsIURI* aOriginURI, nsIURI* aTargetURI, PRBool aDocumentDomainSet) { - nsXPIDLCString targetScheme; - nsresult rv = aTargetURI->GetScheme(getter_Copies(targetScheme)); - NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && targetScheme, PR_TRUE); + nsCAutoString targetScheme; + nsresult rv = aTargetURI->GetScheme(targetScheme); + NS_ENSURE_TRUE(NS_SUCCEEDED(rv), PR_TRUE); - nsXPIDLCString originScheme; - rv = aOriginURI->GetScheme(getter_Copies(originScheme)); - NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && originScheme, PR_TRUE); + nsCAutoString originScheme; + rv = aOriginURI->GetScheme(originScheme); + NS_ENSURE_TRUE(NS_SUCCEEDED(rv), PR_TRUE); - if (PL_strcmp(targetScheme, originScheme)) + if (strcmp(targetScheme.get(), originScheme.get())) return PR_FALSE; // Different schemes - check fails - if (! PL_strcmp(targetScheme, "file")) + if (! strcmp(targetScheme.get(), "file")) return PR_TRUE; // All file: urls are considered to have the same origin. - if (! PL_strcmp(targetScheme, "imap") || - ! PL_strcmp(targetScheme, "mailbox") || - ! PL_strcmp(targetScheme, "news")) + if (! strcmp(targetScheme.get(), "imap") || + ! strcmp(targetScheme.get(), "mailbox") || + ! strcmp(targetScheme.get(), "news")) { // Each message is a distinct trust domain; use the whole spec for comparison - nsXPIDLCString targetSpec; - rv =aTargetURI->GetSpec(getter_Copies(targetSpec)); - NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && targetSpec, PR_TRUE); + nsCAutoString targetSpec; + rv =aTargetURI->GetAsciiSpec(targetSpec); + NS_ENSURE_TRUE(NS_SUCCEEDED(rv), PR_TRUE); - nsXPIDLCString originSpec; - rv = aOriginURI->GetSpec(getter_Copies(originSpec)); - NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && originSpec, PR_TRUE); + nsCAutoString originSpec; + rv = aOriginURI->GetAsciiSpec(originSpec); + NS_ENSURE_TRUE(NS_SUCCEEDED(rv), PR_TRUE); - return (! PL_strcmp(targetSpec, originSpec)); // True if full spec is same, false otherwise + return (! strcmp(targetSpec.get(), originSpec.get())); // True if full spec is same, false otherwise } // Compare ports. @@ -813,28 +813,28 @@ PRBool SameOrSubdomainOfTarget(nsIURI* aOriginURI, nsIURI* aTargetURI, PRBool aD return PR_FALSE; // Different port - check fails // Need to check the hosts - nsXPIDLCString targetHost; - rv = aTargetURI->GetHost(getter_Copies(targetHost)); - NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && targetHost, PR_TRUE); + nsCAutoString targetHost; + rv = aTargetURI->GetHost(targetHost); + NS_ENSURE_TRUE(NS_SUCCEEDED(rv), PR_TRUE); - nsXPIDLCString originHost; - rv = aOriginURI->GetHost(getter_Copies(originHost)); - NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && originHost, PR_TRUE); + nsCAutoString originHost; + rv = aOriginURI->GetHost(originHost); + NS_ENSURE_TRUE(NS_SUCCEEDED(rv), PR_TRUE); - if (!PL_strcmp(targetHost, originHost)) + if (!strcmp(targetHost.get(), originHost.get())) return PR_TRUE; // Hosts are the same - check passed // If document.domain was set, do the relaxed check // Right align hostnames and compare - ensure preceeding char is . or / if (aDocumentDomainSet) { - int targetHostLen = PL_strlen(targetHost); - int originHostLen = PL_strlen(originHost); + int targetHostLen = targetHost.Length(); + int originHostLen = originHost.Length(); int prefixChar = originHostLen-targetHostLen-1; return ((originHostLen > targetHostLen) && - (! PL_strcmp((originHost+prefixChar+1), targetHost)) && - (originHost[prefixChar] == '.' || originHost[prefixChar] == '/')); + (! strcmp((originHost.get()+prefixChar+1), targetHost.get())) && + (originHost.CharAt(prefixChar) == '.' || originHost.CharAt(prefixChar) == '/')); } return PR_FALSE; // document.domain not set and hosts not same - check failed @@ -2884,12 +2884,12 @@ nsDocShell::SetTitle(const PRUnichar * aTitle) } if (mGlobalHistory && mCurrentURI) { - nsXPIDLCString url; - mCurrentURI->GetSpec(getter_Copies(url)); + nsCAutoString url; + mCurrentURI->GetSpec(url); nsCOMPtr browserHistory = do_QueryInterface(mGlobalHistory); if (browserHistory) - browserHistory->SetPageTitle(url, aTitle); + browserHistory->SetPageTitle(url.get(), aTitle); } @@ -3472,7 +3472,7 @@ nsDocShell::SetupRefreshURIFromHeader(nsIURI * aBaseURI, } else { uriAttrib = Substring(tokenStart, iter); - rv = NS_NewURI(getter_AddRefs(uri), uriAttrib, aBaseURI); + rv = NS_NewURI(getter_AddRefs(uri), uriAttrib, nsnull, aBaseURI); } if (NS_SUCCEEDED(rv)) { @@ -3726,9 +3726,9 @@ nsDocShell::OnStateChange(nsIWebProgress * aProgress, nsIRequest * aRequest, nsCOMPtr browserHistory = do_QueryInterface(mGlobalHistory); if (browserHistory) { - nsXPIDLCString urlString; - if (NS_SUCCEEDED(uri->GetSpec(getter_Copies(urlString)))) - browserHistory->HidePage(urlString); + nsCAutoString urlString; + if (NS_SUCCEEDED(uri->GetSpec(urlString))) + browserHistory->HidePage(urlString.get()); } } @@ -4325,14 +4325,14 @@ nsDocShell::InternalLoad(nsIURI * aURI, name.EqualsIgnoreCase("_blank"))) { nsCOMPtr extProtService; - nsXPIDLCString urlScheme; + nsCAutoString urlScheme; extProtService = do_GetService(NS_EXTERNALPROTOCOLSERVICE_CONTRACTID); if (extProtService) { PRBool haveHandler = PR_FALSE; - aURI->GetScheme(getter_Copies(urlScheme)); + aURI->GetScheme(urlScheme); - extProtService->ExternalProtocolHandlerExists(urlScheme, + extProtService->ExternalProtocolHandlerExists(urlScheme.get(), &haveHandler); if (haveHandler) return extProtService->LoadUrl(aURI); @@ -4534,7 +4534,7 @@ nsDocShell::CreateFixupURI(const PRUnichar * aStringURI, nsIURI ** aURI) mURIFixup = do_GetService(NS_URIFIXUP_CONTRACTID); if (!mURIFixup) { // No fixup service so try and create a URI and see what happens - return NS_NewURI(aURI, uriString, nsnull); + return NS_NewURI(aURI, uriString); } } @@ -4606,11 +4606,11 @@ nsresult nsDocShell::DoURILoad(nsIURI * aURI, // open a channel for the url nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), - aURI, - nsnull, - loadGroup, - NS_STATIC_CAST(nsIInterfaceRequestor *, this)); + rv = NS_NewChannel(getter_AddRefs(channel), + aURI, + nsnull, + loadGroup, + NS_STATIC_CAST(nsIInterfaceRequestor *, this)); if (NS_FAILED(rv)) return rv; @@ -4975,12 +4975,12 @@ nsDocShell::ScrollIfAnchor(nsIURI * aURI, PRBool * aWasAnchor) // NOTE: we assume URIs are absolute for comparison purposes - nsXPIDLCString currentSpec; - NS_ENSURE_SUCCESS(mCurrentURI->GetSpec(getter_Copies(currentSpec)), + nsCAutoString currentSpec; + NS_ENSURE_SUCCESS(mCurrentURI->GetSpec(currentSpec), NS_ERROR_FAILURE); - nsXPIDLCString newSpec; - NS_ENSURE_SUCCESS(aURI->GetSpec(getter_Copies(newSpec)), NS_ERROR_FAILURE); + nsCAutoString newSpec; + NS_ENSURE_SUCCESS(aURI->GetSpec(newSpec), NS_ERROR_FAILURE); // Search for hash marks in the current URI and the new URI and // take a copy of everything to the left of the hash for @@ -5271,21 +5271,18 @@ nsDocShell::ShouldAddToSessionHistory(nsIURI * aURI) // should just do a spec compare, rather than two gets of the scheme and // then the path. -Gagan nsresult rv; - nsXPIDLCString buffer; - nsCAutoString schemeStr; + nsCAutoString buf; - rv = aURI->GetScheme(getter_Copies(buffer)); + rv = aURI->GetScheme(buf); if (NS_FAILED(rv)) return PR_FALSE; - schemeStr = buffer; - if (schemeStr.Equals("about")) { - rv = aURI->GetPath(getter_Copies(buffer)); + if (buf.Equals("about")) { + rv = aURI->GetPath(buf); if (NS_FAILED(rv)) return PR_FALSE; - schemeStr = buffer; - if (schemeStr.Equals("blank")) { + if (buf.Equals("blank")) { return PR_FALSE; } } @@ -5776,10 +5773,10 @@ nsDocShell::AddToGlobalHistory(nsIURI * aURI) { NS_ENSURE_STATE(mGlobalHistory); - nsXPIDLCString spec; - NS_ENSURE_SUCCESS(aURI->GetSpec(getter_Copies(spec)), NS_ERROR_FAILURE); + nsCAutoString spec; + NS_ENSURE_SUCCESS(aURI->GetSpec(spec), NS_ERROR_FAILURE); - NS_ENSURE_SUCCESS(mGlobalHistory->AddPage(spec), NS_ERROR_FAILURE); + NS_ENSURE_SUCCESS(mGlobalHistory->AddPage(spec.get()), NS_ERROR_FAILURE); return NS_OK; } diff --git a/mozilla/docshell/base/nsWebShell.cpp b/mozilla/docshell/base/nsWebShell.cpp index e27263763b9..43a5d1f2855 100644 --- a/mozilla/docshell/base/nsWebShell.cpp +++ b/mozilla/docshell/base/nsWebShell.cpp @@ -586,13 +586,13 @@ nsWebShell::HandleLinkClickEvent(nsIContent *aContent, if (!uri && NS_SUCCEEDED(EnsureContentListener())) { nsCOMPtr listener = do_QueryInterface(mContentListener); - nsCAutoString spec; spec.AssignWithConversion(aURLSpec); + NS_ConvertUCS2toUTF8 spec(aURLSpec); PRBool abort = PR_FALSE; uri = do_CreateInstance(kSimpleURICID, &rv); NS_ASSERTION(NS_SUCCEEDED(rv), "can't create simple uri"); if (NS_SUCCEEDED(rv)) { - rv = uri->SetSpec(spec.get()); + rv = uri->SetSpec(spec); NS_ASSERTION(NS_SUCCEEDED(rv), "spec is invalid"); if (NS_SUCCEEDED(rv)) { @@ -734,10 +734,10 @@ nsresult nsWebShell::EndPageLoad(nsIWebProgress *aProgress, getter_Copies(messageStr)); if (NS_SUCCEEDED(rv) && messageStr) { - nsXPIDLCString spec; - url->GetPath(getter_Copies(spec)); + nsCAutoString spec; + url->GetPath(spec); - PRUnichar *msg = nsTextFormatter::smprintf(messageStr, (const char*)spec); + PRUnichar *msg = nsTextFormatter::smprintf(messageStr, spec.get()); if (!msg) return NS_ERROR_OUT_OF_MEMORY; prompter->Alert(nsnull, msg); @@ -760,8 +760,8 @@ nsresult nsWebShell::EndPageLoad(nsIWebProgress *aProgress, // nsCOMPtr newURI; - nsXPIDLCString oldSpec; - url->GetSpec(getter_Copies(oldSpec)); + nsCAutoString oldSpec; + url->GetSpec(oldSpec); NS_ConvertUTF8toUCS2 oldSpecW(oldSpec); // @@ -812,12 +812,12 @@ nsresult nsWebShell::EndPageLoad(nsIWebProgress *aProgress, url->Equals(newURI, &sameURI); if (!sameURI) { - nsXPIDLCString newSpec; - newURI->GetSpec(getter_Copies(newSpec)); - nsAutoString newSpecW; newSpecW.AssignWithConversion(newSpec.get()); + nsCAutoString newSpec; + newURI->GetSpec(newSpec); + NS_ConvertUTF8toUCS2 newSpecW(newSpec); // This seems evil, since it is modifying the original URL - rv = url->SetSpec(newSpec.get()); + rv = url->SetSpec(newSpec); if (NS_FAILED(rv)) return rv; return LoadURI(newSpecW.get(), // URI string @@ -851,9 +851,9 @@ nsresult nsWebShell::EndPageLoad(nsIWebProgress *aProgress, getter_Copies(messageStr)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString host; - url->GetHost(getter_Copies(host)); - if (host) { + nsCAutoString host; + url->GetHost(host); + if (!host.IsEmpty()) { PRUnichar *msg = nsTextFormatter::smprintf(messageStr, host.get()); if (!msg) return NS_ERROR_OUT_OF_MEMORY; @@ -866,11 +866,6 @@ nsresult nsWebShell::EndPageLoad(nsIWebProgress *aProgress, // throw a connection failure dialog // else if(aStatus == NS_ERROR_CONNECTION_REFUSED) { - PRInt32 port = -1; - - rv = url->GetPort(&port); - if (NS_FAILED(rv)) return rv; - nsCOMPtr prompter; nsCOMPtr stringBundle; @@ -886,15 +881,10 @@ nsresult nsWebShell::EndPageLoad(nsIWebProgress *aProgress, if (NS_FAILED(rv)) return rv; // build up the host:port string. - nsXPIDLCString host; - url->GetHost(getter_Copies(host)); - nsCAutoString combo(host); - if (port > 0) { - combo.Append(':'); - combo.AppendInt(port); - } + nsCAutoString hostport; + url->GetHostPort(hostport); - PRUnichar *msg = nsTextFormatter::smprintf(messageStr, combo.get()); + PRUnichar *msg = nsTextFormatter::smprintf(messageStr, hostport.get()); if (!msg) return NS_ERROR_OUT_OF_MEMORY; prompter->Alert(nsnull, msg); @@ -919,8 +909,8 @@ nsresult nsWebShell::EndPageLoad(nsIWebProgress *aProgress, getter_Copies(messageStr)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString host; - url->GetHost(getter_Copies(host)); + nsCAutoString host; + url->GetHost(host); PRUnichar *msg = nsTextFormatter::smprintf(messageStr, host.get()); if (!msg) return NS_ERROR_OUT_OF_MEMORY; diff --git a/mozilla/dom/src/base/nsGlobalWindow.cpp b/mozilla/dom/src/base/nsGlobalWindow.cpp index 15151e112df..0f2244deb88 100644 --- a/mozilla/dom/src/base/nsGlobalWindow.cpp +++ b/mozilla/dom/src/base/nsGlobalWindow.cpp @@ -409,12 +409,12 @@ GlobalWindowImpl::SetNewDocument(nsIDOMDocument* aDocument, } if (docURL) { - nsXPIDLCString url; + nsCAutoString url; - docURL->GetSpec(getter_Copies(url)); + docURL->GetSpec(url); //about:blank URL's do not have ClearScope called on page change. - if (nsCRT::strcmp(url.get(), "about:blank") != 0) { + if (strcmp(url.get(), "about:blank") != 0) { ClearAllTimeouts(); if (mSidebar) { @@ -4533,7 +4533,7 @@ GlobalWindowImpl::SecurityCheckURL(const char *aURL) } } - rv = NS_NewURI(getter_AddRefs(uriToLoad), aURL, baseURI); + rv = NS_NewURI(getter_AddRefs(uriToLoad), nsDependentCString(aURL), nsnull, baseURI); if (NS_FAILED(rv)) return rv; diff --git a/mozilla/dom/src/base/nsGlobalWindow.h b/mozilla/dom/src/base/nsGlobalWindow.h index 1a7896f6daf..dcbfa675aa6 100644 --- a/mozilla/dom/src/base/nsGlobalWindow.h +++ b/mozilla/dom/src/base/nsGlobalWindow.h @@ -408,7 +408,9 @@ public: NS_DECL_NSIDOMNSLOCATION protected: - nsresult SetURL(nsIURI* aURL); + nsresult GetURI(nsIURI** aURL); + nsresult GetWritableURI(nsIURI** aURL); + nsresult SetURI(nsIURI* aURL); nsresult SetHrefWithBase(const nsAReadableString& aHref, nsIURI* aBase, PRBool aReplace); nsresult SetHrefWithContext(JSContext* cx, const nsAReadableString& aHref, diff --git a/mozilla/dom/src/base/nsHistory.cpp b/mozilla/dom/src/base/nsHistory.cpp index 841dd92e831..bb1f147f5a4 100644 --- a/mozilla/dom/src/base/nsHistory.cpp +++ b/mozilla/dom/src/base/nsHistory.cpp @@ -100,7 +100,7 @@ NS_IMETHODIMP HistoryImpl::GetCurrent(nsAWritableString& aCurrent) { PRInt32 curIndex=0; - char * curURL=nsnull; + nsCAutoString curURL; nsCOMPtr sHistory; // Get SessionHistory from docshell @@ -119,9 +119,8 @@ HistoryImpl::GetCurrent(nsAWritableString& aCurrent) // Get the URI for the current entry curEntry->GetURI(getter_AddRefs(uri)); NS_ENSURE_TRUE(uri, NS_ERROR_FAILURE); - uri->GetSpec(&curURL); - aCurrent.Assign(NS_ConvertASCIItoUCS2(curURL)); - nsCRT::free(curURL); + uri->GetSpec(curURL); + aCurrent.Assign(NS_ConvertUTF8toUCS2(curURL)); return NS_OK; } @@ -130,7 +129,7 @@ NS_IMETHODIMP HistoryImpl::GetPrevious(nsAWritableString& aPrevious) { PRInt32 curIndex; - char * prevURL = nsnull; + nsCAutoString prevURL; nsCOMPtr sHistory; // Get session History from docshell @@ -149,9 +148,8 @@ HistoryImpl::GetPrevious(nsAWritableString& aPrevious) // Get the URI for the previous entry prevEntry->GetURI(getter_AddRefs(uri)); NS_ENSURE_TRUE(uri, NS_ERROR_FAILURE); - uri->GetSpec(&prevURL); - aPrevious.Assign(NS_ConvertASCIItoUCS2(prevURL)); - nsCRT::free(prevURL); + uri->GetSpec(prevURL); + aPrevious.Assign(NS_ConvertUTF8toUCS2(prevURL)); return NS_OK; } @@ -160,7 +158,7 @@ NS_IMETHODIMP HistoryImpl::GetNext(nsAWritableString& aNext) { PRInt32 curIndex; - char * nextURL = nsnull; + nsCAutoString nextURL; nsCOMPtr sHistory; // Get session History from docshell @@ -179,9 +177,8 @@ HistoryImpl::GetNext(nsAWritableString& aNext) // Get the URI for the next entry nextEntry->GetURI(getter_AddRefs(uri)); NS_ENSURE_TRUE(uri, NS_ERROR_FAILURE); - uri->GetSpec(&nextURL); - aNext.Assign(NS_ConvertASCIItoUCS2(nextURL)); - nsCRT::free(nextURL); + uri->GetSpec(nextURL); + aNext.Assign(NS_ConvertUTF8toUCS2(nextURL)); return NS_OK; } @@ -272,11 +269,10 @@ HistoryImpl::GoUri(const nsAReadableString& aUriSubstring) rv = sh_entry->GetURI(getter_AddRefs(uri)); if (uri) { - nsXPIDLCString urlCString; - rv = uri->GetSpec(getter_Copies(urlCString)); + nsCAutoString urlCString; + rv = uri->GetSpec(urlCString); - nsAutoString url; - url.AssignWithConversion(urlCString); + NS_ConvertUTF8toUCS2 url(urlCString); nsReadingIterator start; nsReadingIterator end; @@ -364,10 +360,10 @@ HistoryImpl::Item(PRUint32 aIndex, nsAWritableString& aReturn) } if (uri) { - nsXPIDLCString urlCString; - rv = uri->GetSpec(getter_Copies(urlCString)); + nsCAutoString urlCString; + rv = uri->GetSpec(urlCString); - aReturn.Assign(NS_ConvertASCIItoUCS2(urlCString)); + aReturn.Assign(NS_ConvertUTF8toUCS2(urlCString)); } return rv; diff --git a/mozilla/dom/src/base/nsLocation.cpp b/mozilla/dom/src/base/nsLocation.cpp index 410f0c6d5be..8757771cb75 100644 --- a/mozilla/dom/src/base/nsLocation.cpp +++ b/mozilla/dom/src/base/nsLocation.cpp @@ -51,6 +51,7 @@ #include "prprf.h" #include "prmem.h" #include "nsCOMPtr.h" +#include "nsEscape.h" #include "nsJSUtils.h" #include "nsIScriptSecurityManager.h" #include "nsICodebasePrincipal.h" @@ -230,9 +231,30 @@ LocationImpl::CheckURL(nsIURI* aURI, nsIDocShellLoadInfo** aLoadInfo) return NS_OK; } +nsresult +LocationImpl::GetURI(nsIURI** aURI) +{ + nsresult rv; + + nsCOMPtr webNav(do_QueryInterface(mDocShell, &rv)); + if (NS_FAILED(rv)) return rv; + + return webNav->GetCurrentURI(aURI); +} nsresult -LocationImpl::SetURL(nsIURI* aURI) +LocationImpl::GetWritableURI(nsIURI** aURI) +{ + nsCOMPtr uri; + + nsresult rv = GetURI(getter_AddRefs(uri)); + if (NS_FAILED(rv)) return rv; + + return uri->Clone(aURI); +} + +nsresult +LocationImpl::SetURI(nsIURI* aURI) { if (mDocShell) { nsCOMPtr loadInfo; @@ -252,31 +274,26 @@ LocationImpl::SetURL(nsIURI* aURI) NS_IMETHODIMP LocationImpl::GetHash(nsAWritableString& aHash) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; + nsCOMPtr url(do_QueryInterface(uri)); + nsCAutoString ref; - result = NS_NewURI(getter_AddRefs(uri), href); + if (url) { + result = url->GetRef(ref); + // XXX danger... this may result in non-ASCII octets! + NS_UnescapeURL(ref); + } - if (uri) { - nsCOMPtr url(do_QueryInterface(uri)); - nsXPIDLCString ref; - - if (url) { - result = url->GetRef(getter_Copies(ref)); - } - - if (NS_SUCCEEDED(result) && ref && *ref) { - aHash.Assign(NS_LITERAL_STRING("#")); - aHash.Append(NS_ConvertASCIItoUCS2(ref)); - } - else { - aHash.SetLength(0); - } + if (NS_SUCCEEDED(result) && !ref.IsEmpty()) { + aHash.Assign(NS_LITERAL_STRING("#") + NS_ConvertASCIItoUCS2(ref)); + } + else { + aHash.SetLength(0); } } @@ -286,23 +303,15 @@ LocationImpl::GetHash(nsAWritableString& aHash) NS_IMETHODIMP LocationImpl::SetHash(const nsAReadableString& aHash) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetWritableURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; - - result = NS_NewURI(getter_AddRefs(uri), href); - - if (NS_FAILED(result)) - return result; - nsCOMPtr url(do_QueryInterface(uri, &result)); - if (url) { - url->SetRef(NS_ConvertUCS2toUTF8(aHash).get()); + url->SetRef(NS_ConvertUCS2toUTF8(aHash)); if (mDocShell) { nsCOMPtr loadInfo; @@ -323,38 +332,18 @@ LocationImpl::SetHash(const nsAReadableString& aHash) NS_IMETHODIMP LocationImpl::GetHost(nsAWritableString& aHost) { - nsAutoString href; - nsresult result = NS_OK; + nsCOMPtr uri; + nsresult result; - result = GetHref(href); + result = GetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; + nsCAutoString hostport; - result = NS_NewURI(getter_AddRefs(uri), href); + result = uri->GetHostPort(hostport); - if (uri) { - nsXPIDLCString host; - - result = uri->GetHost(getter_Copies(host)); - - if (NS_SUCCEEDED(result)) { - PRInt32 port; - - CopyASCIItoUCS2(nsDependentCString(host), aHost); - - uri->GetPort(&port); - - if (port != -1) { - aHost.Append(PRUnichar(':')); - - nsAutoString tmpHost; - tmpHost.AppendInt(port); - - aHost.Append(tmpHost); - } - } - } + if (NS_SUCCEEDED(result)) + aHost = NS_ConvertUTF8toUCS2(hostport); } return result; @@ -363,21 +352,14 @@ LocationImpl::GetHost(nsAWritableString& aHost) NS_IMETHODIMP LocationImpl::SetHost(const nsAReadableString& aHost) { - nsAutoString href; - nsresult result = NS_OK; + nsCOMPtr uri; + nsresult result; - result = GetHref(href); + result = GetWritableURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; - - result = NS_NewURI(getter_AddRefs(uri), href); - - if (uri) { - uri->SetHost(NS_ConvertUCS2toUTF8(aHost).get()); - - SetURL(uri); - } + uri->SetHostPort(NS_ConvertUCS2toUTF8(aHost)); + SetURI(uri); } return result; @@ -386,25 +368,18 @@ LocationImpl::SetHost(const nsAReadableString& aHost) NS_IMETHODIMP LocationImpl::GetHostname(nsAWritableString& aHostname) { - nsAutoString href; - nsresult result = NS_OK; + nsCOMPtr uri; + nsresult result; - result = GetHref(href); + result = GetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; + nsCAutoString host; - result = NS_NewURI(getter_AddRefs(uri), href); + result = uri->GetHost(host); - if (uri) { - nsXPIDLCString host; - - result = uri->GetHost(getter_Copies(host)); - - if (NS_SUCCEEDED(result)) { - CopyASCIItoUCS2(nsDependentCString(host), aHostname); - } - } + if (NS_SUCCEEDED(result)) + aHostname = NS_ConvertUTF8toUCS2(host); } return result; @@ -413,20 +388,14 @@ LocationImpl::GetHostname(nsAWritableString& aHostname) NS_IMETHODIMP LocationImpl::SetHostname(const nsAReadableString& aHostname) { - nsAutoString href; - nsresult result = NS_OK; + nsCOMPtr uri; + nsresult result; - result = GetHref(href); + result = GetWritableURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; - - result = NS_NewURI(getter_AddRefs(uri), href); - - if (uri) { - uri->SetHost(NS_ConvertUCS2toUTF8(aHostname).get()); - SetURL(uri); - } + uri->SetHost(NS_ConvertUCS2toUTF8(aHostname)); + SetURI(uri); } return result; @@ -435,23 +404,18 @@ LocationImpl::SetHostname(const nsAReadableString& aHostname) NS_IMETHODIMP LocationImpl::GetHref(nsAWritableString& aHref) { - nsresult result = NS_OK; + nsCOMPtr uri; + nsresult result; - nsCOMPtr webNav(do_QueryInterface(mDocShell)); + result = GetURI(getter_AddRefs(uri)); - if (webNav) { - nsCOMPtr uri; + if (NS_SUCCEEDED(result) && uri) { + nsCAutoString uriString; - result = webNav->GetCurrentURI(getter_AddRefs(uri)); + result = uri->GetSpec(uriString); - if (NS_SUCCEEDED(result) && uri) { - nsXPIDLCString uriString; - - result = uri->GetSpec(getter_Copies(uriString)); - - if (NS_SUCCEEDED(result)) - CopyASCIItoUCS2(nsDependentCString(uriString), aHref); - } + if (NS_SUCCEEDED(result)) + aHref = NS_ConvertUTF8toUCS2(uriString); } return result; @@ -526,9 +490,9 @@ LocationImpl::SetHrefWithBase(const nsAReadableString& aHref, (void) EscapeNonAsciiInURI(aHref, escapedHref); if (escapedHref.IsEmpty()) - result = NS_NewURI(getter_AddRefs(newUri), aHref, aBase); + result = NS_NewURI(getter_AddRefs(newUri), aHref, nsnull, aBase); else - result = NS_NewURI(getter_AddRefs(newUri), escapedHref.get(), aBase); + result = NS_NewURI(getter_AddRefs(newUri), escapedHref, nsnull, aBase); if (newUri && mDocShell) { nsCOMPtr loadInfo; @@ -581,29 +545,22 @@ LocationImpl::SetHrefWithBase(const nsAReadableString& aHref, NS_IMETHODIMP LocationImpl::GetPathname(nsAWritableString& aPathname) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; aPathname.Truncate(); - result = GetHref(href); + result = GetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; + nsCOMPtr url(do_QueryInterface(uri)); + if (url) { + nsCAutoString file; - result = NS_NewURI(getter_AddRefs(uri), href); + result = url->GetFilePath(file); - if (uri) { - nsCOMPtr url(do_QueryInterface(uri)); - - if (url) { - nsXPIDLCString file; - result = url->GetFilePath(getter_Copies(file)); - - if (NS_SUCCEEDED(result)) { - CopyASCIItoUCS2(nsDependentCString(file), aPathname); - } - } + if (NS_SUCCEEDED(result)) + aPathname = NS_ConvertUTF8toUCS2(file); } } @@ -613,20 +570,14 @@ LocationImpl::GetPathname(nsAWritableString& aPathname) NS_IMETHODIMP LocationImpl::SetPathname(const nsAReadableString& aPathname) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetWritableURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; - - result = NS_NewURI(getter_AddRefs(uri), href); - - if (uri) { - uri->SetPath(NS_ConvertUCS2toUTF8(aPathname).get()); - SetURL(uri); - } + uri->SetPath(NS_ConvertUCS2toUTF8(aPathname)); + SetURI(uri); } return result; @@ -635,27 +586,21 @@ LocationImpl::SetPathname(const nsAReadableString& aPathname) NS_IMETHODIMP LocationImpl::GetPort(nsAWritableString& aPort) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; + aPort.SetLength(0); - result = NS_NewURI(getter_AddRefs(uri), href); + PRInt32 port; + uri->GetPort(&port); - if (uri) { - aPort.SetLength(0); - - PRInt32 port; - uri->GetPort(&port); - - if (-1 != port) { - nsAutoString portStr; - portStr.AppendInt(port); - aPort.Append(portStr); - } + if (-1 != port) { + nsAutoString portStr; + portStr.AppendInt(port); + aPort.Append(portStr); } } @@ -665,33 +610,27 @@ LocationImpl::GetPort(nsAWritableString& aPort) NS_IMETHODIMP LocationImpl::SetPort(const nsAReadableString& aPort) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetWritableURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; + // perhaps use nsReadingIterators at some point? + NS_ConvertUCS2toUTF8 portStr(aPort); + const char *buf = portStr.get(); + PRInt32 port = -1; - result = NS_NewURI(getter_AddRefs(uri), href); - - if (uri) { - // perhaps use nsReadingIterators at some point? - NS_ConvertUCS2toUTF8 portStr(aPort); - const char *buf = portStr.get(); - PRInt32 port = -1; - - if (buf) { - if (*buf == ':') { - port = atol(buf+1); - } - else { - port = atol(buf); - } + if (buf) { + if (*buf == ':') { + port = atol(buf+1); + } + else { + port = atol(buf); } - uri->SetPort(port); - SetURL(uri); } + uri->SetPort(port); + SetURI(uri); } return result; @@ -700,25 +639,19 @@ LocationImpl::SetPort(const nsAReadableString& aPort) NS_IMETHODIMP LocationImpl::GetProtocol(nsAWritableString& aProtocol) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; + nsCAutoString protocol; - result = NS_NewURI(getter_AddRefs(uri), href); + result = uri->GetScheme(protocol); - if (uri) { - nsXPIDLCString protocol; - - result = uri->GetScheme(getter_Copies(protocol)); - - if (NS_SUCCEEDED(result)) { - aProtocol.Assign(NS_ConvertASCIItoUCS2(protocol)); - aProtocol.Append(PRUnichar(':')); - } + if (NS_SUCCEEDED(result)) { + aProtocol.Assign(NS_ConvertASCIItoUCS2(protocol)); + aProtocol.Append(PRUnichar(':')); } } @@ -728,20 +661,14 @@ LocationImpl::GetProtocol(nsAWritableString& aProtocol) NS_IMETHODIMP LocationImpl::SetProtocol(const nsAReadableString& aProtocol) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetWritableURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; - - result = NS_NewURI(getter_AddRefs(uri), href); - - if (uri) { - uri->SetScheme(NS_ConvertUCS2toUTF8(aProtocol).get()); - SetURL(uri); - } + uri->SetScheme(NS_ConvertUCS2toUTF8(aProtocol)); + SetURI(uri); } return result; @@ -750,31 +677,24 @@ LocationImpl::SetProtocol(const nsAReadableString& aProtocol) NS_IMETHODIMP LocationImpl::GetSearch(nsAWritableString& aSearch) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; + nsCAutoString search; + nsCOMPtr url(do_QueryInterface(uri)); - result = NS_NewURI(getter_AddRefs(uri), href); + if (url) { + result = url->GetQuery(search); + } - if (uri) { - nsXPIDLCString search; - nsCOMPtr url(do_QueryInterface(uri)); - - if (url) { - result = url->GetEscapedQuery(getter_Copies(search)); - } - - if (NS_SUCCEEDED(result) && search && *search) { - aSearch.Assign(NS_LITERAL_STRING("?")); - aSearch.Append(NS_ConvertASCIItoUCS2(search)); - } - else { - aSearch.SetLength(0); - } + if (NS_SUCCEEDED(result) && !search.IsEmpty()) { + aSearch.Assign(NS_LITERAL_STRING("?") + NS_ConvertUTF8toUCS2(search)); + } + else { + aSearch.SetLength(0); } } @@ -784,24 +704,16 @@ LocationImpl::GetSearch(nsAWritableString& aSearch) NS_IMETHODIMP LocationImpl::SetSearch(const nsAReadableString& aSearch) { - nsAutoString href; + nsCOMPtr uri; nsresult result = NS_OK; - result = GetHref(href); + result = GetWritableURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(result)) { - nsCOMPtr uri; - - result = NS_NewURI(getter_AddRefs(uri), href); - - if (uri) { - nsCOMPtr url(do_QueryInterface(uri, &result)); - - if (url) { - result = url->SetQuery(NS_ConvertUCS2toUTF8(aSearch).get()); - - SetURL(uri); - } + nsCOMPtr url(do_QueryInterface(uri, &result)); + if (url) { + result = url->SetQuery(NS_ConvertUCS2toUTF8(aSearch)); + SetURI(uri); } } diff --git a/mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp b/mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp index b81774f1b0e..8f9780f9785 100644 --- a/mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp +++ b/mozilla/dom/src/jsurl/nsJSProtocolHandler.cpp @@ -63,6 +63,7 @@ #include "nsIJSConsoleService.h" #include "nsIConsoleService.h" #include "nsXPIDLString.h" +#include "prprf.h" static NS_DEFINE_CID(kSimpleURICID, NS_SIMPLEURI_CID); static NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID); @@ -124,21 +125,21 @@ nsresult nsJSThunk::EvaluateScript() NS_ENSURE_ARG_POINTER(mChannel); // Get the script string to evaluate... - nsXPIDLCString script; - rv = mURI->GetPath(getter_Copies(script)); + nsCAutoString script; + rv = mURI->GetPath(script); if (NS_FAILED(rv)) return rv; // If mURI is just "javascript:", we bring up the JavaScript console // and return NS_ERROR_DOM_RETVAL_UNDEFINED. - if (*((const char*)script) == '\0') { + if (script.IsEmpty()) { rv = BringUpConsole(); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; return NS_ERROR_DOM_RETVAL_UNDEFINED; } // Get the url. - nsXPIDLCString url; - rv = mURI->GetSpec(getter_Copies(url)); + nsCAutoString url; + rv = mURI->GetSpec(url); if (NS_FAILED(rv)) return rv; // Get an interface requestor from the channel callbacks. @@ -258,7 +259,7 @@ nsresult nsJSThunk::EvaluateScript() rv = scriptContext->EvaluateString(scriptString, nsnull, // obj principal, - url, // url + url.get(), // url 1, // line no nsnull, result, @@ -388,7 +389,13 @@ nsJSThunk::GetOutputStream(nsIOutputStream* *aOutputStream) NS_IMETHODIMP nsJSThunk::GetName(char* *aName) { - return mURI->GetSpec(aName); + nsCAutoString buf; + + nsresult rv = mURI->GetSpec(buf); + if (NS_FAILED(rv)) return rv; + + *aName = ToNewCString(buf); + return *aName ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } @@ -722,11 +729,9 @@ nsJSProtocolHandler::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) // nsIProtocolHandler methods: NS_IMETHODIMP -nsJSProtocolHandler::GetScheme(char* *result) +nsJSProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("javascript"); - if (!*result) - return NS_ERROR_OUT_OF_MEMORY; + result = "javascript"; return NS_OK; } @@ -745,7 +750,9 @@ nsJSProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsJSProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsJSProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, nsIURI **result) { nsresult rv; @@ -765,7 +772,28 @@ nsJSProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, if (NS_FAILED(rv)) return rv; - rv = url->SetSpec((char*)aSpec); + if (IsASCII(aSpec)) + rv = url->SetSpec(aSpec); + else { + // need special encoding for unicode characters... + // XXXdarin iterate over the UTF-8 chars instead + NS_ConvertUTF8toUCS2 ucsSpec(aSpec); + nsCAutoString encSpec; + + char buf[6+1]; // space for \uXXXX plus a NUL at the end + for (const PRUnichar *uch = ucsSpec.get(); *uch; ++uch) { + if (*uch > 0x7F) { + PR_snprintf(buf, sizeof(buf), "\\u%.4x", *uch); + encSpec.Append(buf); + } + else { + // it's ASCII so we're safe... + encSpec.Append(char(*uch)); + } + } + rv = url->SetSpec(encSpec); + } + if (NS_FAILED(rv)) { NS_RELEASE(url); return rv; diff --git a/mozilla/editor/composer/src/nsEditorShell.cpp b/mozilla/editor/composer/src/nsEditorShell.cpp index f84c835d22f..dd7d2421c25 100644 --- a/mozilla/editor/composer/src/nsEditorShell.cpp +++ b/mozilla/editor/composer/src/nsEditorShell.cpp @@ -57,6 +57,7 @@ #include "nsICSSStyleSheet.h" #include "nsIStyleSheet.h" #include "nsIURI.h" +#include "nsIFileURL.h" #include "nsNetUtil.h" #include "nsIWebNavigation.h" @@ -1844,16 +1845,16 @@ nsEditorShell::UpdateWindowTitleAndRecentMenu(PRBool aSaveToPrefs) if (url) { // Prefix filename with scheme so user can tell if editing a remote vs. local file - nsXPIDLCString schemeChar; - docFileSpec->GetScheme(getter_Copies(schemeChar)); - nsXPIDLCString fileNameChar; - url->GetFileName(getter_Copies(fileNameChar)); + nsCAutoString schemeChar; + docFileSpec->GetScheme(schemeChar); + nsCAutoString fileNameChar; + url->GetFileName(fileNameChar); if (fileNameChar.Length() > 0) { windowCaption += NS_LITERAL_STRING(" [") + - NS_ConvertASCIItoUCS2(schemeChar) + + NS_ConvertUTF8toUCS2(schemeChar) + NS_LITERAL_STRING(":/.../") + - NS_ConvertASCIItoUCS2(fileNameChar) + + NS_ConvertUTF8toUCS2(fileNameChar) + NS_LITERAL_STRING("]"); } } diff --git a/mozilla/editor/libeditor/html/nsHTMLDataTransfer.cpp b/mozilla/editor/libeditor/html/nsHTMLDataTransfer.cpp index 5e862c3df94..02cea7e4319 100644 --- a/mozilla/editor/libeditor/html/nsHTMLDataTransfer.cpp +++ b/mozilla/editor/libeditor/html/nsHTMLDataTransfer.cpp @@ -736,43 +736,40 @@ NS_IMETHODIMP nsHTMLEditor::InsertFromTransferable(nsITransferable *transferable if ( fileURL ) { PRBool insertAsImage = PR_FALSE; - char *fileextension = nsnull; - rv = fileURL->GetFileExtension( &fileextension ); - if ( NS_SUCCEEDED(rv) && fileextension ) + nsCAutoString fileextension; + rv = fileURL->GetFileExtension( fileextension ); + if ( NS_SUCCEEDED(rv) && !fileextension.IsEmpty() ) { - if ( (nsCRT::strcasecmp( fileextension, "jpg" ) == 0 ) - || (nsCRT::strcasecmp( fileextension, "jpeg" ) == 0 ) - || (nsCRT::strcasecmp( fileextension, "gif" ) == 0 ) - || (nsCRT::strcasecmp( fileextension, "png" ) == 0 ) ) + if ( (nsCRT::strcasecmp( fileextension.get(), "jpg" ) == 0 ) + || (nsCRT::strcasecmp( fileextension.get(), "jpeg" ) == 0 ) + || (nsCRT::strcasecmp( fileextension.get(), "gif" ) == 0 ) + || (nsCRT::strcasecmp( fileextension.get(), "png" ) == 0 ) ) { insertAsImage = PR_TRUE; } } - if (fileextension) nsCRT::free(fileextension); - char *urltext = nsnull; - rv = fileURL->GetSpec( &urltext ); - if ( NS_SUCCEEDED(rv) && urltext && urltext[0] != 0) + nsCAutoString urltext; + rv = fileURL->GetSpec( urltext ); + if ( NS_SUCCEEDED(rv) && !urltext.IsEmpty() ) { - len = strlen(urltext); if ( insertAsImage ) { stuffToPaste.Assign(NS_LITERAL_STRING("\"\"")); } else /* insert as link */ { stuffToPaste.Assign(NS_LITERAL_STRING("")); - stuffToPaste.AppendWithConversion ( urltext, len ); + stuffToPaste.Append(NS_ConvertUTF8toUCS2(urltext)); stuffToPaste.Append(NS_LITERAL_STRING("")); } nsAutoEditBatch beginBatching(this); rv = InsertHTML(stuffToPaste); } - if (urltext) nsCRT::free(urltext); } } } diff --git a/mozilla/editor/ui/composer/content/editorUtilities.js b/mozilla/editor/ui/composer/content/editorUtilities.js index 41c556112c4..7e997540ed0 100644 --- a/mozilla/editor/ui/composer/content/editorUtilities.js +++ b/mozilla/editor/ui/composer/content/editorUtilities.js @@ -557,7 +557,7 @@ function MakeAbsoluteUrl(url) // Make a URI object to use its "resolve" method var absoluteUrl = resultUrl; - var docUri = IOService.newURI(docUrl, null); + var docUri = IOService.newURI(docUrl, null, null); try { absoluteUrl = docUri.resolve(resultUrl); @@ -710,11 +710,11 @@ function StripUsernamePasswordFromURI(uri) { try { url = uri.spec; - var preHost = uri.preHost; - if (preHost) + var userPass = uri.userPass; + if (userPass) { - start = url.indexOf(preHost); - url = url.slice(0, start) + url.slice(start+preHost.length+1); + start = url.indexOf(userPass); + url = url.slice(0, start) + url.slice(start+userPass.length+1); } } catch (e) {} } diff --git a/mozilla/editor/ui/dialogs/content/EdImageOverlay.js b/mozilla/editor/ui/dialogs/content/EdImageOverlay.js index 4333397d1f6..0f6e78d9e6b 100644 --- a/mozilla/editor/ui/dialogs/content/EdImageOverlay.js +++ b/mozilla/editor/ui/dialogs/content/EdImageOverlay.js @@ -319,7 +319,7 @@ function LoadPreviewImage() if (GetScheme(imageSrc)) { - var uri = IOService.newURI(imageSrc, null); + var uri = IOService.newURI(imageSrc, null, null); if (uri) { var imgCacheService = Components.classes["@mozilla.org/image/cache;1"].getService(); diff --git a/mozilla/embedding/browser/activex/src/control/MozillaBrowser.cpp b/mozilla/embedding/browser/activex/src/control/MozillaBrowser.cpp index 7bdc00c0430..20f4cab4037 100644 --- a/mozilla/embedding/browser/activex/src/control/MozillaBrowser.cpp +++ b/mozilla/embedding/browser/activex/src/control/MozillaBrowser.cpp @@ -731,12 +731,12 @@ LRESULT CMozillaBrowser::OnViewSource(WORD wNotifyCode, WORD wID, HWND hWndCtl, } // Get the current URI - nsXPIDLCString aURI; - mWebBrowserContainer->m_pCurrentURI->GetSpec(getter_Copies(aURI)); + nsCAutoString aURI; + mWebBrowserContainer->m_pCurrentURI->GetSpec(aURI); nsAutoString strURI; strURI.Assign(NS_LITERAL_STRING("view-source:")); - strURI.AppendWithConversion(aURI); + strURI.Append(NS_ConvertUTF8toUCS2(aURI)); CIPtr(IDispatch) spDispNew; VARIANT_BOOL bCancel = VARIANT_FALSE; @@ -2355,9 +2355,9 @@ HRESULT STDMETHODCALLTYPE CMozillaBrowser::get_LocationURL(BSTR __RPC_FAR *Locat if (uri) { USES_CONVERSION; - nsXPIDLCString aURI; - uri->GetSpec(getter_Copies(aURI)); - *LocationURL = SysAllocString(A2OLE((const char *) aURI)); + nsCAutoString aURI; + uri->GetAsciiSpec(aURI); + *LocationURL = SysAllocString(A2OLE(aURI.get())); } else { diff --git a/mozilla/embedding/browser/activex/src/control/WebBrowserContainer.cpp b/mozilla/embedding/browser/activex/src/control/WebBrowserContainer.cpp index 1c7e33c5d88..a77d20d5a5c 100644 --- a/mozilla/embedding/browser/activex/src/control/WebBrowserContainer.cpp +++ b/mozilla/embedding/browser/activex/src/control/WebBrowserContainer.cpp @@ -155,9 +155,9 @@ NS_IMETHODIMP CWebBrowserContainer::OnStateChange(nsIWebProgress* aWebProgress, rv = channel->GetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(rv)) { - nsXPIDLCString aURI; - uri->GetSpec(getter_Copies(aURI)); - NG_TRACE(_T("CWebBrowserContainer::OnStateChange->Doc Start(..., %s, \"\")\n"), A2CT(aURI)); + nsCAutoString aURI; + uri->GetAsciiSpec(aURI); + NG_TRACE(_T("CWebBrowserContainer::OnStateChange->Doc Start(..., %s, \"\")\n"), A2CT(aURI.get())); } } @@ -188,12 +188,12 @@ NS_IMETHODIMP CWebBrowserContainer::OnStateChange(nsIWebProgress* aWebProgress, rv = aChannel->GetURI(getter_AddRefs(pURI)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString aURI; - rv = pURI->GetSpec(getter_Copies(aURI)); + nsCAutoString aURI; + rv = pURI->GetAsciiSpec(aURI); if (NS_FAILED(rv)) return rv; USES_CONVERSION; - BSTR bstrURI = SysAllocString(A2OLE((const char *) aURI)); + BSTR bstrURI = SysAllocString(A2OLE(aURI.get())); // Fire a DocumentComplete event CComVariant vURI(bstrURI); @@ -219,15 +219,15 @@ NS_IMETHODIMP CWebBrowserContainer::OnStateChange(nsIWebProgress* aWebProgress, if (progressStateFlags & STATE_STOP) { - nsXPIDLCString aURI; + nsCAutoString aURI; if (m_pCurrentURI) { - m_pCurrentURI->GetSpec(getter_Copies(aURI)); + m_pCurrentURI->GetAsciiSpec(aURI); } // Fire a NavigateComplete event USES_CONVERSION; - BSTR bstrURI = SysAllocString(A2OLE((const char *) aURI)); + BSTR bstrURI = SysAllocString(A2OLE(aURI.get())); m_pEvents1->Fire_NavigateComplete(bstrURI); // Fire a NavigateComplete2 event @@ -324,8 +324,8 @@ NS_IMETHODIMP CWebBrowserContainer::OnStartURIOpen(nsIURI *pURI, PRBool *aAbortO NG_ASSERT(m_pCurrentURI); m_pCurrentURI->AddRef(); - nsXPIDLCString aURI; - m_pCurrentURI->GetSpec(getter_Copies(aURI)); + nsCAutoString aURI; + m_pCurrentURI->GetSpec(aURI); // Setup the post data CComVariant vPostDataRef; @@ -336,7 +336,7 @@ NS_IMETHODIMP CWebBrowserContainer::OnStartURIOpen(nsIURI *pURI, PRBool *aAbortO // Fire a BeforeNavigate event - BSTR bstrURI = SysAllocString(A2OLE((const char *)aURI)); + BSTR bstrURI = SysAllocString(A2OLE(aURI.get())); BSTR bstrTargetFrameName = NULL; BSTR bstrHeaders = NULL; VARIANT_BOOL bCancel = VARIANT_FALSE; diff --git a/mozilla/embedding/browser/gtk/src/EmbedContentListener.cpp b/mozilla/embedding/browser/gtk/src/EmbedContentListener.cpp index 85a34d1f2eb..e0bfbfe1664 100644 --- a/mozilla/embedding/browser/gtk/src/EmbedContentListener.cpp +++ b/mozilla/embedding/browser/gtk/src/EmbedContentListener.cpp @@ -53,8 +53,8 @@ EmbedContentListener::OnStartURIOpen(nsIURI *aURI, { nsresult rv; - nsXPIDLCString specString; - rv = aURI->GetSpec(getter_Copies(specString)); + nsCAutoString specString; + rv = aURI->GetSpec(specString); if (NS_FAILED(rv)) return rv; @@ -62,7 +62,7 @@ EmbedContentListener::OnStartURIOpen(nsIURI *aURI, gint return_val = FALSE; gtk_signal_emit(GTK_OBJECT(mOwner->mOwningWidget), moz_embed_signals[OPEN_URI], - (const char *)specString, &return_val); + specString.get(), &return_val); *aAbortOpen = return_val; diff --git a/mozilla/embedding/browser/gtk/src/EmbedProgress.cpp b/mozilla/embedding/browser/gtk/src/EmbedProgress.cpp index a0d1f569874..6130ed81c4b 100644 --- a/mozilla/embedding/browser/gtk/src/EmbedProgress.cpp +++ b/mozilla/embedding/browser/gtk/src/EmbedProgress.cpp @@ -128,11 +128,11 @@ EmbedProgress::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *aLocation) { - nsXPIDLCString newURI; + nsCAutoString newURI; NS_ENSURE_ARG_POINTER(aLocation); - aLocation->GetSpec(getter_Copies(newURI)); + aLocation->GetSpec(newURI); - mOwner->SetURI(newURI); + mOwner->SetURI(newURI.get()); gtk_signal_emit(GTK_OBJECT(mOwner->mOwningWidget), moz_embed_signals[LOCATION]); return NS_OK; @@ -185,10 +185,8 @@ EmbedProgress::RequestToURIString(nsIRequest *aRequest, char **aString) if (!uri) return; - nsXPIDLCString uriString; - uri->GetSpec(getter_Copies(uriString)); - if (!uriString) - return; + nsCAutoString uriString; + uri->GetSpec(uriString); - *aString = nsCRT::strdup((const char *)uriString); + *aString = strdup(uriString.get()); } diff --git a/mozilla/embedding/browser/powerplant/source/CBrowserApp.cp b/mozilla/embedding/browser/powerplant/source/CBrowserApp.cp index ce97d3f0bb5..4c010d0884b 100644 --- a/mozilla/embedding/browser/powerplant/source/CBrowserApp.cp +++ b/mozilla/embedding/browser/powerplant/source/CBrowserApp.cp @@ -441,8 +441,8 @@ CBrowserApp::ObeyCommand( rv = NS_NewLocalFileWithFSSpec(&fileSpec, PR_TRUE, getter_AddRefs(macFile)); ThrowIfError_(NS_ERROR_GET_CODE(rv)); - nsXPIDLCString urlSpec; - rv = NS_GetURLSpecFromFile(macFile, getter_Copies(urlSpec)); + nsCAutoString urlSpec; + rv = NS_GetURLSpecFromFile(macFile, urlSpec); ThrowIfError_(NS_ERROR_GET_CODE(rv)); LWindow *theWindow = CWindowCreator::CreateWindowInternal(nsIWebBrowserChrome::CHROME_DEFAULT, -1, -1); diff --git a/mozilla/embedding/browser/powerplant/source/CBrowserShell.cpp b/mozilla/embedding/browser/powerplant/source/CBrowserShell.cpp index 35de79077bd..ae5151213c5 100644 --- a/mozilla/embedding/browser/powerplant/source/CBrowserShell.cpp +++ b/mozilla/embedding/browser/powerplant/source/CBrowserShell.cpp @@ -206,10 +206,10 @@ NS_IMETHODIMP CBrowserShellProgressListener::OnLocationChange(nsIWebProgress *aW { NS_ENSURE_TRUE(mpOwner, NS_ERROR_NULL_POINTER); - nsXPIDLCString spec; + nsCAutoString spec; if (location) - location->GetSpec(getter_Copies(spec)); + location->GetSpec(spec); MsgLocationChangeInfo info(mpOwner, spec.get()); mpOwner->BroadcastMessage(msg_OnLocationChange, &info); @@ -962,10 +962,8 @@ NS_METHOD CBrowserShell::GetCurrentURL(nsACString& urlText) nsCOMPtr currentURI; rv = mWebBrowserAsWebNav->GetCurrentURI(getter_AddRefs(currentURI)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString urlPath; - rv = currentURI->GetSpec(getter_Copies(urlPath)); + rv = currentURI->GetSpec(urlText); if (NS_FAILED(rv)) return rv; - urlText.Assign(urlPath.get()); return NS_OK; } diff --git a/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp b/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp index 887d7891313..999032a40fd 100644 --- a/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp +++ b/mozilla/embedding/components/webbrowserpersist/src/nsWebBrowserPersist.cpp @@ -40,6 +40,7 @@ #include "nsCExternalHandlerService.h" #include "nsIURL.h" +#include "nsIFileURL.h" #include "nsIDocument.h" #include "nsIDOMDocument.h" #include "nsIDOMNode.h" @@ -925,12 +926,10 @@ nsresult nsWebBrowserPersist::AppendPathToURI(nsIURI *aURI, const nsAString & aP { NS_ENSURE_ARG_POINTER(aURI); - nsXPIDLCString oldPath; - nsresult rv = aURI->GetPath(getter_Copies(oldPath)); + nsCAutoString newPath; + nsresult rv = aURI->GetPath(newPath); NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); - nsCAutoString newPath(oldPath); - // Append a forward slash if necessary PRInt32 len = newPath.Length(); if (len > 0 && newPath.CharAt(len - 1) != '/') @@ -939,8 +938,8 @@ nsresult nsWebBrowserPersist::AppendPathToURI(nsIURI *aURI, const nsAString & aP } // Store the path back on the URI - newPath.AppendWithConversion(aPath); - aURI->SetPath(newPath.get()); + newPath += NS_ConvertUCS2toUTF8(aPath); + aURI->SetPath(newPath); return NS_OK; } @@ -967,7 +966,7 @@ nsresult nsWebBrowserPersist::SaveURIInternal( // Open a channel to the URI nsCOMPtr inputChannel; - rv = NS_OpenURI(getter_AddRefs(inputChannel), aURI, + rv = NS_NewChannel(getter_AddRefs(inputChannel), aURI, nsnull, nsnull, NS_STATIC_CAST(nsIInterfaceRequestor *, this), loadFlags); @@ -1243,7 +1242,7 @@ nsresult nsWebBrowserPersist::SaveDocumentInternal( nsCOMPtr urlToChopOffFile = do_QueryInterface(pathToFileParent); if (urlToChopOffFile) { - urlToChopOffFile->SetFileName(""); + urlToChopOffFile->SetFileName(NS_LITERAL_CSTRING("")); } PRBool isEqual = PR_FALSE; if (NS_SUCCEEDED(aDataPath->Equals(pathToFileParent, &isEqual)) @@ -1442,11 +1441,8 @@ nsWebBrowserPersist::CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChanne nsCOMPtr url(do_QueryInterface(aURI)); NS_ENSURE_TRUE(url, NS_ERROR_FAILURE); - nsXPIDLCString fileName; - url->GetFileName(getter_Copies(fileName)); - - nsCString newFileName; - newFileName.Assign(fileName); + nsCAutoString newFileName; + url->GetFileName(newFileName); // Test if the current extension is current for the mime type PRBool hasExtension = PR_FALSE; @@ -1463,7 +1459,7 @@ nsWebBrowserPersist::CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChanne // Test if previous extension is acceptable nsCOMPtr oldurl(do_QueryInterface(aOriginalURIWithExtension)); NS_ENSURE_TRUE(oldurl, NS_ERROR_FAILURE); - oldurl->GetFileExtension(getter_Copies(fileExt)); + oldurl->GetFileExtension(fileExt); PRBool useOldExt = PR_FALSE; if (!fileExt.IsEmpty()) { @@ -1479,7 +1475,7 @@ nsWebBrowserPersist::CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChanne if (!fileExt.IsEmpty()) { newFileName.Append("."); - newFileName.Append(fileExt.get()); + newFileName.Append(fileExt); } if (localFile) @@ -1493,7 +1489,7 @@ nsWebBrowserPersist::CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChanne } else { - url->SetFileName(newFileName.get()); + url->SetFileName(newFileName); } } @@ -2066,8 +2062,8 @@ nsWebBrowserPersist::FixupNodeAttribute(nsIDOMNode *aNode, nsCOMPtr uri; rv = NS_NewURI(getter_AddRefs(uri), oldCValue.get(), mCurrentBaseURI); NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); - nsXPIDLCString spec; - rv = uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = uri->GetSpec(spec); NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); // Search for the URI in the map and replace it with the local file @@ -2091,25 +2087,22 @@ nsWebBrowserPersist::FixupNodeAttribute(nsIDOMNode *aNode, { nsCOMPtr url(do_QueryInterface(fileAsURI)); NS_ENSURE_TRUE(url, NS_ERROR_FAILURE); - nsXPIDLCString filename; - url->GetFileName(getter_Copies(filename)); + nsCAutoString filename; + url->GetFileName(filename); nsCAutoString rawPathURL; rawPathURL.Assign(data->mRelativePathToData); rawPathURL.Append(filename); nsCAutoString buf; - if (NS_EscapeURLPart(rawPathURL.get(), rawPathURL.Length(), - esc_Directory | esc_FileBaseName | esc_FileExtension, buf)) - newValue.AssignWithConversion(buf.get()); - else - newValue.AssignWithConversion(rawPathURL.get()); + newValue = NS_ConvertUTF8toUCS2( + NS_EscapeURL(rawPathURL, esc_FilePath, buf)); } else { - nsXPIDLCString fileurl; - fileAsURI->GetSpec(getter_Copies(fileurl)); - newValue.AssignWithConversion(fileurl); + nsCAutoString fileurl; + fileAsURI->GetSpec(fileurl); + newValue.Assign(NS_ConvertUTF8toUCS2(fileurl)); } if (data->mIsSubFrame) { @@ -2152,10 +2145,9 @@ nsWebBrowserPersist::FixupAnchor(nsIDOMNode *aNode) rv = NS_NewURI(getter_AddRefs(newURI), oldCValue.get(), mCurrentBaseURI); if (NS_SUCCEEDED(rv)) { - nsXPIDLCString uriSpec; - newURI->GetSpec(getter_Copies(uriSpec)); - nsAutoString newValue; newValue.AssignWithConversion(uriSpec); - attrNode->SetNodeValue(newValue); + nsCAutoString uriSpec; + newURI->GetSpec(uriSpec); + attrNode->SetNodeValue(NS_ConvertUTF8toUCS2(uriSpec)); } } @@ -2309,8 +2301,8 @@ nsWebBrowserPersist::MakeAndStoreLocalFilenameInURIMap( nsCOMPtr uri; rv = NS_NewURI(getter_AddRefs(uri), aURI, mCurrentBaseURI); NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); - nsXPIDLCString spec; - rv = uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = uri->GetSpec(spec); NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); // Create a sensibly named filename for the URI and store in the URI map @@ -2366,15 +2358,16 @@ nsWebBrowserPersist::MakeFilenameFromURI(nsIURI *aURI, nsString &aFilename) nsCOMPtr url(do_QueryInterface(aURI)); if (url) { - char *nameFromURL = nsnull; - url->GetFileName(&nameFromURL); - if (nameFromURL) + nsCAutoString nameFromURL; + url->GetFileName(nameFromURL); + if (!nameFromURL.IsEmpty()) { const PRInt32 kMaxFileNameLength = 20; // Unescape the file name (GetFileName escapes it) nsAutoString fileName; PRInt32 length = 0; - char *p = nsUnescape(nameFromURL); + NS_UnescapeURL(nameFromURL); + const char *p = nameFromURL.get(); for (;*p && *p != ';' && *p != '?' && *p != '#' && *p != '.' && length < kMaxFileNameLength ;p++, length++) @@ -2390,7 +2383,6 @@ nsWebBrowserPersist::MakeFilenameFromURI(nsIURI *aURI, nsString &aFilename) } } aFilename = fileName; - nsCRT::free(nameFromURL); } } @@ -2477,9 +2469,9 @@ nsWebBrowserPersist::SetDocumentBase( { return NS_ERROR_FAILURE; } - nsXPIDLCString uriSpec; - aBaseURI->GetSpec(getter_Copies(uriSpec)); - nsString href; href.AssignWithConversion(uriSpec); + nsCAutoString uriSpec; + aBaseURI->GetSpec(uriSpec); + NS_ConvertUTF8toUCS2 href(uriSpec); baseElement->SetAttribute(NS_LITERAL_STRING("href"), href); } else diff --git a/mozilla/embedding/tests/mfcembed/BrowserFrameGlue.cpp b/mozilla/embedding/tests/mfcembed/BrowserFrameGlue.cpp index 4d3e707054b..7bfa6108fe8 100644 --- a/mozilla/embedding/tests/mfcembed/BrowserFrameGlue.cpp +++ b/mozilla/embedding/tests/mfcembed/BrowserFrameGlue.cpp @@ -111,8 +111,8 @@ void CBrowserFrame::BrowserFrameGlueObj::UpdateCurrentURI(nsIURI *aLocation) if(aLocation) { - nsXPIDLCString uriString; - aLocation->GetSpec(getter_Copies(uriString)); + nsCAutoString uriString; + aLocation->GetSpec(uriString); pThis->m_wndUrlBar.SetCurrentURL(uriString.get()); } diff --git a/mozilla/embedding/tests/mfcembed/BrowserView.cpp b/mozilla/embedding/tests/mfcembed/BrowserView.cpp index b6ac39ecc5d..f8899970d44 100644 --- a/mozilla/embedding/tests/mfcembed/BrowserView.cpp +++ b/mozilla/embedding/tests/mfcembed/BrowserView.cpp @@ -399,8 +399,8 @@ void CBrowserView::OnViewSource() return; // Get the uri string associated with the nsIURI object - nsXPIDLCString uriString; - rv = currentURI->GetSpec(getter_Copies(uriString)); + nsCAutoString uriString; + rv = currentURI->GetSpec(uriString); if(NS_FAILED(rv)) return; @@ -814,11 +814,10 @@ void CBrowserView::OnSaveLinkAs() // Get the "path" portion (see nsIURI.h for more info // on various parts of a URI) - nsXPIDLCString path; - linkURI->GetPath(getter_Copies(path)); + nsCAutoString fileName; + linkURI->GetPath(fileName); // The path may have the "/" char in it - strip those - nsCAutoString fileName(path); fileName.StripChars("\\/"); // Now, use this file name in a File Save As dlg... @@ -864,8 +863,8 @@ void CBrowserView::OnSaveImageAs() // Get the "path" portion (see nsIURI.h for more info // on various parts of a URI) - nsXPIDLCString path; - linkURI->GetPath(getter_Copies(path)); + nsCAutoString path; + linkURI->GetPath(path); // The path may have the "/" char in it - strip those nsCAutoString fileName(path); @@ -1003,8 +1002,8 @@ void CBrowserView::OnFilePrint() nsresult rv = mWebNav->GetCurrentURI(getter_AddRefs(currentURI)); if(NS_SUCCEEDED(rv) || currentURI) { - nsXPIDLCString path; - currentURI->GetPath(getter_Copies(path)); + nsCAutoString path; + currentURI->GetPath(path); dlg.SetURI(path.get()); } m_bCurrentlyPrinting = TRUE; diff --git a/mozilla/embedding/tests/mfcembed/components/HelperAppDlg.cpp b/mozilla/embedding/tests/mfcembed/components/HelperAppDlg.cpp index adf735f5e89..74b0a0badba 100644 --- a/mozilla/embedding/tests/mfcembed/components/HelperAppDlg.cpp +++ b/mozilla/embedding/tests/mfcembed/components/HelperAppDlg.cpp @@ -592,8 +592,8 @@ BOOL CProgressDlg::OnInitDialog() nsresult rv = m_HelperAppLauncher->GetSource(getter_AddRefs(srcUri)); if(NS_SUCCEEDED(rv)) { - nsXPIDLCString uriString; - srcUri->GetSpec(getter_Copies(uriString)); + nsCAutoString uriString; + srcUri->GetSpec(uriString); m_SavingFrom.SetWindowText(uriString.get()); } diff --git a/mozilla/embedding/tests/winEmbed/WebBrowserChrome.cpp b/mozilla/embedding/tests/winEmbed/WebBrowserChrome.cpp index 6e6651d7621..a930cdc4c9b 100644 --- a/mozilla/embedding/tests/winEmbed/WebBrowserChrome.cpp +++ b/mozilla/embedding/tests/winEmbed/WebBrowserChrome.cpp @@ -363,10 +363,10 @@ WebBrowserChrome::OnHistoryPurge(PRInt32 aNumEntries, PRBool *aContinue) nsresult WebBrowserChrome::SendHistoryStatusMessage(nsIURI * aURI, char * operation, PRInt32 info1, PRUint32 aReloadFlags) { - nsXPIDLCString uriCStr; + nsCAutoString uriCStr; if (aURI) { - aURI->GetSpec(getter_Copies(uriCStr)); + aURI->GetSpec(uriCStr); } nsString uriAStr; diff --git a/mozilla/embedding/tests/winEmbed/winEmbed.cpp b/mozilla/embedding/tests/winEmbed/winEmbed.cpp index 31fbb0045b7..8a807fddb11 100644 --- a/mozilla/embedding/tests/winEmbed/winEmbed.cpp +++ b/mozilla/embedding/tests/winEmbed/winEmbed.cpp @@ -1205,8 +1205,8 @@ void WebBrowserChromeUI::UpdateCurrentURI(nsIWebBrowserChrome *aChrome) webNavigation->GetCurrentURI(getter_AddRefs(currentURI)); if (currentURI) { - nsXPIDLCString uriString; - currentURI->GetSpec(getter_Copies(uriString)); + nsCAutoString uriString; + currentURI->GetAsciiSpec(uriString); HWND hwndDlg = GetBrowserDlgFromChrome(aChrome); SetDlgItemText(hwndDlg, IDC_ADDRESS, uriString.get()); } diff --git a/mozilla/extensions/cookie/nsCookieService.cpp b/mozilla/extensions/cookie/nsCookieService.cpp index 7ffa1f8a442..405dbd1c623 100644 --- a/mozilla/extensions/cookie/nsCookieService.cpp +++ b/mozilla/extensions/cookie/nsCookieService.cpp @@ -159,10 +159,10 @@ nsCookieService::OnSecurityChange(nsIWebProgress *aWebProgress, NS_IMETHODIMP nsCookieService::GetCookieString(nsIURI *aURL, char ** aCookie) { - nsXPIDLCString spec; - nsresult rv = aURL->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + nsresult rv = aURL->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; - *aCookie = COOKIE_GetCookie((char *)(const char *)spec, mIOService); + *aCookie = COOKIE_GetCookie((char *)spec.get(), mIOService); return NS_OK; } @@ -171,46 +171,43 @@ nsCookieService::GetCookieStringFromHttp(nsIURI *aURL, nsIURI *aFirstURL, char * if (!aURL) { return NS_ERROR_FAILURE; } - nsXPIDLCString spec; - nsresult rv = aURL->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + nsresult rv = aURL->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; if (aFirstURL) { - nsXPIDLCString firstSpec; - rv = aFirstURL->GetSpec(getter_Copies(firstSpec)); + nsCAutoString firstSpec; + rv = aFirstURL->GetAsciiSpec(firstSpec); if (NS_FAILED(rv)) return rv; - *aCookie = COOKIE_GetCookieFromHttp((char *)(const char *)spec, (char *)(const char *)firstSpec, mIOService); + *aCookie = COOKIE_GetCookieFromHttp((char *) spec.get(), (char *) firstSpec.get(), mIOService); } else { - *aCookie = COOKIE_GetCookieFromHttp((char *)(const char *)spec, nsnull, mIOService); + *aCookie = COOKIE_GetCookieFromHttp((char *) spec.get(), nsnull, mIOService); } return NS_OK; } NS_IMETHODIMP nsCookieService::SetCookieString(nsIURI *aURL, nsIPrompt* aPrompt, const char * aCookie, nsIHttpChannel* aHttpChannel) { - char *spec = NULL; - nsresult result = aURL->GetSpec(&spec); + nsCAutoString spec; + nsresult result = aURL->GetAsciiSpec(spec); NS_ASSERTION(result == NS_OK, "deal with this"); - COOKIE_SetCookieString(spec, aPrompt, aCookie, mIOService, aHttpChannel); - nsCRT::free(spec); + COOKIE_SetCookieString((char *) spec.get(), aPrompt, aCookie, mIOService, aHttpChannel); return NS_OK; } NS_IMETHODIMP nsCookieService::SetCookieStringFromHttp(nsIURI *aURL, nsIURI *aFirstURL, nsIPrompt *aPrompter, const char *aCookie, const char *aExpires, nsIHttpChannel* aHttpChannel) { - char *spec = NULL; - nsresult rv = aURL->GetSpec(&spec); + nsCAutoString spec; + nsresult rv = aURL->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; NS_ASSERTION(aFirstURL,"aFirstURL is null"); if (aFirstURL) { - char *firstSpec = NULL; - rv = aFirstURL->GetSpec(&firstSpec); + nsCAutoString firstSpec; + rv = aFirstURL->GetAsciiSpec(firstSpec); if (NS_FAILED(rv)) return rv; - COOKIE_SetCookieStringFromHttp(spec, firstSpec, aPrompter, aCookie, (char *)aExpires, mIOService, aHttpChannel); - nsCRT::free(firstSpec); + COOKIE_SetCookieStringFromHttp((char *) spec.get(), (char *) firstSpec.get(), aPrompter, aCookie, (char *)aExpires, mIOService, aHttpChannel); } - nsCRT::free(spec); return NS_OK; } diff --git a/mozilla/extensions/cookie/nsCookies.cpp b/mozilla/extensions/cookie/nsCookies.cpp index 87d25d83b2d..0c733c5f1f9 100644 --- a/mozilla/extensions/cookie/nsCookies.cpp +++ b/mozilla/extensions/cookie/nsCookies.cpp @@ -646,21 +646,19 @@ COOKIE_GetCookie(char * address, nsIIOService* ioService) { if (cookie_list == nsnull) { return nsnull; } - char *host = nsnull; - char *path = nsnull; - PRUint32 start, end; + nsCAutoString host, path; // Get host and path nsresult result; NS_ASSERTION(ioService, "IOService not available"); - result = ioService->ExtractUrlPart(address, nsIIOService::url_Host | - nsIIOService::url_Port, &start, &end, - &host); - if (NS_FAILED(result) || !host) { + result = ioService->ExtractUrlPart(nsDependentCString(address), + nsIIOService::url_Host | + nsIIOService::url_Port, host); + if (NS_FAILED(result)) { return nsnull; } - result = ioService->ExtractUrlPart(address, nsIIOService::url_Path, - &start, &end, &path); - if (NS_FAILED(result) || !path) { + result = ioService->ExtractUrlPart(nsDependentCString(address), + nsIIOService::url_Path, path); + if (NS_FAILED(result)) { return nsnull; } @@ -671,25 +669,25 @@ COOKIE_GetCookie(char * address, nsIIOService* ioService) { /* check the host or domain first */ if(cookie_s->isDomain) { - char *cp; + const char *cp; /* calculate the host length by looking at all characters up to a * colon or '\0'. That way we won't include port numbers in domains */ - for(cp=host; *cp != '\0' && *cp != ':'; cp++) { + for(cp=host.get(); *cp != '\0' && *cp != ':'; cp++) { ; /* null body */ } - host_length = cp - host; - if(!cookie_IsInDomain(cookie_s->host, host, host_length)) { + host_length = cp - host.get(); + if(!cookie_IsInDomain(cookie_s->host, (char*)host.get(), host_length)) { continue; } - } else if(PL_strcasecmp(host, cookie_s->host)) { + } else if(PL_strcasecmp(host.get(), cookie_s->host)) { /* hostname matchup failed. FAIL */ continue; } /* shorter strings always come last so there can be no ambiquity */ - if(cookie_s->path && !PL_strncmp(path, cookie_s->path, PL_strlen(cookie_s->path))) { + if(cookie_s->path && !PL_strncmp(path.get(), cookie_s->path, PL_strlen(cookie_s->path))) { /* if the cookie is secure and the path isn't, dont send it */ if (cookie_s->isSecure & !isSecure) { @@ -731,8 +729,6 @@ COOKIE_GetCookie(char * address, nsIIOService* ioService) { } PR_FREEIF(name); - PR_FREEIF(path); - PR_FREEIF(host); /* may be nsnull */ return(rv); @@ -786,39 +782,39 @@ cookie_isForeign (char * curURL, char * firstURL, nsIIOService* ioService) { if (!firstURL) { return PR_FALSE; } - char *curHost = nsnull; - char *firstHost = nsnull; - PRUint32 start,end; + nsCAutoString curHost, firstHost; nsresult rv; NS_ASSERTION(ioService, "IOService not available"); // Get hosts - rv = ioService->ExtractUrlPart(curURL, nsIIOService::url_Host | - nsIIOService::url_Port, &start, &end, - &curHost); - if (NS_FAILED(rv) || !curHost) { + rv = ioService->ExtractUrlPart(nsDependentCString(curURL), + nsIIOService::url_Host | + nsIIOService::url_Port, + curHost); + if (NS_FAILED(rv)) { return PR_FALSE; } - rv = ioService->ExtractUrlPart(firstURL, nsIIOService::url_Host | - nsIIOService::url_Port, &start, &end, - &firstHost); - if (NS_FAILED(rv) || !firstHost) { + rv = ioService->ExtractUrlPart(nsDependentCString(firstURL), + nsIIOService::url_Host | + nsIIOService::url_Port, + firstHost); + if (NS_FAILED(rv)) { return PR_FALSE; } char * curHostColon = 0; char * firstHostColon = 0; /* strip ports */ - curHostColon = PL_strchr(curHost, ':'); + curHostColon = strchr(curHost.get(), ':'); if(curHostColon) { *curHostColon = '\0'; } - firstHostColon = PL_strchr(firstHost, ':'); + firstHostColon = strchr(firstHost.get(), ':'); if(firstHostColon) { *firstHostColon = '\0'; } /* determine if it's foreign */ - PRBool retval = (!cookie_SameDomain(curHost, firstHost)); + PRBool retval = (!cookie_SameDomain((char*)curHost.get(), (char*)firstHost.get())); /* clean up our garbage and return */ if(curHostColon) { @@ -827,8 +823,6 @@ cookie_isForeign (char * curURL, char * firstURL, nsIIOService* ioService) { if(firstHostColon) { *firstHostColon = ':'; } - PR_FREEIF(curHost); - PR_FREEIF(firstHost); return retval; } @@ -997,21 +991,21 @@ cookie_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCook cookie_CookieStruct * prev_cookie; char *path_from_header=nsnull, *host_from_header=nsnull; char *name_from_header=nsnull, *cookie_from_header=nsnull; - char *cur_host = nsnull; - char *cur_path = nsnull; - PRUint32 start,end; + nsCAutoString cur_host, cur_path; nsresult rv; NS_ASSERTION(ioService, "IOService not available"); // Get host and path - rv = ioService->ExtractUrlPart(curURL, nsIIOService::url_Host | - nsIIOService::url_Port, &start, &end, - &cur_host); - if (NS_FAILED(rv) || !cur_host) { + rv = ioService->ExtractUrlPart(nsDependentCString(curURL), + nsIIOService::url_Host | + nsIIOService::url_Port, + cur_host); + if (NS_FAILED(rv)) { return; } - rv = ioService->ExtractUrlPart(curURL, nsIIOService::url_Path, - &start, &end, &cur_path); - if (NS_FAILED(rv) || !cur_path) { + rv = ioService->ExtractUrlPart(nsDependentCString(curURL), + nsIIOService::url_Path, + cur_path); + if (NS_FAILED(rv)) { return; } char *semi_colon, *ptr, *equal; @@ -1031,16 +1025,12 @@ cookie_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCook } */ if(cookie_GetBehaviorPref() == PERMISSION_DontUse) { - PR_Free(cur_path); - PR_Free(cur_host); return; } //printf("\nSetCookieString(URL '%s', header '%s') time %d == %s\n",curURL,setCookieHeader,timeToExpire,asctime(gmtime(&timeToExpire))); if(cookie_GetLifetimePref() == COOKIE_Discard) { if(cookie_GetLifetimeTime() < timeToExpire) { - PR_Free(cur_path); - PR_Free(cur_host); return; } } @@ -1132,29 +1122,25 @@ cookie_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCook /* did not pass two dot test. FAIL */ PR_FREEIF(path_from_header); PR_Free(domain_from_header); - PR_Free(cur_path); - PR_Free(cur_host); // TRACEMSG(("DOMAIN failed two dot test")); nsCRT::free(setCookieHeaderInternal); return; } /* strip port numbers from the current host for the domain test */ - colon = PL_strchr(cur_host, ':'); + colon = strchr(cur_host.get(), ':'); if(colon) { *colon = '\0'; } domain_length = PL_strlen(domain_from_header); - cur_host_length = PL_strlen(cur_host); + cur_host_length = cur_host.Length(); /* check to see if the host is in the domain */ - if (!cookie_IsInDomain(domain_from_header, cur_host, cur_host_length)) { + if (!cookie_IsInDomain(domain_from_header, (char*)cur_host.get(), cur_host_length)) { // TRACEMSG(("DOMAIN failed host within domain test." // " Domain: %s, Host: %s", domain_from_header, cur_host)); PR_FREEIF(path_from_header); PR_Free(domain_from_header); - PR_Free(cur_path); - PR_Free(cur_host); nsCRT::free(setCookieHeaderInternal); return; } @@ -1180,16 +1166,14 @@ cookie_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCook pref_scd = PR_FALSE; } if ( pref_scd == PR_TRUE ) { - cur_host[cur_host_length-domain_length] = '\0'; - dot = PL_strchr(cur_host, '.'); - cur_host[cur_host_length-domain_length] = '.'; + cur_host.SetCharAt(cur_host_length-domain_length, '\0'); + dot = strchr(cur_host.get(), '.'); + cur_host.SetCharAt(cur_host_length-domain_length, '.'); if (dot) { // TRACEMSG(("host minus domain failed no-dot test." // " Domain: %s, Host: %s", domain_from_header, cur_host)); PR_FREEIF(path_from_header); PR_Free(domain_from_header); - PR_Free(cur_path); - PR_Free(cur_host); nsCRT::free(setCookieHeaderInternal); return; } @@ -1204,18 +1188,14 @@ cookie_SetCookieString(char * curURL, nsIPrompt *aPrompter, const char * setCook } if(!path_from_header) { /* strip down everything after the last slash to get the path. */ - char * slash = PL_strrchr(cur_path, '/'); + char * slash = PL_strrchr(cur_path.get(), '/'); if(slash) { *slash = '\0'; } - path_from_header = cur_path; - } else { - PR_Free(cur_path); + path_from_header = nsCRT::strdup(cur_path.get()); } if(!host_from_header) { - host_from_header = cur_host; - } else { - PR_Free(cur_host); + host_from_header = nsCRT::strdup(cur_host.get()); } /* keep cookies under the max bytes limit */ @@ -1387,12 +1367,12 @@ PUBLIC void COOKIE_SetCookieString(char * aURL, nsIPrompt *aPrompter, const char * setCookieHeader, nsIIOService* ioService, nsIHttpChannel* aHttpChannel) { nsCOMPtr pFirstURL; nsresult rv; - nsXPIDLCString firstSpec; + nsCAutoString firstSpec; if (aHttpChannel) { rv = aHttpChannel->GetDocumentURI(getter_AddRefs(pFirstURL)); if (NS_FAILED(rv)) return; - rv = pFirstURL->GetSpec(getter_Copies(firstSpec)); + rv = pFirstURL->GetSpec(firstSpec); if (NS_FAILED(rv)) return; } COOKIE_SetCookieStringFromHttp(aURL, NS_CONST_CAST(char *, firstSpec.get()), aPrompter, setCookieHeader, 0, ioService, aHttpChannel); diff --git a/mozilla/extensions/cookie/nsCookies.h b/mozilla/extensions/cookie/nsCookies.h index c5a6224d2c9..027f156060d 100644 --- a/mozilla/extensions/cookie/nsCookies.h +++ b/mozilla/extensions/cookie/nsCookies.h @@ -55,6 +55,7 @@ class nsIHttpChannel; extern nsresult COOKIE_Read(); extern nsresult COOKIE_Write(); +//XXX these should operate on |const char*| extern char * COOKIE_GetCookie(char * address, nsIIOService* ioService); extern char * COOKIE_GetCookieFromHttp(char * address, char * firstAddress, nsIIOService* ioService); extern void COOKIE_SetCookieString(char * cur_url, nsIPrompt *aPrompter, const char * set_cookie_header, nsIIOService* ioService, nsIHttpChannel* aHttpChannel); diff --git a/mozilla/extensions/cookie/nsImages.cpp b/mozilla/extensions/cookie/nsImages.cpp index 350554542fd..99763b0fdd3 100644 --- a/mozilla/extensions/cookie/nsImages.cpp +++ b/mozilla/extensions/cookie/nsImages.cpp @@ -204,11 +204,11 @@ IMAGE_Block(const char* imageURL, return NS_ERROR_NULL_POINTER; } nsresult rv = NS_OK; - char *host = nsnull; - PRUint32 start,end; + nsCAutoString host; NS_ASSERTION(ioService, "IOService not available"); - rv = ioService->ExtractUrlPart(imageURL, nsIIOService::url_Host | - nsIIOService::url_Port, &start, &end, &host); - Permission_AddHost(host, PR_FALSE, IMAGEPERMISSION, PR_TRUE); + rv = ioService->ExtractUrlPart(nsDependentCString(imageURL), + nsIIOService::url_Host | + nsIIOService::url_Port, host); + Permission_AddHost((char*)host.get(), PR_FALSE, IMAGEPERMISSION, PR_TRUE); return NS_OK; } diff --git a/mozilla/extensions/cookie/nsImgManager.cpp b/mozilla/extensions/cookie/nsImgManager.cpp index 18dd1ca0ae8..d079f897cd3 100644 --- a/mozilla/extensions/cookie/nsImgManager.cpp +++ b/mozilla/extensions/cookie/nsImgManager.cpp @@ -125,15 +125,15 @@ NS_IMETHODIMP nsImgManager::ShouldLoad(PRInt32 aContentType, if (NS_FAILED(rv) || !httpType) return rv; } - nsXPIDLCString baseHost; - rv = baseURI->GetHost(getter_Copies(baseHost)); - if (NS_FAILED(rv) || !baseHost) return rv; + nsCAutoString baseHost; + rv = baseURI->GetAsciiHost(baseHost); + if (NS_FAILED(rv)) return rv; - nsXPIDLCString host; - rv = aContentLoc->GetHost(getter_Copies(host)); - if (NS_FAILED(rv) || !host) return rv; + nsCAutoString host; + rv = aContentLoc->GetAsciiHost(host); + if (NS_FAILED(rv)) return rv; - return ::IMAGE_CheckForPermission(host, baseHost, + return ::IMAGE_CheckForPermission(host.get(), baseHost.get(), _retval); } } diff --git a/mozilla/extensions/cookie/nsPermissions.cpp b/mozilla/extensions/cookie/nsPermissions.cpp index 8d1d1e4d233..d7cc5e11216 100644 --- a/mozilla/extensions/cookie/nsPermissions.cpp +++ b/mozilla/extensions/cookie/nsPermissions.cpp @@ -698,11 +698,11 @@ PERMISSION_Add(const char * objectURL, PRBool permission, PRInt32 type, return; } nsresult rv = NS_OK; - char *host = nsnull; - PRUint32 start,end; + nsCAutoString host; NS_ASSERTION(ioService, "IOService not available"); - rv = ioService->ExtractUrlPart(objectURL, nsIIOService::url_Host | - nsIIOService::url_Port, &start, &end, &host); + rv = ioService->ExtractUrlPart(nsDependentCString(objectURL), + nsIIOService::url_Host | + nsIIOService::url_Port, host); /* * if permission is false, it will be added to the permission list @@ -710,7 +710,7 @@ PERMISSION_Add(const char * objectURL, PRBool permission, PRInt32 type, * true permission being added */ if (permission) { - char * hostPtr = host; + char * hostPtr = (char *)host.get(); while (PR_TRUE) { permission_Unblock(hostPtr, type); hostPtr = PL_strchr(hostPtr, '.'); @@ -719,10 +719,9 @@ PERMISSION_Add(const char * objectURL, PRBool permission, PRInt32 type, } hostPtr++; /* get passed the period */ } - Recycle(host); return; } - Permission_AddHost(host, permission, type, PR_TRUE); + Permission_AddHost((char*)host.get(), permission, type, PR_TRUE); } PUBLIC void @@ -732,11 +731,11 @@ PERMISSION_TestForBlocking(const char * objectURL, PRBool* blocked, PRInt32 type return; } nsresult rv = NS_OK; - nsXPIDLCString host; - PRUint32 start,end; + nsCAutoString host; NS_ASSERTION(ioService, "IOService not available"); - rv = ioService->ExtractUrlPart(objectURL, nsIIOService::url_Host | - nsIIOService::url_Port, &start, &end, getter_Copies(host)); + rv = ioService->ExtractUrlPart(nsDependentCString(objectURL), + nsIIOService::url_Host | + nsIIOService::url_Port, host); const char * hostPtr = host.get(); while (PR_TRUE) { diff --git a/mozilla/extensions/datetime/nsDateTimeChannel.cpp b/mozilla/extensions/datetime/nsDateTimeChannel.cpp index c3a91969410..dafa8f487b5 100644 --- a/mozilla/extensions/datetime/nsDateTimeChannel.cpp +++ b/mozilla/extensions/datetime/nsDateTimeChannel.cpp @@ -78,7 +78,7 @@ nsDateTimeChannel::Init(nsIURI* uri, nsIProxyInfo* proxyInfo) if (NS_FAILED(rv) || mPort < 1) mPort = DATETIME_PORT; - rv = mUrl->GetPath(getter_Copies(mHost)); + rv = mUrl->GetPath(mHost); if (NS_FAILED(rv)) return rv; if (!*(const char *)mHost) return NS_ERROR_NOT_INITIALIZED; @@ -193,7 +193,7 @@ nsDateTimeChannel::Open(nsIInputStream **_retval) transport->SetNotificationCallbacks(mCallbacks, (mLoadFlags & LOAD_BACKGROUND)); - return transport->OpenInputStream(0, -1, 0, _retval); + return transport->OpenInputStream(0, PRUint32(-1), 0, _retval); } NS_IMETHODIMP @@ -223,7 +223,7 @@ nsDateTimeChannel::AsyncOpen(nsIStreamListener *aListener, nsISupports *ctxt) mListener = aListener; nsCOMPtr request; - return transport->AsyncRead(this, ctxt, 0, -1, 0, getter_AddRefs(request)); + return transport->AsyncRead(this, ctxt, 0, PRUint32(-1), 0, getter_AddRefs(request)); } NS_IMETHODIMP diff --git a/mozilla/extensions/datetime/nsDateTimeHandler.cpp b/mozilla/extensions/datetime/nsDateTimeHandler.cpp index 75189123f7f..52f53a754b8 100644 --- a/mozilla/extensions/datetime/nsDateTimeHandler.cpp +++ b/mozilla/extensions/datetime/nsDateTimeHandler.cpp @@ -78,9 +78,8 @@ nsDateTimeHandler::Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult // nsIProtocolHandler methods: NS_IMETHODIMP -nsDateTimeHandler::GetScheme(char* *result) { - *result = nsCRT::strdup("datetime"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; +nsDateTimeHandler::GetScheme(nsACString &result) { + result = "datetime"; return NS_OK; } @@ -97,8 +96,10 @@ nsDateTimeHandler::GetProtocolFlags(PRUint32 *result) { } NS_IMETHODIMP -nsDateTimeHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) { +nsDateTimeHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; // no concept of a relative datetime url @@ -109,7 +110,7 @@ nsDateTimeHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, NS_GET_IID(nsIURI), (void**)&url); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec((char*)aSpec); + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); return rv; diff --git a/mozilla/extensions/finger/nsFingerChannel.cpp b/mozilla/extensions/finger/nsFingerChannel.cpp index 3db53101364..76f32765247 100644 --- a/mozilla/extensions/finger/nsFingerChannel.cpp +++ b/mozilla/extensions/finger/nsFingerChannel.cpp @@ -65,7 +65,7 @@ nsresult nsFingerChannel::Init(nsIURI* uri, nsIProxyInfo* proxyInfo) { nsresult rv; - nsXPIDLCString autoBuffer; + nsCAutoString autoBuffer; NS_ASSERTION(uri, "no uri"); @@ -77,12 +77,12 @@ nsFingerChannel::Init(nsIURI* uri, nsIProxyInfo* proxyInfo) mPort = FINGER_PORT; - rv = mUrl->GetPath(getter_Copies(autoBuffer)); // autoBuffer = user@host + rv = mUrl->GetPath(autoBuffer); // autoBuffer = user@host if (NS_FAILED(rv)) return rv; // Now parse out the user and host const char* buf = autoBuffer.get(); - const char* pos = PL_strchr(buf, '@'); + const char* pos = strchr(buf, '@'); // Catch the case of just the host being given if (!pos) { @@ -383,9 +383,9 @@ nsFingerChannel::OnStopRequest(nsIRequest *aRequest, nsISupports* aContext, nsCOMPtr converter(do_QueryInterface(converterListener)); if (converter) { nsAutoString title(NS_LITERAL_STRING("Finger information for ")); - nsXPIDLCString userHost; - rv = mUrl->GetPath(getter_Copies(userHost)); - title.AppendWithConversion(userHost); + nsCAutoString userHost; + rv = mUrl->GetPath(userHost); + title.Append(NS_ConvertUTF8toUCS2(userHost)); converter->SetTitle(title.get()); converter->PreFormatHTML(PR_TRUE); } diff --git a/mozilla/extensions/finger/nsFingerHandler.cpp b/mozilla/extensions/finger/nsFingerHandler.cpp index dd4012bfca3..52ce357b6a4 100644 --- a/mozilla/extensions/finger/nsFingerHandler.cpp +++ b/mozilla/extensions/finger/nsFingerHandler.cpp @@ -63,9 +63,8 @@ nsFingerHandler::Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult) // nsIProtocolHandler methods: NS_IMETHODIMP -nsFingerHandler::GetScheme(char* *result) { - *result = nsCRT::strdup("finger"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; +nsFingerHandler::GetScheme(nsACString &result) { + result = "finger"; return NS_OK; } @@ -82,8 +81,10 @@ nsFingerHandler::GetProtocolFlags(PRUint32 *result) { } NS_IMETHODIMP -nsFingerHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) { +nsFingerHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; // no concept of a relative finger url @@ -94,7 +95,7 @@ nsFingerHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, NS_GET_IID(nsIURI), (void**)&url); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec((char*)aSpec); + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); return rv; diff --git a/mozilla/extensions/inspector/base/src/inBitmapProtocolHandler.cpp b/mozilla/extensions/inspector/base/src/inBitmapProtocolHandler.cpp index 64dbead2e79..a528316eca7 100644 --- a/mozilla/extensions/inspector/base/src/inBitmapProtocolHandler.cpp +++ b/mozilla/extensions/inspector/base/src/inBitmapProtocolHandler.cpp @@ -46,10 +46,9 @@ NS_IMPL_ISUPPORTS2(inBitmapProtocolHandler, nsIProtocolHandler, nsISupportsWeakR //////////////////////////////////////////////////////////////////////////////// // nsIProtocolHandler -NS_IMETHODIMP inBitmapProtocolHandler::GetScheme(char* *result) +NS_IMETHODIMP inBitmapProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("moz-bitmap"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; + result = "moz-bitmap"; return NS_OK; } @@ -67,12 +66,15 @@ NS_IMETHODIMP inBitmapProtocolHandler::GetProtocolFlags(PRUint32 *result) NS_IMETHODIMP inBitmapProtocolHandler::AllowPort(PRInt32 port, const char *scheme, PRBool *_retval) { - // don't override anything. - *_retval = PR_FALSE; - return NS_OK; + // don't override anything. + *_retval = PR_FALSE; + return NS_OK; } -NS_IMETHODIMP inBitmapProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **result) +NS_IMETHODIMP inBitmapProtocolHandler::NewURI(const nsACString &aSpec, + const char *aOriginCharset, // ignored + nsIURI *aBaseURI, + nsIURI **result) { // no concept of a relative bitmap url NS_ASSERTION(!aBaseURI, "base url passed into bitmap protocol handler"); diff --git a/mozilla/extensions/inspector/base/src/inBitmapURI.cpp b/mozilla/extensions/inspector/base/src/inBitmapURI.cpp index e91f1b436f2..3b94c7e7219 100644 --- a/mozilla/extensions/inspector/base/src/inBitmapURI.cpp +++ b/mozilla/extensions/inspector/base/src/inBitmapURI.cpp @@ -58,123 +58,127 @@ inBitmapURI::GetBitmapName(PRUnichar** aBitmapName) //////////////////////////////////////////////////////////////////////////////// nsresult -inBitmapURI::FormatSpec(char* *result) +inBitmapURI::FormatSpec(nsACString &result) { - *result = ToNewCString(NS_LITERAL_CSTRING(NS_BITMAP_SCHEME "//") + - mBitmapName); - return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + result = NS_LITERAL_CSTRING(NS_BITMAP_SCHEME "//") + mBitmapName; + return NS_OK; } //////////////////////////////////////////////////////////////////////////////// // nsIURI NS_IMETHODIMP -inBitmapURI::GetSpec(char* *aSpec) +inBitmapURI::GetSpec(nsACString &aSpec) { return FormatSpec(aSpec); } NS_IMETHODIMP -inBitmapURI::SetSpec(const char* aSpec) +inBitmapURI::SetSpec(const nsACString &aSpec) { nsresult rv; nsCOMPtr ioService (do_GetService(kIOServiceCID, &rv)); NS_ENSURE_SUCCESS(rv, rv); - PRUint32 startPos, endPos; - rv = ioService->ExtractScheme(aSpec, &startPos, &endPos, nsnull); + nsCAutoString scheme; + rv = ioService->ExtractScheme(aSpec, scheme); NS_ENSURE_SUCCESS(rv, rv); - if (nsCRT::strncmp("moz-bitmap", &aSpec[startPos], endPos - startPos - 1) != 0) + if (strcmp("moz-bitmap", scheme.get()) != 0) return NS_ERROR_MALFORMED_URI; - nsCAutoString path(aSpec); - PRInt32 pos = path.FindChar(NS_BITMAP_DELIMITER); + nsACString::const_iterator end, colon, delim; + aSpec.BeginReading(colon); + aSpec.EndReading(end); - if (pos == -1) // additional parameters - { - path.Right(mBitmapName, path.Length() - endPos); - } - else - { - path.Mid(mBitmapName, endPos, pos - endPos); - // TODO: parse out other parameters - } + if (!FindCharInReadable(':', colon, end)) + return NS_ERROR_MALFORMED_URI; + + if (!FindCharInReadable(NS_BITMAP_DELIMITER, delim = ++colon, end)) + delim = end; + + mBitmapName = Substring(colon, delim); + // TODO: parse out other parameters return NS_OK; } NS_IMETHODIMP -inBitmapURI::GetPrePath(char** prePath) +inBitmapURI::GetPrePath(nsACString &prePath) { - *prePath = nsCRT::strdup(NS_BITMAP_SCHEME); - return *prePath ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + prePath = NS_BITMAP_SCHEME; + return NS_OK; } NS_IMETHODIMP -inBitmapURI::SetPrePath(const char* prePath) +inBitmapURI::GetScheme(nsACString &aScheme) { - NS_NOTREACHED("inBitmapURI::SetPrePath"); - return NS_ERROR_NOT_IMPLEMENTED; + aScheme = "moz-bitmap"; + return NS_OK; } NS_IMETHODIMP -inBitmapURI::GetScheme(char * *aScheme) -{ - *aScheme = nsCRT::strdup("moz-bitmap"); - return *aScheme ? NS_OK : NS_ERROR_OUT_OF_MEMORY; -} - -NS_IMETHODIMP -inBitmapURI::SetScheme(const char * aScheme) +inBitmapURI::SetScheme(const nsACString &aScheme) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::GetUsername(char * *aUsername) +inBitmapURI::GetUsername(nsACString &aUsername) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::SetUsername(const char * aUsername) +inBitmapURI::SetUsername(const nsACString &aUsername) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::GetPassword(char * *aPassword) +inBitmapURI::GetPassword(nsACString &aPassword) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::SetPassword(const char * aPassword) +inBitmapURI::SetPassword(const nsACString &aPassword) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::GetPreHost(char * *aPreHost) +inBitmapURI::GetUserPass(nsACString &aUserPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::SetPreHost(const char * aPreHost) +inBitmapURI::SetUserPass(const nsACString &aUserPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::GetHost(char * *aHost) +inBitmapURI::GetHostPort(nsACString &aHostPort) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::SetHost(const char * aHost) +inBitmapURI::SetHostPort(const nsACString &aHostPort) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +inBitmapURI::GetHost(nsACString &aHost) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +inBitmapURI::SetHost(const nsACString &aHost) { return NS_ERROR_FAILURE; } @@ -192,29 +196,47 @@ inBitmapURI::SetPort(PRInt32 aPort) } NS_IMETHODIMP -inBitmapURI::GetPath(char * *aPath) +inBitmapURI::GetPath(nsACString &aPath) +{ + aPath.Truncate(); + return NS_OK; +} + +NS_IMETHODIMP +inBitmapURI::SetPath(const nsACString &aPath) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -inBitmapURI::SetPath(const char * aPath) +inBitmapURI::GetAsciiSpec(nsACString &aSpec) { - return NS_ERROR_FAILURE; + return GetSpec(aSpec); +} + +NS_IMETHODIMP +inBitmapURI::GetAsciiHost(nsACString &aHost) +{ + return GetHost(aHost); +} + +NS_IMETHODIMP +inBitmapURI::GetOriginCharset(nsACString &result) +{ + result.Truncate(); + return NS_OK; } NS_IMETHODIMP inBitmapURI::Equals(nsIURI *other, PRBool *result) { - nsXPIDLCString spec1; - nsXPIDLCString spec2; + nsCAutoString spec1; + nsCAutoString spec2; - other->GetSpec(getter_Copies(spec2)); - GetSpec(getter_Copies(spec1)); - if (!nsCRT::strcasecmp(spec1, spec2)) - *result = PR_TRUE; - else - *result = PR_FALSE; + other->GetSpec(spec2); + GetSpec(spec1); + + *result = !nsCRT::strcasecmp(spec1.get(), spec2.get()); return NS_OK; } @@ -235,7 +257,7 @@ inBitmapURI::Clone(nsIURI **result) } NS_IMETHODIMP -inBitmapURI::Resolve(const char *relativePath, char **result) +inBitmapURI::Resolve(const nsACString &relativePath, nsACString &result) { return NS_OK; } diff --git a/mozilla/extensions/inspector/base/src/inBitmapURI.h b/mozilla/extensions/inspector/base/src/inBitmapURI.h index 056b2da2fd0..f00466f2c06 100644 --- a/mozilla/extensions/inspector/base/src/inBitmapURI.h +++ b/mozilla/extensions/inspector/base/src/inBitmapURI.h @@ -38,7 +38,7 @@ public: protected: nsCString mBitmapName; - nsresult FormatSpec(char** result); + nsresult FormatSpec(nsACString &result); }; #endif // __inBitmapURI_h__ diff --git a/mozilla/extensions/irc/js/lib/chatzilla-service.js b/mozilla/extensions/irc/js/lib/chatzilla-service.js index 6c03f53c402..dcf24f5cb18 100644 --- a/mozilla/extensions/irc/js/lib/chatzilla-service.js +++ b/mozilla/extensions/irc/js/lib/chatzilla-service.js @@ -175,7 +175,7 @@ function (aPort, aScheme) } IRCProtocolHandler.prototype.newURI = -function (aSpec, aBaseURI) +function (aSpec, aCharset, aBaseURI) { if (aBaseURI) { @@ -185,7 +185,7 @@ function (aSpec, aBaseURI) var url = Components.classes[STANDARDURL_CONTRACTID]. createInstance(nsIStandardURL); - url.init(nsIStandardURL.URLTYPE_STANDARD, 6667, aSpec, aBaseURI); + url.init(nsIStandardURL.URLTYPE_STANDARD, 6667, aSpec, aCharset, aBaseURI); return url.QueryInterface(nsIURI); } diff --git a/mozilla/extensions/irc/js/lib/connection-xpcom.js b/mozilla/extensions/irc/js/lib/connection-xpcom.js index eb3e623dc75..c2aa5800001 100644 --- a/mozilla/extensions/irc/js/lib/connection-xpcom.js +++ b/mozilla/extensions/irc/js/lib/connection-xpcom.js @@ -90,7 +90,7 @@ function bc_connect(host, port, bind, tcp_flag, observer) var ios = Components.classes["@mozilla.org/network/io-service;1"]. getService(Components.interfaces.nsIIOService); var spec = "irc://" + host + ':' + port; - var uri = ios.newURI(spec,null); + var uri = ios.newURI(spec,null,null); var info = pps.examineForProxy(uri); this._transport = this._sockService.createTransport (host, port, info, diff --git a/mozilla/extensions/pref/autoconfig/src/nsAutoConfig.cpp b/mozilla/extensions/pref/autoconfig/src/nsAutoConfig.cpp index c27ae93246d..ef344eb9c1d 100644 --- a/mozilla/extensions/pref/autoconfig/src/nsAutoConfig.cpp +++ b/mozilla/extensions/pref/autoconfig/src/nsAutoConfig.cpp @@ -314,7 +314,7 @@ nsresult nsAutoConfig::downloadAutoConfig() return rv; // open a channel for the url - rv = NS_OpenURI(getter_AddRefs(channel),url, nsnull, nsnull, nsnull, nsIRequest::INHIBIT_PERSISTENT_CACHING | nsIRequest::LOAD_BYPASS_CACHE); + rv = NS_NewChannel(getter_AddRefs(channel),url, nsnull, nsnull, nsnull, nsIRequest::INHIBIT_PERSISTENT_CACHING | nsIRequest::LOAD_BYPASS_CACHE); if (NS_FAILED(rv)) return rv; diff --git a/mozilla/extensions/pref/autoconfig/src/nsLDAPSyncQuery.cpp b/mozilla/extensions/pref/autoconfig/src/nsLDAPSyncQuery.cpp index 87adaf3c45e..ea53ca07c5b 100644 --- a/mozilla/extensions/pref/autoconfig/src/nsLDAPSyncQuery.cpp +++ b/mozilla/extensions/pref/autoconfig/src/nsLDAPSyncQuery.cpp @@ -386,8 +386,8 @@ nsresult nsLDAPSyncQuery::InitConnection() // host to connect to // - nsXPIDLCString host; - rv = mServerURL->GetHost(getter_Copies(host)); + nsCAutoString host; + rv = mServerURL->GetAsciiHost(host); if (NS_FAILED(rv)) { FinishLDAPQuery(); return NS_ERROR_FAILURE; @@ -416,7 +416,7 @@ nsresult nsLDAPSyncQuery::InitConnection() return NS_ERROR_FAILURE; } - rv = mConnection->Init(host, port, 0, selfProxy); + rv = mConnection->Init(host.get(), port, 0, selfProxy); if (NS_FAILED(rv)) { FinishLDAPQuery(); return NS_ERROR_UNEXPECTED; // this should never happen diff --git a/mozilla/extensions/transformiix/resources/buster/txTools.js b/mozilla/extensions/transformiix/resources/buster/txTools.js index 532f9acfdeb..ff830e6babb 100644 --- a/mozilla/extensions/transformiix/resources/buster/txTools.js +++ b/mozilla/extensions/transformiix/resources/buster/txTools.js @@ -136,7 +136,7 @@ function loadFile(url) if (!serv) throw Components.results.ERR_FAILURE; - var chan = serv.newChannel(url, null); + var chan = serv.newChannel(url, null, null); var instream = Components.classes[SIS_CTRID].createInstance(nsIScriptableInputStream); diff --git a/mozilla/extensions/transformiix/source/xml/parser/nsSyncLoader.cpp b/mozilla/extensions/transformiix/source/xml/parser/nsSyncLoader.cpp index 7f8a918f452..27191c77108 100644 --- a/mozilla/extensions/transformiix/source/xml/parser/nsSyncLoader.cpp +++ b/mozilla/extensions/transformiix/source/xml/parser/nsSyncLoader.cpp @@ -210,7 +210,7 @@ nsSyncLoader::LoadDocument(nsIURI* documentURI, nsIDocument *aLoader, nsIDOMDocu getter_AddRefs(DOMDocument)); NS_ENSURE_SUCCESS(rv, rv); - rv = NS_OpenURI(getter_AddRefs(mChannel), documentURI, nsnull, loadGroup); + rv = NS_NewChannel(getter_AddRefs(mChannel), documentURI, nsnull, loadGroup); NS_ENSURE_SUCCESS(rv, rv); // Make sure we've been opened diff --git a/mozilla/extensions/venkman/resources/content/venkman-url-loader.js b/mozilla/extensions/venkman/resources/content/venkman-url-loader.js index 91e6bd37825..0a156f5c560 100644 --- a/mozilla/extensions/venkman/resources/content/venkman-url-loader.js +++ b/mozilla/extensions/venkman/resources/content/venkman-url-loader.js @@ -46,7 +46,7 @@ function _getChannelForURL (url) if (!serv) throw new BadMojo(ERR_FAILURE); - return serv.newChannel(url, null); + return serv.newChannel(url, null, null); } diff --git a/mozilla/extensions/wallet/src/nsWalletService.cpp b/mozilla/extensions/wallet/src/nsWalletService.cpp index 2c67ab05565..a5c17451d6a 100644 --- a/mozilla/extensions/wallet/src/nsWalletService.cpp +++ b/mozilla/extensions/wallet/src/nsWalletService.cpp @@ -224,10 +224,9 @@ NS_IMETHODIMP nsWalletlibService::Observe(nsISupports *aSubject, const char *aTo // A login succeeded; store the password. nsCOMPtr uri = do_QueryInterface(aSubject); if (uri) { - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); - if (spec) - SI_StorePassword(spec, nsnull, someData); + nsCAutoString spec; + if (NS_SUCCEEDED(uri->GetSpec(spec))) + SI_StorePassword(spec.get(), nsnull, someData); } } else if (!nsCRT::strcmp(aTopic, "login-failed")) { @@ -235,10 +234,10 @@ NS_IMETHODIMP nsWalletlibService::Observe(nsISupports *aSubject, const char *aTo // the URL where the failure occurred. nsCOMPtr uri = do_QueryInterface(aSubject); if (uri) { - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); - if (spec) - SI_RemoveUser(spec, nsnull); + nsCAutoString spec; + uri->GetSpec(spec); + if (NS_SUCCEEDED(uri->GetSpec(spec))) + SI_RemoveUser(spec.get(), nsnull); } } return NS_OK; @@ -395,8 +394,8 @@ nsWalletlibService::OnStateChange(nsIWebProgress* aWebProgress, return NS_OK; } - nsXPIDLCString spec; - rv = uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = uri->GetSpec(spec); if (NS_FAILED(rv)) return rv; nsCOMPtr forms; @@ -475,7 +474,7 @@ nsWalletlibService::OnStateChange(nsIWebProgress* aWebProgress, wwatch->GetNewPrompter(0, getter_AddRefs(prompter)); } if (prompter) { - SINGSIGN_RestoreSignonData(prompter, spec, nameString, &valueString, elementNumber++); + SINGSIGN_RestoreSignonData(prompter, spec.get(), nameString, &valueString, elementNumber++); } if (valueString) { value = valueString; diff --git a/mozilla/extensions/wallet/src/singsign.cpp b/mozilla/extensions/wallet/src/singsign.cpp index 11504b38828..b2abb804178 100644 --- a/mozilla/extensions/wallet/src/singsign.cpp +++ b/mozilla/extensions/wallet/src/singsign.cpp @@ -2053,12 +2053,12 @@ SINGSIGN_RememberSignonData nsIDOMWindowInternal* window) { - nsXPIDLCString strippedRealm; + nsCAutoString strippedRealm; nsCOMPtr ioService = do_GetService(NS_IOSERVICE_CONTRACTID); if (!ioService) return; - ioService->ExtractUrlPart(passwordRealm, nsIIOService::url_Host, 0, 0, getter_Copies(strippedRealm)); - if (strippedRealm) { - si_RememberSignonData(dialog, strippedRealm, signonData, window); + ioService->ExtractUrlPart(nsDependentCString(passwordRealm), nsIIOService::url_Host, strippedRealm); + if (!strippedRealm.IsEmpty()) { + si_RememberSignonData(dialog, strippedRealm.get(), signonData, window); } } @@ -2168,11 +2168,11 @@ si_RestoreSignonData(nsIPrompt* dialog, const char* passwordRealm, const PRUnich PUBLIC void SINGSIGN_RestoreSignonData(nsIPrompt* dialog, const char* passwordRealm, const PRUnichar* name, PRUnichar** value, PRUint32 elementNumber) { - nsXPIDLCString strippedRealm; + nsCAutoString strippedRealm; nsCOMPtr ioService = do_GetService(NS_IOSERVICE_CONTRACTID); if (!ioService) return; - ioService->ExtractUrlPart(passwordRealm, nsIIOService::url_Host, 0, 0, getter_Copies(strippedRealm)); - si_RestoreSignonData(dialog, strippedRealm, name, value, elementNumber); + ioService->ExtractUrlPart(nsDependentCString(passwordRealm), nsIIOService::url_Host, strippedRealm); + si_RestoreSignonData(dialog, (char*)strippedRealm.get(), name, value, elementNumber); } /* diff --git a/mozilla/extensions/wallet/src/wallet.cpp b/mozilla/extensions/wallet/src/wallet.cpp index 97b4d9b4444..56e5c7b1be0 100644 --- a/mozilla/extensions/wallet/src/wallet.cpp +++ b/mozilla/extensions/wallet/src/wallet.cpp @@ -1624,21 +1624,18 @@ static void wallet_GetHostFile(nsIURI * url, nsString& outHostFile) { outHostFile.Truncate(0); - nsAutoString urlName; - char* host = nsnull; - nsresult rv = url->GetHost(&host); + nsCAutoString host; + nsresult rv = url->GetHost(host); if (NS_FAILED(rv)) { return; } - urlName.AppendWithConversion(host); - nsCRT::free(host); - char* file = nsnull; - rv = url->GetPath(&file); + NS_ConvertUTF8toUCS2 urlName(host); + nsCAutoString file; + rv = url->GetPath(file); if (NS_FAILED(rv)) { return; } - urlName.AppendWithConversion(file); - nsCRT::free(file); + urlName.Append(NS_ConvertUTF8toUCS2(file)); PRInt32 queryPos = urlName.FindChar('?'); PRInt32 stringEnd = (queryPos == kNotFound) ? urlName.Length() : queryPos; @@ -3864,19 +3861,19 @@ public: PRIVATE PRBool wallet_IsFromCartman(nsIURI* aURL) { PRBool retval = PR_FALSE; - nsXPIDLCString host; - if (NS_SUCCEEDED(aURL->GetHost(getter_Copies(host))) && host) { - if (PL_strncasecmp(host, "127.0.0.1", 9) == 0) { + nsCAutoString host; + if (NS_SUCCEEDED(aURL->GetHost(host))) { + if (PL_strncasecmp(host.get(), "127.0.0.1", 9) == 0) { /* submit is to server on local machine */ nsresult res; nsCOMPtr psm = do_GetService(PSM_COMPONENT_CONTRACTID, &res); if (NS_SUCCEEDED(res)) { - nsXPIDLCString password; - if (NS_SUCCEEDED(aURL->GetPassword(getter_Copies(password))) && password) { + nsCAutoString password; + if (NS_SUCCEEDED(aURL->GetPassword(password))) { nsXPIDLCString secmanPassword; if (NS_SUCCEEDED(psm->GetPassword(getter_Copies(secmanPassword))) && secmanPassword) { - if (PL_strncasecmp(password, secmanPassword, 9) == 0) { + if (PL_strncasecmp(password.get(), secmanPassword, 9) == 0) { /* password for submit is cartman's password */ retval = PR_TRUE; } @@ -3916,7 +3913,7 @@ WLLT_OnSubmit(nsIContent* currentForm, nsIDOMWindowInternal* window) { nsCOMPtr currentFormNode(do_QueryInterface(currentForm)); /* get url name as ascii string */ - char *URLName = nsnull; + nsCAutoString URLName; nsAutoString strippedURLNameUCS2; nsCOMPtr doc; currentForm->GetDocument(*getter_AddRefs(doc)); @@ -3928,21 +3925,19 @@ WLLT_OnSubmit(nsIContent* currentForm, nsIDOMWindowInternal* window) { if (!docURL || wallet_IsFromCartman(docURL)) { return; } - (void)docURL->GetSpec(&URLName); + (void)docURL->GetSpec(URLName); wallet_GetHostFile(docURL, strippedURLNameUCS2); nsCAutoString strippedURLNameUTF8 = NS_ConvertUCS2toUTF8(strippedURLNameUCS2); /* get to the form elements */ nsCOMPtr htmldoc(do_QueryInterface(doc)); if (htmldoc == nsnull) { - nsCRT::free(URLName); return; } nsCOMPtr forms; nsresult rv = htmldoc->GetForms(getter_AddRefs(forms)); if (NS_FAILED(rv) || (forms == nsnull)) { - nsCRT::free(URLName); return; } @@ -4133,7 +4128,7 @@ WLLT_OnSubmit(nsIContent* currentForm, nsIDOMWindowInternal* window) { wwatch->GetNewPrompter(0, getter_AddRefs(dialog)); if (dialog) { - SINGSIGN_RememberSignonData(dialog, URLName, signonData, window); + SINGSIGN_RememberSignonData(dialog, (char*)URLName.get(), signonData, window); } } PRInt32 count2 = signonData->Count(); @@ -4176,7 +4171,6 @@ WLLT_OnSubmit(nsIContent* currentForm, nsIDOMWindowInternal* window) { } } } - nsCRT::free(URLName); } PUBLIC void diff --git a/mozilla/extensions/webservices/schema/src/nsSchemaLoader.cpp b/mozilla/extensions/webservices/schema/src/nsSchemaLoader.cpp index 36904738b79..c3fb576946e 100644 --- a/mozilla/extensions/webservices/schema/src/nsSchemaLoader.cpp +++ b/mozilla/extensions/webservices/schema/src/nsSchemaLoader.cpp @@ -820,7 +820,7 @@ nsSchemaLoader::GetResolvedURI(const nsAReadableString& aSchemaURI, } } - rv = NS_NewURI(aURI, aSchemaURI, baseURI); + rv = NS_NewURI(aURI, aSchemaURI, nsnull, baseURI); if (NS_FAILED(rv)) return rv; rv = secMan->CheckLoadURIFromScript(cx, *aURI); @@ -852,8 +852,8 @@ nsSchemaLoader::Load(const nsAReadableString& schemaURI, if (NS_FAILED(rv)) { return rv; } - nsXPIDLCString spec; - resolvedURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + resolvedURI->GetSpec(spec); nsCOMPtr request(do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv)); if (!request) { @@ -908,8 +908,8 @@ nsSchemaLoader::LoadAsync(const nsAReadableString& schemaURI, if (NS_FAILED(rv)) { return rv; } - nsXPIDLCString spec; - resolvedURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + resolvedURI->GetSpec(spec); nsCOMPtr request(do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv)); if (!request) { diff --git a/mozilla/extensions/webservices/soap/src/nsSOAPCall.cpp b/mozilla/extensions/webservices/soap/src/nsSOAPCall.cpp index 443d0de4f40..1987c730d1f 100644 --- a/mozilla/extensions/webservices/soap/src/nsSOAPCall.cpp +++ b/mozilla/extensions/webservices/soap/src/nsSOAPCall.cpp @@ -99,14 +99,14 @@ nsresult nsSOAPCall::GetTransport(nsISOAPTransport ** aTransport) NS_ENSURE_ARG_POINTER(aTransport); nsresult rv; nsCOMPtr < nsIURI > uri; - nsXPIDLCString protocol; + nsCAutoString protocol; nsCString transportURI(ToNewCString(mTransportURI)); rv = NS_NewURI(getter_AddRefs(uri), transportURI.get()); if (NS_FAILED(rv)) return rv; - uri->GetScheme(getter_Copies(protocol)); + uri->GetScheme(protocol); nsCAutoString transportContractid; transportContractid.Assign(NS_SOAPTRANSPORT_CONTRACTID_PREFIX); diff --git a/mozilla/extensions/xmlextras/base/src/nsXMLHttpRequest.cpp b/mozilla/extensions/xmlextras/base/src/nsXMLHttpRequest.cpp index 2a85bb6543f..3f790688fd1 100644 --- a/mozilla/extensions/xmlextras/base/src/nsXMLHttpRequest.cpp +++ b/mozilla/extensions/xmlextras/base/src/nsXMLHttpRequest.cpp @@ -567,17 +567,17 @@ nsXMLHttpRequest::OpenRequest(const char *method, if (NS_FAILED(rv)) return rv; if (user) { - nsCAutoString prehost; - prehost.Assign(user); + nsCAutoString userpass; + userpass.Assign(user); if (password) { - prehost.Append(":"); - prehost.Append(password); + userpass.Append(":"); + userpass.Append(password); } - uri->SetPreHost(prehost.get()); + uri->SetUserPass(userpass); authp = PR_TRUE; } - rv = NS_OpenURI(getter_AddRefs(mChannel), uri, nsnull, nsnull); + rv = NS_NewChannel(getter_AddRefs(mChannel), uri, nsnull, nsnull); if (NS_FAILED(rv)) return rv; //mChannel->SetAuthTriedWithPrehost(authp); diff --git a/mozilla/extensions/xmlextras/schema/src/nsSchemaLoader.cpp b/mozilla/extensions/xmlextras/schema/src/nsSchemaLoader.cpp index 36904738b79..c3fb576946e 100644 --- a/mozilla/extensions/xmlextras/schema/src/nsSchemaLoader.cpp +++ b/mozilla/extensions/xmlextras/schema/src/nsSchemaLoader.cpp @@ -820,7 +820,7 @@ nsSchemaLoader::GetResolvedURI(const nsAReadableString& aSchemaURI, } } - rv = NS_NewURI(aURI, aSchemaURI, baseURI); + rv = NS_NewURI(aURI, aSchemaURI, nsnull, baseURI); if (NS_FAILED(rv)) return rv; rv = secMan->CheckLoadURIFromScript(cx, *aURI); @@ -852,8 +852,8 @@ nsSchemaLoader::Load(const nsAReadableString& schemaURI, if (NS_FAILED(rv)) { return rv; } - nsXPIDLCString spec; - resolvedURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + resolvedURI->GetSpec(spec); nsCOMPtr request(do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv)); if (!request) { @@ -908,8 +908,8 @@ nsSchemaLoader::LoadAsync(const nsAReadableString& schemaURI, if (NS_FAILED(rv)) { return rv; } - nsXPIDLCString spec; - resolvedURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + resolvedURI->GetSpec(spec); nsCOMPtr request(do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv)); if (!request) { diff --git a/mozilla/extensions/xmlextras/soap/src/nsSOAPCall.cpp b/mozilla/extensions/xmlextras/soap/src/nsSOAPCall.cpp index 443d0de4f40..1987c730d1f 100644 --- a/mozilla/extensions/xmlextras/soap/src/nsSOAPCall.cpp +++ b/mozilla/extensions/xmlextras/soap/src/nsSOAPCall.cpp @@ -99,14 +99,14 @@ nsresult nsSOAPCall::GetTransport(nsISOAPTransport ** aTransport) NS_ENSURE_ARG_POINTER(aTransport); nsresult rv; nsCOMPtr < nsIURI > uri; - nsXPIDLCString protocol; + nsCAutoString protocol; nsCString transportURI(ToNewCString(mTransportURI)); rv = NS_NewURI(getter_AddRefs(uri), transportURI.get()); if (NS_FAILED(rv)) return rv; - uri->GetScheme(getter_Copies(protocol)); + uri->GetScheme(protocol); nsCAutoString transportContractid; transportContractid.Assign(NS_SOAPTRANSPORT_CONTRACTID_PREFIX); diff --git a/mozilla/extensions/xmlextras/tests/TestXMLExtras.cpp b/mozilla/extensions/xmlextras/tests/TestXMLExtras.cpp index 3859869d512..31b197121a7 100644 --- a/mozilla/extensions/xmlextras/tests/TestXMLExtras.cpp +++ b/mozilla/extensions/xmlextras/tests/TestXMLExtras.cpp @@ -155,7 +155,7 @@ int main (int argc, char* argv[]) argv[2] ); if (NS_SUCCEEDED( rv )) { - rv = NS_OpenURI( getter_AddRefs( pChannel ), + rv = NS_NewChannel( getter_AddRefs( pChannel ), pURI, nsnull, nsnull ); @@ -198,7 +198,7 @@ int main (int argc, char* argv[]) } } else { - printf( "NS_OpenURI failed for %s - %08X\n", argv[2], rv ); + printf( "NS_NewChannel failed for %s - %08X\n", argv[2], rv ); } } else { @@ -273,8 +273,8 @@ int main (int argc, char* argv[]) if (doc) { nsCOMPtr uri; doc->GetDocumentURL(getter_AddRefs(uri)); - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + uri->GetSpec(spec); printf("Document URI=\"%s\"\n",spec.get()); } } diff --git a/mozilla/extensions/xmlterm/base/mozXMLTermStream.cpp b/mozilla/extensions/xmlterm/base/mozXMLTermStream.cpp index 63ef3e2ae79..e2e80947c40 100644 --- a/mozilla/extensions/xmlterm/base/mozXMLTermStream.cpp +++ b/mozilla/extensions/xmlterm/base/mozXMLTermStream.cpp @@ -194,7 +194,7 @@ NS_IMETHODIMP mozXMLTermStream::Open(nsIDOMWindowInternal* aDOMWindow, if (NS_FAILED(result)) return result; - result = uri->SetSpec(contentURL); + result = uri->SetSpec(nsDependentCString(contentURL)); if (NS_FAILED(result)) return result; diff --git a/mozilla/extensions/xmlterm/base/mozXMLTerminal.cpp b/mozilla/extensions/xmlterm/base/mozXMLTerminal.cpp index 20b02774a6b..3f54472b15d 100644 --- a/mozilla/extensions/xmlterm/base/mozXMLTerminal.cpp +++ b/mozilla/extensions/xmlterm/base/mozXMLTerminal.cpp @@ -235,7 +235,7 @@ NS_IMETHODIMP mozXMLTerminal::Init(nsIDocShell* aDocShell, urlCString.AssignWithConversion(aURL); nsCOMPtr uri; - result = uri->SetSpec(urlCString.get()); + result = uri->SetSpec(urlCString); if (NS_FAILED(result)) return NS_ERROR_FAILURE; diff --git a/mozilla/extensions/xmlterm/ui/xmlterm-service.js b/mozilla/extensions/xmlterm/ui/xmlterm-service.js index 15fa8ae79f2..f407b16cadf 100644 --- a/mozilla/extensions/xmlterm/ui/xmlterm-service.js +++ b/mozilla/extensions/xmlterm/ui/xmlterm-service.js @@ -158,7 +158,7 @@ XMLTermProtocolHandler.prototype.URIType = Components.interfaces.nsIProtocolHandler.URI_NORELATIVE; XMLTermProtocolHandler.prototype.newURI = -function (aSpec, aBaseURI) +function (aSpec, aCharset, aBaseURI) { if (aBaseURI) { @@ -191,7 +191,7 @@ function (aURI) // Open temporary XUL channel var xulURI = ioServ.newURI("chrome://xmlterm/content/xmltermDummy.xul", - null); + null, null); var temChannel = ioServ.newChannelFromURI(xulURI); // Get owner of XUL channel @@ -232,7 +232,7 @@ function (aURI) var jarURI = "jar:file:"+file.path+"!/content/xmlterm/xmlterm.html"; - var newChannel = ioServ.newChannel(jarURI, null); + var newChannel = ioServ.newChannel(jarURI, null, null); // Make new channel owned by system principal newChannel.owner = gSystemPrincipal; diff --git a/mozilla/gfx/src/ps/nsPostScriptObj.cpp b/mozilla/gfx/src/ps/nsPostScriptObj.cpp index de1fe8ee257..e95b2cec443 100644 --- a/mozilla/gfx/src/ps/nsPostScriptObj.cpp +++ b/mozilla/gfx/src/ps/nsPostScriptObj.cpp @@ -2759,7 +2759,7 @@ nsPostScriptObj::InitUnixPrinterProps() nsCOMPtr printerprops_tmp; const char propertyURL[] = "resource:/res/unixpsfonts.properties"; nsCOMPtr uri; - NS_ENSURE_SUCCESS(NS_NewURI(getter_AddRefs(uri), propertyURL), PR_FALSE); + NS_ENSURE_SUCCESS(NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING(propertyURL)), PR_FALSE); nsCOMPtr in; NS_ENSURE_SUCCESS(NS_OpenURI(getter_AddRefs(in), uri), PR_FALSE); NS_ENSURE_SUCCESS(nsComponentManager::CreateInstance( diff --git a/mozilla/htmlparser/robot/nsDebugRobot.cpp b/mozilla/htmlparser/robot/nsDebugRobot.cpp index 127cb73dc25..8340d4fbc12 100644 --- a/mozilla/htmlparser/robot/nsDebugRobot.cpp +++ b/mozilla/htmlparser/robot/nsDebugRobot.cpp @@ -263,17 +263,15 @@ extern "C" NS_EXPORT int DebugRobot( if (NS_FAILED(rv)) return rv; nsIURI *uri = nsnull; - char *uriStr = ToNewCString(*urlName); - if (!uriStr) return NS_ERROR_OUT_OF_MEMORY; - rv = service->NewURI(uriStr, nsnull, &uri); - nsCRT::free(uriStr); + NS_ConvertUCS2toUTF8 uriStr(*urlName); + rv = service->NewURI(uriStr, nsnull, nsnull, &uri); if (NS_FAILED(rv)) return rv; rv = uri->QueryInterface(NS_GET_IID(nsIURI), (void**)&url); NS_RELEASE(uri); if (NS_OK != rv) { printf("invalid URL: '"); - fputs(NS_LossyConvertUCS2toASCII(*urlName).get(), stdout); + fputs(uriStr.get(), stdout); printf("'\n"); NS_RELEASE(myObserver); return -1; @@ -321,10 +319,9 @@ extern "C" NS_EXPORT int DebugRobot( parser->Parse(url, nsnull,PR_TRUE);/* XXX hook up stream listener here! */ while (!g_bReadyForNextUrl) { if (yieldProc != NULL) { - char* spec; - (void)url->GetSpec(&spec); - (*yieldProc)(spec); - nsCRT::free(spec); + nsCAutoString spec; + (void)url->GetSpec(spec); + (*yieldProc)(spec.get()); } } g_bReadyForNextUrl = PR_FALSE; @@ -334,10 +331,9 @@ extern "C" NS_EXPORT int DebugRobot( (void) progress->AddProgressListener(pl); - char* spec; - (void)url->GetSpec(&spec); - nsAutoString theSpec; theSpec.AssignWithConversion(spec); - nsCRT::free(spec); + nsCAutoString spec; + (void)url->GetSpec(spec); + NS_ConvertUTF8toUCS2 theSpec(spec); nsCOMPtr webNav(do_QueryInterface(docShell)); webNav->LoadURI(theSpec.get(), nsIWebNavigation::LOAD_FLAGS_NONE, @@ -346,9 +342,8 @@ extern "C" NS_EXPORT int DebugRobot( nsnull);/* XXX hook up stream listener here! */ while (!g_bReadyForNextUrl) { if (yieldProc != NULL) { - (void)url->GetSpec(&spec); - (*yieldProc)(spec); - nsCRT::free(spec); + (void)url->GetSpec(spec); + (*yieldProc)(spec.get()); } } } diff --git a/mozilla/htmlparser/robot/nsRobotSink.cpp b/mozilla/htmlparser/robot/nsRobotSink.cpp index e08f2a76fdb..8edc59542a0 100644 --- a/mozilla/htmlparser/robot/nsRobotSink.cpp +++ b/mozilla/htmlparser/robot/nsRobotSink.cpp @@ -368,10 +368,8 @@ void RobotSink::ProcessLink(const nsString& aLink) rv = mDocumentURL->QueryInterface(NS_GET_IID(nsIURI), (void**)&baseUri); if (NS_FAILED(rv)) return; - char *uriStr = ToNewCString(aLink); - if (!uriStr) return; - rv = service->NewURI(uriStr, baseUri, &uri); - nsCRT::free(uriStr); + NS_ConvertUCS2toUTF8 uriStr(aLink); + rv = service->NewURI(uriStr, nsnull, baseUri, &uri); NS_RELEASE(baseUri); if (NS_FAILED(rv)) return; @@ -380,10 +378,9 @@ void RobotSink::ProcessLink(const nsString& aLink) if (NS_OK == rv) { absURLSpec.Truncate(); - char* str; - absurl->GetSpec(&str); - absURLSpec.AssignWithConversion(str); - nsCRT::free(str); + nsCAutoString str; + absurl->GetSpec(str); + absURLSpec = NS_ConvertUTF8toUCS2(str); } } diff --git a/mozilla/htmlparser/src/nsExpatDriver.cpp b/mozilla/htmlparser/src/nsExpatDriver.cpp index 3512d4992bc..88e4957c7c4 100644 --- a/mozilla/htmlparser/src/nsExpatDriver.cpp +++ b/mozilla/htmlparser/src/nsExpatDriver.cpp @@ -457,7 +457,7 @@ IsLoadableDTD(const XML_Char* aFPIStr, nsCOMPtr* aDTD) // exists in the special DTD directory if (!isLoadable) { // try to see if we can map the public ID to a known local DTD - nsXPIDLCString fileName; + nsCAutoString fileName; if (aFPIStr) { RemapDTD(aFPIStr, fileName); } @@ -471,7 +471,7 @@ IsLoadableDTD(const XML_Char* aFPIStr, nsCOMPtr* aDTD) if (NS_FAILED(res)) { return PR_FALSE; } - res = dtdURL->GetFileName(getter_Copies(fileName)); + res = dtdURL->GetFileName(fileName); if (NS_FAILED(res) || fileName.IsEmpty()) { return PR_FALSE; } @@ -483,7 +483,7 @@ IsLoadableDTD(const XML_Char* aFPIStr, nsCOMPtr* aDTD) // Set aDTD to a file: url pointing to the local DTD nsFileURL dtdFile(dtdPath); nsCOMPtr dtdURI; - NS_NewURI(getter_AddRefs(dtdURI), dtdFile.GetURLString()); + NS_NewURI(getter_AddRefs(dtdURI), nsDependentCString(dtdFile.GetURLString())); if (dtdURI) { *aDTD = dtdURI; isLoadable = PR_TRUE; @@ -503,16 +503,16 @@ nsExpatDriver::OpenInputStream(const XML_Char* aFPIStr, { nsresult rv; nsCOMPtr baseURI; - rv = NS_NewURI(getter_AddRefs(baseURI), NS_ConvertUCS2toUTF8((const PRUnichar*)aBaseURL).get()); + rv = NS_NewURI(getter_AddRefs(baseURI), NS_ConvertUCS2toUTF8((const PRUnichar*)aBaseURL)); if (NS_SUCCEEDED(rv) && baseURI) { nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUCS2toUTF8((const PRUnichar*)aURLStr).get(), baseURI); + rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUCS2toUTF8((const PRUnichar*)aURLStr), nsnull, baseURI); if (NS_SUCCEEDED(rv) && uri) { if (IsLoadableDTD(aFPIStr, address_of(uri))) { rv = NS_OpenURI(in, uri); - nsXPIDLCString absURL; - uri->GetSpec(getter_Copies(absURL)); - CopyASCIItoUCS2(absURL, aAbsURL); + nsCAutoString absURL; + uri->GetSpec(absURL); + aAbsURL = NS_ConvertUTF8toUCS2(absURL); } else { rv = NS_ERROR_NOT_IMPLEMENTED; @@ -722,7 +722,6 @@ NS_IMETHODIMP nsExpatDriver::ConsumeToken(nsScanner& aScanner, PRBool& aFlushTokens) { - // Ask the scanner to send us all the data it has // scanned and pass that data to expat. diff --git a/mozilla/htmlparser/src/nsParser.cpp b/mozilla/htmlparser/src/nsParser.cpp index 08868cc4508..686cd9c071a 100644 --- a/mozilla/htmlparser/src/nsParser.cpp +++ b/mozilla/htmlparser/src/nsParser.cpp @@ -1594,13 +1594,12 @@ nsresult nsParser::Parse(nsIURI* aURL,nsIRequestObserver* aListener,PRBool aVeri } if(aURL) { - char* spec; - nsresult rv = aURL->GetSpec(&spec); + nsCAutoString spec; + nsresult rv = aURL->GetSpec(spec); if (rv != NS_OK) { return rv; } NS_ConvertUTF8toUCS2 theName(spec); - nsCRT::free(spec); nsScanner* theScanner=new nsScanner(theName,PR_FALSE,mCharset,mCharsetSource); CParserContext* pc=new CParserContext(theScanner,aKey,mCommand,aListener); @@ -1640,7 +1639,7 @@ nsresult nsParser::Parse(nsIInputStream& aStream,const nsAReadableString& aMimeT nsAutoString theUnknownFilename(NS_LITERAL_STRING("unknown")); nsInputStream input(&aStream); - + nsScanner* theScanner=new nsScanner(theUnknownFilename,input,mCharset,mCharsetSource); CParserContext* pc=new CParserContext(theScanner,aKey,mCommand,0); if(pc && theScanner) { @@ -1681,8 +1680,7 @@ nsresult nsParser::Parse(const nsAReadableString& aSourceBuffer, void* aKey, // bug #2361 to break again! nsresult result=NS_OK; - - + if(aLastCall && (0==aSourceBuffer.Length())) { // Nothing is being passed to the parser so return // immediately. mUnusedInput will get processed when diff --git a/mozilla/intl/strres/src/nsStringBundle.cpp b/mozilla/intl/strres/src/nsStringBundle.cpp index e90e7e80088..912f9a1025d 100644 --- a/mozilla/intl/strres/src/nsStringBundle.cpp +++ b/mozilla/intl/strres/src/nsStringBundle.cpp @@ -170,7 +170,7 @@ nsStringBundle::LoadProperties() NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), mPropertiesURL.get()); + rv = NS_NewURI(getter_AddRefs(uri), mPropertiesURL); if (NS_FAILED(rv)) return rv; // create and loader, then wait @@ -198,7 +198,7 @@ nsStringBundle::LoadProperties() // do it synchronously nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), mPropertiesURL.get()); + rv = NS_NewURI(getter_AddRefs(uri), mPropertiesURL); if (NS_FAILED(rv)) return rv; nsCOMPtr in; diff --git a/mozilla/intl/uconv/src/nsURLProperties.cpp b/mozilla/intl/uconv/src/nsURLProperties.cpp index 2e41f071301..1ed36a7d443 100644 --- a/mozilla/intl/uconv/src/nsURLProperties.cpp +++ b/mozilla/intl/uconv/src/nsURLProperties.cpp @@ -63,9 +63,7 @@ nsURLProperties::nsURLProperties(const nsAFlatString& aUrl) gRefCnt++; } - nsCAutoString aUrlCString; - aUrlCString.AssignWithConversion(aUrl); - res = gIOService->NewURI(aUrlCString.get(), nsnull, &url); + res = gIOService->NewURI(NS_ConvertUCS2toUTF8(aUrl), nsnull, nsnull, &url); if (NS_FAILED(res)) return; res = NS_OpenURI(&in, url); diff --git a/mozilla/intl/unicharutil/src/nsEntityConverter.cpp b/mozilla/intl/unicharutil/src/nsEntityConverter.cpp index ec74a5a5a15..e31e0a2e4aa 100644 --- a/mozilla/intl/unicharutil/src/nsEntityConverter.cpp +++ b/mozilla/intl/unicharutil/src/nsEntityConverter.cpp @@ -74,7 +74,7 @@ nsEntityConverter::LoadVersionPropertyFile() nsIInputStream* in = NULL; nsresult rv; - rv = NS_NewURI(&url,aUrl,NULL); + rv = NS_NewURI(&url,aUrl); if (NS_FAILED(rv)) return rv; rv = NS_OpenURI(&in,url); @@ -134,7 +134,7 @@ nsEntityConverter::LoadEntityPropertyFile(PRInt32 version) aUrl.Append(versionName); aUrl.Append(NS_LITERAL_STRING(".properties")); - rv = NS_NewURI(&url,aUrl,NULL); + rv = NS_NewURI(&url,aUrl); if (NS_FAILED(rv)) return NULL; rv = NS_OpenURI(&in,url); diff --git a/mozilla/js/src/xpconnect/loader/mozJSComponentLoader.cpp b/mozilla/js/src/xpconnect/loader/mozJSComponentLoader.cpp index 74bbb711326..2b2574387ef 100644 --- a/mozilla/js/src/xpconnect/loader/mozJSComponentLoader.cpp +++ b/mozilla/js/src/xpconnect/loader/mozJSComponentLoader.cpp @@ -50,6 +50,7 @@ #include "nsIScriptSecurityManager.h" #include "nsIScriptObjectPrincipal.h" #include "nsIURL.h" +#include "nsIStandardURL.h" #include "nsNetUtil.h" #endif #ifndef NO_SUBSCRIPT_LOADER @@ -266,7 +267,7 @@ EvalInSandbox(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, do_CreateInstance(kStandardURLContractID); if (!stdUrl || NS_FAILED(stdUrl->Init(nsIStandardURL::URLTYPE_STANDARD, 80, - URL8.get(), nsnull)) || + URL8, nsnull, nsnull)) || !(iURL = do_QueryInterface(stdUrl))) { JS_ReportError(cx, "Can't create URL for evalInSandbox"); return JS_FALSE; @@ -1170,7 +1171,7 @@ mozJSComponentLoader::GlobalForLocation(const char *aLocation, #ifdef XPCONNECT_STANDALONE localFile->GetPath(getter_Copies(displayPath)); #else - NS_GetURLSpecFromFile(localFile, getter_Copies(displayPath)); + NS_GetURLSpecFromFile(localFile, displayPath); #endif rv = localFile->OpenANSIFileDesc("r", &fileHandle); if (NS_FAILED(rv)) { diff --git a/mozilla/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp b/mozilla/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp index 0652a78afbc..ae24265c4a8 100644 --- a/mozilla/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp +++ b/mozilla/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp @@ -45,6 +45,7 @@ #include "nsIChannel.h" #include "nsIInputStream.h" #include "nsNetCID.h" +#include "nsDependentString.h" #include "jsapi.h" @@ -257,7 +258,7 @@ mozJSSubScriptLoader::LoadSubScript (const PRUnichar * /*url*/ goto return_exception; } - rv = serv->NewChannel(url, NS_STATIC_CAST(nsIURI *, nsnull), + rv = serv->NewChannel(nsDependentCString(url), nsnull, NS_STATIC_CAST(nsIURI *, nsnull), getter_AddRefs(chan)); if (NS_FAILED(rv)) { diff --git a/mozilla/layout/base/nsDocumentViewer.cpp b/mozilla/layout/base/nsDocumentViewer.cpp index 03df8a72b31..c9aa5912f48 100644 --- a/mozilla/layout/base/nsDocumentViewer.cpp +++ b/mozilla/layout/base/nsDocumentViewer.cpp @@ -1302,12 +1302,11 @@ DocumentViewerImpl::LoadComplete(nsresult aStatus) mDocument->GetDocumentURL(getter_AddRefs(uri)); if (uri.get() != nsnull) { //printf("DEBUG: getting spec fro uri (%p)\n", uri.get()); - char *spec = nsnull; - uri->GetSpec(&spec); - if (spec && !strcmp(spec, "chrome://navigator/content/navigator.xul")) { + nsCAutoString spec; + uri->GetSpec(spec); + if (!strcmp(spec.get(), "chrome://navigator/content/navigator.xul")) { NS_TIMELINE_MARK("Navigator Window visible now"); } - CRTFREEIF(spec); } } #endif /* MOZ_TIMELINE */ @@ -2461,11 +2460,9 @@ DocumentViewerImpl::GetWebShellTitleAndURL(nsIWebShell * aWebShell, doc->GetDocumentURL(getter_AddRefs(url)); if (!url) return; - nsXPIDLCString urlCStr; - url->GetSpec(getter_Copies(urlCStr)); - if (urlCStr.get()) { - *aURLStr = ToNewUnicode(urlCStr); - } + nsCAutoString urlCStr; + url->GetSpec(urlCStr); + *aURLStr = ToNewUnicode(NS_ConvertUTF8toUCS2(urlCStr)); } //------------------------------------------------------- diff --git a/mozilla/layout/base/nsPresContext.cpp b/mozilla/layout/base/nsPresContext.cpp index 5d79988fc44..4836bb14acc 100644 --- a/mozilla/layout/base/nsPresContext.cpp +++ b/mozilla/layout/base/nsPresContext.cpp @@ -1490,7 +1490,7 @@ nsPresContext::LoadImage(const nsString& aURL, doc->GetBaseURL(*getter_AddRefs(baseURI)); nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), aURL, baseURI); + NS_NewURI(getter_AddRefs(uri), aURL, nsnull, baseURI); if (!loader) { nsCOMPtr content; diff --git a/mozilla/layout/base/nsPresShell.cpp b/mozilla/layout/base/nsPresShell.cpp index 0f6c346436b..4b2fde07a43 100644 --- a/mozilla/layout/base/nsPresShell.cpp +++ b/mozilla/layout/base/nsPresShell.cpp @@ -2583,10 +2583,9 @@ PresShell::InitialReflow(nscoord aWidth, nscoord aHeight) if (mDocument) { mDocument->GetDocumentURL(getter_AddRefs(uri)); if (uri) { - char* url = nsnull; - uri->GetSpec(&url); - printf("*** PresShell::InitialReflow (this=%p, url='%s')\n", (void*)this, url); - Recycle(url); + nsCAutoString url; + uri->GetSpec(url); + printf("*** PresShell::InitialReflow (this=%p, url='%s')\n", (void*)this, url.get()); } } } @@ -4281,14 +4280,14 @@ NS_IMETHODIMP PresShell::DoCopyLinkLocation(nsIDOMNode* aNode) NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr baseURI; - rv = ios->NewURI(NS_ConvertUCS2toUTF8(base).get(),nsnull,getter_AddRefs(baseURI)); + rv = ios->NewURI(NS_ConvertUCS2toUTF8(base),nsnull,nsnull,getter_AddRefs(baseURI)); NS_ENSURE_SUCCESS(rv, rv); - nsXPIDLCString spec; - rv = baseURI->Resolve(NS_ConvertUCS2toUTF8(anchorText).get(),getter_Copies(spec)); + nsCAutoString spec; + rv = baseURI->Resolve(NS_ConvertUCS2toUTF8(anchorText),spec); NS_ENSURE_SUCCESS(rv, rv); - anchorText.AssignWithConversion(spec.get()); + anchorText = NS_ConvertUTF8toUCS2(spec); } } } @@ -7242,18 +7241,17 @@ NS_IMETHODIMP PresShell::DumpReflows() { if (mReflowCountMgr) { - char * uriStr = nsnull; + nsCAutoString uriStr; if (mDocument) { nsCOMPtr uri; mDocument->GetDocumentURL(getter_AddRefs(uri)); if (uri) { - uri->GetPath(&uriStr); + uri->GetPath(uriStr); } } - mReflowCountMgr->DisplayTotals(uriStr); - mReflowCountMgr->DisplayHTMLTotals(uriStr); + mReflowCountMgr->DisplayTotals(uriStr.get()); + mReflowCountMgr->DisplayHTMLTotals(uriStr.get()); mReflowCountMgr->DisplayDiffsInTotals("Differences"); - if (uriStr) nsCRT::free(uriStr); } return NS_OK; } diff --git a/mozilla/layout/base/src/nsPresContext.cpp b/mozilla/layout/base/src/nsPresContext.cpp index 5d79988fc44..4836bb14acc 100644 --- a/mozilla/layout/base/src/nsPresContext.cpp +++ b/mozilla/layout/base/src/nsPresContext.cpp @@ -1490,7 +1490,7 @@ nsPresContext::LoadImage(const nsString& aURL, doc->GetBaseURL(*getter_AddRefs(baseURI)); nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), aURL, baseURI); + NS_NewURI(getter_AddRefs(uri), aURL, nsnull, baseURI); if (!loader) { nsCOMPtr content; diff --git a/mozilla/layout/build/nsContentDLF.cpp b/mozilla/layout/build/nsContentDLF.cpp index bb95a4e3ef7..458813929af 100644 --- a/mozilla/layout/build/nsContentDLF.cpp +++ b/mozilla/layout/build/nsContentDLF.cpp @@ -317,7 +317,7 @@ nsContentDLF::CreateBlankDocument(nsILoadGroup *aLoadGroup, nsIDocument **aDocum if (blankDoc) { // initialize nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), "about:blank", 0); + NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING("about:blank")); if (uri) rv = blankDoc->ResetToURI(uri, aLoadGroup); } @@ -674,7 +674,7 @@ nsContentDLF::EnsureUAStyleSheet() // Load the UA style sheet nsCOMPtr uri; - nsresult rv = NS_NewURI(getter_AddRefs(uri), UA_CSS_URL); + nsresult rv = NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING(UA_CSS_URL)); if (NS_FAILED(rv)) { #ifdef DEBUG printf("*** open of %s failed: error=%x\n", UA_CSS_URL, rv); diff --git a/mozilla/layout/forms/nsIsIndexFrame.cpp b/mozilla/layout/forms/nsIsIndexFrame.cpp index 08d617d5d8d..9e72eae5fe4 100644 --- a/mozilla/layout/forms/nsIsIndexFrame.cpp +++ b/mozilla/layout/forms/nsIsIndexFrame.cpp @@ -444,11 +444,10 @@ nsIsIndexFrame::OnSubmit(nsIPresContext* aPresContext) // Necko's MakeAbsoluteURI doesn't reuse the baseURL's rel path if it is // passed a zero length rel path. - nsXPIDLCString relPath; - docURL->GetSpec(getter_Copies(relPath)); - NS_ASSERTION(relPath, "Rel path couldn't be formed in form submit!\n"); - if (relPath) { - href.AppendWithConversion(relPath); + nsCAutoString relPath; + docURL->GetSpec(relPath); + if (!relPath.IsEmpty()) { + href = NS_ConvertUTF8toUCS2(relPath); // If re-using the same URL, chop off old query string (bug 25330) PRInt32 queryStart = href.FindChar('?'); @@ -456,6 +455,7 @@ nsIsIndexFrame::OnSubmit(nsIPresContext* aPresContext) href.Truncate(queryStart); } } else { + NS_ERROR("Rel path couldn't be formed in form submit!\n"); return NS_ERROR_OUT_OF_MEMORY; } @@ -464,7 +464,7 @@ nsIsIndexFrame::OnSubmit(nsIPresContext* aPresContext) nsCOMPtr actionURL; nsXPIDLCString scheme; PRBool isJSURL = PR_FALSE; - if (NS_SUCCEEDED(result = NS_NewURI(getter_AddRefs(actionURL), href, docURL))) { + if (NS_SUCCEEDED(result = NS_NewURI(getter_AddRefs(actionURL), href, nsnull, docURL))) { result = actionURL->SchemeIs("javascript", &isJSURL); } // Append the URI encoded variable/value pairs for GET's diff --git a/mozilla/layout/generic/nsBulletFrame.cpp b/mozilla/layout/generic/nsBulletFrame.cpp index 135e2afd85b..af2fa1d9fcc 100644 --- a/mozilla/layout/generic/nsBulletFrame.cpp +++ b/mozilla/layout/generic/nsBulletFrame.cpp @@ -133,7 +133,7 @@ nsBulletFrame::Init(nsIPresContext* aPresContext, GetBaseURI(getter_AddRefs(baseURI)); nsCOMPtr imgURI; - NS_NewURI(getter_AddRefs(imgURI), myList->mListStyleImage, baseURI); + NS_NewURI(getter_AddRefs(imgURI), myList->mListStyleImage, nsnull, baseURI); if (!mListener) { nsBulletListener *listener; @@ -1443,7 +1443,7 @@ nsBulletFrame::Reflow(nsIPresContext* aPresContext, nsCOMPtr newURI; - NS_NewURI(getter_AddRefs(newURI), myList->mListStyleImage, baseURI); + NS_NewURI(getter_AddRefs(newURI), myList->mListStyleImage, nsnull, baseURI); PRBool needNewRequest = PR_TRUE; diff --git a/mozilla/layout/generic/nsFrameFrame.cpp b/mozilla/layout/generic/nsFrameFrame.cpp index ef8957ad8ee..27541d741a1 100644 --- a/mozilla/layout/generic/nsFrameFrame.cpp +++ b/mozilla/layout/generic/nsFrameFrame.cpp @@ -1165,7 +1165,7 @@ nsHTMLFrameInnerFrame::DoLoadURL(nsIPresContext* aPresContext) NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), absURL, nsnull); + NS_NewURI(getter_AddRefs(uri), absURL); // Check for security nsCOMPtr secMan = @@ -1209,7 +1209,7 @@ nsHTMLFrameInnerFrame::DoLoadURL(nsIPresContext* aPresContext) // Check if we are allowed to load absURL nsCOMPtr newURI; - rv = NS_NewURI(getter_AddRefs(newURI), absURL, baseURI); + rv = NS_NewURI(getter_AddRefs(newURI), absURL, nsnull, baseURI); NS_ENSURE_SUCCESS(rv, rv); rv = secMan->CheckLoadURI(referrer, newURI, nsIScriptSecurityManager::STANDARD); if (NS_FAILED(rv)) diff --git a/mozilla/layout/generic/nsImageFrame.cpp b/mozilla/layout/generic/nsImageFrame.cpp index 43ae934312f..8762361c966 100644 --- a/mozilla/layout/generic/nsImageFrame.cpp +++ b/mozilla/layout/generic/nsImageFrame.cpp @@ -1440,7 +1440,7 @@ nsImageFrame::TriggerLink(nsIPresContext* aPresContext, doc->GetDocumentURL(getter_AddRefs(baseURI)); nsCOMPtr absURI; if (NS_SUCCEEDED(rv)) - rv = NS_NewURI(getter_AddRefs(absURI), aURLSpec, baseURI); + rv = NS_NewURI(getter_AddRefs(absURI), aURLSpec, nsnull, baseURI); if (NS_SUCCEEDED(rv)) proceed = securityManager->CheckLoadURI(baseURI, absURI, nsIScriptSecurityManager::STANDARD); @@ -1786,8 +1786,8 @@ mRect.height); // output the img src url nsCOMPtr uri; mLoads[0].mRequest->GetURI(getter_AddRefs(uri)); - nsXPIDLCString uristr; - uri->GetSpec(getter_Copies(uristr)); + nsCAutoString uristr; + uri->GetAsciiSpec(uristr); fprintf(out, " [src=%s]", uristr.get()); fputs("\n", out); @@ -1944,7 +1944,7 @@ nsImageFrame::GetRealURI(const nsAReadableString& aSpec, nsIURI **aURI) { nsCOMPtr baseURI; GetBaseURI(getter_AddRefs(baseURI)); - NS_NewURI(aURI, aSpec, baseURI); + NS_NewURI(aURI, aSpec, nsnull, baseURI); } void diff --git a/mozilla/layout/generic/nsObjectFrame.cpp b/mozilla/layout/generic/nsObjectFrame.cpp index d54e7a46ae3..8bd4fe0934d 100644 --- a/mozilla/layout/generic/nsObjectFrame.cpp +++ b/mozilla/layout/generic/nsObjectFrame.cpp @@ -316,7 +316,7 @@ private: nsPluginWindow mPluginWindow; nsIPluginInstance *mInstance; nsObjectFrame *mOwner; - char *mDocumentBase; + nsCString mDocumentBase; char *mTagText; nsIWidget *mWidget; nsIPresContext *mContext; @@ -526,7 +526,7 @@ void nsObjectFrame::IsSupportedDocument(nsIContent* aContent, PRBool* aDoc) nsCOMPtr baseURL; if (NS_FAILED(GetBaseURL(*getter_AddRefs(baseURL)))) return; // XXX NS_NewURI fails without base - rv = NS_NewURI(getter_AddRefs(uri), data, baseURL); + rv = NS_NewURI(getter_AddRefs(uri), data, nsnull, baseURL); if (NS_FAILED(rv)) return; nsCOMPtr mimeService = do_GetService(NS_MIMESERVICE_CONTRACTID, &rv); @@ -939,14 +939,13 @@ nsObjectFrame::MakeAbsoluteURL(nsIURI* *aFullURI, //trim leading and trailing whitespace aSrc.Trim("\b\t\r\n ", PR_TRUE, PR_TRUE, PR_FALSE); - //create properly encoded absolute URI using the document charset - nsXPIDLCString encodedURI; - rv = NS_MakeAbsoluteURIWithCharset(getter_Copies(encodedURI), - aSrc, document, aBaseURI, - nsHTMLUtils::IOService, - nsHTMLUtils::CharsetMgr); - rv = NS_NewURI(aFullURI, encodedURI, aBaseURI); - return rv; + // get document charset + nsAutoString originCharset; + if (document && NS_FAILED(document->GetDocumentCharacterSet(originCharset))) + originCharset.Truncate(); + + return NS_NewURI(aFullURI, aSrc, NS_LossyConvertUCS2toASCII(originCharset).get(), + aBaseURI, nsHTMLUtils::IOService); } #define JAVA_CLASS_ID "8AD9C840-044E-11D1-B3E9-00805F499D93" @@ -2063,7 +2062,6 @@ nsPluginInstanceOwner::nsPluginInstanceOwner() mOwner = nsnull; mWidget = nsnull; mContext = nsnull; - mDocumentBase = nsnull; mTagText = nsnull; mPluginHost = nsnull; mContentFocused = PR_FALSE; @@ -2108,11 +2106,6 @@ nsPluginInstanceOwner::~nsPluginInstanceOwner() mCachedAttrParamValues = nsnull; } - if (nsnull != mDocumentBase) { - nsCRT::free(mDocumentBase); - mDocumentBase = nsnull; - } - if (nsnull != mTagText) { nsCRT::free(mTagText); mTagText = nsnull; @@ -2576,7 +2569,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(const char* *result) { NS_ENSURE_ARG_POINTER(result); nsresult rv = NS_OK; - if (nsnull == mDocumentBase) { + if (mDocumentBase.IsEmpty()) { if (nsnull == mContext) { *result = nsnull; return NS_ERROR_FAILURE; @@ -2591,10 +2584,10 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(const char* *result) nsCOMPtr docURL; doc->GetBaseURL(*getter_AddRefs(docURL)); // should return base + doc url - rv = docURL->GetSpec(&mDocumentBase); + rv = docURL->GetSpec(mDocumentBase); } if (rv == NS_OK) - *result = mDocumentBase; + *result = ToNewCString(mDocumentBase); return rv; } diff --git a/mozilla/layout/html/base/src/nsBulletFrame.cpp b/mozilla/layout/html/base/src/nsBulletFrame.cpp index 135e2afd85b..af2fa1d9fcc 100644 --- a/mozilla/layout/html/base/src/nsBulletFrame.cpp +++ b/mozilla/layout/html/base/src/nsBulletFrame.cpp @@ -133,7 +133,7 @@ nsBulletFrame::Init(nsIPresContext* aPresContext, GetBaseURI(getter_AddRefs(baseURI)); nsCOMPtr imgURI; - NS_NewURI(getter_AddRefs(imgURI), myList->mListStyleImage, baseURI); + NS_NewURI(getter_AddRefs(imgURI), myList->mListStyleImage, nsnull, baseURI); if (!mListener) { nsBulletListener *listener; @@ -1443,7 +1443,7 @@ nsBulletFrame::Reflow(nsIPresContext* aPresContext, nsCOMPtr newURI; - NS_NewURI(getter_AddRefs(newURI), myList->mListStyleImage, baseURI); + NS_NewURI(getter_AddRefs(newURI), myList->mListStyleImage, nsnull, baseURI); PRBool needNewRequest = PR_TRUE; diff --git a/mozilla/layout/html/base/src/nsImageFrame.cpp b/mozilla/layout/html/base/src/nsImageFrame.cpp index 43ae934312f..8762361c966 100644 --- a/mozilla/layout/html/base/src/nsImageFrame.cpp +++ b/mozilla/layout/html/base/src/nsImageFrame.cpp @@ -1440,7 +1440,7 @@ nsImageFrame::TriggerLink(nsIPresContext* aPresContext, doc->GetDocumentURL(getter_AddRefs(baseURI)); nsCOMPtr absURI; if (NS_SUCCEEDED(rv)) - rv = NS_NewURI(getter_AddRefs(absURI), aURLSpec, baseURI); + rv = NS_NewURI(getter_AddRefs(absURI), aURLSpec, nsnull, baseURI); if (NS_SUCCEEDED(rv)) proceed = securityManager->CheckLoadURI(baseURI, absURI, nsIScriptSecurityManager::STANDARD); @@ -1786,8 +1786,8 @@ mRect.height); // output the img src url nsCOMPtr uri; mLoads[0].mRequest->GetURI(getter_AddRefs(uri)); - nsXPIDLCString uristr; - uri->GetSpec(getter_Copies(uristr)); + nsCAutoString uristr; + uri->GetAsciiSpec(uristr); fprintf(out, " [src=%s]", uristr.get()); fputs("\n", out); @@ -1944,7 +1944,7 @@ nsImageFrame::GetRealURI(const nsAReadableString& aSpec, nsIURI **aURI) { nsCOMPtr baseURI; GetBaseURI(getter_AddRefs(baseURI)); - NS_NewURI(aURI, aSpec, baseURI); + NS_NewURI(aURI, aSpec, nsnull, baseURI); } void diff --git a/mozilla/layout/html/base/src/nsObjectFrame.cpp b/mozilla/layout/html/base/src/nsObjectFrame.cpp index d54e7a46ae3..8bd4fe0934d 100644 --- a/mozilla/layout/html/base/src/nsObjectFrame.cpp +++ b/mozilla/layout/html/base/src/nsObjectFrame.cpp @@ -316,7 +316,7 @@ private: nsPluginWindow mPluginWindow; nsIPluginInstance *mInstance; nsObjectFrame *mOwner; - char *mDocumentBase; + nsCString mDocumentBase; char *mTagText; nsIWidget *mWidget; nsIPresContext *mContext; @@ -526,7 +526,7 @@ void nsObjectFrame::IsSupportedDocument(nsIContent* aContent, PRBool* aDoc) nsCOMPtr baseURL; if (NS_FAILED(GetBaseURL(*getter_AddRefs(baseURL)))) return; // XXX NS_NewURI fails without base - rv = NS_NewURI(getter_AddRefs(uri), data, baseURL); + rv = NS_NewURI(getter_AddRefs(uri), data, nsnull, baseURL); if (NS_FAILED(rv)) return; nsCOMPtr mimeService = do_GetService(NS_MIMESERVICE_CONTRACTID, &rv); @@ -939,14 +939,13 @@ nsObjectFrame::MakeAbsoluteURL(nsIURI* *aFullURI, //trim leading and trailing whitespace aSrc.Trim("\b\t\r\n ", PR_TRUE, PR_TRUE, PR_FALSE); - //create properly encoded absolute URI using the document charset - nsXPIDLCString encodedURI; - rv = NS_MakeAbsoluteURIWithCharset(getter_Copies(encodedURI), - aSrc, document, aBaseURI, - nsHTMLUtils::IOService, - nsHTMLUtils::CharsetMgr); - rv = NS_NewURI(aFullURI, encodedURI, aBaseURI); - return rv; + // get document charset + nsAutoString originCharset; + if (document && NS_FAILED(document->GetDocumentCharacterSet(originCharset))) + originCharset.Truncate(); + + return NS_NewURI(aFullURI, aSrc, NS_LossyConvertUCS2toASCII(originCharset).get(), + aBaseURI, nsHTMLUtils::IOService); } #define JAVA_CLASS_ID "8AD9C840-044E-11D1-B3E9-00805F499D93" @@ -2063,7 +2062,6 @@ nsPluginInstanceOwner::nsPluginInstanceOwner() mOwner = nsnull; mWidget = nsnull; mContext = nsnull; - mDocumentBase = nsnull; mTagText = nsnull; mPluginHost = nsnull; mContentFocused = PR_FALSE; @@ -2108,11 +2106,6 @@ nsPluginInstanceOwner::~nsPluginInstanceOwner() mCachedAttrParamValues = nsnull; } - if (nsnull != mDocumentBase) { - nsCRT::free(mDocumentBase); - mDocumentBase = nsnull; - } - if (nsnull != mTagText) { nsCRT::free(mTagText); mTagText = nsnull; @@ -2576,7 +2569,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(const char* *result) { NS_ENSURE_ARG_POINTER(result); nsresult rv = NS_OK; - if (nsnull == mDocumentBase) { + if (mDocumentBase.IsEmpty()) { if (nsnull == mContext) { *result = nsnull; return NS_ERROR_FAILURE; @@ -2591,10 +2584,10 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetDocumentBase(const char* *result) nsCOMPtr docURL; doc->GetBaseURL(*getter_AddRefs(docURL)); // should return base + doc url - rv = docURL->GetSpec(&mDocumentBase); + rv = docURL->GetSpec(mDocumentBase); } if (rv == NS_OK) - *result = mDocumentBase; + *result = ToNewCString(mDocumentBase); return rv; } diff --git a/mozilla/layout/html/base/src/nsPresShell.cpp b/mozilla/layout/html/base/src/nsPresShell.cpp index 0f6c346436b..4b2fde07a43 100644 --- a/mozilla/layout/html/base/src/nsPresShell.cpp +++ b/mozilla/layout/html/base/src/nsPresShell.cpp @@ -2583,10 +2583,9 @@ PresShell::InitialReflow(nscoord aWidth, nscoord aHeight) if (mDocument) { mDocument->GetDocumentURL(getter_AddRefs(uri)); if (uri) { - char* url = nsnull; - uri->GetSpec(&url); - printf("*** PresShell::InitialReflow (this=%p, url='%s')\n", (void*)this, url); - Recycle(url); + nsCAutoString url; + uri->GetSpec(url); + printf("*** PresShell::InitialReflow (this=%p, url='%s')\n", (void*)this, url.get()); } } } @@ -4281,14 +4280,14 @@ NS_IMETHODIMP PresShell::DoCopyLinkLocation(nsIDOMNode* aNode) NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr baseURI; - rv = ios->NewURI(NS_ConvertUCS2toUTF8(base).get(),nsnull,getter_AddRefs(baseURI)); + rv = ios->NewURI(NS_ConvertUCS2toUTF8(base),nsnull,nsnull,getter_AddRefs(baseURI)); NS_ENSURE_SUCCESS(rv, rv); - nsXPIDLCString spec; - rv = baseURI->Resolve(NS_ConvertUCS2toUTF8(anchorText).get(),getter_Copies(spec)); + nsCAutoString spec; + rv = baseURI->Resolve(NS_ConvertUCS2toUTF8(anchorText),spec); NS_ENSURE_SUCCESS(rv, rv); - anchorText.AssignWithConversion(spec.get()); + anchorText = NS_ConvertUTF8toUCS2(spec); } } } @@ -7242,18 +7241,17 @@ NS_IMETHODIMP PresShell::DumpReflows() { if (mReflowCountMgr) { - char * uriStr = nsnull; + nsCAutoString uriStr; if (mDocument) { nsCOMPtr uri; mDocument->GetDocumentURL(getter_AddRefs(uri)); if (uri) { - uri->GetPath(&uriStr); + uri->GetPath(uriStr); } } - mReflowCountMgr->DisplayTotals(uriStr); - mReflowCountMgr->DisplayHTMLTotals(uriStr); + mReflowCountMgr->DisplayTotals(uriStr.get()); + mReflowCountMgr->DisplayHTMLTotals(uriStr.get()); mReflowCountMgr->DisplayDiffsInTotals("Differences"); - if (uriStr) nsCRT::free(uriStr); } return NS_OK; } diff --git a/mozilla/layout/html/document/src/nsFrameFrame.cpp b/mozilla/layout/html/document/src/nsFrameFrame.cpp index ef8957ad8ee..27541d741a1 100644 --- a/mozilla/layout/html/document/src/nsFrameFrame.cpp +++ b/mozilla/layout/html/document/src/nsFrameFrame.cpp @@ -1165,7 +1165,7 @@ nsHTMLFrameInnerFrame::DoLoadURL(nsIPresContext* aPresContext) NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), absURL, nsnull); + NS_NewURI(getter_AddRefs(uri), absURL); // Check for security nsCOMPtr secMan = @@ -1209,7 +1209,7 @@ nsHTMLFrameInnerFrame::DoLoadURL(nsIPresContext* aPresContext) // Check if we are allowed to load absURL nsCOMPtr newURI; - rv = NS_NewURI(getter_AddRefs(newURI), absURL, baseURI); + rv = NS_NewURI(getter_AddRefs(newURI), absURL, nsnull, baseURI); NS_ENSURE_SUCCESS(rv, rv); rv = secMan->CheckLoadURI(referrer, newURI, nsIScriptSecurityManager::STANDARD); if (NS_FAILED(rv)) diff --git a/mozilla/layout/html/forms/src/nsIsIndexFrame.cpp b/mozilla/layout/html/forms/src/nsIsIndexFrame.cpp index 08d617d5d8d..9e72eae5fe4 100644 --- a/mozilla/layout/html/forms/src/nsIsIndexFrame.cpp +++ b/mozilla/layout/html/forms/src/nsIsIndexFrame.cpp @@ -444,11 +444,10 @@ nsIsIndexFrame::OnSubmit(nsIPresContext* aPresContext) // Necko's MakeAbsoluteURI doesn't reuse the baseURL's rel path if it is // passed a zero length rel path. - nsXPIDLCString relPath; - docURL->GetSpec(getter_Copies(relPath)); - NS_ASSERTION(relPath, "Rel path couldn't be formed in form submit!\n"); - if (relPath) { - href.AppendWithConversion(relPath); + nsCAutoString relPath; + docURL->GetSpec(relPath); + if (!relPath.IsEmpty()) { + href = NS_ConvertUTF8toUCS2(relPath); // If re-using the same URL, chop off old query string (bug 25330) PRInt32 queryStart = href.FindChar('?'); @@ -456,6 +455,7 @@ nsIsIndexFrame::OnSubmit(nsIPresContext* aPresContext) href.Truncate(queryStart); } } else { + NS_ERROR("Rel path couldn't be formed in form submit!\n"); return NS_ERROR_OUT_OF_MEMORY; } @@ -464,7 +464,7 @@ nsIsIndexFrame::OnSubmit(nsIPresContext* aPresContext) nsCOMPtr actionURL; nsXPIDLCString scheme; PRBool isJSURL = PR_FALSE; - if (NS_SUCCEEDED(result = NS_NewURI(getter_AddRefs(actionURL), href, docURL))) { + if (NS_SUCCEEDED(result = NS_NewURI(getter_AddRefs(actionURL), href, nsnull, docURL))) { result = actionURL->SchemeIs("javascript", &isJSURL); } // Append the URI encoded variable/value pairs for GET's diff --git a/mozilla/layout/style/nsCSSLoader.cpp b/mozilla/layout/style/nsCSSLoader.cpp index 38587d92e89..3d21b03a261 100644 --- a/mozilla/layout/style/nsCSSLoader.cpp +++ b/mozilla/layout/style/nsCSSLoader.cpp @@ -73,39 +73,28 @@ MOZ_DECL_CTOR_COUNTER(URLKey) class URLKey: public nsHashKey { public: URLKey(nsIURI* aURL) - : nsHashKey(), - mURL(aURL), - mSpec(nsnull) + : mURL(aURL) { MOZ_COUNT_CTOR(URLKey); - NS_ADDREF(mURL); mHashValue = 0; - mURL->GetSpec((char **)&mSpec); - if (mSpec) { - mHashValue = nsCRT::HashCode(mSpec); + mURL->GetSpec(mSpec); + if (!mSpec.IsEmpty()) { + mHashValue = nsCRT::HashCode(mSpec.get()); } } URLKey(const URLKey& aKey) - : nsHashKey(), - mURL(aKey.mURL), + : mURL(aKey.mURL), mHashValue(aKey.mHashValue), - mSpec(nsnull) + mSpec(aKey.mSpec) { MOZ_COUNT_CTOR(URLKey); - NS_ADDREF(mURL); - if (aKey.mSpec) - mSpec = nsCRT::strdup(aKey.mSpec); } virtual ~URLKey(void) { MOZ_COUNT_DTOR(URLKey); - NS_RELEASE(mURL); - if (mSpec) - nsCRT::free((char *)mSpec); - mSpec = nsnull; } virtual PRUint32 HashCode(void) const @@ -121,7 +110,7 @@ public: nsresult result = mURL->Equals(key->mURL, &equals); return (NS_SUCCEEDED(result) && equals); #else - return (nsCRT::strcasecmp(mSpec, key->mSpec) == 0); + return (nsCRT::strcasecmp(mSpec.get(), key->mSpec.get()) == 0); #endif } @@ -130,9 +119,9 @@ public: return new URLKey(*this); } - nsIURI* mURL; - PRUint32 mHashValue; - const char* mSpec; + nsCOMPtr mURL; + PRUint32 mHashValue; + nsSharableCString mSpec; }; class SheetLoadData : public nsIStreamLoaderObserver @@ -722,8 +711,8 @@ SheetLoadData::OnStreamComplete(nsIStreamLoader* aLoader, * being fixed */ - nsXPIDLCString uriStr; - mURL->GetSpec(getter_Copies(uriStr)); + nsCAutoString uriStr; + mURL->GetSpec(uriStr); nsCAutoString errorMessage; errorMessage = NS_LITERAL_CSTRING("Decoding sheet from ") + uriStr + @@ -1000,10 +989,10 @@ CSSLoaderImpl::DidLoadStyle(nsIStreamLoader* aLoader, #ifdef DEBUG if (mDocument && NS_FAILED(aStatus)) { // still have doc, must have failed // Dump error message to console. - nsXPIDLCString url; - aLoadData->mURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + aLoadData->mURL->GetSpec(url); nsCAutoString errorMessage(NS_LITERAL_CSTRING("CSSLoaderImpl::DidLoadStyle: Load of URL '") + - nsDependentCString(url) + + url + NS_LITERAL_CSTRING("' failed. Error code: ")); errorMessage.AppendInt(NS_ERROR_GET_CODE(aStatus)); NS_WARNING(errorMessage.get()); @@ -1286,10 +1275,10 @@ CSSLoaderImpl::LoadSheet(URLKey& aKey, SheetLoadData* aData) #ifdef DEBUG else { // Dump an error message to the console - nsXPIDLCString url; - aKey.mURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + aKey.mURL->GetSpec(url); nsCAutoString errorMessage(NS_LITERAL_CSTRING("CSSLoaderImpl::LoadSheet: Load of URL '") + - nsDependentCString(url) + + url + NS_LITERAL_CSTRING("' failed. Error code: ")); errorMessage.AppendInt(NS_ERROR_GET_CODE(result)); NS_WARNING(errorMessage.get()); @@ -1635,8 +1624,8 @@ CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, else { // Dump an error message to the console PRBool ignoreError = PR_FALSE; - nsXPIDLCString url; - aURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + aURL->GetSpec(url); // Ignore userChrome.css and userContent.css failures #define USERCHROMECSS "userChrome.css" #define USERCONTENTCSS "userContent.css" @@ -1651,7 +1640,7 @@ CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, if (!ignoreError) { nsCAutoString errorMessage(NS_LITERAL_CSTRING("CSSLoaderImpl::LoadAgentSheet: Load of URL '") + - nsDependentCString(url) + + url + NS_LITERAL_CSTRING("' failed. Error code: ")); errorMessage.AppendInt(NS_ERROR_GET_CODE(result)); NS_WARNING(errorMessage.get()); diff --git a/mozilla/layout/style/nsCSSParser.cpp b/mozilla/layout/style/nsCSSParser.cpp index 32c31deb183..0508806082a 100644 --- a/mozilla/layout/style/nsCSSParser.cpp +++ b/mozilla/layout/style/nsCSSParser.cpp @@ -1144,11 +1144,8 @@ PRBool CSSParserImpl::ProcessImport(PRInt32& aErrorCode, const nsString& aURLSpe (*aAppendFunc)(rule, aData); if (mChildLoader) { - // XXX probably need a way to encode unicode junk for the part of - // the url that follows a "?" nsCOMPtr url; - // XXX need to have nsILoadGroup passed in here - aErrorCode = NS_NewURI(getter_AddRefs(url), aURLSpec, mURL/*, group*/); + aErrorCode = NS_NewURI(getter_AddRefs(url), aURLSpec, nsnull, mURL); if (NS_FAILED(aErrorCode)) { // import url is bad diff --git a/mozilla/layout/style/nsCSSStyleSheet.cpp b/mozilla/layout/style/nsCSSStyleSheet.cpp index 952aad603de..a5fe0885193 100644 --- a/mozilla/layout/style/nsCSSStyleSheet.cpp +++ b/mozilla/layout/style/nsCSSStyleSheet.cpp @@ -2485,11 +2485,10 @@ void CSSStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const } fputs("CSS Style Sheet: ", out); - char* urlSpec = nsnull; - nsresult rv = mInner->mURL->GetSpec(&urlSpec); - if (NS_SUCCEEDED(rv) && urlSpec) { - fputs(urlSpec, out); - nsCRT::free(urlSpec); + nsCAutoString urlSpec; + nsresult rv = mInner->mURL->GetSpec(urlSpec); + if (NS_SUCCEEDED(rv) && !urlSpec.IsEmpty()) { + fputs(urlSpec.get(), out); } if (mMedia) { @@ -2677,12 +2676,9 @@ NS_IMETHODIMP CSSStyleSheetImpl::GetHref(nsAWritableString& aHref) { if (mInner && mInner->mURL) { - char* str = nsnull; - mInner->mURL->GetSpec(&str); - aHref.Assign(NS_ConvertASCIItoUCS2(str)); - if (str) { - nsCRT::free(str); - } + nsCAutoString str; + mInner->mURL->GetSpec(str); + aHref.Assign(NS_ConvertUTF8toUCS2(str)); } else { aHref.Truncate(); diff --git a/mozilla/layout/style/nsHTMLCSSStyleSheet.cpp b/mozilla/layout/style/nsHTMLCSSStyleSheet.cpp index 902e079b39e..21a89c69259 100644 --- a/mozilla/layout/style/nsHTMLCSSStyleSheet.cpp +++ b/mozilla/layout/style/nsHTMLCSSStyleSheet.cpp @@ -531,11 +531,10 @@ void HTMLCSSStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); fputs("HTML CSS Style Sheet: ", out); - char* urlSpec = nsnull; - mURL->GetSpec(&urlSpec); - if (urlSpec) { - fputs(urlSpec, out); - nsCRT::free(urlSpec); + nsCAutoString urlSpec; + mURL->GetSpec(urlSpec); + if (!urlSpec.IsEmpty()) { + fputs(urlSpec.get(), out); } fputs("\n", out); } diff --git a/mozilla/layout/style/nsHTMLStyleSheet.cpp b/mozilla/layout/style/nsHTMLStyleSheet.cpp index 1ec64eabe97..0f3b584f98e 100644 --- a/mozilla/layout/style/nsHTMLStyleSheet.cpp +++ b/mozilla/layout/style/nsHTMLStyleSheet.cpp @@ -1523,11 +1523,10 @@ void HTMLStyleSheetImpl::List(FILE* out, PRInt32 aIndent) const for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out); fputs("HTML Style Sheet: ", out); - char* urlSpec = nsnull; - mURL->GetSpec(&urlSpec); - if (urlSpec) { - fputs(urlSpec, out); - nsCRT::free(urlSpec); + nsCAutoString urlSpec; + mURL->GetSpec(urlSpec); + if (!urlSpec.IsEmpty()) { + fputs(urlSpec.get(), out); } fputs("\n", out); } diff --git a/mozilla/layout/style/nsStyleSet.cpp b/mozilla/layout/style/nsStyleSet.cpp index e3efe7dcb71..ca9dc575c8b 100644 --- a/mozilla/layout/style/nsStyleSet.cpp +++ b/mozilla/layout/style/nsStyleSet.cpp @@ -363,8 +363,8 @@ StyleSetImpl::StyleSetImpl() NS_INIT_REFCNT(); if (gInstances++ == 0) { - const char kQuirk_href[] = "resource:/res/quirk.css"; - NS_NewURI (&gQuirkURI, kQuirk_href); + static const char kQuirk_href[] = "resource:/res/quirk.css"; + NS_NewURI (&gQuirkURI, NS_LITERAL_CSTRING(kQuirk_href)); NS_ASSERTION (gQuirkURI != 0, "Cannot allocate nsStyleSetImpl::gQuirkURI"); } } diff --git a/mozilla/layout/xul/base/src/nsImageBoxFrame.cpp b/mozilla/layout/xul/base/src/nsImageBoxFrame.cpp index 0966f855367..d4a1218747f 100644 --- a/mozilla/layout/xul/base/src/nsImageBoxFrame.cpp +++ b/mozilla/layout/xul/base/src/nsImageBoxFrame.cpp @@ -427,7 +427,7 @@ nsImageBoxFrame::UpdateImage(nsIPresContext* aPresContext, PRBool& aResize) nsCOMPtr baseURI; GetBaseURI(getter_AddRefs(baseURI)); nsCOMPtr srcURI; - NS_NewURI(getter_AddRefs(srcURI), mSrc, baseURI); + NS_NewURI(getter_AddRefs(srcURI), mSrc, nsnull, baseURI); if (mImageRequest) { nsCOMPtr requestURI; diff --git a/mozilla/layout/xul/base/src/outliner/src/nsOutlinerBodyFrame.cpp b/mozilla/layout/xul/base/src/outliner/src/nsOutlinerBodyFrame.cpp index 9dad15b8d40..c34c6ca54b1 100644 --- a/mozilla/layout/xul/base/src/outliner/src/nsOutlinerBodyFrame.cpp +++ b/mozilla/layout/xul/base/src/outliner/src/nsOutlinerBodyFrame.cpp @@ -1668,7 +1668,7 @@ nsOutlinerBodyFrame::GetImage(PRInt32 aRowIndex, const PRUnichar* aColID, doc->GetBaseURL(*getter_AddRefs(baseURI)); nsCOMPtr srcURI; - NS_NewURI(getter_AddRefs(srcURI), myList->mListStyleImage, baseURI); + NS_NewURI(getter_AddRefs(srcURI), myList->mListStyleImage, nsnull, baseURI); nsCOMPtr imageRequest; nsresult rv; diff --git a/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp b/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp index 9dad15b8d40..c34c6ca54b1 100644 --- a/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp +++ b/mozilla/layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp @@ -1668,7 +1668,7 @@ nsOutlinerBodyFrame::GetImage(PRInt32 aRowIndex, const PRUnichar* aColID, doc->GetBaseURL(*getter_AddRefs(baseURI)); nsCOMPtr srcURI; - NS_NewURI(getter_AddRefs(srcURI), myList->mListStyleImage, baseURI); + NS_NewURI(getter_AddRefs(srcURI), myList->mListStyleImage, nsnull, baseURI); nsCOMPtr imageRequest; nsresult rv; diff --git a/mozilla/mailnews/absync/src/nsAbSyncPostEngine.cpp b/mozilla/mailnews/absync/src/nsAbSyncPostEngine.cpp index 80fbf3279ed..62ab6360844 100644 --- a/mozilla/mailnews/absync/src/nsAbSyncPostEngine.cpp +++ b/mozilla/mailnews/absync/src/nsAbSyncPostEngine.cpp @@ -686,7 +686,7 @@ nsEngineNewURI(nsIURI** aInstancePtrResult, const char *aSpec, nsIURI *aBase) if (NS_FAILED(res)) return NS_ERROR_FACTORY_NOT_REGISTERED; - return pService->NewURI(aSpec, aBase, aInstancePtrResult); + return pService->NewURI(nsDependentCString(aSpec), nsnull, aBase, aInstancePtrResult); } nsresult @@ -698,7 +698,7 @@ nsAbSyncPostEngine::FireURLRequest(nsIURI *aURL, const char *postData) if (!postData) return NS_ERROR_INVALID_ARG; - NS_ENSURE_SUCCESS(NS_OpenURI(getter_AddRefs(mChannel), aURL, nsnull), NS_ERROR_FAILURE); + NS_ENSURE_SUCCESS(NS_NewChannel(getter_AddRefs(mChannel), aURL, nsnull), NS_ERROR_FAILURE); // Tag the post stream onto the channel...but never seemed to work...so putting it // directly on the URL spec diff --git a/mozilla/mailnews/addrbook/src/nsAbDirFactoryService.cpp b/mozilla/mailnews/addrbook/src/nsAbDirFactoryService.cpp index 4e40ddfca3a..c4077279b3c 100644 --- a/mozilla/mailnews/addrbook/src/nsAbDirFactoryService.cpp +++ b/mozilla/mailnews/addrbook/src/nsAbDirFactoryService.cpp @@ -43,6 +43,7 @@ #include "nsIIOService.h" #include "nsNetCID.h" #include "nsMemory.h" +#include "nsString.h" #include "nsCRT.h" #include "plstr.h" @@ -79,10 +80,8 @@ NS_IMETHODIMP nsAbDirFactoryService::GetDirFactory(const char* aURI, NS_ENSURE_SUCCESS(rv,rv); // Extract the scheme - // Use only the start and end for efficiency - PRUint32 start; - PRUint32 end; - rv = nsService->ExtractScheme (aURI, &start, &end, nsnull); + nsCAutoString scheme; + rv = nsService->ExtractScheme (nsDependentCString(aURI), scheme); NS_ENSURE_SUCCESS(rv,rv); // TODO @@ -92,7 +91,7 @@ NS_IMETHODIMP nsAbDirFactoryService::GetDirFactory(const char* aURI, static const char kAbDirFactoryContractIDPrefix[] = NS_AB_DIRECTORY_FACTORY_CONTRACTID_PREFIX; - PRInt32 pos = end - start - 1; + PRInt32 pos = scheme.Length(); PRInt32 len = pos + sizeof(kAbDirFactoryContractIDPrefix) - 1; // Safely convert to a C-string for the XPCOM APIs diff --git a/mozilla/mailnews/addrbook/src/nsAbDirectoryRDFResource.cpp b/mozilla/mailnews/addrbook/src/nsAbDirectoryRDFResource.cpp index 77905b12b72..3bc4560b730 100644 --- a/mozilla/mailnews/addrbook/src/nsAbDirectoryRDFResource.cpp +++ b/mozilla/mailnews/addrbook/src/nsAbDirectoryRDFResource.cpp @@ -73,7 +73,7 @@ NS_IMETHODIMP nsAbDirectoryRDFResource::Init(const char* aURI) nsCOMPtr uri = do_CreateInstance (NS_STANDARDURL_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); - rv = uri->SetSpec(aURI); + rv = uri->SetSpec(nsDependentCString(aURI)); NS_ENSURE_SUCCESS(rv, rv); mIsValidURI = PR_TRUE; @@ -81,17 +81,17 @@ NS_IMETHODIMP nsAbDirectoryRDFResource::Init(const char* aURI) nsCOMPtr url = do_QueryInterface(uri); NS_ENSURE_SUCCESS(rv, rv); - nsXPIDLCString queryString; - rv = url->GetEscapedQuery (getter_Copies(queryString)); + nsCAutoString queryString; + rv = url->GetQuery (queryString); - nsXPIDLCString path; - rv = url->GetPath (getter_Copies(path)); + nsCAutoString path; + rv = url->GetPath (path); mPath = path; PRUint32 queryStringLength; - if (queryString.get () && (queryStringLength = strlen (queryString))) + if (queryString.get () && (queryStringLength = queryString.Length ())) { - int pathLength = strlen (path) - queryStringLength - 1; + int pathLength = path.Length () - queryStringLength - 1; mPath.Truncate (pathLength); mURINoQuery.Truncate (mURINoQuery.Length () - queryStringLength - 1); diff --git a/mozilla/mailnews/addrbook/src/nsAbLDAPDirectory.cpp b/mozilla/mailnews/addrbook/src/nsAbLDAPDirectory.cpp index 6d2f912d870..787b966f727 100644 --- a/mozilla/mailnews/addrbook/src/nsAbLDAPDirectory.cpp +++ b/mozilla/mailnews/addrbook/src/nsAbLDAPDirectory.cpp @@ -120,7 +120,7 @@ nsresult nsAbLDAPDirectory::InitiateConnection () rv = pref->CopyCharPref(prefName.get(), getter_Copies(ldapURL)); NS_ENSURE_SUCCESS(rv,rv); - rv = mURL->SetSpec(ldapURL.get()); + rv = mURL->SetSpec(ldapURL); NS_ENSURE_SUCCESS(rv, rv); mConnection = do_CreateInstance(NS_LDAPCONNECTION_CONTRACTID, &rv); diff --git a/mozilla/mailnews/addrbook/src/nsAbLDAPDirectoryQuery.cpp b/mozilla/mailnews/addrbook/src/nsAbLDAPDirectoryQuery.cpp index cacff38fd49..22b88aada9c 100644 --- a/mozilla/mailnews/addrbook/src/nsAbLDAPDirectoryQuery.cpp +++ b/mozilla/mailnews/addrbook/src/nsAbLDAPDirectoryQuery.cpp @@ -524,8 +524,8 @@ NS_IMETHODIMP nsAbLDAPDirectoryQuery::DoQuery(nsIAbDirectoryQueryArguments* argu rv = GetLDAPURL (getter_AddRefs (directoryUrl)); NS_ENSURE_SUCCESS(rv, rv); - nsXPIDLCString host; - rv = directoryUrl->GetHost(getter_Copies (host)); + nsCAutoString host; + rv = directoryUrl->GetAsciiHost(host); NS_ENSURE_SUCCESS(rv, rv); PRInt32 port; @@ -553,7 +553,7 @@ NS_IMETHODIMP nsAbLDAPDirectoryQuery::DoQuery(nsIAbDirectoryQueryArguments* argu url = do_CreateInstance(NS_LDAPURL_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); - rv = url->SetSpec(ldapSearchUrlString.get ()); + rv = url->SetSpec(ldapSearchUrlString); NS_ENSURE_SUCCESS(rv, rv); @@ -600,7 +600,7 @@ NS_IMETHODIMP nsAbLDAPDirectoryQuery::DoQuery(nsIAbDirectoryQueryArguments* argu // Now lets initialize the LDAP connection properly. We'll kick // off the bind operation in the callback function, |OnLDAPInit()|. - rv = ldapConnection->Init(host, port, NS_ConvertASCIItoUCS2(dn).get(), + rv = ldapConnection->Init(host.get(), port, NS_ConvertASCIItoUCS2(dn).get(), messageListener); NS_ENSURE_SUCCESS(rv, rv); diff --git a/mozilla/mailnews/addrbook/src/nsAbMDBDirectory.cpp b/mozilla/mailnews/addrbook/src/nsAbMDBDirectory.cpp index c6111822e84..07d5d883cb3 100644 --- a/mozilla/mailnews/addrbook/src/nsAbMDBDirectory.cpp +++ b/mozilla/mailnews/addrbook/src/nsAbMDBDirectory.cpp @@ -259,7 +259,7 @@ NS_IMETHODIMP nsAbMDBDirectory::Init(const char* aURI) nsCOMPtr uri = do_CreateInstance (NS_STANDARDURL_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); - rv = uri->SetSpec(aURI); + rv = uri->SetSpec(nsDependentCString(aURI)); NS_ENSURE_SUCCESS(rv, rv); mIsValidURI = PR_TRUE; @@ -267,11 +267,11 @@ NS_IMETHODIMP nsAbMDBDirectory::Init(const char* aURI) nsCOMPtr url = do_QueryInterface(uri); NS_ENSURE_SUCCESS(rv, rv); - nsXPIDLCString queryString; - rv = url->GetEscapedQuery (getter_Copies(queryString)); + nsCAutoString queryString; + rv = url->GetQuery (queryString); - nsXPIDLCString path; - rv = url->GetPath (getter_Copies(path)); + nsCAutoString path; + rv = url->GetPath (path); mPath = path; if (!queryString.IsEmpty()) diff --git a/mozilla/mailnews/addrbook/src/nsAddbookProtocolHandler.cpp b/mozilla/mailnews/addrbook/src/nsAddbookProtocolHandler.cpp index 71f117be4e4..66fa9d68f59 100644 --- a/mozilla/mailnews/addrbook/src/nsAddbookProtocolHandler.cpp +++ b/mozilla/mailnews/addrbook/src/nsAddbookProtocolHandler.cpp @@ -75,14 +75,10 @@ nsAddbookProtocolHandler::~nsAddbookProtocolHandler() NS_IMPL_ISUPPORTS1(nsAddbookProtocolHandler, nsIProtocolHandler); -NS_IMETHODIMP nsAddbookProtocolHandler::GetScheme(char * *aScheme) +NS_IMETHODIMP nsAddbookProtocolHandler::GetScheme(nsACString &aScheme) { - nsresult rv = NS_OK; - if (aScheme) - *aScheme = nsCRT::strdup("addbook"); - else - rv = NS_ERROR_NULL_POINTER; - return rv; + aScheme = "addbook"; + return NS_OK; } NS_IMETHODIMP nsAddbookProtocolHandler::GetDefaultPort(PRInt32 *aDefaultPort) @@ -96,7 +92,10 @@ NS_IMETHODIMP nsAddbookProtocolHandler::GetProtocolFlags(PRUint32 *aUritype) return NS_OK; } -NS_IMETHODIMP nsAddbookProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **_retval) +NS_IMETHODIMP nsAddbookProtocolHandler::NewURI(const nsACString &aSpec, + const char *aOriginCharset, // ignored + nsIURI *aBaseURI, + nsIURI **_retval) { nsresult rv = NS_OK; nsCOMPtr addbookUrl = do_CreateInstance(NS_ADDBOOKURL_CONTRACTID, &rv); @@ -152,13 +151,13 @@ nsAddbookProtocolHandler::NewChannel(nsIURI *aURI, nsIChannel **_retval) NS_ENSURE_SUCCESS(rv,rv); if (mAddbookOperation == nsIAddbookUrlOperation::InvalidUrl) { - nsString errorString; + nsAutoString errorString; errorString.Append(NS_LITERAL_STRING("Unsupported format/operation requested for ").get()); - nsXPIDLCString spec; - rv = aURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = aURI->GetSpec(spec); NS_ENSURE_SUCCESS(rv,rv); - errorString.AppendWithConversion(spec.get()); + errorString.Append(NS_ConvertUTF8toUCS2(spec)); rv = GenerateXMLOutputChannel(errorString, addbookUrl, aURI, _retval); NS_ENSURE_SUCCESS(rv,rv); return NS_OK; @@ -168,10 +167,10 @@ nsAddbookProtocolHandler::NewChannel(nsIURI *aURI, nsIChannel **_retval) rv = GeneratePrintOutput(addbookUrl, output); if (NS_FAILED(rv)) { output.Assign(NS_LITERAL_STRING("failed to print. url=").get()); - nsXPIDLCString spec; - rv = aURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = aURI->GetSpec(spec); NS_ENSURE_SUCCESS(rv,rv); - output.AppendWithConversion(spec.get()); + output.Append(NS_ConvertUTF8toUCS2(spec)); } rv = GenerateXMLOutputChannel(output, addbookUrl, aURI, _retval); @@ -185,8 +184,8 @@ nsAddbookProtocolHandler::GeneratePrintOutput(nsIAddbookUrl *addbookUrl, { NS_ENSURE_ARG_POINTER(addbookUrl); - nsXPIDLCString pathStr; - nsresult rv = addbookUrl->GetPath(getter_Copies(pathStr)); + nsCAutoString uri; + nsresult rv = addbookUrl->GetPath(uri); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr rdfService = do_GetService("@mozilla.org/rdf/rdf-service;1", &rv); @@ -196,8 +195,6 @@ nsAddbookProtocolHandler::GeneratePrintOutput(nsIAddbookUrl *addbookUrl, "//moz-abmdbdirectory/abook.mab?action=print" into "moz-abmdbdirectory://abook.mab" */ - nsCAutoString uri; - uri.Assign(pathStr.get()); /* step 1: turn "//moz-abmdbdirectory/abook.mab?action=print" diff --git a/mozilla/mailnews/addrbook/src/nsAddbookUrl.cpp b/mozilla/mailnews/addrbook/src/nsAddbookUrl.cpp index 765e7baa94e..db51301ac44 100644 --- a/mozilla/mailnews/addrbook/src/nsAddbookUrl.cpp +++ b/mozilla/mailnews/addrbook/src/nsAddbookUrl.cpp @@ -62,7 +62,7 @@ nsAddbookUrl::~nsAddbookUrl() NS_IMPL_ISUPPORTS2(nsAddbookUrl, nsIAddbookUrl, nsIURI) NS_IMETHODIMP -nsAddbookUrl::SetSpec(const char * aSpec) +nsAddbookUrl::SetSpec(const nsACString &aSpec) { m_baseURL->SetSpec(aSpec); return ParseUrl(); @@ -72,11 +72,11 @@ nsresult nsAddbookUrl::ParseUrl() { nsresult rv; - nsXPIDLCString pathStr; - rv = m_baseURL->GetPath(getter_Copies(pathStr)); + nsCAutoString pathStr; + rv = m_baseURL->GetPath(pathStr); NS_ENSURE_SUCCESS(rv,rv); - if (PL_strstr(pathStr.get(), "?action=print")) + if (strstr(pathStr.get(), "?action=print")) mOperationType = nsIAddbookUrlOperation::PrintAddressBook; else mOperationType = nsIAddbookUrlOperation::InvalidUrl; @@ -88,67 +88,72 @@ nsresult nsAddbookUrl::ParseUrl() //////////////////////////////////////////////////////////////////////////////////// -NS_IMETHODIMP nsAddbookUrl::GetSpec(char * *aSpec) +NS_IMETHODIMP nsAddbookUrl::GetSpec(nsACString &aSpec) { return m_baseURL->GetSpec(aSpec); } -NS_IMETHODIMP nsAddbookUrl::GetPrePath(char * *aPrePath) +NS_IMETHODIMP nsAddbookUrl::GetPrePath(nsACString &aPrePath) { return m_baseURL->GetPrePath(aPrePath); } -NS_IMETHODIMP nsAddbookUrl::SetPrePath(const char * aPrePath) -{ - return m_baseURL->SetPrePath(aPrePath); -} - -NS_IMETHODIMP nsAddbookUrl::GetScheme(char * *aScheme) +NS_IMETHODIMP nsAddbookUrl::GetScheme(nsACString &aScheme) { return m_baseURL->GetScheme(aScheme); } -NS_IMETHODIMP nsAddbookUrl::SetScheme(const char * aScheme) +NS_IMETHODIMP nsAddbookUrl::SetScheme(const nsACString &aScheme) { return m_baseURL->SetScheme(aScheme); } -NS_IMETHODIMP nsAddbookUrl::GetPreHost(char * *aPreHost) +NS_IMETHODIMP nsAddbookUrl::GetUserPass(nsACString &aUserPass) { - return m_baseURL->GetPreHost(aPreHost); + return m_baseURL->GetUserPass(aUserPass); } -NS_IMETHODIMP nsAddbookUrl::SetPreHost(const char * aPreHost) +NS_IMETHODIMP nsAddbookUrl::SetUserPass(const nsACString &aUserPass) { - return m_baseURL->SetPreHost(aPreHost); + return m_baseURL->SetUserPass(aUserPass); } -NS_IMETHODIMP nsAddbookUrl::GetUsername(char * *aUsername) +NS_IMETHODIMP nsAddbookUrl::GetUsername(nsACString &aUsername) { return m_baseURL->GetUsername(aUsername); } -NS_IMETHODIMP nsAddbookUrl::SetUsername(const char * aUsername) +NS_IMETHODIMP nsAddbookUrl::SetUsername(const nsACString &aUsername) { return m_baseURL->SetUsername(aUsername); } -NS_IMETHODIMP nsAddbookUrl::GetPassword(char * *aPassword) +NS_IMETHODIMP nsAddbookUrl::GetPassword(nsACString &aPassword) { return m_baseURL->GetPassword(aPassword); } -NS_IMETHODIMP nsAddbookUrl::SetPassword(const char * aPassword) +NS_IMETHODIMP nsAddbookUrl::SetPassword(const nsACString &aPassword) { return m_baseURL->SetPassword(aPassword); } -NS_IMETHODIMP nsAddbookUrl::GetHost(char * *aHost) +NS_IMETHODIMP nsAddbookUrl::GetHostPort(nsACString &aHostPort) +{ + return m_baseURL->GetHostPort(aHostPort); +} + +NS_IMETHODIMP nsAddbookUrl::SetHostPort(const nsACString &aHostPort) +{ + return m_baseURL->SetHostPort(aHostPort); +} + +NS_IMETHODIMP nsAddbookUrl::GetHost(nsACString &aHost) { return m_baseURL->GetHost(aHost); } -NS_IMETHODIMP nsAddbookUrl::SetHost(const char * aHost) +NS_IMETHODIMP nsAddbookUrl::SetHost(const nsACString &aHost) { return m_baseURL->SetHost(aHost); } @@ -163,16 +168,31 @@ NS_IMETHODIMP nsAddbookUrl::SetPort(PRInt32 aPort) return m_baseURL->SetPort(aPort); } -NS_IMETHODIMP nsAddbookUrl::GetPath(char * *aPath) +NS_IMETHODIMP nsAddbookUrl::GetPath(nsACString &aPath) { return m_baseURL->GetPath(aPath); } -NS_IMETHODIMP nsAddbookUrl::SetPath(const char * aPath) +NS_IMETHODIMP nsAddbookUrl::SetPath(const nsACString &aPath) { return m_baseURL->SetPath(aPath); } +NS_IMETHODIMP nsAddbookUrl::GetAsciiHost(nsACString &aHostA) +{ + return m_baseURL->GetAsciiHost(aHostA); +} + +NS_IMETHODIMP nsAddbookUrl::GetAsciiSpec(nsACString &aSpecA) +{ + return m_baseURL->GetAsciiSpec(aSpecA); +} + +NS_IMETHODIMP nsAddbookUrl::GetOriginCharset(nsACString &aOriginCharset) +{ + return m_baseURL->GetOriginCharset(aOriginCharset); +} + NS_IMETHODIMP nsAddbookUrl::SchemeIs(const char *aScheme, PRBool *_retval) { return m_baseURL->SchemeIs(aScheme, _retval); @@ -188,7 +208,7 @@ NS_IMETHODIMP nsAddbookUrl::Clone(nsIURI **_retval) return m_baseURL->Clone(_retval); } -NS_IMETHODIMP nsAddbookUrl::Resolve(const char *relativePath, char **result) +NS_IMETHODIMP nsAddbookUrl::Resolve(const nsACString &relativePath, nsACString &result) { return m_baseURL->Resolve(relativePath, result); } diff --git a/mozilla/mailnews/base/src/nsMessengerBootstrap.cpp b/mozilla/mailnews/base/src/nsMessengerBootstrap.cpp index 1ccaee95750..6ffa390adf9 100644 --- a/mozilla/mailnews/base/src/nsMessengerBootstrap.cpp +++ b/mozilla/mailnews/base/src/nsMessengerBootstrap.cpp @@ -126,7 +126,6 @@ NS_IMETHODIMP nsMessengerBootstrap::OpenMessengerWindowWithUri(const char *windo // we need to use the "mailnews.reuse_thread_window2" pref // to determine if we should open a new window, or use an existing one. - return openWindow(NS_ConvertASCIItoUCS2(chromeurl).get(), uri ? - NS_ConvertASCIItoUCS2(uri).get() : nsnull, nsMsgKey_None); - + return openWindow(NS_ConvertUTF8toUCS2(chromeurl).get(), uri ? + NS_ConvertUTF8toUCS2(uri).get() : nsnull, nsMsgKey_None); } diff --git a/mozilla/mailnews/base/src/nsMessengerMigrator.cpp b/mozilla/mailnews/base/src/nsMessengerMigrator.cpp index e26ab0a93d3..8f83d2ac19d 100644 --- a/mozilla/mailnews/base/src/nsMessengerMigrator.cpp +++ b/mozilla/mailnews/base/src/nsMessengerMigrator.cpp @@ -939,19 +939,19 @@ nsMessengerMigrator::Convert4XUri(const char *old_uri, PRBool for_news, const ch nsCOMPtr ioService = do_GetService(NS_IOSERVICE_CONTRACTID); if (!ioService) return NS_ERROR_FAILURE; - rv = ioService->ExtractUrlPart(old_uri, nsIIOService::url_Host, 0, 0, getter_Copies(hostname)); + rv = ioService->ExtractUrlPart(nsDependentCString(old_uri), nsIIOService::url_Host, hostname); if (NS_FAILED(rv)) return rv; - rv = ioService->ExtractUrlPart(old_uri, nsIIOService::url_Username, 0, 0, getter_Copies(username)); + rv = ioService->ExtractUrlPart(nsDependentCString(old_uri), nsIIOService::url_Username, username); if (NS_FAILED(rv)) return rv; // in 4.x, mac and windows stored the URI as IMAP:// // if the URI was the default folder on the server. // If it wasn't the default folder, they would have stored it as - if (!username || (PL_strlen((const char *)username) == 0)) { + if (username.IsEmpty()) { char *imap_username = nsnull; char *prefname = nsnull; - prefname = PR_smprintf("mail.imap.server.%s.userName", (const char *)hostname); + prefname = PR_smprintf("mail.imap.server.%s.userName", hostname.get()); if (!prefname) return NS_ERROR_FAILURE; rv = m_prefs->CopyCharPref(prefname, &imap_username); @@ -963,9 +963,9 @@ nsMessengerMigrator::Convert4XUri(const char *old_uri, PRBool for_news, const ch else { // new_uri = imap://@/ #ifdef DEBUG_MIGRATOR - printf("new_uri = %s/%s@%s/%s\n",IMAP_SCHEMA, imap_username, (const char *)hostname, default_folder_name); + printf("new_uri = %s/%s@%s/%s\n",IMAP_SCHEMA, imap_username, hostname.get(), default_folder_name); #endif /* DEBUG_MIGRATOR */ - *new_uri = PR_smprintf("%s/%s@%s/%s",IMAP_SCHEMA, imap_username, (const char *)hostname, default_folder_name); + *new_uri = PR_smprintf("%s/%s@%s/%s",IMAP_SCHEMA, imap_username, hostname.get(), default_folder_name); return NS_OK; } } diff --git a/mozilla/mailnews/base/src/nsMsgMailSession.cpp b/mozilla/mailnews/base/src/nsMsgMailSession.cpp index 267dc9cd173..0e640ece117 100644 --- a/mozilla/mailnews/base/src/nsMsgMailSession.cpp +++ b/mozilla/mailnews/base/src/nsMsgMailSession.cpp @@ -49,6 +49,7 @@ #include "nsIChromeRegistry.h" #include "nsIDirectoryService.h" #include "nsAppDirectoryServiceDefs.h" +#include "nsReadableUtils.h" NS_IMPL_THREADSAFE_ADDREF(nsMsgMailSession) NS_IMPL_THREADSAFE_RELEASE(nsMsgMailSession) @@ -448,10 +449,10 @@ nsMsgMailSession::ConvertMsgURIToMsgURL(const char *aURI, nsIMsgWindow *aMsgWind if (NS_FAILED(rv)) return NS_ERROR_NULL_POINTER; - nsXPIDLCString urlString; - if (NS_SUCCEEDED(tURI->GetSpec(getter_Copies(urlString)))) + nsCAutoString urlString; + if (NS_SUCCEEDED(tURI->GetSpec(urlString))) { - *aURL = nsCRT::strdup(urlString); + *aURL = ToNewCString(urlString); if (!(aURL)) return NS_ERROR_NULL_POINTER; } diff --git a/mozilla/mailnews/base/src/nsMsgPrintEngine.cpp b/mozilla/mailnews/base/src/nsMsgPrintEngine.cpp index 9eef2ec939d..c1e02703c89 100644 --- a/mozilla/mailnews/base/src/nsMsgPrintEngine.cpp +++ b/mozilla/mailnews/base/src/nsMsgPrintEngine.cpp @@ -128,9 +128,9 @@ nsMsgPrintEngine::OnStateChange(nsIWebProgress* aWebProgress, nsCOMPtr originalURI = nsnull; if (NS_SUCCEEDED(aChannel->GetOriginalURI(getter_AddRefs(originalURI))) && originalURI) { - nsXPIDLCString spec; + nsCAutoString spec; - if (NS_SUCCEEDED(originalURI->GetSpec(getter_Copies(spec)))) + if (NS_SUCCEEDED(originalURI->GetSpec(spec))) { if (spec.Equals("about:blank")) { diff --git a/mozilla/mailnews/base/src/nsMsgServiceProvider.cpp b/mozilla/mailnews/base/src/nsMsgServiceProvider.cpp index 96918b342d5..fe0a9d43994 100644 --- a/mozilla/mailnews/base/src/nsMsgServiceProvider.cpp +++ b/mozilla/mailnews/base/src/nsMsgServiceProvider.cpp @@ -105,9 +105,9 @@ nsMsgServiceProviderService::Init() if (NS_FAILED(rv)) continue; - nsXPIDLCString urlSpec; - rv = NS_GetURLSpecFromFile(dirEntry, getter_Copies(urlSpec)); - rv = LoadDataSource(urlSpec); + nsCAutoString urlSpec; + rv = NS_GetURLSpecFromFile(dirEntry, urlSpec); + rv = LoadDataSource(urlSpec.get()); NS_ASSERTION(NS_SUCCEEDED(rv), "Failed reading in the datasource\n"); } } diff --git a/mozilla/mailnews/base/src/nsMsgWindow.cpp b/mozilla/mailnews/base/src/nsMsgWindow.cpp index cdaff3df9f5..6016f05250a 100644 --- a/mozilla/mailnews/base/src/nsMsgWindow.cpp +++ b/mozilla/mailnews/base/src/nsMsgWindow.cpp @@ -578,7 +578,7 @@ nsMsgWindow::DisplayHTMLInMessagePane(const PRUnichar *title, const PRUnichar *b nsCOMPtr uri = do_CreateInstance("@mozilla.org/network/simple-uri;1"); if (!uri) return NS_ERROR_UNEXPECTED; - rv = uri->SetSpec(dataSpec.get()); + rv = uri->SetSpec(dataSpec); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr docShell; diff --git a/mozilla/mailnews/base/util/nsMsgFolder.cpp b/mozilla/mailnews/base/util/nsMsgFolder.cpp index 597187cf824..f666b79accd 100644 --- a/mozilla/mailnews/base/util/nsMsgFolder.cpp +++ b/mozilla/mailnews/base/util/nsMsgFolder.cpp @@ -605,7 +605,7 @@ nsMsgFolder::parseURI(PRBool needServer) if (NS_FAILED(rv)) return rv; #endif - rv = url->SetSpec(mURI); + rv = url->SetSpec(nsDependentCString(mURI)); if (NS_FAILED(rv)) return rv; // @@ -614,10 +614,10 @@ nsMsgFolder::parseURI(PRBool needServer) // empty path tells us it's a server. if (!mIsServerIsValid) { - nsXPIDLCString path; - rv = url->GetPath(getter_Copies(path)); + nsCAutoString path; + rv = url->GetPath(path); if (NS_SUCCEEDED(rv)) { - if (!nsCRT::strcmp(path, "/")) + if (!strcmp(path.get(), "/")) mIsServer = PR_TRUE; else mIsServer = PR_FALSE; @@ -629,14 +629,13 @@ nsMsgFolder::parseURI(PRBool needServer) if (mName.IsEmpty()) { // mName: // the name is the trailing directory in the path - char *fileName = nsnull; - url->GetFileName(&fileName); - if (fileName) { + nsCAutoString fileName; + url->GetFileName(fileName); + if (!fileName.IsEmpty()) { // XXX conversion to unicode here? is fileName in UTF8? // yes, let's say it is in utf8 - NS_UnescapeURL(fileName); - mName = NS_ConvertUTF8toUCS2(fileName); - nsMemory::Free(fileName); + NS_UnescapeURL((char *)fileName.get()); + mName = NS_ConvertUTF8toUCS2(fileName.get()); } } @@ -657,15 +656,15 @@ nsMsgFolder::parseURI(PRBool needServer) // no parent. do the extra work of asking if (!server && needServer) { // Get username and hostname so we can get the server - nsXPIDLCString userName; - rv = url->GetPreHost(getter_Copies(userName)); - if (NS_SUCCEEDED(rv) && (const char*)userName) - nsUnescape(NS_CONST_CAST(char*,(const char*)userName)); + nsCAutoString userPass; + rv = url->GetUserPass(userPass); + if (NS_SUCCEEDED(rv) && !userPass.IsEmpty()) + nsUnescape(NS_CONST_CAST(char*,userPass.get())); - nsXPIDLCString hostName; - rv = url->GetHost(getter_Copies(hostName)); - if (NS_SUCCEEDED(rv) && (const char*)hostName) - nsUnescape(NS_CONST_CAST(char*,(const char*)hostName)); + nsCAutoString hostName; + rv = url->GetHost(hostName); + if (NS_SUCCEEDED(rv) && !hostName.IsEmpty()) + nsUnescape(NS_CONST_CAST(char*,hostName.get())); // turn it back into a server: @@ -673,8 +672,8 @@ nsMsgFolder::parseURI(PRBool needServer) do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; - rv = accountManager->FindServer(userName, - hostName, + rv = accountManager->FindServer(userPass.get(), + hostName.get(), GetIncomingServerType(), getter_AddRefs(server)); @@ -690,10 +689,10 @@ nsMsgFolder::parseURI(PRBool needServer) if (server) { nsCAutoString newPath; - char *urlPath = nsnull; - url->GetFilePath(&urlPath); - if (urlPath) { - NS_UnescapeURL(urlPath); + nsCAutoString urlPath; + url->GetFilePath(urlPath); + if (!urlPath.IsEmpty()) { + NS_UnescapeURL((char *) urlPath.get()); // transform the filepath from the URI, such as // "/folder1/folder2/foldern" @@ -702,9 +701,7 @@ nsMsgFolder::parseURI(PRBool needServer) // (remove leading / and add .sbd to first n-1 folders) // to be appended onto the server's path - NS_MsgCreatePathStringFromFolderURI(urlPath, newPath); - - nsMemory::Free(urlPath); + NS_MsgCreatePathStringFromFolderURI(urlPath.get(), newPath); } // now append munged path onto server path diff --git a/mozilla/mailnews/base/util/nsMsgMailNewsUrl.cpp b/mozilla/mailnews/base/util/nsMsgMailNewsUrl.cpp index 2a478991534..bf65c2a0b34 100644 --- a/mozilla/mailnews/base/util/nsMsgMailNewsUrl.cpp +++ b/mozilla/mailnews/base/util/nsMsgMailNewsUrl.cpp @@ -171,18 +171,18 @@ NS_IMETHODIMP nsMsgMailNewsUrl::GetServer(nsIMsgIncomingServer ** aIncomingServe // shouldn't happen...but it could. so i'm going to look it up every time and // we can look at caching it later. - nsXPIDLCString host; - nsXPIDLCString scheme; - nsXPIDLCString userName; + nsCAutoString host; + nsCAutoString scheme; + nsCAutoString userName; - nsresult rv = GetHost(getter_Copies(host)); + nsresult rv = GetAsciiHost(host); /* GetUsername() returns an unescaped string. * do not unescape it again. */ - GetUsername(getter_Copies(userName)); + GetUsername(userName); - rv = GetScheme(getter_Copies(scheme)); + rv = GetScheme(scheme); if (NS_SUCCEEDED(rv)) { if (scheme.Equals("pop")) @@ -195,9 +195,9 @@ NS_IMETHODIMP nsMsgMailNewsUrl::GetServer(nsIMsgIncomingServer ** aIncomingServe if (NS_FAILED(rv)) return rv; nsCOMPtr server; - rv = accountManager->FindServer(userName, - host, - scheme, + rv = accountManager->FindServer(userName.get(), + host.get(), + scheme.get(), aIncomingServer); if (!*aIncomingServer && scheme.Equals("imap")) { @@ -206,8 +206,8 @@ NS_IMETHODIMP nsMsgMailNewsUrl::GetServer(nsIMsgIncomingServer ** aIncomingServe // for imap urls, or we could make caching of servers work and // just set the server in the imap code for this case. rv = accountManager->FindServer("", - host, - scheme, + host.get(), + scheme.get(), aIncomingServer); } } @@ -416,7 +416,7 @@ NS_IMETHODIMP nsMsgMailNewsUrl::GetSearchSession(nsIMsgSearchSession **aSearchSe //////////////////////////////////////////////////////////////////////////////////// -NS_IMETHODIMP nsMsgMailNewsUrl::GetSpec(char * *aSpec) +NS_IMETHODIMP nsMsgMailNewsUrl::GetSpec(nsACString &aSpec) { return m_baseURL->GetSpec(aSpec); } @@ -424,11 +424,12 @@ NS_IMETHODIMP nsMsgMailNewsUrl::GetSpec(char * *aSpec) #define FILENAME_PART "&filename=" #define FILENAME_PART_LEN 10 -NS_IMETHODIMP nsMsgMailNewsUrl::SetSpec(const char * aSpec) +NS_IMETHODIMP nsMsgMailNewsUrl::SetSpec(const nsACString &aSpec) { + const nsPromiseFlatCString &spec = PromiseFlatCString(aSpec); // Parse out "filename" attribute if present. char *start, *end; - start = PL_strcasestr(aSpec,FILENAME_PART); + start = PL_strcasestr(spec.get(),FILENAME_PART); if (start) { // Make sure we only get our own value. end = PL_strcasestr((char*)(start+FILENAME_PART_LEN),"&"); @@ -445,64 +446,69 @@ NS_IMETHODIMP nsMsgMailNewsUrl::SetSpec(const char * aSpec) return m_baseURL->SetSpec(aSpec); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetPrePath(char * *aPrePath) +NS_IMETHODIMP nsMsgMailNewsUrl::GetPrePath(nsACString &aPrePath) { return m_baseURL->GetPrePath(aPrePath); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetPrePath(const char * aPrePath) -{ - return m_baseURL->SetPrePath(aPrePath); -} - -NS_IMETHODIMP nsMsgMailNewsUrl::GetScheme(char * *aScheme) +NS_IMETHODIMP nsMsgMailNewsUrl::GetScheme(nsACString &aScheme) { return m_baseURL->GetScheme(aScheme); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetScheme(const char * aScheme) +NS_IMETHODIMP nsMsgMailNewsUrl::SetScheme(const nsACString &aScheme) { return m_baseURL->SetScheme(aScheme); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetPreHost(char * *aPreHost) +NS_IMETHODIMP nsMsgMailNewsUrl::GetUserPass(nsACString &aUserPass) { - return m_baseURL->GetPreHost(aPreHost); + return m_baseURL->GetUserPass(aUserPass); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetPreHost(const char * aPreHost) +NS_IMETHODIMP nsMsgMailNewsUrl::SetUserPass(const nsACString &aUserPass) { - return m_baseURL->SetPreHost(aPreHost); + return m_baseURL->SetUserPass(aUserPass); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetUsername(char * *aUsername) +NS_IMETHODIMP nsMsgMailNewsUrl::GetUsername(nsACString &aUsername) { /* note: this will return an unescaped string */ return m_baseURL->GetUsername(aUsername); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetUsername(const char * aUsername) +NS_IMETHODIMP nsMsgMailNewsUrl::SetUsername(const nsACString &aUsername) { return m_baseURL->SetUsername(aUsername); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetPassword(char * *aPassword) +NS_IMETHODIMP nsMsgMailNewsUrl::GetPassword(nsACString &aPassword) { return m_baseURL->GetPassword(aPassword); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetPassword(const char * aPassword) +NS_IMETHODIMP nsMsgMailNewsUrl::SetPassword(const nsACString &aPassword) { return m_baseURL->SetPassword(aPassword); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetHost(char * *aHost) +NS_IMETHODIMP nsMsgMailNewsUrl::GetHostPort(nsACString &aHostPort) +{ + return m_baseURL->GetHostPort(aHostPort); +} + +NS_IMETHODIMP nsMsgMailNewsUrl::SetHostPort(const nsACString &aHostPort) +{ + return m_baseURL->SetHostPort(aHostPort); +} + +NS_IMETHODIMP nsMsgMailNewsUrl::GetHost(nsACString &aHost) { return m_baseURL->GetHost(aHost); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetHost(const char * aHost) +NS_IMETHODIMP nsMsgMailNewsUrl::SetHost(const nsACString &aHost) { return m_baseURL->SetHost(aHost); } @@ -517,16 +523,31 @@ NS_IMETHODIMP nsMsgMailNewsUrl::SetPort(PRInt32 aPort) return m_baseURL->SetPort(aPort); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetPath(char * *aPath) +NS_IMETHODIMP nsMsgMailNewsUrl::GetPath(nsACString &aPath) { return m_baseURL->GetPath(aPath); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetPath(const char * aPath) +NS_IMETHODIMP nsMsgMailNewsUrl::SetPath(const nsACString &aPath) { return m_baseURL->SetPath(aPath); } +NS_IMETHODIMP nsMsgMailNewsUrl::GetAsciiHost(nsACString &aHostA) +{ + return m_baseURL->GetAsciiHost(aHostA); +} + +NS_IMETHODIMP nsMsgMailNewsUrl::GetAsciiSpec(nsACString &aSpecA) +{ + return m_baseURL->GetAsciiSpec(aSpecA); +} + +NS_IMETHODIMP nsMsgMailNewsUrl::GetOriginCharset(nsACString &aOriginCharset) +{ + return m_baseURL->GetOriginCharset(aOriginCharset); +} + NS_IMETHODIMP nsMsgMailNewsUrl::Equals(nsIURI *other, PRBool *_retval) { return m_baseURL->Equals(other, _retval); @@ -534,8 +555,8 @@ NS_IMETHODIMP nsMsgMailNewsUrl::Equals(nsIURI *other, PRBool *_retval) NS_IMETHODIMP nsMsgMailNewsUrl::SchemeIs(const char *aScheme, PRBool *_retval) { - nsXPIDLCString scheme; - nsresult rv = m_baseURL->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + nsresult rv = m_baseURL->GetScheme(scheme); NS_ENSURE_SUCCESS(rv,rv); // fix #76200 crash on email with with no src. @@ -543,7 +564,7 @@ NS_IMETHODIMP nsMsgMailNewsUrl::SchemeIs(const char *aScheme, PRBool *_retval) // make sure we have a scheme before calling SchemeIs() // we have to do this because url parsing can result in a null mScheme // this extra string copy should be removed when #73845 is fixed. - if (scheme.get()) { + if (!scheme.IsEmpty()) { return m_baseURL->SchemeIs(aScheme, _retval); } else { @@ -555,40 +576,38 @@ NS_IMETHODIMP nsMsgMailNewsUrl::SchemeIs(const char *aScheme, PRBool *_retval) NS_IMETHODIMP nsMsgMailNewsUrl::Clone(nsIURI **_retval) { nsresult rv; - nsXPIDLCString urlSpec; + nsCAutoString urlSpec; nsCOMPtr ioService = do_GetService(kIOServiceCID, &rv); if (NS_FAILED(rv)) return rv; - rv = GetSpec(getter_Copies(urlSpec)); + rv = GetSpec(urlSpec); if (NS_FAILED(rv)) return rv; - return ioService->NewURI(urlSpec, nsnull, _retval); + return ioService->NewURI(urlSpec, nsnull, nsnull, _retval); } -NS_IMETHODIMP nsMsgMailNewsUrl::Resolve(const char *relativePath, char **result) +NS_IMETHODIMP nsMsgMailNewsUrl::Resolve(const nsACString &relativePath, nsACString &result) { // only resolve anchor urls....i.e. urls which start with '#' against the mailnews url... // everything else shouldn't be resolved against mailnews urls. nsresult rv = NS_OK; - if (relativePath && relativePath[0] == '#') // an anchor + if (relativePath.First() == '#') // an anchor return m_baseURL->Resolve(relativePath, result); else { // if relativePath is a complete url with it's own scheme then allow it... nsCOMPtr ioService = do_GetService(NS_IOSERVICE_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); - PRUint32 startPos; - PRUint32 endPos; - nsXPIDLCString scheme; + nsCAutoString scheme; - rv = ioService->ExtractScheme(relativePath, &startPos, &endPos, getter_Copies(scheme)); + rv = ioService->ExtractScheme(relativePath, scheme); // if we have a fully qualified scheme then pass the relative path back as the result - if (NS_SUCCEEDED(rv) && scheme.get()) + if (NS_SUCCEEDED(rv) && !scheme.IsEmpty()) { - *result = nsCRT::strdup(relativePath); + result = relativePath; } else { - *result = nsnull; + result.Truncate(); rv = NS_ERROR_FAILURE; } } @@ -596,39 +615,38 @@ NS_IMETHODIMP nsMsgMailNewsUrl::Resolve(const char *relativePath, char **result) return NS_OK; } -NS_IMETHODIMP nsMsgMailNewsUrl::GetDirectory(char * *aDirectory) +NS_IMETHODIMP nsMsgMailNewsUrl::GetDirectory(nsACString &aDirectory) { return m_baseURL->GetDirectory(aDirectory); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetDirectory(const char *aDirectory) +NS_IMETHODIMP nsMsgMailNewsUrl::SetDirectory(const nsACString &aDirectory) { return m_baseURL->SetDirectory(aDirectory); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetFileName(char * *aFileName) +NS_IMETHODIMP nsMsgMailNewsUrl::GetFileName(nsACString &aFileName) { if (!mAttachmentFileName.IsEmpty()) { - *aFileName = ToNewCString(mAttachmentFileName); + aFileName = mAttachmentFileName; return NS_OK; } - else - return m_baseURL->GetFileName(aFileName); + return m_baseURL->GetFileName(aFileName); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetFileBaseName(char * *aFileBaseName) +NS_IMETHODIMP nsMsgMailNewsUrl::GetFileBaseName(nsACString &aFileBaseName) { return m_baseURL->GetFileBaseName(aFileBaseName); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetFileBaseName(const char * aFileBaseName) +NS_IMETHODIMP nsMsgMailNewsUrl::SetFileBaseName(const nsACString &aFileBaseName) { return m_baseURL->SetFileBaseName(aFileBaseName); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetFileExtension(char * *aFileExtension) +NS_IMETHODIMP nsMsgMailNewsUrl::GetFileExtension(nsACString &aFileExtension) { if (!mAttachmentFileName.IsEmpty()) { @@ -638,65 +656,59 @@ NS_IMETHODIMP nsMsgMailNewsUrl::GetFileExtension(char * *aFileExtension) mAttachmentFileName.Right(extension, mAttachmentFileName.Length() - (pos + 1) /* skip the '.' */); - *aFileExtension = ToNewCString(extension); + aFileExtension = extension; return NS_OK; } - else - return m_baseURL->GetFileExtension(aFileExtension); + return m_baseURL->GetFileExtension(aFileExtension); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetFileExtension(const char * aFileExtension) +NS_IMETHODIMP nsMsgMailNewsUrl::SetFileExtension(const nsACString &aFileExtension) { return m_baseURL->SetFileExtension(aFileExtension); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetFileName(const char * aFileName) +NS_IMETHODIMP nsMsgMailNewsUrl::SetFileName(const nsACString &aFileName) { mAttachmentFileName = aFileName; return NS_OK; } -NS_IMETHODIMP nsMsgMailNewsUrl::GetParam(char * *aParam) +NS_IMETHODIMP nsMsgMailNewsUrl::GetParam(nsACString &aParam) { return m_baseURL->GetParam(aParam); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetParam(const char *aParam) +NS_IMETHODIMP nsMsgMailNewsUrl::SetParam(const nsACString &aParam) { return m_baseURL->SetParam(aParam); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetQuery(char * *aQuery) +NS_IMETHODIMP nsMsgMailNewsUrl::GetQuery(nsACString &aQuery) { return m_baseURL->GetQuery(aQuery); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetEscapedQuery(char * *aQuery) -{ - return m_baseURL->GetEscapedQuery(aQuery); -} - -NS_IMETHODIMP nsMsgMailNewsUrl::SetQuery(const char *aQuery) +NS_IMETHODIMP nsMsgMailNewsUrl::SetQuery(const nsACString &aQuery) { return m_baseURL->SetQuery(aQuery); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetRef(char * *aRef) +NS_IMETHODIMP nsMsgMailNewsUrl::GetRef(nsACString &aRef) { return m_baseURL->GetRef(aRef); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetRef(const char *aRef) +NS_IMETHODIMP nsMsgMailNewsUrl::SetRef(const nsACString &aRef) { return m_baseURL->SetRef(aRef); } -NS_IMETHODIMP nsMsgMailNewsUrl::GetFilePath(char **o_DirFile) +NS_IMETHODIMP nsMsgMailNewsUrl::GetFilePath(nsACString &o_DirFile) { return m_baseURL->GetFilePath(o_DirFile); } -NS_IMETHODIMP nsMsgMailNewsUrl::SetFilePath(const char *i_DirFile) +NS_IMETHODIMP nsMsgMailNewsUrl::SetFilePath(const nsACString &i_DirFile) { return m_baseURL->SetFilePath(i_DirFile); } diff --git a/mozilla/mailnews/base/util/nsMsgProtocol.cpp b/mozilla/mailnews/base/util/nsMsgProtocol.cpp index b10d2a040f1..252b73e5d49 100644 --- a/mozilla/mailnews/base/util/nsMsgProtocol.cpp +++ b/mozilla/mailnews/base/util/nsMsgProtocol.cpp @@ -45,7 +45,7 @@ #include "nsILoadGroup.h" #include "nsIIOService.h" #include "nsNetUtil.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsFileStream.h" #include "nsIFileTransportService.h" #include "nsIDNSService.h" @@ -146,11 +146,11 @@ nsMsgProtocol::OpenNetworkSocket(nsIURI * aURL, const char *connectionType, { NS_ENSURE_ARG(aURL); - nsXPIDLCString hostName; + nsCAutoString hostName; PRInt32 port = 0; aURL->GetPort(&port); - aURL->GetHost(getter_Copies(hostName)); + aURL->GetAsciiHost(hostName); nsCOMPtr proxyInfo; @@ -173,16 +173,16 @@ nsMsgProtocol::OpenNetworkSocket(nsIURI * aURL, const char *connectionType, nsCOMPtr proxyUri = aURL; PRBool isSMTP = PR_FALSE; if (NS_SUCCEEDED(aURL->SchemeIs("smtp", &isSMTP)) && isSMTP) { - nsXPIDLCString spec; - rv = aURL->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = aURL->GetSpec(spec); if (NS_SUCCEEDED(rv)) { static NS_DEFINE_CID(kSTDURLCID, NS_STANDARDURL_CID); proxyUri = do_CreateInstance(kSTDURLCID, &rv); } if (NS_SUCCEEDED(rv)) - rv = proxyUri->SetSpec(spec.get()); + rv = proxyUri->SetSpec(spec); if (NS_SUCCEEDED(rv)) - rv = proxyUri->SetScheme("mailto"); + rv = proxyUri->SetScheme(NS_LITERAL_CSTRING("mailto")); } if (NS_SUCCEEDED(rv)) rv = pps->ExamineForProxy(proxyUri, getter_AddRefs(proxyInfo)); @@ -190,7 +190,7 @@ nsMsgProtocol::OpenNetworkSocket(nsIURI * aURL, const char *connectionType, if (NS_FAILED(rv)) proxyInfo = nsnull; } - return OpenNetworkSocketWithInfo(hostName, port, connectionType, + return OpenNetworkSocketWithInfo(hostName.get(), port, connectionType, proxyInfo, callbacks); } @@ -199,10 +199,9 @@ nsresult nsMsgProtocol::GetFileFromURL(nsIURI * aURL, nsIFile **aResult) NS_ENSURE_ARG_POINTER(aURL); NS_ENSURE_ARG_POINTER(aResult); // extract the file path from the uri... - nsXPIDLCString filePath; - aURL->GetPath(getter_Copies(filePath)); - nsCAutoString urlSpec("file://"); - urlSpec.Append(filePath.get()); + nsCAutoString urlSpec; + aURL->GetPath(urlSpec); + urlSpec.Insert(NS_LITERAL_CSTRING("file://"), 0); nsresult rv; // dougt - there should be an easier way! @@ -497,13 +496,13 @@ NS_IMETHODIMP nsMsgProtocol::AsyncOpen(nsIStreamListener *listener, nsISupports if (NS_FAILED(rv)) return rv; - nsXPIDLCString scheme; - rv = m_url->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + rv = m_url->GetScheme(scheme); if (NS_FAILED(rv)) return rv; - rv = NS_CheckPortSafety(port, scheme); + rv = NS_CheckPortSafety(port, scheme.get()); if (NS_FAILED(rv)) return rv; @@ -872,7 +871,7 @@ nsresult nsMsgFilePostHelper::Init(nsIOutputStream * aOutStream, nsMsgAsyncWrite rv = fts->CreateTransport(aFileToPost, PR_RDONLY, 0664, getter_AddRefs(transport)); if (transport) { - rv = transport->AsyncRead(this, nsnull, 0, -1, 0, getter_AddRefs(mPostFileRequest)); + rv = transport->AsyncRead(this, nsnull, 0, PRUint32(-1), 0, getter_AddRefs(mPostFileRequest)); } return rv; } diff --git a/mozilla/mailnews/base/util/nsMsgUtils.cpp b/mozilla/mailnews/base/util/nsMsgUtils.cpp index 98dbc382a0e..dc144174ac3 100644 --- a/mozilla/mailnews/base/util/nsMsgUtils.cpp +++ b/mozilla/mailnews/base/util/nsMsgUtils.cpp @@ -140,7 +140,7 @@ nsresult CreateStartupUrl(char *uri, nsIURI** aUrl) (void**) aUrl); } if (*aUrl) - (*aUrl)->SetSpec(uri); + (*aUrl)->SetSpec(nsDependentCString(uri)); return rv; } diff --git a/mozilla/mailnews/compose/src/nsMsgAttachment.cpp b/mozilla/mailnews/compose/src/nsMsgAttachment.cpp index 69154a85ce9..3d5428666e7 100644 --- a/mozilla/mailnews/compose/src/nsMsgAttachment.cpp +++ b/mozilla/mailnews/compose/src/nsMsgAttachment.cpp @@ -181,7 +181,7 @@ nsresult nsMsgAttachment::DeleteAttachment() nsCOMPtr urlFile(do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv)); if (NS_SUCCEEDED(rv)) { - NS_InitFileFromURLSpec(urlFile, mUrl.get()); + NS_InitFileFromURLSpec(urlFile, mUrl); if (NS_SUCCEEDED(rv)) { PRBool bExists = PR_FALSE; diff --git a/mozilla/mailnews/compose/src/nsMsgAttachmentHandler.cpp b/mozilla/mailnews/compose/src/nsMsgAttachmentHandler.cpp index 63fbf2d475c..c7b85e23853 100644 --- a/mozilla/mailnews/compose/src/nsMsgAttachmentHandler.cpp +++ b/mozilla/mailnews/compose/src/nsMsgAttachmentHandler.cpp @@ -59,6 +59,7 @@ #include "nsMsgSimulateError.h" #include "nsITextToSubURI.h" #include "nsEscape.h" +#include "nsIFileURL.h" #include "nsNetCID.h" @@ -363,7 +364,7 @@ nsMsgAttachmentHandler::PickEncoding(const char *charset, nsIMsgSend *mime_deliv if (mURL) { - mURL->GetSpec(getter_Copies(turl)); + mURL->GetSpec(turl); tailName = PL_strrchr(turl, '/'); if (tailName) @@ -605,7 +606,7 @@ nsMsgAttachmentHandler::SnarfAttachment(nsMsgCompFields *compFields) } mOutFile = do_QueryInterface(outputStream); - mURL->GetSpec(getter_Copies(url_string)); + mURL->GetSpec(url_string); #ifdef XP_MAC if ( !m_bogus_attachment && nsMsgIsLocalFile(url_string)) @@ -675,24 +676,23 @@ nsMsgAttachmentHandler::SnarfAttachment(nsMsgCompFields *compFields) nsresult rv = fileUrl->SetSpec(url_string); if (NS_SUCCEEDED(rv)) { - char *ext; - rv = fileUrl->GetFileExtension(&ext); - if (NS_SUCCEEDED(rv) && ext && *ext) + nsCAutoString ext; + rv = fileUrl->GetFileExtension(ext); + if (NS_SUCCEEDED(rv) && !ext.IsEmpty()) { sendResourceFork = - PL_strcasecmp(ext, "TXT") && - PL_strcasecmp(ext, "JPG") && - PL_strcasecmp(ext, "GIF") && - PL_strcasecmp(ext, "TIF") && - PL_strcasecmp(ext, "HTM") && - PL_strcasecmp(ext, "HTML") && - PL_strcasecmp(ext, "ART") && - PL_strcasecmp(ext, "XUL") && - PL_strcasecmp(ext, "XML") && - PL_strcasecmp(ext, "CSS") && - PL_strcasecmp(ext, "JS"); + PL_strcasecmp(ext.get(), "TXT") && + PL_strcasecmp(ext.get(), "JPG") && + PL_strcasecmp(ext.get(), "GIF") && + PL_strcasecmp(ext.get(), "TIF") && + PL_strcasecmp(ext.get(), "HTM") && + PL_strcasecmp(ext.get(), "HTML") && + PL_strcasecmp(ext.get(), "ART") && + PL_strcasecmp(ext.get(), "XUL") && + PL_strcasecmp(ext.get(), "XML") && + PL_strcasecmp(ext.get(), "CSS") && + PL_strcasecmp(ext.get(), "JS"); } - PR_FREEIF(ext); } } } @@ -994,7 +994,7 @@ nsMsgAttachmentHandler::UrlExit(nsresult status, const PRUnichar* aMsg) if (m_real_name && *m_real_name) printfString = nsTextFormatter::smprintf(msg, m_real_name); else - if (NS_SUCCEEDED(mURL->GetSpec(getter_Copies(turl))) && (turl)) + if (NS_SUCCEEDED(mURL->GetSpec(turl)) && (turl)) { nsCAutoString unescapeUrl(turl); nsUnescape (NS_CONST_CAST(char*, unescapeUrl.get())); diff --git a/mozilla/mailnews/compose/src/nsMsgCompUtils.cpp b/mozilla/mailnews/compose/src/nsMsgCompUtils.cpp index 421c1279650..d216449b7f7 100644 --- a/mozilla/mailnews/compose/src/nsMsgCompUtils.cpp +++ b/mozilla/mailnews/compose/src/nsMsgCompUtils.cpp @@ -1463,7 +1463,7 @@ msg_pick_real_name (nsMsgAttachmentHandler *attachment, const PRUnichar *propose else //Let's extract the name from the URL { nsXPIDLCString url; - attachment->mURL->GetSpec(getter_Copies(url)); + attachment->mURL->GetSpec(url); s = url; s2 = PL_strchr (s, ':'); @@ -1579,14 +1579,10 @@ nsMsgNewURL(nsIURI** aInstancePtrResult, const char * aSpec) { if (PL_strstr(aSpec, "://") == nsnull) { - nsAutoString newSpec(NS_LITERAL_STRING("http://")); - newSpec.AppendWithConversion(aSpec); - nsCAutoString newspecC; - newspecC.AssignWithConversion(newSpec); - rv = pNetService->NewURI(newspecC.get(), nsnull, aInstancePtrResult); + rv = pNetService->NewURI(NS_LITERAL_CSTRING("http://") + nsDependentCString(aSpec), nsnull, nsnull, aInstancePtrResult); } else - rv = pNetService->NewURI(aSpec, nsnull, aInstancePtrResult); + rv = pNetService->NewURI(nsDependentCString(aSpec), nsnull, nsnull, aInstancePtrResult); } return rv; } @@ -1646,19 +1642,19 @@ char * nsMsgParseURLHost(const char *url) { nsIURI *workURI = nsnull; - char *retVal = nsnull; nsresult rv; rv = nsMsgNewURL(&workURI, url); if (NS_FAILED(rv) || !workURI) return nsnull; - rv = workURI->GetHost(&retVal); + nsCAutoString host; + rv = workURI->GetHost(host); NS_IF_RELEASE(workURI); if (NS_FAILED(rv)) return nsnull; - else - return retVal; + + return ToNewCString(host); } char * @@ -1692,7 +1688,7 @@ GenerateFileNameFromURI(nsIURI *aURL) char *cp = nsnull; char *cp1 = nsnull; - rv = aURL->GetPath(getter_Copies(file)); + rv = aURL->GetPath(file); if ( NS_SUCCEEDED(rv) && file) { char *newFile = PL_strdup(file); @@ -1726,7 +1722,7 @@ GenerateFileNameFromURI(nsIURI *aURL) cp1 = nsnull; - rv = aURL->GetSpec(getter_Copies(spec)); + rv = aURL->GetSpec(spec); if ( NS_SUCCEEDED(rv) && spec) { char *newSpec = PL_strdup(spec); diff --git a/mozilla/mailnews/compose/src/nsMsgCompose.cpp b/mozilla/mailnews/compose/src/nsMsgCompose.cpp index b2256a6fb12..28cc8dddccf 100644 --- a/mozilla/mailnews/compose/src/nsMsgCompose.cpp +++ b/mozilla/mailnews/compose/src/nsMsgCompose.cpp @@ -89,7 +89,7 @@ #include "nsIDocShellTreeOwner.h" #include "nsISupportsArray.h" #include "nsIIOService.h" -#include "nsNetCID.h" +#include "nsIFileURL.h" #include "nsIMsgMailSession.h" #include "nsMsgBaseCID.h" #include "nsIPrompt.h" @@ -370,26 +370,24 @@ PRBool nsMsgCompose::IsEmbeddedObjectSafe(const char * originalScheme, if (!objURL.IsEmpty()) { nsCOMPtr uri; - nsCString objCUrl; - CopyUCS2toASCII(objURL, objCUrl); - rv = NS_NewURI(getter_AddRefs(uri), objCUrl.get()); + rv = NS_NewURI(getter_AddRefs(uri), objURL); if (NS_SUCCEEDED(rv) && uri) { - nsXPIDLCString scheme; - rv = uri->GetScheme(getter_Copies(scheme)); - if (NS_SUCCEEDED(rv) && (nsCRT::strcasecmp(scheme, originalScheme) == 0)) + nsCAutoString scheme; + rv = uri->GetScheme(scheme); + if (NS_SUCCEEDED(rv) && (nsCRT::strcasecmp(scheme.get(), originalScheme) == 0)) { - nsXPIDLCString host; - rv = uri->GetHost(getter_Copies(host)); + nsCAutoString host; + rv = uri->GetAsciiHost(host); // mailbox url don't have a host therefore don't be too strict. - if (NS_SUCCEEDED(rv) && (!host || originalHost || (nsCRT::strcasecmp(host, originalHost) == 0))) + if (NS_SUCCEEDED(rv) && (host.IsEmpty() || originalHost || (nsCRT::strcasecmp(host.get(), originalHost) == 0))) { - nsXPIDLCString path; - rv = uri->GetPath(getter_Copies(path)); + nsCAutoString path; + rv = uri->GetPath(path); if (NS_SUCCEEDED(rv)) { - char * query = PL_strrchr((const char *)path, '?'); - if (query && nsCRT::strncasecmp(path, originalPath, query - (const char *)path) == 0) + char * query = strrchr(path.get(), '?'); + if (query && nsCRT::strncasecmp(path.get(), originalPath, query - path.get()) == 0) return PR_TRUE; //This object is a part of the original message, we can send it safely. } } @@ -438,9 +436,9 @@ nsresult nsMsgCompose::TagEmbeddedObjects(nsIEditorShell *aEditorShell) rv = msgService->GetUrlForUri(mQuoteURI.get(), getter_AddRefs(originalUrl), nsnull); if (NS_SUCCEEDED(rv) && originalUrl) { - originalUrl->GetScheme(getter_Copies(originalScheme)); - originalUrl->GetHost(getter_Copies(originalHost)); - originalUrl->GetPath(getter_Copies(originalPath)); + originalUrl->GetScheme(originalScheme); + originalUrl->GetAsciiHost(originalHost); + originalUrl->GetPath(originalPath); } } @@ -455,8 +453,8 @@ nsresult nsMsgCompose::TagEmbeddedObjects(nsIEditorShell *aEditorShell) continue; node = do_QueryInterface(isupp); - if (IsEmbeddedObjectSafe((const char *)originalScheme, (const char *)originalHost, - (const char *)originalPath, node)) + if (IsEmbeddedObjectSafe(originalScheme.get(), originalHost.get(), + originalPath.get(), node)) continue; //Don't need to tag this object, it safe to send it. //The source of this object should not be sent with the message @@ -1566,13 +1564,9 @@ QuotingOutputStreamListener::QuotingOutputStreamListener(const char * originalMs { if (!myGetter.IsEmpty()) { - const char *escapedMessageId; nsCAutoString buf; - if (NS_EscapeURLPart(myGetter.get(), myGetter.Length(), esc_FileBaseName | esc_Forced, buf)) - escapedMessageId = buf.get(); - else - escapedMessageId = myGetter.get(); - mCiteReference = NS_LITERAL_STRING("mid") + NS_ConvertASCIItoUCS2(escapedMessageId); + mCiteReference = NS_LITERAL_STRING("mid") + + NS_ConvertASCIItoUCS2(NS_EscapeURL(myGetter, esc_FileBaseName | esc_Forced, buf)); } } @@ -3023,8 +3017,8 @@ nsMsgCompose::ProcessSignature(nsIMsgIdentity *identity, nsString *aMsgBody) if (fileUrl) { fileUrl->SetFilePath(sigNativePath); - nsXPIDLCString fileExt; - rv = fileUrl->GetFileExtension(getter_Copies(fileExt)); + nsCAutoString fileExt; + rv = fileUrl->GetFileExtension(fileExt); if (NS_SUCCEEDED(rv) && !fileExt.IsEmpty()) { // Now, most importantly, we need to figure out what the content type is for diff --git a/mozilla/mailnews/compose/src/nsMsgCopy.cpp b/mozilla/mailnews/compose/src/nsMsgCopy.cpp index 6ba3ed6d705..d5fe7b27242 100644 --- a/mozilla/mailnews/compose/src/nsMsgCopy.cpp +++ b/mozilla/mailnews/compose/src/nsMsgCopy.cpp @@ -563,7 +563,7 @@ MessageFolderIsLocal(nsIMsgIdentity *userIdentity, rv = nsComponentManager::CreateInstance(kStandardUrlCID, nsnull, NS_GET_IID(nsIURL), getter_AddRefs(url)); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec(aFolderURI); + rv = url->SetSpec(nsDependentCString(aFolderURI)); if (NS_FAILED(rv)) return rv; /* mailbox:/ means its local (on disk) */ diff --git a/mozilla/mailnews/compose/src/nsMsgQuote.cpp b/mozilla/mailnews/compose/src/nsMsgQuote.cpp index fdcff8da5ad..6d50eb89fec 100644 --- a/mozilla/mailnews/compose/src/nsMsgQuote.cpp +++ b/mozilla/mailnews/compose/src/nsMsgQuote.cpp @@ -202,8 +202,8 @@ nsMsgQuote::QuoteMessage(const char *msgURI, PRBool quoteHeaders, nsIStreamListe nsCOMPtr mailNewsUrl = do_QueryInterface(aURL, &rv); NS_ENSURE_SUCCESS(rv,rv); - nsXPIDLCString queryPart; - rv = mailNewsUrl->GetQuery(getter_Copies(queryPart)); + nsCAutoString queryPart; + rv = mailNewsUrl->GetQuery(queryPart); if (!queryPart.IsEmpty()) queryPart.Append('&'); @@ -213,7 +213,7 @@ nsMsgQuote::QuoteMessage(const char *msgURI, PRBool quoteHeaders, nsIStreamListe queryPart.Append("header=quote"); else queryPart.Append("header=quotebody"); - rv = mailNewsUrl->SetQuery(queryPart.get()); + rv = mailNewsUrl->SetQuery(queryPart); NS_ENSURE_SUCCESS(rv,rv); // if we were given a non empty charset, then use it diff --git a/mozilla/mailnews/compose/src/nsMsgSend.cpp b/mozilla/mailnews/compose/src/nsMsgSend.cpp index 6328c2eebfe..c1ccaebe7d1 100644 --- a/mozilla/mailnews/compose/src/nsMsgSend.cpp +++ b/mozilla/mailnews/compose/src/nsMsgSend.cpp @@ -60,6 +60,7 @@ #include "nsIMsgSendListener.h" #include "nsIMsgCopyServiceListener.h" #include "nsIFileSpec.h" +#include "nsIFileURL.h" #include "nsMsgCopy.h" #include "nsXPIDLString.h" #include "nsReadableUtils.h" @@ -1192,7 +1193,7 @@ nsMsgComposeAndSend::PreProcessPart(nsMsgAttachmentHandler *ma, turl.Adopt(nsCRT::strdup(ma->m_uri)); } else - ma->mURL->GetSpec(getter_Copies(turl)); + ma->mURL->GetSpec(turl); hdrs = mime_generate_attachment_headers (ma->m_type, ma->m_encoding, ma->m_description, ma->m_x_mac_type, @@ -1720,25 +1721,24 @@ nsMsgComposeAndSend::ProcessMultipartRelated(PRInt32 *aMailboxCount, PRInt32 *aN return NS_ERROR_OUT_OF_MEMORY; } - nsXPIDLCString spec; + nsCAutoString spec; nsCOMPtr uri; doc->GetDocumentURL(getter_AddRefs(uri)); if (!uri) return NS_ERROR_OUT_OF_MEMORY; - uri->GetSpec(getter_Copies(spec)); + uri->GetSpec(spec); // Ok, now get the path to the root doc and tack on the name we // got from the GetSrc() call.... - nsString workURL; workURL.AssignWithConversion(spec); + NS_ConvertUTF8toUCS2 workURL(spec); PRInt32 loc = workURL.RFind("/"); if (loc >= 0) workURL.SetLength(loc+1); workURL.Append(tUrl); - nsCAutoString workurlC; - workurlC.AssignWithConversion(workURL); + NS_ConvertUCS2toUTF8 workurlC(workURL); if (NS_FAILED(nsMsgNewURL(&attachment.url, workurlC.get()))) { // rhp - just try to continue and send it without this image. @@ -1867,13 +1867,15 @@ nsMsgComposeAndSend::ProcessMultipartRelated(PRInt32 *aMailboxCount, PRInt32 *aN // Start counting the attachments which are going to come from mail folders // and from NNTP servers. // - nsXPIDLCString turl; if (m_attachments[i].mURL) { - m_attachments[i].mURL->GetSpec(getter_Copies(turl)); - if (PL_strncasecmp(turl, "mailbox:",8) || PL_strncasecmp(turl, "IMAP:",5)) + nsIURI *uri = m_attachments[i].mURL; + PRBool match = PR_FALSE; + if ((NS_SUCCEEDED(uri->SchemeIs("mailbox", &match)) && match) || + (NS_SUCCEEDED(uri->SchemeIs("imap", &match)) && match)) (*aMailboxCount)++; - else if (PL_strncasecmp(turl, "news:",5) || PL_strncasecmp(turl, "snews:",6)) + else if ((NS_SUCCEEDED(uri->SchemeIs("news", &match)) && match) || + (NS_SUCCEEDED(uri->SchemeIs("snews", &match)) && match)) (*aNewsCount)++; } @@ -2118,14 +2120,14 @@ nsMsgComposeAndSend::AddCompFieldLocalAttachments() if (NS_SUCCEEDED(rv) && mimeFinder) { nsCOMPtr fileUrl(do_CreateInstance(NS_STANDARDURL_CONTRACTID)); - nsXPIDLCString fileExt; if (fileUrl) { + nsCAutoString fileExt; //First try using the real file name - rv = fileUrl->SetFileName(m_attachments[newLoc].m_real_name); + rv = fileUrl->SetFileName(nsDependentCString(m_attachments[newLoc].m_real_name)); if (NS_SUCCEEDED(rv)) { - rv = fileUrl->GetFileExtension(getter_Copies(fileExt)); + rv = fileUrl->GetFileExtension(fileExt); if (NS_SUCCEEDED(rv)) mimeFinder->GetTypeFromExtension(fileExt.get(), &(m_attachments[newLoc].m_type)); } @@ -2133,10 +2135,10 @@ nsMsgComposeAndSend::AddCompFieldLocalAttachments() //Then try using the url if we still haven't figured out the content type if ((!m_attachments[newLoc].m_type) || (!*m_attachments[newLoc].m_type)) { - rv = fileUrl->SetSpec(url.get()); + rv = fileUrl->SetSpec(url); if (NS_SUCCEEDED(rv)) { - rv = fileUrl->GetFileExtension(getter_Copies(fileExt)); + rv = fileUrl->GetFileExtension(fileExt); if (NS_SUCCEEDED(rv)) mimeFinder->GetTypeFromExtension(fileExt.get(), &(m_attachments[newLoc].m_type)); } @@ -2489,20 +2491,19 @@ nsMsgComposeAndSend::HackAttachments(const nsMsgAttachmentData *attachments, /* Count up attachments which are going to come from mail folders and from NNTP servers. */ - if (m_attachments[i].mURL) - { - nsXPIDLCString turl; - m_attachments[i].mURL->GetSpec(getter_Copies(turl)); - if (PL_strncasecmp(turl, "mailbox:",8) || - PL_strncasecmp(turl, "IMAP:",5)) - mailbox_count++; - else - if (PL_strncasecmp(turl, "news:",5) || - PL_strncasecmp(turl, "snews:",6)) - news_count++; + if (m_attachments[i].mURL) + { + nsIURI *uri = m_attachments[i].mURL; + PRBool match = PR_FALSE; + if ((NS_SUCCEEDED(uri->SchemeIs("mailbox", &match)) && match) || + (NS_SUCCEEDED(uri->SchemeIs("imap", &match)) && match)) + mailbox_count++; + else if ((NS_SUCCEEDED(uri->SchemeIs("news", &match)) && match) || + (NS_SUCCEEDED(uri->SchemeIs("snews", &match)) && match)) + news_count++; - if (m_attachments[i].mURL) - msg_pick_real_name(&m_attachments[i], nsnull, mCompFields->GetCharacterSet()); + if (uri) + msg_pick_real_name(&m_attachments[i], nsnull, mCompFields->GetCharacterSet()); } } } @@ -3803,7 +3804,6 @@ BuildURLAttachmentData(nsIURI *url) int attachCount = 2; // one entry and one empty entry nsMsgAttachmentData *attachments = nsnull; char *theName = nsnull; - nsXPIDLCString spec; if (!url) return nsnull; @@ -3813,10 +3813,11 @@ BuildURLAttachmentData(nsIURI *url) return nsnull; // Now get a readable name... - url->GetSpec(getter_Copies(spec)); - if (spec) + nsCAutoString spec; + url->GetSpec(spec); + if (!spec.IsEmpty()) { - theName = PL_strrchr(spec, '/'); + theName = strrchr(spec.get(), '/'); } if (!theName) diff --git a/mozilla/mailnews/compose/src/nsMsgSendLater.cpp b/mozilla/mailnews/compose/src/nsMsgSendLater.cpp index 2bac2b44856..a70f9201dc4 100644 --- a/mozilla/mailnews/compose/src/nsMsgSendLater.cpp +++ b/mozilla/mailnews/compose/src/nsMsgSendLater.cpp @@ -562,8 +562,6 @@ nsMsgSendLater::StartNextMailFileSend() nsresult rv = NS_OK; nsXPIDLCString messageURI; - PRBool hasMore = PR_FALSE; - if ( (!mEnumerator) || (mEnumerator->IsDone() == NS_OK) ) { // Call any listeners on this operation and then exit cleanly diff --git a/mozilla/mailnews/compose/src/nsSmtpDelegateFactory.cpp b/mozilla/mailnews/compose/src/nsSmtpDelegateFactory.cpp index a27287bff1b..e5f69cb6e9c 100644 --- a/mozilla/mailnews/compose/src/nsSmtpDelegateFactory.cpp +++ b/mozilla/mailnews/compose/src/nsSmtpDelegateFactory.cpp @@ -40,6 +40,7 @@ #include "nsCOMPtr.h" #include "nsXPIDLString.h" +#include "nsString.h" #include "nsIServiceManager.h" #include "nsIURL.h" @@ -81,23 +82,23 @@ nsSmtpDelegateFactory::CreateDelegate(nsIRDFResource *aOuter, (void **)getter_AddRefs(url)); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec(uri); + rv = url->SetSpec(nsDependentCString(uri)); // seperate out username, hostname - nsXPIDLCString hostname; - nsXPIDLCString username; + nsCAutoString hostname; + nsCAutoString userpass; - rv = url->GetPreHost(getter_Copies(username)); + rv = url->GetUserPass(userpass); NS_ENSURE_SUCCESS(rv, rv); - url->GetHost(getter_Copies(hostname)); + url->GetAsciiHost(hostname); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr smtpService = do_GetService(kSmtpServiceCID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr smtpServer; - rv = smtpService->FindServer(username, hostname, getter_AddRefs(smtpServer)); + rv = smtpService->FindServer(userpass.get(), hostname.get(), getter_AddRefs(smtpServer)); // no server, it's a failure! if (NS_FAILED(rv)) return rv; diff --git a/mozilla/mailnews/compose/src/nsSmtpProtocol.cpp b/mozilla/mailnews/compose/src/nsSmtpProtocol.cpp index c5e50cf8d9b..598cdd5951a 100644 --- a/mozilla/mailnews/compose/src/nsSmtpProtocol.cpp +++ b/mozilla/mailnews/compose/src/nsSmtpProtocol.cpp @@ -308,9 +308,11 @@ void nsSmtpProtocol::Initialize(nsIURI * aURL) if (NS_SUCCEEDED(rv) && TestFlag(SMTP_WAIT_FOR_REDIRECTION)) return; - nsXPIDLCString hostName; - aURL->GetHost(getter_Copies(hostName)); - PR_LOG(SMTPLogModule, PR_LOG_ALWAYS, ("SMTP Connecting to: %s", (const char *) hostName)); +#if defined(PR_LOGGING) + nsCAutoString hostName; + aURL->GetAsciiHost(hostName); + PR_LOG(SMTPLogModule, PR_LOG_ALWAYS, ("SMTP Connecting to: %s", hostName.get())); +#endif nsCOMPtr callbacks; nsCOMPtr smtpUrl(do_QueryInterface(aURL)); @@ -1270,9 +1272,9 @@ nsresult nsSmtpProtocol::LoadUrl(nsIURI * aURL, nsISupports * aConsumer ) // a host name and inform the caller that we are not going to // run the url... - nsXPIDLCString hostName; - aURL->GetHost(getter_Copies(hostName)); - if (!hostName) + nsCAutoString hostName; + aURL->GetHost(hostName); + if (hostName.IsEmpty()) { nsCOMPtr aMsgUrl = do_QueryInterface(aURL); if (aMsgUrl) diff --git a/mozilla/mailnews/compose/src/nsSmtpService.cpp b/mozilla/mailnews/compose/src/nsSmtpService.cpp index b7fd43844a8..de9176ca954 100644 --- a/mozilla/mailnews/compose/src/nsSmtpService.cpp +++ b/mozilla/mailnews/compose/src/nsSmtpService.cpp @@ -209,7 +209,7 @@ nsresult NS_MsgBuildSmtpUrl(nsIFileSpec * aFilePath, if (urlSpec.get()) { nsCOMPtr url = do_QueryInterface(smtpUrl); - url->SetSpec(urlSpec.get()); + url->SetSpec(urlSpec); smtpUrl->SetRecipients(aRecipients); smtpUrl->SetPostMessageFile(aFilePath); smtpUrl->SetSenderIdentity(aSenderIdentity); @@ -267,14 +267,10 @@ nsresult NS_MsgLoadSmtpUrl(nsIURI * aUrl, nsISupports * aConsumer, nsIRequest ** return rv; } -NS_IMETHODIMP nsSmtpService::GetScheme(char * *aScheme) +NS_IMETHODIMP nsSmtpService::GetScheme(nsACString &aScheme) { - nsresult rv = NS_OK; - if (aScheme) - *aScheme = PL_strdup("mailto"); - else - rv = NS_ERROR_NULL_POINTER; - return rv; + aScheme = "mailto"; + return NS_OK; } NS_IMETHODIMP nsSmtpService::GetDefaultPort(PRInt32 *aDefaultPort) @@ -494,7 +490,10 @@ NS_IMETHODIMP nsMailtoChannel::Resume() // the smtp service is also the protocol handler for mailto urls.... -NS_IMETHODIMP nsSmtpService::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **_retval) +NS_IMETHODIMP nsSmtpService::NewURI(const nsACString &aSpec, + const char *aOriginCharset, // ignored + nsIURI *aBaseURI, + nsIURI **_retval) { // get a new smtp url diff --git a/mozilla/mailnews/compose/src/nsSmtpUrl.cpp b/mozilla/mailnews/compose/src/nsSmtpUrl.cpp index 20ddd2aef54..56231a20e2d 100644 --- a/mozilla/mailnews/compose/src/nsSmtpUrl.cpp +++ b/mozilla/mailnews/compose/src/nsSmtpUrl.cpp @@ -256,7 +256,7 @@ nsresult nsMailtoUrl::ParseMailtoUrl(char * searchPart) } -NS_IMETHODIMP nsMailtoUrl::SetSpec(const char * aSpec) +NS_IMETHODIMP nsMailtoUrl::SetSpec(const nsACString &aSpec) { m_baseURL->SetSpec(aSpec); return ParseUrl(); @@ -285,10 +285,9 @@ nsresult nsMailtoUrl::ParseUrl() nsresult rv = NS_OK; // we can get the path from the simple url..... - nsXPIDLCString aPath; - m_baseURL->GetPath(getter_Copies(aPath)); - if (aPath) - m_toPart.Assign(aPath); + nsCAutoString aPath; + m_baseURL->GetPath(aPath); + m_toPart.Assign(aPath); PRInt32 startOfSearchPart = m_toPart.FindChar('?'); if (startOfSearchPart >= 0) @@ -360,67 +359,72 @@ NS_IMETHODIMP nsMailtoUrl::GetMessageContents(char ** aToPart, char ** aCcPart, //////////////////////////////////////////////////////////////////////////////////// -NS_IMETHODIMP nsMailtoUrl::GetSpec(char * *aSpec) +NS_IMETHODIMP nsMailtoUrl::GetSpec(nsACString &aSpec) { return m_baseURL->GetSpec(aSpec); } -NS_IMETHODIMP nsMailtoUrl::GetPrePath(char * *aPrePath) +NS_IMETHODIMP nsMailtoUrl::GetPrePath(nsACString &aPrePath) { return m_baseURL->GetPrePath(aPrePath); } -NS_IMETHODIMP nsMailtoUrl::SetPrePath(const char * aPrePath) -{ - return m_baseURL->SetPrePath(aPrePath); -} - -NS_IMETHODIMP nsMailtoUrl::GetScheme(char * *aScheme) +NS_IMETHODIMP nsMailtoUrl::GetScheme(nsACString &aScheme) { return m_baseURL->GetScheme(aScheme); } -NS_IMETHODIMP nsMailtoUrl::SetScheme(const char * aScheme) +NS_IMETHODIMP nsMailtoUrl::SetScheme(const nsACString &aScheme) { return m_baseURL->SetScheme(aScheme); } -NS_IMETHODIMP nsMailtoUrl::GetPreHost(char * *aPreHost) +NS_IMETHODIMP nsMailtoUrl::GetUserPass(nsACString &aUserPass) { - return m_baseURL->GetPreHost(aPreHost); + return m_baseURL->GetUserPass(aUserPass); } -NS_IMETHODIMP nsMailtoUrl::SetPreHost(const char * aPreHost) +NS_IMETHODIMP nsMailtoUrl::SetUserPass(const nsACString &aUserPass) { - return m_baseURL->SetPreHost(aPreHost); + return m_baseURL->SetUserPass(aUserPass); } -NS_IMETHODIMP nsMailtoUrl::GetUsername(char * *aUsername) +NS_IMETHODIMP nsMailtoUrl::GetUsername(nsACString &aUsername) { return m_baseURL->GetUsername(aUsername); } -NS_IMETHODIMP nsMailtoUrl::SetUsername(const char * aUsername) +NS_IMETHODIMP nsMailtoUrl::SetUsername(const nsACString &aUsername) { return m_baseURL->SetUsername(aUsername); } -NS_IMETHODIMP nsMailtoUrl::GetPassword(char * *aPassword) +NS_IMETHODIMP nsMailtoUrl::GetPassword(nsACString &aPassword) { return m_baseURL->GetPassword(aPassword); } -NS_IMETHODIMP nsMailtoUrl::SetPassword(const char * aPassword) +NS_IMETHODIMP nsMailtoUrl::SetPassword(const nsACString &aPassword) { return m_baseURL->SetPassword(aPassword); } -NS_IMETHODIMP nsMailtoUrl::GetHost(char * *aHost) +NS_IMETHODIMP nsMailtoUrl::GetHostPort(nsACString &aHostPort) +{ + return m_baseURL->GetHost(aHostPort); +} + +NS_IMETHODIMP nsMailtoUrl::SetHostPort(const nsACString &aHostPort) +{ + return m_baseURL->SetHost(aHostPort); +} + +NS_IMETHODIMP nsMailtoUrl::GetHost(nsACString &aHost) { return m_baseURL->GetHost(aHost); } -NS_IMETHODIMP nsMailtoUrl::SetHost(const char * aHost) +NS_IMETHODIMP nsMailtoUrl::SetHost(const nsACString &aHost) { return m_baseURL->SetHost(aHost); } @@ -435,16 +439,31 @@ NS_IMETHODIMP nsMailtoUrl::SetPort(PRInt32 aPort) return m_baseURL->SetPort(aPort); } -NS_IMETHODIMP nsMailtoUrl::GetPath(char * *aPath) +NS_IMETHODIMP nsMailtoUrl::GetPath(nsACString &aPath) { return m_baseURL->GetPath(aPath); } -NS_IMETHODIMP nsMailtoUrl::SetPath(const char * aPath) +NS_IMETHODIMP nsMailtoUrl::SetPath(const nsACString &aPath) { return m_baseURL->SetPath(aPath); } +NS_IMETHODIMP nsMailtoUrl::GetAsciiHost(nsACString &aHostA) +{ + return m_baseURL->GetAsciiHost(aHostA); +} + +NS_IMETHODIMP nsMailtoUrl::GetAsciiSpec(nsACString &aSpecA) +{ + return m_baseURL->GetAsciiSpec(aSpecA); +} + +NS_IMETHODIMP nsMailtoUrl::GetOriginCharset(nsACString &aOriginCharset) +{ + return m_baseURL->GetOriginCharset(aOriginCharset); +} + NS_IMETHODIMP nsMailtoUrl::SchemeIs(const char *aScheme, PRBool *_retval) { return m_baseURL->SchemeIs(aScheme, _retval); @@ -460,7 +479,7 @@ NS_IMETHODIMP nsMailtoUrl::Clone(nsIURI **_retval) return m_baseURL->Clone(_retval); } -NS_IMETHODIMP nsMailtoUrl::Resolve(const char *relativePath, char **result) +NS_IMETHODIMP nsMailtoUrl::Resolve(const nsACString &relativePath, nsACString &result) { return m_baseURL->Resolve(relativePath, result); } @@ -491,7 +510,7 @@ NS_IMPL_ISUPPORTS_INHERITED1(nsSmtpUrl, nsMsgMailNewsUrl, nsISmtpUrl) //////////////////////////////////////////////////////////////////////////////////// -NS_IMETHODIMP nsSmtpUrl::SetSpec(const char * aSpec) +NS_IMETHODIMP nsSmtpUrl::SetSpec(const nsACString &aSpec) { nsresult rv = nsMsgMailNewsUrl::SetSpec(aSpec); if (NS_SUCCEEDED(rv)) @@ -506,10 +525,10 @@ nsresult nsSmtpUrl::ParseUrl() nsresult rv = NS_OK; // set the username - nsXPIDLCString userName; - rv = GetUsername(getter_Copies(userName)); + nsCAutoString userName; + rv = GetUsername(userName); if (NS_FAILED(rv)) return rv; - m_userName = (const char *)userName; + m_userName = userName; return NS_OK; } diff --git a/mozilla/mailnews/compose/src/nsSmtpUrl.h b/mozilla/mailnews/compose/src/nsSmtpUrl.h index a03f7ba9de2..4121f139368 100644 --- a/mozilla/mailnews/compose/src/nsSmtpUrl.h +++ b/mozilla/mailnews/compose/src/nsSmtpUrl.h @@ -92,7 +92,7 @@ public: NS_DECL_ISUPPORTS_INHERITED // nsIURI over-ride... - NS_IMETHOD SetSpec(const char * aSpec); + NS_IMETHOD SetSpec(const nsACString &aSpec); // From nsISmtpUrl NS_DECL_NSISMTPURL diff --git a/mozilla/mailnews/compose/src/nsURLFetcher.cpp b/mozilla/mailnews/compose/src/nsURLFetcher.cpp index c5ed13e52ad..f52bac4f148 100644 --- a/mozilla/mailnews/compose/src/nsURLFetcher.cpp +++ b/mozilla/mailnews/compose/src/nsURLFetcher.cpp @@ -364,7 +364,7 @@ nsURLFetcher::FireURLRequest(nsIURI *aURL, nsILocalFile *localFile, nsIFileOutpu nsCOMPtr channel; nsCOMPtr loadGroup; pURILoader->GetLoadGroupForContext(cntListener, getter_AddRefs(loadGroup)); - NS_ENSURE_SUCCESS(NS_OpenURI(getter_AddRefs(channel), aURL, nsnull, loadGroup, this), NS_ERROR_FAILURE); + NS_ENSURE_SUCCESS(NS_NewChannel(getter_AddRefs(channel), aURL, nsnull, loadGroup, this), NS_ERROR_FAILURE); rv = pURILoader->OpenURI(channel, PR_FALSE, cntListener); diff --git a/mozilla/mailnews/imap/src/nsImapProtocol.cpp b/mozilla/mailnews/imap/src/nsImapProtocol.cpp index e4082f93158..d40dcc2200f 100644 --- a/mozilla/mailnews/imap/src/nsImapProtocol.cpp +++ b/mozilla/mailnews/imap/src/nsImapProtocol.cpp @@ -297,8 +297,8 @@ nsImapProtocol::nsImapProtocol() : m_inputStreamBuffer = new nsMsgLineStreamBuffer(OUTPUT_BUFFER_SIZE, PR_TRUE /* allocate new lines */, PR_FALSE /* leave CRLFs on the returned string */); m_currentBiffState = nsIMsgFolder::nsMsgBiffState_Unknown; + m_hostName.Truncate(); m_userName = nsnull; - m_hostName = nsnull; m_serverKey = nsnull; m_progressStringId = 0; @@ -386,8 +386,6 @@ nsImapProtocol::~nsImapProtocol() NS_IF_RELEASE(m_flagState); - nsCRT::free(m_hostName); - PR_FREEIF(m_dataOutputBuf); if (m_inputStreamBuffer) delete m_inputStreamBuffer; @@ -446,13 +444,13 @@ nsImapProtocol::~nsImapProtocol() const char* nsImapProtocol::GetImapHostName() { - if (m_runningUrl && !m_hostName) + if (m_runningUrl && m_hostName.IsEmpty()) { nsCOMPtr url = do_QueryInterface(m_runningUrl); - url->GetHost(&m_hostName); + url->GetAsciiHost(m_hostName); } - return m_hostName; + return m_hostName.get(); } const char* @@ -7281,10 +7279,10 @@ nsresult nsImapMockChannel::OpenCacheEntry() // need to go through mime... // Open a cache entry with key = url - nsXPIDLCString urlSpec; - m_url->GetSpec(getter_Copies(urlSpec)); + nsCAutoString urlSpec; + m_url->GetAsciiSpec(urlSpec); // for now, truncate of the query part so we don't duplicate urls in the cache... - char * anchor = PL_strrchr(urlSpec, '?'); + char * anchor = strrchr(urlSpec.get(), '?'); if (anchor) { // if we were trying to read a part, we failed - fall back and look for whole msg @@ -7296,7 +7294,7 @@ nsresult nsImapMockChannel::OpenCacheEntry() else mTryingToReadPart = PR_TRUE; } - return cacheSession->AsyncOpenCacheEntry(urlSpec, nsICache::ACCESS_READ_WRITE, this); + return cacheSession->AsyncOpenCacheEntry(urlSpec.get(), nsICache::ACCESS_READ_WRITE, this); } nsresult nsImapMockChannel::ReadFromMemCache(nsICacheEntryDescriptor *entry) diff --git a/mozilla/mailnews/imap/src/nsImapProtocol.h b/mozilla/mailnews/imap/src/nsImapProtocol.h index 4a9c42725ec..f9d27d58d7f 100644 --- a/mozilla/mailnews/imap/src/nsImapProtocol.h +++ b/mozilla/mailnews/imap/src/nsImapProtocol.h @@ -325,8 +325,8 @@ private: nsCOMPtr m_runningUrl; // the nsIImapURL that is currently running nsImapAction m_imapAction; // current imap action associated with this connnection... + nsCString m_hostName; char *m_userName; - char *m_hostName; char *m_serverKey; char *m_dataOutputBuf; nsMsgLineStreamBuffer * m_inputStreamBuffer; diff --git a/mozilla/mailnews/imap/src/nsImapServerResponseParser.cpp b/mozilla/mailnews/imap/src/nsImapServerResponseParser.cpp index 61047637312..82bfdfa5fbd 100644 --- a/mozilla/mailnews/imap/src/nsImapServerResponseParser.cpp +++ b/mozilla/mailnews/imap/src/nsImapServerResponseParser.cpp @@ -915,8 +915,11 @@ void nsImapServerResponseParser::mailbox(nsImapMailboxSpec *boxSpec) boxSpec->connection->GetCurrentUrl()->AllocateCanonicalPath(boxname, boxSpec->hierarchySeparator, &boxSpec->allocatedPathName); nsIURI * aURL = nsnull; boxSpec->connection->GetCurrentUrl()->QueryInterface(NS_GET_IID(nsIURI), (void **) &aURL); - if (aURL) - aURL->GetHost(&boxSpec->hostName); + if (aURL) { + nsCAutoString host; + aURL->GetHost(host); + boxSpec->hostName = ToNewCString(host); + } NS_IF_RELEASE(aURL); if (boxname) PL_strfree( boxname); @@ -2613,8 +2616,11 @@ nsImapMailboxSpec *nsImapServerResponseParser::CreateCurrentMailboxSpec(const ch nsIURI * aUrl = nsnull; nsresult rv = NS_OK; returnSpec->connection->GetCurrentUrl()->QueryInterface(NS_GET_IID(nsIURI), (void **) &aUrl); - if (NS_SUCCEEDED(rv) && aUrl) - aUrl->GetHost(&returnSpec->hostName); + if (NS_SUCCEEDED(rv) && aUrl) { + nsCAutoString host; + aUrl->GetHost(host); + returnSpec->hostName = ToNewCString(host); + } NS_IF_RELEASE(aUrl); } diff --git a/mozilla/mailnews/imap/src/nsImapService.cpp b/mozilla/mailnews/imap/src/nsImapService.cpp index 3442eae164c..ba6ddbf749b 100644 --- a/mozilla/mailnews/imap/src/nsImapService.cpp +++ b/mozilla/mailnews/imap/src/nsImapService.cpp @@ -427,7 +427,7 @@ nsImapService::SelectFolder(nsIEventQueue * aClientEventQueue, urlSpec.Append("/select>"); urlSpec.Append(char(hierarchySeparator)); urlSpec.Append((const char *) folderName); - rv = mailNewsUrl->SetSpec(urlSpec.get()); + rv = mailNewsUrl->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, @@ -477,10 +477,9 @@ nsImapService::LiteSelectFolder(nsIEventQueue * aClientEventQueue, nsXPIDLCString folderName; GetFolderName(aImapMailFolder, getter_Copies(folderName)); urlSpec.Append((const char *) folderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) - rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, - nsnull, aURL); + rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); } } // if we have a url to run.... @@ -518,9 +517,7 @@ NS_IMETHODIMP nsImapService::GetUrlForUri(const char *aMessageURI, nsIURI **aURL } nsCOMPtr url = do_QueryInterface(imapUrl); - nsXPIDLCString currentSpec; - url->GetSpec(getter_Copies(currentSpec)); - urlSpec.Assign(currentSpec); + url->GetSpec(urlSpec); urlSpec.Append("fetch>"); urlSpec.Append(uidString); @@ -532,7 +529,7 @@ NS_IMETHODIMP nsImapService::GetUrlForUri(const char *aMessageURI, nsIURI **aURL urlSpec.Append((const char *) folderName); urlSpec.Append(">"); urlSpec.Append(msgKey); - rv = url->SetSpec(urlSpec.get()); + rv = url->SetSpec(urlSpec); imapUrl->QueryInterface(NS_GET_IID(nsIURI), (void **) aURL); } } @@ -606,7 +603,7 @@ NS_IMETHODIMP nsImapService::OpenAttachment(const char *aContentType, { nsCOMPtr mailUrl (do_QueryInterface(imapUrl)); if (mailUrl) - mailUrl->SetFileName(aFileName); + mailUrl->SetFileName(nsDependentCString(aFileName)); rv = FetchMimePart(imapUrl, nsIImapUrl::nsImapOpenMimePart, folder, imapMessageSink, nsnull, aDisplayConsumer, msgKey, uriMimePart); } @@ -790,10 +787,8 @@ nsresult nsImapService::FetchMimePart(nsIImapUrl * aImapUrl, rv = aImapUrl->SetImapMessageSink(aImapMessage); if (NS_SUCCEEDED(rv)) { - nsXPIDLCString currentSpec; nsCOMPtr url = do_QueryInterface(aImapUrl); - url->GetSpec(getter_Copies(currentSpec)); - urlSpec.Assign(currentSpec); + url->GetSpec(urlSpec); PRUnichar hierarchySeparator = GetHierarchyDelimiter(aImapMailFolder); @@ -819,7 +814,7 @@ nsresult nsImapService::FetchMimePart(nsIImapUrl * aImapUrl, // mscott - this cast to a char * is okay...there's a bug in the XPIDL // compiler that is preventing in string parameters from showing up as // const char *. hopefully they will fix it soon. - rv = url->SetSpec(urlSpec.get()); + rv = url->SetSpec(urlSpec); rv = aImapUrl->SetImapAction(actionToUse /* nsIImapUrl::nsImapMsgFetch */); if (aImapMailFolder && aDisplayConsumer) @@ -1033,7 +1028,7 @@ NS_IMETHODIMP nsImapService::Search(nsIMsgSearchSession *aSearchSession, nsIMsgW char *search_cmd = nsEscape((char *)aSearchUri, url_XAlphas); urlSpec.Append(search_cmd); nsCRT::free(search_cmd); - rv = mailNewsUrl->SetSpec(urlSpec.get()); + rv = mailNewsUrl->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) { nsCOMPtr queue; @@ -1163,7 +1158,6 @@ nsImapService::FetchMessage(nsIImapUrl * aImapUrl, return NS_ERROR_NULL_POINTER; nsresult rv = NS_OK; - nsXPIDLCString currentSpec; nsCOMPtr url = do_QueryInterface(aImapUrl); if (WeAreOffline()) { @@ -1193,8 +1187,7 @@ nsImapService::FetchMessage(nsIImapUrl * aImapUrl, rv = SetImapUrlSink(aImapMailFolder, aImapUrl); rv = aImapUrl->SetImapMessageSink(aImapMessage); - url->GetSpec(getter_Copies(currentSpec)); - urlSpec.Assign(currentSpec); + url->GetSpec(urlSpec); PRUnichar hierarchySeparator = GetHierarchyDelimiter(aImapMailFolder); @@ -1218,7 +1211,7 @@ nsImapService::FetchMessage(nsIImapUrl * aImapUrl, // mscott - this cast to a char * is okay...there's a bug in the XPIDL // compiler that is preventing in string parameters from showing up as // const char *. hopefully they will fix it soon. - rv = url->SetSpec(urlSpec.get()); + rv = url->SetSpec(urlSpec); rv = aImapUrl->SetImapAction(aImapAction); if (aImapMailFolder && aDisplayConsumer) @@ -1348,7 +1341,7 @@ nsImapService::CreateStartOfImapUrl(const char * aImapURI, nsIImapUrl ** imapUrl // mscott - this cast to a char * is okay...there's a bug in the XPIDL // compiler that is preventing in string parameters from showing up as // const char *. hopefully they will fix it soon. - rv = mailnewsUrl->SetSpec(urlSpec.get()); + rv = mailnewsUrl->SetSpec(urlSpec); hierarchyDelimiter = kOnlineHierarchySeparatorUnknown; nsCOMPtr imapFolder = do_QueryInterface(aImapMailFolder); @@ -1406,7 +1399,7 @@ nsImapService::GetHeaders(nsIEventQueue * aClientEventQueue, urlSpec.Append((const char *) folderName); urlSpec.Append(">"); urlSpec.Append(messageIdentifierList); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, @@ -1453,7 +1446,7 @@ nsImapService::Noop(nsIEventQueue * aClientEventQueue, GetFolderName(aImapMailFolder, getter_Copies(folderName)); urlSpec.Append((const char *) folderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); @@ -1499,7 +1492,7 @@ nsImapService::Expunge(nsIEventQueue * aClientEventQueue, GetFolderName(aImapMailFolder, getter_Copies(folderName)); urlSpec.Append((const char *) folderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); @@ -1548,7 +1541,7 @@ nsImapService::Biff(nsIEventQueue * aClientEventQueue, urlSpec.Append((const char *) folderName); urlSpec.Append(">"); urlSpec.AppendInt(uidHighWater, 10); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); @@ -1589,7 +1582,7 @@ nsImapService::DeleteFolder(nsIEventQueue* eventQueue, if (NS_SUCCEEDED(rv)) { urlSpec.Append((const char *) folderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) { rv = GetImapConnectionAndLoadUrl(eventQueue, imapUrl, @@ -1646,7 +1639,7 @@ nsImapService::DeleteMessages(nsIEventQueue * aClientEventQueue, urlSpec.Append((const char *) folderName); urlSpec.Append(">"); urlSpec.Append(messageIdentifierList); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); @@ -1690,7 +1683,7 @@ nsImapService::DeleteAllMessages(nsIEventQueue * aClientEventQueue, nsXPIDLCString folderName; GetFolderName(aImapMailFolder, getter_Copies(folderName)); urlSpec.Append((const char *) folderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); @@ -1789,7 +1782,7 @@ nsresult nsImapService::DiddleFlags(nsIEventQueue * aClientEventQueue, urlSpec.Append(messageIdentifierList); urlSpec.Append('>'); urlSpec.AppendInt(flags, 10); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); @@ -1883,7 +1876,7 @@ nsImapService::DiscoverAllFolders(nsIEventQueue* aClientEventQueue, mailnewsurl->SetMsgWindow(aMsgWindow); urlSpec.Append("/discoverallboxes"); nsCOMPtr url = do_QueryInterface(imapUrl, &rv); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); @@ -1919,7 +1912,7 @@ nsImapService::DiscoverAllAndSubscribedFolders(nsIEventQueue* aClientEventQueue, nsCOMPtr uri = do_QueryInterface(aImapUrl); urlSpec.Append("/discoverallandsubscribedboxes"); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, aImapUrl, nsnull, aURL); @@ -1963,7 +1956,7 @@ nsImapService::DiscoverChildren(nsIEventQueue* aClientEventQueue, // mscott - this cast to a char * is okay...there's a bug in the XPIDL // compiler that is preventing in string parameters from showing up as // const char *. hopefully they will fix it soon. - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); // Make sure the uri has the same hierarchy separator as the one in msg folder // obj if it's not kOnlineHierarchySeparatorUnknown (ie, '^'). @@ -2021,7 +2014,7 @@ nsImapService::DiscoverLevelChildren(nsIEventQueue* aClientEventQueue, urlSpec.Append(char(hierarchySeparator)); // hierarchySeparator "/" urlSpec.Append(folderPath); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, aImapUrl, @@ -2112,7 +2105,7 @@ nsImapService::OnlineMessageCopy(nsIEventQueue* aClientEventQueue, GetFolderName(aDstFolder, getter_Copies(folderName)); urlSpec.Append((const char *) folderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, aURL); @@ -2292,7 +2285,7 @@ nsImapService::AppendMessageFromFile(nsIEventQueue* aClientEventQueue, urlSpec.Append(messageId); } - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (WeAreOffline()) { return OfflineAppendFromFile(aFileSpec, uri, aDstFolder, messageId, inSelectedState, aListener, aURL, aCopyState); @@ -2387,7 +2380,7 @@ nsImapService::MoveFolder(nsIEventQueue* eventQueue, nsIMsgFolder* srcFolder, urlSpec.Append(hierarchySeparator); urlSpec.Append((const char *) folderName); } - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) { GetFolderName(srcFolder, getter_Copies(folderName)); @@ -2454,7 +2447,7 @@ nsImapService::RenameLeaf(nsIEventQueue* eventQueue, nsIMsgFolder* srcFolder, nsCRT::free(escapedNewName); nsCRT::free(utfNewName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) { rv = GetImapConnectionAndLoadUrl(eventQueue, imapUrl, @@ -2506,7 +2499,7 @@ nsImapService::CreateFolder(nsIEventQueue* eventQueue, nsIMsgFolder* parent, nsCRT::free(escapedFolderName); nsCRT::free(utfNewName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(eventQueue, imapUrl, nsnull, @@ -2554,7 +2547,7 @@ nsImapService::EnsureFolderExists(nsIEventQueue* eventQueue, nsIMsgFolder* paren nsCRT::free(escapedFolderName); nsCRT::free(utfNewName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(eventQueue, imapUrl, nsnull, @@ -2596,7 +2589,7 @@ nsImapService::ListFolder(nsIEventQueue* aClientEventQueue, if ((const char *) folderName && strlen(folderName) > 0) { urlSpec.Append((const char *) folderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, nsnull, @@ -3157,14 +3150,10 @@ char *CreateIMAPListFolderURL(const char *imapHost, const char *mailboxName, cha #endif -NS_IMETHODIMP nsImapService::GetScheme(char * *aScheme) +NS_IMETHODIMP nsImapService::GetScheme(nsACString &aScheme) { - nsresult rv = NS_OK; - if (aScheme) - *aScheme = nsCRT::strdup("imap"); - else - rv = NS_ERROR_NULL_POINTER; - return rv; + aScheme = "imap"; + return NS_OK; } NS_IMETHODIMP nsImapService::GetDefaultPort(PRInt32 *aDefaultPort) @@ -3234,7 +3223,7 @@ nsresult nsImapService::CreateSubscribeURI(nsIMsgIncomingServer *server, char *f char *escapedFolderName = nsEscape(folderName, url_Path); urlSpec.Append(escapedFolderName); nsCRT::free(escapedFolderName); - rv = (*retURI)->SetSpec(urlSpec.get()); + rv = (*retURI)->SetSpec(urlSpec); } } @@ -3246,29 +3235,24 @@ nsresult nsImapService::CreateSubscribeURI(nsIMsgIncomingServer *server, char *f // a shared imap folder. nsresult nsImapService::GetServerFromUrl(nsIImapUrl *aImapUrl, nsIMsgIncomingServer **aServer) { - nsXPIDLCString userName; - nsXPIDLCString hostName; + nsCAutoString userPass; + nsCAutoString hostName; nsXPIDLCString folderName; - nsXPIDLCString urlPath; nsCOMPtr mailnewsUrl = do_QueryInterface(aImapUrl); // extract the user name and host name information... - nsresult rv = mailnewsUrl->GetHost(getter_Copies(hostName)); - NS_ENSURE_SUCCESS(rv, rv); - rv = mailnewsUrl->GetPreHost(getter_Copies(userName)); - NS_ENSURE_SUCCESS(rv, rv); - - if ((const char *) userName) - { - char *unescapedUserName = nsCRT::strdup(userName); - nsUnescape(unescapedUserName); - userName.Adopt(unescapedUserName); - } + nsresult rv = mailnewsUrl->GetAsciiHost(hostName); + if (NS_FAILED(rv)) return rv; + rv = mailnewsUrl->GetUserPass(userPass); + if (NS_FAILED(rv)) return rv; + if (!userPass.IsEmpty()) + NS_UnescapeURL(userPass); // hopefully we're not unescaping ':' or nasty control chars + // if we can't get a folder name out of the url then I think this is an error aImapUrl->CreateCanonicalSourceFolderPathString(getter_Copies(folderName)); if (folderName.IsEmpty()) - rv = mailnewsUrl->GetFileName(getter_Copies(folderName)); + rv = mailnewsUrl->GetFileName(folderName); if (NS_FAILED(rv)) return rv; @@ -3277,8 +3261,7 @@ nsresult nsImapService::GetServerFromUrl(nsIImapUrl *aImapUrl, nsIMsgIncomingSer if (NS_FAILED(rv)) return rv; - rv = accountManager->FindServer(userName, hostName, "imap", - aServer); + rv = accountManager->FindServer(userPass.get(), hostName.get(), "imap", aServer); // look for server with any user name, in case we're trying to subscribe // to a folder with some one else's user name like the following @@ -3286,7 +3269,7 @@ nsresult nsImapService::GetServerFromUrl(nsIImapUrl *aImapUrl, nsIMsgIncomingSer if (NS_FAILED(rv) || !aServer) { - rv = accountManager->FindServer("", hostName, "imap", aServer); + rv = accountManager->FindServer("", hostName.get(), "imap", aServer); if (*aServer) aImapUrl->SetExternalLinkUrl(PR_TRUE); } @@ -3297,7 +3280,10 @@ nsresult nsImapService::GetServerFromUrl(nsIImapUrl *aImapUrl, nsIMsgIncomingSer return rv; } -NS_IMETHODIMP nsImapService::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **_retval) +NS_IMETHODIMP nsImapService::NewURI(const nsACString &aSpec, + const char *aOriginCharset, // ignored + nsIURI *aBaseURI, + nsIURI **_retval) { nsCOMPtr aImapUrl; nsresult rv = nsComponentManager::CreateInstance(kImapUrlCID, nsnull, NS_GET_IID(nsIImapUrl), getter_AddRefs(aImapUrl)); @@ -3305,32 +3291,18 @@ NS_IMETHODIMP nsImapService::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI { // now extract lots of fun information... nsCOMPtr mailnewsUrl = do_QueryInterface(aImapUrl); - nsCAutoString unescapedSpec(aSpec); + //nsCAutoString unescapedSpec(aSpec); // nsUnescape(NS_CONST_CAST(char*, unescapedSpec.get())); - mailnewsUrl->SetSpec(unescapedSpec.get()); // set the url spec... + mailnewsUrl->SetSpec(aSpec); // set the url spec... - nsXPIDLCString userName; - nsXPIDLCString hostName; nsXPIDLCString folderName; nsXPIDLCString urlPath; PRBool possibleOtherUsersFolder = PR_FALSE; - - // extract the user name and host name information... - rv = mailnewsUrl->GetHost(getter_Copies(hostName)); - if (NS_FAILED(rv)) return rv; - rv = mailnewsUrl->GetPreHost(getter_Copies(userName)); - if (NS_FAILED(rv)) return rv; - if ((const char *) userName) - { - char *unescapedUserName = nsCRT::strdup(userName); - nsUnescape(unescapedUserName); - userName.Adopt(unescapedUserName); - } // if we can't get a folder name out of the url then I think this is an error aImapUrl->CreateCanonicalSourceFolderPathString(getter_Copies(folderName)); if (folderName.IsEmpty()) - rv = mailnewsUrl->GetFileName(getter_Copies(folderName)); + rv = mailnewsUrl->GetFileName(folderName); if (NS_FAILED(rv)) return rv; @@ -3422,13 +3394,9 @@ NS_IMETHODIMP nsImapService::NewChannel(nsIURI *aURI, nsIChannel **_retval) imapUrl->CreateCanonicalSourceFolderPathString(getter_Copies(folderName)); if (folderName.IsEmpty()) { - rv = mailnewsUrl->GetFileName(getter_Copies(folderName)); + rv = mailnewsUrl->GetFileName(folderName); if (!folderName.IsEmpty()) - { - char *unescapedFolderName = nsCRT::strdup(folderName.get()); - nsUnescape(unescapedFolderName); - folderName.Adopt(unescapedFolderName); - } + NS_UnescapeURL(folderName); } // if the parent is null, then the folder doesn't really exist, so see if the user // wants to subscribe to it./ @@ -3447,15 +3415,15 @@ NS_IMETHODIMP nsImapService::NewChannel(nsIURI *aURI, nsIChannel **_retval) } aFolder->GetParent(getter_AddRefs(parent)); nsXPIDLCString serverKey; - nsXPIDLCString userName; - rv = mailnewsUrl->GetPreHost(getter_Copies(userName)); + nsCAutoString userPass; + rv = mailnewsUrl->GetUserPass(userPass); server->GetKey(getter_Copies(serverKey)); char *fullFolderName = nsnull; if (parent) fullFolderName = ToNewCString(folderName); if (!parent && !folderName.IsEmpty())// check if this folder is another user's folder { - fullFolderName = nsIMAPNamespaceList::GenerateFullFolderNameWithDefaultNamespace(serverKey.get(), folderName.get(), userName.get(), kOtherUsersNamespace, nsnull); + fullFolderName = nsIMAPNamespaceList::GenerateFullFolderNameWithDefaultNamespace(serverKey.get(), folderName.get(), userPass.get(), kOtherUsersNamespace, nsnull); // if this is another user's folder, let's see if we're already subscribed to it. rv = rootFolder->FindSubFolder(fullFolderName, getter_AddRefs(aFolder)); if (aFolder) @@ -3493,10 +3461,6 @@ NS_IMETHODIMP nsImapService::NewChannel(nsIURI *aURI, nsIChannel **_retval) if (imapServer) { nsCOMPtr subscribeURI; - nsXPIDLCString serverKey; - nsXPIDLCString userName; - rv = mailnewsUrl->GetPreHost(getter_Copies(userName)); - server->GetKey(getter_Copies(serverKey)); // now we have the real folder name to try to subscribe to. Let's try running // a subscribe url and returning that as the uri we've created. // We need to convert this to unicode because that's what subscribe wants :-( @@ -3847,7 +3811,7 @@ nsImapService::SubscribeFolder(nsIEventQueue* eventQueue, urlSpec.Append(escapedFolderName); nsCRT::free(escapedFolderName); nsCRT::free(utfFolderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(eventQueue, imapUrl, nsnull, url); @@ -3886,7 +3850,7 @@ nsImapService::UnsubscribeFolder(nsIEventQueue* eventQueue, urlSpec.Append(escapedFolderName); nsCRT::free(escapedFolderName); nsCRT::free(utfFolderName); - rv = uri->SetSpec(urlSpec.get()); + rv = uri->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(eventQueue, imapUrl, nsnull, url); @@ -3929,7 +3893,7 @@ nsImapService::GetFolderAdminUrl(nsIEventQueue *aClientEventQueue, urlSpec.Append("/refreshfolderurls>"); urlSpec.Append(char(hierarchySeparator)); urlSpec.Append((const char *) folderName); - rv = mailNewsUrl->SetSpec(urlSpec.get()); + rv = mailNewsUrl->SetSpec(urlSpec); if (NS_SUCCEEDED(rv)) rv = GetImapConnectionAndLoadUrl(aClientEventQueue, imapUrl, @@ -4058,14 +4022,12 @@ nsImapService::HandleContent(const char * aContentType, const char * aCommand, n request->Cancel(NS_BINDING_ABORTED); nsCOMPtr mediator(do_GetService(NS_WINDOWMEDIATOR_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); - nsXPIDLCString uriStr; + nsCAutoString uriStr; - uri->GetSpec(getter_Copies(uriStr)); + uri->GetSpec(uriStr); // imap uri's are unescaped, so unescape the url. - char *unescapedUri = nsCRT::strdup(uriStr.get()); - nsUnescape(unescapedUri); - uriStr.Adopt(unescapedUri); + NS_UnescapeURL(uriStr); nsCOMPtr messengerWindowService = do_GetService(NS_MESSENGERWINDOWSERVICE_CONTRACTID,&rv); NS_ENSURE_SUCCESS(rv, rv); diff --git a/mozilla/mailnews/imap/src/nsImapUrl.cpp b/mozilla/mailnews/imap/src/nsImapUrl.cpp index 16a5193f5c7..95e8275155f 100644 --- a/mozilla/mailnews/imap/src/nsImapUrl.cpp +++ b/mozilla/mailnews/imap/src/nsImapUrl.cpp @@ -310,7 +310,7 @@ NS_IMETHODIMP nsImapUrl::SetImapMiscellaneousSink(nsIImapMiscellaneousSink * // End nsIImapUrl specific support //////////////////////////////////////////////////////////////////////////////////// -NS_IMETHODIMP nsImapUrl::SetSpec(const char * aSpec) +NS_IMETHODIMP nsImapUrl::SetSpec(const nsACString &aSpec) { nsresult rv = nsMsgMailNewsUrl::SetSpec(aSpec); if (NS_SUCCEEDED(rv)) @@ -318,7 +318,7 @@ NS_IMETHODIMP nsImapUrl::SetSpec(const char * aSpec) return rv; } -NS_IMETHODIMP nsImapUrl::SetQuery(const char *aQuery) +NS_IMETHODIMP nsImapUrl::SetQuery(const nsACString &aQuery) { nsresult rv = nsMsgMailNewsUrl::SetQuery(aQuery); if (NS_SUCCEEDED(rv)) @@ -330,15 +330,14 @@ nsresult nsImapUrl::ParseUrl() { nsresult rv = NS_OK; // extract the user name - GetPreHost(getter_Copies(m_userName)); + GetUserPass(m_userName); - char * imapPartOfUrl = nsnull; - rv = GetPath(&imapPartOfUrl); - imapPartOfUrl = nsUnescape(imapPartOfUrl); - if (NS_SUCCEEDED(rv) && imapPartOfUrl && imapPartOfUrl+1) + nsCAutoString imapPartOfUrl; + rv = GetPath(imapPartOfUrl); + NS_UnescapeURL(imapPartOfUrl); + if (NS_SUCCEEDED(rv) && !imapPartOfUrl.IsEmpty()) { - ParseImapPart(imapPartOfUrl+1); // GetPath leaves leading '/' in the path!!! - nsCRT::free(imapPartOfUrl); + ParseImapPart((char*)imapPartOfUrl.get()+1); // GetPath leaves leading '/' in the path!!! } return NS_OK; @@ -1218,14 +1217,13 @@ NS_IMETHODIMP nsImapUrl::GetUri(char** aURI) CreateCanonicalSourceFolderPathString(getter_Copies(theFile)); nsCString fullFolderPath("/"); fullFolderPath += (const char *) m_userName; - char *hostName = nsnull; - rv = GetHost(&hostName); + nsCAutoString hostName; + rv = GetHost(hostName); fullFolderPath += '@'; fullFolderPath += hostName; fullFolderPath += '/'; fullFolderPath.Append(theFile); - PR_FREEIF(hostName); char * baseMessageURI; nsCreateImapBaseMessageURI(fullFolderPath.get(), &baseMessageURI); nsCAutoString uriStr; diff --git a/mozilla/mailnews/imap/src/nsImapUrl.h b/mozilla/mailnews/imap/src/nsImapUrl.h index b606385810e..fecad824857 100644 --- a/mozilla/mailnews/imap/src/nsImapUrl.h +++ b/mozilla/mailnews/imap/src/nsImapUrl.h @@ -60,8 +60,8 @@ public: NS_DECL_ISUPPORTS_INHERITED // nsIURI override - NS_IMETHOD SetSpec(const char * aSpec); - NS_IMETHOD SetQuery(const char * aQuery); + NS_IMETHOD SetSpec(const nsACString &aSpec); + NS_IMETHOD SetQuery(const nsACString &aQuery); ////////////////////////////////////////////////////////////////////////////// // we support the nsIImapUrl interface diff --git a/mozilla/mailnews/import/eudora/src/nsEudoraCompose.cpp b/mozilla/mailnews/import/eudora/src/nsEudoraCompose.cpp index a30ed43a7da..55a3dea5833 100644 --- a/mozilla/mailnews/import/eudora/src/nsEudoraCompose.cpp +++ b/mozilla/mailnews/import/eudora/src/nsEudoraCompose.cpp @@ -541,7 +541,7 @@ nsMsgAttachedFile * nsEudoraCompose::GetLocalAttachments( void) memset(a, 0, sizeof(nsMsgAttachedFile) * (count + 1)); nsresult rv; - char * urlStr; + nsXPIDLCString urlStr; ImportAttachment * pAttach; for (PRInt32 i = 0; i < count; i++) { @@ -553,14 +553,13 @@ nsMsgAttachedFile * nsEudoraCompose::GetLocalAttachments( void) pAttach = (ImportAttachment *) m_pAttachments->ElementAt( i); a[i].file_spec = new nsFileSpec; pAttach->pAttachment->GetFileSpec( a[i].file_spec); - urlStr = nsnull; - pAttach->pAttachment->GetURLString( &urlStr); + urlStr.Adopt(0); + pAttach->pAttachment->GetURLString(getter_Copies(urlStr)); if (!urlStr) { CleanUpAttach( a, count); return( nsnull); } - rv = m_pIOService->NewURI( urlStr, nsnull, getter_AddRefs(a[i].orig_url)); - nsCRT::free( urlStr); + rv = m_pIOService->NewURI( urlStr, nsnull, nsnull, getter_AddRefs(a[i].orig_url)); if (NS_FAILED( rv)) { CleanUpAttach( a, count); return( nsnull); diff --git a/mozilla/mailnews/import/outlook/src/nsOutlookCompose.cpp b/mozilla/mailnews/import/outlook/src/nsOutlookCompose.cpp index e1e024423d7..ea6fc0b8cfa 100644 --- a/mozilla/mailnews/import/outlook/src/nsOutlookCompose.cpp +++ b/mozilla/mailnews/import/outlook/src/nsOutlookCompose.cpp @@ -539,7 +539,7 @@ nsMsgAttachedFile * nsOutlookCompose::GetLocalAttachments( void) memset(a, 0, sizeof(nsMsgAttachedFile) * (count + 1)); nsresult rv; - char * urlStr; + nsXPIDLCString urlStr; OutlookAttachment * pAttach; for (PRInt32 i = 0; i < count; i++) { @@ -551,14 +551,13 @@ nsMsgAttachedFile * nsOutlookCompose::GetLocalAttachments( void) pAttach = (OutlookAttachment *) m_pAttachments->ElementAt( i); a[i].file_spec = new nsFileSpec; pAttach->pAttachment->GetFileSpec( a[i].file_spec); - urlStr = nsnull; - pAttach->pAttachment->GetURLString( &urlStr); + urlStr.Adopt(0); + pAttach->pAttachment->GetURLString(getter_Copies(urlStr)); if (!urlStr) { CleanUpAttach( a, count); return( nsnull); } - rv = m_pIOService->NewURI( urlStr, nsnull, getter_AddRefs(a[i].orig_url)); - nsCRT::free( urlStr); + rv = m_pIOService->NewURI( urlStr, nsnull, nsnull, getter_AddRefs(a[i].orig_url)); if (NS_FAILED( rv)) { CleanUpAttach( a, count); return( nsnull); diff --git a/mozilla/mailnews/import/src/nsImportAddressBooks.cpp b/mozilla/mailnews/import/src/nsImportAddressBooks.cpp index e695395861c..d9793b902c7 100644 --- a/mozilla/mailnews/import/src/nsImportAddressBooks.cpp +++ b/mozilla/mailnews/import/src/nsImportAddressBooks.cpp @@ -265,7 +265,7 @@ NS_IMETHODIMP nsImportGenericAddressBooks::GetData(const char *dataId, nsISuppor nsCOMPtr url; rv = nsComponentManager::CreateInstance( kStandardUrlCID, nsnull, NS_GET_IID(nsIURL), getter_AddRefs( url)); if (NS_SUCCEEDED( rv)) { - url->SetSpec( m_pDestinationUri); + url->SetSpec( nsDependentCString(m_pDestinationUri)); *_retval = url; NS_IF_ADDREF( *_retval); } @@ -358,7 +358,9 @@ NS_IMETHODIMP nsImportGenericAddressBooks::SetData( const char *dataId, nsISuppo if (m_pDestinationUri) nsCRT::free( m_pDestinationUri); m_pDestinationUri = nsnull; - url->GetSpec( &m_pDestinationUri); + nsCAutoString spec; + url->GetSpec(spec); + m_pDestinationUri = ToNewCString(spec); } } } diff --git a/mozilla/mailnews/local/src/nsLocalMailFolder.cpp b/mozilla/mailnews/local/src/nsLocalMailFolder.cpp index b808c36d2cd..5a2f9f25a1b 100644 --- a/mozilla/mailnews/local/src/nsLocalMailFolder.cpp +++ b/mozilla/mailnews/local/src/nsLocalMailFolder.cpp @@ -3012,20 +3012,20 @@ nsMsgLocalMailFolder::GetIncomingServerType() if (NS_FAILED(rv)) return ""; - rv = url->SetSpec(mURI); + rv = url->SetSpec(nsDependentCString(mURI)); if (NS_FAILED(rv)) return ""; - nsXPIDLCString userName; - rv = url->GetPreHost(getter_Copies(userName)); + nsCAutoString userPass; + rv = url->GetUserPass(userPass); if (NS_FAILED(rv)) return ""; - if ((const char *) userName) - nsUnescape(NS_CONST_CAST(char*,(const char*)userName)); + if (!userPass.IsEmpty()) + nsUnescape(NS_CONST_CAST(char*,userPass.get())); - nsXPIDLCString hostName; - rv = url->GetHost(getter_Copies(hostName)); + nsCAutoString hostName; + rv = url->GetAsciiHost(hostName); if (NS_FAILED(rv)) return ""; - if ((const char *) hostName) - nsUnescape(NS_CONST_CAST(char*,(const char*)hostName)); + if (!hostName.IsEmpty()) + nsUnescape(NS_CONST_CAST(char*,hostName.get())); nsCOMPtr accountManager = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); @@ -3034,8 +3034,8 @@ nsMsgLocalMailFolder::GetIncomingServerType() nsCOMPtr server; // try "none" first - rv = accountManager->FindServer(userName, - hostName, + rv = accountManager->FindServer(userPass.get(), + hostName.get(), "none", getter_AddRefs(server)); if (NS_SUCCEEDED(rv) && server) { @@ -3044,8 +3044,8 @@ nsMsgLocalMailFolder::GetIncomingServerType() } // next try "pop3" - rv = accountManager->FindServer(userName, - hostName, + rv = accountManager->FindServer(userPass.get(), + hostName.get(), "pop3", getter_AddRefs(server)); if (NS_SUCCEEDED(rv) && server) { @@ -3055,8 +3055,8 @@ nsMsgLocalMailFolder::GetIncomingServerType() #ifdef HAVE_MOVEMAIL // next try "movemail" - rv = accountManager->FindServer(userName, - hostName, + rv = accountManager->FindServer(userPass.get(), + hostName.get(), "movemail", getter_AddRefs(server)); if (NS_SUCCEEDED(rv) && server) { @@ -3084,9 +3084,9 @@ nsMsgLocalMailFolder::OnStartRunningUrl(nsIURI * aUrl) nsCOMPtr popurl = do_QueryInterface(aUrl, &rv); if (NS_SUCCEEDED(rv)) { - nsXPIDLCString aSpec; - aUrl->GetSpec(getter_Copies(aSpec)); - if (aSpec && strstr(aSpec.get(), "uidl=")) + nsCAutoString aSpec; + aUrl->GetSpec(aSpec); + if (strstr(aSpec.get(), "uidl=")) { nsCOMPtr popsink; rv = popurl->GetPop3Sink(getter_AddRefs(popsink)); @@ -3107,10 +3107,10 @@ nsMsgLocalMailFolder::OnStopRunningUrl(nsIURI * aUrl, nsresult aExitCode) if (NS_FAILED(rv)) return rv; nsCOMPtr msgWindow; rv = mailSession->GetTopmostMsgWindow(getter_AddRefs(msgWindow)); - nsXPIDLCString aSpec; - aUrl->GetSpec(getter_Copies(aSpec)); + nsCAutoString aSpec; + aUrl->GetSpec(aSpec); - if (strstr(aSpec, "uidl=")) + if (strstr(aSpec.get(), "uidl=")) { nsCOMPtr popurl = do_QueryInterface(aUrl, &rv); if (NS_SUCCEEDED(rv)) diff --git a/mozilla/mailnews/local/src/nsMailboxService.cpp b/mozilla/mailnews/local/src/nsMailboxService.cpp index c16af9a1e7b..2e8b254255b 100644 --- a/mozilla/mailnews/local/src/nsMailboxService.cpp +++ b/mozilla/mailnews/local/src/nsMailboxService.cpp @@ -96,9 +96,9 @@ nsresult nsMailboxService::ParseMailbox(nsIMsgWindow *aMsgWindow, nsFileSpec& aM nsFilePath filePath(aMailboxPath); // convert to file url representation... url->SetUpdatingFolder(PR_TRUE); url->SetMsgWindow(aMsgWindow); - char * urlSpec = PR_smprintf("mailbox://%s", (const char *) filePath); - url->SetSpec(urlSpec); - PR_FREEIF(urlSpec); + char *temp = PR_smprintf("mailbox://%s", (const char *) filePath); + url->SetSpec(nsDependentCString(temp)); + PR_Free(temp); mailboxurl->SetMailboxParser(aMailboxParser); if (aUrlListener) url->RegisterListener(aUrlListener); @@ -199,7 +199,7 @@ nsresult nsMailboxService::FetchMessage(const char* aMessageURI, i18nurl->SetCharsetOverRide(aCharsetOverride); if (aFileName) - msgUrl->SetFileName(aFileName); + msgUrl->SetFileName(nsDependentCString(aFileName)); // instead of running the mailbox url like we used to, let's try to run the url in the docshell... nsCOMPtr docShell(do_QueryInterface(aDisplayConsumer, &rv)); @@ -398,7 +398,7 @@ nsresult nsMailboxService::PrepareMessageUrl(const char * aSrcMsgMailboxURI, nsI urlSpec = PR_smprintf("mailbox://%s?number=%d", (const char *) filePath, msgKey); nsCOMPtr url = do_QueryInterface(*aMailboxUrl); - url->SetSpec(urlSpec); + url->SetSpec(nsDependentCString(urlSpec)); PR_FREEIF(urlSpec); (*aMailboxUrl)->SetMailboxAction(aMailboxAction); @@ -421,14 +421,10 @@ nsresult nsMailboxService::PrepareMessageUrl(const char * aSrcMsgMailboxURI, nsI return rv; } -NS_IMETHODIMP nsMailboxService::GetScheme(char * *aScheme) +NS_IMETHODIMP nsMailboxService::GetScheme(nsACString &aScheme) { - nsresult rv = NS_OK; - if (aScheme) - *aScheme = nsCRT::strdup("mailbox"); - else - rv = NS_ERROR_NULL_POINTER; - return rv; + aScheme = "mailbox"; + return NS_OK; } NS_IMETHODIMP nsMailboxService::GetDefaultPort(PRInt32 *aDefaultPort) @@ -454,11 +450,16 @@ NS_IMETHODIMP nsMailboxService::GetProtocolFlags(PRUint32 *result) return NS_OK; } -NS_IMETHODIMP nsMailboxService::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **_retval) +NS_IMETHODIMP nsMailboxService::NewURI(const nsACString &aSpec, + const char *aOriginCharset, + nsIURI *aBaseURI, + nsIURI **_retval) { nsCOMPtr aMsgUrl; nsresult rv = NS_OK; - if (PL_strstr(aSpec, "?uidl=") || PL_strstr(aSpec, "&uidl=")) + nsACString::const_iterator b, e; + if (FindInReadable(NS_LITERAL_CSTRING("?uidl="), aSpec.BeginReading(b), aSpec.EndReading(e)) || + FindInReadable(NS_LITERAL_CSTRING("&uidl="), aSpec.BeginReading(b), aSpec.EndReading(e))) { nsCOMPtr pop3Service = do_GetService(kCPop3ServiceCID, &rv); @@ -466,7 +467,7 @@ NS_IMETHODIMP nsMailboxService::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIU nsCOMPtr handler = do_QueryInterface(pop3Service, &rv); if (NS_SUCCEEDED(rv)) - rv = handler->NewURI(aSpec, aBaseURI, _retval); + rv = handler->NewURI(aSpec, aOriginCharset, aBaseURI, _retval); } else { @@ -478,7 +479,7 @@ NS_IMETHODIMP nsMailboxService::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIU if (NS_SUCCEEDED(rv)) { nsCOMPtr aUrl = do_QueryInterface(aMsgUrl); - aUrl->SetSpec((char *) aSpec); + aUrl->SetSpec(aSpec); aMsgUrl->QueryInterface(NS_GET_IID(nsIURI), (void **) _retval); } } diff --git a/mozilla/mailnews/local/src/nsMailboxUrl.cpp b/mozilla/mailnews/local/src/nsMailboxUrl.cpp index 6eee1f455c2..9aa54d41b65 100644 --- a/mozilla/mailnews/local/src/nsMailboxUrl.cpp +++ b/mozilla/mailnews/local/src/nsMailboxUrl.cpp @@ -373,20 +373,20 @@ NS_IMETHODIMP nsMailboxUrl::IsUrlType(PRUint32 type, PRBool *isType) nsresult nsMailboxUrl::ParseSearchPart() { - nsXPIDLCString searchPart; - nsresult rv = GetQuery(getter_Copies(searchPart)); + nsCAutoString searchPart; + nsresult rv = GetQuery(searchPart); // add code to this function to decompose everything past the '?'..... - if (NS_SUCCEEDED(rv) && searchPart) + if (NS_SUCCEEDED(rv) && !searchPart.IsEmpty()) { // the action for this mailbox must be a display message... - char * msgPart = extractAttributeValue(searchPart, "part="); + char * msgPart = extractAttributeValue(searchPart.get(), "part="); if (msgPart) // if we have a part in the url then we must be fetching just the part. m_mailboxAction = nsIMailboxUrl::ActionFetchPart; else m_mailboxAction = nsIMailboxUrl::ActionFetchMessage; - char * messageKey = extractAttributeValue(searchPart, "number="); - m_messageID = extractAttributeValue(searchPart,"messageid="); + char * messageKey = extractAttributeValue(searchPart.get(), "number="); + m_messageID = extractAttributeValue(searchPart.get(),"messageid="); if (messageKey) m_messageKey = atol(messageKey); // convert to a long... if (messageKey || m_messageID) @@ -405,7 +405,7 @@ nsresult nsMailboxUrl::ParseUrl() { if (m_filePath) delete m_filePath; - GetFilePath(getter_Copies(m_file)); + GetFilePath(m_file); ParseSearchPart(); // ### fix me. // this hack is to avoid asserting on every local message loaded because the security manager @@ -417,7 +417,7 @@ nsresult nsMailboxUrl::ParseUrl() return NS_OK; } -NS_IMETHODIMP nsMailboxUrl::SetSpec(const char * aSpec) +NS_IMETHODIMP nsMailboxUrl::SetSpec(const nsACString &aSpec) { nsresult rv = nsMsgMailNewsUrl::SetSpec(aSpec); if (NS_SUCCEEDED(rv)) @@ -425,7 +425,7 @@ NS_IMETHODIMP nsMailboxUrl::SetSpec(const char * aSpec) return rv; } -NS_IMETHODIMP nsMailboxUrl::SetQuery(const char *aQuery) +NS_IMETHODIMP nsMailboxUrl::SetQuery(const nsACString &aQuery) { nsresult rv = nsMsgMailNewsUrl::SetQuery(aQuery); if (NS_SUCCEEDED(rv)) diff --git a/mozilla/mailnews/local/src/nsMailboxUrl.h b/mozilla/mailnews/local/src/nsMailboxUrl.h index 9c31b013c33..6653c5e8e5b 100644 --- a/mozilla/mailnews/local/src/nsMailboxUrl.h +++ b/mozilla/mailnews/local/src/nsMailboxUrl.h @@ -50,8 +50,8 @@ class nsMailboxUrl : public nsIMailboxUrl, public nsMsgMailNewsUrl, public nsIMs { public: // nsIURI over-ride... - NS_IMETHOD SetSpec(const char * aSpec); - NS_IMETHOD SetQuery(const char * aQuery); + NS_IMETHOD SetSpec(const nsACString &aSpec); + NS_IMETHOD SetQuery(const nsACString &aQuery); // from nsIMailboxUrl: NS_IMETHOD GetMessageHeader(nsIMsgDBHdr ** aMsgHdr); diff --git a/mozilla/mailnews/local/src/nsParseMailbox.cpp b/mozilla/mailnews/local/src/nsParseMailbox.cpp index b443571d7d9..0fbabfb7333 100644 --- a/mozilla/mailnews/local/src/nsParseMailbox.cpp +++ b/mozilla/mailnews/local/src/nsParseMailbox.cpp @@ -114,28 +114,30 @@ NS_IMETHODIMP nsMsgMailboxParser::OnStartRequest(nsIRequest *request, nsISupport // okay, now fill in our event sinks...Note that each getter ref counts before // it returns the interface to us...we'll release when we are done - - char *fileName = nsnull; // may be shortened by NS_UnescapeURL - url->GetFilePath(&fileName); + + nsCAutoString fileName; // may be shortened by NS_UnescapeURL + url->GetFilePath(fileName); - char *folderName = nsnull; // may be shortened by NS_UnescapeURL - url->GetFileName(&folderName); - if (folderName) + nsCAutoString folderName; // may be shortened by NS_UnescapeURL + url->GetFileName(folderName); + if (!folderName.IsEmpty()) { NS_UnescapeURL(folderName); +#if 0 // convert from OS native charset to unicode - rv = ConvertToUnicode(nsMsgI18NFileSystemCharset(), folderName, m_folderName); + rv = ConvertToUnicode(nsMsgI18NFileSystemCharset(), folderName.get(), m_folderName); if (NS_FAILED(rv)) m_folderName.AssignWithConversion(folderName); - - nsMemory::Free(folderName); +#endif + // folderName is UTF-8 + m_folderName = NS_ConvertUTF8toUCS2(folderName.get()); } - if (fileName) + if (!fileName.IsEmpty()) { NS_UnescapeURL(fileName); - nsFilePath dbPath(fileName); + nsFilePath dbPath(fileName.get()); nsFileSpec dbName(dbPath); // the size of the mailbox file is our total base line for measuring progress @@ -154,9 +156,8 @@ NS_IMETHODIMP nsMsgMailboxParser::OnStartRequest(nsIRequest *request, nsISupport } NS_ASSERTION(m_mailDB, "failed to open mail db parsing folder"); #ifdef DEBUG_mscott - printf("url file = %s\n", fileName); + printf("url file = %s\n", fileName.get()); #endif - nsMemory::Free(fileName); } } diff --git a/mozilla/mailnews/local/src/nsPop3Protocol.cpp b/mozilla/mailnews/local/src/nsPop3Protocol.cpp index 8d04baa78ea..da044839d84 100644 --- a/mozilla/mailnews/local/src/nsPop3Protocol.cpp +++ b/mozilla/mailnews/local/src/nsPop3Protocol.cpp @@ -667,16 +667,16 @@ nsresult nsPop3Protocol::LoadUrl(nsIURI* aURL, nsISupports * /* aConsumer */) if (NS_FAILED(rv)) return rv; - nsXPIDLCString queryPart; - rv = url->GetQuery(getter_Copies(queryPart)); + nsCAutoString queryPart; + rv = url->GetQuery(queryPart); NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get the url spect"); - if (PL_strcasestr(queryPart, "check")) + if (PL_strcasestr(queryPart.get(), "check")) m_pop3ConData->only_check_for_new_mail = PR_TRUE; else m_pop3ConData->only_check_for_new_mail = PR_FALSE; - if (PL_strcasestr(queryPart, "gurl")) + if (PL_strcasestr(queryPart.get(), "gurl")) m_pop3ConData->get_url = PR_TRUE; else m_pop3ConData->get_url = PR_FALSE; @@ -726,7 +726,7 @@ nsresult nsPop3Protocol::LoadUrl(nsIURI* aURL, nsISupports * /* aConsumer */) m_pop3ConData->uidlinfo = net_pop3_load_state(hostName, userName, mailDirectory); m_pop3ConData->biffstate = nsIMsgFolder::nsMsgBiffState_NoMail; - const char* uidl = PL_strcasestr(queryPart, "uidl="); + const char* uidl = PL_strcasestr(queryPart.get(), "uidl="); PR_FREEIF(m_pop3ConData->only_uidl); if (uidl) @@ -1404,11 +1404,10 @@ PRInt32 nsPop3Protocol::GetFakeUidlTop(nsIInputStream* inputStream, m_pop3ConData->pause_for_read = PR_FALSE; // get the hostname first, convert to unicode - nsXPIDLCString hostName; - m_url->GetHost(getter_Copies(hostName)); + nsCAutoString hostName; + m_url->GetHost(hostName); - nsAutoString hostNameUnicode; - hostNameUnicode.AssignWithConversion(hostName); + NS_ConvertUTF8toUCS2 hostNameUnicode(hostName); const PRUnichar *formatStrings[] = { @@ -2396,14 +2395,11 @@ nsPop3Protocol::TopResponse(nsIInputStream* inputStream, PRUint32 length) mStringService->GetStringByID(POP3_SERVER_DOES_NOT_SUPPORT_THE_TOP_COMMAND, &statusTemplate); if (statusTemplate) { - nsXPIDLCString hostName; + nsCAutoString hostName; PRUnichar * statusString = nsnull; - m_url->GetHost(getter_Copies(hostName)); + m_url->GetHost(hostName); - if (hostName) - statusString = nsTextFormatter::smprintf(statusTemplate, (const char *) hostName); - else - statusString = nsTextFormatter::smprintf(statusTemplate, "(null)"); + statusString = nsTextFormatter::smprintf(statusTemplate, hostName.get()); UpdateStatusWithString(statusString); nsTextFormatter::smprintf_free(statusString); nsCRT::free(statusTemplate); diff --git a/mozilla/mailnews/local/src/nsPop3Service.cpp b/mozilla/mailnews/local/src/nsPop3Service.cpp index 369a056c69c..ac5c75f523f 100644 --- a/mozilla/mailnews/local/src/nsPop3Service.cpp +++ b/mozilla/mailnews/local/src/nsPop3Service.cpp @@ -232,7 +232,7 @@ nsresult nsPop3Service::BuildPop3Url(const char * urlSpec, rv = pop3Url->QueryInterface(NS_GET_IID(nsIURI), (void **) aUrl); NS_ENSURE_SUCCESS(rv,rv); - (*aUrl)->SetSpec(urlSpec); + (*aUrl)->SetSpec(nsDependentCString(urlSpec)); nsCOMPtr mailnewsurl = do_QueryInterface(pop3Url); if (mailnewsurl) @@ -287,14 +287,10 @@ nsresult nsPop3Service::RunPopUrl(nsIMsgIncomingServer * aServer, nsIURI * aUrlT } -NS_IMETHODIMP nsPop3Service::GetScheme(char * *aScheme) +NS_IMETHODIMP nsPop3Service::GetScheme(nsACString &aScheme) { - nsresult rv = NS_OK; - if (aScheme) - *aScheme = nsCRT::strdup("pop3"); - else - rv = NS_ERROR_NULL_POINTER; - return rv; + aScheme = "pop3"; + return NS_OK; } NS_IMETHODIMP nsPop3Service::GetDefaultPort(PRInt32 *aDefaultPort) @@ -325,10 +321,13 @@ NS_IMETHODIMP nsPop3Service::GetProtocolFlags(PRUint32 *result) return NS_OK; } -NS_IMETHODIMP nsPop3Service::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **_retval) +NS_IMETHODIMP nsPop3Service::NewURI(const nsACString &aSpec, + const char *aOriginCharset, // ignored + nsIURI *aBaseURI, + nsIURI **_retval) { nsresult rv = NS_ERROR_FAILURE; - if (!aSpec || !_retval) return rv; + if (!_retval) return rv; nsCAutoString folderUri(aSpec); nsCOMPtr resource; PRInt32 offset = folderUri.Find("?"); @@ -369,7 +368,7 @@ NS_IMETHODIMP nsPop3Service::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI popSpec += ":"; popSpec.AppendInt(port); popSpec += "?"; - const char *uidl = PL_strstr(aSpec, "uidl="); + const char *uidl = PL_strstr(PromiseFlatCString(aSpec).get(), "uidl="); if (!uidl) return NS_ERROR_FAILURE; popSpec += uidl; nsCOMPtr urlListener = do_QueryInterface(folder, &rv); @@ -384,7 +383,7 @@ NS_IMETHODIMP nsPop3Service::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI { // escape the username before we call SetUsername(). we do this because GetUsername() // will unescape the username - mailnewsurl->SetUsername((const char*) escapedUsername); + mailnewsurl->SetUsername(escapedUsername); } nsCOMPtr popurl = do_QueryInterface(mailnewsurl, &rv); if (NS_SUCCEEDED(rv)) @@ -417,14 +416,18 @@ NS_IMETHODIMP nsPop3Service::NewChannel(nsIURI *aURI, nsIChannel **_retval) delete protocol; return rv; } - nsXPIDLCString username; + nsCAutoString username; nsCOMPtr url = do_QueryInterface(aURI, &rv); if (NS_SUCCEEDED(rv) && url) { - // GetUsername() returns an unescaped username, and the protocol - // stores the username unescaped, so there is no need to escape or unescape anything - url->GetUsername(getter_Copies(username)); - protocol->SetUsername((const char *)username); + // GetUsername() returns an escaped username, and the protocol + // stores the username unescaped, so we must unescape the username. + // XXX this is of course very risky since the unescaped string may + // contain embedded nulls as well as characters from some unknown + // charset!! + url->GetUsername(username); + NS_UnescapeURL(username); + protocol->SetUsername(username.get()); } rv = protocol->QueryInterface(NS_GET_IID(nsIChannel), (void **) _retval); } diff --git a/mozilla/mailnews/local/src/nsPop3URL.h b/mozilla/mailnews/local/src/nsPop3URL.h index 94729fd1253..3ae50d3cd09 100644 --- a/mozilla/mailnews/local/src/nsPop3URL.h +++ b/mozilla/mailnews/local/src/nsPop3URL.h @@ -56,7 +56,7 @@ protected: virtual ~nsPop3URL(); // protocol specific code to parse a url... virtual nsresult ParseUrl(const nsString& aSpec); - virtual const char * GetUserName() { GetUsername(getter_Copies(m_userName)); return m_userName;} + virtual const char * GetUserName() { GetUsername(m_userName); return m_userName;} nsXPIDLCString m_userName; nsCString m_messageUri; diff --git a/mozilla/mailnews/mapi/mapihook/src/msgMapiHook.cpp b/mozilla/mailnews/mapi/mapihook/src/msgMapiHook.cpp index 7f94e896030..651e2746149 100644 --- a/mozilla/mailnews/mapi/mapihook/src/msgMapiHook.cpp +++ b/mozilla/mailnews/mapi/mapihook/src/msgMapiHook.cpp @@ -529,9 +529,9 @@ nsresult nsMapiHook::HandleAttachments (nsIMsgCompFields * aCompFields, PRInt32 if (NS_FAILED(rv) || (!attachment) ) return rv ; // set url - nsXPIDLCString pURL ; - NS_GetURLSpecFromFile(pFile, getter_Copies(pURL)); - attachment->SetUrl(pURL) ; + nsCAutoString pURL ; + NS_GetURLSpecFromFile(pFile, pURL); + attachment->SetUrl(pURL.get()) ; if (aFiles[i].lpszFileName) { @@ -690,9 +690,9 @@ nsresult nsMapiHook::PopulateCompFieldsForSendDocs(nsIMsgCompFields * aCompField rv = pFile->Exists(&bExist) ; if (NS_FAILED(rv) || (!bExist) ) return NS_ERROR_FILE_TARGET_DOES_NOT_EXIST ; - nsXPIDLCString pURL ; - NS_GetURLSpecFromFile(pFile, getter_Copies(pURL)); - if (pURL) + nsCAutoString pURL ; + NS_GetURLSpecFromFile(pFile, pURL); + if (!pURL.IsEmpty()) Attachments.Assign(pURL) ; // set attachments for comp field and return @@ -729,9 +729,9 @@ nsresult nsMapiHook::PopulateCompFieldsForSendDocs(nsIMsgCompFields * aCompField rv = pFile->Exists(&bExist) ; if (NS_FAILED(rv) || (!bExist) ) return NS_ERROR_FILE_TARGET_DOES_NOT_EXIST ; - nsXPIDLCString pURL ; - NS_GetURLSpecFromFile(pFile, getter_Copies(pURL)); - if (pURL) + nsCAutoString pURL ; + NS_GetURLSpecFromFile(pFile, pURL); + if (!pURL.IsEmpty()) { if (Attachments.Length() > 0) Attachments.Append(",") ; diff --git a/mozilla/mailnews/mime/src/mimedrft.cpp b/mozilla/mailnews/mime/src/mimedrft.cpp index 311281ca9eb..01688f6e776 100644 --- a/mozilla/mailnews/mime/src/mimedrft.cpp +++ b/mozilla/mailnews/mime/src/mimedrft.cpp @@ -180,11 +180,9 @@ mime_dump_attachments ( nsMsgAttachmentData *attachData ) if ( tmp->url ) { - char *spec = nsnull; - - tmp->url->GetSpec(&spec); - printf("URL : %s\n", spec); - PR_FREEIF(spec); + nsCAutoString spec; + tmp->url->GetSpec(spec); + printf("URL : %s\n", spec.get()); } printf("Desired Type : %s\n", tmp->desired_type); @@ -216,11 +214,11 @@ mime_dump_attachments ( attachmentList ); nsMsgAttachmentData *curAttachment = attachmentList; if (curAttachment) { - nsXPIDLCString spec; + nsCAutoString spec; while (curAttachment && curAttachment->real_name) //JFD: Why do we check for real_name? { - rv = curAttachment->url->GetSpec(getter_Copies(spec)); + rv = curAttachment->url->GetSpec(spec); if (NS_SUCCEEDED(rv)) { nsCOMPtr attachment = do_CreateInstance(NS_MSGATTACHMENT_CONTRACTID, &rv); @@ -554,13 +552,12 @@ mime_draft_process_attachments(mime_draft_data *mdd) if ( tmpFile->orig_url ) { - char *tmpSpec = nsnull; - if (NS_FAILED(tmpFile->orig_url->GetSpec(&tmpSpec))) + nsCAutoString tmpSpec; + if (NS_FAILED(tmpFile->orig_url->GetSpec(tmpSpec))) goto FAIL; - if (NS_FAILED(nsMimeNewURI(&(tmp->url), tmpSpec, nsnull))) + if (NS_FAILED(nsMimeNewURI(&(tmp->url), tmpSpec.get(), nsnull))) { - PR_FREEIF(tmpSpec); goto FAIL; } @@ -570,7 +567,7 @@ mime_draft_process_attachments(mime_draft_data *mdd) if (tmpFile->real_name) NS_MsgSACopy ( &(tmp->real_name), tmpFile->real_name ); else - NS_MsgSACopy ( &(tmp->real_name), tmpSpec ); + NS_MsgSACopy ( &(tmp->real_name), tmpSpec.get() ); } } @@ -1981,24 +1978,24 @@ mime_bridge_create_draft_stream( return nsnull; // first, convert the rdf msg uri into a url that represents the message... - nsXPIDLCString turl; - if (NS_FAILED(uri->GetSpec(getter_Copies(turl)))) + nsCAutoString turl; + if (NS_FAILED(uri->GetSpec(turl))) return nsnull; nsCOMPtr msgService; - nsresult rv = GetMessageServiceFromURI(turl, getter_AddRefs(msgService)); + nsresult rv = GetMessageServiceFromURI(turl.get(), getter_AddRefs(msgService)); if (NS_FAILED(rv)) return nsnull; nsCOMPtr aURL; - rv = msgService->GetUrlForUri(turl, getter_AddRefs(aURL), nsnull); + rv = msgService->GetUrlForUri(turl.get(), getter_AddRefs(aURL), nsnull); if (NS_FAILED(rv)) return nsnull; - nsXPIDLCString urlString; - if (NS_SUCCEEDED(aURL->GetSpec(getter_Copies(urlString)))) + nsCAutoString urlString; + if (NS_SUCCEEDED(aURL->GetSpec(urlString))) { - mdd->url_name = nsCRT::strdup(urlString); + mdd->url_name = ToNewCString(urlString); if (!(mdd->url_name)) { PR_FREEIF(mdd); diff --git a/mozilla/mailnews/mime/src/mimemoz2.cpp b/mozilla/mailnews/mime/src/mimemoz2.cpp index d38965b207f..e2b9e7178e0 100644 --- a/mozilla/mailnews/mime/src/mimemoz2.cpp +++ b/mozilla/mailnews/mime/src/mimemoz2.cpp @@ -596,8 +596,6 @@ NotifyEmittersOfAttachmentList(MimeDisplayOptions *opt, while (tmp->url) { - char *spec; - if (!tmp->real_name) { ++i; @@ -605,15 +603,12 @@ NotifyEmittersOfAttachmentList(MimeDisplayOptions *opt, continue; } - spec = nsnull; + nsCAutoString spec; if ( tmp->url ) - tmp->url->GetSpec(&spec); + tmp->url->GetSpec(spec); - mimeEmitterStartAttachment(opt, tmp->real_name, tmp->real_type, spec, tmp->notDownloaded); - mimeEmitterAddAttachmentField(opt, HEADER_X_MOZILLA_PART_URL, spec); - - if (spec) - nsMemory::Free(spec); + mimeEmitterStartAttachment(opt, tmp->real_name, tmp->real_type, spec.get(), tmp->notDownloaded); + mimeEmitterAddAttachmentField(opt, HEADER_X_MOZILLA_PART_URL, spec.get()); if ( (opt->format_out == nsMimeOutput::nsMimeMessageQuoting) || (opt->format_out == nsMimeOutput::nsMimeMessageBodyQuoting) || @@ -657,7 +652,7 @@ nsMimeNewURI(nsIURI** aInstancePtrResult, const char *aSpec, nsIURI *aBase) if (NS_FAILED(res)) return NS_ERROR_FACTORY_NOT_REGISTERED; - return pService->NewURI(aSpec, aBase, aInstancePtrResult); + return pService->NewURI(nsDependentCString(aSpec), nsnull, aBase, aInstancePtrResult); } extern "C" nsresult @@ -1099,9 +1094,6 @@ mime_image_begin(const char *image_url, const char *content_type, mailUrl->GetImageCacheSession(getter_AddRefs(memCacheSession)); if (memCacheSession) { - nsXPIDLCString spec; - - uri->GetSpec(getter_Copies(spec)); nsCOMPtr entry; // we may need to convert the image_url into just a part url - in any case, @@ -1470,17 +1462,17 @@ mime_bridge_create_display_stream( msd->firstCheck = PR_TRUE; // Store the URL string for this decode operation - char *urlString; + nsCAutoString urlString; nsresult rv; // Keep a hold of the channel... msd->channel = aChannel; - rv = uri->GetSpec(&urlString); + rv = uri->GetSpec(urlString); if (NS_SUCCEEDED(rv)) { - if ((urlString) && (*urlString)) + if (!urlString.IsEmpty()) { - msd->url_name = nsCRT::strdup(urlString); + msd->url_name = ToNewCString(urlString); if (!(msd->url_name)) { PR_FREEIF(msd); @@ -1489,7 +1481,6 @@ mime_bridge_create_display_stream( nsCOMPtr msgUrl = do_QueryInterface(uri); if (msgUrl) msgUrl->GetOriginalSpec(&msd->orig_url_name); - PR_FREEIF(urlString); } } diff --git a/mozilla/mailnews/mime/src/mimemrel.cpp b/mozilla/mailnews/mime/src/mimemrel.cpp index da261b7831d..cbf0788d291 100644 --- a/mozilla/mailnews/mime/src/mimemrel.cpp +++ b/mozilla/mailnews/mime/src/mimemrel.cpp @@ -398,18 +398,21 @@ MakeAbsoluteURL(char *base_url, char *relative_url) nsresult err = nsMimeNewURI(&base, base_url, nsnull); if (err != NS_OK) return nsnull; - + + nsCAutoString spec; + nsIURI *url = nsnull; err = nsMimeNewURI(&url, relative_url, base); if (err != NS_OK) goto done; - err = url->GetSpec(&retString); + err = url->GetSpec(spec); if (err) { retString = nsnull; goto done; } + retString = ToNewCString(spec); done: NS_IF_RELEASE(url); diff --git a/mozilla/mailnews/mime/src/nsStreamConverter.cpp b/mozilla/mailnews/mime/src/nsStreamConverter.cpp index ad471c17560..05c2edda945 100644 --- a/mozilla/mailnews/mime/src/nsStreamConverter.cpp +++ b/mozilla/mailnews/mime/src/nsStreamConverter.cpp @@ -227,20 +227,19 @@ bridge_new_new_uri(void *bridgeStream, nsIURI *aURI, PRInt32 aOutputType) } } } - char *urlString; - if (NS_SUCCEEDED(aURI->GetSpec(&urlString))) + nsCAutoString urlString; + if (NS_SUCCEEDED(aURI->GetSpec(urlString))) { - if ((urlString) && (*urlString)) + if (!urlString.IsEmpty()) { CRTFREEIF(*url_name); - *url_name = nsCRT::strdup(urlString); + *url_name = ToNewCString(urlString); if (!(*url_name)) return NS_ERROR_OUT_OF_MEMORY; // rhp: Ugh, this is ugly...but it works. if (fixup_pointer) *fixup_pointer = (const char *)*url_name; - CRTFREEIF(urlString); } } } @@ -568,9 +567,9 @@ NS_IMETHODIMP nsStreamConverter::Init(nsIURI *aURI, nsIStreamListener * aOutList if (!mAlreadyKnowOutputType) { - nsXPIDLCString urlSpec; - rv = aURI->GetSpec(getter_Copies(urlSpec)); - DetermineOutputFormat(urlSpec, &newType); + nsCAutoString urlSpec; + rv = aURI->GetSpec(urlSpec); + DetermineOutputFormat(urlSpec.get(), &newType); mAlreadyKnowOutputType = PR_TRUE; } else @@ -867,12 +866,11 @@ const char output[] = "\ \ "; - char *url = nsnull; - if (NS_FAILED(mURI->GetSpec(&url))) + nsCAutoString url; + if (NS_FAILED(mURI->GetSpec(url))) return NS_ERROR_FAILURE; - PR_snprintf(outBuf, sizeof(outBuf), output, url, url); - PR_FREEIF(url); + PR_snprintf(outBuf, sizeof(outBuf), output, url.get(), url.get()); if (mEmitter) mEmitter->Write(outBuf, strlen(outBuf), &written); diff --git a/mozilla/mailnews/news/src/nsNNTPProtocol.cpp b/mozilla/mailnews/news/src/nsNNTPProtocol.cpp index c2c6084fc56..6b241c64bab 100644 --- a/mozilla/mailnews/news/src/nsNNTPProtocol.cpp +++ b/mozilla/mailnews/news/src/nsNNTPProtocol.cpp @@ -468,12 +468,12 @@ NS_IMETHODIMP nsNNTPProtocol::Initialize(nsIURI * aURL, nsIMsgWindow *aMsgWindow } nsMsgProtocol::InitFromURI(aURL); - nsXPIDLCString userName; - rv = m_url->GetPreHost(getter_Copies(userName)); + nsCAutoString userPass; + rv = m_url->GetUserPass(userPass); NS_ENSURE_SUCCESS(rv,rv); - nsXPIDLCString hostName; - rv = m_url->GetHost(getter_Copies(hostName)); + nsCAutoString hostName; + rv = m_url->GetAsciiHost(hostName); NS_ENSURE_SUCCESS(rv,rv); nsCOMPtr accountManager = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); @@ -481,7 +481,7 @@ NS_IMETHODIMP nsNNTPProtocol::Initialize(nsIURI * aURL, nsIMsgWindow *aMsgWindow // find the server nsCOMPtr server; - rv = accountManager->FindServer((const char *)userName, (const char *)hostName, "nntp", + rv = accountManager->FindServer(userPass.get(), hostName.get(), "nntp", getter_AddRefs(server)); NS_ENSURE_SUCCESS(rv, NS_MSG_INVALID_OR_MISSING_SERVER); if (!server) return NS_MSG_INVALID_OR_MISSING_SERVER; @@ -932,13 +932,13 @@ nsresult nsNNTPProtocol::OpenCacheEntry() NS_ENSURE_SUCCESS(rv, rv); // Open a cache entry with key = url - nsXPIDLCString urlSpec; - mailnewsUrl->GetSpec(getter_Copies(urlSpec)); + nsCAutoString urlSpec; + mailnewsUrl->GetAsciiSpec(urlSpec); // for now, truncate of the query part so we don't duplicate urls in the cache... - char * anchor = PL_strrchr(urlSpec, '?'); + char * anchor = strrchr(urlSpec.get(), '?'); if (anchor) *anchor = '\0'; - return cacheSession->AsyncOpenCacheEntry(urlSpec, nsICache::ACCESS_READ_WRITE, this); + return cacheSession->AsyncOpenCacheEntry(urlSpec.get(), nsICache::ACCESS_READ_WRITE, this); } NS_IMETHODIMP nsNNTPProtocol::AsyncOpen(nsIStreamListener *listener, nsISupports *ctxt) @@ -1352,16 +1352,16 @@ nsNNTPProtocol::ParseURL(nsIURI * aURL, char ** aGroup, char ** aMessageID, } // get the file path part and store it as the group... - nsXPIDLCString fullPath; - rv = aURL->GetPath(getter_Copies(fullPath)); + nsCAutoString fullPath; + rv = aURL->GetPath(fullPath); NS_ENSURE_SUCCESS(rv,rv); - PR_LOG(NNTP,PR_LOG_ALWAYS,("(%p) fullPath = %s",this, (const char *)fullPath)); + PR_LOG(NNTP,PR_LOG_ALWAYS,("(%p) fullPath = %s",this, fullPath.get())); - if (fullPath.get() && fullPath.get()[0] == '/') - group = PL_strdup((const char *)fullPath+1); + if (fullPath.First() == '/') + group = nsCRT::strdup(fullPath.get()+1); else - group = PL_strdup((const char *)fullPath); + group = nsCRT::strdup(fullPath.get()); // more to do here, but for now, this works. // only escape if we are doing a search @@ -1441,16 +1441,16 @@ nsNNTPProtocol::ParseURL(nsIURI * aURL, char ** aGroup, char ** aMessageID, return NS_OK; } - nsXPIDLCString serverURI; + nsCAutoString serverURI; if (*aMessageID) { // if this is a message id, use the pre path (the server) for the folder uri. - rv = aURL->GetPrePath(getter_Copies(serverURI)); + rv = aURL->GetPrePath(serverURI); NS_ENSURE_SUCCESS(rv,rv); } else if (*aGroup) { if (PL_strchr(*aGroup,'*')) { - rv = aURL->GetPrePath(getter_Copies(serverURI)); + rv = aURL->GetPrePath(serverURI); NS_ENSURE_SUCCESS(rv,rv); } else { @@ -1458,7 +1458,7 @@ nsNNTPProtocol::ParseURL(nsIURI * aURL, char ** aGroup, char ** aMessageID, } } - if (serverURI.get() && serverURI.get()[0]) { + if (!serverURI.IsEmpty()) { // if we get here, we, we are either doing: // news://host/message-id or news://host/* // (but not news://host/message-id?cancel) diff --git a/mozilla/mailnews/news/src/nsNewsFolder.cpp b/mozilla/mailnews/news/src/nsNewsFolder.cpp index 40d04cf3a13..b9c6eb749e3 100644 --- a/mozilla/mailnews/news/src/nsNewsFolder.cpp +++ b/mozilla/mailnews/news/src/nsNewsFolder.cpp @@ -1251,12 +1251,11 @@ nsresult nsMsgNewsFolder::CreateNewsgroupUrlForSignon(const char *inUriStr, cons { nsresult rv; PRInt32 port = 0; - nsXPIDLCString spec; nsCOMPtr url = do_CreateInstance(NS_STANDARDURL_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv,rv); - rv = url->SetSpec(inUriStr); + rv = url->SetSpec(nsDependentCString(inUriStr)); if (NS_FAILED(rv)) return rv; rv = url->GetPort(&port); @@ -1280,11 +1279,15 @@ nsresult nsMsgNewsFolder::CreateNewsgroupUrlForSignon(const char *inUriStr, cons if (NS_FAILED(rv)) return rv; } - rv = url->SetRef(ref); + rv = url->SetRef(nsDependentCString(ref)); if (NS_FAILED(rv)) return rv; - rv = url->GetSpec(result); - return rv; + nsCAutoString spec; + rv = url->GetSpec(spec); + if (NS_FAILED(rv)) return rv; + + *result = ToNewCString(spec); + return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } NS_IMETHODIMP nsMsgNewsFolder::ForgetGroupUsername() diff --git a/mozilla/mailnews/news/src/nsNntpService.cpp b/mozilla/mailnews/news/src/nsNntpService.cpp index 9250646280d..8ebf4b9a53f 100644 --- a/mozilla/mailnews/news/src/nsNntpService.cpp +++ b/mozilla/mailnews/news/src/nsNntpService.cpp @@ -416,13 +416,13 @@ NS_IMETHODIMP nsNntpService::OpenAttachment(const char *aContentType, newsUrl += "&filename="; newsUrl += aFileName; - NewURI(newsUrl.get(), nsnull, getter_AddRefs(url)); + NewURI(newsUrl, nsnull, nsnull, getter_AddRefs(url)); if (NS_SUCCEEDED(rv) && url) { nsCOMPtr msgUrl (do_QueryInterface(url)); msgUrl->SetMsgWindow(aMsgWindow); - msgUrl->SetFileName(aFileName); + msgUrl->SetFileName(nsDependentCString(aFileName)); // set up the url listener if (aUrlListener) @@ -908,7 +908,7 @@ nsNntpService::PostMessage(nsIFileSpec *fileToPost, const char *newsgroupsNames, NS_ENSURE_SUCCESS(rv,rv); if (!mailnewsurl) return NS_ERROR_FAILURE; - mailnewsurl->SetSpec((const char *)newsUrlSpec); + mailnewsurl->SetSpec(newsUrlSpec); if (aUrlListener) // register listener if there is one... mailnewsurl->RegisterListener(aUrlListener); @@ -947,7 +947,7 @@ nsNntpService::ConstructNntpUrl(const char *urlString, nsIUrlListener *aUrlListe mailnewsurl->SetMsgWindow(aMsgWindow); nsCOMPtr msgUrl = do_QueryInterface(nntpUrl); msgUrl->SetUri(urlString); - mailnewsurl->SetSpec(urlString); + mailnewsurl->SetSpec(nsDependentCString(urlString)); nntpUrl->SetNewsAction(action); if (originalMessageUri) { @@ -1016,18 +1016,18 @@ nsNntpService::CreateNewsAccount(const char *username, const char *hostname, PRB nsresult nsNntpService::GetProtocolForUri(nsIURI *aUri, nsIMsgWindow *aMsgWindow, nsINNTPProtocol **aProtocol) { - nsXPIDLCString hostName; - nsXPIDLCString userName; - nsXPIDLCString scheme; - nsXPIDLCString path; + nsCAutoString hostName; + nsCAutoString userPass; + nsCAutoString scheme; + nsCAutoString path; PRInt32 port = 0; nsresult rv; - rv = aUri->GetHost(getter_Copies(hostName)); - rv = aUri->GetPreHost(getter_Copies(userName)); - rv = aUri->GetScheme(getter_Copies(scheme)); + rv = aUri->GetAsciiHost(hostName); + rv = aUri->GetUserPass(userPass); + rv = aUri->GetScheme(scheme); rv = aUri->GetPort(&port); - rv = aUri->GetPath(getter_Copies(path)); + rv = aUri->GetPath(path); nsCOMPtr accountManager = do_GetService(NS_MSGACCOUNTMANAGER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv,rv); @@ -1068,16 +1068,16 @@ nsNntpService::GetProtocolForUri(nsIURI *aUri, nsIMsgWindow *aMsgWindow, nsINNTP // // xxx todo what if we have two servers on the same host, but different ports? // or no port, but isSecure (snews:// vs news://) is different? - rv = accountManager->FindServer((const char *)userName, - (const char *)hostName, + rv = accountManager->FindServer(userPass.get(), + hostName.get(), "nntp", getter_AddRefs(server)); // if we didn't find the server, and path was "/", this is a news://group url - if (!server && !(nsCRT::strcmp("/",(const char *)path))) { + if (!server && !strcmp("/",path.get())) { // the uri was news://group and we want to turn that into news://host/group // step 1, set the path to be the hostName; - rv = aUri->SetPath((const char *)hostName); + rv = aUri->SetPath(hostName); NS_ENSURE_SUCCESS(rv,rv); // until we support default news servers, use the first nntp server we find @@ -1085,19 +1085,21 @@ nsNntpService::GetProtocolForUri(nsIURI *aUri, nsIMsgWindow *aMsgWindow, nsINNTP if (NS_FAILED(rv) || !server) { // step 2, set the uri's hostName and the local variable hostName // to be "news" - rv = aUri->SetHost("news"); + rv = aUri->SetHost(NS_LITERAL_CSTRING("news")); NS_ENSURE_SUCCESS(rv,rv); - rv = aUri->GetHost(getter_Copies(hostName)); + rv = aUri->GetAsciiHost(hostName); NS_ENSURE_SUCCESS(rv,rv); } else { // step 2, set the uri's hostName and the local variable hostName // to be the host name of the server we found - rv = server->GetHostName(getter_Copies(hostName)); + nsXPIDLCString hostBuf; + rv = server->GetHostName(getter_Copies(hostBuf)); NS_ENSURE_SUCCESS(rv,rv); - - rv = aUri->SetHost((const char *)hostName); + hostName = hostBuf; + + rv = aUri->SetHost(hostName); NS_ENSURE_SUCCESS(rv,rv); } } @@ -1110,7 +1112,7 @@ nsNntpService::GetProtocolForUri(nsIURI *aUri, nsIMsgWindow *aMsgWindow, nsINNTP port = SECURE_NEWS_PORT; } } - rv = CreateNewsAccount((const char *)userName,(const char *)hostName,isSecure,port,getter_AddRefs(server)); + rv = CreateNewsAccount(userPass.get(),hostName.get(),isSecure,port,getter_AddRefs(server)); } if (NS_FAILED(rv)) return rv; @@ -1121,8 +1123,8 @@ nsNntpService::GetProtocolForUri(nsIURI *aUri, nsIMsgWindow *aMsgWindow, nsINNTP if (!nntpServer || NS_FAILED(rv)) return rv; - nsXPIDLCString spec; - rv = aUri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = aUri->GetSpec(spec); // if this is a news-message:/ uri, decompose it and set hasMsgOffline on the uri if (!PL_strncmp(spec.get(), kNewsMessageRootURI, kNewsMessageRootURILen)) { @@ -1245,14 +1247,10 @@ nsNntpService::CancelMessage(const char *cancelURL, const char *messageURI, nsIS return rv; } -NS_IMETHODIMP nsNntpService::GetScheme(char * *aScheme) +NS_IMETHODIMP nsNntpService::GetScheme(nsACString &aScheme) { - nsresult rv = NS_OK; - if (aScheme) - *aScheme = nsCRT::strdup("news"); - else - rv = NS_ERROR_NULL_POINTER; - return rv; + aScheme = "news"; + return NS_OK; } NS_IMETHODIMP nsNntpService::GetDefaultDoBiff(PRBool *aDoBiff) @@ -1297,7 +1295,10 @@ NS_IMETHODIMP nsNntpService::GetProtocolFlags(PRUint32 *aUritype) return NS_OK; } -NS_IMETHODIMP nsNntpService::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **_retval) +NS_IMETHODIMP nsNntpService::NewURI(const nsACString &aSpec, + const char *aCharset, // ignored + nsIURI *aBaseURI, + nsIURI **_retval) { nsresult rv = NS_OK; diff --git a/mozilla/mailnews/news/src/nsNntpUrl.cpp b/mozilla/mailnews/news/src/nsNntpUrl.cpp index 97212016abc..ac332b3ee8e 100644 --- a/mozilla/mailnews/news/src/nsNntpUrl.cpp +++ b/mozilla/mailnews/news/src/nsNntpUrl.cpp @@ -93,7 +93,7 @@ NS_INTERFACE_MAP_END_INHERITING(nsMsgMailNewsUrl) //////////////////////////////////////////////////////////////////////////////////// // Begin nsINntpUrl specific support //////////////////////////////////////////////////////////////////////////////////// -NS_IMETHODIMP nsNntpUrl::SetSpec(const char * aSpec) +NS_IMETHODIMP nsNntpUrl::SetSpec(const nsACString &aSpec) { nsresult rv = nsMsgMailNewsUrl::SetSpec(aSpec); NS_ENSURE_SUCCESS(rv,rv); @@ -107,18 +107,18 @@ nsresult nsNntpUrl::DetermineNewsAction() { nsresult rv; - nsXPIDLCString path; - rv = nsMsgMailNewsUrl::GetPath(getter_Copies(path)); + nsCAutoString path; + rv = nsMsgMailNewsUrl::GetPath(path); NS_ENSURE_SUCCESS(rv,rv); - if (!nsCRT::strcmp(path,"/*")) { + if (!strcmp(path.get(),"/*")) { // news://news.mozilla.org/* // get all newsgroups on the server, for subscribe m_newsAction = nsINntpUrl::ActionListGroups; return NS_OK; } - if (!nsCRT::strcmp(path,"/")) { + if (!strcmp(path.get(),"/")) { // could be news:netscape.public.mozilla.mail-news or news://news.mozilla.org // news:netscape.public.mozilla.mail-news gets turned into news://netscape.public.mozilla.mail-news/ by nsStandardURL // news://news.mozilla.org gets turned in to news://news.mozilla.org/ by nsStandardURL @@ -154,7 +154,7 @@ nsresult nsNntpUrl::DetermineNewsAction() return NS_OK; } - if (PL_strchr(path.get(), '@') || PL_strstr(path.get(),"%40")) { + if (strchr(path.get(), '@') || strstr(path.get(),"%40")) { // news://news.mozilla.org/3B98D201.3020100@cs.com // news://news.mozilla.org/3B98D201.3020100%40cs.com m_newsAction = nsINntpUrl::ActionFetchArticle; @@ -211,10 +211,10 @@ NS_IMETHODIMP nsNntpUrl::GetUri(char ** aURI) // if we have been given a uri to associate with this url, then use it // otherwise try to reconstruct a URI on the fly.... if (mURI.IsEmpty()) { - nsXPIDLCString spec; - rv = GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = GetSpec(spec); NS_ENSURE_SUCCESS(rv,rv); - mURI = (const char *)spec; + mURI = spec; } *aURI = ToNewCString(mURI); diff --git a/mozilla/mailnews/news/src/nsNntpUrl.h b/mozilla/mailnews/news/src/nsNntpUrl.h index 9b4c3cabfaa..4819d922db6 100644 --- a/mozilla/mailnews/news/src/nsNntpUrl.h +++ b/mozilla/mailnews/news/src/nsNntpUrl.h @@ -52,7 +52,7 @@ public: NS_DECL_NSIMSGI18NURL // nsIURI over-ride... - NS_IMETHOD SetSpec(const char * aSpec); + NS_IMETHOD SetSpec(const nsACString &aSpec); NS_IMETHOD IsUrlType(PRUint32 type, PRBool *isType); diff --git a/mozilla/modules/libjar/nsIJARURI.idl b/mozilla/modules/libjar/nsIJARURI.idl index 30fe6ddedc5..407a0fe7487 100644 --- a/mozilla/modules/libjar/nsIJARURI.idl +++ b/mozilla/modules/libjar/nsIJARURI.idl @@ -18,6 +18,10 @@ #include "nsIURI.idl" +%{C++ +#include "nsAString.h" +%} + /** * JAR URLs have the following syntax * @@ -38,5 +42,5 @@ interface nsIJARURI : nsIURI { * Returns the entry specified for this JAR URI. * eg ocean.html */ - attribute string JAREntry; + attribute AUTF8String JAREntry; }; diff --git a/mozilla/modules/libjar/nsJARChannel.cpp b/mozilla/modules/libjar/nsJARChannel.cpp index cb43b44f887..e4b13d2b004 100644 --- a/mozilla/modules/libjar/nsJARChannel.cpp +++ b/mozilla/modules/libjar/nsJARChannel.cpp @@ -24,6 +24,7 @@ #include "nsCRT.h" #include "nsIFileTransportService.h" #include "nsIURI.h" +#include "nsIFileURL.h" #include "nsCExternalHandlerService.h" #include "nsIMIMEService.h" #include "nsAutoLock.h" @@ -65,7 +66,6 @@ nsJARChannel::nsJARChannel() : mLoadFlags(LOAD_NORMAL) , mContentType(nsnull) , mContentLength(-1) - , mJAREntry(nsnull) , mStatus(NS_OK) #ifdef DEBUG , mInitiator(nsnull) @@ -88,8 +88,6 @@ nsJARChannel::~nsJARChannel() { if (mContentType) nsCRT::free(mContentType); - if (mJAREntry) - nsCRT::free(mJAREntry); NS_IF_RELEASE(mJARProtocolHandler); } @@ -138,12 +136,10 @@ NS_IMETHODIMP nsJARChannel::GetName(PRUnichar* *result) { nsresult rv; - nsXPIDLCString urlStr; - rv = mURI->GetSpec(getter_Copies(urlStr)); + nsCAutoString urlStr; + rv = mURI->GetSpec(urlStr); if (NS_FAILED(rv)) return rv; - nsString name; - name.AppendWithConversion(urlStr); - *result = ToNewUnicode(name); + *result = ToNewUnicode(NS_ConvertUTF8toUCS2(urlStr)); return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } @@ -301,17 +297,17 @@ nsJARChannel::EnsureJARFileAvailable() #ifdef PR_LOGGING if (PR_LOG_TEST(gJarProtocolLog, PR_LOG_DEBUG)) { - nsXPIDLCString jarURLStr; - mURI->GetSpec(getter_Copies(jarURLStr)); + nsCAutoString jarURLStr; + mURI->GetSpec(jarURLStr); PR_LOG(gJarProtocolLog, PR_LOG_DEBUG, - ("nsJarProtocol: EnsureJARFileAvailable %s", (const char*)jarURLStr)); + ("nsJarProtocol: EnsureJARFileAvailable %s", jarURLStr.get())); } #endif rv = mURI->GetJARFile(getter_AddRefs(mJARBaseURI)); if (NS_FAILED(rv)) return rv; - rv = mURI->GetJAREntry(&mJAREntry); + rv = mURI->GetJAREntry(mJAREntry); if (NS_FAILED(rv)) return rv; // try to get a nsIFile directly from the url, which will often succeed. @@ -364,10 +360,10 @@ nsJARChannel::AsyncReadJARElement() #ifdef PR_LOGGING if (PR_LOG_TEST(gJarProtocolLog, PR_LOG_DEBUG)) { - nsXPIDLCString jarURLStr; - mURI->GetSpec(getter_Copies(jarURLStr)); + nsCAutoString jarURLStr; + mURI->GetSpec(jarURLStr); PR_LOG(gJarProtocolLog, PR_LOG_DEBUG, - ("nsJarProtocol: AsyncRead jar entry %s", (const char*)jarURLStr)); + ("nsJarProtocol: AsyncRead jar entry %s", jarURLStr.get())); } #endif @@ -396,36 +392,27 @@ nsJARChannel::GetContentType(char* *aContentType) { nsresult rv = NS_OK; if (mContentType == nsnull) { - if (!mJAREntry) - return NS_ERROR_FAILURE; - char* fileName = nsCRT::strdup(mJAREntry); - if (fileName != nsnull) { - PRInt32 len = strlen(fileName); - const char* ext = nsnull; - for (PRInt32 i = len-1; i >= 0; i--) { - if (fileName[i] == '.') { - ext = &fileName[i + 1]; - break; - } + if (mJAREntry.IsEmpty()) + return NS_ERROR_NOT_AVAILABLE; + const char *ext = nsnull, *fileName = mJAREntry.get(); + PRInt32 len = mJAREntry.Length(); + for (PRInt32 i = len-1; i >= 0; i--) { + if (fileName[i] == '.') { + ext = &fileName[i + 1]; + break; } - - if (ext) { - nsIMIMEService* mimeServ = mJARProtocolHandler->GetCachedMimeService(); - if (mimeServ) { - rv = mimeServ->GetTypeFromExtension(ext, &mContentType); - } - } - else - rv = NS_ERROR_OUT_OF_MEMORY; - - nsCRT::free(fileName); - } - else { - rv = NS_ERROR_OUT_OF_MEMORY; } + if (ext) { + nsIMIMEService* mimeServ = mJARProtocolHandler->GetCachedMimeService(); + if (mimeServ) { + rv = mimeServ->GetTypeFromExtension(ext, &mContentType); + } + } + else + rv = NS_ERROR_NOT_AVAILABLE; if (NS_FAILED(rv)) { - mContentType = nsCRT::strdup(UNKNOWN_CONTENT_TYPE); + mContentType = strdup(UNKNOWN_CONTENT_TYPE); if (mContentType == nsnull) rv = NS_ERROR_OUT_OF_MEMORY; else @@ -433,7 +420,7 @@ nsJARChannel::GetContentType(char* *aContentType) } } if (NS_SUCCEEDED(rv)) { - *aContentType = nsCRT::strdup(mContentType); + *aContentType = strdup(mContentType); if (*aContentType == nsnull) rv = NS_ERROR_OUT_OF_MEMORY; } @@ -496,7 +483,7 @@ nsJARChannel::GetOwner(nsISupports* *aOwner) nsCOMPtr jar = do_QueryInterface(mJAR, &rv); NS_ASSERTION(NS_SUCCEEDED(rv), "Zip reader is not an nsIJAR"); nsCOMPtr certificate; - rv = jar->GetCertificatePrincipal(mJAREntry, + rv = jar->GetCertificatePrincipal(mJAREntry.get(), getter_AddRefs(certificate)); if (NS_FAILED(rv)) return rv; if (certificate) @@ -598,12 +585,12 @@ nsJARChannel::OnStopRequest(nsIRequest* jarExtractionTransport, nsISupports* con #ifdef PR_LOGGING if (PR_LOG_TEST(gJarProtocolLog, PR_LOG_DEBUG)) { nsCOMPtr jarURI; - nsXPIDLCString jarURLStr; - rv = mURI->GetSpec(getter_Copies(jarURLStr)); + nsCAutoString jarURLStr; + rv = mURI->GetSpec(jarURLStr); if (NS_SUCCEEDED(rv)) { PR_LOG(gJarProtocolLog, PR_LOG_DEBUG, ("nsJarProtocol: jar extraction complete %s status=%x", - (const char*)jarURLStr, aStatus)); + jarURLStr.get(), aStatus)); } } #endif @@ -666,7 +653,7 @@ nsJARChannel::Open(char* *contentType, PRInt32 *contentLength) if (NS_FAILED(rv)) return rv; nsCOMPtr entry; - rv = mJAR->GetEntry(mJAREntry, getter_AddRefs(entry)); + rv = mJAR->GetEntry(mJAREntry.get(), getter_AddRefs(entry)); if (NS_FAILED(rv)) return rv; if (contentLength) { @@ -692,14 +679,14 @@ nsJARChannel::GetInputStream(nsIInputStream* *aInputStream) { #ifdef PR_LOGGING if (PR_LOG_TEST(gJarProtocolLog, PR_LOG_DEBUG)) { - nsXPIDLCString jarURLStr; - mURI->GetSpec(getter_Copies(jarURLStr)); + nsCAutoString jarURLStr; + mURI->GetSpec(jarURLStr); PR_LOG(gJarProtocolLog, PR_LOG_DEBUG, - ("nsJarProtocol: GetInputStream jar entry %s", (const char*)jarURLStr)); + ("nsJarProtocol: GetInputStream jar entry %s", jarURLStr.get())); } #endif NS_ENSURE_TRUE(mJAR, NS_ERROR_NULL_POINTER); - nsresult rv = mJAR->GetInputStream(mJAREntry, aInputStream); + nsresult rv = mJAR->GetInputStream(mJAREntry.get(), aInputStream); if (NS_SUCCEEDED(rv)) (*aInputStream)->Available((PRUint32 *) &mContentLength); return rv; @@ -715,7 +702,11 @@ nsJARChannel::GetOutputStream(nsIOutputStream* *aOutputStream) NS_IMETHODIMP nsJARChannel::GetName(char* *aName) { - return mURI->GetSpec(aName); + nsCAutoString spec; + nsresult rv = mURI->GetSpec(spec); + if (NS_FAILED(rv)) return rv; + *aName = ToNewCString(spec); + return *aName ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } //////////////////////////////////////////////////////////////////////////////// diff --git a/mozilla/modules/libjar/nsJARChannel.h b/mozilla/modules/libjar/nsJARChannel.h index ac9ee63e03d..654a195d0c7 100644 --- a/mozilla/modules/libjar/nsJARChannel.h +++ b/mozilla/modules/libjar/nsJARChannel.h @@ -55,6 +55,7 @@ #include "nsIDownloader.h" #include "nsIInputStream.h" #include "nsJARProtocolHandler.h" +#include "nsString.h" #ifdef DEBUG #include "prthread.h" @@ -116,7 +117,7 @@ protected: char* mContentType; PRInt32 mContentLength; nsCOMPtr mJARBaseURI; - char* mJAREntry; + nsCString mJAREntry; nsCOMPtr mJAR; nsCOMPtr mDownloadedJARFile; nsresult mStatus; diff --git a/mozilla/modules/libjar/nsJARProtocolHandler.cpp b/mozilla/modules/libjar/nsJARProtocolHandler.cpp index b45b9497a9c..9daa44628c6 100644 --- a/mozilla/modules/libjar/nsJARProtocolHandler.cpp +++ b/mozilla/modules/libjar/nsJARProtocolHandler.cpp @@ -44,6 +44,7 @@ #include "nsIURL.h" #include "nsJARChannel.h" #include "nsXPIDLString.h" +#include "nsString.h" #include "nsNetCID.h" #include "nsCExternalHandlerService.h" #include "nsIMIMEService.h" @@ -122,11 +123,9 @@ nsJARProtocolHandler::GetJARCache(nsIZipReaderCache* *result) // nsIProtocolHandler methods: NS_IMETHODIMP -nsJARProtocolHandler::GetScheme(char* *result) +nsJARProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("jar"); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = "jar"; return NS_OK; } @@ -148,24 +147,34 @@ nsJARProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsJARProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsJARProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, nsIURI **result) { nsresult rv = NS_OK; nsIURI* url; - rv = nsJARURI::Create(nsnull, NS_GET_IID(nsIJARURI), (void**)&url); - if (NS_FAILED(rv)) return rv; + nsJARURI *jarURI = new nsJARURI(); + if (!jarURI) + return NS_ERROR_OUT_OF_MEMORY; - if (aBaseURI) - { - nsXPIDLCString aResolvedURI; - rv = aBaseURI->Resolve(aSpec, getter_Copies(aResolvedURI)); + NS_ADDREF(url = jarURI); + + rv = jarURI->Init(aCharset); + if (NS_FAILED(rv)) { + NS_RELEASE(url); + return rv; + } + + if (aBaseURI) { + nsCAutoString aResolvedURI; + rv = aBaseURI->Resolve(aSpec, aResolvedURI); if (NS_FAILED(rv)) return rv; rv = url->SetSpec(aResolvedURI); - } else { - rv = url->SetSpec((char*)aSpec); } + else + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); diff --git a/mozilla/modules/libjar/nsJARURI.cpp b/mozilla/modules/libjar/nsJARURI.cpp index 9d8a694df74..aeacfe46c7e 100644 --- a/mozilla/modules/libjar/nsJARURI.cpp +++ b/mozilla/modules/libjar/nsJARURI.cpp @@ -26,8 +26,6 @@ #include "nsIZipReader.h" #include "nsReadableUtils.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); - //////////////////////////////////////////////////////////////////////////////// nsJARURI::nsJARURI() @@ -38,74 +36,28 @@ nsJARURI::nsJARURI() nsJARURI::~nsJARURI() { - if (mJAREntry) - nsMemory::Free(mJAREntry); } NS_IMPL_THREADSAFE_ISUPPORTS3(nsJARURI, nsIJARURI, nsIURI, nsISerializable) -NS_METHOD -nsJARURI::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) -{ - if (aOuter) - return NS_ERROR_NO_AGGREGATION; - - nsJARURI* uri = new nsJARURI(); - - if (uri == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - - NS_ADDREF(uri); - nsresult rv = uri->Init(); - - if (NS_SUCCEEDED(rv)) { - rv = uri->QueryInterface(aIID, aResult); - } - NS_RELEASE(uri); - - return rv; -} - nsresult -nsJARURI::Init() +nsJARURI::Init(const char *charsetHint) { + mCharsetHint = charsetHint; return NS_OK; } -#define NS_JAR_SCHEME "jar:" -#define NS_JAR_SCHEME_LEN (sizeof(NS_JAR_SCHEME)-1) -#define NS_JAR_DELIMITER "!/" -#define NS_JAR_DELIMITER_LEN (sizeof(NS_JAR_DELIMITER)-1) +#define NS_JAR_SCHEME NS_LITERAL_CSTRING("jar:") +#define NS_JAR_DELIMITER NS_LITERAL_CSTRING("!/") nsresult -nsJARURI::FormatSpec(const char* entryPath, char* *result) +nsJARURI::FormatSpec(const nsACString &entryPath, nsACString &result) { - char* fileSpec; - nsresult rv = mJARFile->GetSpec(&fileSpec); + nsCAutoString fileSpec; + nsresult rv = mJARFile->GetSpec(fileSpec); if (NS_FAILED(rv)) return rv; - int fileSpecLen = strlen(fileSpec); - int entryPathLen = strlen(entryPath); - - char *spec = (char *) nsMemory::Alloc(NS_JAR_SCHEME_LEN + - fileSpecLen + - NS_JAR_DELIMITER_LEN + - entryPathLen + 1); - if (!spec) - return NS_ERROR_OUT_OF_MEMORY; - - *result = spec; - - memcpy(spec, NS_JAR_SCHEME, NS_JAR_SCHEME_LEN); - spec += NS_JAR_SCHEME_LEN; - memcpy(spec, fileSpec, fileSpecLen); - spec += fileSpecLen; - memcpy(spec, NS_JAR_DELIMITER, NS_JAR_DELIMITER_LEN); - spec += NS_JAR_DELIMITER_LEN; - memcpy(spec, entryPath, entryPathLen); - spec[entryPathLen] = 0; - - nsMemory::Free(fileSpec); + result = NS_JAR_SCHEME + fileSpec + NS_JAR_DELIMITER + entryPath; return NS_OK; } @@ -130,23 +82,23 @@ nsJARURI::Write(nsIObjectOutputStream* aStream) // nsIURI methods: NS_IMETHODIMP -nsJARURI::GetSpec(char* *aSpec) +nsJARURI::GetSpec(nsACString &aSpec) { return FormatSpec(mJAREntry, aSpec); } NS_IMETHODIMP -nsJARURI::SetSpec(const char * aSpec) +nsJARURI::SetSpec(const nsACString &aSpec) { nsresult rv; - nsCOMPtr serv(do_GetService(kIOServiceCID, &rv)); + nsCOMPtr serv(do_GetIOService(&rv)); if (NS_FAILED(rv)) return rv; - PRUint32 startPos, endPos; - rv = serv->ExtractScheme(aSpec, &startPos, &endPos, nsnull); + nsCAutoString scheme; + rv = serv->ExtractScheme(aSpec, scheme); if (NS_FAILED(rv)) return rv; - if (nsCRT::strncmp("jar", &aSpec[startPos], endPos - startPos - 1) != 0) + if (strcmp("jar", scheme.get()) != 0) return NS_ERROR_MALFORMED_URI; // Search backward from the end for the "!/" delimiter. Remember, jar URLs @@ -155,97 +107,108 @@ nsJARURI::SetSpec(const char * aSpec) // This gets the b.html document from out of the a.jar file, that's // contained within the bar.jar file. - nsCAutoString jarPath(aSpec); - PRInt32 pos = jarPath.RFind(NS_JAR_DELIMITER); - startPos = (PRUint32) pos; - if (pos == -1 || endPos + 1 > startPos) + nsACString::const_iterator begin, end, delim_begin, delim_end; + aSpec.BeginReading(begin); + aSpec.EndReading(end); + + delim_begin = begin; + delim_end = end; + + if (!RFindInReadable(NS_JAR_DELIMITER, delim_begin, delim_end)) return NS_ERROR_MALFORMED_URI; - jarPath.Cut(pos, jarPath.Length()); - jarPath.Cut(0, endPos); + begin.advance(4); - rv = serv->NewURI(jarPath.get(), nsnull, getter_AddRefs(mJARFile)); + rv = serv->NewURI(Substring(begin, delim_begin), mCharsetHint.get(), nsnull, getter_AddRefs(mJARFile)); if (NS_FAILED(rv)) return rv; - PRUint32 slashChar=pos + 1; - while (aSpec[++slashChar]=='/'); + // skip over any extra '/' chars + while (*delim_end == '/') + ++delim_end; - rv = serv->ResolveRelativePath(&aSpec[slashChar], nsnull, &mJAREntry); + rv = serv->ResolveRelativePath(Substring(delim_end, end), + NS_LITERAL_CSTRING(""), + mJAREntry); return rv; } NS_IMETHODIMP -nsJARURI::GetPrePath(char* *prePath) +nsJARURI::GetPrePath(nsACString &prePath) { - *prePath = nsCRT::strdup("jar:"); - return *prePath ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + prePath = "jar:"; + return NS_OK; } NS_IMETHODIMP -nsJARURI::SetPrePath(const char* prePath) +nsJARURI::GetScheme(nsACString &aScheme) { - NS_NOTREACHED("nsJARURI::SetPrePath"); - return NS_ERROR_NOT_IMPLEMENTED; + aScheme = "jar"; + return NS_OK; } NS_IMETHODIMP -nsJARURI::GetScheme(char * *aScheme) -{ - *aScheme = nsCRT::strdup("jar"); - return *aScheme ? NS_OK : NS_ERROR_OUT_OF_MEMORY; -} - -NS_IMETHODIMP -nsJARURI::SetScheme(const char * aScheme) +nsJARURI::SetScheme(const nsACString &aScheme) { // doesn't make sense to set the scheme of a jar: URL return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::GetUsername(char * *aUsername) +nsJARURI::GetUserPass(nsACString &aUserPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetUsername(const char * aUsername) +nsJARURI::SetUserPass(const nsACString &aUserPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::GetPassword(char * *aPassword) +nsJARURI::GetUsername(nsACString &aUsername) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetPassword(const char * aPassword) +nsJARURI::SetUsername(const nsACString &aUsername) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::GetPreHost(char * *aPreHost) +nsJARURI::GetPassword(nsACString &aPassword) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetPreHost(const char * aPreHost) +nsJARURI::SetPassword(const nsACString &aPassword) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::GetHost(char * *aHost) +nsJARURI::GetHostPort(nsACString &aHostPort) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetHost(const char * aHost) +nsJARURI::SetHostPort(const nsACString &aHostPort) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsJARURI::GetHost(nsACString &aHost) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsJARURI::SetHost(const nsACString &aHost) { return NS_ERROR_FAILURE; } @@ -263,17 +226,36 @@ nsJARURI::SetPort(PRInt32 aPort) } NS_IMETHODIMP -nsJARURI::GetPath(char * *aPath) +nsJARURI::GetPath(nsACString &aPath) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetPath(const char * aPath) +nsJARURI::SetPath(const nsACString &aPath) { return NS_ERROR_FAILURE; } +NS_IMETHODIMP +nsJARURI::GetAsciiSpec(nsACString &aSpec) +{ + return GetSpec(aSpec); +} + +NS_IMETHODIMP +nsJARURI::GetAsciiHost(nsACString &aHost) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsJARURI::GetOriginCharset(nsACString &aOriginCharset) +{ + aOriginCharset.Truncate(); + return NS_OK; +} + NS_IMETHODIMP nsJARURI::Equals(nsIURI *other, PRBool *result) { @@ -297,12 +279,11 @@ nsJARURI::Equals(nsIURI *other, PRBool *result) if (!equal) return NS_OK; // not equal - char* otherJAREntry; - rv = otherJAR->GetJAREntry(&otherJAREntry); + nsCAutoString otherJAREntry; + rv = otherJAR->GetJAREntry(otherJAREntry); if (NS_FAILED(rv)) return rv; - *result = nsCRT::strcmp(mJAREntry, otherJAREntry) == 0; - nsCRT::free(otherJAREntry); + *result = (strcmp(mJAREntry.get(), otherJAREntry.get()) == 0); return NS_OK; } @@ -329,39 +310,31 @@ nsJARURI::Clone(nsIURI **result) rv = mJARFile->Clone(getter_AddRefs(newJARFile)); if (NS_FAILED(rv)) return rv; - char* newJAREntry = nsCRT::strdup(mJAREntry); - if (newJAREntry == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - nsJARURI* uri = new nsJARURI(); if (uri == nsnull) return NS_ERROR_OUT_OF_MEMORY; NS_ADDREF(uri); uri->mJARFile = newJARFile; - uri->mJAREntry = newJAREntry; + uri->mJAREntry = mJAREntry; *result = uri; return NS_OK; } NS_IMETHODIMP -nsJARURI::Resolve(const char *relativePath, char **result) +nsJARURI::Resolve(const nsACString &relativePath, nsACString &result) { nsresult rv; - if (!relativePath) return NS_ERROR_NULL_POINTER; - - nsCOMPtr serv(do_GetService(kIOServiceCID, &rv)); + nsCOMPtr serv(do_GetIOService(&rv)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString scheme; - rv = serv->ExtractScheme(relativePath, nsnull, nsnull, getter_Copies(scheme)); + nsCAutoString scheme; + rv = serv->ExtractScheme(relativePath, scheme); if (NS_SUCCEEDED(rv)) { // then aSpec is absolute - *result = nsCRT::strdup(relativePath); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = relativePath; return NS_OK; } @@ -372,14 +345,12 @@ nsJARURI::Resolve(const char *relativePath, char **result) else path = ""; - char* resolvedEntry; - rv = serv->ResolveRelativePath(relativePath, path.get(), - &resolvedEntry); + nsCAutoString resolvedEntry; + rv = serv->ResolveRelativePath(relativePath, path, + resolvedEntry); if (NS_FAILED(rv)) return rv; - rv = FormatSpec(resolvedEntry, result); - nsCRT::free(resolvedEntry); - return rv; + return FormatSpec(resolvedEntry, result); } //////////////////////////////////////////////////////////////////////////////// @@ -401,28 +372,26 @@ nsJARURI::SetJARFile(nsIURI* jarFile) } NS_IMETHODIMP -nsJARURI::GetJAREntry(char* *entryPath) +nsJARURI::GetJAREntry(nsACString &entryPath) { - nsCAutoString entry(mJAREntry); - PRInt32 pos = entry.RFindCharInSet("#?;"); - if (pos >= 0) - entry.Truncate(pos); - *entryPath = ToNewCString(entry); - return *entryPath ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + // trim off any trailing ref, query, or param + PRInt32 pos = mJAREntry.RFindCharInSet("#?;"); + if (pos < 0) + pos = mJAREntry.Length(); + entryPath = Substring(mJAREntry, 0, pos); + return NS_OK; } NS_IMETHODIMP -nsJARURI::SetJAREntry(const char* entryPath) +nsJARURI::SetJAREntry(const nsACString &entryPath) { nsresult rv; - nsCOMPtr serv(do_GetService(kIOServiceCID, &rv)); + nsCOMPtr serv(do_GetIOService(&rv)); if (NS_FAILED(rv)) return rv; - if (mJAREntry) - nsCRT::free(mJAREntry); + mJAREntry.Truncate(); - rv = serv->ResolveRelativePath(entryPath, nsnull, &mJAREntry); - return rv; + return serv->ResolveRelativePath(entryPath, NS_LITERAL_CSTRING(""), mJAREntry); } //////////////////////////////////////////////////////////////////////////////// diff --git a/mozilla/modules/libjar/nsJARURI.h b/mozilla/modules/libjar/nsJARURI.h index 9d8c9358b93..695c7ed1e9e 100644 --- a/mozilla/modules/libjar/nsJARURI.h +++ b/mozilla/modules/libjar/nsJARURI.h @@ -22,6 +22,7 @@ #include "nsIJARURI.h" #include "nsISerializable.h" #include "nsCOMPtr.h" +#include "nsString.h" #define NS_JARURI_CID \ { /* 0xc7e410d7-0x85f2-11d3-9f63-006008a6efe9 */ \ @@ -43,15 +44,13 @@ public: nsJARURI(); virtual ~nsJARURI(); - static NS_METHOD - Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); - - nsresult Init(); - nsresult FormatSpec(const char* entryPath, char* *result); + nsresult Init(const char *charsetHint); + nsresult FormatSpec(const nsACString &entryPath, nsACString &result); protected: nsCOMPtr mJARFile; - char *mJAREntry; + nsCString mJAREntry; + nsCString mCharsetHint; }; #endif // nsJARURI_h__ diff --git a/mozilla/modules/libpr0n/decoders/icon/mac/nsIconChannel.cpp b/mozilla/modules/libpr0n/decoders/icon/mac/nsIconChannel.cpp index 4f75b491320..e57fbf77f5e 100644 --- a/mozilla/modules/libpr0n/decoders/icon/mac/nsIconChannel.cpp +++ b/mozilla/modules/libpr0n/decoders/icon/mac/nsIconChannel.cpp @@ -37,7 +37,7 @@ #include "nsCExternalHandlerService.h" #include "plstr.h" #include "nsILocalFileMac.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include #include diff --git a/mozilla/modules/libpr0n/decoders/icon/nsIconProtocolHandler.cpp b/mozilla/modules/libpr0n/decoders/icon/nsIconProtocolHandler.cpp index cf0298a692c..6e79b364a28 100644 --- a/mozilla/modules/libpr0n/decoders/icon/nsIconProtocolHandler.cpp +++ b/mozilla/modules/libpr0n/decoders/icon/nsIconProtocolHandler.cpp @@ -46,10 +46,9 @@ NS_IMPL_ISUPPORTS2(nsIconProtocolHandler, nsIProtocolHandler, nsISupportsWeakRef //////////////////////////////////////////////////////////////////////////////// // nsIProtocolHandler methods: -NS_IMETHODIMP nsIconProtocolHandler::GetScheme(char* *result) +NS_IMETHODIMP nsIconProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("moz-icon"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; + result = "moz-icon"; return NS_OK; } @@ -72,7 +71,10 @@ NS_IMETHODIMP nsIconProtocolHandler::GetProtocolFlags(PRUint32 *result) return NS_OK; } -NS_IMETHODIMP nsIconProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **result) +NS_IMETHODIMP nsIconProtocolHandler::NewURI(const nsACString &aSpec, + const char *aOriginCharset, // ignored + nsIURI *aBaseURI, + nsIURI **result) { // no concept of a relative icon url NS_ASSERTION(!aBaseURI, "base url passed into icon protocol handler"); diff --git a/mozilla/modules/libpr0n/decoders/icon/nsIconURI.cpp b/mozilla/modules/libpr0n/decoders/icon/nsIconURI.cpp index 79103017564..8fa14bba642 100644 --- a/mozilla/modules/libpr0n/decoders/icon/nsIconURI.cpp +++ b/mozilla/modules/libpr0n/decoders/icon/nsIconURI.cpp @@ -25,13 +25,14 @@ #include "nsIURL.h" #include "nsCRT.h" #include "nsReadableUtils.h" +#include "nsPrintfCString.h" static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); #define DEFAULT_IMAGE_SIZE 16 // helper function for parsing out attributes like size, and contentType // from the icon url. -void extractAttributeValue(const char * searchString, const char * attributeName, char ** result); +static void extractAttributeValue(const char * searchString, const char * attributeName, char ** result); //////////////////////////////////////////////////////////////////////////////// @@ -52,15 +53,15 @@ NS_IMPL_THREADSAFE_ISUPPORTS2(nsMozIconURI, nsIMozIconURI, nsIURI) nsresult -nsMozIconURI::FormatSpec(char* *result) +nsMozIconURI::FormatSpec(nsACString &spec) { nsresult rv = NS_OK; - nsCString spec(NS_MOZICON_SCHEME); + spec = NS_MOZICON_SCHEME; if (mFileIcon) { - nsXPIDLCString fileIconSpec; - rv = mFileIcon->GetSpec(getter_Copies(fileIconSpec)); + nsCAutoString fileIconSpec; + rv = mFileIcon->GetSpec(fileIconSpec); NS_ENSURE_SUCCESS(rv, rv); spec += fileIconSpec; } @@ -72,22 +73,21 @@ nsMozIconURI::FormatSpec(char* *result) spec += NS_MOZ_ICON_DELIMITER; spec += "size="; - spec.AppendInt(mSize); + spec.Append(nsPrintfCString("%d", mSize)); if (!mContentType.IsEmpty()) { spec += "&contentType="; spec += mContentType.get(); } - *result = ToNewCString(spec); - return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + return NS_OK; } //////////////////////////////////////////////////////////////////////////////// // nsURI methods: NS_IMETHODIMP -nsMozIconURI::GetSpec(char* *aSpec) +nsMozIconURI::GetSpec(nsACString &aSpec) { return FormatSpec(aSpec); } @@ -126,20 +126,21 @@ void extractAttributeValue(const char * searchString, const char * attributeName } NS_IMETHODIMP -nsMozIconURI::SetSpec(const char * aSpec) +nsMozIconURI::SetSpec(const nsACString &aSpec) { nsresult rv; nsCOMPtr ioService (do_GetService(kIOServiceCID, &rv)); NS_ENSURE_SUCCESS(rv, rv); - PRUint32 startPos, endPos; - rv = ioService->ExtractScheme(aSpec, &startPos, &endPos, nsnull); + nsCAutoString scheme; + rv = ioService->ExtractScheme(aSpec, scheme); NS_ENSURE_SUCCESS(rv, rv); - if (nsCRT::strncmp("moz-icon", &aSpec[startPos], endPos - startPos - 1) != 0) + if (strcmp("moz-icon", scheme.get()) != 0) return NS_ERROR_MALFORMED_URI; nsCAutoString mozIconPath(aSpec); + PRInt32 endPos = mozIconPath.FindChar(':') + 1; // guaranteed to exist! PRInt32 pos = mozIconPath.FindChar(NS_MOZ_ICON_DELIMITER); if (pos == -1) // no size or content type specified @@ -180,7 +181,7 @@ nsMozIconURI::SetSpec(const char * aSpec) else // we must have a url { // we have a file url.....so store it... - rv = ioService->NewURI(mDummyFilePath.get(), nsnull, getter_AddRefs(mFileIcon)); + rv = ioService->NewURI(mDummyFilePath, nsnull, nsnull, getter_AddRefs(mFileIcon)); if (NS_FAILED(rv)) return NS_ERROR_MALFORMED_URI; } } @@ -190,77 +191,82 @@ nsMozIconURI::SetSpec(const char * aSpec) } NS_IMETHODIMP -nsMozIconURI::GetPrePath(char* *prePath) +nsMozIconURI::GetPrePath(nsACString &prePath) { - *prePath = nsCRT::strdup(NS_MOZICON_SCHEME); - return *prePath ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + prePath = NS_MOZICON_SCHEME; + return NS_OK; } NS_IMETHODIMP -nsMozIconURI::SetPrePath(const char* prePath) +nsMozIconURI::GetScheme(nsACString &aScheme) { - NS_NOTREACHED("nsMozIconURI::SetPrePath"); - return NS_ERROR_NOT_IMPLEMENTED; + aScheme = "moz-icon"; + return NS_OK; } NS_IMETHODIMP -nsMozIconURI::GetScheme(char * *aScheme) -{ - *aScheme = nsCRT::strdup("moz-icon"); - return *aScheme ? NS_OK : NS_ERROR_OUT_OF_MEMORY; -} - -NS_IMETHODIMP -nsMozIconURI::SetScheme(const char * aScheme) +nsMozIconURI::SetScheme(const nsACString &aScheme) { // doesn't make sense to set the scheme of a moz-icon URL return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsMozIconURI::GetUsername(char * *aUsername) +nsMozIconURI::GetUsername(nsACString &aUsername) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsMozIconURI::SetUsername(const char * aUsername) +nsMozIconURI::SetUsername(const nsACString &aUsername) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsMozIconURI::GetPassword(char * *aPassword) +nsMozIconURI::GetPassword(nsACString &aPassword) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsMozIconURI::SetPassword(const char * aPassword) +nsMozIconURI::SetPassword(const nsACString &aPassword) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsMozIconURI::GetPreHost(char * *aPreHost) +nsMozIconURI::GetUserPass(nsACString &aUserPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsMozIconURI::SetPreHost(const char * aPreHost) +nsMozIconURI::SetUserPass(const nsACString &aUserPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsMozIconURI::GetHost(char * *aHost) +nsMozIconURI::GetHostPort(nsACString &aHostPort) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsMozIconURI::SetHost(const char * aHost) +nsMozIconURI::SetHostPort(const nsACString &aHostPort) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsMozIconURI::GetHost(nsACString &aHost) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsMozIconURI::SetHost(const nsACString &aHost) { return NS_ERROR_FAILURE; } @@ -278,13 +284,14 @@ nsMozIconURI::SetPort(PRInt32 aPort) } NS_IMETHODIMP -nsMozIconURI::GetPath(char * *aPath) +nsMozIconURI::GetPath(nsACString &aPath) { - return NS_ERROR_FAILURE; + aPath.Truncate(); + return NS_OK; } NS_IMETHODIMP -nsMozIconURI::SetPath(const char * aPath) +nsMozIconURI::SetPath(const nsACString &aPath) { return NS_ERROR_FAILURE; } @@ -292,12 +299,12 @@ nsMozIconURI::SetPath(const char * aPath) NS_IMETHODIMP nsMozIconURI::Equals(nsIURI *other, PRBool *result) { - nsXPIDLCString spec1; - nsXPIDLCString spec2; + nsCAutoString spec1; + nsCAutoString spec2; - other->GetSpec(getter_Copies(spec2)); - GetSpec(getter_Copies(spec1)); - if (!nsCRT::strcasecmp(spec1, spec2)) + other->GetSpec(spec2); + GetSpec(spec1); + if (!nsCRT::strcasecmp(spec1.get(), spec2.get())) *result = PR_TRUE; else *result = PR_FALSE; @@ -321,11 +328,30 @@ nsMozIconURI::Clone(nsIURI **result) } NS_IMETHODIMP -nsMozIconURI::Resolve(const char *relativePath, char **result) +nsMozIconURI::Resolve(const nsACString &relativePath, nsACString &result) { return NS_OK; } +NS_IMETHODIMP +nsMozIconURI::GetAsciiSpec(nsACString &aSpecA) +{ + return GetSpec(aSpecA); +} + +NS_IMETHODIMP +nsMozIconURI::GetAsciiHost(nsACString &aHostA) +{ + return GetHost(aHostA); +} + +NS_IMETHODIMP +nsMozIconURI::GetOriginCharset(nsACString &result) +{ + result.Truncate(); + return NS_OK; +} + //////////////////////////////////////////////////////////////////////////////// // nsIIconUri methods: @@ -381,11 +407,11 @@ nsMozIconURI::GetFileExtension(char ** aFileExtension) // First, try to get the extension from mFileIcon if we have one if (mFileIcon) { - nsXPIDLCString fileExt; + nsCAutoString fileExt; nsCOMPtr url (do_QueryInterface(mFileIcon, &rv)); if (NS_SUCCEEDED(rv) && url) { - rv = url->GetFileExtension(getter_Copies(fileExt)); + rv = url->GetFileExtension(fileExt); if (NS_SUCCEEDED(rv)) { // unfortunately, this code doesn't give us the required '.' in front of the extension @@ -399,7 +425,7 @@ nsMozIconURI::GetFileExtension(char ** aFileExtension) } } - mFileIcon->GetSpec(getter_Copies(fileExt)); + mFileIcon->GetSpec(fileExt); fileExtension = fileExt; } else @@ -409,7 +435,7 @@ nsMozIconURI::GetFileExtension(char ** aFileExtension) // truncate the extension out of the file path... const char * chFileName = fileExtension.get(); // get the underlying buffer - const char * fileExt = PL_strrchr(chFileName, '.'); + const char * fileExt = strrchr(chFileName, '.'); if (!fileExt) return NS_ERROR_FAILURE; // no file extension to work from. else *aFileExtension = nsCRT::strdup(fileExt); diff --git a/mozilla/modules/libpr0n/decoders/icon/nsIconURI.h b/mozilla/modules/libpr0n/decoders/icon/nsIconURI.h index ce96b76f3ed..5281dcbf59b 100644 --- a/mozilla/modules/libpr0n/decoders/icon/nsIconURI.h +++ b/mozilla/modules/libpr0n/decoders/icon/nsIconURI.h @@ -51,7 +51,7 @@ protected: nsCString mContentType; // optional field explicitly specifying the content type nsCString mDummyFilePath; // if we don't have a valid file url, the file path is stored here....i.e if mFileIcon is null..... - nsresult FormatSpec(char* *result); + nsresult FormatSpec(nsACString &result); }; #endif // nsMozIconURI_h__ diff --git a/mozilla/modules/libpr0n/decoders/icon/win/nsIconChannel.cpp b/mozilla/modules/libpr0n/decoders/icon/win/nsIconChannel.cpp index 2e4bddc0e32..ae3f5cd5927 100644 --- a/mozilla/modules/libpr0n/decoders/icon/win/nsIconChannel.cpp +++ b/mozilla/modules/libpr0n/decoders/icon/win/nsIconChannel.cpp @@ -34,7 +34,7 @@ #include "nsIURL.h" #include "nsNetUtil.h" #include "nsIFile.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsIMIMEService.h" #include "nsCExternalHandlerService.h" diff --git a/mozilla/modules/libpr0n/src/imgCache.cpp b/mozilla/modules/libpr0n/src/imgCache.cpp index 81f93f2cb8d..6f3192cf372 100644 --- a/mozilla/modules/libpr0n/src/imgCache.cpp +++ b/mozilla/modules/libpr0n/src/imgCache.cpp @@ -168,12 +168,12 @@ PRBool imgCache::Put(nsIURI *aKey, imgRequest *request, nsICacheEntryDescriptor GetCacheSession(aKey, getter_AddRefs(ses)); if (!ses) return PR_FALSE; - nsXPIDLCString spec; - aKey->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + aKey->GetAsciiSpec(spec); nsCOMPtr entry; - rv = ses->OpenCacheEntry(spec, nsICache::ACCESS_WRITE, nsICache::BLOCKING, getter_AddRefs(entry)); + rv = ses->OpenCacheEntry(spec.get(), nsICache::ACCESS_WRITE, nsICache::BLOCKING, getter_AddRefs(entry)); if (NS_FAILED(rv) || !entry) return PR_FALSE; @@ -212,12 +212,12 @@ PRBool imgCache::Get(nsIURI *aKey, PRBool aDoomIfExpired, imgRequest **aRequest, GetCacheSession(aKey, getter_AddRefs(ses)); if (!ses) return PR_FALSE; - nsXPIDLCString spec; - aKey->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + aKey->GetAsciiSpec(spec); nsCOMPtr entry; - rv = ses->OpenCacheEntry(spec, nsICache::ACCESS_READ, nsICache::BLOCKING, getter_AddRefs(entry)); + rv = ses->OpenCacheEntry(spec.get(), nsICache::ACCESS_READ, nsICache::BLOCKING, getter_AddRefs(entry)); if (NS_FAILED(rv) || !entry) return PR_FALSE; @@ -254,12 +254,12 @@ PRBool imgCache::Remove(nsIURI *aKey) GetCacheSession(aKey, getter_AddRefs(ses)); if (!ses) return PR_FALSE; - nsXPIDLCString spec; - aKey->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + aKey->GetAsciiSpec(spec); nsCOMPtr entry; - rv = ses->OpenCacheEntry(spec, nsICache::ACCESS_READ, nsICache::BLOCKING, getter_AddRefs(entry)); + rv = ses->OpenCacheEntry(spec.get(), nsICache::ACCESS_READ, nsICache::BLOCKING, getter_AddRefs(entry)); if (NS_FAILED(rv) || !entry) return PR_FALSE; diff --git a/mozilla/modules/libpr0n/src/imgLoader.cpp b/mozilla/modules/libpr0n/src/imgLoader.cpp index 8a2f38aea53..4b1ad528cb7 100644 --- a/mozilla/modules/libpr0n/src/imgLoader.cpp +++ b/mozilla/modules/libpr0n/src/imgLoader.cpp @@ -126,8 +126,8 @@ NS_IMETHODIMP imgLoader::LoadImage( return NS_ERROR_NULL_POINTER; #if defined(PR_LOGGING) - nsXPIDLCString spec; - aURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + aURI->GetAsciiSpec(spec); LOG_SCOPE_WITH_PARAM(gImgLog, "imgLoader::LoadImage", "aURI", spec.get()); #endif diff --git a/mozilla/modules/libpr0n/src/imgRequestProxy.cpp b/mozilla/modules/libpr0n/src/imgRequestProxy.cpp index 9b1d98b3b7c..c5e144b430f 100644 --- a/mozilla/modules/libpr0n/src/imgRequestProxy.cpp +++ b/mozilla/modules/libpr0n/src/imgRequestProxy.cpp @@ -30,6 +30,7 @@ #include "nsAutoLock.h" #include "nsString.h" #include "nsXPIDLString.h" +#include "nsReadableUtils.h" #include "ImageLogging.h" @@ -141,20 +142,16 @@ nsresult imgRequestProxy::ChangeOwner(imgRequest *aNewOwner) /* readonly attribute wstring name; */ NS_IMETHODIMP imgRequestProxy::GetName(PRUnichar * *aName) { - nsAutoString name; + nsCAutoString name; if (mOwner) { nsCOMPtr uri; mOwner->GetURI(getter_AddRefs(uri)); - if (uri) { - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); - if (spec) - name.Append(NS_ConvertUTF8toUCS2(spec)); - } + if (uri) + uri->GetSpec(name); } - *aName = nsCRT::strdup(name.get()); - return NS_OK; + *aName = ToNewUnicode(NS_ConvertUTF8toUCS2(name)); + return *aName ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } /* boolean isPending (); */ diff --git a/mozilla/modules/libpref/src/init/all.js b/mozilla/modules/libpref/src/init/all.js index 4a034fcf99b..2b1bf22518a 100644 --- a/mozilla/modules/libpref/src/init/all.js +++ b/mozilla/modules/libpref/src/init/all.js @@ -439,6 +439,14 @@ pref("network.http.pipelining.maxrequests" , 4); pref("network.http.proxy.ssl.connect",true); // +// This preference controls whether or not internationalized domain names (IDN) +// are handled. IDN requires a nsIIDNService implementation. +pref("network.enableIDN", false); + +// This preference controls whether or not URLs with UTF-8 characters are +// escaped. Set this preference to TRUE for strict RFC2396 conformance. +pref("network.standard-url.escape-utf8", true); + // Idle timeout for ftp control connections - 5 minute default pref("network.ftp.idleConnectionTimeout", 300); diff --git a/mozilla/modules/oji/src/ProxyClassLoader.cpp b/mozilla/modules/oji/src/ProxyClassLoader.cpp index dd7b110cd29..723fdd44313 100644 --- a/mozilla/modules/oji/src/ProxyClassLoader.cpp +++ b/mozilla/modules/oji/src/ProxyClassLoader.cpp @@ -115,11 +115,11 @@ static nsresult getScriptClassLoader(JNIEnv* env, jobject* classloader) if (NS_FAILED(rv)) return rv; // create a netscape.oji.ProxyClassLoader instance. - nsXPIDLCString spec; - rv = codebase->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = codebase->GetSpec(spec); if (NS_FAILED(rv)) return rv; - jstring jspec = env->NewStringUTF(spec); + jstring jspec = env->NewStringUTF(spec.get()); if (!jspec) { env->ExceptionClear(); return NS_ERROR_FAILURE; diff --git a/mozilla/modules/oji/src/lcglue.cpp b/mozilla/modules/oji/src/lcglue.cpp index 511eb2223d7..f285a173f98 100644 --- a/mozilla/modules/oji/src/lcglue.cpp +++ b/mozilla/modules/oji/src/lcglue.cpp @@ -352,7 +352,7 @@ get_JSPrincipals_from_java_caller_impl(JNIEnv *pJNIEnv, JSContext *pJSContext, v rv = securityContext->GetOrigin(codebase, sizeof(codebase) - 1); if (NS_SUCCEEDED(rv)) { nsCOMPtr codebaseURI; - rv = NS_NewURI(getter_AddRefs(codebaseURI), codebase); + rv = NS_NewURI(getter_AddRefs(codebaseURI), nsDependentCString(codebase)); if (NS_SUCCEEDED(rv)) { nsCOMPtr principal; rv = ssm->GetCodebasePrincipal(codebaseURI, getter_AddRefs(principal)); diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp index 35186c12410..1f6662d01d7 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.cpp @@ -374,7 +374,7 @@ void DisplayNoDefaultPluginDialog(const char *mimeType) //////////////////////////////////////////////////////////////////////// nsActivePlugin::nsActivePlugin(nsPluginTag* aPluginTag, nsIPluginInstance* aInstance, - char * url, + const char * url, PRBool aDefaultPlugin) { mNext = nsnull; @@ -675,7 +675,7 @@ nsActivePlugin * nsActivePluginList::find(nsIPluginInstance* instance) return nsnull; } -nsActivePlugin * nsActivePluginList::find(char * mimetype) +nsActivePlugin * nsActivePluginList::find(const char * mimetype) { PRBool defaultplugin = (PL_strcmp(mimetype, "*") == 0); @@ -711,7 +711,7 @@ nsActivePlugin * nsActivePluginList::find(char * mimetype) //////////////////////////////////////////////////////////////////////// -nsActivePlugin * nsActivePluginList::findStopped(char * url) +nsActivePlugin * nsActivePluginList::findStopped(const char * url) { for(nsActivePlugin * p = mFirst; p != nsnull; p = p->mNext) { @@ -1432,10 +1432,10 @@ nsPluginStreamInfo::RequestRead(nsByteRange* rangeList) nsresult rv = NS_OK; nsCOMPtr url; - rv = NS_NewURI(getter_AddRefs(url), mURL); + rv = NS_NewURI(getter_AddRefs(url), nsDependentCString(mURL)); nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), url, nsnull, nsnull, nsnull); + rv = NS_NewChannel(getter_AddRefs(channel), url, nsnull, nsnull, nsnull); if (NS_FAILED(rv)) return rv; @@ -1695,14 +1695,13 @@ nsPluginStreamListenerPeer::nsPluginStreamListenerPeer() nsPluginStreamListenerPeer::~nsPluginStreamListenerPeer() { #ifdef PLUGIN_LOGGING - char* urlSpec = nsnull; - if(mURL != nsnull) (void)mURL->GetSpec(&urlSpec); + nsCAutoString urlSpec; + if(mURL != nsnull) (void)mURL->GetSpec(urlSpec); PR_LOG(nsPluginLogging::gPluginLog, PLUGIN_LOG_NORMAL, - ("nsPluginStreamListenerPeer::dtor this=%p, url=%s, POST_file=%s\n",this, urlSpec, mLocalFile)); + ("nsPluginStreamListenerPeer::dtor this=%p, url=%s, POST_file=%s\n",this, urlSpec.get(), mLocalFile)); PR_LogFlush(); - if (urlSpec) nsCRT::free(urlSpec); #endif NS_IF_RELEASE(mURL); @@ -1742,14 +1741,13 @@ nsresult nsPluginStreamListenerPeer::Initialize(nsIURI *aURL, PRInt32 requestCount) { #ifdef PLUGIN_LOGGING - char* urlSpec = nsnull; - if(aURL != nsnull) (void)aURL->GetSpec(&urlSpec); + nsCAutoString urlSpec; + if(aURL != nsnull) (void)aURL->GetAsciiSpec(urlSpec); PR_LOG(nsPluginLogging::gPluginLog, PLUGIN_LOG_NORMAL, - ("nsPluginStreamListenerPeer::Initialize instance=%p, url=%s\n", aInstance, urlSpec)); + ("nsPluginStreamListenerPeer::Initialize instance=%p, url=%s\n", aInstance, urlSpec.get())); PR_LogFlush(); - if (urlSpec) nsCRT::free(urlSpec); #endif mURL = aURL; @@ -1792,14 +1790,13 @@ nsresult nsPluginStreamListenerPeer::InitializeEmbeded(nsIURI *aURL, nsIPluginHost *aHost) { #ifdef PLUGIN_LOGGING - char* urlSpec = nsnull; - if(aURL != nsnull) (void)aURL->GetSpec(&urlSpec); + nsCAutoString urlSpec; + if(aURL != nsnull) (void)aURL->GetSpec(urlSpec); PR_LOG(nsPluginLogging::gPluginLog, PLUGIN_LOG_NORMAL, - ("nsPluginStreamListenerPeer::InitializeEmbeded url=%s\n", urlSpec)); + ("nsPluginStreamListenerPeer::InitializeEmbeded url=%s\n", urlSpec.get())); PR_LogFlush(); - if (urlSpec) nsCRT::free(urlSpec); #endif mURL = aURL; @@ -1892,12 +1889,12 @@ nsPluginStreamListenerPeer::SetupPluginCacheFile(nsIChannel* channel) if(!url) return NS_ERROR_FAILURE; - nsXPIDLCString filename; - url->GetFileName(getter_Copies(filename)); + nsCAutoString filename; + url->GetFileName(filename); if (NS_FAILED(rv)) return rv; // Create a file to save our stream into. Should we scramble the name? - rv = pluginTmp->Append(filename); + rv = pluginTmp->Append(filename.get()); if (NS_FAILED(rv)) return rv; // Yes, make it unique. @@ -1983,15 +1980,14 @@ nsPluginStreamListenerPeer::OnStartRequest(nsIRequest *request, nsISupports* aCo mPluginStreamInfo->SetContentType(aContentType); #ifdef PLUGIN_LOGGING - char* urlSpec = nsnull; - if(aURL != nsnull) (void)aURL->GetSpec(&urlSpec); + nsCAutoString urlSpec; + if(aURL != nsnull) (void)aURL->GetSpec(urlSpec); PR_LOG(nsPluginLogging::gPluginLog, PLUGIN_LOG_NOISY, ("nsPluginStreamListenerPeer::OnStartRequest this=%p request=%p mime=%s, url=%s\n", - this, request, aContentType, urlSpec)); + this, request, aContentType, urlSpec.get())); PR_LogFlush(); - if (urlSpec) nsCRT::free(urlSpec); #endif nsPluginWindow *window = nsnull; @@ -2141,13 +2137,12 @@ NS_IMETHODIMP nsPluginStreamListenerPeer::OnDataAvailable(nsIRequest *request, if(!mPStreamListener || !mPluginStreamInfo) return NS_ERROR_FAILURE; - char* urlString; - aURL->GetSpec(&urlString); - mPluginStreamInfo->SetURL(urlString); + nsCAutoString urlString; + aURL->GetSpec(urlString); + mPluginStreamInfo->SetURL(urlString.get()); PLUGIN_LOG(PLUGIN_LOG_NOISY, ("nsPluginStreamListenerPeer::OnDataAvailable this=%p request=%p, offset=%d, length=%d, url=%s\n", - this, request, sourceOffset, aLength, urlString)); - nsCRT::free(urlString); + this, request, sourceOffset, aLength, urlString.get())); // if the plugin has requested an AsFileOnly stream, then don't // call OnDataAvailable @@ -2313,10 +2308,10 @@ NS_IMETHODIMP nsPluginStreamListenerPeer::OnStopRequest(nsIRequest *request, if (NS_FAILED(rv)) return rv; - nsXPIDLCString urlString; - rv = aURL->GetSpec(getter_Copies(urlString)); + nsCAutoString urlString; + rv = aURL->GetAsciiSpec(urlString); if (NS_SUCCEEDED(rv)) - mPluginStreamInfo->SetURL(urlString); + mPluginStreamInfo->SetURL(urlString.get()); // Set the content type to ensure we don't pass null to the plugin nsXPIDLCString aContentType; @@ -2424,10 +2419,9 @@ nsresult nsPluginStreamListenerPeer::SetUpStreamListener(nsIRequest *request, } } - char* urlString; - aURL->GetSpec(&urlString); - mPluginStreamInfo->SetURL(urlString); - nsCRT::free(urlString); + nsCAutoString urlString; + aURL->GetAsciiSpec(urlString); + mPluginStreamInfo->SetURL(urlString.get()); rv = mPStreamListener->OnStartBinding((nsIPluginStreamInfo*)mPluginStreamInfo); @@ -3112,7 +3106,7 @@ NS_IMETHODIMP nsPluginHostImpl::FindProxyForURL(const char* url, char* *result) } // make an nsURI from the argument url - res = ioService->NewURI(url, nsnull, getter_AddRefs(uriIn)); + res = ioService->NewURI(nsDependentCString(url), nsnull, nsnull, getter_AddRefs(uriIn)); if (NS_FAILED(res)) { return res; } @@ -3294,15 +3288,14 @@ NS_IMETHODIMP nsPluginHostImpl::InstantiateEmbededPlugin(const char *aMimeType, nsIPluginInstanceOwner *aOwner) { #ifdef PLUGIN_LOGGING - char* urlSpec = nsnull; - if(aURL != nsnull) (void)aURL->GetSpec(&urlSpec); + nsCAutoString urlSpec; + if(aURL != nsnull) (void)aURL->GetAsciiSpec(urlSpec); PR_LOG(nsPluginLogging::gPluginLog, PLUGIN_LOG_NORMAL, ("nsPluginHostImpl::InstatiateEmbededPlugin Begin mime=%s, owner=%p, url=%s\n", - aMimeType, aOwner, urlSpec)); + aMimeType, aOwner, urlSpec.get())); PR_LogFlush(); - if (urlSpec) nsCRT::free(urlSpec); #endif nsresult rv; @@ -3355,8 +3348,8 @@ NS_IMETHODIMP nsPluginHostImpl::InstantiateEmbededPlugin(const char *aMimeType, // only open the initial stream if it's one that we can handle internally. Otherwise // |NS_OpenURI| in |InstantiateEmbededPlugin| may open up a OS protocal registered helper app PRBool bCanHandleInternally = PR_FALSE; - nsXPIDLCString scheme; - if (aURL && NS_SUCCEEDED(aURL->GetScheme(getter_Copies(scheme)))) { + nsCAutoString scheme; + if (aURL && NS_SUCCEEDED(aURL->GetScheme(scheme))) { nsCAutoString contractID(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX); contractID += scheme; ToLowerCase(contractID); @@ -3478,15 +3471,14 @@ NS_IMETHODIMP nsPluginHostImpl::InstantiateEmbededPlugin(const char *aMimeType, } #ifdef PLUGIN_LOGGING - char* urlSpec2 = nsnull; - if(aURL != nsnull) (void)aURL->GetSpec(&urlSpec2); + nsCAutoString urlSpec2; + if(aURL != nsnull) (void)aURL->GetAsciiSpec(urlSpec2); PR_LOG(nsPluginLogging::gPluginLog, PLUGIN_LOG_NORMAL, ("nsPluginHostImpl::InstatiateEmbededPlugin Finished mime=%s, rv=%d, owner=%p, url=%s\n", - aMimeType, rv, aOwner, urlSpec2)); + aMimeType, rv, aOwner, urlSpec2.get())); PR_LogFlush(); - if (urlSpec2) nsCRT::free(urlSpec2); #endif return rv; @@ -3569,13 +3561,13 @@ NS_IMETHODIMP nsPluginHostImpl::InstantiateFullPagePlugin(const char *aMimeType, nsresult nsPluginHostImpl::FindStoppedPluginForURL(nsIURI* aURL, nsIPluginInstanceOwner *aOwner) { - char* url; + nsCAutoString url; if(!aURL) return NS_ERROR_FAILURE; - (void)aURL->GetSpec(&url); + (void)aURL->GetAsciiSpec(url); - nsActivePlugin * plugin = mActivePluginList.findStopped(url); + nsActivePlugin * plugin = mActivePluginList.findStopped(url.get()); if((plugin != nsnull) && (plugin->mStopped)) { @@ -3597,10 +3589,8 @@ nsresult nsPluginHostImpl::FindStoppedPluginForURL(nsIURI* aURL, instance->SetWindow(window); plugin->setStopped(PR_FALSE); - nsCRT::free(url); return NS_OK; } - nsCRT::free(url); return NS_ERROR_FAILURE; } @@ -3612,12 +3602,12 @@ void nsPluginHostImpl::AddInstanceToActiveList(nsCOMPtr aPlugin, PRBool aDefaultPlugin) { - char* url; + nsCAutoString url; if(!aURL) return; - (void)aURL->GetSpec(&url); + (void)aURL->GetSpec(url); // find corresponding plugin tag // this is legal for xpcom plugins not to have nsIPlugin implemented @@ -3642,14 +3632,12 @@ void nsPluginHostImpl::AddInstanceToActiveList(nsCOMPtr aPlugin, */ } - nsActivePlugin * plugin = new nsActivePlugin(pluginTag, aInstance, url, aDefaultPlugin); + nsActivePlugin * plugin = new nsActivePlugin(pluginTag, aInstance, url.get(), aDefaultPlugin); if(plugin == nsnull) return; mActivePluginList.add(plugin); - - nsCRT::free(url); } @@ -3703,15 +3691,14 @@ NS_IMETHODIMP nsPluginHostImpl::SetUpPluginInstance(const char *aMimeType, nsIPluginInstanceOwner *aOwner) { #ifdef PLUGIN_LOGGING - char* urlSpec = nsnull; - if(aURL != nsnull) (void)aURL->GetSpec(&urlSpec); + nsCAutoString urlSpec; + if(aURL != nsnull) (void)aURL->GetSpec(urlSpec); PR_LOG(nsPluginLogging::gPluginLog, PLUGIN_LOG_NORMAL, ("nsPluginHostImpl::SetupPluginInstance Begin mime=%s, owner=%p, url=%s\n", - aMimeType, aOwner, urlSpec)); + aMimeType, aOwner, urlSpec.get())); PR_LogFlush(); - if (urlSpec) nsCRT::free(urlSpec); #endif @@ -3728,20 +3715,16 @@ NS_IMETHODIMP nsPluginHostImpl::SetUpPluginInstance(const char *aMimeType, { char* extension; - char* filename; - aURL->GetPath(&filename); - extension = PL_strrchr(filename, '.'); + nsCAutoString filename; + aURL->GetPath(filename); + extension = PL_strrchr(filename.get(), '.'); if(extension) ++extension; else return NS_ERROR_FAILURE; if(IsPluginEnabledForExtension(extension, mimetype) != NS_OK) - { - nsCRT::free(filename); return NS_ERROR_FAILURE; - } - nsCRT::free(filename); } else mimetype = aMimeType; @@ -3883,15 +3866,14 @@ NS_IMETHODIMP nsPluginHostImpl::SetUpPluginInstance(const char *aMimeType, NS_RELEASE(instance); #ifdef PLUGIN_LOGGING - char* urlSpec2 = nsnull; - if(aURL != nsnull) (void)aURL->GetSpec(&urlSpec2); + nsCAutoString urlSpec2; + if(aURL != nsnull) (void)aURL->GetSpec(urlSpec2); PR_LOG(nsPluginLogging::gPluginLog, PLUGIN_LOG_BASIC, ("nsPluginHostImpl::SetupPluginInstance Finished mime=%s, rv=%d, owner=%p, url=%s\n", - aMimeType, result, aOwner, urlSpec2)); + aMimeType, result, aOwner, urlSpec2.get())); PR_LogFlush(); - if (urlSpec2) nsCRT::free(urlSpec2); #endif return NS_OK; @@ -3943,15 +3925,15 @@ nsresult nsPluginHostImpl::SetUpDefaultPluginInstance(const char *aMimeType, nsI nsCOMPtr url = do_QueryInterface(aURL); if(url) { - nsXPIDLCString extension; - url->GetFileExtension(getter_Copies(extension)); + nsCAutoString extension; + url->GetFileExtension(extension); - if(extension) + if(!extension.IsEmpty()) { nsCOMPtr ms (do_GetService(NS_MIMESERVICE_CONTRACTID, &res)); if(NS_SUCCEEDED(res) && ms) { - res = ms->GetTypeFromExtension(extension, getter_Copies(mt)); + res = ms->GetTypeFromExtension(extension.get(), getter_Copies(mt)); if(NS_SUCCEEDED(res)) mimetype = mt; } @@ -5601,7 +5583,7 @@ NS_IMETHODIMP nsPluginHostImpl::NewPluginURLStream(const nsString& aURL, nsCOMPtr channel; // XXX: Null LoadGroup? - rv = NS_OpenURI(getter_AddRefs(channel), url, nsnull, nsnull, callbacks); + rv = NS_NewChannel(getter_AddRefs(channel), url, nsnull, nsnull, callbacks); if (NS_FAILED(rv)) return rv; @@ -5929,7 +5911,7 @@ NS_IMETHODIMP nsPluginHostImpl::GetCookie(const char* inCookieURL, void* inOutCo } // make an nsURI from the argument url - rv = ioService->NewURI(inCookieURL, nsnull, getter_AddRefs(uriIn)); + rv = ioService->NewURI(nsDependentCString(inCookieURL), nsnull, nsnull, getter_AddRefs(uriIn)); if (NS_FAILED(rv)) { return rv; } @@ -5974,7 +5956,7 @@ NS_IMETHODIMP nsPluginHostImpl::SetCookie(const char* inCookieURL, const void* i } // make an nsURI from the argument url - rv = ioService->NewURI(inCookieURL, nsnull, getter_AddRefs(uriIn)); + rv = ioService->NewURI(nsDependentCString(inCookieURL), nsnull, nsnull, getter_AddRefs(uriIn)); if (NS_FAILED(rv)) { return NS_ERROR_FAILURE; } @@ -6028,23 +6010,20 @@ NS_IMETHODIMP nsPluginHostImpl::HandleBadPlugin(PRLibrary* aLibrary) nsCOMPtr bundle; nsCOMPtr uri; - char *spec = nsnull; + nsCAutoString spec; PRInt32 buttonPressed; PRBool checkboxState = PR_FALSE; - rv = io->NewURI(PLUGIN_PROPERTIES_URL, nsnull, getter_AddRefs(uri)); + rv = io->NewURI(NS_LITERAL_CSTRING(PLUGIN_PROPERTIES_URL), nsnull, nsnull, getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; - rv = uri->GetSpec(&spec); - if (NS_FAILED(rv)) { - nsCRT::free(spec); + rv = uri->GetSpec(spec); + if (NS_FAILED(rv)) return rv; - } - rv = strings->CreateBundle(spec, getter_AddRefs(bundle)); - nsCRT::free(spec); + rv = strings->CreateBundle(spec.get(), getter_AddRefs(bundle)); if (NS_FAILED(rv)) return rv; @@ -6286,7 +6265,8 @@ nsPluginHostImpl::CreateTmpFileToPost(const char *postDataURL, char **pTmpFileNa // stat file == get size & convert file:///c:/ to c: if needed nsCOMPtr file = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv); if (NS_FAILED(rv) || - (NS_FAILED(rv = NS_InitFileFromURLSpec(file, postDataURL)) && NS_FAILED(rv = file->InitWithPath(postDataURL))) || + (NS_FAILED(rv = NS_InitFileFromURLSpec(file, nsDependentCString(postDataURL))) && + NS_FAILED(rv = file->InitWithPath(postDataURL))) || NS_FAILED(rv = file->GetFileSize(&fileSize)) || NS_FAILED(rv = file->GetPath(getter_Copies(filename))) ) diff --git a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h index cbe0307ac83..c78104b5893 100644 --- a/mozilla/modules/plugin/base/src/nsPluginHostImpl.h +++ b/mozilla/modules/plugin/base/src/nsPluginHostImpl.h @@ -121,7 +121,7 @@ struct nsActivePlugin nsActivePlugin(nsPluginTag* aPluginTag, nsIPluginInstance* aInstance, - char * url, + const char * url, PRBool aDefaultPlugin); ~nsActivePlugin(); @@ -142,8 +142,8 @@ public: PRBool add(nsActivePlugin * plugin); PRBool remove(nsActivePlugin * plugin, PRBool * aUnloadLibraryLater); nsActivePlugin * find(nsIPluginInstance* instance); - nsActivePlugin * find(char * mimetype); - nsActivePlugin * findStopped(char * url); + nsActivePlugin * find(const char * mimetype); + nsActivePlugin * findStopped(const char * url); PRUint32 getStoppedCount(); nsActivePlugin * findOldestStopped(); void removeAllStopped(); diff --git a/mozilla/modules/plugin/base/src/nsPluginViewer.cpp b/mozilla/modules/plugin/base/src/nsPluginViewer.cpp index e4569c88371..6646c8445ae 100644 --- a/mozilla/modules/plugin/base/src/nsPluginViewer.cpp +++ b/mozilla/modules/plugin/base/src/nsPluginViewer.cpp @@ -409,12 +409,11 @@ PluginViewerImpl::CreatePlugin(nsIRequest* request, nsIPluginHost* aHost, const rv = mChannel->GetURI(&uri); if (NS_FAILED(rv)) return rv; - char* spec; - rv = uri->GetSpec(&spec); + nsCAutoString spec; + rv = uri->GetSpec(spec); NS_RELEASE(uri); if (NS_FAILED(rv)) return rv; - nsAutoString str; str.AssignWithConversion(spec); - nsCRT::free(spec); + NS_ConvertUTF8toUCS2 str(spec); char* ct; diff --git a/mozilla/netwerk/base/public/MANIFEST_IDL b/mozilla/netwerk/base/public/MANIFEST_IDL index 45f90d9677e..bf063c13c37 100644 --- a/mozilla/netwerk/base/public/MANIFEST_IDL +++ b/mozilla/netwerk/base/public/MANIFEST_IDL @@ -7,6 +7,7 @@ nsIAuthPrompt.idl nsIChannel.idl nsIDirectoryListing.idl nsIDownloader.idl +nsIFileURL.idl nsIFileChannel.idl nsIFileTransportService.idl nsIMIMEInputStream.idl @@ -37,6 +38,7 @@ nsIURI.idl nsIURIChecker.idl nsIURL.idl nsIURLParser.idl +nsIStandardURL.idl nsIWebFilters.idl nsISecurityEventSink.idl nsISecretDecoderRing.idl diff --git a/mozilla/netwerk/base/public/Makefile.in b/mozilla/netwerk/base/public/Makefile.in index b24ee22bed6..f6b626b8b3f 100644 --- a/mozilla/netwerk/base/public/Makefile.in +++ b/mozilla/netwerk/base/public/Makefile.in @@ -70,6 +70,8 @@ XPIDLSRCS = \ nsIURI.idl \ nsIURIChecker.idl \ nsIURL.idl \ + nsIFileURL.idl \ + nsIStandardURL.idl \ nsIURLParser.idl \ nsIWebFilters.idl \ nsISecurityEventSink.idl \ diff --git a/mozilla/netwerk/base/public/makefile.win b/mozilla/netwerk/base/public/makefile.win index 26158a4292f..e61c83102f3 100644 --- a/mozilla/netwerk/base/public/makefile.win +++ b/mozilla/netwerk/base/public/makefile.win @@ -76,6 +76,8 @@ XPIDLSRCS = \ .\nsIURIChecker.idl \ .\nsIURL.idl \ .\nsIURLParser.idl \ + .\nsIFileURL.idl \ + .\nsIStandardURL.idl \ .\nsIWebFilters.idl \ .\nsISecurityEventSink.idl \ .\nsISecretDecoderRing.idl \ diff --git a/mozilla/netwerk/base/public/netCore.h b/mozilla/netwerk/base/public/netCore.h index e0fdc16071f..2cc561d73bf 100644 --- a/mozilla/netwerk/base/public/netCore.h +++ b/mozilla/netwerk/base/public/netCore.h @@ -51,6 +51,9 @@ // XXX Why can't we put all Netwerk error codes in one file to help avoid collisions? +#define NS_ERROR_MALFORMED_URI \ + NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_NETWORK, 10) + #define NS_ERROR_ALREADY_CONNECTED \ NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_NETWORK, 11) @@ -65,6 +68,10 @@ #define NS_ERROR_OFFLINE \ NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_NETWORK, 16) +// Unknown Protocol Error +#define NS_ERROR_UNKNOWN_PROTOCOL \ + NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_NETWORK, 18) + #define NS_ERROR_PORT_ACCESS_NOT_ALLOWED \ NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_NETWORK, 19) diff --git a/mozilla/netwerk/base/public/nsIChannel.idl b/mozilla/netwerk/base/public/nsIChannel.idl index fd21230ab3d..2660cf3f1c2 100644 --- a/mozilla/netwerk/base/public/nsIChannel.idl +++ b/mozilla/netwerk/base/public/nsIChannel.idl @@ -155,9 +155,9 @@ interface nsIChannel : nsIRequest * via nsICachingChannel. */ const unsigned long CACHE_AS_FILE = 1 << 19; +}; %{C++ // There is no content available (when asyncOpen is called) #define NS_ERROR_NO_CONTENT NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_NETWORK, 17) %} -}; diff --git a/mozilla/netwerk/base/public/nsIFileChannel.idl b/mozilla/netwerk/base/public/nsIFileChannel.idl index 71c952d2035..ba60a8c3964 100644 --- a/mozilla/netwerk/base/public/nsIFileChannel.idl +++ b/mozilla/netwerk/base/public/nsIFileChannel.idl @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Darin Fisher * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -35,23 +36,9 @@ * * ***** END LICENSE BLOCK ***** */ -interface nsIFile; #include "nsIChannel.idl" -#include "nsIURL.idl" -/** - * nsIFileURL is used for the file: protocol, and gives access to the - * underlying nsIFile object. - */ -[scriptable, uuid(d26b2e2e-1dd1-11b2-88f3-8545a7ba7949)] -interface nsIFileURL : nsIURL -{ - /** - * setter clones and getter references, meaning that you must clone the - * resulting nsIFile if you wish to modify it. - */ - attribute nsIFile file; -}; +interface nsIFile; /** * nsIFileChannel is an interface that allows for the initialization diff --git a/mozilla/netwerk/base/public/nsIFileURL.idl b/mozilla/netwerk/base/public/nsIFileURL.idl new file mode 100644 index 00000000000..12fa3e2f237 --- /dev/null +++ b/mozilla/netwerk/base/public/nsIFileURL.idl @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: NPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Netscape Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Darin Fisher + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the NPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsIURL.idl" + +interface nsIFile; + +/** + * nsIFileURL is used for the file: protocol, and gives access to the + * underlying nsIFile object. + */ +[scriptable, uuid(d26b2e2e-1dd1-11b2-88f3-8545a7ba7949)] +interface nsIFileURL : nsIURL +{ + /** + * setter clones and getter references, meaning that you must clone the + * resulting nsIFile if you wish to modify it. + */ + attribute nsIFile file; +}; diff --git a/mozilla/netwerk/base/public/nsIIOService.idl b/mozilla/netwerk/base/public/nsIIOService.idl index 7c60c9c51e6..71fed229ab6 100644 --- a/mozilla/netwerk/base/public/nsIIOService.idl +++ b/mozilla/netwerk/base/public/nsIIOService.idl @@ -43,22 +43,26 @@ interface nsIURI; interface nsIURLParser; interface nsIFile; +%{C++ +#include "nsAString.h" +%} + [scriptable, uuid(ab7c3a84-d488-11d3-8cda-0060b0fc14a3)] interface nsIIOService : nsISupports { /** * Returns a protocol handler for a given URI scheme. * - * @param scheme URI scheme - * @return reference to nsIProtcolHandler + * @param scheme URI scheme + * @return reference to nsIProtcolHandler */ nsIProtocolHandler getProtocolHandler(in string scheme); /** * Returns the protocol flags for a given scheme. * - * @param scheme URI scheme - * @return returns unsigned long for protocol flags + * @param scheme URI scheme + * @return returns unsigned long for protocol flags */ unsigned long getProtocolFlags(in string scheme); @@ -67,20 +71,19 @@ interface nsIIOService : nsISupports * of the URI spec, and then delegating the construction of the URI * to the protocol handler for that scheme. QueryInterface can be used * on the resulting URI object to obtain a more specific type of URI. - * - * @param aSpec URI spec (http, ftp, etc) - * @param aBaseURI nsIURI to construct the actual URI from - * @return reference to a new nsIURI object + * @see nsIProtocolHandler::newURI */ - nsIURI newURI(in string aSpec, in nsIURI aBaseURI); + nsIURI newURI(in AUTF8String aSpec, + in string aOriginCharset, + in nsIURI aBaseURI); /** * This method constructs a new file URI * - * @param aSpec nsIFile - * @return reference to a new nsIURI object + * @param aFile nsIFile from which to make an URI from + * @return reference to a new nsIURI object */ - nsIURI newFileURI(in nsIFile aSpec); + nsIURI newFileURI(in nsIFile aFile); /** * Creates a channel for a given URI. The notificationCallbacks argument @@ -94,27 +97,17 @@ interface nsIIOService : nsISupports * causing the current URL to become different from the original URL. * If NULL, the aURI parameter will be used as the originalURI instead. * - * @param aURI - nsIURI to make a channel from - * @return a reference to the new nsIChannel object + * @param aURI nsIURI to make a channel from + * @return a reference to the new nsIChannel object */ nsIChannel newChannelFromURI(in nsIURI aURI); /** - * Convenience routine that first creates a URI by calling NewURI, and - * then passes the URI to NewChannelFromURI. - * - * @param originalURI - Specifies the original URI which caused the - * creation of this channel. This can occur when the construction of - * one channel (e.g. for resource:) causes another channel to be created - * on its behalf (e.g. a file: channel), or if a redirect occurs, - * causing the current URL to become different from the original URL. - * If NULL, the aURI parameter will be used as the originalURI instead. - * - * @param aSpec URI spec to select the appropriate protocol handler - * @param aBaseURI a base URI to create a channel to - * @return a reference to the new nsIChannel object + * Shortcut equivalent to newChannelFromURI(newURI(...)) */ - nsIChannel newChannel(in string aSpec, in nsIURI aBaseURI); + nsIChannel newChannel(in AUTF8String aSpec, + in string aOriginCharset, + in nsIURI aBaseURI); /** * Returns true if networking is in "offline" mode. When in offline mode, @@ -133,7 +126,6 @@ interface nsIIOService : nsISupports * |allowPort| will ask the protocol handler if it wishes to override. * Scheme can be null. */ - boolean allowPort(in long port, in string scheme); //////////////////////////////////////////////////////////////////////////// @@ -142,32 +134,26 @@ interface nsIIOService : nsISupports /** * Utility for protocol implementors -- extracts the scheme from a URL * string, consistently and according to spec. - * @param urlString - the URL string to parse - * @param schemeStartPos - the resulting starting position - * of the scheme substring (may skip over whitespace) - * @param schemeEndPos - the resulting ending position - * of the scheme substring (the position of the colon) - * @param scheme - an allocated substring containing the scheme. - * If this parameter is null going into the routine, - * then the scheme is not allocated and returned. - * Free with nsCRT::free. * - * @return NS_OK - if successful - * @return NS_ERROR_MALFORMED_URI - if the urlString is not of - * the right form + * @param urlString the URL string to parse + * @return scheme + * + * @throws NS_ERROR_MALFORMED_URI if urlString is not of the right form. */ - string extractScheme(in string urlString, - out unsigned long schemeStartPos, - out unsigned long schemeEndPos); - + ACString extractScheme(in AUTF8String urlString); + /** + * returns the protocol specific URL parser + */ nsIURLParser getParserForScheme(in string scheme); - string extractUrlPart(in string urlString, - in short flag, - out unsigned long startPos, - out unsigned long endPos); - + /** + * @param urlString absolute URL path. + * @param flags combination of url_XXX flags. + * + * @throws NS_ERROR_MALFORMED_URI if urlString is not of the right form. + */ + AUTF8String extractUrlPart(in AUTF8String urlString, in short flags); /** * Constants for the mask in the call to extractUrlPart @@ -187,14 +173,6 @@ interface nsIIOService : nsISupports const short url_Path = (1<<10); const short url_Port = (1<<11); - /** - * Get port from string. - * - * @param str URI-style string - * @return port number - */ - long extractPort(in string str); - /** * Resolves a relative path string containing "." and ".." * with respect to a base path (assumed to already be resolved). @@ -203,31 +181,29 @@ interface nsIIOService : nsISupports * ascend above the base results in the NS_ERROR_MALFORMED_URI * exception. If basePath is null, it treats it as "/". * - * @param relativePath a relative URI - * @param basePath a base URI - * @return a new string, representing canonical uri + * @param relativePath a relative URI + * @param basePath a base URI + * + * @return a new string, representing canonical uri */ - string resolveRelativePath(in string relativePath, - in string basePath); + AUTF8String resolveRelativePath(in AUTF8String relativePath, + in AUTF8String basePath); /** * conversions between nsILocalFile and a file url string */ /** - * getURLSpecFromFile * gets a file:// url out of an nsIFile - * @param file the file to extract the path from + * @param file the file to extract the path from * @return a file:// style url string */ - string getURLSpecFromFile(in nsIFile file); + AUTF8String getURLSpecFromFile(in nsIFile file); /** - * initFileFromURL * Sets the native path of the file given the url string - * @param file the file to initialize with the given spec - * @param url the url string which will be used to initialize the file - * + * @param file the file to initialize with the given spec + * @param url the url string which will be used to initialize the file */ - void initFileFromURLSpec(in nsIFile file, in string url); + void initFileFromURLSpec(in nsIFile file, in AUTF8String url); }; diff --git a/mozilla/netwerk/base/public/nsIProtocolHandler.idl b/mozilla/netwerk/base/public/nsIProtocolHandler.idl index e125a06b44c..15c015b39f2 100644 --- a/mozilla/netwerk/base/public/nsIProtocolHandler.idl +++ b/mozilla/netwerk/base/public/nsIProtocolHandler.idl @@ -40,71 +40,101 @@ interface nsIURI; +%{C++ +#include "nsAString.h" +%} + [scriptable, uuid(15fd6940-8ea7-11d3-93ad-00104ba0fd40)] interface nsIProtocolHandler : nsISupports { - readonly attribute string scheme; + /** + * Returns the scheme of this protocol (e.g., "http"). + */ + readonly attribute ACString scheme; /** * Default Port will be the port that this protocol normally - * uses. If a port does not make sense for the protocol (eg about://) - * -1 will be returned. + * uses. If a port does not make sense for the protocol (e.g., "about:") + * then -1 will be returned. */ - readonly attribute long defaultPort; - /** - * constants for the uritype mask + /************************************************************************* + * Constants for the protocol flags (the first is the default mask, the + * others are deviations): */ - /* the first is the default mask 0, the following masks are deviations */ + /** + * standard full URI with authority component and concept of relative + * URIs (http, ftp, ...) + */ + const unsigned long URI_STD = 0; - /* standard full uri, has authority component and - has concept of relative uris (http, ftp, ...) */ - const unsigned long URI_STD = 0; - - /* no concept of relative uris, (about, rdf, javascript, finger, ...) */ + /** + * no concept of relative URIs (about, javascript, finger, ...) + */ const unsigned long URI_NORELATIVE = (1<<0); - /* no authority component (file, ...) */ - const unsigned long URI_NOAUTH = (1<<1); + /** + * no authority component (file, ...) + */ + const unsigned long URI_NOAUTH = (1<<1); - /* This uri can be proxied via a proxy (socks or http) - * (ie irc, smtp, http, etc). If the protocol supports transparent - * proxying, the handler should implement nsIProxiedProtocolHandler - * If it supports http proxying, then it should also set the flag - * ALLOWS_PROXY_HTTP (see below) + /** + * This protocol handler can be proxied via a proxy (socks or http) + * (ie irc, smtp, http, etc). If the protocol supports transparent + * proxying, the handler should implement nsIProxiedProtocolHandler. + * + * If it supports only HTTP proxying, then it need not support + * nsIProxiedProtocolHandler, but should instead set the + * ALLOWS_PROXY_HTTP flag (see below). * * @see nsIProxiedProtocolHandler */ - const unsigned long ALLOWS_PROXY = (1<<2); + const unsigned long ALLOWS_PROXY = (1<<2); - /* This uri can be proxied using an http proxy (ie http, ftp, etc). - * You need to have ALLOWS_PROXY set as well, if you want this to do anything + /** + * This protocol handler can be proxied using an http proxy (ie http, + * ftp, etc). nsIIOService::newChannelFromURI will feed URIs from this + * protocol handler to the HTTP protocol handler instead. You need to + * have ALLOWS_PROXY set as well, if you want this to do anything. */ const unsigned long ALLOWS_PROXY_HTTP = (1<<3); - /* more to come as needed */ - + /** + * Returns the protocol specific flags. + */ readonly attribute unsigned long protocolFlags; /** - * Makes a URI object that is suitable for loading by this protocol. - * In the usual case (when only the accessors provided by nsIURI are - * needed), this method just constructs a standard URI using the - * component manager with kStandardURLCID. aBaseURI may be nsnull. + * Makes a URI object that is suitable for loading by this protocol, + * where the URI string is given as an UTF-8 string. The caller may + * provide the charset from which the URI string originated, so that + * the URI string can be translated back to that charset (if necessary) + * before communicating with, for example, the origin server of the URI + * string. Many servers do not support UTF-8 IRIs at the present time, + * so we must be careful about tracking the native charset of the origin + * server. + * + * @param aSpec - the URI string in UTF-8 encoding. depending + * on the protocol implementation, unicode character + * sequences may or may not be %xx escaped. + * @param aOriginCharset - the charset of the document from which this URI + * string originated. this corresponds to the + * charset that should be used when communicating + * this URI to an origin server, for example. if + * null, then UTF-8 encoding is assumed (i.e., + * no charset transformation from aSpec). + * @param aBaseURI - if null, aSpec must specify an absolute URI. + * otherwise, aSpec will be resolved relative + * to aBaseURI. */ - nsIURI newURI(in string aSpec, in nsIURI aBaseURI); + nsIURI newURI(in AUTF8String aSpec, + in string aOriginCharset, + in nsIURI aBaseURI); /** - * Constructs a new channel for this protocol handler. - * - * @param originalURI - Specifies the original URI which caused the creation - * of this channel. This can occur when the construction of one channel - * (e.g. for resource:) causes another channel to be created on its behalf - * (e.g. a file: channel), or if a redirect occurs, causing the current - * URL to become different from the original URL. If NULL, the aURI parameter - * will be used as the originalURI instead. + * Constructs a new channel from the given URI for this protocol handler. */ nsIChannel newChannel(in nsIURI aURI); @@ -113,21 +143,21 @@ interface nsIProtocolHandler : nsISupports * * |allowPort| will be called when there is an attempt to connect to a port * that is blacklisted. For example, for most protocols, port 25 (Simple Mail - * Transfer) is banned. When a url containing this "known-to-do-bad-things" + * Transfer) is banned. When a URI containing this "known-to-do-bad-things" * port number is encountered, this function will be called to ask if the - * protocol handler wants to override the band. + * protocol handler wants to override the ban. */ - boolean allowPort(in long port, in string scheme); }; %{C++ - +/** + * Protocol handlers are registered with XPCOM under the following CONTRACTID prefix: + */ #define NS_NETWORK_PROTOCOL_CONTRACTID "@mozilla.org/network/protocol;1" #define NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX NS_NETWORK_PROTOCOL_CONTRACTID "?name=" -#define NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX_LENGTH 37 // nsCRT::strlen(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX) - -// Unknown Protocol Error -#define NS_ERROR_UNKNOWN_PROTOCOL NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_NETWORK, 18) - +#define NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX_LENGTH (sizeof(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX)-1) +/** + * For example, "@mozilla.org/network/protocol;1?name=http" + */ %} diff --git a/mozilla/netwerk/base/public/nsIStandardURL.idl b/mozilla/netwerk/base/public/nsIStandardURL.idl new file mode 100644 index 00000000000..ec2ffa1ca25 --- /dev/null +++ b/mozilla/netwerk/base/public/nsIStandardURL.idl @@ -0,0 +1,110 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: NPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Netscape Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Gagan Saksena (original author) + * Darin Fisher + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the NPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsISupports.idl" + +interface nsIURI; + +/** + * Protocol writers can obtain a default nsIURL implementation by calling the + * component manager with NS_STANDARDURL_CID. The implementation returned will + * implement only the set of accessors specified by nsIURL. After obtaining the + * instance from the component manager, the Init routine must be called on the + * new instance to initialize it from the user's URL spec. + */ +[scriptable, uuid(8793370a-311f-11d4-9876-00c04fa0cf4a)] +interface nsIStandardURL : nsISupports +{ + /** + * blah:foo/bar => blah://foo/bar + * blah:/foo/bar => blah:///foo/bar + * blah://foo/bar => blah://foo/bar + * blah:///foo/bar => blah:///foo/bar + */ + const unsigned long URLTYPE_STANDARD = 1; + + /** + * blah:foo/bar => blah://foo/bar + * blah:/foo/bar => blah://foo/bar + * blah://foo/bar => blah://foo/bar + * blah:///foo/bar => blah://foo/bar + */ + const unsigned long URLTYPE_AUTHORITY = 2; + + /** + * blah:foo/bar => blah:///foo/bar + * blah:/foo/bar => blah:///foo/bar + * blah://foo/bar => blah://foo/bar + * blah:///foo/bar => blah:///foo/bar + */ + const unsigned long URLTYPE_NO_AUTHORITY = 3; + + /** + * Initialize a standard URL. + * + * @param aUrlType - one of the URLTYPE_XXX flags. + * @param aDefaultPort - if the port parsed from the URL string matches + * this port, then the port will be removed from the + * canonical form of the URL. + * @param aSpec - URL string. + * @param aOriginCharset - the charset from which this URI string + * originated. this corresponds to the charset + * that should be used when communicating this + * URI to an origin server, for example. if + * null, then provide aBaseURI implements this + * interface, the origin charset of aBaseURI will + * be assumed, otherwise defaulting to UTF-8 (i.e., + * no charset transformation from aSpec). + * @param aBaseURI - if null, aSpec must specify an absolute URI. + * otherwise, aSpec will be resolved relative + * to aBaseURI. + */ + void init(in unsigned long aUrlType, + in long aDefaultPort, + in AUTF8String aSpec, + in string aOriginCharset, + in nsIURI aBaseURI); + + /** + * Control whether or not this URL can be modified. Protocol handlers + * can set this flag before handing out an URL to ensure that it is not + * inadvertently modified. + */ + attribute boolean mutable; +}; diff --git a/mozilla/netwerk/base/public/nsIURI.idl b/mozilla/netwerk/base/public/nsIURI.idl index 775206322f7..574f7744c0b 100644 --- a/mozilla/netwerk/base/public/nsIURI.idl +++ b/mozilla/netwerk/base/public/nsIURI.idl @@ -21,6 +21,7 @@ * * Contributor(s): * Gagan Saksena (original author) + * Darin Fisher * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -39,14 +40,12 @@ #include "nsISupports.idl" /** - * URIs are essentially structured names for things -- anything. - * This interface provides accessors to destructure those names. + * URIs are essentially structured names for things -- anything. This interface + * provides accessors to set and query the most basic components of an URI. + * Subclasses, including nsIURL, impose greater structure on the URI. * - * This interface follows Tim Berners-Lee's URI spec: - * - * http://www.w3.org/Addressing/URI/URI_Overview.html - * - * essentially: + * This interface follows Tim Berners-Lee's URI spec (RFC2396) [1], where the + * basic URI components are defined as such: * * ftp://username:password@hostname:portnumber/pathname * \ / \ / \ / \ /\ / @@ -55,147 +54,180 @@ * | | | | Path * | | | Port * | | Host / - * | PreHost / + * | UserPass / * Scheme / * \ / * -------------------------------- * | * PrePath * - * The subclass nsIURL provides a means to open an input or output - * stream to a URI as a source/destination, as well as providing additional - * accessors to destructure the path, query and reference portions typically - * associated with URLs. + * The definition of the URI components has been extended to allow for + * internationalized domain names [2] and the more generic IRI structure [3]. * - * @status UNDER_REVIEW + * [1] http://www.ietf.org/rfc/rfc2396.txt + * [2] http://www.ietf.org/internet-drafts/draft-ietf-idn-idna-06.txt + * [3] http://www.ietf.org/internet-drafts/draft-masinter-url-i18n-08.txt */ %{C++ #undef GetPort // XXX Windows! #undef SetPort // XXX Windows! -#ifdef XP_OS2 // OS2 has UNKNOWN problems :) -#undef UNKNOWN -#endif +#include "nsAString.h" %} +/** + * nsIURI - interface for an uniform resource identifier w/ i18n support. + * + * AUTF8String attributes may contain unescaped UTF-8 characters. + * Consumers should be careful to escape the UTF-8 strings as necessary, but + * should always try to "display" the UTF-8 version as provided by this + * interface. + * + * AUTF8String attributes may also contain escaped characters. + * + * Unescaping URI segments is unadvised unless there is intimate + * knowledge of the underlying charset or there is no plan to display (or + * otherwise enforce a charset on) the resulting URI substring. + * + * @status UNDER_REVIEW + */ [scriptable, uuid(07a22cc0-0ce5-11d3-9331-00104ba0fd40)] interface nsIURI : nsISupports { - - /** - * Returns a string representation of the URI. Setting the spec - * causes the new spec to be parsed, initializing the URI. Setting - * the spec (or any of the accessors) causes also any currently - * open streams on the URI's channel to be closed. + /************************************************************************ + * The URI is broken down into the following principal components: */ - attribute string spec; /** - * The prePath returns the stuff before the path - * (e.g. protocol://user:password@host:port/). This is useful for - * authentication, or managing sessions. + * Returns a string representation of the URI. Setting the spec causes + * the new spec to be parsed, initializing the URI. + * + * Some characters may be escaped. */ - attribute string prePath; + attribute AUTF8String spec; /** - * The Scheme is the protocol to which this URI refers. Setting - * the scheme is a special operation that builds up an equivalent - * URI string from the new scheme and all the other URI attributes - * and passes the it to the nsIOService to create a new URI for - * the new scheme. + * The prePath (eg. scheme://user:password@host:port) returns the string + * before the path. This is useful for authentication or managing sessions. + * + * Some characters may be escaped. */ - attribute string scheme; + readonly attribute AUTF8String prePath; /** - * The PreHost portion includes elements like the optional - * username:password, or maybe other scheme specific items. + * The Scheme is the protocol to which this URI refers. The scheme is + * restricted to the US-ASCII charset per RFC2396. */ - attribute string preHost; - - attribute string username; - - attribute string password; + attribute ACString scheme; /** - * The Host is the internet domain name to which this URI refers. - * Note that it could be an IP address as well. + * The username:password (or username only if value doesn't contain a ':') + * + * Some characters may be escaped. */ - attribute string host; + attribute AUTF8String userPass; /** - * A return value of -1 indicates that no port value is set and the - * implementor of the specific scheme will use its default port. - * Similarly setting a value of -1 indicates that the default is to be used. - * Thus as an example: - * for HTTP, Port 80 is same as a return value of -1. - * However after setting a port (even if its default), the port number will - * appear in the ToNewCString function. + * The optional username and password, assuming the preHost consists of + * username:password. + * + * Some characters may be escaped. + */ + attribute AUTF8String username; + attribute AUTF8String password; + + /** + * The host:port (or simply the host, if port == -1). + * + * Characters are NOT escaped. + */ + attribute AUTF8String hostPort; + + /** + * The host is the internet domain name to which this URI refers. It could + * be an IPv4 (or IPv6) address literal. If supported, it could be a + * non-ASCII internationalized domain name. + * + * Characters are NOT escaped. + */ + attribute AUTF8String host; + + /** + * A port value of -1 corresponds to the protocol's default port (eg. -1 + * implies port 80 for http URIs). */ attribute long port; /** - * Note that the path includes the leading '/' Thus if no path is - * available the Path accessor will return a "/" - * For SetPath if none is provided, one would be prefixed to the path. + * The path, typically including at least a leading '/' (but may also be + * empty, depending on the protocol). + * + * Some characters may be escaped. + */ + attribute AUTF8String path; + + + /************************************************************************ + * An URI supports the following methods: */ - attribute string path; /** - * Note that this comparison is only on char* level. Use - * the scheme specific URI to do a more thorough check. For example, - * in HTTP: - * http://foo.com:80 == http://foo.com - * but this function through nsIURI alone will not return equality - * for this case. + * URI equivalence test (not a strict string comparison). + * + * eg. http://foo.com:80/ == http://foo.com/ */ boolean equals(in nsIURI other); /** - * An optimization to do scheme checks without requiring the users of nsIURI - * to GetScheme thereby saving extra allocating and freeing. Returns true if - * the schemes match (case ignored). Note that for unknown cases this will - * always return false. - */ + * An optimization to do scheme checks without requiring the users of nsIURI + * to GetScheme, thereby saving extra allocating and freeing. Returns true if + * the schemes match (case ignored). + */ boolean schemeIs(in string scheme); /** - * Clones the current URI. The newly created URI will be in a closed - * state even if the underlying channel of the cloned URI is open. - * Cloning allows the current location to be retained since once the - * channel is opened the URI may get redirected to a new location. + * Clones the current URI. For some protocols, this is more than just an + * optimization. For example, under MacOS, the spec of a file URL does not + * necessarily uniquely identify a file since two volumes could share the + * same name. */ nsIURI clone(); /** * This method resolves a relative string into an absolute URI string, - * using the URI as the base. + * using this URI as the base. * - * This method subsumes the deprecated method nsIIOService::MakeAbsolute. + * NOTE: some implementations may have no concept of a relative URI. */ - string resolve(in string relativePath); + AUTF8String resolve(in AUTF8String relativePath); + + /************************************************************************ + * Additional attributes: + */ + + /** + * The URI spec with an ASCII compatible encoding. Host portion follows + * the IDNA draft spec. Other parts are URL-escaped per the rules of + * RFC2396. The result is strictly ASCII. + */ + readonly attribute ACString asciiSpec; + + /** + * The URI host with an ASCII compatible encoding. Follows the IDNA + * draft spec for converting internationalized domain names (UTF-8) to + * ASCII for compatibility with existing internet infrasture. + */ + readonly attribute ACString asciiHost; + + /** + * The charset of the document from which this URI originated. An empty + * value implies UTF-8. + * + * If this value is something other than UTF-8 then the URI components + * (e.g., spec, prePath, username, etc.) will all be fully URL-escaped. + * Otherwise, the URI components may contain unescaped multibyte UTF-8 + * characters. + */ + readonly attribute ACString originCharset; }; - -/** - * Protocol writers can obtain a very basic (ok, degenerate) implementation - * of nsIURI by calling the component manager with NS_SIMPLEURI_CID. The - * implementation returned will only parse things of the form: - * - * about:cache - * \ / \ / - * --- --- - * | | - * Scheme Path - * - * where the path is everything after the colon. Note that this is probably - * only useful for cases like about: or javascript: URIs. - * - * *** What you most likely will want is NS_STANDARDURL_CID which is much more - * full featured. Look at nsIURL.idl for more details. - * - * NOTE: CIDs are declared in build/nsNetCID.h - */ - -%{C++ -#define NS_ERROR_MALFORMED_URI NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_NETWORK, 10) -%} diff --git a/mozilla/netwerk/base/public/nsIURIChecker.idl b/mozilla/netwerk/base/public/nsIURIChecker.idl index 0f0ea468102..c0256289996 100644 --- a/mozilla/netwerk/base/public/nsIURIChecker.idl +++ b/mozilla/netwerk/base/public/nsIURIChecker.idl @@ -42,6 +42,10 @@ interface nsIRequest; interface nsIRequestObserver; +%{C++ +#include "nsAString.h" +%} + [scriptable,uuid(0ce148b2-1dd2-11b2-ba70-af918b44b323)] interface nsIURIChecker : nsISupports { @@ -66,7 +70,7 @@ interface nsIURIChecker : nsISupports * nsIRequestObserver methods * @param aLoadFlags Load flags to set on the base request. */ - nsIRequest asyncCheckURI(in string uri, in nsIRequestObserver aObserver, + nsIRequest asyncCheckURI(in AUTF8String uri, in nsIRequestObserver aObserver, in nsISupports aCtxt, in nsLoadFlags aLoadFlags); readonly attribute nsIRequest baseRequest; diff --git a/mozilla/netwerk/base/public/nsIURL.idl b/mozilla/netwerk/base/public/nsIURL.idl index 1673c8f2caf..79f0ed9a2de 100644 --- a/mozilla/netwerk/base/public/nsIURL.idl +++ b/mozilla/netwerk/base/public/nsIURL.idl @@ -21,6 +21,7 @@ * * Contributor(s): * Gagan Saksena (original author) + * Darin Fisher * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -58,38 +59,46 @@ [scriptable, uuid(d6116970-8034-11d3-9399-00104ba0fd40)] interface nsIURL : nsIURI { - //////////////////////////////////////////////////////////////////////////// - // The path attribute is broken down into the following attributes: - // filePath, param, query, and ref: + /************************************************************************* + * The URL path is broken down into the following principal components: + */ /** * Returns a path including the directory and file portions of a - * URL. E.g. The filePath of "http://foo/bar.html#baz" is - * "/foo/bar.html". + * URL. For example, the filePath of "http://foo/bar.html#baz" is + * "/foo/bar.html". + * + * ((( may contain unescaped UTF-8 characters ))) */ - attribute string filePath; + attribute AUTF8String filePath; /** * Returns the parameters specified after the ; in the URL. * + * ((( may contain unescaped UTF-8 characters ))) */ - attribute string param; + attribute AUTF8String param; /** * Returns the query portion (the part after the "?") of the URL. * If there isn't one, an empty string is returned. + * + * ((( may contain unescaped UTF-8 characters ))) */ - attribute string query; + attribute AUTF8String query; /** * Returns the reference portion (the part after the "#") of the URL. * If there isn't one, an empty string is returned. + * + * ((( may contain unescaped UTF-8 characters ))) */ - attribute string ref; + attribute AUTF8String ref; - //////////////////////////////////////////////////////////////////////////// - // The filePath attribute is further broken down into the following - // attributes: directory, file: + + /************************************************************************* + * The URL filepath is broken down into the following sub-components: + */ /** * Returns the directory portion of a URL. @@ -102,8 +111,10 @@ interface nsIURL : nsIURI * And hence dont rely on this for something to be a definitely * be a file. But you can get just the leading directory portion * for sure. + * + * ((( may contain unescaped UTF-8 characters ))) */ - attribute string directory; + attribute AUTF8String directory; /** * Returns the file name portion of a URL. @@ -113,68 +124,28 @@ interface nsIURL : nsIURI * empty string. Note that this is purely based on searching * for the last trailing slash. And hence dont rely on this to * be a definite file. + * + * ((( may contain unescaped UTF-8 characters ))) */ - attribute string fileName; + attribute AUTF8String fileName; - //////////////////////////////////////////////////////////////////////////// - // The fileName attribute is further broken down into the following - // attributes: fileName, fileExtension: - attribute string fileBaseName; + /************************************************************************* + * The URL filename is broken down even further: + */ /** - * Returns the file extension portion of a filename in a url. - * If a file extension does not exist, the empty string is returned. + * Returns the file basename portion of a filename in a url. + * + * ((( may contain unescaped UTF-8 characters ))) */ - attribute string fileExtension; + attribute AUTF8String fileBaseName; /** - * Returns the query portion (the part after the "?") of the URL - * without unescaping the string. - * If there isn't one, an empty string is returned. + * Returns the file extension portion of a filename in a url. If a file + * extension does not exist, the empty string is returned. + * + * ((( may contain unescaped UTF-8 characters ))) */ - readonly attribute string escapedQuery; -}; - -//////////////////////////////////////////////////////////////////////////////// - -/** - * Protocol writers can obtain a default nsIURL implementation by calling the - * component manager with NS_STANDARDURL_CID. The implementation returned will - * implement only the set of accessors specified by nsIURL. After obtaining the - * instance from the component manager, the Init routine must be called on the - * new instance to initialize it from the user's URL spec. - */ - -[scriptable, uuid(8793370a-311f-11d4-9876-00c04fa0cf4a)] -interface nsIStandardURL : nsISupports -{ - /** - * blah:foo/bar => blah://foo/bar - * blah:/foo/bar => blah:///foo/bar - * blah://foo/bar => blah://foo/bar - * blah:///foo/bar => blah:///foo/bar - */ - const unsigned long URLTYPE_STANDARD = 1; - - /** - * blah:foo/bar => blah://foo/bar - * blah:/foo/bar => blah://foo/bar - * blah://foo/bar => blah://foo/bar - * blah:///foo/bar => blah://foo/bar - */ - const unsigned long URLTYPE_AUTHORITY = 2; - - /** - * blah:foo/bar => blah:///foo/bar - * blah:/foo/bar => blah:///foo/bar - * blah://foo/bar => blah://foo/bar - * blah:///foo/bar => blah:///foo/bar - */ - const unsigned long URLTYPE_NO_AUTHORITY = 3; - - void init(in unsigned long urlType, - in long defaultPort, - in string initialSpec, - in nsIURI initialBaseURI); + attribute AUTF8String fileExtension; }; diff --git a/mozilla/netwerk/base/public/nsNetUtil.h b/mozilla/netwerk/base/public/nsNetUtil.h index ea7d31ceca2..aa225df1088 100644 --- a/mozilla/netwerk/base/public/nsNetUtil.h +++ b/mozilla/netwerk/base/public/nsNetUtil.h @@ -82,10 +82,11 @@ do_GetIOService(nsresult* error = 0) } inline nsresult -NS_NewURI(nsIURI* *result, - const char* spec, - nsIURI* baseURI = nsnull, - nsIIOService* ioService = nsnull) // pass in nsIIOService to optimize callers +NS_NewURI(nsIURI **result, + const nsACString &spec, + const char *charset = nsnull, + nsIURI *baseURI = nsnull, + nsIIOService *ioService = nsnull) // pass in nsIIOService to optimize callers { nsresult rv; @@ -96,21 +97,27 @@ NS_NewURI(nsIURI* *result, ioService = serv.get(); } - return ioService->NewURI(spec, baseURI, result); + return ioService->NewURI(spec, charset, baseURI, result); } inline nsresult NS_NewURI(nsIURI* *result, - const nsAReadableString& spec, + const nsAString& spec, + const char *charset = nsnull, nsIURI* baseURI = nsnull, nsIIOService* ioService = nsnull) // pass in nsIIOService to optimize callers { - NS_ConvertUCS2toUTF8 specStr(spec); // this forces a single byte char* - if (!spec.IsEmpty() && specStr.IsEmpty()) - return NS_ERROR_OUT_OF_MEMORY; - return NS_NewURI(result, specStr.get(), baseURI, ioService); + return NS_NewURI(result, NS_ConvertUCS2toUTF8(spec), charset, baseURI, ioService); } +inline nsresult +NS_NewURI(nsIURI* *result, + const char *spec, + nsIURI* baseURI = nsnull, + nsIIOService* ioService = nsnull) // pass in nsIIOService to optimize callers +{ + return NS_NewURI(result, nsDependentCString(spec), nsnull, baseURI, ioService); +} inline nsresult NS_NewFileURI(nsIURI* *result, @@ -130,12 +137,12 @@ NS_NewFileURI(nsIURI* *result, } inline nsresult -NS_OpenURI(nsIChannel* *result, - nsIURI* uri, - nsIIOService* ioService = nsnull, // pass in nsIIOService to optimize callers - nsILoadGroup* loadGroup = nsnull, - nsIInterfaceRequestor* notificationCallbacks = nsnull, - nsLoadFlags loadAttributes = NS_STATIC_CAST(nsLoadFlags, nsIRequest::LOAD_NORMAL)) +NS_NewChannel(nsIChannel* *result, + nsIURI* uri, + nsIIOService* ioService = nsnull, // pass in nsIIOService to optimize callers + nsILoadGroup* loadGroup = nsnull, + nsIInterfaceRequestor* notificationCallbacks = nsnull, + nsLoadFlags loadAttributes = NS_STATIC_CAST(nsLoadFlags, nsIRequest::LOAD_NORMAL)) { nsresult rv; @@ -184,8 +191,8 @@ NS_OpenURI(nsIInputStream* *result, nsresult rv; nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), uri, ioService, - loadGroup, notificationCallbacks, loadAttributes); + rv = NS_NewChannel(getter_AddRefs(channel), uri, ioService, + loadGroup, notificationCallbacks, loadAttributes); if (NS_FAILED(rv)) return rv; nsIInputStream* inStr; @@ -208,8 +215,8 @@ NS_OpenURI(nsIStreamListener* aConsumer, nsresult rv; nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), uri, ioService, - loadGroup, notificationCallbacks, loadAttributes); + rv = NS_NewChannel(getter_AddRefs(channel), uri, ioService, + loadGroup, notificationCallbacks, loadAttributes); if (NS_FAILED(rv)) return rv; rv = channel->AsyncOpen(aConsumer, context); @@ -217,38 +224,53 @@ NS_OpenURI(nsIStreamListener* aConsumer, } inline nsresult -NS_MakeAbsoluteURI(char* *result, - const char* spec, - nsIURI* baseURI = nsnull, - nsIIOService* ioService = nsnull) // pass in nsIIOService to optimize callers +NS_MakeAbsoluteURI(nsACString &result, + const nsACString &spec, + nsIURI *baseURI = nsnull, + nsIIOService *ioService = nsnull) // pass in nsIIOService to optimize callers { NS_ASSERTION(baseURI, "It doesn't make sense to not supply a base URI"); - - if (spec == nsnull) + + if (spec.IsEmpty()) return baseURI->GetSpec(result); - + return baseURI->Resolve(spec, result); } inline nsresult -NS_MakeAbsoluteURI(nsAWritableString& result, - const nsAReadableString& spec, - nsIURI* baseURI = nsnull, - nsIIOService* ioService = nsnull) // pass in nsIIOService to optimize callers +NS_MakeAbsoluteURI(char **result, + const char *spec, + nsIURI *baseURI = nsnull, + nsIIOService *ioService = nsnull) // pass in nsIIOService to optimize callers { - char* resultStr; - char* specStr = ToNewUTF8String(spec); - if (!specStr) { - return NS_ERROR_OUT_OF_MEMORY; - } - nsresult rv = NS_MakeAbsoluteURI(&resultStr, specStr, baseURI, ioService); - nsMemory::Free(specStr); + nsCAutoString resultBuf; + + nsresult rv = NS_MakeAbsoluteURI(resultBuf, nsDependentCString(spec), baseURI, ioService); if (NS_FAILED(rv)) return rv; - result.Assign(NS_ConvertUTF8toUCS2(resultStr)); - - nsMemory::Free(resultStr); - return rv; + *result = ToNewCString(resultBuf); + return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; +} + +inline nsresult +NS_MakeAbsoluteURI(nsAString &result, + const nsAString &spec, + nsIURI *baseURI = nsnull, + nsIIOService *ioService = nsnull) // pass in nsIIOService to optimize callers +{ + NS_ASSERTION(baseURI, "It doesn't make sense to not supply a base URI"); + + nsCAutoString resultBuf; + nsresult rv; + + if (spec.IsEmpty()) + rv = baseURI->GetSpec(resultBuf); + else + rv = baseURI->Resolve(NS_ConvertUCS2toUTF8(spec), resultBuf); + if (NS_FAILED(rv)) return rv; + + result = NS_ConvertUTF8toUCS2(resultBuf); // XXX CopyUTF8toUCS2 + return NS_OK; } inline nsresult @@ -307,12 +329,12 @@ NS_NewInputStreamChannel(nsIChannel **result, PRInt32 contentLength) { nsresult rv; - nsXPIDLCString spec; - rv = uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = uri->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; nsCOMPtr io; - rv = NS_NewInputStreamIO(getter_AddRefs(io), spec, inStr, + rv = NS_NewInputStreamIO(getter_AddRefs(io), spec.get(), inStr, contentType, contentLength); if (NS_FAILED(rv)) return rv; @@ -704,7 +726,7 @@ NS_NewProxyInfo(const char* type, const char* host, PRInt32 port, nsIProxyInfo* } inline nsresult -NS_InitFileFromURLSpec(nsIFile* aFile, const char *inURL, +NS_InitFileFromURLSpec(nsIFile* aFile, const nsACString &inURL, nsIIOService *ioService=nsnull) { nsCOMPtr serv; @@ -718,7 +740,7 @@ NS_InitFileFromURLSpec(nsIFile* aFile, const char *inURL, } inline nsresult -NS_GetURLSpecFromFile(nsIFile* aFile, char **aUrl, +NS_GetURLSpecFromFile(nsIFile* aFile, nsACString &aUrl, nsIIOService *ioService=nsnull) { nsCOMPtr serv; @@ -775,7 +797,7 @@ NS_ExamineForProxy(const char* scheme, const char* host, PRInt32 port, static NS_DEFINE_CID(kSTDURLCID, NS_STANDARDURL_CID); nsCOMPtr uri = do_CreateInstance(kSTDURLCID, &rv); if (NS_FAILED(rv)) return rv; - rv = uri->SetSpec(spec.get()); + rv = uri->SetSpec(spec); if (NS_FAILED(rv)) return rv; return pps->ExamineForProxy(uri, proxyInfo); diff --git a/mozilla/netwerk/base/src/nsDirectoryIndexStream.cpp b/mozilla/netwerk/base/src/nsDirectoryIndexStream.cpp index 0262ce51a56..10cc3bdc564 100644 --- a/mozilla/netwerk/base/src/nsDirectoryIndexStream.cpp +++ b/mozilla/netwerk/base/src/nsDirectoryIndexStream.cpp @@ -214,8 +214,8 @@ nsDirectoryIndexStream::Init(nsIFile* aDir) #endif mBuf.Append("300: "); - nsXPIDLCString url; - rv = NS_GetURLSpecFromFile(mDir, getter_Copies(url)); + nsCAutoString url; + rv = NS_GetURLSpecFromFile(mDir, url); if (NS_FAILED(rv)) return rv; mBuf.Append(url); mBuf.Append('\n'); diff --git a/mozilla/netwerk/base/src/nsDownloader.cpp b/mozilla/netwerk/base/src/nsDownloader.cpp index 84f5eee8413..82ff8b5da02 100644 --- a/mozilla/netwerk/base/src/nsDownloader.cpp +++ b/mozilla/netwerk/base/src/nsDownloader.cpp @@ -63,8 +63,8 @@ nsDownloader::Init(nsIURI* aURL, nsCOMPtr localFile; nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), aURL, nsnull, aGroup, aNotificationCallbacks, - aLoadAttributes); + rv = NS_NewChannel(getter_AddRefs(channel), aURL, nsnull, aGroup, aNotificationCallbacks, + aLoadAttributes); if (NS_SUCCEEDED(rv) && channel) { nsCOMPtr fc = do_QueryInterface(channel); diff --git a/mozilla/netwerk/base/src/nsFileStreams.cpp b/mozilla/netwerk/base/src/nsFileStreams.cpp index f78e3fa24af..af9c86bd02e 100644 --- a/mozilla/netwerk/base/src/nsFileStreams.cpp +++ b/mozilla/netwerk/base/src/nsFileStreams.cpp @@ -189,7 +189,21 @@ nsFileIO::Open(char **contentType, PRInt32 *contentLength) mPerm = 0; rv = localFile->OpenNSPRFileDesc(mIOFlags, mPerm, &mFD); - if (NS_FAILED(rv)) return NS_ERROR_FILE_NOT_FOUND; //How do we deal with directories/?? + if (NS_FAILED(rv)) { + PRBool isDir; + rv = localFile->IsDirectory(&isDir); + if (NS_SUCCEEDED(rv) && isDir) { + // Directories turn into an HTTP-index stream, with + // unbounded (i.e., read 'til the stream says it's done) + // length. + if (contentType) + *contentType = nsCRT::strdup(APPLICATION_HTTP_INDEX_FORMAT); + if (contentLength) + *contentLength = -1; + return NS_OK; + } + return NS_ERROR_FILE_NOT_FOUND; + } if (contentLength) { // We'll try to use the file's length, if it has one. If not, @@ -206,34 +220,22 @@ nsFileIO::Open(char **contentType, PRInt32 *contentLength) *contentLength = -1; } if (contentType) { - PRBool isDir; - rv = mFile->IsDirectory(&isDir); - if (NS_SUCCEEDED(rv) && isDir) { - // Directories turn into an HTTP-index stream, with - // unbounded (i.e., read 'til the stream says it's done) - // length. - *contentType = nsCRT::strdup(APPLICATION_HTTP_INDEX_FORMAT); - *contentLength = -1; + // must we really go though this? dougt + nsIMIMEService* mimeServ = nsnull; + nsFileTransportService* fileTransportService = nsFileTransportService::GetInstance(); + if (fileTransportService) { + mimeServ = fileTransportService->GetCachedMimeService(); + if (mimeServ) + rv = mimeServ->GetTypeFromFile(mFile, contentType); } - else { - // must we really go though this? dougt - nsIMIMEService* mimeServ = nsnull; - nsFileTransportService* fileTransportService = nsFileTransportService::GetInstance(); - if (fileTransportService) { - mimeServ = fileTransportService->GetCachedMimeService(); - if (mimeServ) { - rv = mimeServ->GetTypeFromFile(mFile, contentType); - } - } - - if (!mimeServ || (NS_FAILED(rv))) { - // if all else fails treat it as text/html? - *contentType = nsCRT::strdup(UNKNOWN_CONTENT_TYPE); - if (*contentType == nsnull) - rv = NS_ERROR_OUT_OF_MEMORY; - else - rv = NS_OK; - } + + if (!mimeServ || (NS_FAILED(rv))) { + // if all else fails treat it as text/html? + *contentType = nsCRT::strdup(UNKNOWN_CONTENT_TYPE); + if (*contentType == nsnull) + rv = NS_ERROR_OUT_OF_MEMORY; + else + rv = NS_OK; } } PR_LOG(gFileIOLog, PR_LOG_DEBUG, @@ -264,8 +266,6 @@ nsFileIO::GetInputStream(nsIInputStream * *aInputStream) nsresult rv; if (!mFD) { - // NS_ASSERTION(mFD, "Your suppose to call Open()"); - rv = Open(nsnull, nsnull); if (NS_FAILED(rv)) // file or directory does not exist return rv; @@ -277,7 +277,8 @@ nsFileIO::GetInputStream(nsIInputStream * *aInputStream) return rv; if (isDir) { - PR_Close(mFD); + if (mFD) + PR_Close(mFD); rv = nsDirectoryIndexStream::Create(mFile, aInputStream); PR_LOG(gFileIOLog, PR_LOG_DEBUG, ("nsFileIO: opening local dir %s for input (%x)", @@ -318,9 +319,7 @@ nsFileIO::GetOutputStream(nsIOutputStream * *aOutputStream) nsresult rv; if (!mFD) { - nsXPIDLCString contentType; - PRInt32 contentLength; - rv = Open(getter_Copies(contentType), &contentLength); + rv = Open(nsnull, nsnull); if (NS_FAILED(rv)) // file or directory does not exist return rv; } diff --git a/mozilla/netwerk/base/src/nsIOService.cpp b/mozilla/netwerk/base/src/nsIOService.cpp index 021659a4da2..75ed41de421 100644 --- a/mozilla/netwerk/base/src/nsIOService.cpp +++ b/mozilla/netwerk/base/src/nsIOService.cpp @@ -49,6 +49,7 @@ #include "nsInputStreamChannel.h" #include "nsXPIDLString.h" #include "nsReadableUtils.h" +#include "nsPrintfCString.h" #include "nsIErrorService.h" #include "netCore.h" #include "nsIObserverService.h" @@ -210,9 +211,8 @@ nsIOService::Init() if (NS_FAILED(rv)) return rv; // setup our bad port list stuff - for(int i=0; gBadPortList[i]; i++) - { - mRestrictedPortList.AppendElement((void*)gBadPortList[i]); + for(int i=0; gBadPortList[i]; i++) { + mRestrictedPortList.AppendElement(NS_REINTERPRET_CAST(void *, gBadPortList[i])); } // Further modifications to the port list come from prefs @@ -437,10 +437,9 @@ nsIOService::GetProtocolHandler(const char* scheme, nsIProtocolHandler* *result) } NS_IMETHODIMP -nsIOService::ExtractScheme(const char* inURI, PRUint32 *startPos, - PRUint32 *endPos, char* *scheme) +nsIOService::ExtractScheme(const nsACString &inURI, nsACString &scheme) { - return ExtractURLScheme(inURI, startPos, endPos, scheme); + return ExtractURLScheme(inURI, nsnull, nsnull, &scheme); } /* nsIURLParser getParserForScheme (in string scheme); */ @@ -513,62 +512,48 @@ nsIOService::GetParserForScheme(const char *scheme, nsIURLParser **_retval) return NS_OK; } -static void -ExtractUrlPart_Helper(const char *src, PRUint32 pos, PRInt32 len, - PRUint32 *startPos, PRUint32 *endPos, char **urlPart) +static inline void +ExtractUrlPart_Helper(const nsACString &src, PRUint32 pos, PRInt32 len, nsACString &result) { - if (len < 0) { - if (startPos) - *startPos = 0; - if (endPos) - *endPos = 0; - if (urlPart) - *urlPart = nsnull; - } - else { - if (startPos) - *startPos = pos; - if (endPos) - *endPos = pos + len; - if (urlPart) - *urlPart = PL_strndup(src + pos, len); - } + if (len >= 0) + result = Substring(src, pos, len); } -// Crap. How do I ensure that startPos and endPos are correct. NS_IMETHODIMP -nsIOService::ExtractUrlPart(const char *urlString, PRInt16 flag, PRUint32 *startPos, PRUint32 *endPos, char **urlPart) +nsIOService::ExtractUrlPart(const nsACString &urlString, PRInt16 flag, nsACString &urlPart) { nsresult rv; - nsXPIDLCString scheme; + nsCAutoString scheme; - if (urlPart) - *urlPart = nsnull; - - ExtractScheme(urlString, startPos, endPos, getter_Copies(scheme)); + rv = ExtractURLScheme(urlString, nsnull, nsnull, &scheme); + if (NS_FAILED(rv)) return rv; if (flag == url_Scheme) { - if (urlPart) - *urlPart = nsCRT::strdup(scheme); + urlPart = scheme; return NS_OK; } + urlPart.Truncate(); + nsCOMPtr parser; - rv = GetParserForScheme(scheme, getter_AddRefs(parser)); + rv = GetParserForScheme(scheme.get(), getter_AddRefs(parser)); if (NS_FAILED(rv)) return rv; + // we work only with flat strings around these parts + const nsPromiseFlatCString &flat = PromiseFlatCString(urlString); + const char *url = flat.get(); + PRUint32 authPos, pathPos; PRInt32 authLen, pathLen; - rv = parser->ParseURL(urlString, -1, + rv = parser->ParseURL(url, -1, nsnull, nsnull, &authPos, &authLen, &pathPos, &pathLen); if (NS_FAILED(rv)) return rv; - if (flag == url_Path) { - ExtractUrlPart_Helper(urlString, pathPos, pathLen, startPos, endPos, urlPart); - } + if (flag == url_Path) + ExtractUrlPart_Helper(urlString, pathPos, pathLen, urlPart); else if (flag < url_Directory || flag & url_Port) { PRUint32 usernamePos, passwordPos, hostnamePos; PRInt32 usernameLen, passwordLen, hostnameLen; @@ -577,7 +562,7 @@ nsIOService::ExtractUrlPart(const char *urlString, PRInt16 flag, PRUint32 *start if (authLen < 0) return NS_OK; - rv = parser->ParseAuthority(urlString + authPos, authLen, + rv = parser->ParseAuthority(url + authPos, authLen, &usernamePos, &usernameLen, &passwordPos, &passwordLen, &hostnamePos, &hostnameLen, @@ -590,31 +575,28 @@ nsIOService::ExtractUrlPart(const char *urlString, PRInt16 flag, PRUint32 *start switch (flag) { case url_Username: - ExtractUrlPart_Helper(urlString, usernamePos, usernameLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, usernamePos, usernameLen, urlPart); break; case url_Password: - ExtractUrlPart_Helper(urlString, passwordPos, passwordLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, passwordPos, passwordLen, urlPart); break; case url_Host: - ExtractUrlPart_Helper(urlString, hostnamePos, hostnameLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, hostnamePos, hostnameLen, urlPart); break; case url_Port: if (port != -1) { PRInt32 pos = hostnamePos + hostnameLen + 1; - ExtractUrlPart_Helper(urlString, pos, pathPos - pos, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, pos, pathPos - pos, urlPart); } - else - ExtractUrlPart_Helper(nsnull, 0, -1, startPos, endPos, urlPart); break; case url_Host | url_Port: if (port != -1 && hostnameLen > 0) { - nsCAutoString buf(urlString + hostnamePos, hostnameLen); - buf.Append(':'); - buf.AppendInt(port); - ExtractUrlPart_Helper(buf.get(), 0, buf.Length(), startPos, endPos, urlPart); + urlPart = Substring(urlString, hostnamePos, hostnameLen) + + NS_LITERAL_CSTRING(":") + + nsPrintfCString("%d", port); } else - ExtractUrlPart_Helper(urlString, hostnamePos, hostnameLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, hostnamePos, hostnameLen, urlPart); break; default: NS_NOTREACHED("unexpected flag"); @@ -628,7 +610,7 @@ nsIOService::ExtractUrlPart(const char *urlString, PRInt16 flag, PRUint32 *start if (pathLen < 0) return NS_OK; - rv = parser->ParsePath(urlString + pathPos, pathLen, + rv = parser->ParsePath(url + pathPos, pathLen, &filepathPos, &filepathLen, ¶mPos, ¶mLen, &queryPos, &queryLen, @@ -644,7 +626,7 @@ nsIOService::ExtractUrlPart(const char *urlString, PRInt16 flag, PRUint32 *start PRUint32 directoryPos, basenamePos, extensionPos; PRInt32 directoryLen, basenameLen, extensionLen; - rv = parser->ParseFilePath(urlString + filepathPos, filepathLen, + rv = parser->ParseFilePath(url + filepathPos, filepathLen, &directoryPos, &directoryLen, &basenamePos, &basenameLen, &extensionPos, &extensionLen); @@ -655,13 +637,13 @@ nsIOService::ExtractUrlPart(const char *urlString, PRInt16 flag, PRUint32 *start switch (flag) { case url_Directory: - ExtractUrlPart_Helper(urlString, directoryPos, directoryLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, directoryPos, directoryLen, urlPart); break; case url_FileBaseName: - ExtractUrlPart_Helper(urlString, basenamePos, basenameLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, basenamePos, basenameLen, urlPart); break; case url_FileExtension: - ExtractUrlPart_Helper(urlString, extensionPos, extensionLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, extensionPos, extensionLen, urlPart); break; default: NS_NOTREACHED("unexpected flag"); @@ -671,13 +653,13 @@ nsIOService::ExtractUrlPart(const char *urlString, PRInt16 flag, PRUint32 *start else { switch (flag) { case url_Param: - ExtractUrlPart_Helper(urlString, paramPos, paramLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, paramPos, paramLen, urlPart); break; case url_Query: - ExtractUrlPart_Helper(urlString, queryPos, queryLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, queryPos, queryLen, urlPart); break; case url_Ref: - ExtractUrlPart_Helper(urlString, refPos, refLen, startPos, endPos, urlPart); + ExtractUrlPart_Helper(urlString, refPos, refLen, urlPart); break; default: NS_NOTREACHED("unexpected flag"); @@ -693,58 +675,39 @@ nsIOService::GetProtocolFlags(const char* scheme, PRUint32 *flags) { nsCOMPtr handler; nsresult rv = GetProtocolHandler(scheme, getter_AddRefs(handler)); - if (NS_FAILED(rv)) { - return rv; - } + if (NS_FAILED(rv)) return rv; + rv = handler->GetProtocolFlags(flags); return rv; } nsresult -nsIOService::NewURI(const char* aSpec, nsIURI* aBaseURI, nsIURI* *result) +nsIOService::NewURI(const nsACString &aSpec, const char *aCharset, nsIURI *aBaseURI, nsIURI **result) { nsresult rv; - nsIURI* base; - NS_ENSURE_ARG_POINTER(aSpec); - nsXPIDLCString scheme; - nsCOMPtr handler; - PRUint32 start,end; + nsCAutoString scheme; - rv = ExtractScheme(aSpec, &start, &end, nsnull); - if (NS_SUCCEEDED(rv)) - { - // then aSpec is absolute - // ignore aBaseURI in this case - base = nsnull; - rv = GetCachedProtocolHandler(aSpec, getter_AddRefs(handler), - start,end); - if (NS_FAILED(rv)) - { - // not cached; we'll do an allocation - rv = ExtractScheme(aSpec, nsnull, nsnull, getter_Copies(scheme)); - } - // else scheme == nsnull, and we succeeded + rv = ExtractScheme(aSpec, scheme); + if (NS_SUCCEEDED(rv)) { + // then aSpec is absolute... ignore aBaseURI in this case + aBaseURI = nsnull; } - else - { + else { // then aSpec is relative if (!aBaseURI) return NS_ERROR_MALFORMED_URI; - rv = aBaseURI->GetScheme(getter_Copies(scheme)); - base = aBaseURI; - } - // scheme is non-null if we allocated it. - // base is null if absolute, set if relative - // rv is success if all is ok, failure if we need to cleanup and exit - if (NS_SUCCEEDED(rv) && scheme.get()) - { - // we allocated scheme; get the handler for it - rv = GetProtocolHandler(scheme, getter_AddRefs(handler)); + + rv = aBaseURI->GetScheme(scheme); + if (NS_FAILED(rv)) return rv; } + + // now get the handler for this scheme + nsCOMPtr handler; + rv = GetProtocolHandler(scheme.get(), getter_AddRefs(handler)); if (NS_FAILED(rv)) return rv; - return handler->NewURI(aSpec, base, result); + return handler->NewURI(aSpec, aCharset, aBaseURI, result); } @@ -772,8 +735,8 @@ nsIOService::NewChannelFromURI(nsIURI *aURI, nsIChannel **result) NS_ENSURE_ARG_POINTER(aURI); NS_TIMELINE_MARK_URI("nsIOService::NewChannelFromURI(%s)", aURI); - nsXPIDLCString scheme; - rv = aURI->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + rv = aURI->GetScheme(scheme); if (NS_FAILED(rv)) return rv; nsCOMPtr pi; @@ -802,11 +765,11 @@ nsIOService::NewChannelFromURI(nsIURI *aURI, nsIChannel **result) } NS_IMETHODIMP -nsIOService::NewChannel(const char *aSpec, nsIURI *aBaseURI, nsIChannel **result) +nsIOService::NewChannel(const nsACString &aSpec, const char *aCharset, nsIURI *aBaseURI, nsIChannel **result) { nsresult rv; nsCOMPtr uri; - rv = NewURI(aSpec, aBaseURI, getter_AddRefs(uri)); + rv = NewURI(aSpec, aCharset, aBaseURI, getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; return NewChannelFromURI(uri, result); @@ -901,15 +864,8 @@ nsIOService::AllowPort(PRInt32 inPort, const char *scheme, PRBool *_retval) // URL parsing utilities NS_IMETHODIMP -nsIOService::ExtractPort(const char *str, PRInt32 *result) -{ - *result = ExtractPortFrom(str); - return NS_OK; -} - -NS_IMETHODIMP -nsIOService::ResolveRelativePath(const char *relativePath, const char* basePath, - char **result) +nsIOService::ResolveRelativePath(const nsACString &relativePath, const nsACString &basePath, + nsACString &result) { nsCAutoString name; nsCAutoString path(basePath); @@ -920,16 +876,21 @@ nsIOService::ResolveRelativePath(const char *relativePath, const char* basePath, needsDelim = !(last == '/' || last == '\\' ); } - PRBool end = PR_FALSE; + nsACString::const_iterator beg, end; + relativePath.BeginReading(beg); + relativePath.EndReading(end); + + PRBool stop = PR_FALSE; char c; - while (!end) { - c = *relativePath++; + for (; !stop; ++beg) { + c = (beg == end) ? '\0' : *beg; + //printf("%c [name=%s] [path=%s]\n", c, name.get(), path.get()); switch (c) { case '\0': case '#': case ';': case '?': - end = PR_TRUE; + stop = PR_TRUE; // fall through... case '/': case '\\': @@ -940,12 +901,10 @@ nsIOService::ResolveRelativePath(const char *relativePath, const char* basePath, // skip over that when searching for next one to the left PRInt32 offset = path.Length() - (needsDelim ? 1 : 2); PRInt32 pos = path.RFind("/", PR_FALSE, offset); - if (pos > 0) { + if (pos > 0) path.Truncate(pos + 1); - } - else { + else return NS_ERROR_MALFORMED_URI; - } } else if (name.Equals(".") || name.Equals("")) { // do nothing @@ -967,9 +926,9 @@ nsIOService::ResolveRelativePath(const char *relativePath, const char* basePath, } // append anything left on relativePath (e.g. #..., ;..., ?...) if (c != '\0') - path += --relativePath; + path += Substring(--beg, end); - *result = ToNewCString(path); + result = path; return NS_OK; } @@ -1050,46 +1009,45 @@ nsIOService::Observe(nsISupports *subject, } nsresult -nsIOService::ParseFileURL(const char* inURL, - char **outHost, char **outDirectory, - char **outFileBaseName, char **outFileExtension) +nsIOService::ParseFileURL(const nsACString &inURL, + nsACString &outDirectory, + nsACString &outFileBaseName, + nsACString &outFileExtension) { - nsresult rv = NS_ERROR_NOT_IMPLEMENTED; + nsresult rv; - NS_ENSURE_ARG(inURL); - NS_ENSURE_ARG_POINTER(outHost); - *outHost = nsnull; - NS_ENSURE_ARG_POINTER(outDirectory); - *outDirectory = nsnull; - NS_ENSURE_ARG_POINTER(outFileBaseName); - *outFileBaseName = nsnull; - NS_ENSURE_ARG_POINTER(outFileExtension); - *outFileExtension = nsnull; + outDirectory.Truncate(); + outFileBaseName.Truncate(); + outFileExtension.Truncate(); - nsXPIDLCString scheme; - rv = ExtractScheme(inURL, nsnull, nsnull, getter_Copies(scheme)); + nsCAutoString scheme; + rv = ExtractScheme(inURL, scheme); if (NS_FAILED(rv)) return rv; - if (nsCRT::strcmp(scheme.get(), "file") != 0) { + + if (strcmp(scheme.get(), "file") != 0) { NS_ERROR("must be a file:// url"); return NS_ERROR_UNEXPECTED; } + + const nsPromiseFlatCString &flatURL = PromiseFlatCString(inURL); + const char *url = flatURL.get(); nsCOMPtr parser; - rv = GetParserForScheme(scheme, getter_AddRefs(parser)); + rv = GetParserForScheme(scheme.get(), getter_AddRefs(parser)); if (NS_FAILED(rv)) return rv; PRUint32 pathPos, filepathPos, directoryPos, basenamePos, extensionPos; PRInt32 pathLen, filepathLen, directoryLen, basenameLen, extensionLen; // invoke the parser to extract the URL path - rv = parser->ParseURL(inURL, -1, + rv = parser->ParseURL(url, -1, nsnull, nsnull, // dont care about scheme nsnull, nsnull, // dont care about authority &pathPos, &pathLen); if (NS_FAILED(rv)) return rv; // invoke the parser to extract filepath from the path - rv = parser->ParsePath(inURL + pathPos, pathLen, + rv = parser->ParsePath(url + pathPos, pathLen, &filepathPos, &filepathLen, nsnull, nsnull, // dont care about param nsnull, nsnull, // dont care about query @@ -1099,19 +1057,20 @@ nsIOService::ParseFileURL(const char* inURL, filepathPos += pathPos; // invoke the parser to extract the directory and filename from filepath - rv = parser->ParseFilePath(inURL + filepathPos, filepathLen, - &directoryPos, &directoryLen, - &basenamePos, &basenameLen, - &extensionPos, &extensionLen); + rv = parser->ParseFilePath(url + filepathPos, filepathLen, + &directoryPos, &directoryLen, + &basenamePos, &basenameLen, + &extensionPos, &extensionLen); if (NS_FAILED(rv)) return rv; if (directoryLen > 0) - *outDirectory = PL_strndup(inURL + filepathPos + directoryPos, directoryLen); + outDirectory = Substring(inURL, filepathPos + directoryPos, directoryLen); if (basenameLen > 0) - *outFileBaseName = PL_strndup(inURL + filepathPos + basenamePos, basenameLen); + outFileBaseName = Substring(inURL, filepathPos + basenamePos, basenameLen); if (extensionLen > 0) - *outFileExtension = PL_strndup(inURL + filepathPos + extensionPos, extensionLen); + outFileExtension = Substring(inURL, filepathPos + extensionPos, extensionLen); // since we are using a no-auth url parser, there will never be a host + // XXX not strictly true... file://localhost/foo/bar.html is a valid URL return NS_OK; } diff --git a/mozilla/netwerk/base/src/nsIOService.h b/mozilla/netwerk/base/src/nsIOService.h index 75848dc83e2..086524d4d01 100644 --- a/mozilla/netwerk/base/src/nsIOService.h +++ b/mozilla/netwerk/base/src/nsIOService.h @@ -38,8 +38,8 @@ #ifndef nsIOService_h__ #define nsIOService_h__ -#include "nsIIOService.h" #include "nsString.h" +#include "nsIIOService.h" #include "nsVoidArray.h" #include "nsISocketTransportService.h" #include "nsIFileTransportService.h" @@ -103,11 +103,10 @@ protected: void GetPrefBranch(nsIPrefBranch **); void ParsePortList(nsIPrefBranch *prefBranch, const char *pref, PRBool remove); - nsresult ParseFileURL(const char* inURL, - char **outHost, - char **outDirectory, - char **outFileBaseName, - char **outFileExtension); + nsresult ParseFileURL(const nsACString &inURL, + nsACString &outDirectory, + nsACString &outFileBaseName, + nsACString &outFileExtension); protected: PRPackedBool mOffline; PRPackedBool mOfflineForProfileChange; diff --git a/mozilla/netwerk/base/src/nsIOServiceMac.cpp b/mozilla/netwerk/base/src/nsIOServiceMac.cpp index 5184919f2a0..53cee6493db 100644 --- a/mozilla/netwerk/base/src/nsIOServiceMac.cpp +++ b/mozilla/netwerk/base/src/nsIOServiceMac.cpp @@ -66,11 +66,8 @@ static void PascalStringCopy(Str255 dst, const char *src) NS_IMETHODIMP -nsIOService::GetURLSpecFromFile(nsIFile *aFile, char **aURL) +nsIOService::GetURLSpecFromFile(nsIFile *aFile, nsACString &aURL) { - NS_ENSURE_ARG_POINTER(aURL); - *aURL = nsnull; - nsresult rv; nsXPIDLCString ePath; @@ -83,8 +80,7 @@ nsIOService::GetURLSpecFromFile(nsIFile *aFile, char **aURL) NS_NAMED_LITERAL_CSTRING(prefix, "file:///"); // Escape the path with the directory mask - if (!NS_EscapeURLPart(ePath.get(), ePath.Length(), esc_Directory+esc_Forced, escPath)) - escPath.Assign(ePath); + NS_EscapeURL(ePath, esc_Directory|esc_Forced|esc_AlwaysCopy, escPath); // colons [originally slashes, before SwapSlashColon() usage above] // need encoding; use %2F which is a forward slash @@ -104,46 +100,30 @@ nsIOService::GetURLSpecFromFile(nsIFile *aFile, char **aURL) } } - *aURL = ToNewCString(escPath); - return *aURL ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + aURL = escPath; + return NS_OK; } NS_IMETHODIMP -nsIOService::InitFileFromURLSpec(nsIFile *aFile, const char *aURL) +nsIOService::InitFileFromURLSpec(nsIFile *aFile, const nsACString &aURL) { - NS_ENSURE_ARG(aURL); nsresult rv; - nsXPIDLCString host, directory, fileBaseName, fileExtension; - nsCOMPtr localFile = do_QueryInterface(aFile, &rv); if (NS_FAILED(rv)) { NS_ERROR("Only nsILocalFile supported right now"); return rv; } - rv = ParseFileURL(aURL, getter_Copies(host), - getter_Copies(directory), - getter_Copies(fileBaseName), - getter_Copies(fileExtension)); + nsCAutoString directory, fileBaseName, fileExtension; + + rv = ParseFileURL(aURL, directory, fileBaseName, fileExtension); if (NS_FAILED(rv)) return rv; nsCAutoString path; - if (host) { - // We can end up with a host when given: file:// instead of file:/// - // Check to see if the host is a volume name - If so prepend it - Str255 volName; - FSSpec volSpec; - - PascalStringCopy(volName, host); - volName[++volName[0]] = ':'; - if (::FSMakeFSSpec(0, 0, volName, &volSpec) == noErr) - path += host; - } - if (directory) { - if (!NS_EscapeURLPart(directory.get(), directory.Length(), esc_Directory, path)) - path += directory; + if (!directory.IsEmpty()) { + NS_EscapeURL(directory, esc_Directory|esc_AlwaysCopy, path); // "%2F"s need to become slashes, while all other slashes need to // become colons. If we start out by changing "%2F"s to colons, we @@ -152,14 +132,11 @@ nsIOService::InitFileFromURLSpec(nsIFile *aFile, const char *aURL) SwapSlashColon((char *) path.get()); } - if (fileBaseName) { - if (!NS_EscapeURLPart(fileBaseName.get(), fileBaseName.Length(), esc_FileBaseName, path)) - path += fileBaseName; - } - if (fileExtension) { + if (!fileBaseName.IsEmpty()) + NS_EscapeURL(fileBaseName, esc_FileBaseName|esc_AlwaysCopy, path); + if (!fileExtension.IsEmpty()) { path += '.'; - if (!NS_EscapeURLPart(fileExtension.get(), fileExtension.Length(), esc_FileExtension, path)) - path += fileExtension; + NS_EscapeURL(fileExtension, esc_FileExtension|esc_AlwaysCopy, path); } NS_UnescapeURL((char *) path.get()); diff --git a/mozilla/netwerk/base/src/nsIOServiceOS2.cpp b/mozilla/netwerk/base/src/nsIOServiceOS2.cpp index 91f2f3e5e93..300d0644001 100644 --- a/mozilla/netwerk/base/src/nsIOServiceOS2.cpp +++ b/mozilla/netwerk/base/src/nsIOServiceOS2.cpp @@ -46,11 +46,8 @@ static int isleadbyte(int c); NS_IMETHODIMP -nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) +nsIOService::GetURLSpecFromFile(nsIFile *aFile, nsACString &result) { - NS_ENSURE_ARG_POINTER(aURL); - *aURL = nsnull; - nsresult rv; nsXPIDLCString ePath; @@ -73,7 +70,7 @@ nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) NS_NAMED_LITERAL_CSTRING(prefix, "file:///"); // Escape the path with the directory mask - if (NS_EscapeURLPart(ePath.get(), ePath.Length(), esc_Directory+esc_Forced, escPath)) + if (NS_EscapeURL(ePath.get(), ePath.Length(), esc_Directory+esc_Forced, escPath)) escPath.Insert(prefix, 0); else escPath.Assign(prefix + ePath); @@ -89,15 +86,14 @@ nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) escPath += "/"; } } - - *aURL = ToNewCString(escPath); - return *aURL ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + + result = escPath; + return NS_OK; } NS_IMETHODIMP -nsIOService::InitFileFromURLSpec(nsIFile *aFile, const char * aURL) +nsIOService::InitFileFromURLSpec(nsIFile *aFile, const nsACString &aURL) { - NS_ENSURE_ARG(aURL); nsresult rv; nsCOMPtr localFile = do_QueryInterface(aFile, &rv); @@ -106,39 +102,24 @@ nsIOService::InitFileFromURLSpec(nsIFile *aFile, const char * aURL) return rv; } - nsXPIDLCString host, directory, fileBaseName, fileExtension; + nsCAutoString directory, fileBaseName, fileExtension; - rv = ParseFileURL(aURL, getter_Copies(host), - getter_Copies(directory), - getter_Copies(fileBaseName), - getter_Copies(fileExtension)); + rv = ParseFileURL(aURL, directory, fileBaseName, fileExtension); if (NS_FAILED(rv)) return rv; nsCAutoString path; - if (host) { - // We can end up with a host when given: file://C|/ instead of file:/// - if (strlen((const char *)host) == 2 && ((const char *)host)[1] == '|') { - path += host; - path.SetCharAt(':', 1); - } - // Otherwise, ignore the host part... - } - if (directory) { - if (!NS_EscapeURLPart(directory.get(), directory.Length(), esc_Directory, path)) - path += directory; - if (!host && path.Length() > 2 && path.CharAt(2) == '|') + if (!directory.IsEmpty()) { + NS_EscapeURL(directory, esc_Directory|esc_AlwaysCopy, path); + if (path.Length() > 2 && path.CharAt(2) == '|') path.SetCharAt(':', 2); path.ReplaceChar('/', '\\'); } - if (fileBaseName) { - if (!NS_EscapeURLPart(fileBaseName.get(), fileBaseName.Length(), esc_FileBaseName, path)) - path += fileBaseName; - } - if (fileExtension) { + if (!fileBaseName.IsEmpty()) + NS_EscapeURL(fileBaseName, esc_FileBaseName|esc_AlwaysCopy, path); + if (!fileExtension.IsEmpty()) { path += '.'; - if (!NS_EscapeURLPart(fileExtension.get(), fileExtension.Length(), esc_FileExtension, path)) - path += fileExtension; + NS_EscapeURL(fileExtension, esc_FileExtension|esc_AlwaysCopy, path); } NS_UnescapeURL((char *) path.get()); diff --git a/mozilla/netwerk/base/src/nsIOServiceUnix.cpp b/mozilla/netwerk/base/src/nsIOServiceUnix.cpp index 15050351c2c..36b544473c9 100644 --- a/mozilla/netwerk/base/src/nsIOServiceUnix.cpp +++ b/mozilla/netwerk/base/src/nsIOServiceUnix.cpp @@ -43,11 +43,8 @@ #include "nsPrintfCString.h" NS_IMETHODIMP -nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) +nsIOService::GetURLSpecFromFile(nsIFile *aFile, nsACString &result) { - NS_ENSURE_ARG_POINTER(aURL); - *aURL = nsnull; - nsresult rv; nsXPIDLCString ePath; @@ -58,7 +55,7 @@ nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) NS_NAMED_LITERAL_CSTRING(prefix, "file://"); // Escape the path with the directory mask - if (NS_EscapeURLPart(ePath.get(), ePath.Length(), esc_Directory+esc_Forced, escPath)) + if (NS_EscapeURL(ePath.get(), ePath.Length(), esc_Directory+esc_Forced, escPath)) escPath.Insert(prefix, 0); else escPath.Assign(prefix + ePath); @@ -75,14 +72,13 @@ nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) } } - *aURL = ToNewCString(escPath); - return *aURL ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + result = escPath; + return NS_OK; } NS_IMETHODIMP -nsIOService::InitFileFromURLSpec(nsIFile* aFile, const char * aURL) +nsIOService::InitFileFromURLSpec(nsIFile* aFile, const nsACString &aURL) { - NS_ENSURE_ARG(aURL); nsresult rv; nsCOMPtr localFile = do_QueryInterface(aFile, &rv); @@ -91,28 +87,18 @@ nsIOService::InitFileFromURLSpec(nsIFile* aFile, const char * aURL) return rv; } - nsXPIDLCString host, directory, fileBaseName, fileExtension; - - rv = ParseFileURL(aURL, getter_Copies(host), - getter_Copies(directory), - getter_Copies(fileBaseName), - getter_Copies(fileExtension)); + nsCAutoString directory, fileBaseName, fileExtension, path; + + rv = ParseFileURL(aURL, directory, fileBaseName, fileExtension); if (NS_FAILED(rv)) return rv; - nsCAutoString path; - - if (directory) { - if (!NS_EscapeURLPart(directory.get(), directory.Length(), esc_Directory, path)) - path += directory; - } - if (fileBaseName) { - if (!NS_EscapeURLPart(fileBaseName.get(), fileBaseName.Length(), esc_FileBaseName, path)) - path += fileBaseName; - } - if (fileExtension) { + if (!directory.IsEmpty()) + NS_EscapeURL(directory, esc_Directory|esc_AlwaysCopy, path); + if (!fileBaseName.IsEmpty()) + NS_EscapeURL(fileBaseName, esc_FileBaseName|esc_AlwaysCopy, path); + if (!fileExtension.IsEmpty()) { path += '.'; - if (!NS_EscapeURLPart(fileExtension.get(), fileExtension.Length(), esc_FileExtension, path)) - path += fileExtension; + NS_EscapeURL(fileExtension, esc_FileExtension|esc_AlwaysCopy, path); } NS_UnescapeURL((char *) path.get()); diff --git a/mozilla/netwerk/base/src/nsIOServiceWin.cpp b/mozilla/netwerk/base/src/nsIOServiceWin.cpp index 5fd6ea31918..44743434b3f 100644 --- a/mozilla/netwerk/base/src/nsIOServiceWin.cpp +++ b/mozilla/netwerk/base/src/nsIOServiceWin.cpp @@ -44,11 +44,8 @@ #include NS_IMETHODIMP -nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) +nsIOService::GetURLSpecFromFile(nsIFile *aFile, nsACString &result) { - NS_ENSURE_ARG_POINTER(aURL); - *aURL = nsnull; - nsresult rv; nsXPIDLCString ePath; @@ -71,13 +68,13 @@ nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) NS_NAMED_LITERAL_CSTRING(prefix, "file:///"); // Escape the path with the directory mask - if (NS_EscapeURLPart(ePath.get(), ePath.Length(), esc_Directory+esc_Forced, escPath)) + if (NS_EscapeURL(ePath.get(), ePath.Length(), esc_Directory+esc_Forced, escPath)) escPath.Insert(prefix, 0); else escPath.Assign(prefix + ePath); // XXX this should be unnecessary - if (escPath[escPath.Length() -1] != '/') { + if (escPath[escPath.Length() - 1] != '/') { PRBool dir; rv = aFile->IsDirectory(&dir); if (NS_FAILED(rv)) @@ -88,14 +85,13 @@ nsIOService::GetURLSpecFromFile(nsIFile *aFile, char * *aURL) } } - *aURL = ToNewCString(escPath); - return *aURL ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + result = escPath; + return NS_OK; } NS_IMETHODIMP -nsIOService::InitFileFromURLSpec(nsIFile *aFile, const char *aURL) +nsIOService::InitFileFromURLSpec(nsIFile *aFile, const nsACString &aURL) { - NS_ENSURE_ARG(aURL); nsresult rv; nsCOMPtr localFile = do_QueryInterface(aFile, &rv); @@ -104,39 +100,24 @@ nsIOService::InitFileFromURLSpec(nsIFile *aFile, const char *aURL) return rv; } - nsXPIDLCString host, directory, fileBaseName, fileExtension; + nsCAutoString directory, fileBaseName, fileExtension; - rv = ParseFileURL(aURL, getter_Copies(host), - getter_Copies(directory), - getter_Copies(fileBaseName), - getter_Copies(fileExtension)); + rv = ParseFileURL(aURL, directory, fileBaseName, fileExtension); if (NS_FAILED(rv)) return rv; nsCAutoString path; - if (host) { - // We can end up with a host when given: file://C|/ instead of file:/// - if (strlen((const char *)host) == 2 && ((const char *)host)[1] == '|') { - path += host; - path.SetCharAt(':', 1); - } - // Otherwise, ignore the host part... - } - if (directory) { - if (!NS_EscapeURLPart(directory.get(), directory.Length(), esc_Directory, path)) - path += directory; - if (!host && path.Length() > 2 && path.CharAt(2) == '|') + if (!directory.IsEmpty()) { + NS_EscapeURL(directory, esc_Directory|esc_AlwaysCopy, path); + if (path.Length() > 2 && path.CharAt(2) == '|') path.SetCharAt(':', 2); path.ReplaceChar('/', '\\'); } - if (fileBaseName) { - if (!NS_EscapeURLPart(fileBaseName.get(), fileBaseName.Length(), esc_FileBaseName, path)) - path += fileBaseName; - } - if (fileExtension) { + if (!fileBaseName.IsEmpty()) + NS_EscapeURL(fileBaseName, esc_FileBaseName|esc_AlwaysCopy, path); + if (!fileExtension.IsEmpty()) { path += '.'; - if (!NS_EscapeURLPart(fileExtension.get(), fileExtension.Length(), esc_FileExtension, path)) - path += fileExtension; + NS_EscapeURL(fileExtension, esc_FileExtension|esc_AlwaysCopy, path); } NS_UnescapeURL((char *) path.get()); diff --git a/mozilla/netwerk/base/src/nsInputStreamChannel.cpp b/mozilla/netwerk/base/src/nsInputStreamChannel.cpp index 406db53e0e4..7afcb5af5af 100644 --- a/mozilla/netwerk/base/src/nsInputStreamChannel.cpp +++ b/mozilla/netwerk/base/src/nsInputStreamChannel.cpp @@ -206,12 +206,10 @@ NS_IMETHODIMP nsStreamIOChannel::GetName(PRUnichar* *result) { nsresult rv; - nsXPIDLCString urlStr; - rv = mURI->GetSpec(getter_Copies(urlStr)); + nsCAutoString urlStr; + rv = mURI->GetSpec(urlStr); if (NS_FAILED(rv)) return rv; - nsString name; - name.AppendWithConversion(urlStr); - *result = ToNewUnicode(name); + *result = ToNewUnicode(NS_ConvertUTF8toUCS2(urlStr)); return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } diff --git a/mozilla/netwerk/base/src/nsProtocolProxyService.cpp b/mozilla/netwerk/base/src/nsProtocolProxyService.cpp index 924a42ffe09..01d66a87af5 100644 --- a/mozilla/netwerk/base/src/nsProtocolProxyService.cpp +++ b/mozilla/netwerk/base/src/nsProtocolProxyService.cpp @@ -291,8 +291,7 @@ void PR_CALLBACK nsProtocolProxyService::HandlePACLoadEvent(PLEvent* aEvent) } nsCOMPtr pURL; - rv = pIOService->NewURI((const char*) pps->mPACURL, nsnull, - getter_AddRefs(pURL)); + rv = pIOService->NewURI(pps->mPACURL, nsnull, nsnull, getter_AddRefs(pURL)); if (NS_FAILED(rv)) { NS_ERROR("New URI failed"); return; @@ -320,10 +319,10 @@ nsProtocolProxyService::CanUseProxy(nsIURI* aURI) return PR_TRUE; PRInt32 port; - nsXPIDLCString host; + nsCAutoString host; - nsresult rv = aURI->GetHost(getter_Copies(host)); - if (NS_FAILED(rv) || !host || !*host) + nsresult rv = aURI->GetAsciiHost(host); + if (NS_FAILED(rv) || host.IsEmpty()) return PR_FALSE; rv = aURI->GetPort(&port); @@ -332,7 +331,7 @@ nsProtocolProxyService::CanUseProxy(nsIURI* aURI) } PRInt32 index = -1; - int host_len = PL_strlen(host); + int host_len = host.Length(); int filter_host_len; while (++index < mFiltersArray.Count()) @@ -340,12 +339,10 @@ nsProtocolProxyService::CanUseProxy(nsIURI* aURI) host_port* hp = (host_port*) mFiltersArray[index]; // only if port doesn't exist or matches - if (((hp->port == -1) || (hp->port == port)) && - hp->host) - { + if (((hp->port == -1) || (hp->port == port)) && hp->host) { filter_host_len = hp->host->Length(); if ((host_len >= filter_host_len) && - (0 == PL_strncasecmp(host + host_len - filter_host_len, + (0 == PL_strncasecmp(host.get() + host_len - filter_host_len, hp->host->get(), filter_host_len))) return PR_FALSE; } @@ -365,8 +362,8 @@ nsProtocolProxyService::ExamineForProxy(nsIURI *aURI, nsIProxyInfo* *aResult) { nsCOMPtr ios = do_GetService(kIOServiceCID, &rv); if (NS_FAILED(rv)) return rv; - nsXPIDLCString scheme; - rv = aURI->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + rv = aURI->GetScheme(scheme); if (NS_FAILED(rv)) return rv; nsCOMPtr handler; diff --git a/mozilla/netwerk/base/src/nsSimpleURI.cpp b/mozilla/netwerk/base/src/nsSimpleURI.cpp index 49ee8932073..93f3496082a 100644 --- a/mozilla/netwerk/base/src/nsSimpleURI.cpp +++ b/mozilla/netwerk/base/src/nsSimpleURI.cpp @@ -22,6 +22,7 @@ * Contributor(s): * Pierre Phaneuf * Gagan Saksena + * Darin Fisher * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -48,6 +49,7 @@ #include "nsNetCID.h" #include "nsIObjectInputStream.h" #include "nsIObjectOutputStream.h" +#include "nsEscape.h" static NS_DEFINE_CID(kThisSimpleURIImplementationCID, NS_THIS_SIMPLEURI_IMPLEMENTATION_CID); @@ -58,16 +60,12 @@ static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); // nsSimpleURI methods: nsSimpleURI::nsSimpleURI(nsISupports* outer) - : mScheme(nsnull), - mPath(nsnull) { NS_INIT_AGGREGATED(outer); } nsSimpleURI::~nsSimpleURI() { - if (mScheme) nsCRT::free(mScheme); - if (mPath) nsCRT::free(mPath); } NS_IMPL_AGGREGATED(nsSimpleURI); @@ -100,11 +98,15 @@ nsSimpleURI::Read(nsIObjectInputStream* aStream) { nsresult rv; - rv = aStream->ReadStringZ(&mScheme); - if (NS_FAILED(rv)) return rv; + nsXPIDLCString buf; - rv = aStream->ReadStringZ(&mPath); + rv = aStream->ReadStringZ(getter_Copies(buf)); if (NS_FAILED(rv)) return rv; + mScheme = buf; + + rv = aStream->ReadStringZ(getter_Copies(buf)); + if (NS_FAILED(rv)) return rv; + mPath = buf; return NS_OK; } @@ -114,10 +116,10 @@ nsSimpleURI::Write(nsIObjectOutputStream* aStream) { nsresult rv; - rv = aStream->WriteStringZ(mScheme); + rv = aStream->WriteStringZ(mScheme.get()); if (NS_FAILED(rv)) return rv; - rv = aStream->WriteStringZ(mPath); + rv = aStream->WriteStringZ(mPath.get()); if (NS_FAILED(rv)) return rv; return NS_OK; @@ -127,127 +129,116 @@ nsSimpleURI::Write(nsIObjectOutputStream* aStream) // nsIURI methods: NS_IMETHODIMP -nsSimpleURI::GetSpec(char* *result) +nsSimpleURI::GetSpec(nsACString &result) { - nsAutoString string; -// NS_LOCK_INSTANCE(); - - // STRING USE WARNING: perhaps |string| should be |nsCAutoString|? -- scc - string.AssignWithConversion(mScheme); - string.Append(PRUnichar(':')); - string.AppendWithConversion(mPath); - -// NS_UNLOCK_INSTANCE(); - *result = ToNewCString(string); + result = mScheme + NS_LITERAL_CSTRING(":") + mPath; return NS_OK; } NS_IMETHODIMP -nsSimpleURI::SetSpec(const char* aSpec) +nsSimpleURI::SetSpec(const nsACString &aSpec) { - nsAutoString spec; - spec.AssignWithConversion(aSpec); + nsCAutoString spec; + + // nsSimpleURI currently restricts the charset to US-ASCII + NS_EscapeURL(PromiseFlatCString(aSpec), esc_OnlyNonASCII|esc_AlwaysCopy, spec); PRInt32 pos = spec.Find(":"); if (pos == -1) return NS_ERROR_FAILURE; - nsAutoString scheme; - PRInt32 n = spec.Left(scheme, pos); + + mScheme.Truncate(); + mPath.Truncate(); + + PRInt32 n = spec.Left(mScheme, pos); NS_ASSERTION(n == pos, "Left failed"); - nsAutoString path; + PRInt32 count = spec.Length() - pos - 1; - n = spec.Mid(path, pos + 1, count); + n = spec.Mid(mPath, pos + 1, count); NS_ASSERTION(n == count, "Mid failed"); - if (mScheme) - nsCRT::free(mScheme); - mScheme = ToNewCString(scheme); - if (mScheme == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - ToLowerCase(mScheme); - if (mPath) - nsCRT::free(mPath); - mPath = ToNewCString(path); - if (mPath == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - return NS_OK; -} -NS_IMETHODIMP -nsSimpleURI::GetScheme(char* *result) -{ - *result = nsCRT::strdup(mScheme); - return NS_OK; -} - -NS_IMETHODIMP -nsSimpleURI::SetScheme(const char* scheme) -{ - if (mScheme) nsCRT::free(mScheme); - mScheme = nsCRT::strdup(scheme); ToLowerCase(mScheme); return NS_OK; } NS_IMETHODIMP -nsSimpleURI::GetPrePath(char* *result) +nsSimpleURI::GetScheme(nsACString &result) { - nsCAutoString prePath(mScheme); - prePath += ":"; - *result = ToNewCString(prePath); - return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + result = mScheme; + return NS_OK; } NS_IMETHODIMP -nsSimpleURI::SetPrePath(const char* scheme) +nsSimpleURI::SetScheme(const nsACString &scheme) { - NS_NOTREACHED("nsSimpleURI::SetPrePath"); - return NS_ERROR_NOT_IMPLEMENTED; + mScheme = scheme; + ToLowerCase(mScheme); + return NS_OK; } NS_IMETHODIMP -nsSimpleURI::GetPreHost(char* *result) +nsSimpleURI::GetPrePath(nsACString &result) +{ + result = mScheme + NS_LITERAL_CSTRING(":"); + return NS_OK; +} + +NS_IMETHODIMP +nsSimpleURI::GetUserPass(nsACString &result) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsSimpleURI::SetPreHost(const char* preHost) +nsSimpleURI::SetUserPass(const nsACString &userPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsSimpleURI::GetUsername(char* *result) +nsSimpleURI::GetUsername(nsACString &result) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsSimpleURI::SetUsername(const char* userName) +nsSimpleURI::SetUsername(const nsACString &userName) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsSimpleURI::GetPassword(char* *result) +nsSimpleURI::GetPassword(nsACString &result) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsSimpleURI::SetPassword(const char* password) +nsSimpleURI::SetPassword(const nsACString &password) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsSimpleURI::GetHost(char* *result) +nsSimpleURI::GetHostPort(nsACString &result) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsSimpleURI::SetHost(const char* host) +nsSimpleURI::SetHostPort(const nsACString &result) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsSimpleURI::GetHost(nsACString &result) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsSimpleURI::SetHost(const nsACString &host) { return NS_ERROR_FAILURE; } @@ -265,17 +256,16 @@ nsSimpleURI::SetPort(PRInt32 port) } NS_IMETHODIMP -nsSimpleURI::GetPath(char* *result) +nsSimpleURI::GetPath(nsACString &result) { - *result = nsCRT::strdup(mPath); + result = mPath; return NS_OK; } NS_IMETHODIMP -nsSimpleURI::SetPath(const char* path) +nsSimpleURI::SetPath(const nsACString &path) { - if (mPath) nsCRT::free(mPath); - mPath = nsCRT::strdup(path); + mPath = path; return NS_OK; } @@ -284,17 +274,15 @@ nsSimpleURI::Equals(nsIURI* other, PRBool *result) { PRBool eq = PR_FALSE; if (other) { -// NS_LOCK_INSTANCE(); nsSimpleURI* otherUrl; nsresult rv = other->QueryInterface(kThisSimpleURIImplementationCID, (void**)&otherUrl); if (NS_SUCCEEDED(rv)) { - eq = PRBool((0 == PL_strcmp(mScheme, otherUrl->mScheme)) && - (0 == PL_strcmp(mPath, otherUrl->mPath))); + eq = PRBool((0 == strcmp(mScheme.get(), otherUrl->mScheme.get())) && + (0 == strcmp(mPath.get(), otherUrl->mPath.get()))); NS_RELEASE(otherUrl); } -// NS_UNLOCK_INSTANCE(); } *result = eq; return NS_OK; @@ -306,9 +294,11 @@ nsSimpleURI::SchemeIs(const char *i_Scheme, PRBool *o_Equals) NS_ENSURE_ARG_POINTER(o_Equals); if (!i_Scheme) return NS_ERROR_NULL_POINTER; + const char *this_scheme = mScheme.get(); + // mScheme is guaranteed to be lower case. - if (*i_Scheme == *mScheme || *i_Scheme == (*mScheme - ('a' - 'A')) ) { - *o_Equals = PL_strcasecmp(mScheme, i_Scheme) ? PR_FALSE : PR_TRUE; + if (*i_Scheme == *this_scheme || *i_Scheme == (*this_scheme - ('a' - 'A')) ) { + *o_Equals = PL_strcasecmp(this_scheme, i_Scheme) ? PR_FALSE : PR_TRUE; } else { *o_Equals = PR_FALSE; } @@ -322,21 +312,44 @@ nsSimpleURI::Clone(nsIURI* *result) nsSimpleURI* url = new nsSimpleURI(nsnull); // XXX outer? if (url == nsnull) return NS_ERROR_OUT_OF_MEMORY; - url->mScheme = nsCRT::strdup(mScheme); - if (url->mScheme == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - url->mPath = nsCRT::strdup(mPath); - if (url->mPath == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + + url->mScheme = mScheme; + url->mPath = mPath; + *result = url; NS_ADDREF(url); return NS_OK; } NS_IMETHODIMP -nsSimpleURI::Resolve(const char *relativePath, char **result) +nsSimpleURI::Resolve(const nsACString &relativePath, nsACString &result) { - return DupString(result,(char*)relativePath); + result = relativePath; + return NS_OK; +} + +NS_IMETHODIMP +nsSimpleURI::GetAsciiSpec(nsACString &result) +{ + nsCAutoString buf; + nsresult rv = GetSpec(buf); + if (NS_FAILED(rv)) return rv; + NS_EscapeURL(buf, esc_OnlyNonASCII|esc_AlwaysCopy, result); + return NS_OK; +} + +NS_IMETHODIMP +nsSimpleURI::GetAsciiHost(nsACString &result) +{ + result.Truncate(); + return NS_OK; +} + +NS_IMETHODIMP +nsSimpleURI::GetOriginCharset(nsACString &result) +{ + result.Truncate(); + return NS_OK; } //////////////////////////////////////////////////////////////////////////////// diff --git a/mozilla/netwerk/base/src/nsSimpleURI.h b/mozilla/netwerk/base/src/nsSimpleURI.h index b058cdcabf4..2c432e255f1 100644 --- a/mozilla/netwerk/base/src/nsSimpleURI.h +++ b/mozilla/netwerk/base/src/nsSimpleURI.h @@ -41,6 +41,7 @@ #include "nsIURL.h" #include "nsAgg.h" #include "nsISerializable.h" +#include "nsString.h" #define NS_THIS_SIMPLEURI_IMPLEMENTATION_CID \ { /* 22b8f64a-2f7b-11d3-8cd0-0060b0fc14a3 */ \ @@ -66,8 +67,8 @@ public: Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); protected: - char* mScheme; - char* mPath; + nsCString mScheme; + nsCString mPath; }; #endif // nsSimpleURI_h__ diff --git a/mozilla/netwerk/base/src/nsStandardURL.cpp b/mozilla/netwerk/base/src/nsStandardURL.cpp index d9d34bed0b7..936f2eff9a1 100644 --- a/mozilla/netwerk/base/src/nsStandardURL.cpp +++ b/mozilla/netwerk/base/src/nsStandardURL.cpp @@ -45,7 +45,11 @@ #include "nsILocalFile.h" #include "nsIObjectInputStream.h" #include "nsIObjectOutputStream.h" -#include "nsNetCID.h" +#include "nsICharsetConverterManager2.h" +#include "nsIPrefService.h" +#include "nsIPrefBranch.h" +#include "nsIPrefBranchInternal.h" +#include "nsIIDNService.h" #include "nsNetUtil.h" #include "prlog.h" @@ -54,7 +58,10 @@ static NS_DEFINE_CID(kThisImplCID, NS_THIS_STANDARDURL_IMPL_CID); nsIURLParser *nsStandardURL::gNoAuthParser = nsnull; nsIURLParser *nsStandardURL::gAuthParser = nsnull; nsIURLParser *nsStandardURL::gStdParser = nsnull; +nsIIDNService *nsStandardURL::gIDNService = nsnull; +nsICharsetConverterManager2 *nsStandardURL::gCharsetMgr = nsnull; PRBool nsStandardURL::gInitialized = PR_FALSE; +PRBool nsStandardURL::gEscapeUTF8 = PR_TRUE; #if defined(PR_LOGGING) // @@ -67,18 +74,204 @@ static PRLogModuleInfo *gStandardURLLog; //---------------------------------------------------------------------------- -static PRInt32 -AppendEscaped(nsACString &buf, const char *str, PRInt32 len, PRInt16 mask) +#define ENSURE_MUTABLE() \ + PR_BEGIN_MACRO \ + if (!mMutable) { \ + NS_ERROR("attempt to modify an immutable nsStandardURL"); \ + return NS_ERROR_ABORT; \ + } \ + PR_END_MACRO + +//---------------------------------------------------------------------------- + +static nsresult +EncodeString(nsIUnicodeEncoder *encoder, const nsAFlatString &str, nsACString &result) { - nsCAutoString escaped; - if (NS_EscapeURLPart(str, len, mask, escaped)) { - str = escaped.get(); - len = escaped.Length(); + nsresult rv; + PRInt32 len = str.Length(); + PRInt32 maxlen; + + rv = encoder->GetMaxLength(str.get(), len, &maxlen); + if (NS_FAILED(rv)) return rv; + + char buf[256], *p = buf; + if (PRUint32(maxlen) > sizeof(buf) - 1) { + p = (char *) malloc(maxlen + 1); + if (!p) return NS_ERROR_OUT_OF_MEMORY; + } + + rv = encoder->Convert(str.get(), &len, p, &maxlen); + if (NS_FAILED(rv)) goto end; + p[maxlen] = 0; + result = p; + + rv = encoder->Finish(p, &len); + if (NS_FAILED(rv)) goto end; + p[len] = 0; + result += p; + + rv = encoder->Reset(); + +end: + if (p != buf) + free(p); + return rv; +} + +// filter out \t\r\n +static const char * +FilterString(const char *str, nsCString &result) +{ + PRBool writing = PR_FALSE; + result.Truncate(); + const char *p = str; + for (; *p; ++p) { + if (*p == '\t' || *p == '\r' || *p == '\n') { + writing = PR_TRUE; + // append chars up to but not including *p + if (p > str) + result.Append(str, p - str); + str = p + 1; + } + } + if (writing && p > str) + result.Append(str, p - str); + return writing ? result.get() : str; +} + +//---------------------------------------------------------------------------- +// nsStandardURL::nsPrefObserver +//---------------------------------------------------------------------------- + +#define NS_NET_PREF_ESCAPEUTF8 "network.standard-url.escape-utf8" +#define NS_NET_PREF_ENABLEIDN "network.enableIDN" + +NS_IMPL_ISUPPORTS1(nsStandardURL::nsPrefObserver, nsIObserver) + +NS_IMETHODIMP nsStandardURL:: +nsPrefObserver::Observe(nsISupports *subject, + const char *topic, + const PRUnichar *data) +{ + if (!strcmp(topic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) { + nsCOMPtr prefBranch( do_QueryInterface(subject) ); + if (prefBranch) { + if (!nsCRT::strcmp(data, NS_LITERAL_STRING(NS_NET_PREF_ESCAPEUTF8).get())) { + PRBool val; + if (NS_SUCCEEDED(prefBranch->GetBoolPref(NS_NET_PREF_ESCAPEUTF8, &val))) + gEscapeUTF8 = val; + printf("escape UTF-8 %s\n", gEscapeUTF8 ? "enabled" : "disabled"); + } + else if (!nsCRT::strcmp(data, NS_LITERAL_STRING(NS_NET_PREF_ENABLEIDN).get())) { + PRBool val; + NS_IF_RELEASE(gIDNService); + if (NS_SUCCEEDED(prefBranch->GetBoolPref(NS_NET_PREF_ENABLEIDN, &val)) && val) { + nsCOMPtr serv(do_GetService(NS_IDNSERVICE_CONTRACTID)); + if (serv) + NS_ADDREF(gIDNService = serv.get()); + } + printf("IDN support %s\n", gIDNService ? "enabled" : "disabled"); + } + } + } + return NS_OK; +} + +//---------------------------------------------------------------------------- +// nsStandardURL::nsSegmentEncoder +//---------------------------------------------------------------------------- + +nsStandardURL:: +nsSegmentEncoder::nsSegmentEncoder(const char *charset) +{ + if (!charset || !*charset) + return; + + // get unicode encoder (XXX cache this someplace) + nsresult rv; + if (!gCharsetMgr) { + nsCOMPtr convMgr( + do_GetService("@mozilla.org/charset-converter-manager;1", &rv)); + if (NS_FAILED(rv)) { + NS_ERROR("failed to get charset-converter-manager"); + return; + } + NS_ADDREF(gCharsetMgr = convMgr); + } + + nsCOMPtr charsetAtom; + rv = gCharsetMgr->GetCharsetAtom2(charset, getter_AddRefs(charsetAtom)); + if (NS_FAILED(rv)) { + NS_ERROR("failed to get charset atom"); + return; + } + + rv = gCharsetMgr->GetUnicodeEncoder(charsetAtom, getter_AddRefs(mEncoder)); + if (NS_FAILED(rv)) { + NS_ERROR("failed to get unicode encoder"); + mEncoder = 0; // just in case + } +} + +PRInt32 nsStandardURL:: +nsSegmentEncoder::EncodeSegmentCount(const char *str, + const URLSegment &seg, + PRInt16 mask, + nsAFlatCString &result) +{ + if (!str) + return 0; + PRInt32 len = 0; + if (seg.mLen > 0) { + PRUint32 pos = seg.mPos; + len = seg.mLen; + + // first honor the origin charset if appropriate. as an optimization, + // only do this if |str| is non-ASCII. + nsCAutoString encBuf; + if (mEncoder && !nsCRT::IsAscii(str)) { + NS_ConvertUTF8toUCS2 ucsBuf(Substring(str + pos, str + pos + len)); + if (NS_SUCCEEDED(EncodeString(mEncoder, ucsBuf, encBuf))) { + str = encBuf.get(); + pos = 0; + len = encBuf.Length(); + } + } + + // escape per RFC2396 unless UTF-8 and allowed by preferences + PRInt16 escapeFlags = (gEscapeUTF8 || mEncoder) ? 0 : esc_OnlyASCII; + + PRUint32 initLen = result.Length(); + + // now perform any required escaping + if (NS_EscapeURL(str + pos, len, mask|escapeFlags, result)) + len = result.Length() - initLen; + else if (str == encBuf.get()) { + result += encBuf; // append only!! + len = encBuf.Length(); + } } - buf.Append(str, len); return len; } +const nsACString &nsStandardURL:: +nsSegmentEncoder::EncodeSegment(const nsASingleFragmentCString &str, + PRInt16 mask, + nsAFlatCString &result) +{ + const char *text; + PRUint32 resultLen = result.Length(); + EncodeSegmentCount(str.BeginReading(text), URLSegment(0, str.Length()), mask, result); + // since EncodeSegmentCount appends to result, we must check whether its length grew + if (result.Length() > resultLen) + return result; + else + return str; +} + +#define GET_SEGMENT_ENCODER(name) \ + nsSegmentEncoder name(mOriginCharset.get()) + //---------------------------------------------------------------------------- // nsStandardURL //---------------------------------------------------------------------------- @@ -87,6 +280,10 @@ nsStandardURL::nsStandardURL() : mDefaultPort(-1) , mPort(-1) , mURLType(URLTYPE_STANDARD) + , mHostA(nsnull) + , mHostEncoding(eEncoding_Unknown) + , mSpecEncoding(eEncoding_Unknown) + , mMutable(PR_TRUE) { #if defined(PR_LOGGING) if (!gStandardURLLog) @@ -109,7 +306,8 @@ nsStandardURL::nsStandardURL() nsStandardURL::~nsStandardURL() { LOG(("Destroying nsStandardURL @%p\n", this)); - // nothing to do + + CRTFREEIF(mHostA); } void @@ -137,6 +335,20 @@ nsStandardURL::InitGlobalObjects() gStdParser = parser.get(); NS_ADDREF(gStdParser); } + + nsCOMPtr prefService( do_GetService(NS_PREFSERVICE_CONTRACTID) ); + if (prefService) { + nsCOMPtr prefBranch; + prefService->GetBranch(nsnull, getter_AddRefs(prefBranch)); + if (prefBranch) { + nsCOMPtr pbi( do_QueryInterface(prefBranch) ); + if (pbi) { + nsCOMPtr obs( new nsPrefObserver() ); + pbi->AddObserver(NS_NET_PREF_ESCAPEUTF8, obs.get(), PR_FALSE); + pbi->AddObserver(NS_NET_PREF_ENABLEIDN, obs.get(), PR_FALSE); + } + } + } } void @@ -145,6 +357,8 @@ nsStandardURL::ShutdownGlobalObjects() NS_IF_RELEASE(gNoAuthParser); NS_IF_RELEASE(gAuthParser); NS_IF_RELEASE(gStdParser); + NS_IF_RELEASE(gIDNService); + NS_IF_RELEASE(gCharsetMgr); } //---------------------------------------------------------------------------- @@ -161,10 +375,10 @@ nsStandardURL::Clear() mAuthority.Reset(); mUsername.Reset(); mPassword.Reset(); - mHostname.Reset(); + mHost.Reset(); mPath.Reset(); - mFilePath.Reset(); + mFilepath.Reset(); mDirectory.Reset(); mBasename.Reset(); @@ -173,24 +387,21 @@ nsStandardURL::Clear() mQuery.Reset(); mRef.Reset(); - mFile = 0; + InvalidateCache(); } -PRInt32 -nsStandardURL::EscapeSegment(const char *str, const URLSegment &seg, PRInt16 mask, nsCString &result) +void +nsStandardURL::InvalidateCache(PRBool invalidateCachedFile) { - PRInt32 len = 0; - if (seg.mLen > 0) { - if (NS_EscapeURLPart(str + seg.mPos, seg.mLen, mask, result)) - len = result.Length(); - else - len = seg.mLen; - } - return len; + if (invalidateCachedFile) + mFile = 0; + CRTFREEIF(mHostA); + mSpecEncoding = eEncoding_Unknown; + mHostEncoding = eEncoding_Unknown; } PRBool -nsStandardURL::EscapeHost(const char *host, nsCString &result) +nsStandardURL::EncodeHost(const char *host, nsCString &result) { // Escape IPv6 address literal by surrounding it with []'s if (host && (host[0] != '[') && PL_strchr(host, ':')) { @@ -202,26 +413,6 @@ nsStandardURL::EscapeHost(const char *host, nsCString &result) return PR_FALSE; } -PRBool -nsStandardURL::FilterString(const char *str, nsCString &result) -{ - PRBool writing = PR_FALSE; - result.Truncate(); - const char *p = str; - for (; *p; ++p) { - if (*p == '\t' || *p == '\r' || *p == '\n') { - writing = PR_TRUE; - // append chars up to but not including *p - if (p > str) - result.Append(str, p - str); - str = p + 1; - } - } - if (writing && p > str) - result.Append(str, p - str); - return writing; -} - void nsStandardURL::CoalescePath(char *path) { @@ -231,7 +422,7 @@ nsStandardURL::CoalescePath(char *path) PRInt32 diff = newLen - mPath.mLen; mPath.mLen = newLen; mDirectory.mLen += diff; - mFilePath.mLen += diff; + mFilepath.mLen += diff; ShiftFromBasename(diff); } } @@ -272,15 +463,14 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) // buffers for holding escaped url segments (these will remain empty unless // escaping is required). - nsCAutoString escapedScheme; - nsCAutoString escapedUsername; - nsCAutoString escapedPassword; - nsCAutoString escapedDirectory; - nsCAutoString escapedBasename; - nsCAutoString escapedExtension; - nsCAutoString escapedParam; - nsCAutoString escapedQuery; - nsCAutoString escapedRef; + nsCAutoString encUsername; + nsCAutoString encPassword; + nsCAutoString encDirectory; + nsCAutoString encBasename; + nsCAutoString encExtension; + nsCAutoString encParam; + nsCAutoString encQuery; + nsCAutoString encRef; // // escape each URL segment, if necessary, and calculate approximate normalized @@ -288,20 +478,29 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) // PRInt32 approxLen = 3; // includes room for "://" - approxLen += EscapeSegment(spec, mScheme, esc_Scheme, escapedScheme); - approxLen += EscapeSegment(spec, mUsername, esc_Username, escapedUsername); - approxLen += EscapeSegment(spec, mPassword, esc_Password, escapedPassword); - approxLen += EscapeSegment(spec, mDirectory, esc_Directory, escapedDirectory); - approxLen += EscapeSegment(spec, mBasename, esc_FileBaseName, escapedBasename); - approxLen += EscapeSegment(spec, mExtension, esc_FileExtension, escapedExtension); - approxLen += EscapeSegment(spec, mParam, esc_Param, escapedParam); - approxLen += EscapeSegment(spec, mQuery, esc_Query, escapedQuery); - approxLen += EscapeSegment(spec, mRef, esc_Ref, escapedRef); + // the scheme is already ASCII + if (mScheme.mLen > 0) + approxLen += mScheme.mLen; - // do not escape the hostname, if IPv6 address literal, mHostname will + // encode URL segments; convert UTF-8 to origin charset and possibly escape. + // results written to encXXX variables only if |spec| is not already in the + // appropriate encoding. + { + GET_SEGMENT_ENCODER(encoder); + approxLen += encoder.EncodeSegmentCount(spec, mUsername, esc_Username, encUsername); + approxLen += encoder.EncodeSegmentCount(spec, mPassword, esc_Password, encPassword); + approxLen += encoder.EncodeSegmentCount(spec, mDirectory, esc_Directory, encDirectory); + approxLen += encoder.EncodeSegmentCount(spec, mBasename, esc_FileBaseName, encBasename); + approxLen += encoder.EncodeSegmentCount(spec, mExtension, esc_FileExtension, encExtension); + approxLen += encoder.EncodeSegmentCount(spec, mParam, esc_Param, encParam); + approxLen += encoder.EncodeSegmentCount(spec, mQuery, esc_Query, encQuery); + approxLen += encoder.EncodeSegmentCount(spec, mRef, esc_Ref, encRef); + } + + // do not escape the hostname, if IPv6 address literal, mHost will // already point to a [ ] delimited IPv6 address literal. - if (mHostname.mLen > 0) - approxLen += mHostname.mLen; + if (mHost.mLen > 0) + approxLen += mHost.mLen; // // generate the normalized URL string @@ -312,7 +511,7 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) PRUint32 i = 0; if (mScheme.mLen > 0) { - i = AppendSegmentToBuf(buf, i, spec, mScheme, &escapedScheme); + i = AppendSegmentToBuf(buf, i, spec, mScheme); ToLowerCase(buf + mScheme.mPos, mScheme.mLen); i = AppendToBuf(buf, i, "://", 3); } @@ -322,16 +521,16 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) // append authority if (mUsername.mLen > 0) { - i = AppendSegmentToBuf(buf, i, spec, mUsername, &escapedUsername); + i = AppendSegmentToBuf(buf, i, spec, mUsername, &encUsername); if (mPassword.mLen >= 0) { buf[i++] = ':'; - i = AppendSegmentToBuf(buf, i, spec, mPassword, &escapedPassword); + i = AppendSegmentToBuf(buf, i, spec, mPassword, &encPassword); } buf[i++] = '@'; } - if (mHostname.mLen > 0) { - i = AppendSegmentToBuf(buf, i, spec, mHostname); - ToLowerCase(buf + mHostname.mPos, mHostname.mLen); + if (mHost.mLen > 0) { + i = AppendSegmentToBuf(buf, i, spec, mHost); + ToLowerCase(buf + mHost.mPos, mHost.mLen); if (mPort != -1 && mPort != mDefaultPort) { nsCAutoString portbuf; portbuf.AppendInt(mPort); @@ -346,8 +545,8 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) // path must always start with a "/" if (mPath.mLen <= 0) { LOG(("setting path=/")); - mDirectory.mPos = mFilePath.mPos = mPath.mPos = i; - mDirectory.mLen = mFilePath.mLen = mPath.mLen = 1; + mDirectory.mPos = mFilepath.mPos = mPath.mPos = i; + mDirectory.mLen = mFilepath.mLen = mPath.mLen = 1; // basename must exist, even if empty (bug 113508) mBasename.mPos = i+1; mBasename.mLen = 0; @@ -362,9 +561,9 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) } // record corrected (file)path starting position - mPath.mPos = mFilePath.mPos = i - leadingSlash; + mPath.mPos = mFilepath.mPos = i - leadingSlash; - i = AppendSegmentToBuf(buf, i, spec, mDirectory, &escapedDirectory); + i = AppendSegmentToBuf(buf, i, spec, mDirectory, &encDirectory); // the directory must end with a '/' if (buf[i-1] != '/') { @@ -372,7 +571,7 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) mDirectory.mLen++; } - i = AppendSegmentToBuf(buf, i, spec, mBasename, &escapedBasename); + i = AppendSegmentToBuf(buf, i, spec, mBasename, &encBasename); // make corrections to directory segment if leadingSlash if (leadingSlash) { @@ -385,22 +584,22 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) if (mExtension.mLen >= 0) { buf[i++] = '.'; - i = AppendSegmentToBuf(buf, i, spec, mExtension, &escapedExtension); + i = AppendSegmentToBuf(buf, i, spec, mExtension, &encExtension); } // calculate corrected filepath length - mFilePath.mLen = i - mFilePath.mPos; + mFilepath.mLen = i - mFilepath.mPos; if (mParam.mLen >= 0) { buf[i++] = ';'; - i = AppendSegmentToBuf(buf, i, spec, mParam, &escapedParam); + i = AppendSegmentToBuf(buf, i, spec, mParam, &encParam); } if (mQuery.mLen >= 0) { buf[i++] = '?'; - i = AppendSegmentToBuf(buf, i, spec, mQuery, &escapedQuery); + i = AppendSegmentToBuf(buf, i, spec, mQuery, &encQuery); } if (mRef.mLen >= 0) { buf[i++] = '#'; - i = AppendSegmentToBuf(buf, i, spec, mRef, &escapedRef); + i = AppendSegmentToBuf(buf, i, spec, mRef, &encRef); } // calculate corrected path length mPath.mLen = i - mPath.mPos; @@ -415,6 +614,21 @@ nsStandardURL::BuildNormalizedSpec(const char *spec) return NS_OK; } +PRBool +nsStandardURL::HostsAreEquivalent(nsStandardURL *that) +{ + // optimize for the non-IDN case... + if ((this->mHostEncoding == eEncoding_ASCII) && + (that->mHostEncoding == eEncoding_ASCII)) + return SegmentIs(mHost, that->mSpec.get(), that->mHost); + + nsCAutoString thisHost, thatHost; + this->GetAsciiHost(thisHost); + that->GetAsciiHost(thatHost); + + return !nsCRT::strcasecmp(thisHost.get(), thatHost.get()); +} + PRBool nsStandardURL::SegmentIs(const URLSegment &seg, const char *val) { @@ -455,6 +669,16 @@ nsStandardURL::ReplaceSegment(PRUint32 pos, PRUint32 len, const char *val, PRUin return -PRInt32(len); } +PRInt32 +nsStandardURL::ReplaceSegment(PRUint32 pos, PRUint32 len, const nsACString &val) +{ + if (len == 0) + mSpec.Insert(val, pos); + else + mSpec.Replace(pos, len, val); + return val.Length() - len; +} + nsresult nsStandardURL::ParseURL(const char *spec) { @@ -470,21 +694,23 @@ nsStandardURL::ParseURL(const char *spec) if (NS_FAILED(rv)) return rv; #ifdef DEBUG - if (mScheme.mLen <= 0) + if (mScheme.mLen <= 0) { + printf("spec=%s\n", spec); NS_WARNING("malformed url: no scheme"); + } #endif if (mAuthority.mLen > 0) { rv = mParser->ParseAuthority(spec + mAuthority.mPos, mAuthority.mLen, &mUsername.mPos, &mUsername.mLen, &mPassword.mPos, &mPassword.mLen, - &mHostname.mPos, &mHostname.mLen, + &mHost.mPos, &mHost.mLen, &mPort); if (NS_FAILED(rv)) return rv; mUsername.mPos += mAuthority.mPos; mPassword.mPos += mAuthority.mPos; - mHostname.mPos += mAuthority.mPos; + mHost.mPos += mAuthority.mPos; } if (mPath.mLen > 0) @@ -497,46 +723,31 @@ nsresult nsStandardURL::ParsePath(const char *spec, PRUint32 pathPos, PRInt32 pathLen) { nsresult rv = mParser->ParsePath(spec + pathPos, pathLen, - &mFilePath.mPos, &mFilePath.mLen, + &mFilepath.mPos, &mFilepath.mLen, &mParam.mPos, &mParam.mLen, &mQuery.mPos, &mQuery.mLen, &mRef.mPos, &mRef.mLen); if (NS_FAILED(rv)) return rv; - mFilePath.mPos += pathPos; + mFilepath.mPos += pathPos; mParam.mPos += pathPos; mQuery.mPos += pathPos; mRef.mPos += pathPos; - if (mFilePath.mLen > 0) { - rv = mParser->ParseFilePath(spec + mFilePath.mPos, mFilePath.mLen, + if (mFilepath.mLen > 0) { + rv = mParser->ParseFilePath(spec + mFilepath.mPos, mFilepath.mLen, &mDirectory.mPos, &mDirectory.mLen, &mBasename.mPos, &mBasename.mLen, &mExtension.mPos, &mExtension.mLen); if (NS_FAILED(rv)) return rv; - mDirectory.mPos += mFilePath.mPos; - mBasename.mPos += mFilePath.mPos; - mExtension.mPos += mFilePath.mPos; + mDirectory.mPos += mFilepath.mPos; + mBasename.mPos += mFilepath.mPos; + mExtension.mPos += mFilepath.mPos; } return NS_OK; } -nsresult -nsStandardURL::NewSubstring(PRUint32 pos, PRInt32 len, char **result, PRBool unescaped) -{ - if (len < 0) { - *result = nsnull; - return NS_OK; - } - *result = ToNewCString(Substring(mSpec, pos, len)); - if (!*result) - return NS_ERROR_OUT_OF_MEMORY; - if (unescaped) - NS_UnescapeURL(*result); - return NS_OK; -} - char * nsStandardURL::AppendToSubstring(PRUint32 pos, PRInt32 len, @@ -607,70 +818,66 @@ NS_INTERFACE_MAP_END // nsStandardURL::nsIURI //---------------------------------------------------------------------------- +// result may contain unescaped UTF-8 characters NS_IMETHODIMP -nsStandardURL::GetSpec(char **result) +nsStandardURL::GetSpec(nsACString &result) { - *result = ToNewCString(mSpec); + result = mSpec; + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetPrePath(nsACString &result) +{ + result = Prepath(); + return NS_OK; +} + +// result is strictly US-ASCII +NS_IMETHODIMP +nsStandardURL::GetScheme(nsACString &result) +{ + result = Scheme(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetUserPass(nsACString &result) +{ + result = Userpass(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetUsername(nsACString &result) +{ + result = Username(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetPassword(nsACString &result) +{ + result = Password(); return NS_OK; } NS_IMETHODIMP -nsStandardURL::GetPrePath(char **result) +nsStandardURL::GetHostPort(nsACString &result) { - if (mAuthority.mLen < 0) { - *result = nsnull; - return NS_OK; - } - return NewSubstring(mScheme.mPos, mAuthority.mPos + mAuthority.mLen, result); + result = Hostport(); + return NS_OK; } NS_IMETHODIMP -nsStandardURL::GetScheme(char **result) +nsStandardURL::GetHost(nsACString &result) { - return NewSubstring(mScheme, result, PR_TRUE); -} - -NS_IMETHODIMP -nsStandardURL::GetPreHost(char **result) -{ - if (mUsername.mLen < 0) { - *result = nsnull; - return NS_OK; - } - if (mPassword.mLen < 0) { - // prehost = - return NewSubstring(mUsername, result); - } - // prehost = : - return NewSubstring(mUsername.mPos, mUsername.mLen + mPassword.mLen + 1, result); -} - -NS_IMETHODIMP -nsStandardURL::GetUsername(char **result) -{ - return NewSubstring(mUsername, result, PR_TRUE); -} - -NS_IMETHODIMP -nsStandardURL::GetPassword(char **result) -{ - return NewSubstring(mPassword, result, PR_TRUE); -} - -NS_IMETHODIMP -nsStandardURL::GetHost(char **result) -{ - if (mHostname.mLen <= 0) { - *result = nsnull; - return NS_OK; - } - nsresult rv; - // strip []'s if hostname is an IPv6 address literal - if (mSpec.CharAt(mHostname.mPos) == '[') - rv = NewSubstring(mHostname.mPos + 1, mHostname.mLen - 2, result); - else - rv = NewSubstring(mHostname, result); - return rv; + result = Host(); + return NS_OK; } NS_IMETHODIMP @@ -680,25 +887,116 @@ nsStandardURL::GetPort(PRInt32 *result) return NS_OK; } +// result may contain unescaped UTF-8 characters NS_IMETHODIMP -nsStandardURL::GetPath(char **result) +nsStandardURL::GetPath(nsACString &result) { - return NewSubstring(mPath, result); + result = Path(); + return NS_OK; +} + +// result is ASCII +NS_IMETHODIMP +nsStandardURL::GetAsciiSpec(nsACString &result) +{ + if (mSpecEncoding == eEncoding_Unknown) { + if (IsASCII(mSpec)) + mSpecEncoding = eEncoding_ASCII; + else + mSpecEncoding = eEncoding_UTF8; + } + + if (mSpecEncoding == eEncoding_ASCII) { + result = mSpec; + return NS_OK; + } + + // try to guess the capacity required for result... + result.SetCapacity(mSpec.Length() + PR_MIN(32, mSpec.Length()/10)); + + result = Substring(mSpec, 0, mScheme.mLen + 3); + + NS_EscapeURL(Userpass(PR_TRUE), esc_OnlyNonASCII|esc_AlwaysCopy, result); + + // get escaped host + nsCAutoString escHostport; + if (mHost.mLen > 0) { + // this doesn't fail + (void) GetAsciiHost(escHostport); + + // escHostport = "hostA" + ":port" + PRUint32 pos = mHost.mPos + mHost.mLen; + if (pos < mPath.mPos) + escHostport += Substring(mSpec, pos, mPath.mPos - pos); + } + result += escHostport; + + NS_EscapeURL(Path(), esc_OnlyNonASCII|esc_AlwaysCopy, result); + return NS_OK; +} + +// result is ASCII +NS_IMETHODIMP +nsStandardURL::GetAsciiHost(nsACString &result) +{ + if (mHostEncoding == eEncoding_Unknown) { + if (IsASCII(Host())) + mHostEncoding = eEncoding_ASCII; + else + mHostEncoding = eEncoding_UTF8; + } + + if (mHostEncoding == eEncoding_ASCII) { + result = Host(); + return NS_OK; + } + + // perhaps we have it cached... + if (mHostA) { + result = mHostA; + return NS_OK; + } + + if (gIDNService) { + nsresult rv; + rv = gIDNService->UTF8ToIDNHostName(PromiseFlatCString(Host()).get(), &mHostA); + if (NS_SUCCEEDED(rv)) { + result = mHostA; + return NS_OK; + } + NS_WARNING("UTF8ToIDNHostName failed"); + } + + // something went wrong... guess all we can do is URL escape :-/ + NS_EscapeURL(Host(), esc_AlwaysCopy, result); + return NS_OK; } NS_IMETHODIMP -nsStandardURL::SetSpec(const char *spec) +nsStandardURL::GetOriginCharset(nsACString &result) { - LOG(("nsStandardURL::SetSpec [spec=%s]\n", spec)); + if (mOriginCharset.IsEmpty()) + result = NS_LITERAL_CSTRING("UTF-8"); + else + result = mOriginCharset; + return NS_OK; +} - NS_PRECONDITION(spec, "null pointer"); +NS_IMETHODIMP +nsStandardURL::SetSpec(const nsACString &input) +{ + ENSURE_MUTABLE(); + + const nsPromiseFlatCString &flat = PromiseFlatCString(input); + const char *spec = flat.get(); + + LOG(("nsStandardURL::SetSpec [spec=%s]\n", spec)); Clear(); // filter out unexpected chars "\r\n\t" if necessary - nsCAutoString filteredSpec; - if (FilterString(spec, filteredSpec)) - spec = filteredSpec.get(); + nsCAutoString buf1; + spec = FilterString(spec, buf1); // parse the given URL... nsresult rv = ParseURL(spec); @@ -716,9 +1014,9 @@ nsStandardURL::SetSpec(const char *spec) LOG((" authority = (%u,%d)\n", mAuthority.mPos, mAuthority.mLen)); LOG((" username = (%u,%d)\n", mUsername.mPos, mUsername.mLen)); LOG((" password = (%u,%d)\n", mPassword.mPos, mPassword.mLen)); - LOG((" hostname = (%u,%d)\n", mHostname.mPos, mHostname.mLen)); + LOG((" hostname = (%u,%d)\n", mHost.mPos, mHost.mLen)); LOG((" path = (%u,%d)\n", mPath.mPos, mPath.mLen)); - LOG((" filepath = (%u,%d)\n", mFilePath.mPos, mFilePath.mLen)); + LOG((" filepath = (%u,%d)\n", mFilepath.mPos, mFilepath.mLen)); LOG((" directory = (%u,%d)\n", mDirectory.mPos, mDirectory.mLen)); LOG((" basename = (%u,%d)\n", mBasename.mPos, mBasename.mLen)); LOG((" extension = (%u,%d)\n", mExtension.mPos, mExtension.mLen)); @@ -731,18 +1029,15 @@ nsStandardURL::SetSpec(const char *spec) } NS_IMETHODIMP -nsStandardURL::SetPrePath(const char *prepath) +nsStandardURL::SetScheme(const nsACString &input) { - NS_NOTYETIMPLEMENTED(""); - return NS_ERROR_NOT_IMPLEMENTED; -} + ENSURE_MUTABLE(); -NS_IMETHODIMP -nsStandardURL::SetScheme(const char *scheme) -{ - LOG(("nsStandardURL::SetScheme [scheme=%s]\n", scheme)); + const nsPromiseFlatCString &scheme = PromiseFlatCString(input); - if (!(scheme && *scheme)) { + LOG(("nsStandardURL::SetScheme [scheme=%s]\n", scheme.get())); + + if (scheme.IsEmpty()) { NS_ERROR("cannot remove the scheme from an url"); return NS_ERROR_UNEXPECTED; } @@ -751,52 +1046,58 @@ nsStandardURL::SetScheme(const char *scheme) return NS_ERROR_NOT_INITIALIZED; } - PRInt32 len = strlen(scheme); - if (!IsValidScheme(scheme, len)) { + if (!IsValidScheme(scheme)) { NS_ERROR("the given url scheme contains invalid characters"); return NS_ERROR_UNEXPECTED; } - mFile = 0; - PRInt32 shift = ReplaceSegment(mScheme.mPos, mScheme.mLen, scheme, len); + InvalidateCache(); + + PRInt32 shift = ReplaceSegment(mScheme.mPos, mScheme.mLen, scheme); if (shift) { - mScheme.mLen = len; + mScheme.mLen = scheme.Length(); ShiftFromAuthority(shift); } // ensure new scheme is lowercase - // XXX the string code's ToLowerCase doesn't operate on substrings - ToLowerCase((char *)mSpec.get() + mScheme.mPos, mScheme.mLen); + // + // XXX the string code unfortunately doesn't provide a ToLowerCase + // that operates on a substring. + ToLowerCase((char *) mSpec.get(), mScheme.mLen); return NS_OK; } NS_IMETHODIMP -nsStandardURL::SetPreHost(const char *prehost) +nsStandardURL::SetUserPass(const nsACString &input) { - LOG(("nsStandardURL::SetPreHost [prehost=%s]\n", prehost)); + ENSURE_MUTABLE(); + + const nsPromiseFlatCString &userpass = PromiseFlatCString(input); + + LOG(("nsStandardURL::SetUserPass [userpass=%s]\n", userpass.get())); if (mURLType == URLTYPE_NO_AUTHORITY) { - NS_ERROR("cannot set prehost on no-auth url"); + NS_ERROR("cannot set user:pass on no-auth url"); return NS_ERROR_UNEXPECTED; } if (mAuthority.mLen < 0) { NS_ERROR("uninitialized"); return NS_ERROR_NOT_INITIALIZED; } - NS_PRECONDITION(mHostname.mLen >= 0, "wtf"); + NS_ASSERTION(mHost.mLen >= 0, "unitialized"); - mFile = 0; + InvalidateCache(); - if (!(prehost && *prehost)) { - // remove prehost + if (userpass.IsEmpty()) { + // remove user:pass if (mUsername.mLen >= 0) { if (mPassword.mLen > 0) mUsername.mLen += (mPassword.mLen + 1); mUsername.mLen++; mSpec.Cut(mUsername.mPos, mUsername.mLen); mAuthority.mLen -= mUsername.mLen; - ShiftFromHostname(-mUsername.mLen); + ShiftFromHost(-mUsername.mLen); mUsername.mLen = -1; mPassword.mLen = -1; } @@ -807,41 +1108,49 @@ nsStandardURL::SetPreHost(const char *prehost) PRUint32 usernamePos, passwordPos; PRInt32 usernameLen, passwordLen; - rv = mParser->ParseUserInfo(prehost, -1, + rv = mParser->ParseUserInfo(userpass.get(), userpass.Length(), &usernamePos, &usernameLen, &passwordPos, &passwordLen); if (NS_FAILED(rv)) return rv; - // build new prehost in |buf| + // build new user:pass in |buf| nsCAutoString buf; if (usernameLen > 0) { - usernameLen = AppendEscaped(buf, prehost + usernamePos, - usernameLen, esc_Username); + GET_SEGMENT_ENCODER(encoder); + usernameLen = encoder.EncodeSegmentCount(userpass.get(), + URLSegment(usernamePos, usernameLen), + esc_Username|esc_AlwaysCopy, buf); if (passwordLen >= 0) { buf.Append(':'); - passwordLen = AppendEscaped(buf, prehost + passwordPos, - passwordLen, esc_Password); + passwordLen = encoder.EncodeSegmentCount(userpass.get(), + URLSegment(passwordPos, passwordLen), + esc_Password|esc_AlwaysCopy, buf); } if (mUsername.mLen < 0) buf.Append('@'); } + PRUint32 shift = 0; + if (mUsername.mLen < 0) { - // no existing prehost + // no existing user:pass if (!buf.IsEmpty()) { - mSpec.Insert(buf, mHostname.mPos); - mUsername.mPos = mHostname.mPos; - ShiftFromHostname(buf.Length()); + mSpec.Insert(buf, mHost.mPos); + mUsername.mPos = mHost.mPos; + shift = buf.Length(); } } else { - // replace existing prehost - PRUint32 prehostLen = mUsername.mLen; + // replace existing user:pass + PRUint32 userpassLen = mUsername.mLen; if (mPassword.mLen >= 0) - prehostLen += (mPassword.mLen + 1); - mSpec.Replace(mUsername.mPos, prehostLen, buf); - if (buf.Length() != prehostLen) - ShiftFromHostname(buf.Length() - prehostLen); + userpassLen += (mPassword.mLen + 1); + mSpec.Replace(mUsername.mPos, userpassLen, buf); + shift = buf.Length() - userpassLen; + } + if (shift) { + ShiftFromHost(shift); + mAuthority.mLen += shift; } // update positions and lengths mUsername.mLen = usernameLen; @@ -852,52 +1161,56 @@ nsStandardURL::SetPreHost(const char *prehost) } NS_IMETHODIMP -nsStandardURL::SetUsername(const char *username) +nsStandardURL::SetUsername(const nsACString &input) { - LOG(("nsStandardURL::SetUsername [username=%s]\n", username)); + ENSURE_MUTABLE(); + + const nsPromiseFlatCString &username = PromiseFlatCString(input); + + LOG(("nsStandardURL::SetUsername [username=%s]\n", username.get())); if (mURLType == URLTYPE_NO_AUTHORITY) { NS_ERROR("cannot set username on no-auth url"); return NS_ERROR_UNEXPECTED; } - if (!(username && *username)) - return SetPreHost(username); + if (username.IsEmpty()) + return SetUserPass(username); - mFile = 0; - - PRInt32 len = strlen(username); + InvalidateCache(); // escape username if necessary - nsCAutoString escaped; - if (NS_EscapeURLPart(username, len, esc_Username, escaped)) { - username = escaped.get(); - len = escaped.Length(); - } + nsCAutoString buf; + GET_SEGMENT_ENCODER(encoder); + const nsACString &escUsername = + encoder.EncodeSegment(username, esc_Username, buf); PRInt32 shift; if (mUsername.mLen < 0) { - mSpec.Insert(username, mAuthority.mPos, len + 1); - mSpec.SetCharAt('@', mAuthority.mPos + len); mUsername.mPos = mAuthority.mPos; - shift = len + 1; - mAuthority.mLen += shift; + mSpec.Insert(escUsername + NS_LITERAL_CSTRING("@"), mUsername.mPos); + shift = escUsername.Length() + 1; } else - shift = ReplaceSegment(mUsername.mPos, mUsername.mLen, username, len); + shift = ReplaceSegment(mUsername.mPos, mUsername.mLen, escUsername); if (shift) { - mUsername.mLen = len; + mUsername.mLen = escUsername.Length(); + mAuthority.mLen += shift; ShiftFromPassword(shift); } return NS_OK; } NS_IMETHODIMP -nsStandardURL::SetPassword(const char *password) +nsStandardURL::SetPassword(const nsACString &input) { - LOG(("nsStandardURL::SetPassword [password=%s]\n", password)); + ENSURE_MUTABLE(); + + const nsPromiseFlatCString &password = PromiseFlatCString(input); + + LOG(("nsStandardURL::SetPassword [password=%s]\n", password.get())); if (mURLType == URLTYPE_NO_AUTHORITY) { NS_ERROR("cannot set password on no-auth url"); @@ -908,47 +1221,61 @@ nsStandardURL::SetPassword(const char *password) return NS_ERROR_FAILURE; } - mFile = 0; + InvalidateCache(); - if (!password) { + if (password.IsEmpty()) { if (mPassword.mLen >= 0) { + // cut(":password") mSpec.Cut(mPassword.mPos - 1, mPassword.mLen + 1); - ShiftFromHostname(-(mPassword.mLen + 1)); + ShiftFromHost(-(mPassword.mLen + 1)); + mAuthority.mLen -= (mPassword.mLen + 1); mPassword.mLen = -1; } return NS_OK; } - PRInt32 len = strlen(password); - PRInt32 shift = 0; - if (mPassword.mLen < 0) { - mPassword.mPos = mUsername.mPos + mUsername.mLen; - mSpec.Insert(':', mPassword.mPos); - shift = 1; - mPassword.mPos++; - mPassword.mLen = 0; - } - // escape password if necessary - nsCAutoString escaped; - if (NS_EscapeURLPart(password, len, esc_Password, escaped)) { - password = escaped.get(); - len = escaped.Length(); - } + nsCAutoString buf; + GET_SEGMENT_ENCODER(encoder); + const nsACString &escPassword = + encoder.EncodeSegment(password, esc_Password, buf); - shift += ReplaceSegment(mPassword.mPos, mPassword.mLen, password, len); + PRInt32 shift; + + if (mPassword.mLen < 0) { + mPassword.mPos = mUsername.mPos + mUsername.mLen + 1; + mSpec.Insert(NS_LITERAL_CSTRING(":") + escPassword, mPassword.mPos - 1); + shift = escPassword.Length() + 1; + } + else + shift = ReplaceSegment(mPassword.mPos, mPassword.mLen, escPassword); if (shift) { - mPassword.mLen = len; + mPassword.mLen = escPassword.Length(); mAuthority.mLen += shift; - ShiftFromHostname(shift); + ShiftFromHost(shift); } return NS_OK; } NS_IMETHODIMP -nsStandardURL::SetHost(const char *host) +nsStandardURL::SetHostPort(const nsACString &value) { + ENSURE_MUTABLE(); + + // XXX needs implementation!! + NS_NOTREACHED("not implemented"); + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsStandardURL::SetHost(const nsACString &input) +{ + ENSURE_MUTABLE(); + + const nsPromiseFlatCString &flat = PromiseFlatCString(input); + const char *host = flat.get(); + LOG(("nsStandardURL::SetHost [host=%s]\n", host)); if (mURLType == URLTYPE_NO_AUTHORITY) { @@ -956,18 +1283,18 @@ nsStandardURL::SetHost(const char *host) return NS_ERROR_UNEXPECTED; } - mFile = 0; + InvalidateCache(); if (!(host && *host)) { // remove existing hostname - if (mHostname.mLen > 0) { + if (mHost.mLen > 0) { // remove entire authority mSpec.Cut(mAuthority.mPos, mAuthority.mLen); ShiftFromPath(-mAuthority.mLen); mAuthority.mLen = 0; mUsername.mLen = -1; mPassword.mLen = -1; - mHostname.mLen = -1; + mHost.mLen = -1; mPort = -1; } return NS_OK; @@ -976,22 +1303,22 @@ nsStandardURL::SetHost(const char *host) // handle IPv6 unescaped address literal PRInt32 len; nsCAutoString escapedHost; - if (EscapeHost(host, escapedHost)) { + if (EncodeHost(host, escapedHost)) { host = escapedHost.get(); len = escapedHost.Length(); } else len = strlen(host); - if (mHostname.mLen < 0) { - mHostname.mPos = mAuthority.mPos; - mHostname.mLen = 0; + if (mHost.mLen < 0) { + mHost.mPos = mAuthority.mPos; + mHost.mLen = 0; } - PRInt32 shift = ReplaceSegment(mHostname.mPos, mHostname.mLen, host, len); + PRInt32 shift = ReplaceSegment(mHost.mPos, mHost.mLen, host, len); if (shift) { - mHostname.mLen = len; + mHost.mLen = len; mAuthority.mLen += shift; ShiftFromPath(shift); } @@ -1001,24 +1328,26 @@ nsStandardURL::SetHost(const char *host) NS_IMETHODIMP nsStandardURL::SetPort(PRInt32 port) { + ENSURE_MUTABLE(); + LOG(("nsStandardURL::SetPort [port=%d]\n", port)); if ((port == mPort) || (mPort == -1 && port == mDefaultPort)) return NS_OK; - mFile = 0; + InvalidateCache(); if (mPort == -1) { // need to insert the port number in the URL spec nsCAutoString buf; buf.Assign(':'); buf.AppendInt(port); - mSpec.Insert(buf, mHostname.mPos + mHostname.mLen); + mSpec.Insert(buf, mHost.mPos + mHost.mLen); ShiftFromPath(buf.Length()); } else if (port == -1) { // need to remove the port number from the URL spec - PRUint32 start = mHostname.mPos + mHostname.mLen; + PRUint32 start = mHost.mPos + mHost.mLen; mSpec.Cut(start, mPath.mPos - start); ShiftFromPath(start - mPath.mPos); } @@ -1026,7 +1355,7 @@ nsStandardURL::SetPort(PRInt32 port) // need to replace the existing port nsCAutoString buf; buf.AppendInt(port); - PRUint32 start = mHostname.mPos + mHostname.mLen + 1; + PRUint32 start = mHost.mPos + mHost.mLen + 1; PRUint32 length = mPath.mPos - start; mSpec.Replace(start, length, buf); if (buf.Length() != length) @@ -1038,28 +1367,32 @@ nsStandardURL::SetPort(PRInt32 port) } NS_IMETHODIMP -nsStandardURL::SetPath(const char *path) +nsStandardURL::SetPath(const nsACString &input) { - LOG(("nsStandardURL::SetPath [path=%s]\n", path)); + ENSURE_MUTABLE(); - mFile = 0; + const nsPromiseFlatCString &path = PromiseFlatCString(input); - if (path && path[0]) { + LOG(("nsStandardURL::SetPath [path=%s]\n", path.get())); + + InvalidateCache(); + + if (!path.IsEmpty()) { nsCAutoString spec; spec.Assign(mSpec.get(), mPath.mPos); - if (path[0] != '/') + if (path.First() != '/') spec.Append('/'); spec.Append(path); - return SetSpec(spec.get()); + return SetSpec(spec); } else if (mPath.mLen > 1) { mSpec.Cut(mPath.mPos + 1, mPath.mLen - 1); // these contain only a '/' mPath.mLen = 1; mDirectory.mLen = 1; - mFilePath.mLen = 1; + mFilepath.mLen = 1; // these are no longer defined mBasename.mLen = -1; mExtension.mLen = -1; @@ -1088,7 +1421,7 @@ nsStandardURL::Equals(nsIURI *unknownOther, PRBool *result) SegmentIs(mDirectory, other->mSpec.get(), other->mDirectory) && SegmentIs(mBasename, other->mSpec.get(), other->mBasename) && SegmentIs(mExtension, other->mSpec.get(), other->mExtension) && - SegmentIs(mHostname, other->mSpec.get(), other->mHostname) && + HostsAreEquivalent(other) && SegmentIs(mQuery, other->mSpec.get(), other->mQuery) && SegmentIs(mRef, other->mSpec.get(), other->mRef) && SegmentIs(mUsername, other->mSpec.get(), other->mUsername) && @@ -1125,31 +1458,41 @@ nsStandardURL::Clone(nsIURI **result) clone->mAuthority = mAuthority; clone->mUsername = mUsername; clone->mPassword = mPassword; - clone->mHostname = mHostname; + clone->mHost = mHost; clone->mPath = mPath; - clone->mFilePath = mFilePath; + clone->mFilepath = mFilepath; clone->mDirectory = mDirectory; clone->mBasename = mBasename; clone->mExtension = mExtension; clone->mParam = mParam; clone->mQuery = mQuery; clone->mRef = mRef; + clone->mOriginCharset = mOriginCharset; + clone->mURLType = mURLType; clone->mParser = mParser; clone->mFile = mFile; + clone->mHostA = mHostA ? nsCRT::strdup(mHostA) : nsnull; + clone->mMutable = PR_TRUE; + clone->mHostEncoding = mHostEncoding; + clone->mSpecEncoding = mSpecEncoding; NS_ADDREF(*result = clone); return NS_OK; } NS_IMETHODIMP -nsStandardURL::Resolve(const char *relpath, char **result) +nsStandardURL::Resolve(const nsACString &in, nsACString &out) { + const nsPromiseFlatCString &flat = PromiseFlatCString(in); + const char *relpath = flat.get(); + + // XXX hack hack hack + char *p = nsnull; + char **result = &p; + LOG(("nsStandardURL::Resolve [this=%p spec=%s relpath=%s]\n", this, mSpec.get(), relpath)); - NS_ENSURE_ARG_POINTER(relpath); - NS_ENSURE_ARG_POINTER(result); - NS_ASSERTION(gNoAuthParser, "no parser: unitialized"); // NOTE: there is no need for this function to produce normalized @@ -1167,7 +1510,7 @@ nsStandardURL::Resolve(const char *relpath, char **result) // relative urls should never contain a host, so we always want to use // the noauth url parser. - rv = gNoAuthParser->ParseURL(relpath, -1, + rv = gNoAuthParser->ParseURL(relpath, flat.Length(), &scheme.mPos, &scheme.mLen, nsnull, nsnull, nsnull, nsnull); @@ -1228,6 +1571,9 @@ nsStandardURL::Resolve(const char *relpath, char **result) CoalesceDirsRel(resultPath); } } + // XXX avoid extra copy + out = *result; + free(*result); return NS_OK; } @@ -1235,84 +1581,84 @@ nsStandardURL::Resolve(const char *relpath, char **result) // nsStandardURL::nsIURL //---------------------------------------------------------------------------- +// result may contain unescaped UTF-8 characters NS_IMETHODIMP -nsStandardURL::GetFilePath(char **result) +nsStandardURL::GetFilePath(nsACString &result) { - return NewSubstring(mFilePath, result); + result = Filepath(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetParam(nsACString &result) +{ + result = Param(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetQuery(nsACString &result) +{ + result = Query(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetRef(nsACString &result) +{ + result = Ref(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetDirectory(nsACString &result) +{ + result = Directory(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetFileName(nsACString &result) +{ + result = Filename(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetFileBaseName(nsACString &result) +{ + result = Basename(); + return NS_OK; +} + +// result may contain unescaped UTF-8 characters +NS_IMETHODIMP +nsStandardURL::GetFileExtension(nsACString &result) +{ + result = Extension(); + return NS_OK; } NS_IMETHODIMP -nsStandardURL::GetParam(char **result) +nsStandardURL::SetFilePath(const nsACString &input) { - return NewSubstring(mParam, result, PR_TRUE); -} + ENSURE_MUTABLE(); -NS_IMETHODIMP -nsStandardURL::GetQuery(char **result) -{ - return NewSubstring(mQuery, result, PR_TRUE); -} + const nsPromiseFlatCString &flat = PromiseFlatCString(input); + const char *filepath = flat.get(); -NS_IMETHODIMP -nsStandardURL::GetRef(char **result) -{ - return NewSubstring(mRef, result, PR_TRUE); -} - -NS_IMETHODIMP -nsStandardURL::GetDirectory(char **result) -{ - return NewSubstring(mDirectory, result); -} - -NS_IMETHODIMP -nsStandardURL::GetFileName(char **result) -{ - URLSegment filename; - if (mBasename.mLen >= 0) { - if (mExtension.mLen >= 0) { - filename.mPos = mBasename.mPos; - filename.mLen = mExtension.mPos + mExtension.mLen - mBasename.mPos; - } - else { - filename.mPos = mBasename.mPos; - filename.mLen = mBasename.mLen; - } - } - else if (mExtension.mLen >= 0) { - filename.mPos = mExtension.mPos - 1; - filename.mLen = mExtension.mLen + 1; - } - return NewSubstring(filename, result); -} - -NS_IMETHODIMP -nsStandardURL::GetFileBaseName(char **result) -{ - return NewSubstring(mBasename, result, PR_TRUE); -} - -NS_IMETHODIMP -nsStandardURL::GetFileExtension(char **result) -{ - return NewSubstring(mExtension, result, PR_TRUE); -} - -NS_IMETHODIMP -nsStandardURL::GetEscapedQuery(char **result) -{ - return NewSubstring(mQuery, result); -} - -NS_IMETHODIMP -nsStandardURL::SetFilePath(const char *filepath) -{ LOG(("nsStandardURL::SetFilePath [filepath=%s]\n", filepath)); // if there isn't a filepath, then there can't be anything // after the path either. this url is likely uninitialized. - if (mFilePath.mLen < 0) - return SetPath(filepath); + if (mFilepath.mLen < 0) + return SetPath(flat); if (filepath && *filepath) { nsCAutoString spec; @@ -1333,34 +1679,39 @@ nsStandardURL::SetFilePath(const char *filepath) if (filepath[dirPos] != '/') spec.Append('/'); - // append filepath components + GET_SEGMENT_ENCODER(encoder); + + // append encoded filepath components if (dirLen > 0) - AppendEscaped(spec, filepath + dirPos, dirLen, esc_Directory); + encoder.EncodeSegment(Substring(filepath + dirPos, filepath + dirLen), + esc_Directory|esc_AlwaysCopy, spec); if (baseLen > 0) - AppendEscaped(spec, filepath + basePos, baseLen, esc_FileBaseName); + encoder.EncodeSegment(Substring(filepath + basePos, filepath + baseLen), + esc_FileBaseName|esc_AlwaysCopy, spec); if (extLen >= 0) { spec.Append('.'); if (extLen > 0) - AppendEscaped(spec, filepath + extPos, extLen, esc_FileExtension); + encoder.EncodeSegment(Substring(filepath + extPos, filepath + extLen), + esc_FileExtension|esc_AlwaysCopy, spec); } // compute the ending position of the current filepath - if (mFilePath.mLen >= 0) { - PRUint32 end = mFilePath.mPos + mFilePath.mLen; + if (mFilepath.mLen >= 0) { + PRUint32 end = mFilepath.mPos + mFilepath.mLen; if (mSpec.Length() > end) spec.Append(mSpec.get() + end, mSpec.Length() - end); } - return SetSpec(spec.get()); + return SetSpec(spec); } else if (mPath.mLen > 1) { - mSpec.Cut(mPath.mPos + 1, mFilePath.mLen - 1); + mSpec.Cut(mPath.mPos + 1, mFilepath.mLen - 1); // left shift param, query, and ref - ShiftFromParam(1 - mFilePath.mLen); + ShiftFromParam(1 - mFilepath.mLen); // these contain only a '/' mPath.mLen = 1; mDirectory.mLen = 1; - mFilePath.mLen = 1; + mFilepath.mLen = 1; // these are no longer defined mBasename.mLen = -1; mExtension.mLen = -1; @@ -1369,25 +1720,28 @@ nsStandardURL::SetFilePath(const char *filepath) } NS_IMETHODIMP -nsStandardURL::SetParam(const char *param) +nsStandardURL::SetParam(const nsACString &input) { - LOG(("nsStandardURL::SetParam [param=%s]\n", param)); - NS_NOTYETIMPLEMENTED(""); return NS_ERROR_NOT_IMPLEMENTED; } NS_IMETHODIMP -nsStandardURL::SetQuery(const char *query) +nsStandardURL::SetQuery(const nsACString &input) { + ENSURE_MUTABLE(); + + const nsPromiseFlatCString &flat = PromiseFlatCString(input); + const char *query = flat.get(); + LOG(("nsStandardURL::SetQuery [query=%s]\n", query)); if (mPath.mLen < 0) - return SetPath(query); + return SetPath(flat); - mFile = 0; + InvalidateCache(); - if (!query) { + if (!query || !*query) { // remove existing query if (mQuery.mLen >= 0) { // remove query and leading '?' @@ -1419,11 +1773,13 @@ nsStandardURL::SetQuery(const char *query) mRef.mPos++; } - // escape query if necessary - nsCAutoString escaped; - if (NS_EscapeURLPart(query, queryLen, esc_Query, escaped)) { - query = escaped.get(); - queryLen = escaped.Length(); + // encode query if necessary + nsCAutoString buf; + GET_SEGMENT_ENCODER(encoder); + encoder.EncodeSegmentCount(query, URLSegment(0, queryLen), esc_Query, buf); + if (!buf.IsEmpty()) { + query = buf.get(); + queryLen = buf.Length(); } PRInt32 shift = ReplaceSegment(mQuery.mPos, mQuery.mLen, query, queryLen); @@ -1437,16 +1793,21 @@ nsStandardURL::SetQuery(const char *query) } NS_IMETHODIMP -nsStandardURL::SetRef(const char *ref) +nsStandardURL::SetRef(const nsACString &input) { + ENSURE_MUTABLE(); + + const nsPromiseFlatCString &flat = PromiseFlatCString(input); + const char *ref = flat.get(); + LOG(("nsStandardURL::SetRef [ref=%s]\n", ref)); if (mPath.mLen < 0) - return SetPath(ref); + return SetPath(flat); - mFile = 0; + InvalidateCache(); - if (!ref) { + if (!ref || !*ref) { // remove existing ref if (mRef.mLen >= 0) { // remove ref and leading '#' @@ -1470,11 +1831,13 @@ nsStandardURL::SetRef(const char *ref) mRef.mLen = 0; } - // escape ref if necessary - nsCAutoString escaped; - if (NS_EscapeURLPart(ref, refLen, esc_Ref, escaped)) { - ref = escaped.get(); - refLen = escaped.Length(); + // encode ref if necessary + nsCAutoString buf; + GET_SEGMENT_ENCODER(encoder); + encoder.EncodeSegmentCount(ref, URLSegment(0, refLen), esc_Ref, buf); + if (!buf.IsEmpty()) { + ref = buf.get(); + refLen = buf.Length(); } ReplaceSegment(mRef.mPos, mRef.mLen, ref, refLen); @@ -1484,21 +1847,24 @@ nsStandardURL::SetRef(const char *ref) } NS_IMETHODIMP -nsStandardURL::SetDirectory(const char *directory) +nsStandardURL::SetDirectory(const nsACString &input) { - LOG(("nsStandardURL::SetDirectory [directory=%s]\n", directory)); - NS_NOTYETIMPLEMENTED(""); return NS_ERROR_NOT_IMPLEMENTED; } NS_IMETHODIMP -nsStandardURL::SetFileName(const char *filename) +nsStandardURL::SetFileName(const nsACString &input) { + ENSURE_MUTABLE(); + + const nsPromiseFlatCString &flat = PromiseFlatCString(input); + const char *filename = flat.get(); + LOG(("nsStandardURL::SetFileName [filename=%s]\n", filename)); if (mPath.mLen < 0) - return SetPath(filename); + return SetPath(flat); PRInt32 shift = 0; @@ -1537,12 +1903,15 @@ nsStandardURL::SetFileName(const char *filename) } else { nsCAutoString newFilename; - basename.mLen = AppendEscaped(newFilename, filename + basename.mPos, - basename.mLen, esc_FileBaseName); + GET_SEGMENT_ENCODER(encoder); + basename.mLen = encoder.EncodeSegmentCount(filename, basename, + esc_FileBaseName|esc_AlwaysCopy, + newFilename); if (extension.mLen >= 0) { newFilename.Append('.'); - extension.mLen = AppendEscaped(newFilename, filename + extension.mPos, - extension.mLen, esc_FileExtension); + extension.mLen = encoder.EncodeSegmentCount(filename, extension, + esc_FileExtension|esc_AlwaysCopy, + newFilename); } if (mBasename.mLen < 0) { @@ -1568,26 +1937,22 @@ nsStandardURL::SetFileName(const char *filename) } if (shift) { ShiftFromParam(shift); - mFilePath.mLen += shift; + mFilepath.mLen += shift; mPath.mLen += shift; } return NS_OK; } NS_IMETHODIMP -nsStandardURL::SetFileBaseName(const char *basename) +nsStandardURL::SetFileBaseName(const nsACString &input) { - LOG(("nsStandardURL::SetFileBaseName [basename=%s]\n", basename)); - NS_NOTYETIMPLEMENTED(""); return NS_ERROR_NOT_IMPLEMENTED; } NS_IMETHODIMP -nsStandardURL::SetFileExtension(const char *extension) +nsStandardURL::SetFileExtension(const nsACString &input) { - LOG(("nsStandardURL::SetFileExtension [extension=%s]\n", extension)); - NS_NOTYETIMPLEMENTED(""); return NS_ERROR_NOT_IMPLEMENTED; } @@ -1619,7 +1984,7 @@ nsStandardURL::GetFile(nsIFile **result) nsCOMPtr localFile(do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv)); if (NS_FAILED(rv)) return rv; - rv = NS_InitFileFromURLSpec(localFile, mSpec.get()); + rv = NS_InitFileFromURLSpec(localFile, mSpec); if (NS_FAILED(rv)) return rv; #if defined(PR_LOGGING) @@ -1637,18 +2002,21 @@ nsStandardURL::GetFile(nsIFile **result) NS_IMETHODIMP nsStandardURL::SetFile(nsIFile *file) { + ENSURE_MUTABLE(); + NS_PRECONDITION(file, "null pointer"); nsresult rv; - nsXPIDLCString url; + nsCAutoString url; - rv = NS_GetURLSpecFromFile(file, getter_Copies(url)); + rv = NS_GetURLSpecFromFile(file, url); if (NS_FAILED(rv)) return rv; rv = SetSpec(url); // must clone |file| since its value is not guaranteed to remain constant if (NS_SUCCEEDED(rv)) { + InvalidateCache(); if (NS_FAILED(file->Clone(getter_AddRefs(mFile)))) { NS_WARNING("nsIFile::Clone failed"); // failure to clone is not fatal (GetFile will generate mFile) @@ -1665,10 +2033,13 @@ nsStandardURL::SetFile(nsIFile *file) NS_IMETHODIMP nsStandardURL::Init(PRUint32 urlType, PRInt32 defaultPort, - const char *spec, + const nsACString &spec, + const char *charset, nsIURI *baseURI) { - mFile = 0; + ENSURE_MUTABLE(); + + InvalidateCache(); switch (urlType) { case URLTYPE_STANDARD: @@ -1686,22 +2057,46 @@ nsStandardURL::Init(PRUint32 urlType, } mDefaultPort = defaultPort; - if (!spec) { + if (charset == nsnull || *charset == '\0') { + mOriginCharset.Truncate(); + // check if baseURI provides an origin charset and use that. + if (baseURI) + baseURI->GetOriginCharset(mOriginCharset); + } + else + mOriginCharset = charset; + + // an empty charset implies UTF-8 + if (mOriginCharset.EqualsIgnoreCase("UTF-8")) + mOriginCharset.Truncate(); + + if (spec.IsEmpty()) { Clear(); return NS_OK; } - nsXPIDLCString buf; - const char *resolvedSpec; - if (baseURI) { - nsresult rv = baseURI->Resolve(spec, getter_Copies(buf)); - if (NS_FAILED(rv)) return rv; - resolvedSpec = buf.get(); - } - else - resolvedSpec = spec; + if (!baseURI) + return SetSpec(spec); - return SetSpec(resolvedSpec); + nsCAutoString buf; + nsresult rv = baseURI->Resolve(spec, buf); + if (NS_FAILED(rv)) return rv; + + return SetSpec(buf); +} + +NS_IMETHODIMP +nsStandardURL::GetMutable(PRBool *value) +{ + *value = mMutable; + return NS_OK; +} + +NS_IMETHODIMP +nsStandardURL::SetMutable(PRBool value) +{ + mMutable = value; + return NS_OK; } //---------------------------------------------------------------------------- @@ -1712,6 +2107,7 @@ NS_IMETHODIMP nsStandardURL::Read(nsIObjectInputStream *stream) { nsresult rv; + nsXPIDLCString buf; rv = stream->Read32(&mURLType); if (NS_FAILED(rv)) return rv; @@ -1736,10 +2132,9 @@ nsStandardURL::Read(nsIObjectInputStream *stream) rv = stream->Read32((PRUint32 *) &mDefaultPort); if (NS_FAILED(rv)) return rv; - nsXPIDLCString spec; - rv = NS_ReadOptionalStringZ(stream, getter_Copies(spec)); + rv = NS_ReadOptionalStringZ(stream, getter_Copies(buf)); if (NS_FAILED(rv)) return rv; - mSpec = spec; + mSpec = buf; rv = ReadSegment(stream, mScheme); if (NS_FAILED(rv)) return rv; @@ -1753,13 +2148,13 @@ nsStandardURL::Read(nsIObjectInputStream *stream) rv = ReadSegment(stream, mPassword); if (NS_FAILED(rv)) return rv; - rv = ReadSegment(stream, mHostname); + rv = ReadSegment(stream, mHost); if (NS_FAILED(rv)) return rv; rv = ReadSegment(stream, mPath); if (NS_FAILED(rv)) return rv; - rv = ReadSegment(stream, mFilePath); + rv = ReadSegment(stream, mFilepath); if (NS_FAILED(rv)) return rv; rv = ReadSegment(stream, mDirectory); @@ -1780,6 +2175,10 @@ nsStandardURL::Read(nsIObjectInputStream *stream) rv = ReadSegment(stream, mRef); if (NS_FAILED(rv)) return rv; + rv = NS_ReadOptionalStringZ(stream, getter_Copies(buf)); + if (NS_FAILED(rv)) return rv; + mOriginCharset = buf; + return NS_OK; } @@ -1812,13 +2211,13 @@ nsStandardURL::Write(nsIObjectOutputStream *stream) rv = WriteSegment(stream, mPassword); if (NS_FAILED(rv)) return rv; - rv = WriteSegment(stream, mHostname); + rv = WriteSegment(stream, mHost); if (NS_FAILED(rv)) return rv; rv = WriteSegment(stream, mPath); if (NS_FAILED(rv)) return rv; - rv = WriteSegment(stream, mFilePath); + rv = WriteSegment(stream, mFilepath); if (NS_FAILED(rv)) return rv; rv = WriteSegment(stream, mDirectory); @@ -1839,5 +2238,8 @@ nsStandardURL::Write(nsIObjectOutputStream *stream) rv = WriteSegment(stream, mRef); if (NS_FAILED(rv)) return rv; + rv = NS_WriteOptionalStringZ(stream, mOriginCharset.get()); + if (NS_FAILED(rv)) return rv; + return NS_OK; } diff --git a/mozilla/netwerk/base/src/nsStandardURL.h b/mozilla/netwerk/base/src/nsStandardURL.h index 94aaf082a0e..cb43888cff5 100644 --- a/mozilla/netwerk/base/src/nsStandardURL.h +++ b/mozilla/netwerk/base/src/nsStandardURL.h @@ -39,18 +39,22 @@ #ifndef nsStandardURL_h__ #define nsStandardURL_h__ -#include "nsISerializable.h" -#include "nsIFileChannel.h" -#include "nsIFile.h" -#include "nsIURLParser.h" +#include "nsString.h" #include "nsDependentString.h" #include "nsDependentSubstring.h" -#include "nsXPIDLString.h" -#include "nsString.h" +#include "nsISerializable.h" +#include "nsIFileURL.h" +#include "nsIStandardURL.h" +#include "nsIFile.h" +#include "nsIURLParser.h" +#include "nsIUnicodeEncoder.h" +#include "nsIObserver.h" #include "nsCOMPtr.h" class nsIBinaryInputStream; class nsIBinaryOutputStream; +class nsIIDNService; +class nsICharsetConverterManager2; //----------------------------------------------------------------------------- // standard URL implementation @@ -75,7 +79,9 @@ public: static void ShutdownGlobalObjects(); private: + // // location and length of an url segment relative to mSpec + // struct URLSegment { PRUint32 mPos; @@ -86,61 +92,123 @@ private: void Reset() { mPos = 0; mLen = -1; } }; + // + // Pref observer + // + class nsPrefObserver : public nsIObserver + { + public: + NS_DECL_ISUPPORTS + NS_DECL_NSIOBSERVER + }; + friend class nsPrefObserver; + + // + // URL segment encoder : performs charset conversion and URL escaping. + // + class nsSegmentEncoder + { + public: + nsSegmentEncoder(const char *charset); + + // Encode the given segment if necessary, and return the length of + // the encoded segment. The encoded segment is appended to |buf| + // if and only if encoding is required. + PRInt32 EncodeSegmentCount(const char *str, + const URLSegment &segment, + PRInt16 mask, + nsAFlatCString &buf); + + // Encode the given string if necessary, and return a reference to + // the encoded string. Returns a reference to |buf| if encoding + // is required. Otherwise, a reference to |str| is returned. + const nsACString &EncodeSegment(const nsASingleFragmentCString &str, + PRInt16 mask, + nsAFlatCString &buf); + private: + nsCOMPtr mEncoder; + }; + friend class nsSegmentEncoder; + PRInt32 Port() { return mPort == -1 ? mDefaultPort : mPort; } + void Clear(); - PRInt32 EscapeSegment(const char *str, const URLSegment &, PRInt16 mask, nsCString &result); - PRBool EscapeHost(const char *host, nsCString &result); - PRBool FilterString(const char *str, nsCString &result); + void InvalidateCache(PRBool invalidateCachedFile = PR_TRUE); + + PRBool EncodeHost(const char *host, nsCString &result); void CoalescePath(char *path); + PRUint32 AppendSegmentToBuf(char *, PRUint32, const char *, URLSegment &, const nsCString *esc=nsnull); PRUint32 AppendToBuf(char *, PRUint32, const char *, PRUint32); + nsresult BuildNormalizedSpec(const char *spec); + + PRBool HostsAreEquivalent(nsStandardURL *other); + PRBool SegmentIs(const URLSegment &s1, const char *val); PRBool SegmentIs(const URLSegment &s1, const char *val, const URLSegment &s2); + PRInt32 ReplaceSegment(PRUint32 pos, PRUint32 len, const char *val, PRUint32 valLen); + PRInt32 ReplaceSegment(PRUint32 pos, PRUint32 len, const nsACString &val); + nsresult ParseURL(const char *spec); nsresult ParsePath(const char *spec, PRUint32 pathPos, PRInt32 pathLen = -1); - nsresult NewSubstring(PRUint32 pos, PRInt32 len, char **result, PRBool unescaped=PR_FALSE); - nsresult NewSubstring(const URLSegment &s, char **result, PRBool unescaped=PR_FALSE) - { - return NewSubstring(s.mPos, s.mLen, result, unescaped); - } - char *AppendToSubstring(PRUint32 pos, PRInt32 len, const char *tail, PRInt32 tailLen = -1); + // dependent substring helpers + const nsDependentSingleFragmentCSubstring Segment(PRUint32 pos, PRInt32 len); // see below + const nsDependentSingleFragmentCSubstring Segment(const URLSegment &s) { return Segment(s.mPos, s.mLen); } + + // dependent substring getters + const nsDependentSingleFragmentCSubstring Prepath(); // see below + const nsDependentSingleFragmentCSubstring Scheme() { return Segment(mScheme); } + const nsDependentSingleFragmentCSubstring Userpass(PRBool includeDelim = PR_FALSE); // see below + const nsDependentSingleFragmentCSubstring Username() { return Segment(mUsername); } + const nsDependentSingleFragmentCSubstring Password() { return Segment(mPassword); } + const nsDependentSingleFragmentCSubstring Hostport(); // see below + const nsDependentSingleFragmentCSubstring Host(); // see below + const nsDependentSingleFragmentCSubstring Path() { return Segment(mPath); } + const nsDependentSingleFragmentCSubstring Filepath() { return Segment(mFilepath); } + const nsDependentSingleFragmentCSubstring Directory() { return Segment(mDirectory); } + const nsDependentSingleFragmentCSubstring Filename(); // see below + const nsDependentSingleFragmentCSubstring Basename() { return Segment(mBasename); } + const nsDependentSingleFragmentCSubstring Extension() { return Segment(mExtension); } + const nsDependentSingleFragmentCSubstring Param() { return Segment(mParam); } + const nsDependentSingleFragmentCSubstring Query() { return Segment(mQuery); } + const nsDependentSingleFragmentCSubstring Ref() { return Segment(mRef); } + // shift the URLSegments to the right by diff - void ShiftFromAuthority(PRInt32 diff) { mAuthority.mPos += diff; ShiftFromUsername(diff); } - void ShiftFromUsername(PRInt32 diff) { mUsername.mPos += diff; ShiftFromPassword(diff); } - void ShiftFromPassword(PRInt32 diff) { mPassword.mPos += diff; ShiftFromHostname(diff); } - void ShiftFromHostname(PRInt32 diff) { mHostname.mPos += diff; ShiftFromPath(diff); } - void ShiftFromPath(PRInt32 diff) { mPath.mPos += diff; ShiftFromFilePath(diff); } - void ShiftFromFilePath(PRInt32 diff) { mFilePath.mPos += diff; ShiftFromDirectory(diff); } - void ShiftFromDirectory(PRInt32 diff) { mDirectory.mPos += diff; ShiftFromBasename(diff); } - void ShiftFromBasename(PRInt32 diff) { mBasename.mPos += diff; ShiftFromExtension(diff); } - void ShiftFromExtension(PRInt32 diff) { mExtension.mPos += diff; ShiftFromParam(diff); } - void ShiftFromParam(PRInt32 diff) { mParam.mPos += diff; ShiftFromQuery(diff); } - void ShiftFromQuery(PRInt32 diff) { mQuery.mPos += diff; ShiftFromRef(diff); } - void ShiftFromRef(PRInt32 diff) { mRef.mPos += diff; } + void ShiftFromAuthority(PRInt32 diff) { mAuthority.mPos += diff; ShiftFromUsername(diff); } + void ShiftFromUsername(PRInt32 diff) { mUsername.mPos += diff; ShiftFromPassword(diff); } + void ShiftFromPassword(PRInt32 diff) { mPassword.mPos += diff; ShiftFromHost(diff); } + void ShiftFromHost(PRInt32 diff) { mHost.mPos += diff; ShiftFromPath(diff); } + void ShiftFromPath(PRInt32 diff) { mPath.mPos += diff; ShiftFromFilepath(diff); } + void ShiftFromFilepath(PRInt32 diff) { mFilepath.mPos += diff; ShiftFromDirectory(diff); } + void ShiftFromDirectory(PRInt32 diff) { mDirectory.mPos += diff; ShiftFromBasename(diff); } + void ShiftFromBasename(PRInt32 diff) { mBasename.mPos += diff; ShiftFromExtension(diff); } + void ShiftFromExtension(PRInt32 diff) { mExtension.mPos += diff; ShiftFromParam(diff); } + void ShiftFromParam(PRInt32 diff) { mParam.mPos += diff; ShiftFromQuery(diff); } + void ShiftFromQuery(PRInt32 diff) { mQuery.mPos += diff; ShiftFromRef(diff); } + void ShiftFromRef(PRInt32 diff) { mRef.mPos += diff; } // fastload helper functions nsresult ReadSegment(nsIBinaryInputStream *, URLSegment &); nsresult WriteSegment(nsIBinaryOutputStream *, const URLSegment &); - // mSpec contains the normalized version of the URL spec. + // mSpec contains the normalized version of the URL spec (UTF-8 encoded). nsCString mSpec; - - PRInt32 mDefaultPort; - PRInt32 mPort; + PRInt32 mDefaultPort; + PRInt32 mPort; // url parts (relative to mSpec) URLSegment mScheme; URLSegment mAuthority; URLSegment mUsername; URLSegment mPassword; - URLSegment mHostname; + URLSegment mHost; URLSegment mPath; - URLSegment mFilePath; + URLSegment mFilepath; URLSegment mDirectory; URLSegment mBasename; URLSegment mExtension; @@ -148,16 +216,31 @@ private: URLSegment mQuery; URLSegment mRef; - PRUint32 mURLType; - nsCOMPtr mParser; - nsCOMPtr mFile; // cached result for nsIFileURL::GetFile + nsCString mOriginCharset; + PRUint32 mURLType; + nsCOMPtr mParser; + nsCOMPtr mFile; // cached result for nsIFileURL::GetFile + char *mHostA; // cached result for nsIURI::GetHostA + + enum nsEncodingType { + eEncoding_Unknown, + eEncoding_ASCII, + eEncoding_UTF8 + }; + nsEncodingType mHostEncoding; + nsEncodingType mSpecEncoding; + + PRPackedBool mMutable; // nsIStandardURL::mutable // global objects. don't use COMPtr as its destructor will cause a // coredump if we leak it. - static nsIURLParser *gNoAuthParser; - static nsIURLParser *gAuthParser; - static nsIURLParser *gStdParser; - static PRBool gInitialized; + static nsIURLParser *gNoAuthParser; + static nsIURLParser *gAuthParser; + static nsIURLParser *gStdParser; + static nsIIDNService *gIDNService; + static nsICharsetConverterManager2 *gCharsetMgr; + static PRBool gInitialized; + static PRBool gEscapeUTF8; }; #define NS_THIS_STANDARDURL_IMPL_CID \ @@ -168,4 +251,83 @@ private: {0xaf, 0x5a, 0x79, 0x59, 0x67, 0x70, 0xf5, 0xd7} \ } +//----------------------------------------------------------------------------- +// Dependent substring getters +//----------------------------------------------------------------------------- + +inline const nsDependentSingleFragmentCSubstring +nsStandardURL::Segment(PRUint32 pos, PRInt32 len) +{ + if (len < 0) { + pos = 0; + len = 0; + } + return Substring(mSpec, pos, PRUint32(len)); +} + +inline const nsDependentSingleFragmentCSubstring +nsStandardURL::Prepath() +{ + PRUint32 len = 0; + if (mAuthority.mLen >= 0) + len = mAuthority.mPos + mAuthority.mLen; + return Substring(mSpec, 0, len); +} + +inline const nsDependentSingleFragmentCSubstring +nsStandardURL::Userpass(int includeDelim) +{ + PRUint32 pos=0, len=0; + // if there is no username, then there can be no password + if (mUsername.mLen > 0) { + pos = mUsername.mPos; + len = mUsername.mLen; + if (mPassword.mLen >= 0) + len += (mPassword.mLen + 1); + if (includeDelim) + len++; + } + return Substring(mSpec, pos, len); +} + +inline const nsDependentSingleFragmentCSubstring +nsStandardURL::Hostport() +{ + PRUint32 pos=0, len=0; + if (mAuthority.mLen > 0) { + pos = mHost.mPos; + len = mAuthority.mPos + mAuthority.mLen - pos; + } + return Substring(mSpec, pos, len); +} + +inline const nsDependentSingleFragmentCSubstring +nsStandardURL::Host() +{ + PRUint32 pos=0, len=0; + if (mHost.mLen > 0) { + pos = mHost.mPos; + len = mHost.mLen; + if (mSpec.CharAt(pos) == '[') { + pos++; + len -= 2; + } + } + return Substring(mSpec, pos, len); +} + +inline const nsDependentSingleFragmentCSubstring +nsStandardURL::Filename() +{ + PRUint32 pos=0, len=0; + // if there is no basename, then there can be no extension + if (mBasename.mLen > 0) { + pos = mBasename.mPos; + len = mBasename.mLen; + if (mExtension.mLen >= 0) + len += (mExtension.mLen + 1); + } + return Substring(mSpec, pos, len); +} + #endif // nsStandardURL_h__ diff --git a/mozilla/netwerk/base/src/nsStreamLoader.cpp b/mozilla/netwerk/base/src/nsStreamLoader.cpp index c9cbc6d62bc..51450b38ad9 100644 --- a/mozilla/netwerk/base/src/nsStreamLoader.cpp +++ b/mozilla/netwerk/base/src/nsStreamLoader.cpp @@ -59,8 +59,8 @@ nsStreamLoader::Init(nsIURI* aURL, nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), aURL, nsnull, aGroup, - notificationCallbacks, loadAttributes); + rv = NS_NewChannel(getter_AddRefs(channel), aURL, nsnull, aGroup, + notificationCallbacks, loadAttributes); if (NS_FAILED(rv)) return rv; if (referrer) { diff --git a/mozilla/netwerk/base/src/nsURIChecker.cpp b/mozilla/netwerk/base/src/nsURIChecker.cpp index 60552d3bd31..65556946bf5 100644 --- a/mozilla/netwerk/base/src/nsURIChecker.cpp +++ b/mozilla/netwerk/base/src/nsURIChecker.cpp @@ -81,7 +81,8 @@ nsURIChecker::SetStatusAndCallBack(nsIRequest* aRequest, nsresult aStatus) // nsIURIChecker methods // NS_IMETHODIMP -nsURIChecker::AsyncCheckURI(const char* aURI, nsIRequestObserver *aObserver, +nsURIChecker::AsyncCheckURI(const nsACString &aURI, + nsIRequestObserver *aObserver, nsISupports* aCtxt, nsLoadFlags aLoadFlags, nsIRequest** aRequestRet) @@ -105,7 +106,7 @@ nsURIChecker::AsyncCheckURI(const char* aURI, nsIRequestObserver *aObserver, // Make the URI nsCOMPtr URI; - rv = ios->NewURI(aURI, 0, getter_AddRefs(URI)); + rv = ios->NewURI(aURI, nsnull, nsnull, getter_AddRefs(URI)); // XXX need charset for i18n URLs if (NS_FAILED(rv)) return rv; // Make a new channel: diff --git a/mozilla/netwerk/base/src/nsURLHelper.cpp b/mozilla/netwerk/base/src/nsURLHelper.cpp index 66b05eaae9d..9cc9ff3344a 100644 --- a/mozilla/netwerk/base/src/nsURLHelper.cpp +++ b/mozilla/netwerk/base/src/nsURLHelper.cpp @@ -42,17 +42,21 @@ #include "nsIIOService.h" #include "nsIURI.h" #include "nsEscape.h" +#include "netCore.h" #if defined(XP_WIN) #include // ::IsDBCSLeadByte need #endif +#if 0 /* extracts first number from a string and assumes that this is the port number*/ PRInt32 -ExtractPortFrom(const char* src) +ExtractPortFrom(const nsACString &src) { // search for digits up to a slash or the string ends - const char* port = src; + const nsPromiseFlatCString flat( PromiseFlatCString(src) ); + const char* port = flat.get(); + PRInt32 returnValue = -1; // skip leading white space @@ -67,8 +71,9 @@ ExtractPortFrom(const char* src) else if (!nsCRT::IsAsciiDigit(c)) return returnValue; } - return (0 < PR_sscanf(src, "%d", &returnValue)) ? returnValue : -1; + return (0 < PR_sscanf(flat.get(), "%d", &returnValue)) ? returnValue : -1; } +#endif /* extract string from other string */ nsresult @@ -286,21 +291,19 @@ ToLowerCase(char *str) } /* Extract URI-Scheme if possible */ -nsresult ExtractURLScheme(const char* inURI, PRUint32 *startPos, - PRUint32 *endPos, char* *scheme) +nsresult ExtractURLScheme(const nsACString &inURI, PRUint32 *startPos, + PRUint32 *endPos, nsACString *scheme) { // search for something up to a colon, and call it the scheme - NS_ENSURE_ARG_POINTER(inURI); - if (scheme) - *scheme = nsnull; - - const char* uri = inURI; + const nsPromiseFlatCString flatURI( PromiseFlatCString(inURI) ); + const char* uri_start = flatURI.get(); + const char* uri = uri_start; // skip leading white space while (nsCRT::IsAsciiSpace(*uri)) uri++; - PRUint32 start = uri - inURI; + PRUint32 start = uri - uri_start; if (startPos) { *startPos = start; } @@ -324,14 +327,8 @@ nsresult ExtractURLScheme(const char* inURI, PRUint32 *startPos, *endPos = start + length + 1; } - if (scheme) { - char* str = (char*)nsMemory::Alloc(length + 1); - if (str == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - memcpy(str, &inURI[start], length); - str[length] = '\0'; - *scheme = str; - } + if (scheme) + scheme->Assign(Substring(inURI, start, length)); return NS_OK; } else diff --git a/mozilla/netwerk/base/src/nsURLHelper.h b/mozilla/netwerk/base/src/nsURLHelper.h index 776ea8dd246..41f6bc1524e 100644 --- a/mozilla/netwerk/base/src/nsURLHelper.h +++ b/mozilla/netwerk/base/src/nsURLHelper.h @@ -44,7 +44,7 @@ #include "nsString.h" /* Get port from string */ -PRInt32 ExtractPortFrom(const char* src); +//PRInt32 ExtractPortFrom(const nsACString &src); /* Extract string out of another */ nsresult ExtractString(char* i_Src, char* *o_Dest, PRUint32 length); @@ -63,10 +63,15 @@ void ToLowerCase(char* str, PRUint32 length); void ToLowerCase(char* str); /* Extract URI-Scheme if possible */ -nsresult ExtractURLScheme(const char* inURI, PRUint32 *startPos, - PRUint32 *endPos, char* *scheme); +nsresult ExtractURLScheme(const nsACString &inURI, PRUint32 *startPos, + PRUint32 *endPos, nsACString *scheme = nsnull); /* check that the given scheme conforms to RFC 2396 */ PRBool IsValidScheme(const char *scheme, PRUint32 schemeLen); +inline PRBool IsValidScheme(const nsAFlatCString &scheme) +{ + return IsValidScheme(scheme.get(), scheme.Length()); +} + #endif diff --git a/mozilla/netwerk/base/src/nsURLParsers.cpp b/mozilla/netwerk/base/src/nsURLParsers.cpp index 9d2571e87bc..83823afa32c 100644 --- a/mozilla/netwerk/base/src/nsURLParsers.cpp +++ b/mozilla/netwerk/base/src/nsURLParsers.cpp @@ -42,6 +42,7 @@ #include "nsIURI.h" #include "prtypes.h" #include "nsString.h" +#include "netCore.h" //---------------------------------------------------------------------------- diff --git a/mozilla/netwerk/macbuild/netwerkIDL.xml b/mozilla/netwerk/macbuild/netwerkIDL.xml index 46bf392031a..d2583910035 100644 --- a/mozilla/netwerk/macbuild/netwerkIDL.xml +++ b/mozilla/netwerk/macbuild/netwerkIDL.xml @@ -437,7 +437,7 @@ MWFTP_Post_hostName MWFTP_Post_username - MWFTP_Post_password0 + MWFTP_Post_password264pj2an64j9222Wp'!˜à␿ÿÙP MWFTP_Post_remoteDir MWFTP_Post_ftp_PathVersion1 MWFTP_Post_ftp_PathType0 @@ -1442,6 +1442,20 @@ Text + + Name + nsIFileURL.idl + MacOS + Text + + + + Name + nsIStandardURL.idl + MacOS + Text + + @@ -1874,6 +1888,16 @@ nsIDirectoryListing.idl MacOS + + Name + nsIFileURL.idl + MacOS + + + Name + nsIStandardURL.idl + MacOS + @@ -2260,7 +2284,7 @@ MWFTP_Post_hostName MWFTP_Post_username - MWFTP_Post_password0 + MWFTP_Post_password264pj2an64j9222Xp'!˜à␿ÿÙP MWFTP_Post_remoteDir MWFTP_Post_ftp_PathVersion1 MWFTP_Post_ftp_PathType0 @@ -3258,6 +3282,20 @@ Text + + Name + nsIFileURL.idl + MacOS + Text + + + + Name + nsIStandardURL.idl + MacOS + Text + + @@ -3685,6 +3723,16 @@ nsIDirectoryListing.idl MacOS + + Name + nsIFileURL.idl + MacOS + + + Name + nsIStandardURL.idl + MacOS + @@ -4058,6 +4106,30 @@ nsIMIMEInputStream.idl MacOS + + headers + Name + nsIFileURL.idl + MacOS + + + headers + Name + nsIStandardURL.idl + MacOS + + + headers + Name + nsIMultiPartChannel.idl + MacOS + + + headers + Name + nsIDirectoryListing.idl + MacOS + mimetype @@ -4225,18 +4297,6 @@ - - headers - Name - nsIMultiPartChannel.idl - MacOS - - - headers - Name - nsIDirectoryListing.idl - MacOS - diff --git a/mozilla/netwerk/mime/src/nsMIMEService.cpp b/mozilla/netwerk/mime/src/nsMIMEService.cpp index 392f2b0a0b8..96450a894a9 100644 --- a/mozilla/netwerk/mime/src/nsMIMEService.cpp +++ b/mozilla/netwerk/mime/src/nsMIMEService.cpp @@ -39,7 +39,7 @@ #include "nsReadableUtils.h" #include "nsMIMEInfoImpl.h" #include "nsIURL.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsCOMPtr.h" #include "nsXPIDLString.h" #include "nsMimeTypes.h" @@ -134,8 +134,8 @@ nsMIMEService::GetTypeFromURI(nsIURI *aURI, char **aContentType) { #ifdef XP_MAC if ( NS_SUCCEEDED( rv ) ) { - nsXPIDLCString fileExt; - url->GetFileExtension(getter_Copies(fileExt)); + nsCAutoString fileExt; + url->GetFileExtension(fileExt); nsresult rv2; nsCOMPtr fileurl = do_QueryInterface( url, &rv2 ); @@ -146,37 +146,32 @@ nsMIMEService::GetTypeFromURI(nsIURI *aURI, char **aContentType) { if ( NS_SUCCEEDED( rv2 ) ) { rv2 = GetTypeFromFile( file, aContentType ); - if( NS_SUCCEEDED ( rv2 ) ) - return rv2; - } + if( NS_SUCCEEDED ( rv2 ) ) + return rv2; + } + } } - } #endif if (NS_SUCCEEDED(rv)) { - nsXPIDLCString ext; - rv = url->GetFileExtension(getter_Copies(ext)); + nsCAutoString ext; + rv = url->GetFileExtension(ext); if (NS_FAILED(rv)) return rv; - rv = GetTypeFromExtension(ext, aContentType); + rv = GetTypeFromExtension(ext.get(), aContentType); return rv; } - nsXPIDLCString cStrSpec; + nsCAutoString specStr; // no url, let's give the raw spec a shot - rv = aURI->GetSpec(getter_Copies(cStrSpec)); + rv = aURI->GetAsciiSpec(specStr); if (NS_FAILED(rv)) return rv; - nsAutoString specStr; specStr.AssignWithConversion(cStrSpec); - // find the file extension (if any) - nsAutoString extStr; + nsCAutoString extStr; PRInt32 extLoc = specStr.RFindChar('.'); if (-1 != extLoc) { specStr.Right(extStr, specStr.Length() - extLoc - 1); - char *ext = ToNewCString(extStr); - if (!ext) return NS_ERROR_OUT_OF_MEMORY; - rv = GetTypeFromExtension(ext, aContentType); - nsMemory::Free(ext); + rv = GetTypeFromExtension(extStr.get(), aContentType); } else return NS_ERROR_FAILURE; diff --git a/mozilla/netwerk/mime/src/nsXMLMIMEDataSource.cpp b/mozilla/netwerk/mime/src/nsXMLMIMEDataSource.cpp index aea54984e90..277d51eb9ce 100644 --- a/mozilla/netwerk/mime/src/nsXMLMIMEDataSource.cpp +++ b/mozilla/netwerk/mime/src/nsXMLMIMEDataSource.cpp @@ -314,7 +314,7 @@ nsXMLMIMEDataSource::Serialize() { // we don't need to worry about notification callbacks nsCOMPtr stream; - rv = transport->OpenOutputStream(0, -1, 0, getter_AddRefs( stream ) ) ; + rv = transport->OpenOutputStream(0, PRUint32(-1), 0, getter_AddRefs( stream ) ) ; if(NS_FAILED(rv)) return rv ; nsCOMPtr enumerator; @@ -732,7 +732,7 @@ nsXMLMIMEDataSource::InitFromFile( nsIFile* aFile ) // we don't need to worry about notification callbacks nsCOMPtr stream; - rv = transport->OpenInputStream(0, -1, 0, getter_AddRefs( stream ) ) ; + rv = transport->OpenInputStream(0, PRUint32(-1), 0, getter_AddRefs( stream ) ) ; if(NS_FAILED(rv)) return rv ; PRUint32 streamLength; diff --git a/mozilla/netwerk/protocol/about/src/nsAboutBloat.cpp b/mozilla/netwerk/protocol/about/src/nsAboutBloat.cpp index bd9ee97416f..22ac13287cb 100644 --- a/mozilla/netwerk/protocol/about/src/nsAboutBloat.cpp +++ b/mozilla/netwerk/protocol/about/src/nsAboutBloat.cpp @@ -60,19 +60,18 @@ NS_IMETHODIMP nsAboutBloat::NewChannel(nsIURI *aURI, nsIChannel **result) { nsresult rv; - nsXPIDLCString path; - rv = aURI->GetPath(getter_Copies(path)); + nsCAutoString path; + rv = aURI->GetPath(path); if (NS_FAILED(rv)) return rv; nsTraceRefcnt::StatisticsType statType = nsTraceRefcnt::ALL_STATS; PRBool clear = PR_FALSE; PRBool leaks = PR_FALSE; - nsCAutoString p(path); - PRInt32 pos = p.Find("?"); + PRInt32 pos = path.Find("?"); if (pos > 0) { nsCAutoString param; - (void)p.Right(param, p.Length() - (pos+1)); + (void)path.Right(param, path.Length() - (pos+1)); if (param.Equals("new")) statType = nsTraceRefcnt::NEW_STATS; else if (param.Equals("clear")) diff --git a/mozilla/netwerk/protocol/about/src/nsAboutCache.cpp b/mozilla/netwerk/protocol/about/src/nsAboutCache.cpp index 8fd889ccadc..9831669cb68 100644 --- a/mozilla/netwerk/protocol/about/src/nsAboutCache.cpp +++ b/mozilla/netwerk/protocol/about/src/nsAboutCache.cpp @@ -317,15 +317,13 @@ nsAboutCache::ParseURI(nsIURI * uri, nsCString &deviceID) deviceID.Truncate(); - nsXPIDLCString path; - rv = uri->GetPath(getter_Copies(path)); + nsCAutoString path; + rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; - nsCAutoString p(path); - - nsReadingIterator start, valueStart, end; - p.BeginReading(start); - p.EndReading(end); + nsACString::const_iterator start, valueStart, end; + path.BeginReading(start); + path.EndReading(end); valueStart = end; if (!FindInReadable(NS_LITERAL_CSTRING("?device="), start, valueStart)) diff --git a/mozilla/netwerk/protocol/about/src/nsAboutCacheEntry.cpp b/mozilla/netwerk/protocol/about/src/nsAboutCacheEntry.cpp index e155edb39f2..879d69e31f2 100644 --- a/mozilla/netwerk/protocol/about/src/nsAboutCacheEntry.cpp +++ b/mozilla/netwerk/protocol/about/src/nsAboutCacheEntry.cpp @@ -129,12 +129,12 @@ nsAboutCacheEntry::OnCacheEntryAvailable(nsICacheEntryDescriptor *descriptor, rv = mStreamChannel->GetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString spec; - rv = uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = uri->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; nsCOMPtr io; - rv = NS_NewInputStreamIO(getter_AddRefs(io), spec, inStr, "text/html", size); + rv = NS_NewInputStreamIO(getter_AddRefs(io), spec.get(), inStr, "text/html", size); nsCOMPtr chan = do_QueryInterface(mStreamChannel, &rv); if (NS_FAILED(rv)) return rv; @@ -514,15 +514,13 @@ nsAboutCacheEntry::ParseURI(nsCString &clientID, PRBool &streamBased, nsCString rv = mStreamChannel->GetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString path; - rv = uri->GetPath(getter_Copies(path)); + nsCAutoString path; + rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; - nsCAutoString p(path); - - nsReadingIterator i1, i2, i3, end; - p.BeginReading(i1); - p.EndReading(end); + nsACString::const_iterator i1, i2, i3, end; + path.BeginReading(i1); + path.EndReading(end); i2 = end; if (!FindInReadable(NS_LITERAL_CSTRING("?client="), i1, i2)) diff --git a/mozilla/netwerk/protocol/about/src/nsAboutProtocolHandler.cpp b/mozilla/netwerk/protocol/about/src/nsAboutProtocolHandler.cpp index 8bf679ff769..645ae558352 100644 --- a/mozilla/netwerk/protocol/about/src/nsAboutProtocolHandler.cpp +++ b/mozilla/netwerk/protocol/about/src/nsAboutProtocolHandler.cpp @@ -90,11 +90,9 @@ nsAboutProtocolHandler::Create(nsISupports *aOuter, REFNSIID aIID, void **aResul // nsIProtocolHandler methods: NS_IMETHODIMP -nsAboutProtocolHandler::GetScheme(char* *result) +nsAboutProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("about"); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = "about"; return NS_OK; } @@ -113,7 +111,9 @@ nsAboutProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsAboutProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsAboutProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, nsIURI **result) { nsresult rv; @@ -126,7 +126,7 @@ nsAboutProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, NS_GET_IID(nsIURI), (void**)&url); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec((char*)aSpec); + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); return rv; @@ -141,17 +141,15 @@ nsAboutProtocolHandler::NewChannel(nsIURI* uri, nsIChannel* *result) { // about:what you ask? nsresult rv; - char* whatStr; - rv = uri->GetPath(&whatStr); + nsCAutoString what; + rv = uri->GetPath(what); if (NS_FAILED(rv)) return rv; // look up a handler to deal with "whatStr" nsCAutoString contractID(NS_ABOUT_MODULE_CONTRACTID_PREFIX); - nsCAutoString what(whatStr); - nsCRT::free(whatStr); // only take up to a question-mark if there is one: - nsReadingIterator begin, end; + nsACString::const_iterator begin, end; what.BeginReading(begin); what.EndReading(end); FindCharInReadable('?', begin, end); // moves begin to first '?' or to end diff --git a/mozilla/netwerk/protocol/about/src/nsAboutRedirector.cpp b/mozilla/netwerk/protocol/about/src/nsAboutRedirector.cpp index 8c0032868c3..f37d5778062 100644 --- a/mozilla/netwerk/protocol/about/src/nsAboutRedirector.cpp +++ b/mozilla/netwerk/protocol/about/src/nsAboutRedirector.cpp @@ -43,6 +43,7 @@ #include "nsCOMPtr.h" #include "nsIURI.h" #include "nsXPIDLString.h" +#include "nsString2.h" #include "plstr.h" #include "nsIScriptSecurityManager.h" @@ -63,8 +64,8 @@ NS_IMETHODIMP nsAboutRedirector::NewChannel(nsIURI *aURI, nsIChannel **result) { NS_ENSURE_ARG(aURI); - nsXPIDLCString path; - (void)aURI->GetPath(getter_Copies(path)); + nsCAutoString path; + (void)aURI->GetPath(path); nsresult rv; nsCOMPtr ioService(do_GetService(kIOServiceCID, &rv)); if (NS_FAILED(rv)) @@ -73,10 +74,11 @@ nsAboutRedirector::NewChannel(nsIURI *aURI, nsIChannel **result) static const char kChromePrefix[] = "chrome:"; for (int i = 0; i< kRedirTotal; i++) { - if (!PL_strcasecmp(path, kRedirMap[i][0])) + if (!PL_strcasecmp(path.get(), kRedirMap[i][0])) { nsCOMPtr tempChannel; - rv = ioService->NewChannel(kRedirMap[i][1], nsnull, getter_AddRefs(tempChannel)); + rv = ioService->NewChannel(nsDependentCString(kRedirMap[i][1]), + nsnull, nsnull, getter_AddRefs(tempChannel)); //-- If we're redirecting to a chrome URL, change the owner of the channel // to keep the page from getting unnecessary privileges. if (NS_SUCCEEDED(rv) && result && diff --git a/mozilla/netwerk/protocol/data/src/nsDataChannel.cpp b/mozilla/netwerk/protocol/data/src/nsDataChannel.cpp index 6e709439138..96d92d2ef23 100644 --- a/mozilla/netwerk/protocol/data/src/nsDataChannel.cpp +++ b/mozilla/netwerk/protocol/data/src/nsDataChannel.cpp @@ -119,12 +119,12 @@ nsDataChannel::ParseData() { NS_ASSERTION(mUrl, "no url in the data channel"); if (!mUrl) return NS_ERROR_NULL_POINTER; - nsXPIDLCString spec; - rv = mUrl->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = mUrl->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; // move past "data:" - char *buffer = PL_strstr((const char*)spec, "data:"); + char *buffer = strstr(spec.get(), "data:"); if (!buffer) { // malfored url return NS_ERROR_MALFORMED_URI; @@ -247,12 +247,10 @@ nsDataChannel::Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult) NS_IMETHODIMP nsDataChannel::GetName(PRUnichar* *result) { - nsXPIDLCString name; - - if (mUrl) { - mUrl->GetSpec(getter_Copies(name)); - } - *result = ToNewUnicode(name); + nsCAutoString name; + if (mUrl) + mUrl->GetSpec(name); + *result = ToNewUnicode(NS_ConvertUTF8toUCS2(name)); return NS_OK; } diff --git a/mozilla/netwerk/protocol/data/src/nsDataHandler.cpp b/mozilla/netwerk/protocol/data/src/nsDataHandler.cpp index 2c317251c6e..3131de6a51f 100644 --- a/mozilla/netwerk/protocol/data/src/nsDataHandler.cpp +++ b/mozilla/netwerk/protocol/data/src/nsDataHandler.cpp @@ -76,9 +76,8 @@ nsDataHandler::Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult) { // nsIProtocolHandler methods: NS_IMETHODIMP -nsDataHandler::GetScheme(char* *result) { - *result = nsCRT::strdup("data"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; +nsDataHandler::GetScheme(nsACString &result) { + result = "data"; return NS_OK; } @@ -96,21 +95,21 @@ nsDataHandler::GetProtocolFlags(PRUint32 *result) { } NS_IMETHODIMP -nsDataHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) { +nsDataHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; // no concept of a relative data url NS_ASSERTION(!aBaseURI, "base url passed into data protocol handler"); - nsCAutoString spec(aSpec); - nsIURI* url; rv = nsComponentManager::CreateInstance(kSimpleURICID, nsnull, NS_GET_IID(nsIURI), (void**)&url); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec(spec.get()); + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); return rv; diff --git a/mozilla/netwerk/protocol/datetime/src/nsDateTimeChannel.cpp b/mozilla/netwerk/protocol/datetime/src/nsDateTimeChannel.cpp index c3a91969410..dafa8f487b5 100644 --- a/mozilla/netwerk/protocol/datetime/src/nsDateTimeChannel.cpp +++ b/mozilla/netwerk/protocol/datetime/src/nsDateTimeChannel.cpp @@ -78,7 +78,7 @@ nsDateTimeChannel::Init(nsIURI* uri, nsIProxyInfo* proxyInfo) if (NS_FAILED(rv) || mPort < 1) mPort = DATETIME_PORT; - rv = mUrl->GetPath(getter_Copies(mHost)); + rv = mUrl->GetPath(mHost); if (NS_FAILED(rv)) return rv; if (!*(const char *)mHost) return NS_ERROR_NOT_INITIALIZED; @@ -193,7 +193,7 @@ nsDateTimeChannel::Open(nsIInputStream **_retval) transport->SetNotificationCallbacks(mCallbacks, (mLoadFlags & LOAD_BACKGROUND)); - return transport->OpenInputStream(0, -1, 0, _retval); + return transport->OpenInputStream(0, PRUint32(-1), 0, _retval); } NS_IMETHODIMP @@ -223,7 +223,7 @@ nsDateTimeChannel::AsyncOpen(nsIStreamListener *aListener, nsISupports *ctxt) mListener = aListener; nsCOMPtr request; - return transport->AsyncRead(this, ctxt, 0, -1, 0, getter_AddRefs(request)); + return transport->AsyncRead(this, ctxt, 0, PRUint32(-1), 0, getter_AddRefs(request)); } NS_IMETHODIMP diff --git a/mozilla/netwerk/protocol/datetime/src/nsDateTimeHandler.cpp b/mozilla/netwerk/protocol/datetime/src/nsDateTimeHandler.cpp index 75189123f7f..52f53a754b8 100644 --- a/mozilla/netwerk/protocol/datetime/src/nsDateTimeHandler.cpp +++ b/mozilla/netwerk/protocol/datetime/src/nsDateTimeHandler.cpp @@ -78,9 +78,8 @@ nsDateTimeHandler::Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult // nsIProtocolHandler methods: NS_IMETHODIMP -nsDateTimeHandler::GetScheme(char* *result) { - *result = nsCRT::strdup("datetime"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; +nsDateTimeHandler::GetScheme(nsACString &result) { + result = "datetime"; return NS_OK; } @@ -97,8 +96,10 @@ nsDateTimeHandler::GetProtocolFlags(PRUint32 *result) { } NS_IMETHODIMP -nsDateTimeHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) { +nsDateTimeHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; // no concept of a relative datetime url @@ -109,7 +110,7 @@ nsDateTimeHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, NS_GET_IID(nsIURI), (void**)&url); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec((char*)aSpec); + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); return rv; diff --git a/mozilla/netwerk/protocol/file/src/nsFileChannel.cpp b/mozilla/netwerk/protocol/file/src/nsFileChannel.cpp index fc8936fb173..e24f2f8c592 100644 --- a/mozilla/netwerk/protocol/file/src/nsFileChannel.cpp +++ b/mozilla/netwerk/protocol/file/src/nsFileChannel.cpp @@ -37,6 +37,7 @@ #include "nsFileChannel.h" #include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsIURL.h" #include "nsXPIDLString.h" #include "nsReadableUtils.h" @@ -139,12 +140,10 @@ nsFileChannel::GetName(PRUnichar* *result) if (mCurrentRequest) return mCurrentRequest->GetName(result); nsresult rv; - nsXPIDLCString urlStr; - rv = mURI->GetSpec(getter_Copies(urlStr)); + nsCAutoString name; + rv = mURI->GetSpec(name); if (NS_FAILED(rv)) return rv; - nsAutoString name; - name.AppendWithConversion(urlStr); - *result = ToNewUnicode(name); + *result = ToNewUnicode(NS_ConvertUTF8toUCS2(name)); return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } @@ -258,7 +257,7 @@ nsFileChannel::Open(nsIInputStream **result) rv = EnsureTransport(); if (NS_FAILED(rv)) goto done; - rv = mFileTransport->OpenInputStream(0, -1, 0, result); + rv = mFileTransport->OpenInputStream(0, PRUint32(-1), 0, result); done: if (NS_FAILED(rv)) { // release the transport so that we don't think we're in progress @@ -293,7 +292,7 @@ nsFileChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *ctxt) if (NS_FAILED(rv)) return rv; } - rv = mFileTransport->AsyncRead(this, ctxt, 0, -1, 0, + rv = mFileTransport->AsyncRead(this, ctxt, 0, PRUint32(-1), 0, getter_AddRefs(mCurrentRequest)); if (NS_FAILED(rv)) { diff --git a/mozilla/netwerk/protocol/file/src/nsFileProtocolHandler.cpp b/mozilla/netwerk/protocol/file/src/nsFileProtocolHandler.cpp index d4db3a4e459..cb96b2b5a90 100644 --- a/mozilla/netwerk/protocol/file/src/nsFileProtocolHandler.cpp +++ b/mozilla/netwerk/protocol/file/src/nsFileProtocolHandler.cpp @@ -39,6 +39,8 @@ #include "nsFileProtocolHandler.h" #include "nsIURL.h" #include "nsIURLParser.h" +#include "nsIStandardURL.h" +#include "nsIFileURL.h" #include "nsCRT.h" #include "nsIComponentManager.h" #include "nsIServiceManager.h" @@ -99,11 +101,9 @@ nsFileProtocolHandler::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult // nsIProtocolHandler methods: NS_IMETHODIMP -nsFileProtocolHandler::GetScheme(char* *result) +nsFileProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("file"); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = "file"; return NS_OK; } @@ -122,7 +122,9 @@ nsFileProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsFileProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsFileProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, nsIURI **result) { nsresult rv; @@ -136,10 +138,11 @@ nsFileProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, nsnull, NS_GET_IID(nsIStandardURL), getter_AddRefs(url)); if (NS_FAILED(rv)) return rv; - rv = url->Init(nsIStandardURL::URLTYPE_NO_AUTHORITY, -1, aSpec, aBaseURI); + + rv = url->Init(nsIStandardURL::URLTYPE_NO_AUTHORITY, -1, aSpec, aCharset, aBaseURI); if (NS_FAILED(rv)) return rv; - return url->QueryInterface(NS_GET_IID(nsIURI), (void**)result); + return CallQueryInterface(url, result); } NS_IMETHODIMP diff --git a/mozilla/netwerk/protocol/finger/src/nsFingerChannel.cpp b/mozilla/netwerk/protocol/finger/src/nsFingerChannel.cpp index 3db53101364..76f32765247 100644 --- a/mozilla/netwerk/protocol/finger/src/nsFingerChannel.cpp +++ b/mozilla/netwerk/protocol/finger/src/nsFingerChannel.cpp @@ -65,7 +65,7 @@ nsresult nsFingerChannel::Init(nsIURI* uri, nsIProxyInfo* proxyInfo) { nsresult rv; - nsXPIDLCString autoBuffer; + nsCAutoString autoBuffer; NS_ASSERTION(uri, "no uri"); @@ -77,12 +77,12 @@ nsFingerChannel::Init(nsIURI* uri, nsIProxyInfo* proxyInfo) mPort = FINGER_PORT; - rv = mUrl->GetPath(getter_Copies(autoBuffer)); // autoBuffer = user@host + rv = mUrl->GetPath(autoBuffer); // autoBuffer = user@host if (NS_FAILED(rv)) return rv; // Now parse out the user and host const char* buf = autoBuffer.get(); - const char* pos = PL_strchr(buf, '@'); + const char* pos = strchr(buf, '@'); // Catch the case of just the host being given if (!pos) { @@ -383,9 +383,9 @@ nsFingerChannel::OnStopRequest(nsIRequest *aRequest, nsISupports* aContext, nsCOMPtr converter(do_QueryInterface(converterListener)); if (converter) { nsAutoString title(NS_LITERAL_STRING("Finger information for ")); - nsXPIDLCString userHost; - rv = mUrl->GetPath(getter_Copies(userHost)); - title.AppendWithConversion(userHost); + nsCAutoString userHost; + rv = mUrl->GetPath(userHost); + title.Append(NS_ConvertUTF8toUCS2(userHost)); converter->SetTitle(title.get()); converter->PreFormatHTML(PR_TRUE); } diff --git a/mozilla/netwerk/protocol/finger/src/nsFingerHandler.cpp b/mozilla/netwerk/protocol/finger/src/nsFingerHandler.cpp index dd4012bfca3..52ce357b6a4 100644 --- a/mozilla/netwerk/protocol/finger/src/nsFingerHandler.cpp +++ b/mozilla/netwerk/protocol/finger/src/nsFingerHandler.cpp @@ -63,9 +63,8 @@ nsFingerHandler::Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult) // nsIProtocolHandler methods: NS_IMETHODIMP -nsFingerHandler::GetScheme(char* *result) { - *result = nsCRT::strdup("finger"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; +nsFingerHandler::GetScheme(nsACString &result) { + result = "finger"; return NS_OK; } @@ -82,8 +81,10 @@ nsFingerHandler::GetProtocolFlags(PRUint32 *result) { } NS_IMETHODIMP -nsFingerHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) { +nsFingerHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; // no concept of a relative finger url @@ -94,7 +95,7 @@ nsFingerHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, NS_GET_IID(nsIURI), (void**)&url); if (NS_FAILED(rv)) return rv; - rv = url->SetSpec((char*)aSpec); + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); return rv; diff --git a/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.cpp b/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.cpp index 4bbc8082603..af34fbbe63c 100644 --- a/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.cpp +++ b/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.cpp @@ -93,9 +93,9 @@ nsFTPChannel::nsFTPChannel() nsFTPChannel::~nsFTPChannel() { #if defined(PR_LOGGING) - nsXPIDLCString spec; - mURL->GetSpec(getter_Copies(spec)); - PR_LOG(gFTPLog, PR_LOG_ALWAYS, ("~nsFTPChannel() for %s", (const char*)spec)); + nsCAutoString spec; + mURL->GetAsciiSpec(spec); + PR_LOG(gFTPLog, PR_LOG_ALWAYS, ("~nsFTPChannel() for %s", spec.get())); #endif NS_IF_RELEASE(mFTPState); if (mLock) PR_DestroyLock(mLock); @@ -128,7 +128,7 @@ nsFTPChannel::Init(nsIURI* uri, nsIProxyInfo* proxyInfo, nsICacheSession* sessio mURL = uri; mProxyInfo = proxyInfo; - rv = mURL->GetHost(getter_Copies(mHost)); + rv = mURL->GetAsciiHost(mHost); if (NS_FAILED(rv)) return rv; if (!mLock) { @@ -170,12 +170,10 @@ NS_IMETHODIMP nsFTPChannel::GetName(PRUnichar* *result) { nsresult rv; - nsXPIDLCString urlStr; - rv = mURL->GetSpec(getter_Copies(urlStr)); + nsCAutoString urlStr; + rv = mURL->GetSpec(urlStr); if (NS_FAILED(rv)) return rv; - nsString name; - name.AppendWithConversion(urlStr); - *result = ToNewUnicode(name); + *result = ToNewUnicode(NS_ConvertUTF8toUCS2(urlStr)); return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } @@ -280,13 +278,13 @@ nsFTPChannel::GenerateCacheKey(nsACString &cacheKey) { cacheKey.SetLength(0); - nsXPIDLCString spec; - mURL->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + mURL->GetAsciiSpec(spec); // Strip any trailing #ref from the URL before using it as the key - const char *p = PL_strchr(spec, '#'); + const char *p = strchr(spec.get(), '#'); if (p) - cacheKey.Append(spec, p - spec); + cacheKey.Append(Substring(spec, 0, p - spec.get())); else cacheKey.Append(spec); return NS_OK; diff --git a/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.h b/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.h index 437bb557c5a..dd2d956d5d2 100644 --- a/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.h +++ b/mozilla/netwerk/protocol/ftp/src/nsFTPChannel.h @@ -145,7 +145,7 @@ protected: nsFtpState* mFTPState; - nsXPIDLCString mHost; + nsSharableCString mHost; PRLock* mLock; nsCOMPtr mUserContext; nsresult mStatus; diff --git a/mozilla/netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp b/mozilla/netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp index b5babd2bf57..f5eda743586 100644 --- a/mozilla/netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp +++ b/mozilla/netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp @@ -544,11 +544,11 @@ NS_IMETHODIMP nsFtpState::OnStartRequest(nsIRequest *request, nsISupports *aContext) { #if defined(PR_LOGGING) - nsXPIDLCString spec; - (void)mURL->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + (void)mURL->GetAsciiSpec(spec); PR_LOG(gFTPLog, PR_LOG_DEBUG, ("(%x) nsFtpState::OnStartRequest() (spec =%s)\n", - this, NS_STATIC_CAST(const char*, spec))); + this, spec.get())); #endif return NS_OK; } @@ -623,11 +623,11 @@ nsFtpState::EstablishControlConnection() mState = FTP_READ_BUF; mNextState = FTP_S_USER; - nsXPIDLCString host; - rv = mURL->GetHost(getter_Copies(host)); + nsCAutoString host; + rv = mURL->GetAsciiHost(host); if (NS_FAILED(rv)) return rv; - mControlConnection = new nsFtpControlConnection(host, mPort); + mControlConnection = new nsFtpControlConnection(host.get(), mPort); if (!mControlConnection) return NS_ERROR_OUT_OF_MEMORY; NS_ADDREF(mControlConnection); @@ -985,10 +985,10 @@ nsFtpState::S_user() { if (!mAuthPrompter) return NS_ERROR_NOT_INITIALIZED; PRUnichar *user = nsnull, *passwd = nsnull; PRBool retval; - nsXPIDLCString prePath; - rv = mURL->GetPrePath(getter_Copies(prePath)); + nsCAutoString prePath; + rv = mURL->GetPrePath(prePath); if (NS_FAILED(rv)) return rv; - nsAutoString prePathU; prePathU.AppendWithConversion(prePath); + NS_ConvertUTF8toUCS2 prePathU(prePath); nsCOMPtr bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; @@ -1004,7 +1004,7 @@ nsFtpState::S_user() { getter_Copies(formatedString)); rv = mAuthPrompter->PromptUsernameAndPassword(nsnull, formatedString, - NS_ConvertASCIItoUCS2(prePath).get(), + prePathU.get(), nsIAuthPrompt::SAVE_PASSWORD_PERMANENTLY, &user, &passwd, @@ -1082,10 +1082,10 @@ nsFtpState::S_pass() { PRUnichar *passwd = nsnull; PRBool retval; - nsXPIDLCString prePath; - rv = mURL->GetPrePath(getter_Copies(prePath)); + nsCAutoString prePath; + rv = mURL->GetPrePath(prePath); if (NS_FAILED(rv)) return rv; - nsAutoString prePathU; prePathU.AppendWithConversion(prePath); + NS_ConvertUTF8toUCS2 prePathU(prePath); nsCOMPtr bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; @@ -1111,6 +1111,7 @@ nsFtpState::S_pass() { return NS_ERROR_FAILURE; mPassword = passwd; } + // XXX mPassword may contain non-ASCII characters! what do we do? passwordStr.AppendWithConversion(mPassword); } passwordStr.Append(CRLF); @@ -1141,8 +1142,8 @@ nsFtpState::R_pass() { if (!mPassword.IsEmpty()) { nsCOMPtr pm = do_GetService("@mozilla.org/passwordmanager;1"); if (pm) { - nsXPIDLCString prePath; - nsresult rv = mURL->GetPrePath(getter_Copies(prePath)); + nsCAutoString prePath; + nsresult rv = mURL->GetPrePath(prePath); NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to get prepath"); if (NS_SUCCEEDED(rv)) { pm->RemoveUser(prePath.get(), nsnull); @@ -1799,12 +1800,10 @@ NS_IMETHODIMP nsFtpState::GetName(PRUnichar* *result) { nsresult rv; - nsXPIDLCString urlStr; - rv = mURL->GetSpec(getter_Copies(urlStr)); + nsCAutoString urlStr; + rv = mURL->GetSpec(urlStr); if (NS_FAILED(rv)) return rv; - nsString name; - name.AppendWithConversion(urlStr); - *result = ToNewUnicode(name); + *result = ToNewUnicode(NS_ConvertUTF8toUCS2(urlStr)); return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } @@ -2101,17 +2100,17 @@ nsFtpState::Init(nsIFTPChannel* aChannel, getter_AddRefs(mDPipeRequest)); } } - char *path = nsnull; + + nsCAutoString path; nsCOMPtr aURL(do_QueryInterface(mURL)); - if (aURL) - rv = aURL->GetFilePath(&path); + rv = aURL->GetFilePath(path); else - rv = mURL->GetPath(&path); + rv = mURL->GetPath(path); if (NS_FAILED(rv)) return rv; // Skip leading slash - char* fwdPtr= path; + char* fwdPtr = (char *)path.get(); if (fwdPtr && (*fwdPtr == '/')) fwdPtr++; if (*fwdPtr != '\0') { @@ -2119,31 +2118,27 @@ nsFtpState::Init(nsIFTPChannel* aChannel, NS_UnescapeURL(fwdPtr); mPath.Assign(fwdPtr); } - nsMemory::Free(path); // pull any username and/or password out of the uri - nsXPIDLCString uname; - rv = mURL->GetUsername(getter_Copies(uname)); + nsCAutoString uname; + rv = mURL->GetUsername(uname); if (NS_FAILED(rv)) { return rv; } else { - if ((const char*)uname && *(const char*)uname) { + if (!uname.IsEmpty()) { mAnonymous = PR_FALSE; - mUsername.AssignWithConversion(uname); + mUsername = NS_ConvertUTF8toUCS2(uname); } } - nsXPIDLCString password; - rv = mURL->GetPassword(getter_Copies(password)); + nsCAutoString password; + rv = mURL->GetPassword(password); if (NS_FAILED(rv)) return rv; else - mPassword.AssignWithConversion(password); + mPassword = NS_ConvertUTF8toUCS2(password); // setup the connection cache key - nsXPIDLCString host; - rv = mURL->GetHost(getter_Copies(host)); - if (NS_FAILED(rv)) return rv; PRInt32 port; rv = mURL->GetPort(&port); diff --git a/mozilla/netwerk/protocol/ftp/src/nsFtpConnectionThread.h b/mozilla/netwerk/protocol/ftp/src/nsFtpConnectionThread.h index 7e4480ab692..b4d4719a214 100644 --- a/mozilla/netwerk/protocol/ftp/src/nsFtpConnectionThread.h +++ b/mozilla/netwerk/protocol/ftp/src/nsFtpConnectionThread.h @@ -199,8 +199,8 @@ private: PRPackedBool mList; // Use LIST instead of NLST // ****** protocol interpretation related state vars - nsAutoString mUsername; // username - nsAutoString mPassword; // password + nsString mUsername; // username + nsString mPassword; // password FTP_ACTION mAction; // the higher level action (GET/PUT) PRPackedBool mAnonymous; // try connecting anonymous (default) PRPackedBool mRetryPass; // retrying the password @@ -209,7 +209,7 @@ private: // ****** URI vars nsCOMPtr mURL; // the uri we're connecting to PRInt32 mPort; // the port to connect to - nsAutoString mFilename; // url filename (if any) + nsString mFilename; // url filename (if any) nsCString mPath; // the url's path nsCString mPwd; // login Path diff --git a/mozilla/netwerk/protocol/ftp/src/nsFtpProtocolHandler.cpp b/mozilla/netwerk/protocol/ftp/src/nsFtpProtocolHandler.cpp index 1fc68e2460b..7bc4b2d918d 100644 --- a/mozilla/netwerk/protocol/ftp/src/nsFtpProtocolHandler.cpp +++ b/mozilla/netwerk/protocol/ftp/src/nsFtpProtocolHandler.cpp @@ -36,7 +36,7 @@ #include "nsFtpProtocolHandler.h" #include "nsFTPChannel.h" #include "nsIURL.h" -#include "nsIURLParser.h" +#include "nsIStandardURL.h" #include "nsCRT.h" #include "nsIComponentManager.h" #include "nsIInterfaceRequestor.h" @@ -147,11 +147,9 @@ nsFtpProtocolHandler::Init() { // nsIProtocolHandler methods: NS_IMETHODIMP -nsFtpProtocolHandler::GetScheme(char* *result) +nsFtpProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("ftp"); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = "ftp"; return NS_OK; } @@ -170,7 +168,9 @@ nsFtpProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsFtpProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsFtpProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, nsIURI **result) { nsresult rv = NS_OK; @@ -179,10 +179,10 @@ nsFtpProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, nsnull, NS_GET_IID(nsIStandardURL), getter_AddRefs(url)); if (NS_FAILED(rv)) return rv; - rv = url->Init(nsIStandardURL::URLTYPE_AUTHORITY, 21, aSpec, aBaseURI); + rv = url->Init(nsIStandardURL::URLTYPE_AUTHORITY, 21, aSpec, aCharset, aBaseURI); if (NS_FAILED(rv)) return rv; - return url->QueryInterface(NS_GET_IID(nsIURI), (void**)result); + return CallQueryInterface(url, result); } NS_IMETHODIMP @@ -258,8 +258,8 @@ nsFtpProtocolHandler::RemoveConnection(nsIURI *aKey, nsISupports* *_retval) { if (!mRootConnectionList) return NS_ERROR_NULL_POINTER; - nsXPIDLCString spec; - aKey->GetPrePath(getter_Copies(spec)); + nsCAutoString spec; + aKey->GetPrePath(spec); PR_LOG(gFTPLog, PR_LOG_DEBUG, ("Removing connection for %s\n", spec.get())); @@ -294,8 +294,8 @@ nsFtpProtocolHandler::InsertConnection(nsIURI *aKey, nsISupports *aConn) if (!mRootConnectionList) return NS_ERROR_NULL_POINTER; - nsXPIDLCString spec; - aKey->GetPrePath(getter_Copies(spec)); + nsCAutoString spec; + aKey->GetPrePath(spec); PR_LOG(gFTPLog, PR_LOG_DEBUG, ("Inserting connection for %s\n", spec.get())); if (!mRootConnectionList) diff --git a/mozilla/netwerk/protocol/gopher/src/nsGopherChannel.cpp b/mozilla/netwerk/protocol/gopher/src/nsGopherChannel.cpp index 58365602bdb..d64f33da45d 100644 --- a/mozilla/netwerk/protocol/gopher/src/nsGopherChannel.cpp +++ b/mozilla/netwerk/protocol/gopher/src/nsGopherChannel.cpp @@ -65,8 +65,8 @@ nsGopherChannel::nsGopherChannel() nsGopherChannel::~nsGopherChannel() { #ifdef PR_LOGGING - nsXPIDLCString spec; - mUrl->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + mUrl->GetAsciiSpec(spec); PR_LOG(gGopherLog, PR_LOG_ALWAYS, ("~nsGopherChannel() for %s", spec.get())); #endif } @@ -90,13 +90,13 @@ nsGopherChannel::Init(nsIURI* uri, nsIProxyInfo* proxyInfo) mUrl = uri; mProxyInfo = proxyInfo; - nsXPIDLCString buffer; + nsCAutoString buffer; - rv = url->GetPath(getter_Copies(buffer)); + rv = url->GetPath(buffer); // unescaped down below if (NS_FAILED(rv)) return rv; - rv = url->GetHost(getter_Copies(mHost)); + rv = url->GetAsciiHost(mHost); if (NS_FAILED(rv)) return rv; rv = url->GetPort(&mPort); @@ -572,10 +572,9 @@ nsGopherChannel::OnStopRequest(nsIRequest* aRequest, nsISupports* aContext, nsCOMPtr converter(do_QueryInterface(converterListener)); if (converter) { - nsXPIDLCString spec; - rv = mUrl->GetSpec(getter_Copies(spec)); - nsUnescape(NS_CONST_CAST(char*, spec.get())); - converter->SetTitle(NS_ConvertASCIItoUCS2(spec).get()); + nsCAutoString spec; + rv = mUrl->GetSpec(spec); + converter->SetTitle(NS_ConvertUTF8toUCS2(spec).get()); converter->PreFormatHTML(PR_TRUE); } } else @@ -657,15 +656,14 @@ nsGopherChannel::SendRequest(nsITransport* aTransport) mRequest.AppendWithConversion(search.get()); // and update our uri - nsXPIDLCString spec; - rv = mUrl->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = mUrl->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; - nsCString strSpec(spec.get()); - strSpec.Append('?'); - strSpec.AppendWithConversion(search.get()); - rv = mUrl->SetSpec(strSpec.get()); + spec.Append('?'); + spec.AppendWithConversion(search.get()); + rv = mUrl->SetSpec(spec); if (NS_FAILED(rv)) return rv; } else { diff --git a/mozilla/netwerk/protocol/gopher/src/nsGopherHandler.cpp b/mozilla/netwerk/protocol/gopher/src/nsGopherHandler.cpp index 5d7d756425d..91e54ac8ed7 100644 --- a/mozilla/netwerk/protocol/gopher/src/nsGopherHandler.cpp +++ b/mozilla/netwerk/protocol/gopher/src/nsGopherHandler.cpp @@ -34,9 +34,8 @@ #include "nsIInterfaceRequestor.h" #include "nsIInterfaceRequestorUtils.h" #include "nsIProgressEventSink.h" -//#include "nsIHTTPProtocolHandler.h" -//#include "nsIHTTPChannel.h" #include "nsIErrorService.h" +#include "nsIStandardURL.h" #include "nsNetUtil.h" #include "prlog.h" @@ -80,9 +79,8 @@ nsGopherHandler::Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult) // nsIProtocolHandler methods: NS_IMETHODIMP -nsGopherHandler::GetScheme(char* *result) { - *result = nsCRT::strdup("gopher"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; +nsGopherHandler::GetScheme(nsACString &result) { + result = "gopher"; return NS_OK; } @@ -99,8 +97,10 @@ nsGopherHandler::GetProtocolFlags(PRUint32 *result) { } NS_IMETHODIMP -nsGopherHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) { +nsGopherHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; nsCOMPtr url; @@ -109,10 +109,10 @@ nsGopherHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, getter_AddRefs(url)); if (NS_FAILED(rv)) return rv; rv = url->Init(nsIStandardURL::URLTYPE_STANDARD, GOPHER_PORT, - aSpec, aBaseURI); + aSpec, aCharset, aBaseURI); if (NS_FAILED(rv)) return rv; - return url->QueryInterface(NS_GET_IID(nsIURI), (void**)result); + return CallQueryInterface(url, result); } NS_IMETHODIMP diff --git a/mozilla/netwerk/protocol/http/src/nsHttpChannel.cpp b/mozilla/netwerk/protocol/http/src/nsHttpChannel.cpp index 2990d8548a3..11a36aa482f 100644 --- a/mozilla/netwerk/protocol/http/src/nsHttpChannel.cpp +++ b/mozilla/netwerk/protocol/http/src/nsHttpChannel.cpp @@ -32,8 +32,9 @@ #include "nsIAuthPrompt.h" #include "nsIStringBundle.h" #include "nsISupportsPrimitives.h" -#include "nsCExternalHandlerService.h" +#include "nsIURL.h" #include "nsIMIMEService.h" +#include "nsCExternalHandlerService.h" #include "nsMimeTypes.h" #include "nsNetUtil.h" #include "nsString.h" @@ -122,14 +123,14 @@ nsHttpChannel::Init(nsIURI *uri, // // Construct connection info object // - nsXPIDLCString host; + nsCAutoString host; PRInt32 port = -1; PRBool usingSSL = PR_FALSE; rv = mURI->SchemeIs("https", &usingSSL); if (NS_FAILED(rv)) return rv; - rv = mURI->GetHost(getter_Copies(host)); + rv = mURI->GetAsciiHost(host); if (NS_FAILED(rv)) return rv; rv = mURI->GetPort(&port); @@ -137,23 +138,7 @@ nsHttpChannel::Init(nsIURI *uri, LOG(("host=%s port=%d\n", host.get(), port)); - nsCOMPtr converter; - if ((converter = nsHttpHandler::get()->IDNConverter()) && - !nsCRT::IsAscii(host)) - { - nsXPIDLCString hostACE; - rv = converter->UTF8ToIDNHostName(host.get(), getter_Copies(hostACE)); - if (NS_FAILED(rv)) return rv; - - // replace the host portion in the URL - nsCOMPtr url = do_QueryInterface(mURI); - NS_ASSERTION(url, "mURI is not an nsIURL"); - if (url) - url->SetHost(hostACE.get()); - // overwrite |host| - host.Assign(hostACE); - } - rv = mURI->GetSpec(getter_Copies(mSpec)); + rv = mURI->GetAsciiSpec(mSpec); if (NS_FAILED(rv)) return rv; LOG(("uri=%s\n", mSpec.get())); @@ -175,7 +160,7 @@ nsHttpChannel::Init(nsIURI *uri, // Set request headers // nsCAutoString hostLine; - if (PL_strchr(host.get(), ':')) { + if (strchr(host.get(), ':')) { // host is an IPv6 address literal and must be encapsulated in []'s hostLine.Assign('['); hostLine.Append(host); @@ -398,19 +383,22 @@ nsHttpChannel::SetupTransaction() // use the URI path if not proxying (transparent proxying such as SSL proxy // does not count here). - nsXPIDLCString requestURIStr; + nsCAutoString buf, path; const char* requestURI; - if (mConnectionInfo->UsingSSL() || - !mConnectionInfo->UsingHttpProxy()) { - rv = mURI->GetPath(getter_Copies(requestURIStr)); + if (mConnectionInfo->UsingSSL() || !mConnectionInfo->UsingHttpProxy()) { + rv = mURI->GetPath(path); if (NS_FAILED(rv)) return rv; - requestURI = requestURIStr.get(); + // path may contain UTF-8 characters, so ensure that their escaped. + if (NS_EscapeURL(path.get(), path.Length(), esc_OnlyNonASCII, buf)) + requestURI = buf.get(); + else + requestURI = path.get(); } else requestURI = mSpec.get(); // trim off the #ref portion if any... - char *p = PL_strchr(requestURI, '#'); + char *p = strchr(requestURI, '#'); if (p) *p = 0; mRequestHead.SetVersion(nsHttpHandler::get()->DefaultVersion()); @@ -736,11 +724,12 @@ nsHttpChannel::GenerateCacheKey(nsACString &cacheKey) cacheKey.Append("&uri="); } // Strip any trailing #ref from the URL before using it as the key - const char *p = PL_strchr(mSpec, '#'); + const char *spec = mSpec.get(); + const char *p = strchr(spec, '#'); if (p) - cacheKey.Append(mSpec, p - mSpec); + cacheKey.Append(spec, p - spec); else - cacheKey.Append(mSpec); + cacheKey.Append(spec); return NS_OK; } @@ -1222,7 +1211,7 @@ nsHttpChannel::ProcessRedirection(PRUint32 redirectType) PRInt32 proxyPort; // location is of the form "host:port" - char *p = PL_strchr(location, ':'); + char *p = strchr(location, ':'); if (p) { *p = 0; proxyPort = atoi(p+1); @@ -1244,28 +1233,29 @@ nsHttpChannel::ProcessRedirection(PRUint32 redirectType) nsCOMPtr ioService; rv = nsHttpHandler::get()->GetIOService(getter_AddRefs(ioService)); - rv = ioService->NewURI(location, mURI, getter_AddRefs(newURI)); + rv = ioService->NewURI(nsDependentCString(location), nsnull, mURI, + getter_AddRefs(newURI)); if (NS_FAILED(rv)) return rv; // move the reference of the old location to the new one if the new // one has none. nsCOMPtr newURL = do_QueryInterface(newURI, &rv); if (NS_SUCCEEDED(rv)) { - nsXPIDLCString ref; - rv = newURL->GetRef(getter_Copies(ref)); - if (NS_SUCCEEDED(rv) && !ref) { - nsCOMPtr baseURL = do_QueryInterface(mURI, &rv); + nsCAutoString ref; + rv = newURL->GetRef(ref); + if (NS_SUCCEEDED(rv) && ref.IsEmpty()) { + nsCOMPtr baseURL( do_QueryInterface(mURI, &rv) ); if (NS_SUCCEEDED(rv)) { - baseURL->GetRef(getter_Copies(ref)); - if (ref) + baseURL->GetRef(ref); + if (!ref.IsEmpty()) newURL->SetRef(ref); } } } // build the new channel - rv = NS_OpenURI(getter_AddRefs(newChannel), newURI, ioService, mLoadGroup, - mCallbacks, mLoadFlags | LOAD_REPLACE); + rv = NS_NewChannel(getter_AddRefs(newChannel), newURI, ioService, mLoadGroup, + mCallbacks, mLoadFlags | LOAD_REPLACE); if (NS_FAILED(rv)) return rv; } @@ -1417,7 +1407,7 @@ nsHttpChannel::GetCredentials(const char *challenges, if (NS_FAILED(rv)) return rv; const char *host; - nsXPIDLCString path; + nsCAutoString path; nsXPIDLString *user; nsXPIDLString *pass; PRInt32 port; @@ -1434,7 +1424,7 @@ nsHttpChannel::GetCredentials(const char *challenges, user = &mUser; pass = &mPass; - rv = GetCurrentPath(getter_Copies(path)); + rv = GetCurrentPath(path); if (NS_FAILED(rv)) return rv; } @@ -1506,7 +1496,7 @@ nsHttpChannel::GetCredentials(const char *challenges, // // if the credentials are not reusable, then we don't bother sticking them // in the auth cache. - return authCache->SetAuthEntry(host, port, path, realm.get(), + return authCache->SetAuthEntry(host, port, path.get(), realm.get(), reusable ? creds.get() : nsnull, user->get(), pass->get(), challenge.get(), metadata); @@ -1570,17 +1560,21 @@ nsHttpChannel::GetUserPassFromURI(PRUnichar **user, { LOG(("nsHttpChannel::GetUserPassFromURI [this=%x]\n", this)); - nsXPIDLCString buf; + nsCAutoString buf; *user = nsnull; *pass = nsnull; - mURI->GetUsername(getter_Copies(buf)); - if (buf) { - *user = ToNewUnicode(buf); - mURI->GetPassword(getter_Copies(buf)); - if (buf) - *pass = ToNewUnicode(buf); + // XXX i18n + mURI->GetUsername(buf); + if (!buf.IsEmpty()) { + NS_UnescapeURL(buf); + *user = ToNewUnicode(NS_ConvertASCIItoUCS2(buf)); + mURI->GetPassword(buf); + if (!buf.IsEmpty()) { + NS_UnescapeURL(buf); + *pass = ToNewUnicode(NS_ConvertASCIItoUCS2(buf)); + } } } @@ -1756,8 +1750,8 @@ nsHttpChannel::AddAuthorizationHeaders() getter_Copies(mProxyPass)); // check if server credentials should be sent - nsXPIDLCString path; - if (NS_SUCCEEDED(GetCurrentPath(getter_Copies(path)))) + nsCAutoString path; + if (NS_SUCCEEDED(GetCurrentPath(path))) SetAuthorizationHeader(authCache, nsHttp::Authorization, mConnectionInfo->Host(), mConnectionInfo->Port(), @@ -1768,7 +1762,7 @@ nsHttpChannel::AddAuthorizationHeaders() } nsresult -nsHttpChannel::GetCurrentPath(char **path) +nsHttpChannel::GetCurrentPath(nsACString &path) { nsresult rv; nsCOMPtr url = do_QueryInterface(mURI); @@ -1989,9 +1983,10 @@ nsHttpChannel::GetContentType(char **value) PRBool doMimeLookup = PR_TRUE; nsCOMPtr url = do_QueryInterface(mURI); if (url) { - nsXPIDLCString ext; - url->GetFileExtension(getter_Copies(ext)); - if (ext && (!PL_strcasecmp(ext, "dll") || !PL_strcasecmp(ext, "exe"))) + nsCAutoString ext; + url->GetFileExtension(ext); + if (!nsCRT::strcasecmp(ext.get(), "dll") || + !nsCRT::strcasecmp(ext.get(), "exe")) doMimeLookup = PR_FALSE; } if (doMimeLookup) { @@ -2179,19 +2174,17 @@ nsHttpChannel::SetReferrer(nsIURI *referrer, PRUint32 referrerType) PRBool isHTTPS = PR_FALSE; referrer->SchemeIs("https", &isHTTPS); if (isHTTPS) { - nsXPIDLCString referrerHost; - nsXPIDLCString host; - referrer->GetHost(getter_Copies(referrerHost)); - mURI->GetHost(getter_Copies(host)); - mURI->SchemeIs("https",&isHTTPS); + nsCAutoString referrerHost; + nsCAutoString host; - if (nsCRT::strcasecmp(referrerHost, host) != 0) { - return NS_OK; - } + referrer->GetAsciiHost(referrerHost); + mURI->GetAsciiHost(host); + mURI->SchemeIs("https", &isHTTPS); - if (!isHTTPS) { + if (nsCRT::strcasecmp(referrerHost.get(), host.get()) != 0) + return NS_OK; + if (!isHTTPS) return NS_OK; - } } } @@ -2205,18 +2198,26 @@ nsHttpChannel::SetReferrer(nsIURI *referrer, PRUint32 referrerType) mRequestHead.SetHeader(nsHttp::Referer, nsnull); if (referrer) { - nsXPIDLCString spec; - referrer->GetSpec(getter_Copies(spec)); - if (spec) { - nsCAutoString ref(spec.get()); - // strip away any prehost; we don't want to be giving out passwords ;-) - nsXPIDLCString prehost; - referrer->GetPreHost(getter_Copies(prehost)); - if (prehost && *prehost) { - PRUint32 prehostLoc = PRUint32(ref.Find(prehost.get(), PR_TRUE)); - ref.Cut(prehostLoc, nsCharTraits::length(prehost) + 1); // + 1 for @ + nsCAutoString spec; + referrer->GetAsciiSpec(spec); + if (!spec.IsEmpty()) { + // strip away any userpass; we don't want to be giving out passwords ;-) + nsCAutoString userpass; + referrer->GetUserPass(userpass); + if (!userpass.IsEmpty()) { + // userpass is UTF8 encoded and spec is ASCII, so we might not find + // userpass as a substring of spec. + nsCOMPtr clone; + nsresult rv = referrer->Clone(getter_AddRefs(clone)); + if (NS_FAILED(rv)) return rv; + + rv = clone->SetUserPass(NS_LITERAL_CSTRING("")); + if (NS_FAILED(rv)) return rv; + + rv = clone->GetAsciiSpec(spec); + if (NS_FAILED(rv)) return rv; } - mRequestHead.SetHeader(nsHttp::Referer, ref.get()); + mRequestHead.SetHeader(nsHttp::Referer, spec.get()); } } return NS_OK; diff --git a/mozilla/netwerk/protocol/http/src/nsHttpChannel.h b/mozilla/netwerk/protocol/http/src/nsHttpChannel.h index 1363a19cedd..b6fb4e896c0 100644 --- a/mozilla/netwerk/protocol/http/src/nsHttpChannel.h +++ b/mozilla/netwerk/protocol/http/src/nsHttpChannel.h @@ -116,7 +116,7 @@ private: nsresult PromptForUserPass(const char *host, PRInt32 port, PRBool proxyAuth, const char *realm, PRUnichar **user, PRUnichar **pass); void SetAuthorizationHeader(nsHttpAuthCache *, nsHttpAtom header, const char *host, PRInt32 port, const char *path, PRUnichar **user, PRUnichar **pass); void AddAuthorizationHeaders(); - nsresult GetCurrentPath(char **); + nsresult GetCurrentPath(nsACString &); void ClearPasswordManagerEntry(const char *host, PRInt32 port, const char *realm, const PRUnichar *user); static void *PR_CALLBACK AsyncRedirect_EventHandlerFunc(PLEvent *); @@ -144,7 +144,7 @@ private: nsHttpTransaction *mPrevTransaction; // hard ref nsHttpConnectionInfo *mConnectionInfo; // hard ref - nsXPIDLCString mSpec; + nsSharableCString mSpec; // ASCII encoded URL spec PRUint32 mLoadFlags; PRUint32 mStatus; diff --git a/mozilla/netwerk/protocol/http/src/nsHttpConnectionInfo.h b/mozilla/netwerk/protocol/http/src/nsHttpConnectionInfo.h index ba02fc90601..47037d424cd 100644 --- a/mozilla/netwerk/protocol/http/src/nsHttpConnectionInfo.h +++ b/mozilla/netwerk/protocol/http/src/nsHttpConnectionInfo.h @@ -26,8 +26,9 @@ #include "nsHttp.h" #include "nsIProxyInfo.h" -#include "nsXPIDLString.h" #include "nsCOMPtr.h" +#include "nsDependentString.h" +#include "nsSharableString.h" #include "plstr.h" #include "nsCRT.h" @@ -38,7 +39,7 @@ class nsHttpConnectionInfo { public: - nsHttpConnectionInfo(const char *host, PRInt32 port, + nsHttpConnectionInfo(const nsACString &host, PRInt32 port, nsIProxyInfo* proxyInfo, PRBool usingSSL=PR_FALSE) : mRef(0) @@ -70,15 +71,18 @@ public: return n; } - nsresult SetOriginServer(const char* host, PRInt32 port) + nsresult SetOriginServer(const nsACString &host, PRInt32 port) { - if (host) - mHost.Adopt(nsCRT::strdup(host)); + mHost = host; mPort = port == -1 ? DefaultPort() : port; - return NS_OK; } + nsresult SetOriginServer(const char *host, PRInt32 port) + { + return SetOriginServer(nsDependentCString(host), port); + } + const char *ProxyHost() const { return mProxyInfo ? mProxyInfo->Host() : nsnull; } PRInt32 ProxyPort() const { return mProxyInfo ? mProxyInfo->Port() : -1; } const char *ProxyType() const { return mProxyInfo ? mProxyInfo->Type() : nsnull; } @@ -104,22 +108,21 @@ public: info->ProxyPort() == ProxyPort()); // otherwise, just check the hosts - return (!PL_strcasecmp(info->mHost, mHost) && + return (!PL_strcasecmp(info->Host(), Host()) && info->mPort == mPort); } - const char *Host() { return mHost; } - PRInt32 Port() { return mPort; } - nsIProxyInfo *ProxyInfo() { return mProxyInfo; } - PRBool UsingHttpProxy() { return mUsingHttpProxy; } - PRBool UsingSSL() { return mUsingSSL; } - - PRInt32 DefaultPort() { return mUsingSSL ? 443 : 80; } + const char *Host() const { return mHost.get(); } + PRInt32 Port() const { return mPort; } + nsIProxyInfo *ProxyInfo() { return mProxyInfo; } + PRBool UsingHttpProxy() const { return mUsingHttpProxy; } + PRBool UsingSSL() const { return mUsingSSL; } + PRInt32 DefaultPort() const { return mUsingSSL ? 443 : 80; } private: nsrefcnt mRef; - nsXPIDLCString mHost; + nsSharableCString mHost; PRInt32 mPort; nsCOMPtr mProxyInfo; PRPackedBool mUsingHttpProxy; diff --git a/mozilla/netwerk/protocol/http/src/nsHttpDigestAuth.cpp b/mozilla/netwerk/protocol/http/src/nsHttpDigestAuth.cpp index f6cd99e285f..155288e786a 100644 --- a/mozilla/netwerk/protocol/http/src/nsHttpDigestAuth.cpp +++ b/mozilla/netwerk/protocol/http/src/nsHttpDigestAuth.cpp @@ -115,13 +115,13 @@ nsHttpDigestAuth::GenerateCredentials(nsIHttpChannel *httpChannel, nsresult rv; nsCOMPtr uri; - nsXPIDLCString path; + nsCAutoString path; nsXPIDLCString httpMethod; rv = httpChannel->GetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; - rv = uri->GetPath(getter_Copies(path)); + rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; rv = httpChannel->GetRequestMethod(getter_Copies(httpMethod)); diff --git a/mozilla/netwerk/protocol/http/src/nsHttpHandler.cpp b/mozilla/netwerk/protocol/http/src/nsHttpHandler.cpp index 99209a81608..51ce095177b 100644 --- a/mozilla/netwerk/protocol/http/src/nsHttpHandler.cpp +++ b/mozilla/netwerk/protocol/http/src/nsHttpHandler.cpp @@ -37,6 +37,7 @@ #include "nsIHttpChannel.h" #include "nsIHttpNotify.h" #include "nsIURL.h" +#include "nsIStandardURL.h" #include "nsICacheService.h" #include "nsICategoryManager.h" #include "nsIObserverService.h" @@ -1674,7 +1675,7 @@ NS_IMPL_THREADSAFE_ISUPPORTS5(nsHttpHandler, //----------------------------------------------------------------------------- NS_IMETHODIMP -nsHttpHandler::GetScheme(char **aScheme) +nsHttpHandler::GetScheme(nsACString &aScheme) { return NS_ERROR_NOT_IMPLEMENTED; } @@ -1693,7 +1694,10 @@ nsHttpHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsHttpHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **aURI) +nsHttpHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, + nsIURI **aURI) { nsresult rv = NS_OK; @@ -1703,7 +1707,7 @@ nsHttpHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **aURI) if (NS_FAILED(rv)) return rv; // XXX need to choose the default port based on the scheme - rv = url->Init(nsIStandardURL::URLTYPE_AUTHORITY, 80, aSpec, aBaseURI); + rv = url->Init(nsIStandardURL::URLTYPE_AUTHORITY, 80, aSpec, aCharset, aBaseURI); if (NS_FAILED(rv)) return rv; return CallQueryInterface(url, aURI); diff --git a/mozilla/netwerk/protocol/jar/public/nsIJARURI.idl b/mozilla/netwerk/protocol/jar/public/nsIJARURI.idl index 30fe6ddedc5..407a0fe7487 100644 --- a/mozilla/netwerk/protocol/jar/public/nsIJARURI.idl +++ b/mozilla/netwerk/protocol/jar/public/nsIJARURI.idl @@ -18,6 +18,10 @@ #include "nsIURI.idl" +%{C++ +#include "nsAString.h" +%} + /** * JAR URLs have the following syntax * @@ -38,5 +42,5 @@ interface nsIJARURI : nsIURI { * Returns the entry specified for this JAR URI. * eg ocean.html */ - attribute string JAREntry; + attribute AUTF8String JAREntry; }; diff --git a/mozilla/netwerk/protocol/jar/src/nsJARChannel.cpp b/mozilla/netwerk/protocol/jar/src/nsJARChannel.cpp index cb43b44f887..e4b13d2b004 100644 --- a/mozilla/netwerk/protocol/jar/src/nsJARChannel.cpp +++ b/mozilla/netwerk/protocol/jar/src/nsJARChannel.cpp @@ -24,6 +24,7 @@ #include "nsCRT.h" #include "nsIFileTransportService.h" #include "nsIURI.h" +#include "nsIFileURL.h" #include "nsCExternalHandlerService.h" #include "nsIMIMEService.h" #include "nsAutoLock.h" @@ -65,7 +66,6 @@ nsJARChannel::nsJARChannel() : mLoadFlags(LOAD_NORMAL) , mContentType(nsnull) , mContentLength(-1) - , mJAREntry(nsnull) , mStatus(NS_OK) #ifdef DEBUG , mInitiator(nsnull) @@ -88,8 +88,6 @@ nsJARChannel::~nsJARChannel() { if (mContentType) nsCRT::free(mContentType); - if (mJAREntry) - nsCRT::free(mJAREntry); NS_IF_RELEASE(mJARProtocolHandler); } @@ -138,12 +136,10 @@ NS_IMETHODIMP nsJARChannel::GetName(PRUnichar* *result) { nsresult rv; - nsXPIDLCString urlStr; - rv = mURI->GetSpec(getter_Copies(urlStr)); + nsCAutoString urlStr; + rv = mURI->GetSpec(urlStr); if (NS_FAILED(rv)) return rv; - nsString name; - name.AppendWithConversion(urlStr); - *result = ToNewUnicode(name); + *result = ToNewUnicode(NS_ConvertUTF8toUCS2(urlStr)); return *result ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } @@ -301,17 +297,17 @@ nsJARChannel::EnsureJARFileAvailable() #ifdef PR_LOGGING if (PR_LOG_TEST(gJarProtocolLog, PR_LOG_DEBUG)) { - nsXPIDLCString jarURLStr; - mURI->GetSpec(getter_Copies(jarURLStr)); + nsCAutoString jarURLStr; + mURI->GetSpec(jarURLStr); PR_LOG(gJarProtocolLog, PR_LOG_DEBUG, - ("nsJarProtocol: EnsureJARFileAvailable %s", (const char*)jarURLStr)); + ("nsJarProtocol: EnsureJARFileAvailable %s", jarURLStr.get())); } #endif rv = mURI->GetJARFile(getter_AddRefs(mJARBaseURI)); if (NS_FAILED(rv)) return rv; - rv = mURI->GetJAREntry(&mJAREntry); + rv = mURI->GetJAREntry(mJAREntry); if (NS_FAILED(rv)) return rv; // try to get a nsIFile directly from the url, which will often succeed. @@ -364,10 +360,10 @@ nsJARChannel::AsyncReadJARElement() #ifdef PR_LOGGING if (PR_LOG_TEST(gJarProtocolLog, PR_LOG_DEBUG)) { - nsXPIDLCString jarURLStr; - mURI->GetSpec(getter_Copies(jarURLStr)); + nsCAutoString jarURLStr; + mURI->GetSpec(jarURLStr); PR_LOG(gJarProtocolLog, PR_LOG_DEBUG, - ("nsJarProtocol: AsyncRead jar entry %s", (const char*)jarURLStr)); + ("nsJarProtocol: AsyncRead jar entry %s", jarURLStr.get())); } #endif @@ -396,36 +392,27 @@ nsJARChannel::GetContentType(char* *aContentType) { nsresult rv = NS_OK; if (mContentType == nsnull) { - if (!mJAREntry) - return NS_ERROR_FAILURE; - char* fileName = nsCRT::strdup(mJAREntry); - if (fileName != nsnull) { - PRInt32 len = strlen(fileName); - const char* ext = nsnull; - for (PRInt32 i = len-1; i >= 0; i--) { - if (fileName[i] == '.') { - ext = &fileName[i + 1]; - break; - } + if (mJAREntry.IsEmpty()) + return NS_ERROR_NOT_AVAILABLE; + const char *ext = nsnull, *fileName = mJAREntry.get(); + PRInt32 len = mJAREntry.Length(); + for (PRInt32 i = len-1; i >= 0; i--) { + if (fileName[i] == '.') { + ext = &fileName[i + 1]; + break; } - - if (ext) { - nsIMIMEService* mimeServ = mJARProtocolHandler->GetCachedMimeService(); - if (mimeServ) { - rv = mimeServ->GetTypeFromExtension(ext, &mContentType); - } - } - else - rv = NS_ERROR_OUT_OF_MEMORY; - - nsCRT::free(fileName); - } - else { - rv = NS_ERROR_OUT_OF_MEMORY; } + if (ext) { + nsIMIMEService* mimeServ = mJARProtocolHandler->GetCachedMimeService(); + if (mimeServ) { + rv = mimeServ->GetTypeFromExtension(ext, &mContentType); + } + } + else + rv = NS_ERROR_NOT_AVAILABLE; if (NS_FAILED(rv)) { - mContentType = nsCRT::strdup(UNKNOWN_CONTENT_TYPE); + mContentType = strdup(UNKNOWN_CONTENT_TYPE); if (mContentType == nsnull) rv = NS_ERROR_OUT_OF_MEMORY; else @@ -433,7 +420,7 @@ nsJARChannel::GetContentType(char* *aContentType) } } if (NS_SUCCEEDED(rv)) { - *aContentType = nsCRT::strdup(mContentType); + *aContentType = strdup(mContentType); if (*aContentType == nsnull) rv = NS_ERROR_OUT_OF_MEMORY; } @@ -496,7 +483,7 @@ nsJARChannel::GetOwner(nsISupports* *aOwner) nsCOMPtr jar = do_QueryInterface(mJAR, &rv); NS_ASSERTION(NS_SUCCEEDED(rv), "Zip reader is not an nsIJAR"); nsCOMPtr certificate; - rv = jar->GetCertificatePrincipal(mJAREntry, + rv = jar->GetCertificatePrincipal(mJAREntry.get(), getter_AddRefs(certificate)); if (NS_FAILED(rv)) return rv; if (certificate) @@ -598,12 +585,12 @@ nsJARChannel::OnStopRequest(nsIRequest* jarExtractionTransport, nsISupports* con #ifdef PR_LOGGING if (PR_LOG_TEST(gJarProtocolLog, PR_LOG_DEBUG)) { nsCOMPtr jarURI; - nsXPIDLCString jarURLStr; - rv = mURI->GetSpec(getter_Copies(jarURLStr)); + nsCAutoString jarURLStr; + rv = mURI->GetSpec(jarURLStr); if (NS_SUCCEEDED(rv)) { PR_LOG(gJarProtocolLog, PR_LOG_DEBUG, ("nsJarProtocol: jar extraction complete %s status=%x", - (const char*)jarURLStr, aStatus)); + jarURLStr.get(), aStatus)); } } #endif @@ -666,7 +653,7 @@ nsJARChannel::Open(char* *contentType, PRInt32 *contentLength) if (NS_FAILED(rv)) return rv; nsCOMPtr entry; - rv = mJAR->GetEntry(mJAREntry, getter_AddRefs(entry)); + rv = mJAR->GetEntry(mJAREntry.get(), getter_AddRefs(entry)); if (NS_FAILED(rv)) return rv; if (contentLength) { @@ -692,14 +679,14 @@ nsJARChannel::GetInputStream(nsIInputStream* *aInputStream) { #ifdef PR_LOGGING if (PR_LOG_TEST(gJarProtocolLog, PR_LOG_DEBUG)) { - nsXPIDLCString jarURLStr; - mURI->GetSpec(getter_Copies(jarURLStr)); + nsCAutoString jarURLStr; + mURI->GetSpec(jarURLStr); PR_LOG(gJarProtocolLog, PR_LOG_DEBUG, - ("nsJarProtocol: GetInputStream jar entry %s", (const char*)jarURLStr)); + ("nsJarProtocol: GetInputStream jar entry %s", jarURLStr.get())); } #endif NS_ENSURE_TRUE(mJAR, NS_ERROR_NULL_POINTER); - nsresult rv = mJAR->GetInputStream(mJAREntry, aInputStream); + nsresult rv = mJAR->GetInputStream(mJAREntry.get(), aInputStream); if (NS_SUCCEEDED(rv)) (*aInputStream)->Available((PRUint32 *) &mContentLength); return rv; @@ -715,7 +702,11 @@ nsJARChannel::GetOutputStream(nsIOutputStream* *aOutputStream) NS_IMETHODIMP nsJARChannel::GetName(char* *aName) { - return mURI->GetSpec(aName); + nsCAutoString spec; + nsresult rv = mURI->GetSpec(spec); + if (NS_FAILED(rv)) return rv; + *aName = ToNewCString(spec); + return *aName ? NS_OK : NS_ERROR_OUT_OF_MEMORY; } //////////////////////////////////////////////////////////////////////////////// diff --git a/mozilla/netwerk/protocol/jar/src/nsJARChannel.h b/mozilla/netwerk/protocol/jar/src/nsJARChannel.h index ac9ee63e03d..654a195d0c7 100644 --- a/mozilla/netwerk/protocol/jar/src/nsJARChannel.h +++ b/mozilla/netwerk/protocol/jar/src/nsJARChannel.h @@ -55,6 +55,7 @@ #include "nsIDownloader.h" #include "nsIInputStream.h" #include "nsJARProtocolHandler.h" +#include "nsString.h" #ifdef DEBUG #include "prthread.h" @@ -116,7 +117,7 @@ protected: char* mContentType; PRInt32 mContentLength; nsCOMPtr mJARBaseURI; - char* mJAREntry; + nsCString mJAREntry; nsCOMPtr mJAR; nsCOMPtr mDownloadedJARFile; nsresult mStatus; diff --git a/mozilla/netwerk/protocol/jar/src/nsJARProtocolHandler.cpp b/mozilla/netwerk/protocol/jar/src/nsJARProtocolHandler.cpp index b45b9497a9c..9daa44628c6 100644 --- a/mozilla/netwerk/protocol/jar/src/nsJARProtocolHandler.cpp +++ b/mozilla/netwerk/protocol/jar/src/nsJARProtocolHandler.cpp @@ -44,6 +44,7 @@ #include "nsIURL.h" #include "nsJARChannel.h" #include "nsXPIDLString.h" +#include "nsString.h" #include "nsNetCID.h" #include "nsCExternalHandlerService.h" #include "nsIMIMEService.h" @@ -122,11 +123,9 @@ nsJARProtocolHandler::GetJARCache(nsIZipReaderCache* *result) // nsIProtocolHandler methods: NS_IMETHODIMP -nsJARProtocolHandler::GetScheme(char* *result) +nsJARProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("jar"); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = "jar"; return NS_OK; } @@ -148,24 +147,34 @@ nsJARProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsJARProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsJARProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, nsIURI **result) { nsresult rv = NS_OK; nsIURI* url; - rv = nsJARURI::Create(nsnull, NS_GET_IID(nsIJARURI), (void**)&url); - if (NS_FAILED(rv)) return rv; + nsJARURI *jarURI = new nsJARURI(); + if (!jarURI) + return NS_ERROR_OUT_OF_MEMORY; - if (aBaseURI) - { - nsXPIDLCString aResolvedURI; - rv = aBaseURI->Resolve(aSpec, getter_Copies(aResolvedURI)); + NS_ADDREF(url = jarURI); + + rv = jarURI->Init(aCharset); + if (NS_FAILED(rv)) { + NS_RELEASE(url); + return rv; + } + + if (aBaseURI) { + nsCAutoString aResolvedURI; + rv = aBaseURI->Resolve(aSpec, aResolvedURI); if (NS_FAILED(rv)) return rv; rv = url->SetSpec(aResolvedURI); - } else { - rv = url->SetSpec((char*)aSpec); } + else + rv = url->SetSpec(aSpec); if (NS_FAILED(rv)) { NS_RELEASE(url); diff --git a/mozilla/netwerk/protocol/jar/src/nsJARURI.cpp b/mozilla/netwerk/protocol/jar/src/nsJARURI.cpp index 9d8a694df74..aeacfe46c7e 100644 --- a/mozilla/netwerk/protocol/jar/src/nsJARURI.cpp +++ b/mozilla/netwerk/protocol/jar/src/nsJARURI.cpp @@ -26,8 +26,6 @@ #include "nsIZipReader.h" #include "nsReadableUtils.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); - //////////////////////////////////////////////////////////////////////////////// nsJARURI::nsJARURI() @@ -38,74 +36,28 @@ nsJARURI::nsJARURI() nsJARURI::~nsJARURI() { - if (mJAREntry) - nsMemory::Free(mJAREntry); } NS_IMPL_THREADSAFE_ISUPPORTS3(nsJARURI, nsIJARURI, nsIURI, nsISerializable) -NS_METHOD -nsJARURI::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) -{ - if (aOuter) - return NS_ERROR_NO_AGGREGATION; - - nsJARURI* uri = new nsJARURI(); - - if (uri == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - - NS_ADDREF(uri); - nsresult rv = uri->Init(); - - if (NS_SUCCEEDED(rv)) { - rv = uri->QueryInterface(aIID, aResult); - } - NS_RELEASE(uri); - - return rv; -} - nsresult -nsJARURI::Init() +nsJARURI::Init(const char *charsetHint) { + mCharsetHint = charsetHint; return NS_OK; } -#define NS_JAR_SCHEME "jar:" -#define NS_JAR_SCHEME_LEN (sizeof(NS_JAR_SCHEME)-1) -#define NS_JAR_DELIMITER "!/" -#define NS_JAR_DELIMITER_LEN (sizeof(NS_JAR_DELIMITER)-1) +#define NS_JAR_SCHEME NS_LITERAL_CSTRING("jar:") +#define NS_JAR_DELIMITER NS_LITERAL_CSTRING("!/") nsresult -nsJARURI::FormatSpec(const char* entryPath, char* *result) +nsJARURI::FormatSpec(const nsACString &entryPath, nsACString &result) { - char* fileSpec; - nsresult rv = mJARFile->GetSpec(&fileSpec); + nsCAutoString fileSpec; + nsresult rv = mJARFile->GetSpec(fileSpec); if (NS_FAILED(rv)) return rv; - int fileSpecLen = strlen(fileSpec); - int entryPathLen = strlen(entryPath); - - char *spec = (char *) nsMemory::Alloc(NS_JAR_SCHEME_LEN + - fileSpecLen + - NS_JAR_DELIMITER_LEN + - entryPathLen + 1); - if (!spec) - return NS_ERROR_OUT_OF_MEMORY; - - *result = spec; - - memcpy(spec, NS_JAR_SCHEME, NS_JAR_SCHEME_LEN); - spec += NS_JAR_SCHEME_LEN; - memcpy(spec, fileSpec, fileSpecLen); - spec += fileSpecLen; - memcpy(spec, NS_JAR_DELIMITER, NS_JAR_DELIMITER_LEN); - spec += NS_JAR_DELIMITER_LEN; - memcpy(spec, entryPath, entryPathLen); - spec[entryPathLen] = 0; - - nsMemory::Free(fileSpec); + result = NS_JAR_SCHEME + fileSpec + NS_JAR_DELIMITER + entryPath; return NS_OK; } @@ -130,23 +82,23 @@ nsJARURI::Write(nsIObjectOutputStream* aStream) // nsIURI methods: NS_IMETHODIMP -nsJARURI::GetSpec(char* *aSpec) +nsJARURI::GetSpec(nsACString &aSpec) { return FormatSpec(mJAREntry, aSpec); } NS_IMETHODIMP -nsJARURI::SetSpec(const char * aSpec) +nsJARURI::SetSpec(const nsACString &aSpec) { nsresult rv; - nsCOMPtr serv(do_GetService(kIOServiceCID, &rv)); + nsCOMPtr serv(do_GetIOService(&rv)); if (NS_FAILED(rv)) return rv; - PRUint32 startPos, endPos; - rv = serv->ExtractScheme(aSpec, &startPos, &endPos, nsnull); + nsCAutoString scheme; + rv = serv->ExtractScheme(aSpec, scheme); if (NS_FAILED(rv)) return rv; - if (nsCRT::strncmp("jar", &aSpec[startPos], endPos - startPos - 1) != 0) + if (strcmp("jar", scheme.get()) != 0) return NS_ERROR_MALFORMED_URI; // Search backward from the end for the "!/" delimiter. Remember, jar URLs @@ -155,97 +107,108 @@ nsJARURI::SetSpec(const char * aSpec) // This gets the b.html document from out of the a.jar file, that's // contained within the bar.jar file. - nsCAutoString jarPath(aSpec); - PRInt32 pos = jarPath.RFind(NS_JAR_DELIMITER); - startPos = (PRUint32) pos; - if (pos == -1 || endPos + 1 > startPos) + nsACString::const_iterator begin, end, delim_begin, delim_end; + aSpec.BeginReading(begin); + aSpec.EndReading(end); + + delim_begin = begin; + delim_end = end; + + if (!RFindInReadable(NS_JAR_DELIMITER, delim_begin, delim_end)) return NS_ERROR_MALFORMED_URI; - jarPath.Cut(pos, jarPath.Length()); - jarPath.Cut(0, endPos); + begin.advance(4); - rv = serv->NewURI(jarPath.get(), nsnull, getter_AddRefs(mJARFile)); + rv = serv->NewURI(Substring(begin, delim_begin), mCharsetHint.get(), nsnull, getter_AddRefs(mJARFile)); if (NS_FAILED(rv)) return rv; - PRUint32 slashChar=pos + 1; - while (aSpec[++slashChar]=='/'); + // skip over any extra '/' chars + while (*delim_end == '/') + ++delim_end; - rv = serv->ResolveRelativePath(&aSpec[slashChar], nsnull, &mJAREntry); + rv = serv->ResolveRelativePath(Substring(delim_end, end), + NS_LITERAL_CSTRING(""), + mJAREntry); return rv; } NS_IMETHODIMP -nsJARURI::GetPrePath(char* *prePath) +nsJARURI::GetPrePath(nsACString &prePath) { - *prePath = nsCRT::strdup("jar:"); - return *prePath ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + prePath = "jar:"; + return NS_OK; } NS_IMETHODIMP -nsJARURI::SetPrePath(const char* prePath) +nsJARURI::GetScheme(nsACString &aScheme) { - NS_NOTREACHED("nsJARURI::SetPrePath"); - return NS_ERROR_NOT_IMPLEMENTED; + aScheme = "jar"; + return NS_OK; } NS_IMETHODIMP -nsJARURI::GetScheme(char * *aScheme) -{ - *aScheme = nsCRT::strdup("jar"); - return *aScheme ? NS_OK : NS_ERROR_OUT_OF_MEMORY; -} - -NS_IMETHODIMP -nsJARURI::SetScheme(const char * aScheme) +nsJARURI::SetScheme(const nsACString &aScheme) { // doesn't make sense to set the scheme of a jar: URL return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::GetUsername(char * *aUsername) +nsJARURI::GetUserPass(nsACString &aUserPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetUsername(const char * aUsername) +nsJARURI::SetUserPass(const nsACString &aUserPass) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::GetPassword(char * *aPassword) +nsJARURI::GetUsername(nsACString &aUsername) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetPassword(const char * aPassword) +nsJARURI::SetUsername(const nsACString &aUsername) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::GetPreHost(char * *aPreHost) +nsJARURI::GetPassword(nsACString &aPassword) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetPreHost(const char * aPreHost) +nsJARURI::SetPassword(const nsACString &aPassword) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::GetHost(char * *aHost) +nsJARURI::GetHostPort(nsACString &aHostPort) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetHost(const char * aHost) +nsJARURI::SetHostPort(const nsACString &aHostPort) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsJARURI::GetHost(nsACString &aHost) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsJARURI::SetHost(const nsACString &aHost) { return NS_ERROR_FAILURE; } @@ -263,17 +226,36 @@ nsJARURI::SetPort(PRInt32 aPort) } NS_IMETHODIMP -nsJARURI::GetPath(char * *aPath) +nsJARURI::GetPath(nsACString &aPath) { return NS_ERROR_FAILURE; } NS_IMETHODIMP -nsJARURI::SetPath(const char * aPath) +nsJARURI::SetPath(const nsACString &aPath) { return NS_ERROR_FAILURE; } +NS_IMETHODIMP +nsJARURI::GetAsciiSpec(nsACString &aSpec) +{ + return GetSpec(aSpec); +} + +NS_IMETHODIMP +nsJARURI::GetAsciiHost(nsACString &aHost) +{ + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsJARURI::GetOriginCharset(nsACString &aOriginCharset) +{ + aOriginCharset.Truncate(); + return NS_OK; +} + NS_IMETHODIMP nsJARURI::Equals(nsIURI *other, PRBool *result) { @@ -297,12 +279,11 @@ nsJARURI::Equals(nsIURI *other, PRBool *result) if (!equal) return NS_OK; // not equal - char* otherJAREntry; - rv = otherJAR->GetJAREntry(&otherJAREntry); + nsCAutoString otherJAREntry; + rv = otherJAR->GetJAREntry(otherJAREntry); if (NS_FAILED(rv)) return rv; - *result = nsCRT::strcmp(mJAREntry, otherJAREntry) == 0; - nsCRT::free(otherJAREntry); + *result = (strcmp(mJAREntry.get(), otherJAREntry.get()) == 0); return NS_OK; } @@ -329,39 +310,31 @@ nsJARURI::Clone(nsIURI **result) rv = mJARFile->Clone(getter_AddRefs(newJARFile)); if (NS_FAILED(rv)) return rv; - char* newJAREntry = nsCRT::strdup(mJAREntry); - if (newJAREntry == nsnull) - return NS_ERROR_OUT_OF_MEMORY; - nsJARURI* uri = new nsJARURI(); if (uri == nsnull) return NS_ERROR_OUT_OF_MEMORY; NS_ADDREF(uri); uri->mJARFile = newJARFile; - uri->mJAREntry = newJAREntry; + uri->mJAREntry = mJAREntry; *result = uri; return NS_OK; } NS_IMETHODIMP -nsJARURI::Resolve(const char *relativePath, char **result) +nsJARURI::Resolve(const nsACString &relativePath, nsACString &result) { nsresult rv; - if (!relativePath) return NS_ERROR_NULL_POINTER; - - nsCOMPtr serv(do_GetService(kIOServiceCID, &rv)); + nsCOMPtr serv(do_GetIOService(&rv)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString scheme; - rv = serv->ExtractScheme(relativePath, nsnull, nsnull, getter_Copies(scheme)); + nsCAutoString scheme; + rv = serv->ExtractScheme(relativePath, scheme); if (NS_SUCCEEDED(rv)) { // then aSpec is absolute - *result = nsCRT::strdup(relativePath); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = relativePath; return NS_OK; } @@ -372,14 +345,12 @@ nsJARURI::Resolve(const char *relativePath, char **result) else path = ""; - char* resolvedEntry; - rv = serv->ResolveRelativePath(relativePath, path.get(), - &resolvedEntry); + nsCAutoString resolvedEntry; + rv = serv->ResolveRelativePath(relativePath, path, + resolvedEntry); if (NS_FAILED(rv)) return rv; - rv = FormatSpec(resolvedEntry, result); - nsCRT::free(resolvedEntry); - return rv; + return FormatSpec(resolvedEntry, result); } //////////////////////////////////////////////////////////////////////////////// @@ -401,28 +372,26 @@ nsJARURI::SetJARFile(nsIURI* jarFile) } NS_IMETHODIMP -nsJARURI::GetJAREntry(char* *entryPath) +nsJARURI::GetJAREntry(nsACString &entryPath) { - nsCAutoString entry(mJAREntry); - PRInt32 pos = entry.RFindCharInSet("#?;"); - if (pos >= 0) - entry.Truncate(pos); - *entryPath = ToNewCString(entry); - return *entryPath ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + // trim off any trailing ref, query, or param + PRInt32 pos = mJAREntry.RFindCharInSet("#?;"); + if (pos < 0) + pos = mJAREntry.Length(); + entryPath = Substring(mJAREntry, 0, pos); + return NS_OK; } NS_IMETHODIMP -nsJARURI::SetJAREntry(const char* entryPath) +nsJARURI::SetJAREntry(const nsACString &entryPath) { nsresult rv; - nsCOMPtr serv(do_GetService(kIOServiceCID, &rv)); + nsCOMPtr serv(do_GetIOService(&rv)); if (NS_FAILED(rv)) return rv; - if (mJAREntry) - nsCRT::free(mJAREntry); + mJAREntry.Truncate(); - rv = serv->ResolveRelativePath(entryPath, nsnull, &mJAREntry); - return rv; + return serv->ResolveRelativePath(entryPath, NS_LITERAL_CSTRING(""), mJAREntry); } //////////////////////////////////////////////////////////////////////////////// diff --git a/mozilla/netwerk/protocol/jar/src/nsJARURI.h b/mozilla/netwerk/protocol/jar/src/nsJARURI.h index 9d8c9358b93..695c7ed1e9e 100644 --- a/mozilla/netwerk/protocol/jar/src/nsJARURI.h +++ b/mozilla/netwerk/protocol/jar/src/nsJARURI.h @@ -22,6 +22,7 @@ #include "nsIJARURI.h" #include "nsISerializable.h" #include "nsCOMPtr.h" +#include "nsString.h" #define NS_JARURI_CID \ { /* 0xc7e410d7-0x85f2-11d3-9f63-006008a6efe9 */ \ @@ -43,15 +44,13 @@ public: nsJARURI(); virtual ~nsJARURI(); - static NS_METHOD - Create(nsISupports *aOuter, REFNSIID aIID, void **aResult); - - nsresult Init(); - nsresult FormatSpec(const char* entryPath, char* *result); + nsresult Init(const char *charsetHint); + nsresult FormatSpec(const nsACString &entryPath, nsACString &result); protected: nsCOMPtr mJARFile; - char *mJAREntry; + nsCString mJAREntry; + nsCString mCharsetHint; }; #endif // nsJARURI_h__ diff --git a/mozilla/netwerk/protocol/keyword/src/nsKeywordProtocolHandler.cpp b/mozilla/netwerk/protocol/keyword/src/nsKeywordProtocolHandler.cpp index 76c4e311905..b006f82e6d1 100644 --- a/mozilla/netwerk/protocol/keyword/src/nsKeywordProtocolHandler.cpp +++ b/mozilla/netwerk/protocol/keyword/src/nsKeywordProtocolHandler.cpp @@ -45,7 +45,7 @@ #include "nsIPref.h" #include "nsXPIDLString.h" #include "nsReadableUtils.h" -#include "nsNetCID.h" +#include "nsNetUtil.h" static NS_DEFINE_CID(kSimpleURICID, NS_SIMPLEURI_CID); static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); @@ -99,9 +99,8 @@ nsKeywordProtocolHandler::Create(nsISupports *aOuter, REFNSIID aIID, void **aRes // nsIProtocolHandler methods: NS_IMETHODIMP -nsKeywordProtocolHandler::GetScheme(char* *result) { - *result = nsCRT::strdup("keyword"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; +nsKeywordProtocolHandler::GetScheme(nsACString &result) { + result = "keyword"; return NS_OK; } @@ -163,14 +162,16 @@ MangleKeywordIntoHTTPURL(const char *aSpec, const char *aHTTPURL) { // digests a spec of the form "keyword:blah" NS_IMETHODIMP -nsKeywordProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) { +nsKeywordProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; nsIURI* uri; rv = nsComponentManager::CreateInstance(kSimpleURICID, nsnull, NS_GET_IID(nsIURI), (void**)&uri); if (NS_FAILED(rv)) return rv; - rv = uri->SetSpec((char*)aSpec); + rv = uri->SetSpec(aSpec); if (NS_FAILED(rv)) return rv; *result = uri; @@ -184,18 +185,18 @@ nsKeywordProtocolHandler::NewChannel(nsIURI* uri, nsIChannel* *result) NS_ASSERTION((mKeywordURL.Length() > 0), "someone's trying to use the keyword handler even though it hasn't been init'd"); - nsXPIDLCString path; - rv = uri->GetPath(getter_Copies(path)); + nsCAutoString path; + rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; - char *httpSpec = MangleKeywordIntoHTTPURL(path, mKeywordURL.get()); + char *httpSpec = MangleKeywordIntoHTTPURL(path.get(), mKeywordURL.get()); if (!httpSpec) return NS_ERROR_OUT_OF_MEMORY; - nsCOMPtr serv(do_GetService(kIOServiceCID, &rv)); + nsCOMPtr serv(do_GetIOService(&rv)); if (NS_FAILED(rv)) return rv; // now we have an HTTP url, give the user an HTTP channel - rv = serv->NewChannel(httpSpec, nsnull, result); + rv = serv->NewChannel(nsDependentCString(httpSpec), nsnull, nsnull, result); nsMemory::Free(httpSpec); return rv; diff --git a/mozilla/netwerk/protocol/res/public/nsIResProtocolHandler.idl b/mozilla/netwerk/protocol/res/public/nsIResProtocolHandler.idl index 9b4d0acd131..09fc62f2298 100644 --- a/mozilla/netwerk/protocol/res/public/nsIResProtocolHandler.idl +++ b/mozilla/netwerk/protocol/res/public/nsIResProtocolHandler.idl @@ -38,6 +38,10 @@ #include "nsIProtocolHandler.idl" +%{C++ +#include "nsAString.h" +%} + [scriptable, uuid(d12c08c6-9ef6-11d3-8cda-0060b0fc14a3)] interface nsIResProtocolHandler : nsIProtocolHandler { @@ -55,7 +59,7 @@ interface nsIResProtocolHandler : nsIProtocolHandler /** * Gets the substitution for the root key. * - * @returns NS_ERROR_NOT_AVAILABLE if none exists. + * @throws NS_ERROR_NOT_AVAILABLE if none exists. */ nsIURI getSubstitution(in string root); @@ -69,7 +73,7 @@ interface nsIResProtocolHandler : nsIProtocolHandler * guaranteed to reference a resource that exists (ie. opening a channel to * the resolved URI may fail). * - * @returns NS_ERROR_NOT_AVAILABLE if resURI.host() is an unknown root key. + * @throws NS_ERROR_NOT_AVAILABLE if resURI.host() is an unknown root key. */ - string resolveURI(in nsIURI resURI); + AUTF8String resolveURI(in nsIURI resURI); }; diff --git a/mozilla/netwerk/protocol/res/src/Makefile.in b/mozilla/netwerk/protocol/res/src/Makefile.in index 663c625ad10..865ac163680 100644 --- a/mozilla/netwerk/protocol/res/src/Makefile.in +++ b/mozilla/netwerk/protocol/res/src/Makefile.in @@ -30,6 +30,7 @@ MODULE = necko LIBRARY_NAME = nkres_s REQUIRES = xpcom \ string \ + uconv \ $(NULL) CPPSRCS = \ diff --git a/mozilla/netwerk/protocol/res/src/makefile.win b/mozilla/netwerk/protocol/res/src/makefile.win index c5ed15b1e93..4fcf8ab8d35 100644 --- a/mozilla/netwerk/protocol/res/src/makefile.win +++ b/mozilla/netwerk/protocol/res/src/makefile.win @@ -23,6 +23,7 @@ DEPTH=..\..\..\.. MODULE=necko REQUIRES = xpcom \ string \ + uconv \ $(NULL) LIBRARY_NAME=nkres_s diff --git a/mozilla/netwerk/protocol/res/src/nsResProtocolHandler.cpp b/mozilla/netwerk/protocol/res/src/nsResProtocolHandler.cpp index bc1102ba5b9..aafbb98c64a 100644 --- a/mozilla/netwerk/protocol/res/src/nsResProtocolHandler.cpp +++ b/mozilla/netwerk/protocol/res/src/nsResProtocolHandler.cpp @@ -87,8 +87,8 @@ nsResURL::GetFile(nsIFile **result) NS_ENSURE_TRUE(gResHandler, NS_ERROR_NOT_AVAILABLE); - nsXPIDLCString spec; - rv = gResHandler->ResolveURI(this, getter_Copies(spec)); + nsCAutoString spec; + rv = gResHandler->ResolveURI(this, spec); if (NS_FAILED(rv)) return rv; nsCOMPtr localFile = @@ -188,12 +188,9 @@ NS_IMPL_THREADSAFE_ISUPPORTS3(nsResProtocolHandler, //---------------------------------------------------------------------------- NS_IMETHODIMP -nsResProtocolHandler::GetScheme(char **result) +nsResProtocolHandler::GetScheme(nsACString &result) { - NS_ENSURE_ARG_POINTER(result); - *result = nsCRT::strdup("resource"); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = "resource"; return NS_OK; } @@ -212,7 +209,9 @@ nsResProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsResProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsResProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, nsIURI **result) { nsresult rv; @@ -223,7 +222,7 @@ nsResProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, return NS_ERROR_OUT_OF_MEMORY; NS_ADDREF(resURL); - rv = resURL->Init(nsIStandardURL::URLTYPE_STANDARD, -1, aSpec, aBaseURI); + rv = resURL->Init(nsIStandardURL::URLTYPE_STANDARD, -1, aSpec, aCharset, aBaseURI); if (NS_SUCCEEDED(rv)) rv = CallQueryInterface(resURL, result); NS_RELEASE(resURL); @@ -234,12 +233,12 @@ NS_IMETHODIMP nsResProtocolHandler::NewChannel(nsIURI* uri, nsIChannel* *result) { nsresult rv; - nsXPIDLCString spec; + nsCAutoString spec; - rv = ResolveURI(uri, getter_Copies(spec)); + rv = ResolveURI(uri, spec); if (NS_FAILED(rv)) return rv; - rv = mIOService->NewChannel(spec, nsnull, result); + rv = mIOService->NewChannel(spec, nsnull, nsnull, result); if (NS_FAILED(rv)) return rv; return (*result)->SetOriginalURI(uri); @@ -293,29 +292,33 @@ nsResProtocolHandler::HasSubstitution(const char *root, PRBool *result) } NS_IMETHODIMP -nsResProtocolHandler::ResolveURI(nsIURI *uri, char **result) +nsResProtocolHandler::ResolveURI(nsIURI *uri, nsACString &result) { nsresult rv; - nsXPIDLCString host, path; + nsCAutoString host; + nsCAutoString path; - rv = uri->GetHost(getter_Copies(host)); + rv = uri->GetAsciiHost(host); if (NS_FAILED(rv)) return rv; - rv = uri->GetPath(getter_Copies(path)); + rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; nsCOMPtr baseURI; rv = GetSubstitution(host.get() ? host.get() : "", getter_AddRefs(baseURI)); if (NS_FAILED(rv)) return rv; - const char *p = path.get(); // be nice to the AIX and OS/2 compilers - rv = baseURI->Resolve(p[0] == '/' ? p+1 : p, result); + const char *p = path.get(); + if (path[0] == '/') + p++; + + rv = baseURI->Resolve(nsDependentCString(p), result); #if defined(PR_LOGGING) if (PR_LOG_TEST(gResLog, PR_LOG_DEBUG)) { - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); - LOG(("%s\n -> %s\n", spec.get(), *result)); + nsCAutoString spec; + uri->GetAsciiSpec(spec); + LOG(("%s\n -> %s\n", spec.get(), PromiseFlatCString(result).get())); } #endif return rv; diff --git a/mozilla/netwerk/protocol/viewsource/src/nsViewSourceChannel.cpp b/mozilla/netwerk/protocol/viewsource/src/nsViewSourceChannel.cpp index 992dca132e2..c3044083d3e 100644 --- a/mozilla/netwerk/protocol/viewsource/src/nsViewSourceChannel.cpp +++ b/mozilla/netwerk/protocol/viewsource/src/nsViewSourceChannel.cpp @@ -73,14 +73,14 @@ nsViewSourceChannel::Init(nsIURI* uri) { nsresult rv; - nsXPIDLCString path; - rv = uri->GetPath(getter_Copies(path)); + nsCAutoString path; + rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; - nsCOMPtr pService(do_GetService(NS_IOSERVICE_CONTRACTID, &rv)); + nsCOMPtr pService(do_GetIOService(&rv)); if (NS_FAILED(rv)) return rv; - rv = pService->NewChannel(path, nsnull, getter_AddRefs(mChannel)); + rv = pService->NewChannel(path, nsnull, nsnull, getter_AddRefs(mChannel)); mHttpChannel = do_QueryInterface(mChannel); mCachingChannel = do_QueryInterface(mChannel); mUploadChannel = do_QueryInterface(mChannel); diff --git a/mozilla/netwerk/protocol/viewsource/src/nsViewSourceHandler.cpp b/mozilla/netwerk/protocol/viewsource/src/nsViewSourceHandler.cpp index 3bf2c7e76e1..45678ec5066 100644 --- a/mozilla/netwerk/protocol/viewsource/src/nsViewSourceHandler.cpp +++ b/mozilla/netwerk/protocol/viewsource/src/nsViewSourceHandler.cpp @@ -76,9 +76,8 @@ nsViewSourceHandler::Create(nsISupports *aOuter, REFNSIID aIID, void **aResult) // nsIProtocolHandler methods: NS_IMETHODIMP -nsViewSourceHandler::GetScheme(char* *result) { - *result = nsCRT::strdup("view-source"); - if (!*result) return NS_ERROR_OUT_OF_MEMORY; +nsViewSourceHandler::GetScheme(nsACString &result) { + result = "view-source"; return NS_OK; } @@ -95,14 +94,16 @@ nsViewSourceHandler::GetProtocolFlags(PRUint32 *result) { } NS_IMETHODIMP -nsViewSourceHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, - nsIURI **result) { +nsViewSourceHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, + nsIURI **result) { nsresult rv; nsIURI* uri; rv = nsComponentManager::CreateInstance(kSimpleURICID, nsnull, NS_GET_IID(nsIURI), (void**)&uri); if (NS_FAILED(rv)) return rv; - rv = uri->SetSpec((char*)aSpec); + rv = uri->SetSpec(aSpec); if (NS_FAILED(rv)) return rv; *result = uri; diff --git a/mozilla/netwerk/streamconv/converters/mozTXTToHTMLConv.cpp b/mozilla/netwerk/streamconv/converters/mozTXTToHTMLConv.cpp index 77dfa420305..c02226a8102 100644 --- a/mozilla/netwerk/streamconv/converters/mozTXTToHTMLConv.cpp +++ b/mozilla/netwerk/streamconv/converters/mozTXTToHTMLConv.cpp @@ -371,14 +371,9 @@ mozTXTToHTMLConv::CheckURLAndCreateHTML( if (NS_FAILED(rv) || !mIOService) return PR_FALSE; - char* specStr = ToNewCString(txtURL); //I18N this forces a single byte char - if (specStr == nsnull) - return PR_FALSE; - // it would be faster if we could just check to see if there is a protocol // handler for the url and return instead of actually trying to create a url... - rv = mIOService->NewURI(specStr, nsnull, getter_AddRefs(uri)); - Recycle(specStr); + rv = mIOService->NewURI(NS_ConvertUCS2toUTF8(txtURL), nsnull, nsnull, getter_AddRefs(uri)); // Real work if (NS_SUCCEEDED(rv) && uri) diff --git a/mozilla/netwerk/streamconv/converters/nsBinHexDecoder.cpp b/mozilla/netwerk/streamconv/converters/nsBinHexDecoder.cpp index 96755969f11..f0ce9322ac0 100644 --- a/mozilla/netwerk/streamconv/converters/nsBinHexDecoder.cpp +++ b/mozilla/netwerk/streamconv/converters/nsBinHexDecoder.cpp @@ -539,11 +539,11 @@ nsresult nsBinHexDecoder::SetContentType(nsIRequest * aRequest, const char * fil nsCOMPtr url = do_QueryInterface(uri); if (url) { - nsXPIDLCString fileExt; - rv = url->GetFileExtension(getter_Copies(fileExt)); - if (NS_SUCCEEDED(rv) && *(fileExt.get())) + nsCAutoString fileExt; + rv = url->GetFileExtension(fileExt); + if (NS_SUCCEEDED(rv) && !fileExt.IsEmpty()) { - rv = mimeService->GetTypeFromExtension(fileExt, getter_Copies(contentType)); + rv = mimeService->GetTypeFromExtension(fileExt.get(), getter_Copies(contentType)); if (NS_SUCCEEDED(rv) && *(contentType.get())) mContentType = contentType; } diff --git a/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.cpp b/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.cpp index ba375a6be20..8d0bc78b6f1 100644 --- a/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.cpp +++ b/mozilla/netwerk/streamconv/converters/nsFTPDirListingConv.cpp @@ -389,18 +389,19 @@ nsFTPDirListingConv::GetHeaders(nsAWritableCString& headers, headers.Append("300: "); // Bug 111117 - don't print the password - nsXPIDLCString pw,spec; - uri->GetPassword(getter_Copies(pw)); + nsCAutoString pw; + nsCAutoString spec; + uri->GetPassword(pw); if (!pw.IsEmpty()) { - rv = uri->SetPassword(nsnull); + rv = uri->SetPassword(NS_LITERAL_CSTRING("")); if (NS_FAILED(rv)) return rv; - rv = uri->GetSpec(getter_Copies(spec)); + rv = uri->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; headers.Append(spec); rv = uri->SetPassword(pw); if (NS_FAILED(rv)) return rv; } else { - rv = uri->GetSpec(getter_Copies(spec)); + rv = uri->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; headers.Append(spec); diff --git a/mozilla/netwerk/streamconv/converters/nsGopherDirListingConv.cpp b/mozilla/netwerk/streamconv/converters/nsGopherDirListingConv.cpp index 3a9aac1865e..48127aeb353 100644 --- a/mozilla/netwerk/streamconv/converters/nsGopherDirListingConv.cpp +++ b/mozilla/netwerk/streamconv/converters/nsGopherDirListingConv.cpp @@ -71,11 +71,11 @@ nsGopherDirListingConv::Convert(nsIInputStream *aFromStream, NS_ASSERTION(aCtxt, "Gopher dir conversion needs the context"); // build up the 300: line - nsXPIDLCString spec; + nsCAutoString spec; mUri = do_QueryInterface(aCtxt, &rv); if (NS_FAILED(rv)) return rv; - rv = mUri->GetSpec(getter_Copies(spec)); + rv = mUri->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; convertedData.Append("300: "); @@ -178,14 +178,14 @@ nsGopherDirListingConv::OnDataAvailable(nsIRequest *request, if (!mSentHeading) { // build up the 300: line - nsXPIDLCString spec; - rv = mUri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = mUri->GetAsciiSpec(spec); if (NS_FAILED(rv)) return rv; //printf("spec is %s\n",spec.get()); indexFormat.Append("300: "); - indexFormat.Append(spec.get()); + indexFormat.Append(spec); indexFormat.Append(char(nsCRT::LF)); // END 300: diff --git a/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.cpp b/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.cpp index 02a60d6fcd4..3c1d2952498 100644 --- a/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.cpp +++ b/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.cpp @@ -38,6 +38,7 @@ #include "nsIndexedToHTML.h" #include "nsNetUtil.h" #include "nsIStringStream.h" +#include "nsIFileURL.h" #include "nsEscape.h" #include "nsIDirIndex.h" #include "prtime.h" @@ -121,11 +122,10 @@ nsIndexedToHTML::OnStartRequest(nsIRequest* request, nsISupports *aContext) { rv = mParser->OnStartRequest(request, aContext); if (NS_FAILED(rv)) return rv; - nsXPIDLCString tmp; - rv = uri->GetSpec(getter_Copies(tmp)); + nsCAutoString baseUri; + rv = uri->GetAsciiSpec(baseUri); if (NS_FAILED(rv)) return rv; - nsCString baseUri(tmp); nsCString parentStr; // XXX - should be using the 300: line from the parser. @@ -162,8 +162,8 @@ nsIndexedToHTML::OnStartRequest(nsIRequest* request, nsISupports *aContext) { rv = fileUrl->GetFile(getter_AddRefs(file)); if (NS_FAILED(rv)) return rv; - nsXPIDLCString url; - rv = NS_GetURLSpecFromFile(file, getter_Copies(url)); + nsCAutoString url; + rv = NS_GetURLSpecFromFile(file, url); if (NS_FAILED(rv)) return rv; baseUri.Assign(url); @@ -171,7 +171,7 @@ nsIndexedToHTML::OnStartRequest(nsIRequest* request, nsISupports *aContext) { rv = file->GetParent(getter_AddRefs(parent)); if (NS_FAILED(rv)) return rv; if (parent) { - NS_GetURLSpecFromFile(parent, getter_Copies(url)); + NS_GetURLSpecFromFile(parent, url); if (NS_FAILED(rv)) return rv; parentStr.Assign(url); } diff --git a/mozilla/netwerk/test/TestCachePerformance.js b/mozilla/netwerk/test/TestCachePerformance.js index 4cabcd1e43c..36e772aea2d 100644 --- a/mozilla/netwerk/test/TestCachePerformance.js +++ b/mozilla/netwerk/test/TestCachePerformance.js @@ -49,7 +49,7 @@ function getIOService() function downloadHTTP(spec) { var ioService = getIOService(); - var uri = ioService.newURI(spec, null); + var uri = ioService.newURI(spec, null, null); var channel = ioService.newChannelFromURI(uri); var input = wrapInputStream(channel.open()); var data = input.read(input.available()); diff --git a/mozilla/netwerk/test/TestHttp.cpp b/mozilla/netwerk/test/TestHttp.cpp index 5f0d4a5a208..6ff016976fe 100644 --- a/mozilla/netwerk/test/TestHttp.cpp +++ b/mozilla/netwerk/test/TestHttp.cpp @@ -160,7 +160,7 @@ int main(int argc, char **argv) rv = NS_NewURI(getter_AddRefs(uri), argv[1]); RETURN_IF_FAILED(rv, "NS_NewURI"); - rv = NS_OpenURI(getter_AddRefs(chan), uri, nsnull, nsnull, callbacks); + rv = NS_NewChannel(getter_AddRefs(chan), uri, nsnull, nsnull, callbacks); RETURN_IF_FAILED(rv, "NS_OpenURI"); rv = chan->AsyncOpen(listener, nsnull); diff --git a/mozilla/netwerk/test/TestPageLoad.cpp b/mozilla/netwerk/test/TestPageLoad.cpp index 0bbdbfa177d..4a66c008294 100644 --- a/mozilla/netwerk/test/TestPageLoad.cpp +++ b/mozilla/netwerk/test/TestPageLoad.cpp @@ -329,8 +329,8 @@ nsresult auxLoad(char *uriBuf) } printf("\n"); uriList->AppendElement(uri); - rv = NS_OpenURI(getter_AddRefs(chan), uri, nsnull, nsnull, callbacks); - RETURN_IF_FAILED(rv, "NS_OpenURI"); + rv = NS_NewChannel(getter_AddRefs(chan), uri, nsnull, nsnull, callbacks); + RETURN_IF_FAILED(rv, "NS_NewChannel"); gKeepRunning++; rv = chan->AsyncOpen(listener, myBool); @@ -384,7 +384,7 @@ int main(int argc, char **argv) rv = NS_NewURI(getter_AddRefs(baseURI), argv[1]); RETURN_IF_FAILED(rv, "NS_NewURI"); - rv = NS_OpenURI(getter_AddRefs(chan), baseURI, nsnull, nsnull, callbacks); + rv = NS_NewChannel(getter_AddRefs(chan), baseURI, nsnull, nsnull, callbacks); RETURN_IF_FAILED(rv, "NS_OpenURI"); gKeepRunning++; diff --git a/mozilla/netwerk/test/TestPerf.cpp b/mozilla/netwerk/test/TestPerf.cpp index 8a1e1e4f2e0..4bf4571d12e 100644 --- a/mozilla/netwerk/test/TestPerf.cpp +++ b/mozilla/netwerk/test/TestPerf.cpp @@ -18,8 +18,8 @@ load_sync_1(nsISupports *element, void *data) rv = NS_OpenURI(getter_AddRefs(stream), uri, gIOService); if (NS_FAILED(rv)) { - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + uri->GetAsciiSpec(spec); fprintf(stderr, "*** failed opening %s [rv=%x]\n", spec.get(), rv); return PR_TRUE; } diff --git a/mozilla/netwerk/test/TestProtocols.cpp b/mozilla/netwerk/test/TestProtocols.cpp index da102fcc3eb..9df89f5e605 100644 --- a/mozilla/netwerk/test/TestProtocols.cpp +++ b/mozilla/netwerk/test/TestProtocols.cpp @@ -433,7 +433,7 @@ nsresult StartLoadingURL(const char* aUrlString) if (pService) { nsCOMPtr pURL; - rv = pService->NewURI(aUrlString, nsnull, getter_AddRefs(pURL)); + rv = pService->NewURI(nsDependentCString(aUrlString), nsnull, nsnull, getter_AddRefs(pURL)); if (NS_FAILED(rv)) { printf("ERROR: NewURI failed for %s\n", aUrlString); return rv; @@ -448,9 +448,9 @@ nsresult StartLoadingURL(const char* aUrlString) NS_ADDREF(callbacks); // Async reading thru the calls of the event sink interface - rv = NS_OpenURI(getter_AddRefs(pChannel), pURL, pService, - nsnull, // loadGroup - callbacks); // notificationCallbacks + rv = NS_NewChannel(getter_AddRefs(pChannel), pURL, pService, + nsnull, // loadGroup + callbacks); // notificationCallbacks NS_RELEASE(callbacks); if (NS_FAILED(rv)) { printf("ERROR: NS_OpenURI failed for %s\n", aUrlString); diff --git a/mozilla/netwerk/test/TestStandardURL.cpp b/mozilla/netwerk/test/TestStandardURL.cpp index 5d9cec4ac74..ab9465076ee 100644 --- a/mozilla/netwerk/test/TestStandardURL.cpp +++ b/mozilla/netwerk/test/TestStandardURL.cpp @@ -4,10 +4,10 @@ #include "nsNetCID.h" #include "nsIURL.h" #include "prinrval.h" -#include "nsXPIDLString.h" +#include "nsString.h" static nsIURL *test_url = 0; -static const char *test_param = 0; +static nsCString test_param; static void run_test(const char *testname, int count, void (* testfunc)()) { @@ -27,59 +27,59 @@ static void set_spec_test() static void get_spec_test() { - nsXPIDLCString spec; - test_url->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + test_url->GetSpec(spec); } static void resolve_test() { - nsXPIDLCString spec; - test_url->Resolve("foo.html?q=45", getter_Copies(spec)); + nsCAutoString spec; + test_url->Resolve(NS_LITERAL_CSTRING("foo.html?q=45"), spec); } static void set_scheme_test() { - test_url->SetScheme("foo"); + test_url->SetScheme(NS_LITERAL_CSTRING("foo")); } static void get_scheme_test() { - nsXPIDLCString scheme; - test_url->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + test_url->GetScheme(scheme); } static void host_test() { - nsXPIDLCString host; - test_url->GetHost(getter_Copies(host)); - test_url->SetHost("www.yahoo.com"); + nsCAutoString host; + test_url->GetHost(host); + test_url->SetHost(NS_LITERAL_CSTRING("www.yahoo.com")); test_url->SetHost(host); } static void set_path_test() { - test_url->SetPath("/some-path/one-the-net/about.html?with-a-query#for-you"); + test_url->SetPath(NS_LITERAL_CSTRING("/some-path/one-the-net/about.html?with-a-query#for-you")); } static void get_path_test() { - nsXPIDLCString path; - test_url->GetPath(getter_Copies(path)); + nsCAutoString path; + test_url->GetPath(path); } static void query_test() { - nsXPIDLCString query; - test_url->GetQuery(getter_Copies(query)); - test_url->SetQuery("a=b&d=c&what-ever-you-want-to-be-called=45"); + nsCAutoString query; + test_url->GetQuery(query); + test_url->SetQuery(NS_LITERAL_CSTRING("a=b&d=c&what-ever-you-want-to-be-called=45")); test_url->SetQuery(query); } static void ref_test() { - nsXPIDLCString ref; - test_url->GetRef(getter_Copies(ref)); - test_url->SetRef("#some-book-mark"); + nsCAutoString ref; + test_url->GetRef(ref); + test_url->SetRef(NS_LITERAL_CSTRING("#some-book-mark")); test_url->SetRef(ref); } diff --git a/mozilla/netwerk/test/urltest.cpp b/mozilla/netwerk/test/urltest.cpp index 3d6f3d89015..851d67c8c51 100644 --- a/mozilla/netwerk/test/urltest.cpp +++ b/mozilla/netwerk/test/urltest.cpp @@ -87,7 +87,7 @@ nsresult writeoutto(const char* i_pURL, char** o_Result, PRInt32 urlFactory = UR return NS_ERROR_FAILURE; } pURL = url; - pURL->SetSpec((char*)i_pURL); + pURL->SetSpec(nsDependentCString(i_pURL)); break; } case URL_FACTORY_DEFAULT: { @@ -98,7 +98,7 @@ nsresult writeoutto(const char* i_pURL, char** o_Result, PRInt32 urlFactory = UR cout << "Service failed!" << endl; return NS_ERROR_FAILURE; } - result = pService->NewURI(i_pURL, nsnull, getter_AddRefs(pURL)); + result = pService->NewURI(nsDependentCString(i_pURL), nsnull, nsnull, getter_AddRefs(pURL)); } } @@ -106,44 +106,47 @@ nsresult writeoutto(const char* i_pURL, char** o_Result, PRInt32 urlFactory = UR if (NS_SUCCEEDED(result)) { nsCOMPtr tURL = do_QueryInterface(pURL); - nsXPIDLCString temp; + nsCAutoString temp; PRInt32 port; + nsresult rv; - tURL->GetScheme(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; +#define RESULT() NS_SUCCEEDED(rv) ? temp.get() : "" + + rv = tURL->GetScheme(temp); + output += RESULT(); output += ','; - tURL->GetUsername(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetUsername(temp); + output += RESULT(); output += ','; - tURL->GetPassword(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetPassword(temp); + output += RESULT(); output += ','; - tURL->GetHost(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetHost(temp); + output += RESULT(); output += ','; - tURL->GetPort(&port); + rv = tURL->GetPort(&port); output.AppendInt(port); output += ','; - tURL->GetDirectory(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetDirectory(temp); + output += RESULT(); output += ','; - tURL->GetFileBaseName(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetFileBaseName(temp); + output += RESULT(); output += ','; - tURL->GetFileExtension(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetFileExtension(temp); + output += RESULT(); output += ','; - tURL->GetParam(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetParam(temp); + output += RESULT(); output += ','; - tURL->GetQuery(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetQuery(temp); + output += RESULT(); output += ','; - tURL->GetRef(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetRef(temp); + output += RESULT(); output += ','; - tURL->GetSpec(getter_Copies(temp)); - output += temp ? (const char*)temp : ""; + rv = tURL->GetSpec(temp); + output += RESULT(); *o_Result = ToNewCString(output); } else { output = "Can not create URL"; @@ -250,25 +253,25 @@ nsresult makeAbsTest(const char* i_BaseURI, const char* relativePortion, cout << "CreateInstance failed" << endl; return status; } - status = baseURL->SetSpec((char*)i_BaseURI); + status = baseURL->SetSpec(nsDependentCString(i_BaseURI)); if (NS_FAILED(status)) return status; // get the new spec - nsXPIDLCString newURL; - status = baseURL->Resolve(relativePortion, getter_Copies(newURL)); + nsCAutoString newURL; + status = baseURL->Resolve(nsDependentCString(relativePortion), newURL); if (NS_FAILED(status)) return status; - nsXPIDLCString temp; - baseURL->GetSpec(getter_Copies(temp)); + nsCAutoString temp; + baseURL->GetSpec(temp); - cout << "Analyzing " << temp << endl; + cout << "Analyzing " << temp.get() << endl; cout << "With " << relativePortion << endl; - cout << "Got " << newURL << endl; + cout << "Got " << newURL.get() << endl; if (expectedResult) { cout << "Expect " << expectedResult << endl; - int res = PL_strcmp(newURL, expectedResult); + int res = PL_strcmp(newURL.get(), expectedResult); if (res == 0) { cout << "\tPASSED" << endl << endl; return NS_OK; diff --git a/mozilla/parser/htmlparser/robot/nsDebugRobot.cpp b/mozilla/parser/htmlparser/robot/nsDebugRobot.cpp index 127cb73dc25..8340d4fbc12 100644 --- a/mozilla/parser/htmlparser/robot/nsDebugRobot.cpp +++ b/mozilla/parser/htmlparser/robot/nsDebugRobot.cpp @@ -263,17 +263,15 @@ extern "C" NS_EXPORT int DebugRobot( if (NS_FAILED(rv)) return rv; nsIURI *uri = nsnull; - char *uriStr = ToNewCString(*urlName); - if (!uriStr) return NS_ERROR_OUT_OF_MEMORY; - rv = service->NewURI(uriStr, nsnull, &uri); - nsCRT::free(uriStr); + NS_ConvertUCS2toUTF8 uriStr(*urlName); + rv = service->NewURI(uriStr, nsnull, nsnull, &uri); if (NS_FAILED(rv)) return rv; rv = uri->QueryInterface(NS_GET_IID(nsIURI), (void**)&url); NS_RELEASE(uri); if (NS_OK != rv) { printf("invalid URL: '"); - fputs(NS_LossyConvertUCS2toASCII(*urlName).get(), stdout); + fputs(uriStr.get(), stdout); printf("'\n"); NS_RELEASE(myObserver); return -1; @@ -321,10 +319,9 @@ extern "C" NS_EXPORT int DebugRobot( parser->Parse(url, nsnull,PR_TRUE);/* XXX hook up stream listener here! */ while (!g_bReadyForNextUrl) { if (yieldProc != NULL) { - char* spec; - (void)url->GetSpec(&spec); - (*yieldProc)(spec); - nsCRT::free(spec); + nsCAutoString spec; + (void)url->GetSpec(spec); + (*yieldProc)(spec.get()); } } g_bReadyForNextUrl = PR_FALSE; @@ -334,10 +331,9 @@ extern "C" NS_EXPORT int DebugRobot( (void) progress->AddProgressListener(pl); - char* spec; - (void)url->GetSpec(&spec); - nsAutoString theSpec; theSpec.AssignWithConversion(spec); - nsCRT::free(spec); + nsCAutoString spec; + (void)url->GetSpec(spec); + NS_ConvertUTF8toUCS2 theSpec(spec); nsCOMPtr webNav(do_QueryInterface(docShell)); webNav->LoadURI(theSpec.get(), nsIWebNavigation::LOAD_FLAGS_NONE, @@ -346,9 +342,8 @@ extern "C" NS_EXPORT int DebugRobot( nsnull);/* XXX hook up stream listener here! */ while (!g_bReadyForNextUrl) { if (yieldProc != NULL) { - (void)url->GetSpec(&spec); - (*yieldProc)(spec); - nsCRT::free(spec); + (void)url->GetSpec(spec); + (*yieldProc)(spec.get()); } } } diff --git a/mozilla/parser/htmlparser/robot/nsRobotSink.cpp b/mozilla/parser/htmlparser/robot/nsRobotSink.cpp index e08f2a76fdb..8edc59542a0 100644 --- a/mozilla/parser/htmlparser/robot/nsRobotSink.cpp +++ b/mozilla/parser/htmlparser/robot/nsRobotSink.cpp @@ -368,10 +368,8 @@ void RobotSink::ProcessLink(const nsString& aLink) rv = mDocumentURL->QueryInterface(NS_GET_IID(nsIURI), (void**)&baseUri); if (NS_FAILED(rv)) return; - char *uriStr = ToNewCString(aLink); - if (!uriStr) return; - rv = service->NewURI(uriStr, baseUri, &uri); - nsCRT::free(uriStr); + NS_ConvertUCS2toUTF8 uriStr(aLink); + rv = service->NewURI(uriStr, nsnull, baseUri, &uri); NS_RELEASE(baseUri); if (NS_FAILED(rv)) return; @@ -380,10 +378,9 @@ void RobotSink::ProcessLink(const nsString& aLink) if (NS_OK == rv) { absURLSpec.Truncate(); - char* str; - absurl->GetSpec(&str); - absURLSpec.AssignWithConversion(str); - nsCRT::free(str); + nsCAutoString str; + absurl->GetSpec(str); + absURLSpec = NS_ConvertUTF8toUCS2(str); } } diff --git a/mozilla/parser/htmlparser/src/nsExpatDriver.cpp b/mozilla/parser/htmlparser/src/nsExpatDriver.cpp index 3512d4992bc..88e4957c7c4 100644 --- a/mozilla/parser/htmlparser/src/nsExpatDriver.cpp +++ b/mozilla/parser/htmlparser/src/nsExpatDriver.cpp @@ -457,7 +457,7 @@ IsLoadableDTD(const XML_Char* aFPIStr, nsCOMPtr* aDTD) // exists in the special DTD directory if (!isLoadable) { // try to see if we can map the public ID to a known local DTD - nsXPIDLCString fileName; + nsCAutoString fileName; if (aFPIStr) { RemapDTD(aFPIStr, fileName); } @@ -471,7 +471,7 @@ IsLoadableDTD(const XML_Char* aFPIStr, nsCOMPtr* aDTD) if (NS_FAILED(res)) { return PR_FALSE; } - res = dtdURL->GetFileName(getter_Copies(fileName)); + res = dtdURL->GetFileName(fileName); if (NS_FAILED(res) || fileName.IsEmpty()) { return PR_FALSE; } @@ -483,7 +483,7 @@ IsLoadableDTD(const XML_Char* aFPIStr, nsCOMPtr* aDTD) // Set aDTD to a file: url pointing to the local DTD nsFileURL dtdFile(dtdPath); nsCOMPtr dtdURI; - NS_NewURI(getter_AddRefs(dtdURI), dtdFile.GetURLString()); + NS_NewURI(getter_AddRefs(dtdURI), nsDependentCString(dtdFile.GetURLString())); if (dtdURI) { *aDTD = dtdURI; isLoadable = PR_TRUE; @@ -503,16 +503,16 @@ nsExpatDriver::OpenInputStream(const XML_Char* aFPIStr, { nsresult rv; nsCOMPtr baseURI; - rv = NS_NewURI(getter_AddRefs(baseURI), NS_ConvertUCS2toUTF8((const PRUnichar*)aBaseURL).get()); + rv = NS_NewURI(getter_AddRefs(baseURI), NS_ConvertUCS2toUTF8((const PRUnichar*)aBaseURL)); if (NS_SUCCEEDED(rv) && baseURI) { nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUCS2toUTF8((const PRUnichar*)aURLStr).get(), baseURI); + rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUCS2toUTF8((const PRUnichar*)aURLStr), nsnull, baseURI); if (NS_SUCCEEDED(rv) && uri) { if (IsLoadableDTD(aFPIStr, address_of(uri))) { rv = NS_OpenURI(in, uri); - nsXPIDLCString absURL; - uri->GetSpec(getter_Copies(absURL)); - CopyASCIItoUCS2(absURL, aAbsURL); + nsCAutoString absURL; + uri->GetSpec(absURL); + aAbsURL = NS_ConvertUTF8toUCS2(absURL); } else { rv = NS_ERROR_NOT_IMPLEMENTED; @@ -722,7 +722,6 @@ NS_IMETHODIMP nsExpatDriver::ConsumeToken(nsScanner& aScanner, PRBool& aFlushTokens) { - // Ask the scanner to send us all the data it has // scanned and pass that data to expat. diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp index 08868cc4508..686cd9c071a 100644 --- a/mozilla/parser/htmlparser/src/nsParser.cpp +++ b/mozilla/parser/htmlparser/src/nsParser.cpp @@ -1594,13 +1594,12 @@ nsresult nsParser::Parse(nsIURI* aURL,nsIRequestObserver* aListener,PRBool aVeri } if(aURL) { - char* spec; - nsresult rv = aURL->GetSpec(&spec); + nsCAutoString spec; + nsresult rv = aURL->GetSpec(spec); if (rv != NS_OK) { return rv; } NS_ConvertUTF8toUCS2 theName(spec); - nsCRT::free(spec); nsScanner* theScanner=new nsScanner(theName,PR_FALSE,mCharset,mCharsetSource); CParserContext* pc=new CParserContext(theScanner,aKey,mCommand,aListener); @@ -1640,7 +1639,7 @@ nsresult nsParser::Parse(nsIInputStream& aStream,const nsAReadableString& aMimeT nsAutoString theUnknownFilename(NS_LITERAL_STRING("unknown")); nsInputStream input(&aStream); - + nsScanner* theScanner=new nsScanner(theUnknownFilename,input,mCharset,mCharsetSource); CParserContext* pc=new CParserContext(theScanner,aKey,mCommand,0); if(pc && theScanner) { @@ -1681,8 +1680,7 @@ nsresult nsParser::Parse(const nsAReadableString& aSourceBuffer, void* aKey, // bug #2361 to break again! nsresult result=NS_OK; - - + if(aLastCall && (0==aSourceBuffer.Length())) { // Nothing is being passed to the parser so return // immediately. mUnusedInput will get processed when diff --git a/mozilla/rdf/base/src/nsRDFContentSink.cpp b/mozilla/rdf/base/src/nsRDFContentSink.cpp index 215c24612d3..1f2eb6443c1 100644 --- a/mozilla/rdf/base/src/nsRDFContentSink.cpp +++ b/mozilla/rdf/base/src/nsRDFContentSink.cpp @@ -932,8 +932,8 @@ RDFContentSinkImpl::GetIdAboutAttribute(const PRUnichar** aAttributes, // This corresponds to the dirty work of production [6.5] nsresult rv; - nsXPIDLCString docURI; - rv = mDocumentURL->GetSpec(getter_Copies(docURI)); + nsCAutoString docURI; + rv = mDocumentURL->GetSpec(docURI); if (NS_FAILED(rv)) return rv; for (; *aAttributes; aAttributes += 2) { @@ -1035,10 +1035,9 @@ RDFContentSinkImpl::GetResourceAttribute(const PRUnichar** aAttributes, // XXX Take the URI and make it fully qualified by // sticking it into the document's URL. This may not be // appropriate... - char* documentURL; - mDocumentURL->GetSpec(&documentURL); + nsCAutoString documentURL; + mDocumentURL->GetSpec(documentURL); rdf_MakeAbsoluteURI(NS_ConvertUTF8toUCS2(documentURL), uri); - nsCRT::free(documentURL); return gRDFService->GetUnicodeResource(uri.get(), aResource); } diff --git a/mozilla/rdf/base/src/nsRDFService.cpp b/mozilla/rdf/base/src/nsRDFService.cpp index 25e691a80eb..92b41062985 100644 --- a/mozilla/rdf/base/src/nsRDFService.cpp +++ b/mozilla/rdf/base/src/nsRDFService.cpp @@ -1507,13 +1507,9 @@ RDFServiceImpl::GetDataSource(const char* aURI, PRBool aBlock, nsIRDFDataSource* nsCAutoString spec; nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), aURI); - if (uri) { - // XXXwaterson eliminate `temp' when we have shared strings. - nsXPIDLCString temp; - uri->GetSpec(getter_Copies(temp)); - spec = temp; - } + rv = NS_NewURI(getter_AddRefs(uri), nsDependentCString(aURI)); + if (uri) + uri->GetSpec(spec); else spec = aURI; diff --git a/mozilla/rdf/base/src/nsRDFXMLDataSource.cpp b/mozilla/rdf/base/src/nsRDFXMLDataSource.cpp index 79872c3468d..4d3bae62fbe 100644 --- a/mozilla/rdf/base/src/nsRDFXMLDataSource.cpp +++ b/mozilla/rdf/base/src/nsRDFXMLDataSource.cpp @@ -107,6 +107,7 @@ #include "nsIServiceManager.h" #include "nsIStreamListener.h" #include "nsIURL.h" +#include "nsIFileURL.h" #include "nsNetUtil.h" #include "nsIChannel.h" #include "nsLayoutCID.h" // for NS_NAMESPACEMANAGER_CID. @@ -556,7 +557,7 @@ RDFXMLDataSourceImpl::BlockingParse(nsIURI* aURL, nsIStreamListener* aConsumer) nsCOMPtr request; // Null LoadGroup ? - rv = NS_OpenURI(getter_AddRefs(channel), aURL, nsnull); + rv = NS_NewChannel(getter_AddRefs(channel), aURL, nsnull); if (NS_FAILED(rv)) return rv; nsIInputStream* in; PRUint32 sourceOffset = 0; @@ -646,12 +647,12 @@ static const char kResourceURIPrefix[] = "resource:"; nsresult rv; - rv = NS_NewURI(getter_AddRefs(mURL), uri); + rv = NS_NewURI(getter_AddRefs(mURL), nsDependentCString(uri)); if (NS_FAILED(rv)) return rv; // Keep a 'cached' copy of the URL; opening it may cause the spec // to be re-written. - mURL->GetSpec(getter_Copies(mOriginalURLSpec)); + mURL->GetSpec(mOriginalURLSpec); // XXX this is a hack: any "file:" URI is considered writable. All // others are considered read-only. diff --git a/mozilla/rdf/chrome/src/nsChromeProtocolHandler.cpp b/mozilla/rdf/chrome/src/nsChromeProtocolHandler.cpp index fd953bff545..7a75e2ad953 100644 --- a/mozilla/rdf/chrome/src/nsChromeProtocolHandler.cpp +++ b/mozilla/rdf/chrome/src/nsChromeProtocolHandler.cpp @@ -52,6 +52,7 @@ #include "nsIEventQueueService.h" #include "nsIFastLoadService.h" #include "nsIFile.h" +#include "nsIFileURL.h" #include "nsIFileChannel.h" #include "nsIIOService.h" #include "nsIJARChannel.h" @@ -60,11 +61,13 @@ #include "nsIObjectOutputStream.h" #include "nsIScriptSecurityManager.h" #include "nsIServiceManager.h" +#include "nsIStandardURL.h" #include "nsIStreamListener.h" #include "nsIXULPrototypeCache.h" #include "nsIXULPrototypeDocument.h" #include "nsNetCID.h" #include "nsXPIDLString.h" +#include "nsString.h" #include "prlog.h" //---------------------------------------------------------------------- @@ -515,11 +518,9 @@ nsChromeProtocolHandler::Create(nsISupports *aOuter, REFNSIID aIID, void **aResu // nsIProtocolHandler methods: NS_IMETHODIMP -nsChromeProtocolHandler::GetScheme(char* *result) +nsChromeProtocolHandler::GetScheme(nsACString &result) { - *result = nsCRT::strdup("chrome"); - if (*result == nsnull) - return NS_ERROR_OUT_OF_MEMORY; + result = "chrome"; return NS_OK; } @@ -546,7 +547,9 @@ nsChromeProtocolHandler::GetProtocolFlags(PRUint32 *result) } NS_IMETHODIMP -nsChromeProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, +nsChromeProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, + nsIURI *aBaseURI, nsIURI **result) { nsresult rv; @@ -554,26 +557,15 @@ nsChromeProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, // Chrome: URLs (currently) have no additional structure beyond that provided // by standard URLs, so there is no "outer" given to CreateInstance - nsCOMPtr url(do_CreateInstance(kStandardURLCID, &rv)); + nsCOMPtr url(do_CreateInstance(kStandardURLCID, &rv)); if (NS_FAILED(rv)) return rv; - if (aBaseURI) { - nsXPIDLCString aResolvedURI; - rv = aBaseURI->Resolve(aSpec, getter_Copies(aResolvedURI)); - if (NS_SUCCEEDED(rv)) - rv = url->SetSpec(aResolvedURI); - } - else { - rv = url->SetSpec((char*)aSpec); - } - + rv = url->Init(nsIStandardURL::URLTYPE_STANDARD, -1, aSpec, aCharset, aBaseURI); if (NS_FAILED(rv)) return rv; - *result = url; - NS_ADDREF(*result); - return rv; + return CallQueryInterface(url, result); } NS_IMETHODIMP @@ -623,7 +615,7 @@ nsChromeProtocolHandler::NewChannel(nsIURI* aURI, if (NS_FAILED(rv)) return rv; nsCOMPtr chromeURI; - rv = ioServ->NewURI(spec, nsnull, getter_AddRefs(chromeURI)); + rv = ioServ->NewURI(spec, nsnull, nsnull, getter_AddRefs(chromeURI)); if (NS_FAILED(rv)) return rv; rv = ioServ->NewChannelFromURI(chromeURI, getter_AddRefs(result)); @@ -649,11 +641,11 @@ nsChromeProtocolHandler::NewChannel(nsIURI* aURI, // Get a system principal for xul files and set the owner // property of the result nsCOMPtr url = do_QueryInterface(aURI); - nsXPIDLCString fileExtension; - rv = url->GetFileExtension(getter_Copies(fileExtension)); - if (PL_strcasecmp(fileExtension, "xul") == 0 || - PL_strcasecmp(fileExtension, "html") == 0 || - PL_strcasecmp(fileExtension, "xml") == 0) + nsCAutoString fileExtension; + rv = url->GetFileExtension(fileExtension); + if (PL_strcasecmp(fileExtension.get(), "xul") == 0 || + PL_strcasecmp(fileExtension.get(), "html") == 0 || + PL_strcasecmp(fileExtension.get(), "xml") == 0) { nsCOMPtr securityManager = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); diff --git a/mozilla/rdf/chrome/src/nsChromeRegistry.cpp b/mozilla/rdf/chrome/src/nsChromeRegistry.cpp index 09b440a4944..4d7d35cfa3a 100644 --- a/mozilla/rdf/chrome/src/nsChromeRegistry.cpp +++ b/mozilla/rdf/chrome/src/nsChromeRegistry.cpp @@ -221,7 +221,7 @@ NS_IMETHODIMP nsOverlayEnumerator::GetNext(nsISupports **aResult) return rv; nsCOMPtr url; - rv = NS_NewURI(getter_AddRefs(url), NS_LossyConvertUCS2toASCII(valueStr).get()); + rv = NS_NewURI(getter_AddRefs(url), NS_ConvertUCS2toUTF8(valueStr)); if (NS_FAILED(rv)) return NS_OK; @@ -387,16 +387,13 @@ SplitURL(nsIURI *aChromeURI, nsCString& aPackage, nsCString& aProvider, nsCStrin nsresult rv; - nsXPIDLCString str; - rv = aChromeURI->GetSpec(getter_Copies(str)); + nsCAutoString str; + rv = aChromeURI->GetSpec(str); if (NS_FAILED(rv)) return rv; - if (!str.get()) - return NS_ERROR_OUT_OF_MEMORY; - // We only want to deal with "chrome:" URLs here. We could return // an error code if the URL isn't properly prefixed here... - if (PL_strncmp(str, kChromePrefix, sizeof(kChromePrefix) - 1) != 0) + if (PL_strncmp(str.get(), kChromePrefix, sizeof(kChromePrefix) - 1) != 0) return NS_ERROR_INVALID_ARG; // Cull out the "package" string; e.g., "navigator" @@ -497,7 +494,7 @@ nsChromeRegistry::Canonify(nsIURI* aChromeURI) canonical += "/"; canonical += file; - return aChromeURI->SetSpec(canonical.get()); + return aChromeURI->SetSpec(canonical); } NS_IMETHODIMP @@ -534,11 +531,11 @@ nsChromeRegistry::ConvertChromeURL(nsIURI* aChromeURL, char** aResult) #ifdef DEBUG if (NS_FAILED(rv)) { nsCAutoString msg("chrome: failed to get base url"); - nsXPIDLCString url; - rv = aChromeURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + rv = aChromeURL->GetSpec(url); if (NS_SUCCEEDED(rv)) { msg += " for "; - msg += (const char*)url; + msg += url.get(); } msg += " -- using wacky default"; NS_WARNING(msg.get()); @@ -858,10 +855,10 @@ NS_IMETHODIMP nsChromeRegistry::GetStyleSheets(nsIURI *aChromeURL, nsISupportsAr nsCOMPtr url(do_QueryInterface(supp)); if (url) { nsCOMPtr sheet; - nsXPIDLCString str; - rv = url->GetSpec(getter_Copies(str)); + nsCAutoString str; + rv = url->GetSpec(str); if (NS_FAILED(rv)) return rv; - rv = LoadStyleSheet(getter_AddRefs(sheet), nsCAutoString(str)); + rv = LoadStyleSheet(getter_AddRefs(sheet), str); if (NS_FAILED(rv)) return rv; rv = (*aResult)->AppendElement(sheet) ? NS_OK : NS_ERROR_FAILURE; if (NS_FAILED(rv)) return rv; @@ -894,13 +891,13 @@ NS_IMETHODIMP nsChromeRegistry::GetDynamicInfo(nsIURI *aChromeURL, PRBool aIsOve if (NS_FAILED(rv)) return rv; } - nsXPIDLCString lookup; - rv = aChromeURL->GetSpec(getter_Copies(lookup)); + nsCAutoString lookup; + rv = aChromeURL->GetSpec(lookup); if (NS_FAILED(rv)) return rv; // Get the chromeResource from this lookup string nsCOMPtr chromeResource; - rv = GetResource(nsCAutoString(lookup), getter_AddRefs(chromeResource)); + rv = GetResource(lookup, getter_AddRefs(chromeResource)); if (NS_FAILED(rv)) { NS_ERROR("Unable to retrieve the resource corresponding to the chrome skin or content."); return rv; @@ -1345,7 +1342,7 @@ NS_IMETHODIMP nsChromeRegistry::WriteInfoToDataSource(const char *aDocURI, nsresult rv; nsCOMPtr uri; nsCAutoString str(aDocURI); - rv = NS_NewURI(getter_AddRefs(uri), str.get()); + rv = NS_NewURI(getter_AddRefs(uri), str); if (NS_FAILED(rv)) return rv; nsCOMPtr dataSource; @@ -2529,13 +2526,7 @@ nsChromeRegistry::GetProfileRoot(nsCString& aFileURL) if (NS_FAILED(rv)) return rv; - nsXPIDLCString urlSpec; - rv = NS_GetURLSpecFromFile(userChromeDir, getter_Copies(urlSpec)); - if (NS_FAILED(rv)) - return rv; - aFileURL = urlSpec; - - return NS_OK; + return NS_GetURLSpecFromFile(userChromeDir, aFileURL); } NS_IMETHODIMP @@ -2550,13 +2541,7 @@ nsChromeRegistry::GetInstallRoot(nsCString& aFileURL) if (NS_FAILED(rv) || !appChromeDir) return NS_ERROR_FAILURE; - nsXPIDLCString urlSpec; - rv = NS_GetURLSpecFromFile(appChromeDir, getter_Copies(urlSpec)); - if (NS_FAILED(rv)) - return rv; - aFileURL = urlSpec; - - return NS_OK; + return NS_GetURLSpecFromFile(appChromeDir, aFileURL); } NS_IMETHODIMP @@ -2719,7 +2704,7 @@ nsChromeRegistry::GetAgentSheets(nsIDocShell* aDocShell, nsISupportsArray **aRes nsCOMPtr docURL; doc->GetDocumentURL(getter_AddRefs(docURL)); nsCOMPtr url; - rv = NS_NewURI(getter_AddRefs(url), token, docURL); + rv = NS_NewURI(getter_AddRefs(url), nsDependentCString(token), nsnull, docURL); PRBool enabled = PR_FALSE; nsCOMPtr sheet; @@ -2790,7 +2775,7 @@ nsChromeRegistry::GetUserSheets(PRBool aIsChrome, nsISupportsArray **aResult) nsresult nsChromeRegistry::LoadStyleSheet(nsICSSStyleSheet** aSheet, const nsCString& aURL) { nsCOMPtr uri; - nsresult rv = NS_NewURI(getter_AddRefs(uri), aURL.get()); + nsresult rv = NS_NewURI(getter_AddRefs(uri), aURL); if (NS_FAILED(rv)) return rv; rv = LoadStyleSheetWithURL(uri, aSheet); @@ -3084,11 +3069,8 @@ nsChromeRegistry::ProcessNewChromeBuffer(char *aBuffer, PRInt32 aLength) /* xpidl strings aren't unified with strings, so this fu is necessary. * all we want here is the canonical url */ - nsXPIDLCString chromeURLfoopy; - rv = NS_GetURLSpecFromFile(chromeFile, getter_Copies(chromeURLfoopy)); - if (NS_FAILED(rv)) - return rv; - chromeURL = chromeURLfoopy; + rv = NS_GetURLSpecFromFile(chromeFile, chromeURL); + if (NS_FAILED(rv)) return rv; /* if we're a file, we must be a jar file. do appropriate string munging. * otherwise, the string we got from GetSpec is fine. diff --git a/mozilla/rdf/chrome/tools/chromereg/Makefile.in b/mozilla/rdf/chrome/tools/chromereg/Makefile.in index 4cf3a807172..9ca32acf48b 100644 --- a/mozilla/rdf/chrome/tools/chromereg/Makefile.in +++ b/mozilla/rdf/chrome/tools/chromereg/Makefile.in @@ -29,6 +29,7 @@ include $(DEPTH)/config/autoconf.mk REQUIRES = xpcom \ chrome \ necko \ + string \ $(NULL) CPPSRCS = regchrome.cpp diff --git a/mozilla/rdf/chrome/tools/chromereg/makefile.win b/mozilla/rdf/chrome/tools/chromereg/makefile.win index 0083b0057d3..6f569cc2398 100644 --- a/mozilla/rdf/chrome/tools/chromereg/makefile.win +++ b/mozilla/rdf/chrome/tools/chromereg/makefile.win @@ -17,6 +17,7 @@ DEPTH=..\..\..\.. REQUIRES = xpcom \ chrome \ necko \ + string \ $(NULL) MAKE_OBJ_TYPE = EXE diff --git a/mozilla/rdf/datasource/src/nsFileSystemDataSource.cpp b/mozilla/rdf/datasource/src/nsFileSystemDataSource.cpp index 9266e859a85..8466a275b97 100644 --- a/mozilla/rdf/datasource/src/nsFileSystemDataSource.cpp +++ b/mozilla/rdf/datasource/src/nsFileSystemDataSource.cpp @@ -66,8 +66,8 @@ #include "nsSpecialSystemDirectory.h" #include "nsEnumeratorUtils.h" #include "nsIURL.h" +#include "nsIFileURL.h" #include "nsNetUtil.h" -#include "nsIFileChannel.h" #include "nsIChannel.h" #include "nsIFile.h" #include "nsEscape.h" @@ -248,7 +248,7 @@ FileSystemDataSource::isDirURI(nsIRDFResource* source) nsCOMPtr aDir = do_CreateInstance(NS_LOCAL_FILE_CONTRACTID); - rv = NS_InitFileFromURLSpec(aDir, uri); + rv = NS_InitFileFromURLSpec(aDir, nsDependentCString(uri)); if (NS_FAILED(rv)) return(PR_FALSE); PRBool isDirFlag = PR_FALSE; @@ -1276,7 +1276,7 @@ FileSystemDataSource::GetFolderList(nsIRDFResource *source, PRBool allowHidden, return(NS_ERROR_UNEXPECTED); nsCOMPtr aIURI; - if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(aIURI), parentURI))) + if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(aIURI), nsDependentCString(parentURI)))) return(rv); nsCOMPtr fileURL = do_QueryInterface(aIURI); @@ -1401,7 +1401,7 @@ FileSystemDataSource::GetLastMod(nsIRDFResource *source, nsIRDFDate **aResult) return(NS_ERROR_UNEXPECTED); nsCOMPtr aIURI; - if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(aIURI), uri))) + if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(aIURI), nsDependentCString(uri)))) return(rv); nsCOMPtr fileURL = do_QueryInterface(aIURI); @@ -1450,7 +1450,7 @@ FileSystemDataSource::GetFileSize(nsIRDFResource *source, nsIRDFInt **aResult) return(NS_ERROR_UNEXPECTED); nsCOMPtr aIURI; - if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(aIURI), uri))) + if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(aIURI), nsDependentCString(uri)))) return(rv); nsCOMPtr fileURL = do_QueryInterface(aIURI); @@ -1512,7 +1512,7 @@ FileSystemDataSource::GetName(nsIRDFResource *source, nsIRDFLiteral **aResult) return(NS_ERROR_UNEXPECTED); nsCOMPtr aIURI; - if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(aIURI), uri))) + if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(aIURI), nsDependentCString(uri)))) return(rv); nsCOMPtr fileURL = do_QueryInterface(aIURI); diff --git a/mozilla/rdf/datasource/src/nsLocalStore.cpp b/mozilla/rdf/datasource/src/nsLocalStore.cpp index b81bb75ca6a..dab1d821fe4 100644 --- a/mozilla/rdf/datasource/src/nsLocalStore.cpp +++ b/mozilla/rdf/datasource/src/nsLocalStore.cpp @@ -446,11 +446,11 @@ LocalStoreImpl::LoadData() rv = NS_NewFileURI(getter_AddRefs(aURI), aFile); if (NS_FAILED(rv)) return rv; - nsXPIDLCString spec; - rv = aURI->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = aURI->GetSpec(spec); if (NS_FAILED(rv)) return rv; - rv = remote->Init(spec); + rv = remote->Init(spec.get()); if (NS_FAILED(rv)) return rv; // Read the datasource synchronously. diff --git a/mozilla/security/manager/boot/src/nsSecureBrowserUIImpl.cpp b/mozilla/security/manager/boot/src/nsSecureBrowserUIImpl.cpp index ee2a9a515f0..7158b192344 100644 --- a/mozilla/security/manager/boot/src/nsSecureBrowserUIImpl.cpp +++ b/mozilla/security/manager/boot/src/nsSecureBrowserUIImpl.cpp @@ -319,11 +319,11 @@ nsSecureBrowserUIImpl::OnStateChange(nsIWebProgress* aWebProgress, res = channel->GetURI(getter_AddRefs(loadingURI)); NS_ASSERTION(NS_SUCCEEDED(res), "GetURI failed"); if (loadingURI) { - nsXPIDLCString temp; - loadingURI->GetSpec(getter_Copies(temp)); + nsCAutoString temp; + loadingURI->GetSpec(temp); PR_LOG(gSecureDocLog, PR_LOG_DEBUG, ("SecureUI:%p: OnStateChange: %x :%s\n", this, - aProgressStateFlags,(const char*)temp)); + aProgressStateFlags,temp.get())); } #endif @@ -433,9 +433,9 @@ nsSecureBrowserUIImpl::OnSecurityChange(nsIWebProgress *aWebProgress, nsCOMPtr aURI; channel->GetURI(getter_AddRefs(aURI)); - nsXPIDLCString temp; - aURI->GetSpec(getter_Copies(temp)); - printf("OnSecurityChange: (%x) %s\n", state, (const char*)temp); + nsCAutoString temp; + aURI->GetSpec(temp); + printf("OnSecurityChange: (%x) %s\n", state, temp.get()); #endif /* Deprecated support for mSecurityButton */ if (mSecurityButton) { @@ -475,18 +475,17 @@ nsSecureBrowserUIImpl::IsURLHTTPS(nsIURI* aURL, PRBool* value) if (!aURL) return NS_OK; - char* scheme; - aURL->GetScheme(&scheme); + nsCAutoString scheme; + aURL->GetScheme(scheme); // If no scheme, it's not an https url - not necessarily an error. // See bugs 54845 and 54966 - if (!scheme) + if (scheme.IsEmpty()) return NS_OK; - if (!PL_strncasecmp(scheme, "https", 5)) + if (!PL_strncasecmp(scheme.get(), "https", 5)) *value = PR_TRUE; - nsMemory::Free(scheme); return NS_OK; } @@ -570,11 +569,11 @@ nsSecureBrowserUIImpl::CheckMixedContext(nsISecurityEventSink *eventSink, nsCOMPtr aURI; aChannel->GetURI(getter_AddRefs(aURI)); - nsXPIDLCString temp; - aURI->GetSpec(getter_Copies(temp)); + nsCAutoString temp; + aURI->GetSpec(temp); - if (!nsCRT::strncmp((const char*) temp, "file:", 5) || - !nsCRT::strcmp((const char*) temp, "about:layout-dummy-request")) { + if (!strncmp(temp.get(), "file:", 5) || + !strcmp(temp.get(), "about:layout-dummy-request")) { return NS_OK; } diff --git a/mozilla/security/manager/ssl/src/nsNSSCertificate.cpp b/mozilla/security/manager/ssl/src/nsNSSCertificate.cpp index fd9e2a8e3cc..431bb1ca45b 100644 --- a/mozilla/security/manager/ssl/src/nsNSSCertificate.cpp +++ b/mozilla/security/manager/ssl/src/nsNSSCertificate.cpp @@ -3768,7 +3768,7 @@ nsNSSCertificateDB::ImportCrl (char *aData, PRUint32 aLength, nsIURI * aURI, PRU CERTSignedData sd; SECStatus sec_rv; CERTSignedCrl *crl; - nsXPIDLCString url; + nsCAutoString url; nsCOMPtr crlEntry; PRBool importSuccessful; PRInt32 errorCode; @@ -3777,7 +3777,7 @@ nsNSSCertificateDB::ImportCrl (char *aData, PRUint32 aLength, nsIURI * aURI, PRU nsCOMPtr nssComponent(do_GetService(kNSSComponentCID, &rv)); if (NS_FAILED(rv)) return rv; - aURI->GetSpec(getter_Copies(url)); + aURI->GetSpec(url); arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); if (!arena) { goto loser; diff --git a/mozilla/string/public/nsReadableUtils.h b/mozilla/string/public/nsReadableUtils.h index 22353f4e084..dd0c92ac2bb 100755 --- a/mozilla/string/public/nsReadableUtils.h +++ b/mozilla/string/public/nsReadableUtils.h @@ -167,6 +167,13 @@ NS_COM void AppendUnicodeTo( const nsAString::const_iterator& aSrcStart, */ NS_COM PRBool IsASCII( const nsAString& aString ); + /** + * Returns |PR_TRUE| if |aString| contains only ASCII characters, that is, characters in the range (0x00, 0x7F). + * + * @param aString a 8-bit wide string to scan + */ +NS_COM PRBool IsASCII( const nsACString& aString ); + /** diff --git a/mozilla/string/src/nsReadableUtils.cpp b/mozilla/string/src/nsReadableUtils.cpp index c2c6cd2333d..84296185583 100755 --- a/mozilla/string/src/nsReadableUtils.cpp +++ b/mozilla/string/src/nsReadableUtils.cpp @@ -337,6 +337,36 @@ IsASCII( const nsAString& aString ) return PR_TRUE; } +NS_COM +PRBool +IsASCII( const nsACString& aString ) + { + static const char NOT_ASCII = char(~0x7F); + + + // Don't want to use |copy_string| for this task, since we can stop at the first non-ASCII character + + nsACString::const_iterator done_reading; + aString.EndReading(done_reading); + + // for each chunk of |aString|... + PRUint32 fragmentLength = 0; + nsACString::const_iterator iter; + for ( aString.BeginReading(iter); iter != done_reading; iter.advance( PRInt32(fragmentLength) ) ) + { + fragmentLength = PRUint32(iter.size_forward()); + const char* c = iter.get(); + const char* fragmentEnd = c + fragmentLength; + + // for each character in this chunk... + while ( c < fragmentEnd ) + if ( *c++ & NOT_ASCII ) + return PR_FALSE; + } + + return PR_TRUE; + } + /** diff --git a/mozilla/uriloader/exthandler/mac/nsOSHelperAppService.cpp b/mozilla/uriloader/exthandler/mac/nsOSHelperAppService.cpp index 861f197f659..e0e8fef4a2f 100644 --- a/mozilla/uriloader/exthandler/mac/nsOSHelperAppService.cpp +++ b/mozilla/uriloader/exthandler/mac/nsOSHelperAppService.cpp @@ -120,18 +120,17 @@ NS_IMETHODIMP nsOSHelperAppService::ExternalProtocolHandlerExists(const char * a NS_IMETHODIMP nsOSHelperAppService::LoadUrl(nsIURI * aURL) { - char *url = nsnull; + nsCAutoString url; nsresult rv = NS_ERROR_FAILURE; if (aURL) { - aURL->GetSpec(&url); - if (url) + aURL->GetSpec(url); + if (!url.IsEmpty()) { nsCOMPtr icService (do_GetService(NS_INTERNETCONFIGSERVICE_CONTRACTID)); if (icService) - rv = icService->LaunchURL(url); - nsMemory::Free(url); + rv = icService->LaunchURL(url.get()); } } return rv; diff --git a/mozilla/uriloader/exthandler/nsExternalHelperAppService.cpp b/mozilla/uriloader/exthandler/nsExternalHelperAppService.cpp index 246a04dae27..93a172b604a 100644 --- a/mozilla/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/mozilla/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -26,7 +26,7 @@ #include "nsIURL.h" #include "nsIFile.h" #include "nsIChannel.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsIDirectoryService.h" #include "nsAppDirectoryServiceDefs.h" #include "nsXPIDLString.h" @@ -202,12 +202,12 @@ nsresult nsExternalHelperAppService::InitDataSource() NS_ENSURE_SUCCESS(rv, rv); // Get file url spec to be used to initialize the DS. - nsXPIDLCString urlSpec; - rv = NS_GetURLSpecFromFile(mimeTypesFile, getter_Copies(urlSpec)); + nsCAutoString urlSpec; + rv = NS_GetURLSpecFromFile(mimeTypesFile, urlSpec); NS_ENSURE_SUCCESS(rv, rv); // Get the data source; if it is going to be created, then load is synchronous. - rv = rdf->GetDataSourceBlocking( urlSpec, getter_AddRefs( mOverRideDataSource ) ); + rv = rdf->GetDataSourceBlocking( urlSpec.get(), getter_AddRefs( mOverRideDataSource ) ); NS_ENSURE_SUCCESS(rv, rv); // initialize our resources if we haven't done so already... @@ -238,7 +238,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const char *aMimeContentType PRBool *aAbortProcess, nsIStreamListener ** aStreamListener) { nsCOMPtr mimeInfo; - nsXPIDLCString fileExtension; + nsCAutoString fileExtension; // (1) Try to find a mime object by looking the mime type GetFromMIMEType(aMimeContentType, getter_AddRefs(mimeInfo)); @@ -250,8 +250,8 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const char *aMimeContentType nsCOMPtr url = do_QueryInterface(aURI); if (url) { - url->GetFileExtension(getter_Copies(fileExtension)); - GetFromExtension(fileExtension, getter_AddRefs(mimeInfo)); + url->GetFileExtension(fileExtension); + GetFromExtension(fileExtension.get(), getter_AddRefs(mimeInfo)); // only over write mimeInfo if we got a non-null mime info object. if (mimeInfo) { @@ -277,7 +277,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const char *aMimeContentType if (mimeInfo) { // the file extension was conviently already filled in by our call to FindOSMimeInfoForType. - mimeInfo->SetFileExtensions(fileExtension); + mimeInfo->SetFileExtensions(fileExtension.get()); mimeInfo->SetMIMEType(aMimeContentType); // we may need to add a new method to nsIMIMEService so we can add this mime info object to our mime service. } @@ -293,7 +293,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const char *aMimeContentType if (fileExtension.IsEmpty()) { nsCOMPtr url = do_QueryInterface(aURI); if (url) { - url->GetFileExtension(getter_Copies(fileExtension)); + url->GetFileExtension(fileExtension); } } @@ -304,11 +304,13 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const char *aMimeContentType if (matches) { mimeInfo->SetPrimaryExtension(fileExtension.get()); } else { - mimeInfo->GetPrimaryExtension(getter_Copies(fileExtension)); + nsXPIDLCString buf; + mimeInfo->GetPrimaryExtension(getter_Copies(buf)); + fileExtension = buf; } // this code is incomplete and just here to get things started.. - nsExternalAppHandler * handler = CreateNewExternalHandler(mimeInfo, fileExtension, aWindowContext); + nsExternalAppHandler * handler = CreateNewExternalHandler(mimeInfo, fileExtension.get(), aWindowContext); handler->QueryInterface(NS_GET_IID(nsIStreamListener), (void **) aStreamListener); } @@ -970,13 +972,12 @@ nsresult nsExternalAppHandler::SetUpTempFile(nsIChannel * aChannel) { // try to extract the file name from the url and use that as a first pass as the // leaf name of our temp file... - char *leafName = nsnull; // may be shortened by NS_UnescapeURL - url->GetFileName(&leafName); - if (leafName) + nsCAutoString leafName; // may be shortened by NS_UnescapeURL + url->GetFileName(leafName); + if (!leafName.IsEmpty()) { - NS_UnescapeURL(leafName); + NS_UnescapeURL((char *) leafName.get()); mSuggestedFileName = NS_ConvertUTF8toUCS2(leafName); - nsMemory::Free(leafName); // replace platform specific path separator and illegal characters to avoid any confusion mSuggestedFileName.ReplaceChar(FILE_PATH_SEPARATOR FILE_ILLEGAL_CHARACTERS, '-'); @@ -1814,8 +1815,8 @@ NS_IMETHODIMP nsExternalHelperAppService::GetTypeFromURI(nsIURI *aURI, char **aC #ifdef XP_MAC if (NS_SUCCEEDED(rv)) { - nsXPIDLCString fileExt; - url->GetFileExtension(getter_Copies(fileExt)); + nsCAutoString fileExt; + url->GetFileExtension(fileExt); nsresult rv2; nsCOMPtr fileurl = do_QueryInterface( url, &rv2 ); @@ -1835,24 +1836,22 @@ NS_IMETHODIMP nsExternalHelperAppService::GetTypeFromURI(nsIURI *aURI, char **aC if (NS_SUCCEEDED(rv)) { - nsXPIDLCString ext; - rv = url->GetFileExtension(getter_Copies(ext)); + nsCAutoString ext; + rv = url->GetFileExtension(ext); if (NS_FAILED(rv)) return rv; if (ext.IsEmpty()) { *aContentType = nsnull; return NS_ERROR_FAILURE; } - rv = GetTypeFromExtension(ext, aContentType); + rv = GetTypeFromExtension(ext.get(), aContentType); return rv; } - nsXPIDLCString cStrSpec; + nsCAutoString specStr; // no url, let's give the raw spec a shot - rv = aURI->GetSpec(getter_Copies(cStrSpec)); + rv = aURI->GetSpec(specStr); if (NS_FAILED(rv)) return rv; - nsCAutoString specStr(cStrSpec); - // find the file extension (if any) nsCAutoString extStr; PRInt32 extLoc = specStr.RFindChar('.'); diff --git a/mozilla/uriloader/exthandler/nsExternalProtocolHandler.cpp b/mozilla/uriloader/exthandler/nsExternalProtocolHandler.cpp index c4aa79e0c95..385c57bbc1a 100644 --- a/mozilla/uriloader/exthandler/nsExternalProtocolHandler.cpp +++ b/mozilla/uriloader/exthandler/nsExternalProtocolHandler.cpp @@ -28,6 +28,7 @@ #include "nsCOMPtr.h" #include "nsIServiceManager.h" #include "nsNetCID.h" +#include "netCore.h" // used to dispatch urls to default protocol handlers #include "nsCExternalHandlerService.h" @@ -135,12 +136,12 @@ nsresult nsExtProtocolChannel::OpenURL() { nsCOMPtr extProtService (do_GetService(NS_EXTERNALPROTOCOLSERVICE_CONTRACTID)); PRBool haveHandler = PR_FALSE; - nsXPIDLCString urlScheme; - mUrl->GetScheme(getter_Copies(urlScheme)); + nsCAutoString urlScheme; + mUrl->GetScheme(urlScheme); if (extProtService) { - extProtService->ExternalProtocolHandlerExists(urlScheme, &haveHandler); + extProtService->ExternalProtocolHandlerExists(urlScheme.get(), &haveHandler); if (haveHandler) return extProtService->LoadUrl(mUrl); } @@ -269,9 +270,9 @@ NS_INTERFACE_MAP_BEGIN(nsExternalProtocolHandler) NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) NS_INTERFACE_MAP_END_THREADSAFE -NS_IMETHODIMP nsExternalProtocolHandler::GetScheme(char * *aScheme) +NS_IMETHODIMP nsExternalProtocolHandler::GetScheme(nsACString &aScheme) { - *aScheme = ToNewCString(m_schemeName); + aScheme = m_schemeName; return NS_OK; } @@ -292,12 +293,12 @@ nsExternalProtocolHandler::AllowPort(PRInt32 port, const char *scheme, PRBool *_ PRBool nsExternalProtocolHandler::HaveProtocolHandler(nsIURI * aURI) { PRBool haveHandler = PR_FALSE; - nsXPIDLCString scheme; if (aURI) { - aURI->GetScheme(getter_Copies(scheme)); + nsCAutoString scheme; + aURI->GetScheme(scheme); nsCOMPtr extProtService (do_GetService(NS_EXTERNALPROTOCOLSERVICE_CONTRACTID)); - extProtService->ExternalProtocolHandlerExists(scheme, &haveHandler); + extProtService->ExternalProtocolHandlerExists(scheme.get(), &haveHandler); } return haveHandler; @@ -310,7 +311,10 @@ NS_IMETHODIMP nsExternalProtocolHandler::GetProtocolFlags(PRUint32 *aUritype) return NS_OK; } -NS_IMETHODIMP nsExternalProtocolHandler::NewURI(const char *aSpec, nsIURI *aBaseURI, nsIURI **_retval) +NS_IMETHODIMP nsExternalProtocolHandler::NewURI(const nsACString &aSpec, + const char *aCharset, // ignore charset info + nsIURI *aBaseURI, + nsIURI **_retval) { nsresult rv = NS_ERROR_UNKNOWN_PROTOCOL; nsCOMPtr uri = do_CreateInstance(kSimpleURICID, &rv); diff --git a/mozilla/uriloader/exthandler/win/nsOSHelperAppService.cpp b/mozilla/uriloader/exthandler/win/nsOSHelperAppService.cpp index d42168dc782..cb5f14c1cf1 100644 --- a/mozilla/uriloader/exthandler/win/nsOSHelperAppService.cpp +++ b/mozilla/uriloader/exthandler/win/nsOSHelperAppService.cpp @@ -208,10 +208,10 @@ NS_IMETHODIMP nsOSHelperAppService::LoadUrl(nsIURI * aURL) if (aURL) { // extract the url spec from the url - nsXPIDLCString urlSpec; - aURL->GetSpec(getter_Copies(urlSpec)); + nsCAutoString urlSpec; + aURL->GetSpec(urlSpec); - LONG r = (LONG) ::ShellExecute( NULL, "open", (const char *) urlSpec, NULL, NULL, SW_SHOWNORMAL); + LONG r = (LONG) ::ShellExecute( NULL, "open", urlSpec.get(), NULL, NULL, SW_SHOWNORMAL); if (r < 32) rv = NS_ERROR_FAILURE; } diff --git a/mozilla/webshell/tests/viewer/nsBrowserWindow.cpp b/mozilla/webshell/tests/viewer/nsBrowserWindow.cpp index f5a5e93ae36..9868c1b3d6c 100644 --- a/mozilla/webshell/tests/viewer/nsBrowserWindow.cpp +++ b/mozilla/webshell/tests/viewer/nsBrowserWindow.cpp @@ -42,7 +42,7 @@ #include "nsIChannel.h" #include "nsIDOMWindowInternal.h" #include "nsIFilePicker.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsILookAndFeel.h" #include "nsIComponentManager.h" #include "nsIFactory.h" @@ -1022,7 +1022,7 @@ nsBrowserWindow::DispatchMenuItem(PRInt32 aID) if (NS_FAILED(res)) return nsEventStatus_eIgnore; nsIURI *uri = nsnull; - res = service->NewURI(WALLET_EDITOR_URL, nsnull, &uri); + res = service->NewURI(NS_LITERAL_CSTRING(WALLET_EDITOR_URL), nsnull, nsnull, &uri); if (NS_FAILED(res)) return nsEventStatus_eIgnore; res = uri->QueryInterface(NS_GET_IID(nsIURI), (void**)&url); @@ -1141,12 +1141,12 @@ nsBrowserWindow::DoFileOpen() if (fileURL) { fileURL->SetFile(file); - nsXPIDLCString url; - fileURL->GetSpec(getter_Copies(url)); + nsCAutoString url; + fileURL->GetSpec(url); // Ask the Web widget to load the file URL nsCOMPtr webNav(do_QueryInterface(mWebBrowser)); - webNav->LoadURI(NS_ConvertASCIItoUCS2(url.get()).get(), + webNav->LoadURI(NS_ConvertUTF8toUCS2(url).get(), nsIWebNavigation::LOAD_FLAGS_NONE, nsnull, nsnull, @@ -1274,7 +1274,7 @@ nsBrowserWindow::DoFind() //---------------------------------------------------------------------- -#define VIEWER_BUNDLE_URL "resource:/res/viewer.properties" +#define VIEWER_BUNDLE_URL NS_LITERAL_CSTRING("resource:/res/viewer.properties") static nsString* gTitleSuffix = nsnull; @@ -1294,7 +1294,7 @@ GetTitleSuffix(void) if (NS_FAILED(ret)) return ret; nsIURI *uri = nsnull; - ret = service->NewURI(VIEWER_BUNDLE_URL, nsnull, &uri); + ret = service->NewURI(VIEWER_BUNDLE_URL, nsnull, nsnull, &uri); if (NS_FAILED(ret)) return ret; ret = uri->QueryInterface(NS_GET_IID(nsIURI), (void**)&url); @@ -2094,10 +2094,9 @@ nsBrowserWindow::OnProgress(nsIRequest* request, nsISupports *ctxt, if (mStatus) { nsAutoString url; if (nsnull != aURL) { - char* str; - aURL->GetSpec(&str); - url.AssignWithConversion(str); - nsCRT::free(str); + nsCAutoString str; + aURL->GetSpec(str); + url = NS_ConvertUTF8toUCS2(str); } url.Append(NS_LITERAL_STRING(": progress ")); url.AppendInt(aProgress, 10); diff --git a/mozilla/webshell/tests/viewer/nsViewerApp.cpp b/mozilla/webshell/tests/viewer/nsViewerApp.cpp index 8b6a478b1f0..6bc7958c34e 100644 --- a/mozilla/webshell/tests/viewer/nsViewerApp.cpp +++ b/mozilla/webshell/tests/viewer/nsViewerApp.cpp @@ -1112,10 +1112,10 @@ nsViewerApp::CreateRobot(nsBrowserWindow* aWindow) nsCOMPtr doc; shell->GetDocument(getter_AddRefs(doc)); if (doc) { - char * str; + nsCAutoString str; nsCOMPtr uri; doc->GetDocumentURL(getter_AddRefs(uri)); - nsresult rv = uri->GetSpec(&str); + nsresult rv = uri->GetSpec(str); if (NS_FAILED(rv)) { return rv; } @@ -1124,7 +1124,7 @@ nsViewerApp::CreateRobot(nsBrowserWindow* aWindow) { nsString* tempStr = new nsString; if ( tempStr ) - tempStr->AssignWithConversion(str); + tempStr->Assign(NS_ConvertUTF8toUCS2(str)); gWorkList->AppendElement(tempStr); } #if defined(XP_PC) && defined(NS_DEBUG) && !defined(XP_OS2) @@ -1135,7 +1135,6 @@ nsViewerApp::CreateRobot(nsBrowserWindow* aWindow) PL_strdup(gVerifyDir), yieldProc); #endif - nsCRT::free(str); } } } diff --git a/mozilla/webshell/tests/viewer/nsWebBrowserChrome.cpp b/mozilla/webshell/tests/viewer/nsWebBrowserChrome.cpp index bec66141dab..dc843a265a1 100644 --- a/mozilla/webshell/tests/viewer/nsWebBrowserChrome.cpp +++ b/mozilla/webshell/tests/viewer/nsWebBrowserChrome.cpp @@ -452,10 +452,10 @@ NS_IMETHODIMP nsWebBrowserChrome::OnLocationChange(nsIWebProgress* aWebProgress, nsIRequest* aRequest, nsIURI* aURI) { - nsXPIDLCString spec; + nsCAutoString spec; if(aURI) - aURI->GetSpec(getter_Copies(spec)); + aURI->GetSpec(spec); PRBool isSubFrameLoad = PR_FALSE; // Is this a subframe load if (aWebProgress) { @@ -472,8 +472,7 @@ NS_IMETHODIMP nsWebBrowserChrome::OnLocationChange(nsIWebProgress* aWebProgress, if(mBrowserWindow->mLocation && !isSubFrameLoad) { PRUint32 size; - nsAutoString tmp; tmp.AssignWithConversion(spec); - + NS_ConvertUTF8toUCS2 tmp(spec); mBrowserWindow->mLocation->SetText(tmp,size); } @@ -555,11 +554,11 @@ mCurrent=mTotal=mProgress=mMaxProgress=0; #endif if(mBrowserWindow->mStatus) { - nsXPIDLCString uriString; + nsCAutoString uriString; - uri->GetSpec(getter_Copies(uriString)); + uri->GetSpec(uriString); - nsAutoString url; url.AssignWithConversion(uriString); + NS_ConvertUTF8toUCS2 url(uriString); url.Append(NS_LITERAL_STRING(": start")); PRUint32 size; mBrowserWindow->mStatus->SetText(url,size); @@ -581,7 +580,7 @@ void nsWebBrowserChrome::OnLoadFinished(nsIRequest* aRequest, } #endif - nsXPIDLCString uriString; + nsCAutoString uriString; if(aRequest) { nsresult rv; nsCOMPtr channel; @@ -591,10 +590,10 @@ void nsWebBrowserChrome::OnLoadFinished(nsIRequest* aRequest, if (NS_SUCCEEDED(rv)) { channel->GetURI(getter_AddRefs(uri)); - uri->GetSpec(getter_Copies(uriString)); + uri->GetSpec(uriString); } } - nsAutoString msg; msg.AssignWithConversion(uriString); + NS_ConvertUTF8toUCS2 msg(uriString); PRTime endLoadTime = PR_Now(); if(mBrowserWindow->mShowLoadTimes) @@ -624,17 +623,16 @@ void nsWebBrowserChrome::OnStatusDNS(nsIChannel* aChannel) void nsWebBrowserChrome::OnStatusConnecting(nsIChannel* aChannel) { - nsXPIDLCString uriString; + nsCAutoString uriString; if(aChannel) { nsCOMPtr uri; aChannel->GetURI(getter_AddRefs(uri)); - uri->GetSpec(getter_Copies(uriString)); + uri->GetSpec(uriString); } - nsAutoString msg(NS_LITERAL_STRING("Connecting to ")); - msg.AppendWithConversion(uriString); + NS_ConvertUTF8toUCS2 msg(NS_LITERAL_CSTRING("Connecting to ") + uriString); PRUint32 size; mBrowserWindow->mStatus->SetText(msg,size); diff --git a/mozilla/webshell/tests/viewer/nsWebCrawler.cpp b/mozilla/webshell/tests/viewer/nsWebCrawler.cpp index 958db6ff3c5..604493d43cb 100644 --- a/mozilla/webshell/tests/viewer/nsWebCrawler.cpp +++ b/mozilla/webshell/tests/viewer/nsWebCrawler.cpp @@ -298,10 +298,9 @@ nsWebCrawler::DumpRegressionData() } } else { - char* file; - (void)mLastURL->GetPath(&file); - printf("could not open output file for %s\n", file); - nsCRT::free(file); + nsCAutoString file; + (void)mLastURL->GetPath(file); + printf("could not open output file for %s\n", file.get()); } } else { @@ -411,8 +410,8 @@ nsWebCrawler::OnStateChange(nsIWebProgress* aWebProgress, // Ignore this notification unless its for the current url. That way // we skip over embedded webshell notifications (e.g. frame cells, // iframes, etc.) - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + uri->GetSpec(spec); PRTime delta, cvt, rounder; LL_I2L(cvt, 1000); @@ -519,10 +518,9 @@ nsWebCrawler::GetOutputFile(nsIURI *aURL, nsString& aOutputName) if (nsnull!=aURL) { char *inputFileName; - char* file; - (void)aURL->GetPath(&file); - nsAutoString inputFileFullPath; inputFileFullPath.AssignWithConversion(file); - nsCRT::free(file); + nsCAutoString file; + (void)aURL->GetPath(file); + NS_ConvertUTF8toUCS2 inputFileFullPath(file); PRInt32 fileNameOffset = inputFileFullPath.RFindChar('/'); if (-1==fileNameOffset) { @@ -702,16 +700,16 @@ nsWebCrawler::OkToLoad(const nsString& aURLSpec) rv = NS_NewURI(&url, aURLSpec); if (NS_OK == rv) { - nsXPIDLCString host; - rv = url->GetHost(getter_Copies(host)); + nsCAutoString host; + rv = url->GetHost(host); if (rv == NS_OK) { - PRInt32 hostlen = PL_strlen(host); + PRInt32 hostlen = host.Length(); // Check domains to avoid PRInt32 i, n = mAvoidDomains.Count(); for (i = 0; i < n; i++) { nsString* s = (nsString*) mAvoidDomains.ElementAt(i); - if (s && EndsWith(*s, host, hostlen)) { + if (s && EndsWith(*s, host.get(), hostlen)) { printf("Avoiding '"); fputs(NS_LossyConvertUCS2toASCII(aURLSpec).get(), stdout); printf("'\n"); @@ -728,7 +726,7 @@ nsWebCrawler::OkToLoad(const nsString& aURLSpec) } for (i = 0; i < n; i++) { nsString* s = (nsString*) mSafeDomains.ElementAt(i); - if (s && EndsWith(*s, host, hostlen)) { + if (s && EndsWith(*s, host.get(), hostlen)) { return PR_TRUE; } } diff --git a/mozilla/widget/src/gtk/nsSound.cpp b/mozilla/widget/src/gtk/nsSound.cpp index 81ec1b8afdb..596978f20d6 100644 --- a/mozilla/widget/src/gtk/nsSound.cpp +++ b/mozilla/widget/src/gtk/nsSound.cpp @@ -113,6 +113,7 @@ NS_IMETHODIMP nsSound::OnStreamComplete(nsIStreamLoader *aLoader, const char *string) { +#ifdef DEBUG // print a load error on bad status if (NS_FAILED(aStatus)) { if (aLoader) { @@ -124,17 +125,15 @@ NS_IMETHODIMP nsSound::OnStreamComplete(nsIStreamLoader *aLoader, if (channel) { channel->GetURI(getter_AddRefs(uri)); if (uri) { - char* uriSpec; - uri->GetSpec(&uriSpec); -#ifdef DEBUG - printf("Failed to load %s\n", uriSpec ? uriSpec : ""); -#endif - CRTFREEIF(uriSpec); + nsCAutoString uriSpec; + uri->GetSpec(uriSpec); + printf("Failed to load %s\n", uriSpec.get()); } } } } } +#endif int fd, mask = 0; diff --git a/mozilla/widget/src/mac/nsFilePicker.cpp b/mozilla/widget/src/mac/nsFilePicker.cpp index bd4b24de108..71e85bceb5d 100644 --- a/mozilla/widget/src/mac/nsFilePicker.cpp +++ b/mozilla/widget/src/mac/nsFilePicker.cpp @@ -31,7 +31,7 @@ #endif #include "nsIURL.h" #include "nsVoidArray.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsToolkit.h" #include "nsIEventSink.h" diff --git a/mozilla/widget/src/mac/nsSound.cpp b/mozilla/widget/src/mac/nsSound.cpp index f5878b9f465..8e69950934b 100644 --- a/mozilla/widget/src/mac/nsSound.cpp +++ b/mozilla/widget/src/mac/nsSound.cpp @@ -42,7 +42,7 @@ #include "plstr.h" #include "nsVoidArray.h" -#include "nsIURI.h" +#include "nsIURL.h" #include "nsNetUtil.h" #include "prmem.h" #include "nsGfxUtils.h" @@ -265,7 +265,7 @@ nsSound::Play(nsIURL *aURL) // try to get from cache nsCOMPtr requestSupports; - (void)GetSoundFromCache(aURL, getter_AddRefs(requestSupports)); + (void)GetSoundFromCache(NS_STATIC_CAST(nsIURI*,aURL), getter_AddRefs(requestSupports)); if (requestSupports) { nsSoundRequest* cachedRequest = nsSoundRequest::GetFromISupports(requestSupports); @@ -340,15 +340,15 @@ nsSound::GetSoundFromCache(nsIURI* inURI, nsISupports** outSound) { nsresult rv; - nsXPIDLCString uriSpec; - inURI->GetSpec(getter_Copies(uriSpec)); + nsCAutoString uriSpec; + inURI->GetAsciiSpec(uriSpec); nsCOMPtr cacheSession; rv = GetCacheSession(getter_AddRefs(cacheSession)); if (NS_FAILED(rv)) return rv; nsCOMPtr entry; - rv = cacheSession->OpenCacheEntry(uriSpec, nsICache::ACCESS_READ, nsICache::BLOCKING, getter_AddRefs(entry)); + rv = cacheSession->OpenCacheEntry(uriSpec.get(), nsICache::ACCESS_READ, nsICache::BLOCKING, getter_AddRefs(entry)); #ifdef SOUND_DEBUG printf("Got sound from cache with rv %ld\n", rv); @@ -371,8 +371,8 @@ nsSound::PutSoundInCache(nsIChannel* inChannel, PRUint32 inDataSize, nsISupports inChannel->GetOriginalURI(getter_AddRefs(uri)); if (!uri) return NS_ERROR_FAILURE; - nsXPIDLCString uriSpec; - rv = uri->GetSpec(getter_Copies(uriSpec)); + nsCAutoString uriSpec; + rv = uri->GetAsciiSpec(uriSpec); if (NS_FAILED(rv)) return rv; nsCOMPtr cacheSession; @@ -380,7 +380,7 @@ nsSound::PutSoundInCache(nsIChannel* inChannel, PRUint32 inDataSize, nsISupports if (NS_FAILED(rv)) return rv; nsCOMPtr entry; - rv = cacheSession->OpenCacheEntry(uriSpec, nsICache::ACCESS_WRITE, nsICache::BLOCKING, getter_AddRefs(entry)); + rv = cacheSession->OpenCacheEntry(uriSpec.get(), nsICache::ACCESS_WRITE, nsICache::BLOCKING, getter_AddRefs(entry)); #ifdef SOUND_DEBUG printf("Put sound in cache with rv %ld\n", rv); #endif diff --git a/mozilla/widget/src/windows/nsClipboard.cpp b/mozilla/widget/src/windows/nsClipboard.cpp index 8699c47ed8f..6aa4b6986f7 100644 --- a/mozilla/widget/src/windows/nsClipboard.cpp +++ b/mozilla/widget/src/windows/nsClipboard.cpp @@ -670,14 +670,12 @@ nsClipboard :: FindURLFromLocalFile ( IDataObject* inDataObject, UINT inIndex, v // we have a normal file, use some Necko objects to get our file path nsCOMPtr file; if ( NS_SUCCEEDED(NS_NewLocalFile(filepath, PR_FALSE, getter_AddRefs(file))) ) { - nsXPIDLCString urlSpec; - NS_GetURLSpecFromFile(file, getter_Copies(urlSpec)); + nsCAutoString urlSpec; + NS_GetURLSpecFromFile(file, urlSpec); // convert it to unicode and pass it out nsMemory::Free(*outData); - nsAutoString urlSpecUnicode; - urlSpecUnicode.AssignWithConversion( urlSpec ); - *outData = ToNewUnicode(urlSpecUnicode); + *outData = ToNewUnicode(NS_ConvertUTF8toUCS2(urlSpec)); *outDataLen = strlen(urlSpec.get()) * sizeof(PRUnichar); dataFound = PR_TRUE; diff --git a/mozilla/widget/src/windows/nsFilePicker.cpp b/mozilla/widget/src/windows/nsFilePicker.cpp index 42cd4d03b4b..37de8f4aa58 100644 --- a/mozilla/widget/src/windows/nsFilePicker.cpp +++ b/mozilla/widget/src/windows/nsFilePicker.cpp @@ -34,6 +34,7 @@ #include "nsFilePicker.h" #include "nsILocalFile.h" #include "nsIURL.h" +#include "nsIFileURL.h" #include "nsIStringBundle.h" #include #include diff --git a/mozilla/widget/src/windows/nsSound.cpp b/mozilla/widget/src/windows/nsSound.cpp index 631d52016ee..5693ca7748b 100644 --- a/mozilla/widget/src/windows/nsSound.cpp +++ b/mozilla/widget/src/windows/nsSound.cpp @@ -118,10 +118,10 @@ NS_IMETHODIMP nsSound::OnStreamComplete(nsIStreamLoader *aLoader, nsCOMPtr uri; channel->GetURI(getter_AddRefs(uri)); if (uri) { - char* uriSpec; - uri->GetSpec(&uriSpec); + nsCAutoString uriSpec; + uri->GetSpec(uriSpec); #ifdef DEBUG - printf("Failed to load %s\n", uriSpec ? uriSpec : ""); + printf("Failed to load %s\n", uriSpec.get()); #endif } } diff --git a/mozilla/xpcom/ds/nsITimelineService.idl b/mozilla/xpcom/ds/nsITimelineService.idl index f8707f77926..f93c7ce2f0f 100644 --- a/mozilla/xpcom/ds/nsITimelineService.idl +++ b/mozilla/xpcom/ds/nsITimelineService.idl @@ -187,13 +187,12 @@ public: */ #define NS_TIMELINE_MARK_URI(text, uri) \ { \ - char *spec = NULL; \ + nsCAutoString spec; \ if (uri) { \ - uri->GetSpec(&spec); \ + uri->GetSpec(spec); \ } \ - if (spec != NULL) { \ - NS_TimelineMark(text, spec); \ - nsCRT::free(spec); \ + if (!spec.IsEmpty()) { \ + NS_TimelineMark(text, spec.get()); \ } else { \ NS_TimelineMark(text, "??"); \ } \ diff --git a/mozilla/xpcom/io/nsEscape.cpp b/mozilla/xpcom/io/nsEscape.cpp index fa6f1bd1e25..496786d93d4 100644 --- a/mozilla/xpcom/io/nsEscape.cpp +++ b/mozilla/xpcom/io/nsEscape.cpp @@ -40,6 +40,7 @@ #include "nsEscape.h" #include "nsMemory.h" #include "nsCRT.h" +#include "nsReadableUtils.h" const int netCharType[256] = /* Bit 0 xalpha -- the alphas @@ -350,7 +351,7 @@ const int EscapeChars[256] = NS_COM nsresult nsStdEscape(const char* str, PRInt16 mask, nsCString &result) { result.Truncate(); - nsresult rv = NS_EscapeURLPart(str, -1, mask, result); + nsresult rv = NS_EscapeURL(str, -1, mask, result); if (NS_SUCCEEDED(rv) && result.IsEmpty()) result = str; return rv; @@ -361,27 +362,28 @@ NS_COM nsresult nsStdUnescape(char *str, char **result) *result = nsCRT::strdup(str); if (!*result) return NS_ERROR_OUT_OF_MEMORY; - NS_UnescapeURL(*result); + nsUnescape(*result); return NS_OK; } -NS_COM PRBool NS_EscapeURLPart(const char *part, - PRInt32 partLen, - PRInt16 mask, - nsACString &result) +NS_COM PRBool NS_EscapeURL(const char *part, + PRInt32 partLen, + PRInt16 mask, + nsACString &result) { - if (!part) + if (!part) { + NS_NOTREACHED("null pointer"); return PR_FALSE; + } int i = 0; static const char hexChars[] = "0123456789ABCDEF"; if (partLen < 0) partLen = strlen(part); - PRBool forced = PR_FALSE; - PRBool writing = PR_FALSE; - - if (mask & esc_Forced) - forced = PR_TRUE; + PRBool forced = (mask & esc_Forced); + PRBool ignoreNonAscii = (mask & esc_OnlyASCII); + PRBool ignoreAscii = (mask & esc_OnlyNonASCII); + PRBool writing = (mask & esc_AlwaysCopy); register const unsigned char* src = (const unsigned char *) part; @@ -392,13 +394,17 @@ NS_COM PRBool NS_EscapeURLPart(const char *part, { unsigned char c = *src++; - /* if the char has not to be escaped or whatever follows % is - a valid escaped string, just copy the char */ + // if the char has not to be escaped or whatever follows % is + // a valid escaped string, just copy the char. + // + // Also the % will not be escaped until forced + // See bugzilla bug 61269 for details why we changed this + // + // And, we will not escape non-ascii characters if requested. - /* Also the % will not be escaped until forced */ - /* See bugzilla bug 61269 for details why we changed this */ - - if (NO_NEED_ESC(c) || (c == HEX_ESCAPE && !(forced))) + if (NO_NEED_ESC(c) || (c == HEX_ESCAPE && !forced) + || (c > 0x7f && ignoreNonAscii) + || (c < 0x80 && ignoreAscii)) { if (writing) tempBuffer[tempBufferPos++] = c; @@ -430,7 +436,50 @@ NS_COM PRBool NS_EscapeURLPart(const char *part, return writing; } -NS_COM void NS_UnescapeURL(char *str) +#define ISHEX(c) memchr(hexChars, c, sizeof(hexChars)-1) + +NS_COM PRBool NS_UnescapeURL(const char *str, PRInt32 len, PRInt16 flags, nsACString &result) { - nsUnescape(str); + if (!str) { + NS_NOTREACHED("null pointer"); + return PR_FALSE; + } + + if (len < 0) + len = strlen(str); + + PRBool ignoreNonAscii = (flags & esc_OnlyASCII); + PRBool writing = (flags & esc_AlwaysCopy); + + static const char hexChars[] = "0123456789ABCDEFabcdef"; + + const char *last = str; + const char *p = str; + + for (int i=0; i= '8')) { + //printf("- p1=%c p2=%c\n", *p1, *p2); + writing = PR_TRUE; + if (p > last) { + //printf("- p=%p, last=%p\n", p, last); + result.Append(last, p - last); + last = p; + } + char u = (UNHEX(*p1) << 4) + UNHEX(*p2); + //printf("- u=%c\n", u); + result.Append(u); + i += 2; + p += 2; + last += 3; + } + } + } + if (writing && last < str + len) + result.Append(last, str + len - last); + + return writing; } diff --git a/mozilla/xpcom/io/nsEscape.h b/mozilla/xpcom/io/nsEscape.h index 355089b922f..c1f04b959f1 100644 --- a/mozilla/xpcom/io/nsEscape.h +++ b/mozilla/xpcom/io/nsEscape.h @@ -47,9 +47,9 @@ /* valid mask values for NET_Escape() and NET_EscapedSize(). */ typedef enum { - url_XAlphas = (1<<0) -, url_XPAlphas = (1<<1) -, url_Path = (1<<2) + url_XAlphas = PR_BIT(0) +, url_XPAlphas = PR_BIT(1) +, url_Path = PR_BIT(2) } nsEscapeMask; #ifdef __cplusplus @@ -86,7 +86,7 @@ nsEscapeHTML2(const PRUnichar *aSourceBuffer, /** - * DEPRECATED API: use NS_EscapeURLPart/NS_UnescapeURL instead + * DEPRECATED API: use NS_EscapeURL/NS_UnescapeURL instead */ NS_COM nsresult nsStdEscape(const char* str, PRInt16 mask, nsCString &result); NS_COM nsresult nsStdUnescape(char* str, char **result); @@ -97,44 +97,88 @@ NS_COM nsresult nsStdUnescape(char* str, char **result); /** - * Constants for partType in the call to NS_EscapeURLPart + * NS_EscapeURL/NS_UnescapeURL constants for |flags| parameter: */ enum EscapeMask { - esc_Scheme = 1, - esc_Username = 2, - esc_Password = 4, - esc_Host = 8, - esc_Directory = 16, - esc_FileBaseName = 32, - esc_FileExtension = 64, - esc_Param = 128, - esc_Query = 256, - esc_Ref = 512, - esc_Forced = 1024 /* forces escaping of existing escape sequences */ + /** url components **/ + esc_Scheme = PR_BIT(0), + esc_Username = PR_BIT(1), + esc_Password = PR_BIT(2), + esc_Host = PR_BIT(3), + esc_Directory = PR_BIT(4), + esc_FileBaseName = PR_BIT(5), + esc_FileExtension = PR_BIT(6), + esc_FilePath = esc_Directory | esc_FileBaseName | esc_FileExtension, + esc_Param = PR_BIT(7), + esc_Query = PR_BIT(8), + esc_Ref = PR_BIT(9), + /** special flags **/ + esc_Forced = PR_BIT(10), /* forces escaping of existing escape sequences */ + esc_OnlyASCII = PR_BIT(11), /* causes non-ascii octets to be skipped */ + esc_OnlyNonASCII = PR_BIT(12), /* causes ascii octets to be skipped */ + esc_AlwaysCopy = PR_BIT(13) /* copy input to result buf even if escaping is unnecessary */ }; /** - * NS_EscapeURLPart + * NS_EscapeURL * * Escapes invalid char's in an URL segment. Has no side-effect if the URL * segment is already escaped. Otherwise, the escaped URL segment is appended * to |result|. * - * @param part - url segment string - * @param partLen - url segment string length (-1 if unknown) - * @param partType - url segment type flag - * @param result - result buffer, untouched if part is already escaped + * @param str url segment string + * @param len url segment string length (-1 if unknown) + * @param flags url segment type flag + * @param result result buffer, untouched if part is already escaped * * @return TRUE if escaping was performed, FALSE otherwise. */ -NS_COM PRBool NS_EscapeURLPart(const char *part, - PRInt32 partLen, - PRInt16 partType, - nsACString &result); +NS_COM PRBool NS_EscapeURL(const char *str, + PRInt32 len, + PRInt16 flags, + nsACString &result); /** - * Expands URL escape sequences. Equivalent to nsUnescape. + * Expands URL escape sequences... beware embedded null bytes! + * + * @param str url string to unescape + * @param len length of |str| + * @param flags only esc_OnlyNonASCII and esc_AlwaysCopy are recognized + * @param result result buffer, untouched if |str| is already unescaped + * + * @return TRUE if unescaping was performed, FALSE otherwise. */ -NS_COM void NS_UnescapeURL(char *str); +NS_COM PRBool NS_UnescapeURL(const char *str, + PRInt32 len, + PRInt16 flags, + nsACString &result); + +/** returns resultant string length **/ +inline PRInt32 NS_UnescapeURL(char *str) { return nsUnescapeCount(str); } + +/** + * string friendly versions... + */ +inline const nsACString & +NS_EscapeURL(const nsASingleFragmentCString &part, PRInt16 partType, nsACString &result) { + const char *temp; + if (NS_EscapeURL(part.BeginReading(temp), part.Length(), partType, result)) + return result; + return part; +} +inline const nsACString & +NS_UnescapeURL(const nsASingleFragmentCString &str, PRInt16 flags, nsACString &result) { + const char *temp; + if (NS_UnescapeURL(str.BeginReading(temp), str.Length(), flags, result)) + return result; + return str; +} +// inline unescape +inline nsAFlatCString & +NS_UnescapeURL(nsAFlatCString &str) +{ + str.SetLength(nsUnescapeCount((char*)str.get())); + return str; +} #endif // _ESCAPE_H_ diff --git a/mozilla/xpcom/string/public/nsReadableUtils.h b/mozilla/xpcom/string/public/nsReadableUtils.h index 22353f4e084..dd0c92ac2bb 100755 --- a/mozilla/xpcom/string/public/nsReadableUtils.h +++ b/mozilla/xpcom/string/public/nsReadableUtils.h @@ -167,6 +167,13 @@ NS_COM void AppendUnicodeTo( const nsAString::const_iterator& aSrcStart, */ NS_COM PRBool IsASCII( const nsAString& aString ); + /** + * Returns |PR_TRUE| if |aString| contains only ASCII characters, that is, characters in the range (0x00, 0x7F). + * + * @param aString a 8-bit wide string to scan + */ +NS_COM PRBool IsASCII( const nsACString& aString ); + /** diff --git a/mozilla/xpcom/string/src/nsReadableUtils.cpp b/mozilla/xpcom/string/src/nsReadableUtils.cpp index c2c6cd2333d..84296185583 100755 --- a/mozilla/xpcom/string/src/nsReadableUtils.cpp +++ b/mozilla/xpcom/string/src/nsReadableUtils.cpp @@ -337,6 +337,36 @@ IsASCII( const nsAString& aString ) return PR_TRUE; } +NS_COM +PRBool +IsASCII( const nsACString& aString ) + { + static const char NOT_ASCII = char(~0x7F); + + + // Don't want to use |copy_string| for this task, since we can stop at the first non-ASCII character + + nsACString::const_iterator done_reading; + aString.EndReading(done_reading); + + // for each chunk of |aString|... + PRUint32 fragmentLength = 0; + nsACString::const_iterator iter; + for ( aString.BeginReading(iter); iter != done_reading; iter.advance( PRInt32(fragmentLength) ) ) + { + fragmentLength = PRUint32(iter.size_forward()); + const char* c = iter.get(); + const char* fragmentEnd = c + fragmentLength; + + // for each character in this chunk... + while ( c < fragmentEnd ) + if ( *c++ & NOT_ASCII ) + return PR_FALSE; + } + + return PR_TRUE; + } + /** diff --git a/mozilla/xpcom/tests/PropertiesTest.cpp b/mozilla/xpcom/tests/PropertiesTest.cpp index 17e7e572a72..91dcd5c71cc 100644 --- a/mozilla/xpcom/tests/PropertiesTest.cpp +++ b/mozilla/xpcom/tests/PropertiesTest.cpp @@ -93,7 +93,7 @@ main(int argc, char* argv[]) if (NS_FAILED(ret)) return ret; nsIChannel *channel = nsnull; - ret = service->NewChannel(TEST_URL, nsnull, &channel); + ret = service->NewChannel(NS_LITERAL_CSTRING(TEST_URL), nsnull, nsnull, &channel); if (NS_FAILED(ret)) return ret; nsIEventQueue *eventQ = nsnull; diff --git a/mozilla/xpfe/appshell/src/nsAbout.cpp b/mozilla/xpfe/appshell/src/nsAbout.cpp index b69622fbb03..598570c5943 100644 --- a/mozilla/xpfe/appshell/src/nsAbout.cpp +++ b/mozilla/xpfe/appshell/src/nsAbout.cpp @@ -42,6 +42,7 @@ #include "nsIURI.h" #include "nsNetCID.h" #include "nsIScriptSecurityManager.h" +#include "nsLiteralString.h" static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); @@ -58,7 +59,7 @@ nsAbout::NewChannel(nsIURI *aURI, nsIChannel **result) return rv; nsCOMPtr tempChannel; - rv = ioService->NewChannel(kURI, nsnull, getter_AddRefs(tempChannel)); + rv = ioService->NewChannel(NS_LITERAL_CSTRING(kURI), nsnull, nsnull, getter_AddRefs(tempChannel)); nsCOMPtr securityManager = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); diff --git a/mozilla/xpfe/appshell/src/nsCommandLineService.cpp b/mozilla/xpfe/appshell/src/nsCommandLineService.cpp index f1fe2fe0c3b..17acffe0113 100644 --- a/mozilla/xpfe/appshell/src/nsCommandLineService.cpp +++ b/mozilla/xpfe/appshell/src/nsCommandLineService.cpp @@ -74,10 +74,10 @@ static void* ProcessURLArg(char* str) rv = file->InitWithPath(str); if (NS_SUCCEEDED(rv)) { - nsXPIDLCString fileurl; - rv = NS_GetURLSpecFromFile(file, getter_Copies(fileurl)); - if (NS_SUCCEEDED(rv) && fileurl.get()) - return NS_REINTERPRET_CAST(void*, nsCRT::strdup(fileurl.get())); + nsCAutoString fileurl; + rv = NS_GetURLSpecFromFile(file, fileurl); + if (NS_SUCCEEDED(rv)) + return NS_REINTERPRET_CAST(void*, ToNewCString(fileurl)); } } } diff --git a/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp b/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp index c07540f74fd..6ad1ee5ddf8 100644 --- a/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp +++ b/mozilla/xpfe/appshell/src/nsWebShellWindow.cpp @@ -328,13 +328,12 @@ nsresult nsWebShellWindow::Initialize(nsIXULWindow* aParent, docShellAsItem->SetItemType(nsIDocShellTreeItem::typeChrome); if (nsnull != aUrl) { - char *tmpStr = NULL; - nsAutoString urlString; + nsCAutoString tmpStr; - rv = aUrl->GetSpec(&tmpStr); + rv = aUrl->GetSpec(tmpStr); if (NS_FAILED(rv)) return rv; - urlString.AssignWithConversion(tmpStr); - nsCRT::free(tmpStr); + + NS_ConvertUTF8toUCS2 urlString(tmpStr); nsCOMPtr webNav(do_QueryInterface(mDocShell)); NS_ENSURE_TRUE(webNav, NS_ERROR_FAILURE); rv = webNav->LoadURI(urlString.get(), @@ -1400,12 +1399,11 @@ void nsWebShellWindow::LoadContentAreas() { nsCOMPtr mainURL; doc->GetDocumentURL(getter_AddRefs(mainURL)); if (mainURL) { - char *search = nsnull; + nsCAutoString search; nsCOMPtr url = do_QueryInterface(mainURL); if (url) - url->GetQuery(&search); - searchSpec.AssignWithConversion(search); - nsCRT::free(search); + url->GetQuery(search); + searchSpec = NS_ConvertUTF8toUCS2(search); } } } diff --git a/mozilla/xpfe/appshell/src/nsXULWindow.cpp b/mozilla/xpfe/appshell/src/nsXULWindow.cpp index c80a2dd3eef..3d4fcb35753 100644 --- a/mozilla/xpfe/appshell/src/nsXULWindow.cpp +++ b/mozilla/xpfe/appshell/src/nsXULWindow.cpp @@ -1564,7 +1564,7 @@ NS_IMETHODIMP nsXULWindow::CreateNewContentWindow(PRInt32 aChromeFlags, nsCOMPtr service(do_GetService(kIOServiceCID)); if (service) - service->NewURI(urlStr, nsnull, getter_AddRefs(uri)); + service->NewURI(nsDependentCString(urlStr), nsnull, nsnull, getter_AddRefs(uri)); if (strAllocated) PL_strfree(urlStr); } diff --git a/mozilla/xpfe/bootstrap/appleevents/nsWindowUtils.cpp b/mozilla/xpfe/bootstrap/appleevents/nsWindowUtils.cpp index a730fd08eaa..ee4a24ec654 100644 --- a/mozilla/xpfe/bootstrap/appleevents/nsWindowUtils.cpp +++ b/mozilla/xpfe/bootstrap/appleevents/nsWindowUtils.cpp @@ -64,6 +64,7 @@ #include "nsXPIDLString.h" #include "nsXULWindow.h" #include "nsWindowUtils.h" +#include "nsReadableUtils.h" #include "nsAEUtils.h" @@ -432,7 +433,10 @@ void nsWindowUtils::GetWindowUrlString(WindowPtr wind, char** outUrlStringPtr) ThrowErrIfNil(sourceURL, paramErr); // Now get the string; - sourceURL->GetSpec(outUrlStringPtr); + nsCAutoString spec; + sourceURL->GetSpec(spec); + + *outUrlStringPtr = ToNewCString(spec); } diff --git a/mozilla/xpfe/bootstrap/nsSigHandlers.cpp b/mozilla/xpfe/bootstrap/nsSigHandlers.cpp index e5992d6dae8..963f14e9121 100644 --- a/mozilla/xpfe/bootstrap/nsSigHandlers.cpp +++ b/mozilla/xpfe/bootstrap/nsSigHandlers.cpp @@ -79,9 +79,9 @@ extern "C" char * strsignal(int); static char _progname[1024] = "huh?"; //#if defined(LINUX) && defined(DEBUG) && (defined(__i386) || defined(PPC)) -#if 0 +//#if 0 #define CRAWL_STACK_ON_SIGSEGV -#endif +//#endif #ifdef MOZ_WIDGET_PHOTON void abnormal_exit_handler(int signum) diff --git a/mozilla/xpfe/browser/resources/content/metadata.js b/mozilla/xpfe/browser/resources/content/metadata.js index ad4df9fa970..7d6c6388992 100644 --- a/mozilla/xpfe/browser/resources/content/metadata.js +++ b/mozilla/xpfe/browser/resources/content/metadata.js @@ -426,7 +426,7 @@ function getAbsoluteURL(url, node) // resolve everything from bottom up, starting with document location var ioService = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); - var URL = ioService.newURI(doc.location.href, null); + var URL = ioService.newURI(doc.location.href, null, null); for (var i=0; i uri; aChannel->GetURI(getter_AddRefs(uri)); NS_ENSURE_TRUE(uri, NS_ERROR_FAILURE); - nsXPIDLCString spec; - uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + uri->GetSpec(spec); nsCOMPtr wwatch(do_GetService("@mozilla.org/embedcomp/window-watcher;1")); if (wwatch) { nsCOMPtr newWindow; - wwatch->OpenWindow(parentWindow, spec, "", 0, 0, + wwatch->OpenWindow(parentWindow, spec.get(), "", 0, 0, getter_AddRefs(newWindow)); } diff --git a/mozilla/xpfe/communicator/resources/content/contentAreaClick.js b/mozilla/xpfe/communicator/resources/content/contentAreaClick.js index 17cbd20559f..3fa0ba334bc 100644 --- a/mozilla/xpfe/communicator/resources/content/contentAreaClick.js +++ b/mozilla/xpfe/communicator/resources/content/contentAreaClick.js @@ -258,7 +258,7 @@ // Construct nsIURL. var ioService = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); - var baseURI = ioService.newURI(base, null); + var baseURI = ioService.newURI(base, null, null); - return ioService.newURI(baseURI.resolve(url), null).spec; + return ioService.newURI(baseURI.resolve(url), null, null).spec; } diff --git a/mozilla/xpfe/communicator/resources/content/nsContextMenu.js b/mozilla/xpfe/communicator/resources/content/nsContextMenu.js index 0bba9f62ffd..631961c1fe4 100644 --- a/mozilla/xpfe/communicator/resources/content/nsContextMenu.js +++ b/mozilla/xpfe/communicator/resources/content/nsContextMenu.js @@ -701,9 +701,9 @@ nsContextMenu.prototype = { // Construct nsIURL. var ioService = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); - var baseURI = ioService.newURI(base, null); + var baseURI = ioService.newURI(base, null, null); - return ioService.newURI(baseURI.resolve(url), null).spec; + return ioService.newURI(baseURI.resolve(url), null, null).spec; }, // Parse coords= attribute and return array. parseCoords : function ( area ) { diff --git a/mozilla/xpfe/components/autocomplete/src/nsLDAPAutoCompleteSession.cpp b/mozilla/xpfe/components/autocomplete/src/nsLDAPAutoCompleteSession.cpp index 708a87efc69..c81e95f9ca7 100644 --- a/mozilla/xpfe/components/autocomplete/src/nsLDAPAutoCompleteSession.cpp +++ b/mozilla/xpfe/components/autocomplete/src/nsLDAPAutoCompleteSession.cpp @@ -951,8 +951,8 @@ nsLDAPAutoCompleteSession::InitConnection() // host to connect to // - nsXPIDLCString host; - rv = mServerURL->GetHost(getter_Copies(host)); + nsCAutoString host; + rv = mServerURL->GetAsciiHost(host); if (NS_FAILED(rv)) { FinishAutoCompleteLookup(nsIAutoCompleteStatus::failureItems, rv, UNBOUND); @@ -988,7 +988,7 @@ nsLDAPAutoCompleteSession::InitConnection() // lookup to occur, and we'll finish the binding of the connection // in the OnLDAPInit() listener function. // - rv = mConnection->Init(host, port, 0, selfProxy); + rv = mConnection->Init(host.get(), port, 0, selfProxy); if NS_FAILED(rv) { switch (rv) { diff --git a/mozilla/xpfe/components/bookmarks/src/nsBookmarksService.cpp b/mozilla/xpfe/components/bookmarks/src/nsBookmarksService.cpp index 6a87c34e801..3a5ed97c3ba 100644 --- a/mozilla/xpfe/components/bookmarks/src/nsBookmarksService.cpp +++ b/mozilla/xpfe/components/bookmarks/src/nsBookmarksService.cpp @@ -102,6 +102,7 @@ #ifdef XP_WIN #include #include +#include "nsIFileURL.h" #endif nsIRDFResource *kNC_IEFavoritesRoot; @@ -176,7 +177,7 @@ static const char kURINC_NewSearchFolder[] = "NC:NewSearchFolder"; static const char kDefaultPersonalToolbarFolder[] = "Personal Toolbar Folder"; static const char kBookmarkCommand[] = "http://home.netscape.com/NC-rdf#command?"; -#define bookmark_properties "chrome://communicator/locale/bookmarks/bookmark.properties" +#define bookmark_properties NS_LITERAL_CSTRING("chrome://communicator/locale/bookmarks/bookmark.properties") #define NAVIGATOR_CHROME_URL "chrome://navigator/content/" //////////////////////////////////////////////////////////////////////// @@ -1738,7 +1739,7 @@ nsBookmarksService::Init() /* create a URL for the string resource file */ nsCOMPtr uri; - if (NS_SUCCEEDED(rv = mNetService->NewURI(bookmark_properties, nsnull, + if (NS_SUCCEEDED(rv = mNetService->NewURI(bookmark_properties, nsnull, nsnull, getter_AddRefs(uri)))) { /* create a bundle for the localization */ @@ -1746,15 +1747,10 @@ nsBookmarksService::Init() if (NS_SUCCEEDED(rv = nsServiceManager::GetService(kStringBundleServiceCID, NS_GET_IID(nsIStringBundleService), getter_AddRefs(stringService)))) { - char *spec = nsnull; - if (NS_SUCCEEDED(rv = uri->GetSpec(&spec)) && (spec)) + nsCAutoString spec; + if (NS_SUCCEEDED(rv = uri->GetSpec(spec))) { - if (NS_SUCCEEDED(rv = stringService->CreateBundle(spec, - getter_AddRefs(mBundle)))) - { - } - nsCRT::free(spec); - spec = nsnull; + stringService->CreateBundle(spec.get(), getter_AddRefs(mBundle)); } } } @@ -2102,7 +2098,7 @@ nsBookmarksService::FireTimer(nsITimer* aTimer, void* aClosure) if (NS_SUCCEEDED(rv = NS_NewURI(getter_AddRefs(uri), url))) { nsCOMPtr channel; - if (NS_SUCCEEDED(rv = NS_OpenURI(getter_AddRefs(channel), uri, nsnull))) + if (NS_SUCCEEDED(rv = NS_NewChannel(getter_AddRefs(channel), uri, nsnull))) { channel->SetLoadFlags(nsIRequest::VALIDATE_ALWAYS); nsCOMPtr httpChannel = do_QueryInterface(channel); @@ -2870,8 +2866,6 @@ nsBookmarksService::GetLastCharset(const char *aURI, PRUnichar **aLastCharset) if (NS_SUCCEEDED(rv = gRDF->GetResource(aURI, getter_AddRefs(bookmark) ))) { - PRBool isBookmark = PR_FALSE; - // Note: always use mInner!! Otherwise, could get into an infinite loop // due to Assert/Change calling UpdateBookmarkLastModifiedDate() @@ -2959,8 +2953,6 @@ nsBookmarksService::UpdateLastVisitedDate(const char *aURL, const PRUnichar *aCh if (NS_SUCCEEDED(rv = gRDF->GetResource(aURL, getter_AddRefs(bookmark) ))) { - PRBool isBookmark = PR_FALSE; - // Note: always use mInner!! Otherwise, could get into an infinite loop // due to Assert/Change calling UpdateBookmarkLastModifiedDate() @@ -3225,8 +3217,8 @@ nsBookmarksService::ParseFavoritesFolder(nsIFile* aDirectory, nsIRDFResource* aP continue; } else { - nsXPIDLCString extension; - fileURL->GetFileExtension(getter_Copies(extension)); + nsCAutoString extension; + fileURL->GetFileExtension(extension); ToLowerCase(extension); if (!extension.Equals(NS_LITERAL_CSTRING("url"))) continue; @@ -3237,10 +3229,9 @@ nsBookmarksService::ParseFavoritesFolder(nsIFile* aDirectory, nsIRDFResource* aP nsXPIDLCString url; ResolveShortcut(path.get(), getter_Copies(url)); - nsXPIDLCString baseName; - fileURL->GetFileBaseName(getter_Copies(baseName)); - nsAutoString bookmarkName; - bookmarkName.AssignWithConversion(baseName); + nsCAutoString baseName; + fileURL->GetFileBaseName(baseName); + NS_ConvertUTF8toUCS2 bookmarkName(baseName); nsCOMPtr bookmark; rv = CreateBookmark(bookmarkName.get(), url.get(), aParentResource, getter_AddRefs(bookmark)); @@ -3513,7 +3504,7 @@ nsBookmarksService::ProcessCachedBookmarkIcon(nsIRDFResource* aSource, } nsCOMPtr nsURI; - if (NS_FAILED(rv = mNetService->NewURI(uri, nsnull, getter_AddRefs(nsURI)))) + if (NS_FAILED(rv = mNetService->NewURI(nsDependentCString(uri), nsnull, nsnull, getter_AddRefs(nsURI)))) { return(rv); } @@ -3530,8 +3521,8 @@ nsBookmarksService::ProcessCachedBookmarkIcon(nsIRDFResource* aSource, return(NS_RDF_NO_VALUE); } - nsXPIDLCString prePath; - if (NS_FAILED(rv = nsURI->GetPrePath(getter_Copies(prePath)))) + nsCAutoString prePath; + if (NS_FAILED(rv = nsURI->GetPrePath(prePath))) { return rv; } diff --git a/mozilla/xpfe/components/directory/nsDirectoryViewer.cpp b/mozilla/xpfe/components/directory/nsDirectoryViewer.cpp index 63da31ca0d1..b005e15fb58 100644 --- a/mozilla/xpfe/components/directory/nsDirectoryViewer.cpp +++ b/mozilla/xpfe/components/directory/nsDirectoryViewer.cpp @@ -311,14 +311,13 @@ nsHTTPIndex::OnStartRequest(nsIRequest *request, nsISupports* aContext) nsCOMPtr uri; channel->GetURI(getter_AddRefs(uri)); - nsXPIDLCString entryuriC; - uri->GetSpec(getter_Copies(entryuriC)); + nsCAutoString entryuriC; + uri->GetSpec(entryuriC); nsCOMPtr entry; - rv = mDirRDF->GetResource(entryuriC, getter_AddRefs(entry)); + rv = mDirRDF->GetResource(entryuriC.get(), getter_AddRefs(entry)); - nsString uriUnicode; - uriUnicode.AssignWithConversion(entryuriC); + NS_ConvertUTF8toUCS2 uriUnicode(entryuriC); nsCOMPtr URLVal; rv = mDirRDF->GetLiteral(uriUnicode.get(), getter_AddRefs(URLVal)); @@ -665,11 +664,8 @@ nsHTTPIndex::Init(nsIURI* aBaseURL) // note: don't register DS here (singleton case) - nsXPIDLCString url; - rv = aBaseURL->GetSpec(getter_Copies(url)); + rv = aBaseURL->GetSpec(mBaseURL); if (NS_FAILED(rv)) return rv; - - mBaseURL.Assign(url); // Mark the base url as a container nsCOMPtr baseRes; @@ -1014,7 +1010,7 @@ nsHTTPIndex::FireTimer(nsITimer* aTimer, void* aClosure) rv = NS_NewURI(getter_AddRefs(url), uri.get()); nsCOMPtr channel; if (NS_SUCCEEDED(rv) && (url)) { - rv = NS_OpenURI(getter_AddRefs(channel), url, nsnull, nsnull); + rv = NS_NewChannel(getter_AddRefs(channel), url, nsnull, nsnull); } if (NS_SUCCEEDED(rv) && (channel)) { channel->SetNotificationCallbacks(httpIndex); @@ -1410,7 +1406,7 @@ nsDirectoryViewerFactory::CreateInstance(const char *aCommand, if (NS_FAILED(rv)) return rv; nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), uri, nsnull, aLoadGroup); + rv = NS_NewChannel(getter_AddRefs(channel), uri, nsnull, aLoadGroup); if (NS_FAILED(rv)) return rv; nsCOMPtr listener; diff --git a/mozilla/xpfe/components/history/src/nsGlobalHistory.cpp b/mozilla/xpfe/components/history/src/nsGlobalHistory.cpp index 6117500cc49..a4ded20d266 100644 --- a/mozilla/xpfe/components/history/src/nsGlobalHistory.cpp +++ b/mozilla/xpfe/components/history/src/nsGlobalHistory.cpp @@ -746,12 +746,12 @@ nsGlobalHistory::AddNewPageToDatabase(const char *aURL, SetRowValue(row, kToken_LastVisitDateColumn, aDate); SetRowValue(row, kToken_FirstVisitDateColumn, aDate); - nsXPIDLCString hostname; + nsCAutoString hostname; nsCOMPtr ioService = do_GetService(NS_IOSERVICE_CONTRACTID); if (!ioService) return NS_ERROR_FAILURE; - ioService->ExtractUrlPart(aURL, nsIIOService::url_Host, 0, 0, getter_Copies(hostname)); + ioService->ExtractUrlPart(nsDependentCString(aURL), nsIIOService::url_Host, hostname); - SetRowValue(row, kToken_HostnameColumn, hostname); + SetRowValue(row, kToken_HostnameColumn, hostname.get()); *aResult = row; NS_ADDREF(*aResult); @@ -1044,17 +1044,17 @@ nsGlobalHistory::MatchHost(nsIMdbRow *aRow, nsCAutoString(Substring(startPtr, startPtr + yarn.mYarn_Fill)).get()); if (NS_FAILED(rv)) return PR_FALSE; - nsXPIDLCString urlHost; - rv = hostInfo->cachedUrl->GetHost(getter_Copies(urlHost)); + nsCAutoString urlHost; + rv = hostInfo->cachedUrl->GetHost(urlHost); if (NS_FAILED(rv)) return PR_FALSE; - if (PL_strcmp(urlHost, hostInfo->host) == 0) + if (PL_strcmp(urlHost.get(), hostInfo->host) == 0) return PR_TRUE; // now try for a domain match, if necessary if (hostInfo->entireDomain) { // do a reverse-search to match the end of the string - char *domain = PL_strrstr(urlHost, hostInfo->host); + char *domain = PL_strrstr(urlHost.get(), hostInfo->host); // now verify that we're matching EXACTLY the domain, and // not some random string inside the hostname @@ -1639,12 +1639,12 @@ nsGlobalHistory::GetTarget(nsIRDFResource* aSource, if (!urlObj) return NS_ERROR_FAILURE; - nsXPIDLCString filename; - rv = urlObj->GetFileName(getter_Copies(filename)); - if (NS_FAILED(rv) || !(const char*)filename) { + nsCAutoString filename; + rv = urlObj->GetFileName(filename); + if (NS_FAILED(rv) || filename.IsEmpty()) { // ok fine. we'll use the file path. then we give up! - rv = urlObj->GetPath(getter_Copies(filename)); - if (PL_strcmp(filename, "/") == 0) { + rv = urlObj->GetPath(filename); + if (strcmp(filename.get(), "/") == 0) { // if the top of a site does not have a title // (common for redirections) then return the hostname return GetTarget(aSource, kNC_Hostname, aTruthValue, aTarget); diff --git a/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp b/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp index ed689676d24..0d1e1de9811 100755 --- a/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp +++ b/mozilla/xpfe/components/search/src/nsInternetSearchService.cpp @@ -650,7 +650,7 @@ InternetSearchDataSource::FireTimer(nsITimer* aTimer, void* aClosure) if (NS_FAILED(rv = NS_NewURI(getter_AddRefs(uri), updateURL.get()))) return; nsCOMPtr channel; - if (NS_FAILED(rv = NS_OpenURI(getter_AddRefs(channel), uri, nsnull))) return; + if (NS_FAILED(rv = NS_NewChannel(getter_AddRefs(channel), uri, nsnull))) return; channel->SetLoadFlags(nsIRequest::VALIDATE_ALWAYS); @@ -1240,13 +1240,13 @@ InternetSearchDataSource::GetCategoryList() // get search.rdf nsCOMPtr searchFile; - nsXPIDLCString searchFileURLSpec; + nsCAutoString searchFileURLSpec; rv = NS_GetSpecialDirectory(NS_APP_SEARCH_50_FILE, getter_AddRefs(searchFile)); if (NS_FAILED(rv)) return rv; - NS_GetURLSpecFromFile(searchFile, getter_Copies(searchFileURLSpec)); + NS_GetURLSpecFromFile(searchFile, searchFileURLSpec); if (NS_FAILED(rv)) return rv; - rv = remoteCategoryDataSource->Init(searchFileURLSpec); + rv = remoteCategoryDataSource->Init(searchFileURLSpec.get()); if (NS_FAILED(rv)) return rv; // synchronous read @@ -2322,7 +2322,7 @@ InternetSearchDataSource::AddSearchEngine(const char *engineURL, const char *ico return(rv); nsCOMPtr engineChannel; - if (NS_FAILED(rv = NS_OpenURI(getter_AddRefs(engineChannel), engineURI, nsnull, mBackgroundLoadGroup))) + if (NS_FAILED(rv = NS_NewChannel(getter_AddRefs(engineChannel), engineURI, nsnull, mBackgroundLoadGroup))) return(rv); if (NS_FAILED(rv = engineChannel->AsyncOpen(this, engineContext))) @@ -2342,7 +2342,7 @@ InternetSearchDataSource::AddSearchEngine(const char *engineURL, const char *ico return(rv); nsCOMPtr iconChannel; - if (NS_FAILED(rv = NS_OpenURI(getter_AddRefs(iconChannel), iconURI, nsnull, mBackgroundLoadGroup))) + if (NS_FAILED(rv = NS_NewChannel(getter_AddRefs(iconChannel), iconURI, nsnull, mBackgroundLoadGroup))) return(rv); if (NS_FAILED(rv = iconChannel->AsyncOpen(this, iconContext))) return(rv); @@ -2367,16 +2367,12 @@ InternetSearchDataSource::saveContents(nsIChannel* channel, nsIInternetSearchCon if (!channelURI) return(NS_ERROR_NULL_POINTER); - char *spec = nsnull; - if (NS_FAILED(rv = channelURI->GetSpec(&spec))) + nsCAutoString spec; + if (NS_FAILED(rv = channelURI->GetSpec(spec))) return(rv); - if (!spec) - return(NS_ERROR_NULL_POINTER); // get base name - nsAutoString baseName; - baseName.AssignWithConversion(spec); - Recycle(spec); + NS_ConvertUTF8toUCS2 baseName(spec); PRInt32 slashOffset = baseName.RFindChar(PRUnichar('/')); if (slashOffset < 0) return(NS_ERROR_UNEXPECTED); @@ -3675,7 +3671,7 @@ InternetSearchDataSource::DoSearch(nsIRDFResource *source, nsIRDFResource *engin if (NS_SUCCEEDED(rv = NS_NewURI(getter_AddRefs(url), action))) { nsCOMPtr channel; - if (NS_SUCCEEDED(rv = NS_OpenURI(getter_AddRefs(channel), url, nsnull, mLoadGroup))) + if (NS_SUCCEEDED(rv = NS_NewChannel(getter_AddRefs(channel), url, nsnull, mLoadGroup))) { // send a "MultiSearch" header @@ -3857,19 +3853,19 @@ InternetSearchDataSource::SaveEngineInfoIntoGraph(nsIFile *file, nsIFile *icon, nsAutoString iconURL; if (icon) { - nsXPIDLCString iconFileURL; - if (NS_FAILED(rv = NS_GetURLSpecFromFile(icon, getter_Copies(iconFileURL)))) + nsCAutoString iconFileURL; + if (NS_FAILED(rv = NS_GetURLSpecFromFile(icon, iconFileURL))) return(rv); - iconURL.AssignWithConversion(iconFileURL); + iconURL = NS_ConvertUTF8toUCS2(iconFileURL); } #ifdef XP_MAC else if (file) { - nsXPIDLCString fileURL; - if (NS_FAILED(rv = NS_GetURLSpecFromFile(file,getter_Copies(fileURL)))) + nsCAutoString fileURL; + if (NS_FAILED(rv = NS_GetURLSpecFromFile(file,fileURL))) return(rv); iconURL.Assign(NS_LITERAL_STRING("moz-icon:")); - iconURL.AppendWithConversion(fileURL); + iconURL.Append(NS_ConvertUTF8toUCS2(fileURL)); } #endif @@ -4887,25 +4883,17 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, GetData(dataUni, "search", 0, "name", engineStr); // pre-compute host (we might discard URLs that match this) - nsAutoString hostStr; - char *hostName = nsnull; - aURL->GetHost(&hostName); - if (hostName) - { - hostStr.AssignWithConversion(hostName); - nsCRT::free(hostName); - hostName = nsnull; - } + nsCAutoString hostName; + aURL->GetAsciiHost(hostName); // pre-compute server path (we might discard URLs that match this) nsAutoString serverPathStr; - char *serverPath = nsnull; - aURL->GetPath(&serverPath); - if (serverPath) + nsCAutoString serverPath; + aURL->GetPath(serverPath); + if (!serverPath.IsEmpty()) { - serverPathStr.AssignWithConversion(serverPath); - nsCRT::free(serverPath); - serverPath = nsnull; + serverPathStr = NS_ConvertUTF8toUCS2(serverPath); + serverPath.Truncate(); PRInt32 serverOptionsOffset = serverPathStr.FindChar(PRUnichar('?')); if (serverOptionsOffset >= 0) serverPathStr.Truncate(serverOptionsOffset); @@ -5164,13 +5152,11 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, if ((absURI) && (skipLocalFlag == PR_TRUE)) { - char *absPath = nsnull; - absURI->GetPath(&absPath); - if (absPath) + nsCAutoString absPath; + absURI->GetPath(absPath); + if (!absPath.IsEmpty()) { - nsAutoString absPathStr; - absPathStr.AssignWithConversion(absPath); - nsCRT::free(absPath); + NS_ConvertUTF8toUCS2 absPathStr(absPath); PRInt32 pathOptionsOffset = absPathStr.FindChar(PRUnichar('?')); if (pathOptionsOffset >= 0) absPathStr.Truncate(pathOptionsOffset); @@ -5178,14 +5164,13 @@ InternetSearchDataSource::ParseHTML(nsIURI *aURL, nsIRDFResource *mParent, if (pathsMatchFlag == PR_TRUE) continue; } - if (!hostStr.IsEmpty()) + if (!hostName.IsEmpty()) { - char *absHost = nsnull; - absURI->GetHost(&absHost); - if (absHost) + nsCAutoString absHost; + absURI->GetAsciiHost(absHost); + if (!absHost.IsEmpty()) { - PRBool hostsMatchFlag = hostStr.EqualsIgnoreCase(absHost); - nsCRT::free(absHost); + PRBool hostsMatchFlag = !nsCRT::strcasecmp(hostName.get(), absHost.get()); if (hostsMatchFlag == PR_TRUE) continue; } } diff --git a/mozilla/xpfe/components/shistory/src/nsSHEntry.cpp b/mozilla/xpfe/components/shistory/src/nsSHEntry.cpp index 884ec3c4768..baa0bca0eab 100644 --- a/mozilla/xpfe/components/shistory/src/nsSHEntry.cpp +++ b/mozilla/xpfe/components/shistory/src/nsSHEntry.cpp @@ -121,9 +121,9 @@ NS_IMETHODIMP nsSHEntry::GetTitle(PRUnichar** aTitle) // Check for empty title... if ( mTitle.IsEmpty() && mURI ) { // Default title is the URL. - nsXPIDLCString spec; - if ( NS_SUCCEEDED( mURI->GetSpec( getter_Copies( spec ) ) ) ) { - mTitle.AssignWithConversion( spec ); + nsCAutoString spec; + if ( NS_SUCCEEDED( mURI->GetSpec( spec ) ) ) { + mTitle = NS_ConvertUTF8toUCS2( spec ); } } diff --git a/mozilla/xpfe/components/shistory/src/nsSHistory.cpp b/mozilla/xpfe/components/shistory/src/nsSHistory.cpp index 384b32507da..f3ca25c092a 100644 --- a/mozilla/xpfe/components/shistory/src/nsSHistory.cpp +++ b/mozilla/xpfe/components/shistory/src/nsSHistory.cpp @@ -281,8 +281,6 @@ nsSHistory::PrintHistory() nsCOMPtr uri; PRUnichar * title; - nsXPIDLCString url; - entry->GetLayoutHistoryState(getter_AddRefs(layoutHistoryState)); nsCOMPtr hEntry(do_QueryInterface(entry)); if (hEntry) { @@ -290,10 +288,11 @@ nsSHistory::PrintHistory() hEntry->GetTitle(&title); } - if (uri) - uri->GetSpec(getter_Copies(url)); - #if 0 + nsCAutoString url; + if (uri) + uri->GetSpec(url); + printf("**** SH Transaction #%d, Entry = %x\n", index, entry.get()); printf("\t\t URL = %s\n", url); printf("\t\t Title = %s\n", NS_LossyConvertUCS2toASCII(title).get()); diff --git a/mozilla/xpfe/components/startup/src/nsCommandLineService.cpp b/mozilla/xpfe/components/startup/src/nsCommandLineService.cpp index f1fe2fe0c3b..17acffe0113 100644 --- a/mozilla/xpfe/components/startup/src/nsCommandLineService.cpp +++ b/mozilla/xpfe/components/startup/src/nsCommandLineService.cpp @@ -74,10 +74,10 @@ static void* ProcessURLArg(char* str) rv = file->InitWithPath(str); if (NS_SUCCEEDED(rv)) { - nsXPIDLCString fileurl; - rv = NS_GetURLSpecFromFile(file, getter_Copies(fileurl)); - if (NS_SUCCEEDED(rv) && fileurl.get()) - return NS_REINTERPRET_CAST(void*, nsCRT::strdup(fileurl.get())); + nsCAutoString fileurl; + rv = NS_GetURLSpecFromFile(file, fileurl); + if (NS_SUCCEEDED(rv)) + return NS_REINTERPRET_CAST(void*, ToNewCString(fileurl)); } } } diff --git a/mozilla/xpfe/components/urlbarhistory/src/nsUrlbarHistory.cpp b/mozilla/xpfe/components/urlbarhistory/src/nsUrlbarHistory.cpp index 714bd5d44e5..2dc4d552c49 100644 --- a/mozilla/xpfe/components/urlbarhistory/src/nsUrlbarHistory.cpp +++ b/mozilla/xpfe/components/urlbarhistory/src/nsUrlbarHistory.cpp @@ -562,29 +562,27 @@ nsUrlbarHistory::GetHostIndex(const PRUnichar * aPath, PRInt32 * aReturn) nsresult rv; nsCOMPtr uri; - rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUCS2toUTF8(aPath).get()); + rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUCS2toUTF8(aPath)); if (NS_FAILED(rv)) return rv; nsCOMPtr pathURL(do_QueryInterface(uri)); if (pathURL) { - char * host=nsnull, *preHost = nsnull, * filePath = nsnull; - pathURL->GetHost(&host); - pathURL->GetFilePath(&filePath); - pathURL->GetPreHost(&preHost); - nsAutoString path(aPath); - if (preHost) - slashIndex = path.Find(preHost, PR_TRUE); - else if (host) - slashIndex = path.Find(host,PR_TRUE); - else if (filePath) - slashIndex = path.Find(filePath, PR_TRUE); + nsCAutoString host, filePath, userPass; + pathURL->GetHost(host); + pathURL->GetFilePath(filePath); + pathURL->GetUserPass(userPass); + nsCAutoString spec; + pathURL->GetSpec(spec); + if (!userPass.IsEmpty()) + slashIndex = spec.Find(userPass, PR_TRUE); + else if (!host.IsEmpty()) + slashIndex = spec.Find(host,PR_TRUE); + else if (!filePath.IsEmpty()) + slashIndex = spec.Find(filePath, PR_TRUE); else slashIndex = 0; - nsCRT::free(preHost); - nsCRT::free(host); - nsCRT::free(filePath); //printf("$$$$ Scheme for uri = %s, preHost = %s, filepath = %s, Host = %s HostIndex = %d\n", pathScheme, preHost, filePath, pathHost, *aReturn); } @@ -650,22 +648,22 @@ nsUrlbarHistory::VerifyAndCreateEntry(const PRUnichar * aSearchItem, const PRUni searchStrLen = nsCRT::strlen(aSearchItem); nsresult rv; - nsXPIDLCString filePath; + nsCAutoString filePath; nsCOMPtr ioService = do_GetService(NS_IOSERVICE_CONTRACTID); if (!ioService) return NS_ERROR_FAILURE; - ioService->ExtractUrlPart(NS_ConvertUCS2toUTF8(aSearchItem).get(), nsIIOService::url_Path, 0, 0, getter_Copies(filePath)); + ioService->ExtractUrlPart(NS_ConvertUCS2toUTF8(aSearchItem), nsIIOService::url_Path, filePath); // Don't bother checking for hostname if the search string // already has a filepath; - if (filePath && (strlen(filePath) > 1)) { + if (filePath.Length() > 1) { return NS_OK; } - ioService->ExtractUrlPart(NS_ConvertUCS2toUTF8(aMatchStr).get(), nsIIOService::url_Path, 0, 0, getter_Copies(filePath)); + ioService->ExtractUrlPart(NS_ConvertUCS2toUTF8(aMatchStr), nsIIOService::url_Path, filePath); // If the match string doesn't have a filepath // we need to do nothing here, return. - if (!filePath || (filePath && (strlen(filePath) <=1))) + if (filePath.Length() <= 1) return NS_OK; // Find the position of the filepath in the result string diff --git a/mozilla/xpfe/components/xfer/src/nsStreamTransfer.cpp b/mozilla/xpfe/components/xfer/src/nsStreamTransfer.cpp index 491cc6d864d..886ec76c3fc 100644 --- a/mozilla/xpfe/components/xfer/src/nsStreamTransfer.cpp +++ b/mozilla/xpfe/components/xfer/src/nsStreamTransfer.cpp @@ -40,7 +40,7 @@ #include "nsStreamXferOp.h" #include "nsIFilePicker.h" #include "nsILocalFile.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsNetUtil.h" #include "nsIPref.h" #include "nsIURL.h" @@ -187,7 +187,7 @@ nsStreamTransfer::SelectFileAndTransferLocationSpec( char const *aURL, if ( NS_SUCCEEDED( rv ) && uri ) { // Construct channel from URI. nsCOMPtr channel; - rv = NS_OpenURI( getter_AddRefs( channel ), uri, nsnull ); + rv = NS_NewChannel( getter_AddRefs( channel ), uri, nsnull ); if ( NS_SUCCEEDED( rv ) && channel ) { // See if LOAD_FROM_CACHE is called for. @@ -359,23 +359,21 @@ nsString nsStreamTransfer::SuggestNameFor( nsIChannel *aChannel, char const *sug nsCOMPtr url( do_QueryInterface( uri, &rv ) ); if ( NS_SUCCEEDED( rv ) && url ) { - char *nameFromURL = 0; - rv = url->GetFileName( &nameFromURL ); - if ( NS_SUCCEEDED( rv ) && nameFromURL ) { + nsCAutoString nameFromURL; + rv = url->GetFileName( nameFromURL ); + if ( NS_SUCCEEDED( rv ) && !nameFromURL.IsEmpty() ) { // Unescape the file name (GetFileName escapes it). - nsUnescape( nameFromURL ); + nsUnescape( (char *) nameFromURL.get() ); //make sure nameFromURL only contains ascii, //otherwise we have no idea about urlname's original charset, suggest nothing - char *ptr; - for (ptr = nameFromURL; *ptr; ptr++) + const char *ptr; + for (ptr = nameFromURL.get(); *ptr; ptr++) if (*ptr & '\200') break; if (!(*ptr)) result = NS_ConvertASCIItoUCS2(nameFromURL).get(); - - nsCRT::free( nameFromURL ); } } } diff --git a/mozilla/xpfe/components/xremote/src/XRemoteService.cpp b/mozilla/xpfe/components/xremote/src/XRemoteService.cpp index 275596832d4..e06f378cc96 100644 --- a/mozilla/xpfe/components/xremote/src/XRemoteService.cpp +++ b/mozilla/xpfe/components/xremote/src/XRemoteService.cpp @@ -681,7 +681,7 @@ XRemoteService::OpenURL(nsCString &aArgument, // open a channel nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), uri); + rv = NS_NewChannel(getter_AddRefs(channel), uri); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; diff --git a/mozilla/xpinstall/src/nsInstall.cpp b/mozilla/xpinstall/src/nsInstall.cpp index c6ad3f5b1ec..4a41011c78e 100644 --- a/mozilla/xpinstall/src/nsInstall.cpp +++ b/mozilla/xpinstall/src/nsInstall.cpp @@ -1192,14 +1192,14 @@ nsInstall::LoadResources(JSContext* cx, const nsString& aBaseName, jsval* aRetur // get the string bundle using the extracted properties file #if 1 { - nsXPIDLCString spec; - ret = NS_GetURLSpecFromFile(resFile, getter_Copies(spec)); + nsCAutoString spec; + ret = NS_GetURLSpecFromFile(resFile, spec); if (NS_FAILED(ret)) { NS_WARNING("cannot get url spec\n"); nsServiceManager::ReleaseService(kStringBundleServiceCID, service); return ret; } - ret = service->CreateBundle(spec, &bundle); + ret = service->CreateBundle(spec.get(), &bundle); } #else ret = service->CreateBundle(url, &bundle); diff --git a/mozilla/xpinstall/src/nsInstallTrigger.cpp b/mozilla/xpinstall/src/nsInstallTrigger.cpp index 60efe6341d3..fb7f9bea83c 100644 --- a/mozilla/xpinstall/src/nsInstallTrigger.cpp +++ b/mozilla/xpinstall/src/nsInstallTrigger.cpp @@ -140,8 +140,8 @@ nsInstallTrigger::HandleContent(const char * aContentType, request->Cancel(NS_BINDING_ABORTED); if (uri) { - nsXPIDLCString spec; - rv = uri->GetSpec(getter_Copies(spec)); + nsCAutoString spec; + rv = uri->GetSpec(spec); if (NS_FAILED(rv)) return NS_ERROR_NULL_POINTER; @@ -153,7 +153,7 @@ nsInstallTrigger::HandleContent(const char * aContentType, if (globalObject) { PRBool value; - rv = StartSoftwareUpdate(globalObject, NS_ConvertASCIItoUCS2(spec), 0, &value); + rv = StartSoftwareUpdate(globalObject, NS_ConvertUTF8toUCS2(spec), 0, &value); if (NS_SUCCEEDED(rv) && value) return NS_OK; diff --git a/mozilla/xpinstall/src/nsRegisterItem.cpp b/mozilla/xpinstall/src/nsRegisterItem.cpp index 04319a331ef..fdd3ce25d5c 100644 --- a/mozilla/xpinstall/src/nsRegisterItem.cpp +++ b/mozilla/xpinstall/src/nsRegisterItem.cpp @@ -26,7 +26,7 @@ #include "nsRegisterItem.h" #include "nsInstallResources.h" #include "nsNetUtil.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsXPIDLString.h" #include "nsReadableUtils.h" #include "nsInstallTrigger.h" @@ -453,7 +453,9 @@ nsRegisterItem::GetURLFromIFile(nsIFile* aFile, char** aOutURL) rv = fileURL->SetFile(aFile); if (NS_SUCCEEDED(rv)) { - rv = fileURL->GetSpec(aOutURL); + nsCAutoString spec; + rv = fileURL->GetSpec(spec); + *aOutURL = ToNewCString(spec); } } } diff --git a/mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp b/mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp index f108e9a4b62..2bceb1a4903 100644 --- a/mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp +++ b/mozilla/xpinstall/src/nsSoftwareUpdateRun.cpp @@ -36,7 +36,7 @@ #include "nsProxiedService.h" #include "nsFileStream.h" #include "nsIURI.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsNetUtil.h" #include "nspr.h" @@ -551,8 +551,8 @@ extern "C" void RunChromeInstallOnThread(void *data) if (NS_SUCCEEDED(rv)) { - nsXPIDLCString localURL; - rv = fileURL->GetSpec(getter_Copies(localURL)); + nsCAutoString localURL; + rv = fileURL->GetSpec(localURL); spec.Append(localURL); spec.Append("!/"); } diff --git a/mozilla/xpinstall/src/nsXPInstallManager.cpp b/mozilla/xpinstall/src/nsXPInstallManager.cpp index 92e09b5fbdf..2cd46c96f5f 100644 --- a/mozilla/xpinstall/src/nsXPInstallManager.cpp +++ b/mozilla/xpinstall/src/nsXPInstallManager.cpp @@ -31,7 +31,7 @@ #include "nsIServiceManager.h" #include "nsIURL.h" -#include "nsIFileChannel.h" +#include "nsIFileURL.h" #include "nsITransport.h" #include "nsIFileTransportService.h" @@ -435,7 +435,7 @@ NS_IMETHODIMP nsXPInstallManager::DownloadNext() { nsCOMPtr channel; - rv = NS_OpenURI(getter_AddRefs(channel), pURL, nsnull, nsnull, this); + rv = NS_NewChannel(getter_AddRefs(channel), pURL, nsnull, nsnull, this); if (NS_SUCCEEDED(rv)) { @@ -698,17 +698,17 @@ nsXPInstallManager::OnStartRequest(nsIRequest* request, nsISupports *ctxt) if (NS_SUCCEEDED(rv) && !mItem->mOutStream) { - nsCOMPtr outChannel; + nsCOMPtr outTransport; rv = fts->CreateTransport(mItem->mFile, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, 0664, - getter_AddRefs( outChannel)); + getter_AddRefs( outTransport)); if (NS_SUCCEEDED(rv)) { // Open output stream. - rv = outChannel->OpenOutputStream(0, -1, 0, getter_AddRefs( mItem->mOutStream ) ); + rv = outTransport->OpenOutputStream(0, PRUint32(-1), 0, getter_AddRefs( mItem->mOutStream ) ); } } }