NS_EscapeURL(directory, esc_Directory|esc_AlwaysCopy, path);
net_GetFileFromURLSpec(const nsACString &aURL, nsIFile **result){    // NOTE: See also the implementation in nsURLHelperUnix.cpp    // This matches it except for the HFS path handling.    nsresult rv;    nsCOMPtr<nsILocalFile> localFile;    rv = NS_NewNativeLocalFile(nsCString(), PR_TRUE, getter_AddRefs(localFile));    if (NS_FAILED(rv))      return rv;        nsCAutoString directory, fileBaseName, fileExtension, path;    PRBool bHFSPath = PR_FALSE;    rv = net_ParseFileURL(aURL, directory, fileBaseName, fileExtension);    if (NS_FAILED(rv))      return rv;    if (!directory.IsEmpty()) {      // The canonical form of file URLs on OSX use POSIX paths:      //   file:///path-name.      // But, we still encounter file URLs that use HFS paths:      //   file:///volume-name/path-name      // Determine that here and normalize HFS paths to POSIX.      nsCAutoString possibleVolName;      if (pathBeginsWithVolName(directory, possibleVolName)) {                // Though we know it begins with a volume name, it could still        // be a valid POSIX path if the boot drive is named "Mac HD"        // and there is a directory "Mac HD" at its root. If such a        // directory doesn't exist, we'll assume this is an HFS path.        FSRef testRef;        possibleVolName.Insert("/", 0);        if (::FSPathMakeRef((UInt8*)possibleVolName.get(), &testRef, nsnull) != noErr)          bHFSPath = PR_TRUE;      }      NS_EscapeURL(directory, esc_Directory|esc_AlwaysCopy, path);      if (bHFSPath) {        // "%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        // can reply on SwapSlashColon() to do what we need        path.ReplaceSubstring("%2F", ":");        path.Cut(0, 1); // directory begins with '/'        SwapSlashColon((char *)path.get());        // At this point, path is an HFS path made using the same        // algorithm as nsURLHelperMac. We'll convert to POSIX below.      }    }    if (!fileBaseName.IsEmpty())      NS_EscapeURL(fileBaseName, esc_FileBaseName|esc_AlwaysCopy, path);    if (!fileExtension.IsEmpty()) {      path += '.';      NS_EscapeURL(fileExtension, esc_FileExtension|esc_AlwaysCopy, path);    }    NS_UnescapeURL(path);    if (bHFSPath)      convertHFSPathtoPOSIX(path, path);    // assuming path is encoded in the native charset    rv = localFile->InitWithNativePath(path);    if (NS_FAILED(rv))      return rv;    NS_ADDREF(*result = localFile);    return NS_OK;}