Compress the breadpad crash raw data before uploading to server

Change-Id: I69df249ddd33939694becfdc8c6a48e0d3b6fc89
diff --git a/src/com/android/browser/CrashLogExceptionHandler.java b/src/com/android/browser/CrashLogExceptionHandler.java
index 367a409..dc42d59 100644
--- a/src/com/android/browser/CrashLogExceptionHandler.java
+++ b/src/com/android/browser/CrashLogExceptionHandler.java
@@ -50,6 +50,9 @@
 import org.apache.http.client.HttpClient;
 import org.apache.http.entity.InputStreamEntity;
 import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.entity.AbstractHttpEntity;
+import org.apache.http.entity.ByteArrayEntity;
+
 
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -62,11 +65,15 @@
 import java.io.IOException;
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.lang.Integer;
 import java.lang.StringBuilder;
 import java.lang.System;
 import java.lang.Thread.UncaughtExceptionHandler;
 import java.util.Calendar;
+import java.util.zip.GZIPOutputStream;
 
 public class CrashLogExceptionHandler implements Thread.UncaughtExceptionHandler {
 
@@ -341,12 +348,32 @@
         try {
             HttpClient httpClient = new DefaultHttpClient();
             HttpPost httpPost = new HttpPost(server);
-            InputStreamEntity isEntity = new InputStreamEntity(
-                    new FileInputStream(report), -1);
-            // Send the report as a Binary
-            isEntity.setContentType("binary/octet-stream");
-            isEntity.setChunked(false);
-            httpPost.setEntity(isEntity);
+
+            // Compress the data
+            ByteArrayOutputStream arrayStream = new ByteArrayOutputStream();
+            OutputStream gzipData = new GZIPOutputStream(arrayStream);
+            InputStream inputStream = new FileInputStream(report);
+            long length = report.length();
+            byte[] data = new byte[(int)length];
+
+            // Read in the bytes
+            int offset = 0;
+            int numRead = 0;
+            while (offset < data.length
+                   && (numRead=inputStream.read(data, offset, data.length-offset)) >= 0) {
+                offset += numRead;
+            }
+            gzipData.write(data);
+            gzipData.close();
+
+            AbstractHttpEntity entity = new ByteArrayEntity(arrayStream.toByteArray());
+
+            // Send the report as a compressed Binary
+            entity.setContentType("binary/octet-stream");
+            entity.setContentEncoding("gzip");
+            entity.setChunked(false);
+            httpPost.setEntity(entity);
+
             HttpResponse response = httpClient.execute(httpPost);
             int status = response.getStatusLine().getStatusCode();
             if (status == 200)