Cpp bindings: add typedef for callbacks.

BUG=None
TEST=None
R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/884043003
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
index 30d20d8..25c01bb 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_declaration.tmpl
@@ -14,19 +14,19 @@
  public:
   static const char* Name_;
 
-  typedef {{interface.name}}Proxy Proxy_;
-  typedef {{interface.name}}Stub Stub_;
+  using Proxy_ = {{interface.name}}Proxy;
+  using Stub_ = {{interface.name}}Stub;
 
-  typedef {{interface.name}}RequestValidator RequestValidator_;
+  using RequestValidator_ = {{interface.name}}RequestValidator;
 {%- if interface|has_callbacks %}
-  typedef {{interface.name}}ResponseValidator ResponseValidator_;
+  using ResponseValidator_ = {{interface.name}}ResponseValidator;
 {%- else %}
-  typedef mojo::PassThroughFilter ResponseValidator_;
+  using ResponseValidator_ = mojo::PassThroughFilter;
 {%- endif %}
 {% if interface.client %}
-  typedef {{interface.client}} Client;
+  using Client = {{interface.client}};
 {% else %}
-  typedef mojo::NoInterface Client;
+  using Client = mojo::NoInterface;
 {% endif %}
 
 {#--- Constants #}
@@ -44,6 +44,9 @@
   virtual ~{{interface.name}}() {}
 
 {%- for method in interface.methods %}
+{%    if method.response_parameters != None %}
+  using {{method.name}}Callback = {{interface_macros.declare_callback(method)}};
+{%-   endif %}
   virtual void {{method.name}}({{interface_macros.declare_request_params("", method)}}) = 0;
 {%- endfor %}
 };
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
index fdbe8ca..2b45808 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl
@@ -104,12 +104,12 @@
     : public mojo::MessageReceiver {
  public:
   {{class_name}}_{{method.name}}_ForwardToCallback(
-      const {{interface_macros.declare_callback(method)}}& callback)
+      const {{class_name}}::{{method.name}}Callback& callback)
       : callback_(callback) {
   }
   virtual bool Accept(mojo::Message* message) override;
  private:
-  {{interface_macros.declare_callback(method)}} callback_;
+  {{class_name}}::{{method.name}}Callback callback_;
   MOJO_DISALLOW_COPY_AND_ASSIGN({{class_name}}_{{method.name}}_ForwardToCallback);
 };
 bool {{class_name}}_{{method.name}}_ForwardToCallback::Accept(
@@ -175,7 +175,7 @@
 {%-     set params_description =
             "%s.%s response"|format(interface.name, method.name) %}
 class {{class_name}}_{{method.name}}_ProxyToResponder
-    : public {{interface_macros.declare_callback(method)}}::Runnable {
+    : public {{class_name}}::{{method.name}}Callback::Runnable {
  public:
   virtual ~{{class_name}}_{{method.name}}_ProxyToResponder() {
     delete responder_;
@@ -257,10 +257,10 @@
               message->mutable_payload());
 
       params->DecodePointersAndHandles(message->mutable_handles());
-      {{interface_macros.declare_callback(method)}}::Runnable* runnable =
+      {{class_name}}::{{method.name}}Callback::Runnable* runnable =
           new {{class_name}}_{{method.name}}_ProxyToResponder(
               message->request_id(), responder);
-      {{interface_macros.declare_callback(method)}} callback(runnable);
+      {{class_name}}::{{method.name}}Callback callback(runnable);
       {{alloc_params(method.parameters)|indent(6)}}
       // A null |sink_| typically means there is a missing call to
       // InterfacePtr::set_client().
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
index fbefce2..7644b2e 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_macros.tmpl
@@ -17,7 +17,7 @@
 {%- macro declare_request_params(prefix, method) -%}
 {{declare_params(prefix, method.parameters)}}
 {%-   if method.response_parameters != None -%}
-{%- if method.parameters %}, {% endif %}
-const {{declare_callback(method)}}& callback
+{%- if method.parameters %}, {% endif -%}
+const {{method.name}}Callback& callback
 {%-   endif -%}
 {%- endmacro -%}
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
index 3da6c32..25449b7 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/module.h.tmpl
@@ -40,16 +40,16 @@
 {#--- Interface Forward Declarations -#}
 {%  for interface in interfaces %}
 class {{interface.name}};
-typedef mojo::InterfacePtr<{{interface.name}}> {{interface.name}}Ptr;
+using {{interface.name}}Ptr = mojo::InterfacePtr<{{interface.name}}>;
 {%  endfor %}
 
 {#--- Struct Forward Declarations -#}
 {%  for struct in structs %}
 class {{struct.name}};
 {%    if struct|should_inline %}
-typedef mojo::InlinedStructPtr<{{struct.name}}> {{struct.name}}Ptr;
+using {{struct.name}}Ptr = mojo::InlinedStructPtr<{{struct.name}}>;
 {%    else %}
-typedef mojo::StructPtr<{{struct.name}}> {{struct.name}}Ptr;
+using {{struct.name}}Ptr = mojo::StructPtr<{{struct.name}}>;
 {%    endif %}
 {%  endfor %}
 
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl
index 25b39b3..ebcba7b 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_class_declaration.tmpl
@@ -1,7 +1,7 @@
 
 class {{struct.name}} {
  public:
-  typedef internal::{{struct.name}}_Data Data_;
+  using Data_ = internal::{{struct.name}}_Data;
 
 {#--- Constants #}
 {%- for constant in struct.constants %}
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl
index 91ea7cf..0420c8d 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/wrapper_union_class_declaration.tmpl
@@ -1,7 +1,7 @@
 class {{union.name}} {
  public:
-  typedef internal::{{union.name}}_Data Data_;
-  typedef Data_::{{union.name}}_Tag Tag;
+  using Data_ = internal::{{union.name}}_Data;
+  using Tag = Data_::{{union.name}}_Tag;
 
   static {{union.name}}Ptr New();