[dawn][wire] Update generated mock files for new callback info types.

Change-Id: I004dd14fe3c6566a80df211f35e3062c43cb82dd
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/177060
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Loko Kung <lokokung@google.com>
diff --git a/generator/templates/mock_api.cpp b/generator/templates/mock_api.cpp
index b66b27e..ec792af 100644
--- a/generator/templates/mock_api.cpp
+++ b/generator/templates/mock_api.cpp
@@ -41,7 +41,7 @@
                 {%- endfor -%}
             ) {
                 auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
-                return object->procs->{{as_MethodSuffix(type.name, method.name)}}(self
+                return object->procs->{{as_CppMethodSuffix(type.name, method.name)}}(self
                     {%- for arg in method.arguments -%}
                         , {{as_varName(arg.name)}}
                     {%- endfor -%}
@@ -74,43 +74,114 @@
     {% endfor %}
 }
 
+//* Generate the older Call*Callback if there is no Future call equivalent.
+//* Includes:
+//*   - setDeviceLostCallback
+//*   - setUncapturedErrorCallback
+//*   - setLoggingCallback
+{% set LegacyCallbackFunctions = ['set device lost callback', 'set uncaptured error callback', 'set logging callback'] %}
+
 {% for type in by_category["object"] %}
-    {% for method in type.methods if has_callback_arguments(method) %}
-        {% set Suffix = as_MethodSuffix(type.name, method.name) %}
-
-        {{as_cType(method.return_type.name)}} ProcTableAsClass::{{Suffix}}(
-            {{-as_cType(type.name)}} {{as_varName(type.name)}}
-            {%- for arg in method.arguments -%}
-                , {{as_annotated_cType(arg)}}
-            {%- endfor -%}
-        ) {
-            ProcTableAsClass::Object* object = reinterpret_cast<ProcTableAsClass::Object*>({{as_varName(type.name)}});
-            {% for callback_arg in method.arguments if callback_arg.type.category == 'function pointer' %}
-                object->m{{as_MethodSuffix(type.name, method.name)}}Callback = {{as_varName(callback_arg.name)}};
-            {% endfor %}
-            object->userdata = userdata;
-            return On{{as_MethodSuffix(type.name, method.name)}}(
-                {{-as_varName(type.name)}}
-                {%- for arg in method.arguments -%}
-                    , {{as_varName(arg.name)}}
-                {%- endfor -%}
-            );
-        }
-
-        {% for callback_arg in method.arguments if callback_arg.type.category == 'function pointer' %}
-            void ProcTableAsClass::Call{{Suffix}}Callback(
+    {% for method in type.methods %}
+        {% set Suffix = as_CppMethodSuffix(type.name, method.name) %}
+        {% if has_callback_arguments(method) %}
+            {{as_cType(method.return_type.name)}} ProcTableAsClass::{{Suffix}}(
                 {{-as_cType(type.name)}} {{as_varName(type.name)}}
-                {%- for arg in callback_arg.type.arguments -%}
-                    {%- if not loop.last -%}, {{as_annotated_cType(arg)}}{%- endif -%}
+                {%- for arg in method.arguments -%}
+                    , {{as_annotated_cType(arg)}}
                 {%- endfor -%}
             ) {
                 ProcTableAsClass::Object* object = reinterpret_cast<ProcTableAsClass::Object*>({{as_varName(type.name)}});
-                object->m{{Suffix}}Callback(
-                    {%- for arg in callback_arg.type.arguments -%}
-                        {%- if not loop.last -%}{{as_varName(arg.name)}}, {% endif -%}
-                    {%- endfor -%}
-                    object->userdata);
+                {% for arg in method.arguments if arg.type.category == 'function pointer' %}
+                    object->m{{Suffix + arg.name.CamelCase()}} = {{as_varName(arg.name)}};
+                    object->m{{Suffix}}Userdata = userdata;
+                {% endfor %}
+
+                {% if method.name.get() == 'pop error scope' %}
+                    //* Currently special casing popErrorScope since it has an old callback type.
+                    On{{Suffix}}({{-as_varName(type.name)}}, {.nextInChain = nullptr, .mode = WGPUCallbackMode_AllowProcessEvents, .callback = nullptr, .oldCallback = oldCallback, .userdata = userdata});
+                {% elif method.name.get() not in LegacyCallbackFunctions %}
+                    On{{Suffix}}(
+                        {{-as_varName(type.name)}}
+                        {%- for arg in method.arguments if arg.type.category != 'function pointer' and arg.type.name.get() != 'void *' -%}
+                            , {{as_varName(arg.name)}}
+                        {%- endfor -%}
+                        , {.nextInChain = nullptr, .mode = WGPUCallbackMode_AllowProcessEvents
+                        {%- for arg in method.arguments if arg.type.category == 'function pointer' -%}
+                            , .{{as_varName(arg.name)}} = {{as_varName(arg.name)}}
+                        {%- endfor -%}
+                        , .userdata = userdata});
+                {% else %}
+                    On{{Suffix}}(
+                        {{-as_varName(type.name)}}
+                        {%- for arg in method.arguments -%}
+                            , {{as_varName(arg.name)}}
+                        {%- endfor -%}
+                    );
+                {% endif %}
             }
+        {% elif has_callback_info(method) %}
+            {{as_cType(method.return_type.name)}} ProcTableAsClass::{{Suffix}}(
+                {{-as_cType(type.name)}} {{as_varName(type.name)}}
+                {%- for arg in method.arguments -%}
+                    , {{as_annotated_cType(arg)}}
+                {%- endfor -%}
+            ) {
+                ProcTableAsClass::Object* object = reinterpret_cast<ProcTableAsClass::Object*>({{as_varName(type.name)}});
+                {% for arg in method.arguments %}
+                    {% if arg.name.get() == 'callback info' %}
+                        {% for callback in types[arg.type.name.get()].members if callback.type.category == 'function pointer' %}
+                            object->m{{Suffix + callback.name.CamelCase()}} = {{as_varName(arg.name)}}.{{as_varName(callback.name)}};
+                            object->m{{Suffix}}Userdata = {{as_varName(arg.name)}}.userdata;
+                        {% endfor %}
+                    {% endif %}
+                {% endfor %}
+
+                On{{Suffix}}(
+                    {{-as_varName(type.name)}}
+                    {%- for arg in method.arguments -%}
+                        , {{as_varName(arg.name)}}
+                    {%- endfor -%}
+                );
+                return {mNextFutureID++};
+            }
+        {% endif %}
+    {% endfor %}
+
+    {% for method in type.methods if has_callback_info(method) or method.name.get() in LegacyCallbackFunctions %}
+        {% set Suffix = as_CppMethodSuffix(type.name, method.name) %}
+        {% for arg in method.arguments %}
+            {% if arg.name.get() == 'callback info' %}
+                {% for callback in types[arg.type.name.get()].members if callback.type.category == 'function pointer' %}
+                    void ProcTableAsClass::Call{{Suffix + callback.name.CamelCase()}}(
+                        {{-as_cType(type.name)}} {{as_varName(type.name)}}
+                        {%- for arg in callback.type.arguments -%}
+                            {%- if not loop.last -%}, {{as_annotated_cType(arg)}}{%- endif -%}
+                        {%- endfor -%}
+                    ) {
+                        ProcTableAsClass::Object* object = reinterpret_cast<ProcTableAsClass::Object*>({{as_varName(type.name)}});
+                        object->m{{Suffix + callback.name.CamelCase()}}(
+                            {%- for arg in callback.type.arguments -%}
+                                {%- if not loop.last -%}{{as_varName(arg.name)}}, {% endif -%}
+                            {%- endfor -%}
+                            object->m{{Suffix}}Userdata);
+                    }
+                {% endfor %}
+            {% elif arg.type.category == 'function pointer' %}
+                void ProcTableAsClass::Call{{Suffix + arg.name.CamelCase()}}(
+                    {{-as_cType(type.name)}} {{as_varName(type.name)}}
+                    {%- for arg in arg.type.arguments -%}
+                        {%- if not loop.last -%}, {{as_annotated_cType(arg)}}{%- endif -%}
+                    {%- endfor -%}
+                ) {
+                    ProcTableAsClass::Object* object = reinterpret_cast<ProcTableAsClass::Object*>({{as_varName(type.name)}});
+                    object->m{{Suffix + arg.name.CamelCase()}}(
+                        {%- for arg in arg.type.arguments -%}
+                            {%- if not loop.last -%}{{as_varName(arg.name)}}, {% endif -%}
+                        {%- endfor -%}
+                        object->m{{Suffix}}Userdata);
+                }
+            {% endif %}
         {% endfor %}
     {% endfor %}
 {% endfor %}
@@ -129,6 +200,6 @@
 
 void MockProcTable::IgnoreAllReleaseCalls() {
     {% for type in by_category["object"] %}
-        EXPECT_CALL(*this, {{as_MethodSuffix(type.name, Name("release"))}}(_)).Times(AnyNumber());
+        EXPECT_CALL(*this, {{as_CppMethodSuffix(type.name, Name("release"))}}(_)).Times(AnyNumber());
     {% endfor %}
 }