Index: components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/gcd/MessageReader.java |
diff --git a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/gcd/MessageReader.java b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/gcd/MessageReader.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..382979dbe0a1e5770943ffa2450d144a355feb77 |
--- /dev/null |
+++ b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/gcd/MessageReader.java |
@@ -0,0 +1,84 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.components.devtools_bridge.gcd; |
+ |
+import android.util.JsonReader; |
+ |
+import java.io.IOException; |
+ |
+/** |
+ * Helper class for parsing JSON-encoded GCD messages (HTTP responses and GCM notifications) used |
+ * in the DevTools bridge. |
+ */ |
+public final class MessageReader { |
+ private final JsonReader mReader; |
+ |
+ public MessageReader(JsonReader reader) { |
+ mReader = reader; |
+ } |
+ |
+ /** |
+ * Reads id from a registration ticket. |
+ */ |
+ public String readTicketId() throws IOException { |
+ return new TicketReader().readId(); |
+ } |
+ |
+ /** |
+ * Reads credentials from finalized registration ticket. |
+ */ |
+ public InstanceCredential readInstanceCredential() throws IOException { |
+ return new TicketReader().readCredential(); |
+ } |
+ |
+ private abstract class ObjectReader { |
+ public final void readObject() throws IOException { |
+ mReader.beginObject(); |
+ while (mReader.hasNext()) { |
+ readItem(mReader.nextName()); |
+ } |
+ mReader.endObject(); |
+ } |
+ |
+ protected void readItem(String name) throws IOException { |
+ mReader.skipValue(); |
+ } |
+ } |
+ |
+ private class TicketReader extends ObjectReader { |
+ private String mId; |
+ private String mDeviceId; |
+ private String mDeviceSecret; |
+ |
+ public String readId() throws IOException { |
+ readObject(); |
+ if (mId == null) { |
+ throw new IllegalArgumentException(); |
+ } |
+ return mId; |
+ } |
+ |
+ public InstanceCredential readCredential() throws IOException { |
+ readObject(); |
+ if (mDeviceId == null || mDeviceSecret == null) { |
+ throw new IllegalArgumentException(); |
+ } |
+ return new InstanceCredential(mDeviceId, mDeviceSecret); |
+ } |
+ |
+ @Override |
+ protected void readItem(String name) throws IOException { |
+ if (name.equals("id")) { |
+ mId = mReader.nextString(); |
+ } else if (name.equals("deviceId")) { |
+ mDeviceId = mReader.nextString(); |
+ } else if (name.equals("robotAccountAuthorizationCode")) { |
+ mDeviceSecret = mReader.nextString(); |
+ } else { |
+ super.readItem(name); |
+ } |
+ } |
+ } |
+} |