summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2015-03-06 09:09:27 +0000
committerVaadin Code Review <review@vaadin.com>2015-03-06 09:17:53 +0000
commit4db0b55aefd83d149e62a7fad2b14fb232d976c8 (patch)
treef2b90e7bf6c7df843a34f244d94d56c8ed74ab28 /server
parent69db9eac8f76a66210b8eb7308c9e5fc84eff977 (diff)
downloadvaadin-framework-4db0b55aefd83d149e62a7fad2b14fb232d976c8.tar.gz
vaadin-framework-4db0b55aefd83d149e62a7fad2b14fb232d976c8.zip
Revert "Encode filenames to UTF-8 in Content-Disposition header. (#16556)"
Breaks AppResource404, BrowserFrameIsVisible and FlashIsVisible This reverts commit af6dd56e89db8ea8c88f607c4214abcde50dfc94. Change-Id: I82fc9ef4c9d08dc8aa48e0fa137fae5782701389
Diffstat (limited to 'server')
-rw-r--r--server/src/com/vaadin/server/DownloadStream.java30
-rw-r--r--server/src/com/vaadin/server/FileDownloader.java6
-rw-r--r--server/tests/src/com/vaadin/server/FileDownloaderTests.java41
3 files changed, 16 insertions, 61 deletions
diff --git a/server/src/com/vaadin/server/DownloadStream.java b/server/src/com/vaadin/server/DownloadStream.java
index 8b2b933bcc..681c438967 100644
--- a/server/src/com/vaadin/server/DownloadStream.java
+++ b/server/src/com/vaadin/server/DownloadStream.java
@@ -20,8 +20,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -282,9 +280,16 @@ public class DownloadStream implements Serializable {
}
}
- // Content-Disposition: attachment generally forces download
- response.setHeader("Content-Disposition",
- getContentDispositionValue());
+ // suggest local filename from DownloadStream if
+ // Content-Disposition
+ // not explicitly set
+ String contentDispositionValue = getParameter("Content-Disposition");
+ if (contentDispositionValue == null) {
+ contentDispositionValue = "filename=\"" + getFileName()
+ + "\"";
+ response.setHeader("Content-Disposition",
+ contentDispositionValue);
+ }
int bufferSize = getBufferSize();
if (bufferSize <= 0 || bufferSize > Constants.MAX_BUFFER_SIZE) {
@@ -312,21 +317,6 @@ public class DownloadStream implements Serializable {
}
}
- private String getContentDispositionValue()
- throws UnsupportedEncodingException {
- String contentDispositionValue = getParameter("Content-Disposition");
-
- if (contentDispositionValue == null) {
- String encodedFilename = URLEncoder.encode(getFileName(), "utf-8");
-
- contentDispositionValue = String.format(
- "attachment; filename=\"%s\"; filename*=utf-8''%s",
- encodedFilename, encodedFilename);
- }
-
- return contentDispositionValue;
- }
-
/**
* Helper method that tries to close an output stream and ignores any
* exceptions.
diff --git a/server/src/com/vaadin/server/FileDownloader.java b/server/src/com/vaadin/server/FileDownloader.java
index bea9922c50..42c2f76e1a 100644
--- a/server/src/com/vaadin/server/FileDownloader.java
+++ b/server/src/com/vaadin/server/FileDownloader.java
@@ -141,6 +141,12 @@ public class FileDownloader extends AbstractExtension {
}
stream = ((ConnectorResource) resource).getStream();
+ if (stream.getParameter("Content-Disposition") == null) {
+ // Content-Disposition: attachment generally forces download
+ stream.setParameter("Content-Disposition",
+ "attachment; filename=\"" + stream.getFileName() + "\"");
+ }
+
// Content-Type to block eager browser plug-ins from hijacking
// the file
if (isOverrideContentType()) {
diff --git a/server/tests/src/com/vaadin/server/FileDownloaderTests.java b/server/tests/src/com/vaadin/server/FileDownloaderTests.java
deleted file mode 100644
index 4e9478c570..0000000000
--- a/server/tests/src/com/vaadin/server/FileDownloaderTests.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.vaadin.server;
-
-import static org.mockito.Matchers.contains;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLEncoder;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class FileDownloaderTests {
- private String filename = "日本語.png";
- private DownloadStream stream;
-
- @Before
- public void setup() {
- stream = new DownloadStream(mock(InputStream.class), "", filename);
- }
-
- @Test
- public void contentDispositionFilenameIsUtf8Encoded() throws IOException {
- VaadinResponse response = mock(VaadinResponse.class);
-
- stream.writeResponse(mock(VaadinRequest.class), response);
-
- verify(response).setHeader(eq("Content-Disposition"),
- contains("attachment;"));
- String encodedFileName = URLEncoder.encode(filename, "utf-8");
- verify(response).setHeader(eq("Content-Disposition"),
- contains(String.format("filename=\"%s\";", encodedFileName)));
- verify(response)
- .setHeader(
- eq("Content-Disposition"),
- contains(String.format("filename*=utf-8''%s",
- encodedFileName)));
- }
-}