diff --git a/src/aphront/response/AphrontFileResponse.php b/src/aphront/response/AphrontFileResponse.php --- a/src/aphront/response/AphrontFileResponse.php +++ b/src/aphront/response/AphrontFileResponse.php @@ -18,14 +18,38 @@ return $this; } + /** + * Set the download filename + * + * @param $download mixed + * @return self + */ public function setDownload($download) { - if (!phutil_nonempty_string($download)) { - $download = 'untitled'; + // Known usage: + // setDownload(null) -> no download - default + // setDownload(false) -> no download - expected + // setDownload(true) -> yes named 'untitled' - expected + // setDownload('foo.ical') -> yes named 'foo.ical' - expected + // setDownload('') -> no download - please avoid + // setDownload(0) -> no download - please avoid + // setDownload(1) -> yes named 'untitled' - please avoid + if ($download) { + + // If you want a download, but you have no idea + // about the title, let's choose for you + if (!is_string($download)) { + $download = 'untitled'; + } } $this->download = $download; return $this; } + /** + * Get the download filename + * + * @return mixed + */ public function getDownload() { return $this->download; } @@ -113,7 +137,7 @@ $headers[] = array('Content-Length', $content_len); } - if (strlen($this->getDownload())) { + if ($this->getDownload() && phutil_nonempty_string($this->getDownload())) { $headers[] = array('X-Download-Options', 'noopen'); $filename = $this->getDownload();