| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Generates JavaScript source files from a mojom.Module.""" | 5 """Generates JavaScript source files from a mojom.Module.""" |
| 6 | 6 |
| 7 import mojom.generate.generator as generator | 7 import mojom.generate.generator as generator |
| 8 import mojom.generate.module as mojom | 8 import mojom.generate.module as mojom |
| 9 import mojom.generate.pack as pack | 9 import mojom.generate.pack as pack |
| 10 import os | 10 import os |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 expected_dimension_sizes.append(0) | 88 expected_dimension_sizes.append(0) |
| 89 return expected_dimension_sizes | 89 return expected_dimension_sizes |
| 90 | 90 |
| 91 | 91 |
| 92 def GetRelativeUrl(module, base_module): | 92 def GetRelativeUrl(module, base_module): |
| 93 return urllib.pathname2url( | 93 return urllib.pathname2url( |
| 94 os.path.relpath(module.path, os.path.dirname(base_module.path))) | 94 os.path.relpath(module.path, os.path.dirname(base_module.path))) |
| 95 | 95 |
| 96 | 96 |
| 97 class JavaScriptStylizer(generator.Stylizer): | 97 class JavaScriptStylizer(generator.Stylizer): |
| 98 def __init__(self, use_new_js_bindings): | 98 MODE_RESET = 0 |
| 99 self.use_new_js_bindings = use_new_js_bindings | 99 MODE_OLD = 1 |
| 100 MODE_NEW = 2 |
| 101 |
| 102 def __init__(self, mode): |
| 103 assert (mode == JavaScriptStylizer.MODE_RESET or |
| 104 mode == JavaScriptStylizer.MODE_OLD or |
| 105 mode == JavaScriptStylizer.MODE_NEW) |
| 106 self.mode = mode |
| 107 |
| 108 def StylizeConstant(self, mojom_name): |
| 109 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 110 return "" |
| 111 return mojom_name |
| 100 | 112 |
| 101 def StylizeField(self, mojom_name): | 113 def StylizeField(self, mojom_name): |
| 102 if not self.use_new_js_bindings: | 114 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 115 return "" |
| 116 if self.mode == JavaScriptStylizer.MODE_OLD: |
| 103 return mojom_name | 117 return mojom_name |
| 104 return generator.ToCamel(mojom_name, lower_initial=True) | 118 return generator.ToCamel(mojom_name, lower_initial=True) |
| 105 | 119 |
| 120 def StylizeStruct(self, mojom_name): |
| 121 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 122 return "" |
| 123 return mojom_name |
| 124 |
| 125 def StylizeUnion(self, mojom_name): |
| 126 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 127 return "" |
| 128 return mojom_name |
| 129 |
| 106 def StylizeParameter(self, mojom_name): | 130 def StylizeParameter(self, mojom_name): |
| 107 if not self.use_new_js_bindings: | 131 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 132 return "" |
| 133 if self.mode == JavaScriptStylizer.MODE_OLD: |
| 108 return mojom_name | 134 return mojom_name |
| 109 return generator.ToCamel(mojom_name, lower_initial=True) | 135 return generator.ToCamel(mojom_name, lower_initial=True) |
| 110 | 136 |
| 111 def StylizeMethod(self, mojom_name): | 137 def StylizeMethod(self, mojom_name): |
| 138 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 139 return "" |
| 112 return generator.ToCamel(mojom_name, lower_initial=True) | 140 return generator.ToCamel(mojom_name, lower_initial=True) |
| 113 | 141 |
| 142 def StylizeEnumField(self, mojom_name): |
| 143 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 144 return "" |
| 145 return mojom_name |
| 146 |
| 147 def StylizeEnum(self, mojom_name): |
| 148 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 149 return "" |
| 150 return mojom_name |
| 151 |
| 114 def StylizeModule(self, mojom_namespace): | 152 def StylizeModule(self, mojom_namespace): |
| 115 if not self.use_new_js_bindings: | 153 if self.mode == JavaScriptStylizer.MODE_RESET: |
| 154 return "" |
| 155 if self.mode == JavaScriptStylizer.MODE_OLD: |
| 116 return mojom_namespace | 156 return mojom_namespace |
| 117 return '.'.join(generator.ToCamel(word, lower_initial=True) | 157 return '.'.join(generator.ToCamel(word, lower_initial=True) |
| 118 for word in mojom_namespace.split('.')) | 158 for word in mojom_namespace.split('.')) |
| 119 | 159 |
| 120 | 160 |
| 121 class Generator(generator.Generator): | 161 class Generator(generator.Generator): |
| 122 def _GetParameters(self): | 162 def _GetParameters(self): |
| 123 return { | 163 return { |
| 124 "enums": self.module.enums, | 164 "enums": self.module.enums, |
| 125 "imports": self.module.imports, | 165 "imports": self.module.imports, |
| 126 "interfaces": self.module.interfaces, | 166 "interfaces": self.module.interfaces, |
| 127 "kinds": self.module.kinds, | 167 "kinds": self.module.kinds, |
| 128 "module": self.module, | 168 "module": self.module, |
| 129 "structs": self.module.structs + self._GetStructsFromMethods(), | 169 "structs": self.module.structs + self._GetStructsFromMethods(), |
| 130 "unions": self.module.unions, | 170 "unions": self.module.unions, |
| 131 "use_new_js_bindings": self.use_new_js_bindings, | 171 "js_bindings_mode": self.js_bindings_mode, |
| 132 } | 172 } |
| 133 | 173 |
| 134 @staticmethod | 174 @staticmethod |
| 135 def GetTemplatePrefix(): | 175 def GetTemplatePrefix(): |
| 136 return "js_templates" | 176 return "js_templates" |
| 137 | 177 |
| 138 def GetFilters(self): | 178 def GetFilters(self): |
| 139 js_filters = { | 179 js_filters = { |
| 140 "decode_snippet": self._JavaScriptDecodeSnippet, | 180 "decode_snippet": self._JavaScriptDecodeSnippet, |
| 141 "default_value": self._JavaScriptDefaultValue, | 181 "default_value": self._JavaScriptDefaultValue, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 155 "is_interface_kind": mojom.IsInterfaceKind, | 195 "is_interface_kind": mojom.IsInterfaceKind, |
| 156 "is_interface_request_kind": mojom.IsInterfaceRequestKind, | 196 "is_interface_request_kind": mojom.IsInterfaceRequestKind, |
| 157 "is_map_kind": mojom.IsMapKind, | 197 "is_map_kind": mojom.IsMapKind, |
| 158 "is_object_kind": mojom.IsObjectKind, | 198 "is_object_kind": mojom.IsObjectKind, |
| 159 "is_string_kind": mojom.IsStringKind, | 199 "is_string_kind": mojom.IsStringKind, |
| 160 "is_struct_kind": mojom.IsStructKind, | 200 "is_struct_kind": mojom.IsStructKind, |
| 161 "is_union_kind": mojom.IsUnionKind, | 201 "is_union_kind": mojom.IsUnionKind, |
| 162 "js_type": self._JavaScriptType, | 202 "js_type": self._JavaScriptType, |
| 163 "method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds, | 203 "method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds, |
| 164 "payload_size": JavaScriptPayloadSize, | 204 "payload_size": JavaScriptPayloadSize, |
| 205 "set_current_mode": self._SetCurrentMode, |
| 165 "to_camel": generator.ToCamel, | 206 "to_camel": generator.ToCamel, |
| 166 "union_decode_snippet": self._JavaScriptUnionDecodeSnippet, | 207 "union_decode_snippet": self._JavaScriptUnionDecodeSnippet, |
| 167 "union_encode_snippet": self._JavaScriptUnionEncodeSnippet, | 208 "union_encode_snippet": self._JavaScriptUnionEncodeSnippet, |
| 168 "validate_array_params": self._JavaScriptValidateArrayParams, | 209 "validate_array_params": self._JavaScriptValidateArrayParams, |
| 169 "validate_enum_params": self._JavaScriptValidateEnumParams, | 210 "validate_enum_params": self._JavaScriptValidateEnumParams, |
| 170 "validate_map_params": self._JavaScriptValidateMapParams, | 211 "validate_map_params": self._JavaScriptValidateMapParams, |
| 171 "validate_nullable_params": self._JavaScriptNullableParam, | 212 "validate_nullable_params": self._JavaScriptNullableParam, |
| 172 "validate_struct_params": self._JavaScriptValidateStructParams, | 213 "validate_struct_params": self._JavaScriptValidateStructParams, |
| 173 "validate_union_params": self._JavaScriptValidateUnionParams, | 214 "validate_union_params": self._JavaScriptValidateUnionParams, |
| 174 } | 215 } |
| 175 return js_filters | 216 return js_filters |
| 176 | 217 |
| 177 @UseJinja("module.amd.tmpl") | 218 @UseJinja("module.amd.tmpl") |
| 178 def _GenerateAMDModule(self): | 219 def _GenerateAMDModule(self): |
| 179 return self._GetParameters() | 220 return self._GetParameters() |
| 180 | 221 |
| 181 def GenerateFiles(self, args): | 222 def GenerateFiles(self, args): |
| 182 if self.variant: | 223 if self.variant: |
| 183 raise Exception("Variants not supported in JavaScript bindings.") | 224 raise Exception("Variants not supported in JavaScript bindings.") |
| 184 | 225 |
| 185 self.module.Stylize(JavaScriptStylizer(self.use_new_js_bindings)) | 226 self.module.Stylize(JavaScriptStylizer(JavaScriptStylizer.MODE_RESET)) |
| 186 | 227 |
| 187 # TODO(yzshen): Remove this method once the old JS bindings go away. | 228 # TODO(yzshen): Remove this method once the old JS bindings go away. |
| 188 self._SetUniqueNameForImports() | 229 self._SetUniqueNameForImports() |
| 189 | 230 |
| 190 self.Write(self._GenerateAMDModule(), "%s.js" % self.module.path) | 231 self.Write(self._GenerateAMDModule(), "%s.js" % self.module.path) |
| 191 | 232 |
| 192 def _SetUniqueNameForImports(self): | 233 def _SetUniqueNameForImports(self): |
| 193 used_names = set() | 234 used_names = set() |
| 194 for each_import in self.module.imports: | 235 for each_import in self.module.imports: |
| 195 simple_name = os.path.basename(each_import.path).split(".")[0] | 236 simple_name = os.path.basename(each_import.path).split(".")[0] |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 return self._TranslateConstants(value) | 441 return self._TranslateConstants(value) |
| 401 | 442 |
| 402 def _GetStructsFromMethods(self): | 443 def _GetStructsFromMethods(self): |
| 403 result = [] | 444 result = [] |
| 404 for interface in self.module.interfaces: | 445 for interface in self.module.interfaces: |
| 405 for method in interface.methods: | 446 for method in interface.methods: |
| 406 result.append(method.param_struct) | 447 result.append(method.param_struct) |
| 407 if method.response_param_struct is not None: | 448 if method.response_param_struct is not None: |
| 408 result.append(method.response_param_struct) | 449 result.append(method.response_param_struct) |
| 409 return result | 450 return result |
| 451 |
| 452 def _SetCurrentMode(self, mode): |
| 453 self.module.Stylize(JavaScriptStylizer( |
| 454 JavaScriptStylizer.MODE_OLD if mode == "old" |
| 455 else JavaScriptStylizer.MODE_NEW)) |
| 456 return "" |
| 457 |
| OLD | NEW |