If you can output the file to the client in base64, you could use data uris to for the download.
location.href = 'data:application/octet-stream;base64,' + appendPDFContentHere
OR
<a href="data:application/octet-stream;base64,appendPDFContentHere">pdf</a>
This will only work in non-IE browsers however but as you requested for firefox, this should work nicely.
EDIT:
Both of the examples below contain the bytes to make a PNG. If you click the first one you can view the image as you normally would in a browser. however, if you click the 2nd link, it will force you to download the image. Save it as a .png and you will see they are the exact same images. The only difference in the two links is the mime type
view image (preview shortened url) -- mime type: image/png
download image (preview shortened url) -- mime type: application/octet-stream
You asked what you put in place of appendPDFContentHere and the answer is the base64-encoded bytes that make up the PDF. I used this online base64 encoder to encode the image used in the example.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…