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
+}


Reply via email to