nsresult nsResURL::EnsureFile() { nsresult rv; NS_ENSURE_TRUE(gResHandler, NS_ERROR_NOT_AVAILABLE); nsCAutoString spec; rv = gResHandler->ResolveURI(this, spec); if (NS_FAILED(rv)) return rv; nsCAutoString scheme; rv = net_ExtractURLScheme(spec, nsnull, nsnull, &scheme); if (NS_FAILED(rv)) return rv; // Bug 585869: // In most cases, the scheme is jar if it's not file. // Regardless, net_GetFileFromURLSpec should be avoided // when the scheme isn't file. if (!scheme.Equals(NS_LITERAL_CSTRING("file"))) return NS_ERROR_NO_INTERFACE; rv = net_GetFileFromURLSpec(spec, getter_AddRefs(mFile)); #ifdef DEBUG_bsmedberg if (NS_SUCCEEDED(rv)) { PRBool exists = PR_TRUE; mFile->Exists(&exists); if (!exists) { printf("resource %s doesn't exist!\n", spec.get()); } } #endif return rv; }
nsresult SubstitutingURL::EnsureFile() { nsAutoCString ourScheme; nsresult rv = GetScheme(ourScheme); NS_ENSURE_SUCCESS(rv, rv); // Get the handler associated with this scheme. It would be nice to just // pass this in when constructing SubstitutingURLs, but we need a generic // factory constructor. nsCOMPtr<nsIIOService> io = do_GetIOService(&rv); nsCOMPtr<nsIProtocolHandler> handler; rv = io->GetProtocolHandler(ourScheme.get(), getter_AddRefs(handler)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsISubstitutingProtocolHandler> substHandler = do_QueryInterface(handler); MOZ_ASSERT(substHandler); nsAutoCString spec; rv = substHandler->ResolveURI(this, spec); if (NS_FAILED(rv)) return rv; nsAutoCString scheme; rv = net_ExtractURLScheme(spec, nullptr, nullptr, &scheme); if (NS_FAILED(rv)) return rv; // Bug 585869: // In most cases, the scheme is jar if it's not file. // Regardless, net_GetFileFromURLSpec should be avoided // when the scheme isn't file. if (!scheme.EqualsLiteral("file")) return NS_ERROR_NO_INTERFACE; return net_GetFileFromURLSpec(spec, getter_AddRefs(mFile)); }
nsresult nsResURL::EnsureFile() { nsresult rv; NS_ENSURE_TRUE(gResHandler, NS_ERROR_NOT_AVAILABLE); nsCAutoString spec; rv = gResHandler->ResolveURI(this, spec); if (NS_FAILED(rv)) return rv; rv = net_GetFileFromURLSpec(spec, getter_AddRefs(mFile)); #ifdef DEBUG_bsmedberg if (NS_SUCCEEDED(rv)) { PRBool exists = PR_TRUE; mFile->Exists(&exists); if (!exists) { printf("resource %s doesn't exist!\n", spec.get()); } } #endif return rv; }
NS_IMETHODIMP nsFileProtocolHandler::GetFileFromURLSpec(const nsACString &spec, nsIFile **result) { return net_GetFileFromURLSpec(spec, result); }