Commit 6335d128 authored by Giovanni Ortuño Urquidi's avatar Giovanni Ortuño Urquidi Committed by Commit Bot

mojo: Misc fixes to allow us to use the BluetoothSystem externs

Four small changes:

1. Make a js_library that depends on the
   //services/device/public/mojom:mojom_externs_js_library. This
   unearthens a bunch of problems.
2. Add externs for nested enum in interfaces and in structs.
3. Refactor externs type generator to correctly generate externs for
   nested enums, structs, and unions.
4. Changed the generated externs to not generate
   "mojo.internal.AssociatedInterfaceProxy" and
   "mojo.internal.AssociatedInterfaceRequest" since they are not
   fully supported by the lite bindings yet.

Change-Id: Ife282be5e2b5dde5fc17a345c138981812a617d8
Reviewed-on: https://chromium-review.googlesource.com/c/1369560
Commit-Queue: Giovanni Ortuño Urquidi <ortuno@chromium.org>
Reviewed-by: default avatarcalamity <calamity@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#615687}
parent 86e820d4
...@@ -14,6 +14,7 @@ js_type_check("closure_compile") { ...@@ -14,6 +14,7 @@ js_type_check("closure_compile") {
js_library("bluetooth_page") { js_library("bluetooth_page") {
deps = [ deps = [
":bluetooth_system_on_extensions",
"..:route", "..:route",
"../prefs:prefs_behavior", "../prefs:prefs_behavior",
"../settings_page:settings_animated_pages", "../settings_page:settings_animated_pages",
...@@ -32,6 +33,7 @@ js_library("bluetooth_page") { ...@@ -32,6 +33,7 @@ js_library("bluetooth_page") {
js_library("bluetooth_subpage") { js_library("bluetooth_subpage") {
deps = [ deps = [
":bluetooth_system_on_extensions",
"..:route", "..:route",
"//ui/webui/resources/cr_elements:cr_scrollable_behavior", "//ui/webui/resources/cr_elements:cr_scrollable_behavior",
"//ui/webui/resources/js:assert", "//ui/webui/resources/js:assert",
...@@ -49,8 +51,16 @@ js_library("bluetooth_subpage") { ...@@ -49,8 +51,16 @@ js_library("bluetooth_subpage") {
js_library("bluetooth_device_list_item") { js_library("bluetooth_device_list_item") {
deps = [ deps = [
":bluetooth_system_on_extensions",
"//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu", "//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu",
"//ui/webui/resources/js:i18n_behavior", "//ui/webui/resources/js:i18n_behavior",
] ]
externs_list = [ "$externs_path/bluetooth.js" ] externs_list = [ "$externs_path/bluetooth.js" ]
} }
js_library("bluetooth_system_on_extensions") {
sources = []
deps = [
"//services/device/public/mojom:mojom_js_externs",
]
}
...@@ -91,3 +91,12 @@ goog.provide('{{module.namespace}}.{{interface.name}}CallbackRouter'); ...@@ -91,3 +91,12 @@ goog.provide('{{module.namespace}}.{{interface.name}}CallbackRouter');
*/ */
removeListener(id) {} removeListener(id) {}
}; };
{#--- Enum definitions #}
{% for enum in interface.enums %}
/** @enum {number} */
{{module.namespace}}.{{interface.name}}.{{enum.name}} = {};
{%- for field in enum.fields %}
{{module.namespace}}.{{interface.name}}.{{enum.name}}.{{field.name}};
{%- endfor %}
{%- endfor %}
...@@ -10,3 +10,12 @@ goog.provide('{{module.namespace}}.{{struct.name}}'); ...@@ -10,3 +10,12 @@ goog.provide('{{module.namespace}}.{{struct.name}}');
{%- endfor %} {%- endfor %}
} }
}; };
{#--- Enum definitions #}
{% for enum in struct.enums %}
/** @enum {number} */
{{module.namespace}}.{{struct.name}}.{{enum.name}} = {};
{%- for field in enum.fields %}
{{module.namespace}}.{{struct.name}}.{{enum.name}}.{{field.name}};
{%- endfor %}
{%- endfor %}
...@@ -419,15 +419,6 @@ class Generator(generator.Generator): ...@@ -419,15 +419,6 @@ class Generator(generator.Generator):
def _LiteClosureType(self, kind): def _LiteClosureType(self, kind):
if kind in mojom.PRIMITIVES: if kind in mojom.PRIMITIVES:
return _kind_to_closure_type[kind] return _kind_to_closure_type[kind]
if mojom.IsInterfaceKind(kind):
return kind.module.namespace + "." + kind.name + "Proxy"
if mojom.IsInterfaceRequestKind(kind):
return kind.kind.module.namespace + "." + kind.kind.name + "Request"
if (mojom.IsStructKind(kind) or
mojom.IsEnumKind(kind)):
return kind.module.namespace + "." + kind.name
if mojom.IsUnionKind(kind):
return kind.module.namespace + "." + kind.name
if mojom.IsArrayKind(kind): if mojom.IsArrayKind(kind):
return "Array<%s>" % self._ClosureType(kind.kind) return "Array<%s>" % self._ClosureType(kind.kind)
if mojom.IsMapKind(kind) and self._IsStringableKind(kind.key_kind): if mojom.IsMapKind(kind) and self._IsStringableKind(kind.key_kind):
...@@ -440,13 +431,33 @@ class Generator(generator.Generator): ...@@ -440,13 +431,33 @@ class Generator(generator.Generator):
return "Map<%s, %s>" % ( return "Map<%s, %s>" % (
self._LiteClosureType(kind.key_kind), self._LiteClosureType(kind.key_kind),
self._LiteClosureType(kind.value_kind)) self._LiteClosureType(kind.value_kind))
if mojom.IsAssociatedKind(kind) or mojom.IsInterfaceRequestKind(kind):
named_kind = kind.kind
else:
named_kind = kind
name = []
if named_kind.module:
name.append(named_kind.module.namespace)
if named_kind.parent_kind:
name.append(named_kind.parent_kind.name)
name.append("" + named_kind.name)
name = ".".join(name)
if (mojom.IsStructKind(kind) or mojom.IsUnionKind(kind) or
mojom.IsEnumKind(kind)):
return name
if mojom.IsInterfaceKind(kind):
return name + "Proxy"
if mojom.IsInterfaceRequestKind(kind):
return name + "Request"
# TODO(calamity): Support associated interfaces properly. # TODO(calamity): Support associated interfaces properly.
if mojom.IsAssociatedInterfaceKind(kind): if mojom.IsAssociatedInterfaceKind(kind):
return "mojo.internal.AssociatedInterfaceProxy" return "Object"
# TODO(calamity): Support associated interface requests properly. # TODO(calamity): Support associated interface requests properly.
if mojom.IsAssociatedInterfaceRequestKind(kind): if mojom.IsAssociatedInterfaceRequestKind(kind):
return "mojo.internal.AssociatedInterfaceRequest" return "Object"
# TODO(calamity): Support enums properly.
raise Exception("No valid closure type: %s" % kind) raise Exception("No valid closure type: %s" % kind)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment