diff options
author | cco3 <cco3@chromium.org> | 2015-12-30 13:21:31 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-30 21:22:35 +0000 |
commit | a3a65c4362153094ec3dfc178e8fa8e880192533 (patch) | |
tree | ba2140971cbe2dccf7e6fbab28cf35df4ea6c72a | |
parent | ed682d8103ffc332157ddce1cca05a22a5891aec (diff) | |
download | chromium_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.java | 45 |
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) { |