NS_IMETHODIMP txStylesheetSink::OnDataAvailable(nsIRequest *aRequest, nsISupports *aContext, nsIInputStream *aInputStream, uint64_t aOffset, uint32_t aCount) { if (!mCheckedForXML) { nsCOMPtr<nsIDTD> dtd; mParser->GetDTD(getter_AddRefs(dtd)); if (dtd) { mCheckedForXML = true; if (!(dtd->GetType() & NS_IPARSER_FLAG_XML)) { nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest); nsAutoString spec; getSpec(channel, spec); mCompiler->cancel(NS_ERROR_XSLT_WRONG_MIME_TYPE, nullptr, spec.get()); return NS_ERROR_XSLT_WRONG_MIME_TYPE; } } } return mListener->OnDataAvailable(aRequest, mParser, aInputStream, aOffset, aCount); }
NS_IMETHODIMP txStylesheetSink::OnStopRequest(nsIRequest *aRequest, nsISupports *aContext, nsresult aStatusCode) { bool success = true; nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aRequest); if (httpChannel) { httpChannel->GetRequestSucceeded(&success); } nsresult result = aStatusCode; if (!success) { // XXX We sometimes want to use aStatusCode here, but the parser resets // it to NS_ERROR_NOINTERFACE because we don't implement // nsIHTMLContentSink. result = NS_ERROR_XSLT_NETWORK_ERROR; } else if (!mCheckedForXML) { nsCOMPtr<nsIDTD> dtd; mParser->GetDTD(getter_AddRefs(dtd)); if (dtd && !(dtd->GetType() & NS_IPARSER_FLAG_XML)) { result = NS_ERROR_XSLT_WRONG_MIME_TYPE; } } if (NS_FAILED(result)) { nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest); nsAutoString spec; getSpec(channel, spec); mCompiler->cancel(result, nullptr, spec.get()); } nsresult rv = mListener->OnStopRequest(aRequest, mParser, aStatusCode); mListener = nullptr; mParser = nullptr; return rv; }