Use HTTP header to decide between JSON and Base64 encoding

Change-Id: I5b756b93b7587c8533c92f2507c31591737f7d34
diff --git a/fs/gitilesfs_test.go b/fs/gitilesfs_test.go
index b004a37..b57613d 100644
--- a/fs/gitilesfs_test.go
+++ b/fs/gitilesfs_test.go
@@ -180,12 +180,12 @@
 	out := []byte(resp)
 
 	if strings.Contains(r.URL.String(), "format=TEXT") {
+		w.Header().Set("Content-Type", "text/html; charset=UTF-8")
 		str := base64.StdEncoding.EncodeToString(out)
 		w.Write([]byte(str))
 	} else {
 		w.Write([]byte(resp))
 	}
-	// TODO(hanwen): set content type?
 }
 
 func newTestServer() (*testServer, error) {
diff --git a/gitiles/client.go b/gitiles/client.go
index 10cb86a..4777d0e 100644
--- a/gitiles/client.go
+++ b/gitiles/client.go
@@ -86,6 +86,12 @@
 	if err != nil {
 		return nil, err
 	}
+
+	if resp.Header.Get("Content-Type") == "text/html; charset=UTF-8" {
+		out := make([]byte, base64.StdEncoding.DecodedLen(len(c)))
+		n, err := base64.StdEncoding.Decode(out, c)
+		return out[:n], err
+	}
 	return c, nil
 }
 
@@ -153,15 +159,7 @@
 
 	// TODO(hanwen): invent a more structured mechanism for logging.
 	log.Println(blobURL.String())
-	c, err := s.service.get(blobURL)
-	if err != nil {
-		return nil, err
-	}
-
-	out := make([]byte, base64.StdEncoding.DecodedLen(len(c)))
-	n, err := base64.StdEncoding.Decode(out, c)
-
-	return out[:n], err
+	return s.service.get(blobURL)
 }
 
 // GetTree fetches a tree. The dir argument may not point to a