зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1543321 - Implement nsContentUtils::GetThreadSafeUTFOrigin, r=valentin
Differential Revision: https://phabricator.services.mozilla.com/D26862 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
595caf7d7c
Коммит
4db529bed9
|
@ -5873,6 +5873,7 @@ nsresult nsContentUtils::GetASCIIOrigin(nsIPrincipal* aPrincipal,
|
|||
/* static */
|
||||
nsresult nsContentUtils::GetASCIIOrigin(nsIURI* aURI, nsACString& aOrigin) {
|
||||
MOZ_ASSERT(aURI, "missing uri");
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
bool isBlobURL = false;
|
||||
nsresult rv = aURI->SchemeIs(BLOBURI_SCHEME, &isBlobURL);
|
||||
|
@ -5923,6 +5924,69 @@ nsresult nsContentUtils::GetASCIIOrigin(nsIURI* aURI, nsACString& aOrigin) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
/* static */
|
||||
nsresult nsContentUtils::GetThreadSafeASCIIOrigin(nsIURI* aURI,
|
||||
nsACString& aOrigin) {
|
||||
MOZ_ASSERT(aURI, "missing uri");
|
||||
|
||||
bool isBlobURL = false;
|
||||
nsresult rv = aURI->SchemeIs(BLOBURI_SCHEME, &isBlobURL);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// For Blob URI, the path is the URL of the owning page.
|
||||
if (isBlobURL) {
|
||||
nsAutoCString path;
|
||||
rv = aURI->GetPathQueryRef(path);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
nsresult rv = NS_NewURIOnAnyThread(getter_AddRefs(uri), path);
|
||||
if (rv == NS_ERROR_UNKNOWN_PROTOCOL) {
|
||||
return NS_ERROR_UNKNOWN_PROTOCOL;
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
aOrigin.AssignLiteral("null");
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return GetThreadSafeASCIIOrigin(uri, aOrigin);
|
||||
}
|
||||
|
||||
aOrigin.Truncate();
|
||||
|
||||
// This is not supported yet.
|
||||
nsCOMPtr<nsINestedURI> nestedURI(do_QueryInterface(aURI));
|
||||
if (nestedURI) {
|
||||
return NS_ERROR_UNKNOWN_PROTOCOL;
|
||||
}
|
||||
|
||||
nsAutoCString host;
|
||||
rv = aURI->GetAsciiHost(host);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && !host.IsEmpty()) {
|
||||
nsAutoCString userPass;
|
||||
aURI->GetUserPass(userPass);
|
||||
|
||||
nsCOMPtr<nsIURI> uri = aURI;
|
||||
|
||||
nsAutoCString prePath;
|
||||
if (!userPass.IsEmpty()) {
|
||||
rv = NS_MutateURI(uri).SetUserPass(EmptyCString()).Finalize(uri);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
rv = uri->GetPrePath(prePath);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
aOrigin = prePath;
|
||||
} else {
|
||||
aOrigin.AssignLiteral("null");
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* static */
|
||||
nsresult nsContentUtils::GetUTFOrigin(nsIPrincipal* aPrincipal,
|
||||
nsAString& aOrigin) {
|
||||
|
@ -5941,6 +6005,7 @@ nsresult nsContentUtils::GetUTFOrigin(nsIPrincipal* aPrincipal,
|
|||
/* static */
|
||||
nsresult nsContentUtils::GetUTFOrigin(nsIURI* aURI, nsAString& aOrigin) {
|
||||
MOZ_ASSERT(aURI, "missing uri");
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
nsresult rv;
|
||||
|
||||
#if defined(MOZ_THUNDERBIRD) || defined(MOZ_SUITE)
|
||||
|
@ -5964,6 +6029,24 @@ nsresult nsContentUtils::GetUTFOrigin(nsIURI* aURI, nsAString& aOrigin) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
/* static */
|
||||
nsresult nsContentUtils::GetThreadSafeUTFOrigin(nsIURI* aURI,
|
||||
nsAString& aOrigin) {
|
||||
#if defined(MOZ_THUNDERBIRD) || defined(MOZ_SUITE)
|
||||
return NS_ERROR_UNKNOWN_PROTOCOL;
|
||||
#endif
|
||||
|
||||
MOZ_ASSERT(aURI, "missing uri");
|
||||
nsresult rv;
|
||||
|
||||
nsAutoCString asciiOrigin;
|
||||
rv = GetThreadSafeASCIIOrigin(aURI, asciiOrigin);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
aOrigin = NS_ConvertUTF8toUTF16(asciiOrigin);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool nsContentUtils::CheckMayLoad(nsIPrincipal* aPrincipal,
|
||||
nsIChannel* aChannel,
|
||||
|
|
|
@ -2132,14 +2132,19 @@ class nsContentUtils {
|
|||
* suitable for, for example, header values. The UTF versions return strings
|
||||
* containing international characters.
|
||||
*
|
||||
* The thread-safe versions return NS_ERROR_UNKNOWN_PROTOCOL if the
|
||||
* operation cannot be completed on the current thread.
|
||||
*
|
||||
* @pre aPrincipal/aOrigin must not be null.
|
||||
*
|
||||
* @note this should be used for HTML5 origin determination.
|
||||
*/
|
||||
static nsresult GetASCIIOrigin(nsIPrincipal* aPrincipal, nsACString& aOrigin);
|
||||
static nsresult GetASCIIOrigin(nsIURI* aURI, nsACString& aOrigin);
|
||||
static nsresult GetThreadSafeASCIIOrigin(nsIURI* aURI, nsACString& aOrigin);
|
||||
static nsresult GetUTFOrigin(nsIPrincipal* aPrincipal, nsAString& aOrigin);
|
||||
static nsresult GetUTFOrigin(nsIURI* aURI, nsAString& aOrigin);
|
||||
static nsresult GetThreadSafeUTFOrigin(nsIURI* aURI, nsAString& aOrigin);
|
||||
|
||||
/**
|
||||
* This method creates and dispatches "command" event, which implements
|
||||
|
|
Загрузка…
Ссылка в новой задаче