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

Unified Diff: headless/lib/browser/domain_h.template

Issue 1904073002: headless: Move hidden commands and events to experimental domains (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Also require parameters for hidden commands where the entire domain isn't hidden Created 4 years, 8 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
« no previous file with comments | « headless/lib/browser/domain_cc.template ('k') | headless/lib/browser/headless_devtools_client_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: headless/lib/browser/domain_h.template
diff --git a/headless/lib/browser/domain_h.template b/headless/lib/browser/domain_h.template
index edb87100303a6e5418eb8c400e6892ce0197173b..607b5be16f2d0b45388749c8eda38fa101105c99 100644
--- a/headless/lib/browser/domain_h.template
+++ b/headless/lib/browser/domain_h.template
@@ -14,16 +14,68 @@
#include "headless/public/headless_export.h"
#include "headless/public/internal/message_dispatcher.h"
+{# Macro for defining a member function for a given command. #}
+{% macro command_decl(command) %}
+ {% set method_name = command.name | to_title_case %}
+ {% if command.description %}
+ // {{ command.description }}
+ {% endif %}
+ {% if "parameters" in command and "returns" in command %}
+ void {{method_name}}(std::unique_ptr<{{method_name}}Params> params, base::Callback<void(std::unique_ptr<{{method_name}}Result>)> callback = base::Callback<void(std::unique_ptr<{{method_name}}Result>)>());
+ {% elif "parameters" in command %}
+ void {{method_name}}(std::unique_ptr<{{method_name}}Params> params, base::Callback<void()> callback = base::Callback<void()>());
+ {% elif "returns" in command %}
+ void {{method_name}}(base::Callback<void(std::unique_ptr<{{method_name}}Result>)> callback = base::Callback<void(std::unique_ptr<{{method_name}}Result>)>());
+ {% else %}
+ void {{method_name}}(base::Callback<void()> callback = base::Callback<void()>());
+ {% endif %}
+ {# Generate convenience methods that take the required parameters directly. #}
+ {# Don't generate these for hidden commands. #}
+ {% if "parameters" in command and not command.hidden %}
+ void {{method_name}}({##}
+ {% for parameter in command.parameters -%}
+ {% if parameter.get("optional", False) -%}
+ {% break %}
+ {% endif %}
+ {% if not loop.first %}, {% endif %}
+{{resolve_type(parameter).pass_type}} {{parameter.name | camelcase_to_hacker_style -}}
+ {% endfor %}
+ {% if "parameters" in command and not command.parameters[0].get("optional", False) %}, {% endif %}{# -#}
+ {% if "returns" in command -%}
+ base::Callback<void(std::unique_ptr<{{method_name}}Result>)> callback = base::Callback<void(std::unique_ptr<{{method_name}}Result>)>(){##}
+ {% else -%}
+ base::Callback<void()> callback = base::Callback<void()>(){##}
+ {% endif %});
+ {% endif %}
+{% endmacro %}
+
namespace headless {
namespace {{domain.domain | camelcase_to_hacker_style}} {
+class ExperimentalDomain;
+class ExperimentalObserver;
{% if "events" in domain %}
-class Observer {
+
+class HEADLESS_EXPORT ExperimentalObserver {
public:
- virtual ~Observer() {}
+ virtual ~ExperimentalObserver() {}
{% for event in domain.events %}
+ {% if event.description %}
+ // {{event.description}}
+ {% endif %}
virtual void On{{event.name | to_title_case}}(const {{event.name | to_title_case}}Params& params) {}
{% endfor %}
};
+
+class HEADLESS_EXPORT Observer : public ExperimentalObserver {
+ public:
+ virtual ~Observer() {}
+ {% for event in domain.events %}
+ {% if event.description %}
+ // {% if event.hidden %}Experimental: {% endif %}{{event.description}}
+ {% endif %}
+ virtual void On{{event.name | to_title_case}}(const {{event.name | to_title_case}}Params& params) {% if event.hidden %}final {% endif %}{}
+ {% endfor %}
+};
{% endif %}
{% if domain.description %}
@@ -31,9 +83,6 @@ class Observer {
{% endif %}
class HEADLESS_EXPORT Domain {
public:
- Domain(internal::MessageDispatcher* dispatcher);
- ~Domain();
-
{% if "events" in domain %}
// Add or remove an observer. |observer| must be removed before being
// destroyed.
@@ -41,41 +90,22 @@ class HEADLESS_EXPORT Domain {
void RemoveObserver(Observer* observer);
{% endif %}
+ // Return the experimental interface for this domain. Note that experimental
+ // commands may be changed or removed at any time.
+ ExperimentalDomain* GetExperimental();
+
{# Generate methods for each command. #}
{% for command in domain.commands %}
{# Skip redirected commands. #}
{% if "redirect" in command %}{% continue %}{% endif %}
- {% set method_name = command.name | to_title_case %}
- {% if command.description %}
- // {{ command.description }}
- {% endif %}
- {% if "parameters" in command and "returns" in command %}
- void {{method_name}}(std::unique_ptr<{{method_name}}Params> params, base::Callback<void(std::unique_ptr<{{method_name}}Result>)> callback = base::Callback<void(std::unique_ptr<{{method_name}}Result>)>());
- {% elif "parameters" in command %}
- void {{method_name}}(std::unique_ptr<{{method_name}}Params> params, base::Callback<void()> callback = base::Callback<void()>());
- {% elif "returns" in command %}
- void {{method_name}}(base::Callback<void(std::unique_ptr<{{method_name}}Result>)> callback = base::Callback<void(std::unique_ptr<{{method_name}}Result>)>());
- {% else %}
- void {{method_name}}(base::Callback<void()> callback = base::Callback<void()>());
- {% endif %}
- {# Generate convenience methods that take the required parameters directly. #}
- {% if not "parameters" in command %}{% continue %}{% endif %}
- void {{method_name}}({##}
- {% for parameter in command.parameters -%}
- {% if parameter.get("optional", False) -%}
- {% break %}
- {% endif %}
- {% if not loop.first %}, {% endif %}
-{{resolve_type(parameter).pass_type}} {{parameter.name | camelcase_to_hacker_style -}}
- {% endfor %}
- {% if "parameters" in command and not command.parameters[0].get("optional", False) %}, {% endif %}{# -#}
- {% if "returns" in command -%}
- base::Callback<void(std::unique_ptr<{{method_name}}Result>)> callback = base::Callback<void(std::unique_ptr<{{method_name}}Result>)>(){##}
- {% else -%}
- base::Callback<void()> callback = base::Callback<void()>(){##}
- {% endif %});
+ {# Skip hidden commands. #}
+ {% if command.hidden %}{% continue %}{% endif %}
+{{ command_decl(command) }}
{% endfor %}
- private:
+ protected:
+ Domain(internal::MessageDispatcher* dispatcher);
+ ~Domain();
+
{# Generate response handlers for commands that need them. #}
{% for command in domain.commands %}
{% if not "returns" in command %}{% continue %}{% endif %}
@@ -90,12 +120,38 @@ class HEADLESS_EXPORT Domain {
internal::MessageDispatcher* dispatcher_; // Not owned.
{% if "events" in domain %}
- base::ObserverList<Observer> observers_;
+ base::ObserverList<ExperimentalObserver> observers_;
{% endif %}
+ private:
DISALLOW_COPY_AND_ASSIGN(Domain);
};
+class ExperimentalDomain : public Domain {
+ public:
+ ExperimentalDomain(internal::MessageDispatcher* dispatcher);
+ ~ExperimentalDomain();
+
+ {% if "events" in domain %}
+ // Add or remove an observer. |observer| must be removed before being
+ // destroyed.
+ void AddObserver(ExperimentalObserver* observer);
+ void RemoveObserver(ExperimentalObserver* observer);
+ {% endif %}
+
+ {# Generate methods for each experimental command. #}
+ {% for command in domain.commands %}
+ {# Skip redirected commands. #}
+ {% if "redirect" in command %}{% continue %}{% endif %}
+ {# Skip non-hidden commands. #}
+ {% if not command.hidden %}{% continue %}{% endif %}
+{{ command_decl(command) }}
+ {% endfor %}
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ExperimentalDomain);
+};
+
} // namespace {{domain.domain | camelcase_to_hacker_style}}
} // namespace headless
« no previous file with comments | « headless/lib/browser/domain_cc.template ('k') | headless/lib/browser/headless_devtools_client_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698