From 1cdeaa98ce9a84ebccde2616d85eee116fbe250e Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Tue, 12 May 2015 15:08:20 -0700 Subject: [PATCH] Bug 1164292 - Switch nsIPrincipal::origin to ACString. r=gabor --- caps/nsIPrincipal.idl | 4 +-- caps/nsNullPrincipal.cpp | 15 +++-------- caps/nsNullPrincipal.h | 2 +- caps/nsPrincipal.cpp | 30 +++++++-------------- caps/nsPrincipal.h | 6 ++--- caps/nsScriptSecurityManager.cpp | 8 +++--- caps/nsSystemPrincipal.cpp | 6 ++--- caps/nsSystemPrincipal.h | 2 +- dom/cache/ManagerId.cpp | 2 +- dom/cache/PrincipalVerifier.cpp | 2 +- dom/ipc/ContentParent.cpp | 2 +- dom/media/MediaManager.cpp | 3 +-- dom/quota/QuotaManager.cpp | 2 +- extensions/cookie/nsPermissionManager.cpp | 2 +- netwerk/ipc/NeckoParent.cpp | 2 +- netwerk/protocol/app/AppProtocolHandler.cpp | 2 +- 16 files changed, 35 insertions(+), 55 deletions(-) diff --git a/caps/nsIPrincipal.idl b/caps/nsIPrincipal.idl index 550dc9f663f3..3ac23b124cba 100644 --- a/caps/nsIPrincipal.idl +++ b/caps/nsIPrincipal.idl @@ -20,7 +20,7 @@ interface nsIContentSecurityPolicy; [ptr] native JSPrincipals(JSPrincipals); [ptr] native PrincipalArray(nsTArray >); -[scriptable, builtinclass, uuid(264fe8ca-c382-11e4-95a6-782bcbaebb28)] +[scriptable, builtinclass, uuid(7e024afa-afd4-48e7-ba11-1c7b9620b1b2)] interface nsIPrincipal : nsISerializable { /** @@ -72,7 +72,7 @@ interface nsIPrincipal : nsISerializable // XXXcaa this should probably be turned into an nsIURI. // The system principal's origin should be some caps namespace // with a chrome URI. All of chrome should probably be the same. - readonly attribute string origin; + readonly attribute ACString origin; /** * Returns whether the other principal is equal to or weaker than this diff --git a/caps/nsNullPrincipal.cpp b/caps/nsNullPrincipal.cpp index cab61386d5ce..0afe1c653bd0 100644 --- a/caps/nsNullPrincipal.cpp +++ b/caps/nsNullPrincipal.cpp @@ -121,19 +121,10 @@ nsNullPrincipal::SetDomain(nsIURI* aDomain) return NS_ERROR_NOT_AVAILABLE; } -NS_IMETHODIMP -nsNullPrincipal::GetOrigin(char** aOrigin) +NS_IMETHODIMP +nsNullPrincipal::GetOrigin(nsACString& aOrigin) { - *aOrigin = nullptr; - - nsAutoCString str; - nsresult rv = mURI->GetSpec(str); - NS_ENSURE_SUCCESS(rv, rv); - - *aOrigin = ToNewCString(str); - NS_ENSURE_TRUE(*aOrigin, NS_ERROR_OUT_OF_MEMORY); - - return NS_OK; + return mURI->GetSpec(aOrigin); } NS_IMETHODIMP diff --git a/caps/nsNullPrincipal.h b/caps/nsNullPrincipal.h index c16a33b7502b..c2aa45fc4921 100644 --- a/caps/nsNullPrincipal.h +++ b/caps/nsNullPrincipal.h @@ -46,7 +46,7 @@ class nsNullPrincipal final : public mozilla::BasePrincipal NS_IMETHOD GetURI(nsIURI** aURI) override; NS_IMETHOD GetDomain(nsIURI** aDomain) override; NS_IMETHOD SetDomain(nsIURI* aDomain) override; - NS_IMETHOD GetOrigin(char** aOrigin) override; + NS_IMETHOD GetOrigin(nsACString& aOrigin) override; NS_IMETHOD Subsumes(nsIPrincipal* other, bool* _retval) override; NS_IMETHOD SubsumesConsideringDomain(nsIPrincipal* other, bool* _retval) override; NS_IMETHOD CheckMayLoad(nsIURI* uri, bool report, bool allowIfInheritsPrincipal) override; diff --git a/caps/nsPrincipal.cpp b/caps/nsPrincipal.cpp index c6eb521fdc1b..c6479a9a5b79 100644 --- a/caps/nsPrincipal.cpp +++ b/caps/nsPrincipal.cpp @@ -105,14 +105,12 @@ nsPrincipal::GetScriptLocation(nsACString &aStr) } /* static */ nsresult -nsPrincipal::GetOriginForURI(nsIURI* aURI, char **aOrigin) +nsPrincipal::GetOriginForURI(nsIURI* aURI, nsACString& aOrigin) { if (!aURI) { return NS_ERROR_FAILURE; } - *aOrigin = nullptr; - nsCOMPtr origin = NS_GetInnermostURI(aURI); if (!origin) { return NS_ERROR_FAILURE; @@ -146,29 +144,21 @@ nsPrincipal::GetOriginForURI(nsIURI* aURI, char **aOrigin) hostPort.AppendInt(port, 10); } - nsAutoCString scheme; - rv = origin->GetScheme(scheme); + rv = origin->GetScheme(aOrigin); NS_ENSURE_SUCCESS(rv, rv); - - *aOrigin = ToNewCString(scheme + NS_LITERAL_CSTRING("://") + hostPort); + aOrigin.AppendLiteral("://"); + aOrigin.Append(hostPort); } else { - // Some URIs (e.g., nsSimpleURI) don't support asciiHost. Just - // get the full spec. - nsAutoCString spec; - // XXX nsMozIconURI and nsJARURI don't implement this correctly, they - // both fall back to GetSpec. That needs to be fixed. - rv = origin->GetAsciiSpec(spec); + rv = origin->GetAsciiSpec(aOrigin); NS_ENSURE_SUCCESS(rv, rv); - - *aOrigin = ToNewCString(spec); } - return *aOrigin ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + return NS_OK; } NS_IMETHODIMP -nsPrincipal::GetOrigin(char **aOrigin) +nsPrincipal::GetOrigin(nsACString& aOrigin) { return GetOriginForURI(mCodebase, aOrigin); } @@ -752,10 +742,10 @@ nsExpandedPrincipal::SetDomain(nsIURI* aDomain) } NS_IMETHODIMP -nsExpandedPrincipal::GetOrigin(char** aOrigin) +nsExpandedPrincipal::GetOrigin(nsACString& aOrigin) { - *aOrigin = ToNewCString(NS_LITERAL_CSTRING(EXPANDED_PRINCIPAL_SPEC)); - return *aOrigin ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + aOrigin.AssignLiteral(EXPANDED_PRINCIPAL_SPEC); + return NS_OK; } typedef nsresult (NS_STDCALL nsIPrincipal::*nsIPrincipalMemFn)(nsIPrincipal* aOther, diff --git a/caps/nsPrincipal.h b/caps/nsPrincipal.h index 863ac062464b..7d6580619dfb 100644 --- a/caps/nsPrincipal.h +++ b/caps/nsPrincipal.h @@ -28,7 +28,7 @@ class nsPrincipal final : public mozilla::BasePrincipal NS_IMETHOD GetURI(nsIURI** aURI) override; NS_IMETHOD GetDomain(nsIURI** aDomain) override; NS_IMETHOD SetDomain(nsIURI* aDomain) override; - NS_IMETHOD GetOrigin(char** aOrigin) override; + NS_IMETHOD GetOrigin(nsACString& aOrigin) override; NS_IMETHOD Subsumes(nsIPrincipal* other, bool* _retval) override; NS_IMETHOD SubsumesConsideringDomain(nsIPrincipal* other, bool* _retval) override; NS_IMETHOD CheckMayLoad(nsIURI* uri, bool report, bool allowIfInheritsPrincipal) override; @@ -70,7 +70,7 @@ class nsPrincipal final : public mozilla::BasePrincipal /** * Computes the puny-encoded origin of aURI. */ - static nsresult GetOriginForURI(nsIURI* aURI, char **aOrigin); + static nsresult GetOriginForURI(nsIURI* aURI, nsACString& aOrigin); /** * Called at startup to setup static data, e.g. about:config pref-observers. @@ -116,7 +116,7 @@ class nsExpandedPrincipal : public nsIExpandedPrincipal, public mozilla::BasePri NS_IMETHOD GetURI(nsIURI** aURI) override; NS_IMETHOD GetDomain(nsIURI** aDomain) override; NS_IMETHOD SetDomain(nsIURI* aDomain) override; - NS_IMETHOD GetOrigin(char** aOrigin) override; + NS_IMETHOD GetOrigin(nsACString& aOrigin) override; NS_IMETHOD Subsumes(nsIPrincipal* other, bool* _retval) override; NS_IMETHOD SubsumesConsideringDomain(nsIPrincipal* other, bool* _retval) override; NS_IMETHOD CheckMayLoad(nsIURI* uri, bool report, bool allowIfInheritsPrincipal) override; diff --git a/caps/nsScriptSecurityManager.cpp b/caps/nsScriptSecurityManager.cpp index 9ec899489549..f1e522ced069 100644 --- a/caps/nsScriptSecurityManager.cpp +++ b/caps/nsScriptSecurityManager.cpp @@ -281,7 +281,7 @@ nsScriptSecurityManager::AppStatusForPrincipal(nsIPrincipal *aPrin) nsIPrincipal::APP_STATUS_NOT_INSTALLED); nsAutoCString origin; - NS_ENSURE_SUCCESS(aPrin->GetOrigin(getter_Copies(origin)), + NS_ENSURE_SUCCESS(aPrin->GetOrigin(origin), nsIPrincipal::APP_STATUS_NOT_INSTALLED); nsString appOrigin; NS_ENSURE_SUCCESS(app->GetOrigin(appOrigin), @@ -294,7 +294,7 @@ nsScriptSecurityManager::AppStatusForPrincipal(nsIPrincipal *aPrin) nsIPrincipal::APP_STATUS_NOT_INSTALLED); nsAutoCString appOriginPunned; - NS_ENSURE_SUCCESS(nsPrincipal::GetOriginForURI(appURI, getter_Copies(appOriginPunned)), + NS_ENSURE_SUCCESS(nsPrincipal::GetOriginForURI(appURI, appOriginPunned), nsIPrincipal::APP_STATUS_NOT_INSTALLED); if (!appOriginPunned.Equals(origin)) { @@ -724,10 +724,10 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal, auto themeOrigin = Preferences::GetCString("b2g.theme.origin"); if (themeOrigin) { nsAutoCString targetOrigin; - nsPrincipal::GetOriginForURI(targetBaseURI, getter_Copies(targetOrigin)); + nsPrincipal::GetOriginForURI(targetBaseURI, targetOrigin); if (targetOrigin.Equals(themeOrigin)) { nsAutoCString pOrigin; - aPrincipal->GetOrigin(getter_Copies(pOrigin)); + aPrincipal->GetOrigin(pOrigin); return nsContentUtils::IsExactSitePermAllow(aPrincipal, "themeable") || pOrigin.Equals(themeOrigin) ? NS_OK : NS_ERROR_DOM_BAD_URI; diff --git a/caps/nsSystemPrincipal.cpp b/caps/nsSystemPrincipal.cpp index 69a26e11d134..99bf97de4ca3 100644 --- a/caps/nsSystemPrincipal.cpp +++ b/caps/nsSystemPrincipal.cpp @@ -89,10 +89,10 @@ nsSystemPrincipal::GetURI(nsIURI** aURI) } NS_IMETHODIMP -nsSystemPrincipal::GetOrigin(char** aOrigin) +nsSystemPrincipal::GetOrigin(nsACString& aOrigin) { - *aOrigin = ToNewCString(NS_LITERAL_CSTRING(SYSTEM_PRINCIPAL_SPEC)); - return *aOrigin ? NS_OK : NS_ERROR_OUT_OF_MEMORY; + aOrigin.AssignLiteral(SYSTEM_PRINCIPAL_SPEC); + return NS_OK; } NS_IMETHODIMP diff --git a/caps/nsSystemPrincipal.h b/caps/nsSystemPrincipal.h index 850b3125c042..2aadb783c429 100644 --- a/caps/nsSystemPrincipal.h +++ b/caps/nsSystemPrincipal.h @@ -31,7 +31,7 @@ class nsSystemPrincipal final : public mozilla::BasePrincipal NS_IMETHOD GetURI(nsIURI** aURI) override; NS_IMETHOD GetDomain(nsIURI** aDomain) override; NS_IMETHOD SetDomain(nsIURI* aDomain) override; - NS_IMETHOD GetOrigin(char** aOrigin) override; + NS_IMETHOD GetOrigin(nsACString& aOrigin) override; NS_IMETHOD Subsumes(nsIPrincipal* other, bool* _retval) override; NS_IMETHOD SubsumesConsideringDomain(nsIPrincipal* other, bool* _retval) override; NS_IMETHOD CheckMayLoad(nsIURI* uri, bool report, bool allowIfInheritsPrincipal) override; diff --git a/dom/cache/ManagerId.cpp b/dom/cache/ManagerId.cpp index bb261e22c6d7..7270d8326aac 100644 --- a/dom/cache/ManagerId.cpp +++ b/dom/cache/ManagerId.cpp @@ -33,7 +33,7 @@ ManagerId::Create(nsIPrincipal* aPrincipal, ManagerId** aManagerIdOut) // TODO: consider using QuotaManager's modified origin here (bug 1112071) nsAutoCString origin; - nsresult rv = aPrincipal->GetOrigin(getter_Copies(origin)); + nsresult rv = aPrincipal->GetOrigin(origin); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } uint32_t appId; diff --git a/dom/cache/PrincipalVerifier.cpp b/dom/cache/PrincipalVerifier.cpp index 7f4f40b95b59..b6ee9ea17c20 100644 --- a/dom/cache/PrincipalVerifier.cpp +++ b/dom/cache/PrincipalVerifier.cpp @@ -150,7 +150,7 @@ PrincipalVerifier::VerifyOnMainThread() // is a synthetic [System Principal] string. if (!ssm->IsSystemPrincipal(principal)) { nsAutoCString origin; - rv = principal->GetOrigin(getter_Copies(origin)); + rv = principal->GetOrigin(origin); if (NS_WARN_IF(NS_FAILED(rv))) { DispatchToInitiatingThread(rv); return; diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index 42e4a15cd9ba..3892c488d7f2 100755 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -4283,7 +4283,7 @@ ContentParent::RecvAddGeolocationListener(const IPC::Principal& aPrincipal, if (!principal) { return true; } - principal->GetOrigin(getter_Copies(origin)); + principal->GetOrigin(origin); nsRefPtr gs = nsGeolocationSettings::GetGeolocationSettings(); if (gs) { gs->PutWatchOrigin(mGeolocationWatchID, origin); diff --git a/dom/media/MediaManager.cpp b/dom/media/MediaManager.cpp index db7e11d54a49..f33d1a2f9369 100644 --- a/dom/media/MediaManager.cpp +++ b/dom/media/MediaManager.cpp @@ -2033,8 +2033,7 @@ MediaManager::GetUserMediaDevices(nsPIDOMWindow* aWindow, Preferences::GetBool("media.navigator.streams.fake", false); nsCString origin; - nsPrincipal::GetOriginForURI(aWindow->GetDocumentURI(), - getter_Copies(origin)); + nsPrincipal::GetOriginForURI(aWindow->GetDocumentURI(), origin); bool inPrivateBrowsing; { nsCOMPtr doc = aWindow->GetDoc(); diff --git a/dom/quota/QuotaManager.cpp b/dom/quota/QuotaManager.cpp index 03a31b813080..600f5d4e377b 100644 --- a/dom/quota/QuotaManager.cpp +++ b/dom/quota/QuotaManager.cpp @@ -2606,7 +2606,7 @@ QuotaManager::GetInfoFromPrincipal(nsIPrincipal* aPrincipal, } nsCString origin; - rv = aPrincipal->GetOrigin(getter_Copies(origin)); + rv = aPrincipal->GetOrigin(origin); NS_ENSURE_SUCCESS(rv, rv); if (origin.EqualsLiteral(kChromeOrigin)) { diff --git a/extensions/cookie/nsPermissionManager.cpp b/extensions/cookie/nsPermissionManager.cpp index 5c92b969967d..701e85ea16d8 100644 --- a/extensions/cookie/nsPermissionManager.cpp +++ b/extensions/cookie/nsPermissionManager.cpp @@ -156,7 +156,7 @@ GetHostForPrincipal(nsIPrincipal* aPrincipal, nsACString& aHost) } // Some entries like "file://" uses the origin. - rv = aPrincipal->GetOrigin(getter_Copies(aHost)); + rv = aPrincipal->GetOrigin(aHost); if (NS_SUCCEEDED(rv) && !aHost.IsEmpty()) { return NS_OK; } diff --git a/netwerk/ipc/NeckoParent.cpp b/netwerk/ipc/NeckoParent.cpp index 15a0d94929e1..816fc60ee4a7 100644 --- a/netwerk/ipc/NeckoParent.cpp +++ b/netwerk/ipc/NeckoParent.cpp @@ -603,7 +603,7 @@ NeckoParent::AllocPRemoteOpenFileParent(const SerializedLoadContext& aSerialized bool themeWhitelist = false; if (Preferences::GetBool("dom.mozApps.themable") && appUri) { nsAutoCString origin; - nsPrincipal::GetOriginForURI(appUri, getter_Copies(origin)); + nsPrincipal::GetOriginForURI(appUri, origin); nsAutoCString themeOrigin; themeOrigin = Preferences::GetCString("b2g.theme.origin"); themeWhitelist = origin.Equals(themeOrigin); diff --git a/netwerk/protocol/app/AppProtocolHandler.cpp b/netwerk/protocol/app/AppProtocolHandler.cpp index 1ced439b041d..2c19ebae4ec6 100644 --- a/netwerk/protocol/app/AppProtocolHandler.cpp +++ b/netwerk/protocol/app/AppProtocolHandler.cpp @@ -387,7 +387,7 @@ AppProtocolHandler::NewChannel2(nsIURI* aUri, if (Preferences::GetBool("dom.mozApps.themable")) { nsAutoCString origin; - nsPrincipal::GetOriginForURI(aUri, getter_Copies(origin)); + nsPrincipal::GetOriginForURI(aUri, origin); nsAdoptingCString themeOrigin; themeOrigin = Preferences::GetCString("b2g.theme.origin"); if (themeOrigin.Equals(origin)) {