nsresult nsAboutCacheEntry::GetContentStream(nsIURI *uri, nsIInputStream **result) { nsCOMPtr<nsIStorageStream> storageStream; nsCOMPtr<nsIOutputStream> outputStream; PRUint32 n; nsCString buffer; nsresult rv; nsCOMPtr<nsICacheEntryDescriptor> descriptor; OpenCacheEntry(uri, getter_AddRefs(descriptor)); // Init: (block size, maximum length) rv = NS_NewStorageStream(256, PRUint32(-1), getter_AddRefs(storageStream)); if (NS_FAILED(rv)) return rv; rv = storageStream->GetOutputStream(0, getter_AddRefs(outputStream)); if (NS_FAILED(rv)) return rv; buffer.AssignLiteral( "<!DOCTYPE html>\n" "<html>\n" "<head>\n" " <title>Cache entry information</title>\n" " <link rel=\"stylesheet\" " "href=\"chrome://global/skin/about.css\" type=\"text/css\"/>\n" " <link rel=\"stylesheet\" " "href=\"chrome://global/skin/aboutCacheEntry.css\" type=\"text/css\"/>\n" "</head>\n" "<body>\n" "<h1>Cache entry information</h1>\n"); outputStream->Write(buffer.get(), buffer.Length(), &n); if (descriptor) rv = WriteCacheEntryDescription(outputStream, descriptor); else rv = WriteCacheEntryUnavailable(outputStream); if (NS_FAILED(rv)) return rv; buffer.AssignLiteral("</body>\n</html>\n"); outputStream->Write(buffer.get(), buffer.Length(), &n); nsCOMPtr<nsIInputStream> inStr; PRUint32 size; rv = storageStream->GetLength(&size); if (NS_FAILED(rv)) return rv; return storageStream->NewInputStream(0, result); }
NS_IMETHODIMP nsAboutCacheEntry::OnCacheEntryAvailable(nsICacheEntryDescriptor *entry, nsCacheAccessMode access, nsresult status) { nsresult rv; if (entry) rv = WriteCacheEntryDescription(entry); else rv = WriteCacheEntryUnavailable(); if (NS_FAILED(rv)) return rv; PRUint32 n; NS_NAMED_LITERAL_CSTRING(buffer, "</body>\n</html>\n"); mOutputStream->Write(buffer.get(), buffer.Length(), &n); mOutputStream->Close(); mOutputStream = nullptr; return NS_OK; }