summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcco3 <cco3@chromium.org>2015-12-30 13:21:31 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-30 21:22:35 +0000
commita3a65c4362153094ec3dfc178e8fa8e880192533 (patch)
treeba2140971cbe2dccf7e6fbab28cf35df4ea6c72a
parented682d8103ffc332157ddce1cca05a22a5891aec (diff)
downloadchromium_src-a3a65c4362153094ec3dfc178e8fa8e880192533.zip
chromium_src-a3a65c4362153094ec3dfc178e8fa8e880192533.tar.gz
chromium_src-a3a65c4362153094ec3dfc178e8fa8e880192533.tar.bz2
Parse Physical Web UMA cache more robustly
Instead of casting Numbers to Integer or Long (which doesn't work), we use longValue() and intValue(). BUG=529962 Review URL: https://codereview.chromium.org/1556583002 Cr-Commit-Position: refs/heads/master@{#367186}
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java45
1 files changed, 36 insertions, 9 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java
index 17344c2..ecc6016 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java
@@ -312,24 +312,51 @@ public class PhysicalWebUma {
}
}
- private static Object[] parseJsonArray(String jsonArrayStr, Class<?> itemType) {
+ private static Number[] parseJsonNumberArray(String jsonArrayStr) {
try {
JSONArray values = new JSONArray(jsonArrayStr);
- Object[] arr = new Object[values.length()];
+ Number[] array = new Number[values.length()];
for (int i = 0; i < values.length(); i++) {
- arr[i] = values.get(i);
- if (arr[i].getClass() != itemType) return null;
+ Object object = values.get(i);
+ if (!(object instanceof Number)) {
+ return null;
+ }
+ array[i] = (Number) object;
}
- return arr;
+ return array;
} catch (JSONException e) {
return null;
}
}
+ private static Long[] parseJsonLongArray(String jsonArrayStr) {
+ Number[] numbers = parseJsonNumberArray(jsonArrayStr);
+ if (numbers == null) {
+ return null;
+ }
+ Long[] array = new Long[numbers.length];
+ for (int i = 0; i < numbers.length; i++) {
+ array[i] = numbers[i].longValue();
+ }
+ return array;
+ }
+
+ private static Integer[] parseJsonIntegerArray(String jsonArrayStr) {
+ Number[] numbers = parseJsonNumberArray(jsonArrayStr);
+ if (numbers == null) {
+ return null;
+ }
+ Integer[] array = new Integer[numbers.length];
+ for (int i = 0; i < numbers.length; i++) {
+ array[i] = numbers[i].intValue();
+ }
+ return array;
+ }
+
private static void uploadTimes(String jsonTimesStr, final String key, final TimeUnit tu) {
- Long[] times = (Long[]) parseJsonArray(jsonTimesStr, Long.class);
+ Long[] times = parseJsonLongArray(jsonTimesStr);
if (times == null) {
- Log.e(TAG, "Error reporting " + key);
+ Log.e(TAG, "Error reporting " + key + " with values: " + jsonTimesStr);
return;
}
for (Long time : times) {
@@ -338,9 +365,9 @@ public class PhysicalWebUma {
}
private static void uploadCounts(String jsonCountsStr, final String key) {
- Integer[] counts = (Integer[]) parseJsonArray(jsonCountsStr, Long.class);
+ Integer[] counts = parseJsonIntegerArray(jsonCountsStr);
if (counts == null) {
- Log.e(TAG, "Error reporting " + key);
+ Log.e(TAG, "Error reporting " + key + " with values: " + jsonCountsStr);
return;
}
for (Integer count: counts) {