Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(380)

Unified Diff: mojo/public/tools/bindings/generators/mojom_js_generator.py

Issue 490623003: Add JS bindings validation logic for non-nullable types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/public/tools/bindings/generators/mojom_js_generator.py
diff --git a/mojo/public/tools/bindings/generators/mojom_js_generator.py b/mojo/public/tools/bindings/generators/mojom_js_generator.py
index 7787f7646f5ef0d4c6768690a148e4fca88a8967..d93bd5e052bad500f787e9670f5beeef617a8e44 100644
--- a/mojo/public/tools/bindings/generators/mojom_js_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_js_generator.py
@@ -79,16 +79,16 @@ _kind_to_codec_type = {
mojom.DPPIPE: "codec.Handle",
mojom.MSGPIPE: "codec.Handle",
mojom.SHAREDBUFFER: "codec.Handle",
- mojom.NULLABLE_HANDLE: "codec.Handle",
- mojom.NULLABLE_DCPIPE: "codec.Handle",
- mojom.NULLABLE_DPPIPE: "codec.Handle",
- mojom.NULLABLE_MSGPIPE: "codec.Handle",
- mojom.NULLABLE_SHAREDBUFFER: "codec.Handle",
+ mojom.NULLABLE_HANDLE: "codec.NullableHandle",
+ mojom.NULLABLE_DCPIPE: "codec.NullableHandle",
+ mojom.NULLABLE_DPPIPE: "codec.NullableHandle",
+ mojom.NULLABLE_MSGPIPE: "codec.NullableHandle",
+ mojom.NULLABLE_SHAREDBUFFER: "codec.NullableHandle",
mojom.INT64: "codec.Int64",
mojom.UINT64: "codec.Uint64",
mojom.DOUBLE: "codec.Double",
mojom.STRING: "codec.String",
- mojom.NULLABLE_STRING: "codec.String",
+ mojom.NULLABLE_STRING: "codec.NullableString",
}
@@ -96,11 +96,14 @@ def CodecType(kind):
if kind in mojom.PRIMITIVES:
return _kind_to_codec_type[kind]
if mojom.IsStructKind(kind):
- return "new codec.PointerTo(%s)" % CodecType(kind.name)
+ ptrType = "NullablePointerTo" if mojom.IsNullableKind(kind) else "PointerTo"
yzshen1 2014/08/20 17:04:20 please use naming style ptr_type. (here and below)
hansmuller 2014/08/20 17:46:31 Done.
+ return "new codec.%s(%s)" % (ptrType, CodecType(kind.name))
if mojom.IsAnyArrayKind(kind) and mojom.IsBoolKind(kind.kind):
yzshen1 2014/08/20 17:04:21 nit: maybe we could merge this if-block into the n
hansmuller 2014/08/20 17:46:31 Done.
- return "new codec.ArrayOf(codec.PackedBool)"
+ arrayType = "NullableArrayOf" if mojom.IsNullableKind(kind) else "ArrayOf"
+ return "new codec.%s(codec.PackedBool)" % arrayType
if mojom.IsAnyArrayKind(kind):
- return "new codec.ArrayOf(%s)" % CodecType(kind.kind)
+ arrayType = "NullableArrayOf" if mojom.IsNullableKind(kind) else "ArrayOf"
+ return "new codec.%s(%s)" % (arrayType, CodecType(kind.kind))
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
return CodecType(mojom.MSGPIPE)
if mojom.IsEnumKind(kind):
@@ -141,17 +144,36 @@ def JavaScriptEncodeSnippet(kind):
def JavaScriptFieldOffset(packed_field):
return "offset + codec.kStructHeaderSize + %s" % packed_field.offset
+
+def JavaScriptNullableParam(pf):
yzshen1 2014/08/20 17:04:20 packed_field may be a better name than pf. (like l
hansmuller 2014/08/20 17:46:31 Done.
+ return "true" if mojom.IsNullableKind(pf.field.kind) else "false"
+
+
def JavaScriptValidateArrayParams(pf):
- elementKind = pf.field.kind.kind
- elementSize = pack.PackedField.GetSizeForKind(elementKind)
- elementCount = generator.ExpectedArraySize(pf.field.kind)
- elementType = "codec.PackedBool" if mojom.IsBoolKind(elementKind) \
- else CodecType(elementKind)
- return "%s, %s, %s, %s" % \
- (JavaScriptFieldOffset(pf), elementSize, elementCount, elementType)
+ nullable = JavaScriptNullableParam(pf)
+ eltKind = pf.field.kind.kind
yzshen1 2014/08/20 17:04:20 element_kind is actually better than elt_kind acco
hansmuller 2014/08/20 17:46:31 Done.
+ eltSize = pack.PackedField.GetSizeForKind(eltKind)
+ eltCount = generator.ExpectedArraySize(pf.field.kind)
+ eltType = "codec.PackedBool" if mojom.IsBoolKind(eltKind) \
+ else CodecType(eltKind)
+ return "%s, %s, %s, %s, %s" % \
+ (JavaScriptFieldOffset(pf), eltSize, eltCount, eltType, nullable)
yzshen1 2014/08/20 17:04:20 wrong indent.
hansmuller 2014/08/20 17:46:31 Done.
+
def JavaScriptValidateStructParams(pf):
- return "%s, %s" % (JavaScriptFieldOffset(pf), pf.field.kind.name)
+ nullable = JavaScriptNullableParam(pf)
+ structType = pf.field.kind.name
+ return "%s, %s, %s" % (JavaScriptFieldOffset(pf), structType, nullable)
+
+
+def JavaScriptValidateStringParams(pf):
+ nullable = JavaScriptNullableParam(pf)
+ return "%s, %s" % (JavaScriptFieldOffset(pf), nullable)
+
+
+def JavaScriptValidateHandleParams(pf):
+ nullable = JavaScriptNullableParam(pf)
+ return "%s, %s" % (JavaScriptFieldOffset(pf), nullable)
def TranslateConstants(token):
@@ -209,6 +231,8 @@ class Generator(generator.Generator):
"js_type": JavascriptType,
"stylize_method": generator.StudlyCapsToCamel,
"validate_array_params": JavaScriptValidateArrayParams,
+ "validate_handle_params": JavaScriptValidateHandleParams,
+ "validate_string_params": JavaScriptValidateStringParams,
"validate_struct_params": JavaScriptValidateStructParams,
}

Powered by Google App Engine
This is Rietveld 408576698