Index: headless/lib/browser/devtools_api/domain_js.template |
diff --git a/headless/lib/browser/devtools_api/domain_js.template b/headless/lib/browser/devtools_api/domain_js.template |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8bce5ed9bdbe3f6556b0aa677cc605f6570021d5 |
--- /dev/null |
+++ b/headless/lib/browser/devtools_api/domain_js.template |
@@ -0,0 +1,133 @@ |
+// Copyright 2017 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. |
+ |
+/** |
+ * @fileoverview Generated DevTools bindings for the {{domain.domain}} Domain. |
+ * Note bindings are not generated for experimental commands and events, if you |
+ * need to use one of those you must use the |
+ * <code>chromium.DevTools.Connection</code> class directly. |
+ * |
+ * TODO(alexclarke): Consider generating bindings for experimental stuff too. |
+ */ |
+'use strict'; |
+ |
+goog.module('chromium.DevTools.{{domain.domain}}'); |
+const Connection = goog.require('chromium.DevTools.Connection'); |
+{% for domain_name in domain.js_dependencies %} |
+const {{domain_name}} = goog.require('chromium.DevTools.{{domain_name}}'); |
+{% endfor %} |
+{% for forward_declaration in domain.js_forward_declarations %} |
+goog.forwardDeclare('chromium.DevTools.{{forward_declaration}}'); |
+{% endfor %} |
+ |
+/** |
+ * Bindings for the {{domain.domain}} DevTools Domain. |
+ */ |
+class {{domain.domain}} { |
+ /** |
+ * @param {!Connection} connection The DevTools connection. |
+ */ |
+ constructor(connection) { |
+ /** @private {!Connection} */ |
+ this.connection_ = connection; |
+ }; |
+{# Generate non-experimental commands. #} |
+{% for command in domain.commands %} |
+ {% if command.experimental %}{% continue %}{% endif %} |
+ {% set method_name = command.name | sanitize_literal | to_title_case %} |
+ {% if command.parameters|length > 0 %} |
+ {% set param_name = 'params' %} |
+ {% set param_type = '{' + domain.domain + '.' + method_name + 'Params}' %} |
+ {% else %} |
+ {% set param_name = 'opt_params' %} |
+ {% set param_type = '{' + domain.domain + '.' + method_name + 'Params=}' %} |
+ {% endif %} |
+ {% set result_type = '{!Promise<' + domain.domain + '.' + method_name + 'Result>}' %} |
+ |
+ /** |
+ {% if command.description %} |
+ * {{ command.description }} |
+ {% endif %} |
+ * @param {{param_type}} {{param_name}} |
+ * @return {{result_type}} |
+ */ |
+ {{method_name}}({{param_name}}) { |
+ return /** @type {{result_type}} **/( |
+ this.connection_.sendDevToolsMessage('{{domain.domain}}.{{command.name}}', |
+ {{param_name}})); |
+ } |
+{% endfor %} |
+ |
+{# Generate non-experimental events. #} |
+{% for event in domain.events %} |
+ {% if event.experimental %}{% continue %}{% endif %} |
+ {% set param_type = '{!function(!' + domain.domain + '.' + event.name | to_title_case + 'Params)}' %} |
+ |
+ /** |
+ {% if event.description %} |
+ * {{ event.description }} |
+ {% endif %} |
+ * @param {{param_type}} listener |
+ */ |
+ On{{event.name | to_title_case}}(listener) { |
+ this.connection_.addEventListener( |
+ '{{domain.domain}}.{{event.name}}', /** @type {!function(!Object): undefined} */ (listener)); |
+ } |
+{% endfor %} |
+} |
+ |
+{# Generate enums. #} |
+{% for type in domain.types %} |
+ {% if not "enum" in type %}{% continue %}{% endif %} |
+/** |
+ {% if type.description %} |
+ * {{type.description}} |
+ * |
+ {% endif %} |
+ * @enum {string} |
+ */ |
+{{domain.domain}}.{{type.id}} = { |
+ {% for literal in type.enum %} |
+ {{ literal | sanitize_literal | dash_to_camelcase | camelcase_to_hacker_style | upper }}: "{{ literal }}"{{',' if not loop.last}} |
+ {% endfor %} |
+}; |
+ |
+{% endfor %} |
+ |
+{# Generate types. #} |
+{% for type in domain.types %} |
+ {% if not (type.type == "object") or not ("properties" in type) %}{% continue %}{% endif %} |
+/** |
+ {% if type.description %} |
+ * {{type.description}} |
+ * |
+ {% endif %} |
+ {% for property in type.properties %} |
+ {% if property.description %} |
+ * {{property.name}}: {{property.description}} |
+ {% endif %} |
+ {% endfor %} |
+ * |
+ {% if type.properties %} |
+ * @typedef {{ '{{' }} |
+ {% for property in type.properties %} |
+ {% if property.optional %} |
+ * {{property.name}}: ({{ short_form(resolve_type(property).js_type) }}|undefined){% if not loop.last %},{% endif %} |
+ |
+ {% else %} |
+ * {{property.name}}: {{ short_form(resolve_type(property).js_type) }}{% if not loop.last %}, {% endif %} |
+ |
+ {% endif %} |
+ {% endfor %} |
+ * {{ '}}' }} |
+ {% else %} |
+ * @typedef {undefined} |
+ {% endif %} |
+ */ |
+{{domain.domain}}.{{type.id}}; |
+ |
+ |
+{% endfor %} |
+ |
+exports = {{domain.domain}}; |