Author: gagan
Date: Mon Feb 14 13:17:17 2011
New Revision: 1070483
URL: http://svn.apache.org/viewvc?rev=1070483&view=rev
Log:
Patch by satya3656 | Issue 4148044: Bug Fix: Cache headers are removed by
BaseOptimizer for all rewritten images | http://codereview.appspot.com/4148044/
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizer.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizerTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizer.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizer.java?rev=1070483&r1=1070482&r2=1070483&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizer.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizer.java
Mon Feb 14 13:17:17 2011
@@ -53,7 +53,6 @@ import javax.imageio.plugins.jpeg.JPEGIm
* Base class for image optimizers
*/
abstract class BaseOptimizer {
-
static final Map<String, ImageFormat> FORMAT_NAME_TO_IMAGE_FORMAT =
ImmutableMap.of(
"png", ImageFormat.IMAGE_FORMAT_PNG,
"gif", ImageFormat.IMAGE_FORMAT_GIF,
@@ -111,7 +110,7 @@ abstract class BaseOptimizer {
if (image == null) {
return;
}
-
+
byte[] bytes = outputter.toBytes(image);
if (minLength > bytes.length) {
minBytes = bytes;
@@ -137,7 +136,10 @@ abstract class BaseOptimizer {
rewriteMsg.append(";o=").append(getOriginalContentType());
}
rewriteMsg.append(";t=").append(time);
- response.clearAllHeaders()
+
+ // Removing the original 'Etag' header as we have updated the content.
+ response.removeHeader("ETag");
+ response
.setHeader("Content-Type", getOutputContentType())
.setHeader("X-Shindig-Rewrite", rewriteMsg.toString())
.setResponse(minBytes);
@@ -194,7 +196,7 @@ abstract class BaseOptimizer {
baos.reset();
}
writer.setOutput(ImageIO.createImageOutputStream(baos));
-
+
// Create a new empty metadata set
ImageWriteParam metaImageWriteParam = writeParam;
if (writer instanceof JPEGImageWriter) {
@@ -202,7 +204,7 @@ abstract class BaseOptimizer {
// writer.getDefaultImageMetadata(new
ImageTypeSpecifier(image.getColorModel(),
// image.getSampleModel()), writeParam);
//
- // does buggy processing for compression ratio parameter in
ImageWriteParam.
+ // does buggy processing for compression ratio parameter in
ImageWriteParam.
// Hence passing null as ImageWriteParam here to ignore this
processing and
// passing the ImageWriteParam later in the writer.write() call.
metaImageWriteParam = null;
@@ -211,7 +213,7 @@ abstract class BaseOptimizer {
IIOMetadata metadata = writer.getDefaultImageMetadata(
new ImageTypeSpecifier(image.getColorModel(),
image.getSampleModel()),
metaImageWriteParam);
-
+
if (jpegSamplingMode.getModeValue() > 0 && writer instanceof
JPEGImageWriter) {
setJpegSubsamplingMode(metadata);
}
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizerTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizerTest.java?rev=1070483&r1=1070482&r2=1070483&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizerTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/BaseOptimizerTest.java
Mon Feb 14 13:17:17 2011
@@ -34,4 +34,11 @@ public abstract class BaseOptimizerTest
return new HttpResponseBuilder().addHeader("Content-Type", mimeType)
.setResponse(bytes).create();
}
+
+ protected HttpResponseBuilder createResponseBuilder(String resource, String
mimeType)
+ throws IOException {
+ byte[] bytes =
IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(resource));
+ return new HttpResponseBuilder().addHeader("Content-Type", mimeType)
+ .setResponse(bytes);
+ }
}
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java?rev=1070483&r1=1070482&r2=1070483&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/image/JPEGOptimizerTest.java
Mon Feb 14 13:17:17 2011
@@ -78,6 +78,20 @@ public class JPEGOptimizerTest extends B
assertTrue(rewritten.getContentLength() <= resp.getContentLength());
}
+ @Test
+ public void testLargeJPEGWithEtagAndCacheHeaders() throws Exception {
+ HttpResponseBuilder responseBuilder =
+
createResponseBuilder("org/apache/shindig/gadgets/rewrite/image/large.jpg",
"image/jpeg");
+ responseBuilder.addHeader("ETag", "wereertret");
+ responseBuilder.addHeader("Cache-Control", "public, max-age=86400");
+ HttpResponse resp = responseBuilder.create();
+ HttpResponse rewritten = rewrite(resp, getConfigWithRetainSampling(false,
0.70f));
+ assertEquals("image/jpeg", resp.getHeader("Content-Type"));
+ assertEquals("public, max-age=86400", resp.getHeader("Cache-Control"));
+ assertNull(rewritten.getHeader("ETag"));
+ assertTrue(rewritten.getContentLength() < resp.getContentLength());
+ }
+
@Test(expected=Throwable.class)
public void testBadImage() throws Exception {
// Not a JPEG
@@ -88,7 +102,7 @@ public class JPEGOptimizerTest extends B
@Test(expected=Throwable.class)
public void xtestBadICC1() throws Exception {
- // ICC section too long
+ // ICC section too long
HttpResponse resp =
createResponse("org/apache/shindig/gadgets/rewrite/image/badicc.jpg",
"image/jpeg");
rewrite(resp);
}
@@ -158,4 +172,4 @@ public class JPEGOptimizerTest extends B
quality, defaultConfig.getMinThresholdBytes(),
defaultConfig.getJpegHuffmanOptimization(),
enabled);
}
-}
\ No newline at end of file
+}