Index: components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/gcd/MessageWriter.java |
diff --git a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/gcd/MessageWriter.java b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/gcd/MessageWriter.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ee8ead6976233cb1f4ba1a006a2889620951740c |
--- /dev/null |
+++ b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/gcd/MessageWriter.java |
@@ -0,0 +1,109 @@ |
+// 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.JsonWriter; |
+ |
+import org.chromium.components.devtools_bridge.commands.Command; |
+import org.chromium.components.devtools_bridge.commands.ParamDefinition; |
+ |
+import java.io.IOException; |
+import java.io.StringWriter; |
+ |
+/** |
+ * Helper class for constructing GCD JSON messages (HTTP requests) used in the DevTools bridge. |
+ */ |
+public final class MessageWriter { |
+ private final StringWriter mStringWriter; |
+ private final JsonWriter mWriter; |
+ boolean mClosed = false; |
+ |
+ public MessageWriter() { |
+ mStringWriter = new StringWriter(); |
+ mWriter = new JsonWriter(mStringWriter); |
+ } |
+ |
+ public MessageWriter close() throws IOException { |
+ assert !mClosed; |
+ mWriter.close(); |
+ mClosed = true; |
+ return this; |
+ } |
+ |
+ @Override |
+ public String toString() { |
+ assert mClosed; |
+ return mStringWriter.toString(); |
+ } |
+ |
+ /** |
+ * Write body of registrationTicket PATCH request. |
+ */ |
+ public MessageWriter writeTicketPatch(InstanceDescription description) throws IOException { |
+ mWriter.beginObject(); |
+ mWriter.name("deviceDraft"); |
+ writeDeviceDraft(description); |
+ mWriter.name("oauthClientId").value(description.oAuthClientId); |
+ mWriter.endObject(); |
+ return this; |
+ } |
+ |
+ private void writeDeviceDraft(InstanceDescription description) throws IOException { |
+ mWriter.beginObject(); |
+ mWriter.name("deviceKind").value("vendor"); |
+ mWriter.name("displayName").value(description.displayName); |
+ mWriter.name("systemName").value("Chrome DevTools Bridge"); |
+ mWriter.name("channel"); |
+ writeChannelDefinition(description); |
+ mWriter.name("commandDefs"); |
+ writeCommandsDefinition(); |
+ mWriter.endObject(); |
+ } |
+ |
+ private void writeChannelDefinition(InstanceDescription description) throws IOException { |
+ mWriter.beginObject(); |
+ mWriter.name("supportedType").value("gcm"); |
+ mWriter.name("gcmRegistrationId").value(description.gcmChannelId); |
+ mWriter.endObject(); |
+ } |
+ |
+ private void writeCommandsDefinition() throws IOException { |
+ mWriter.beginObject(); |
+ mWriter.name("base"); |
+ writeCommandsDefinitionBase(); |
+ mWriter.endObject(); |
+ } |
+ |
+ private void writeCommandsDefinitionBase() throws IOException { |
+ mWriter.beginObject(); |
+ for (Command.Type type : Command.Type.values()) { |
+ mWriter.name(type.definition.shortName()); |
+ beginParameters(); |
+ for (ParamDefinition<?> param : type.definition.inParams()) { |
+ writeParameter(param.name(), param.type()); |
+ } |
+ endParameters(); |
+ } |
+ mWriter.endObject(); |
+ } |
+ |
+ private void beginParameters() throws IOException { |
+ mWriter.beginObject(); |
+ mWriter.name("parameters"); |
+ mWriter.beginObject(); |
+ } |
+ |
+ private void endParameters() throws IOException { |
+ mWriter.endObject(); |
+ mWriter.endObject(); |
+ } |
+ |
+ private void writeParameter(String name, String type) throws IOException { |
+ mWriter.name(name); |
+ mWriter.beginObject(); |
+ mWriter.name("type").value(type); |
+ mWriter.endObject(); |
+ } |
+} |