| // Copyright 2013 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| {%- from 'cpp_macros.tmpl' import |
| namespace_begin, namespace_end, variant_path %} |
| |
| #if defined(__clang__) |
| #pragma clang diagnostic push |
| #pragma clang diagnostic ignored "-Wunused-private-field" |
| #endif |
| |
| #include "{{variant_path(module.path, variant)}}.h" |
| |
| #include <math.h> |
| #include <stdint.h> |
| #include <utility> |
| |
| #include "base/debug/alias.h" |
| #include "base/hash/md5_constexpr.h" |
| #include "base/run_loop.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/task/thread_pool/thread_pool_instance.h" |
| #include "base/trace_event/trace_event.h" |
| #include "base/trace_event/typed_macros.h" |
| #include "mojo/public/cpp/bindings/features.h" |
| #include "mojo/public/cpp/bindings/lib/default_construct_tag_internal.h" |
| #include "mojo/public/cpp/bindings/lib/generated_code_util.h" |
| #include "mojo/public/cpp/bindings/lib/message_internal.h" |
| #include "mojo/public/cpp/bindings/lib/proxy_to_responder.h" |
| #include "mojo/public/cpp/bindings/lib/send_message_helper.h" |
| #include "mojo/public/cpp/bindings/lib/serialization_util.h" |
| #include "mojo/public/cpp/bindings/lib/unserialized_message_context.h" |
| #include "mojo/public/cpp/bindings/lib/validate_params.h" |
| #include "mojo/public/cpp/bindings/lib/validation_errors.h" |
| #include "mojo/public/cpp/bindings/mojo_buildflags.h" |
| #include "mojo/public/cpp/bindings/urgent_message_scope.h" |
| #include "mojo/public/interfaces/bindings/interface_control_messages.mojom.h" |
| #include "third_party/perfetto/include/perfetto/tracing/traced_value.h" |
| |
| #include "{{module.path}}-params-data.h" |
| #include "{{module.path}}-shared-message-ids.h" |
| |
| #include "{{variant_path(module.path, variant)}}-import-headers.h" |
| #include "{{variant_path(module.path, variant)}}-test-utils.h" |
| |
| {%- if for_blink %} |
| #include "mojo/public/cpp/bindings/lib/wtf_serialization.h" |
| {%- endif %} |
| |
| {%- for header in extra_traits_headers %} |
| #include "{{header}}" |
| {%- endfor %} |
| |
| {{namespace_begin(namespaces_as_array, variant)}} |
| |
| {#--- Constants #} |
| {%- for constant in module.constants %} |
| {%- if constant.kind|is_string_kind %} |
| const char {{constant.name}}[] = {{constant|constant_value}}; |
| {%- endif %} |
| {%- endfor %} |
| |
| {#--- Struct Constants #} |
| {%- for struct in structs %} |
| {%- for constant in struct.constants %} |
| {%- if constant.kind|is_string_kind %} |
| const char {{struct.name}}::{{constant.name}}[] = {{constant|constant_value}}; |
| {%- else %} |
| constexpr {{constant.kind|cpp_pod_type}} {{struct.name}}::{{constant.name}}; |
| {%- endif %} |
| {%- endfor %} |
| {%- endfor %} |
| |
| {#--- Struct builder definitions #} |
| {%- for struct in structs %} |
| {%- if not struct|is_native_only_kind %} |
| {%- include "wrapper_class_definition.tmpl" %} |
| {%- endif %} |
| {%- endfor %} |
| |
| {#--- Union builder definitions #} |
| {%- for union in unions %} |
| {%- include "wrapper_union_class_definition.tmpl" %} |
| {%- endfor %} |
| |
| {#--- Interface definitions #} |
| {%- for interface in interfaces %} |
| {%- include "interface_definition.tmpl" %} |
| {%- endfor %} |
| |
| {{namespace_end(namespaces_as_array, variant)}} |
| |
| |
| namespace mojo { |
| |
| {#--- Struct Serialization Helpers -#} |
| {% for struct in structs %} |
| {%- if not struct|is_native_only_kind %} |
| {% include "struct_traits_definition.tmpl" %} |
| {%- endif %} |
| {%- endfor %} |
| |
| {#--- Union Serialization Helpers #} |
| {%- for union in unions %} |
| {%- include "union_traits_definition.tmpl" %} |
| {%- endfor %} |
| |
| } // namespace mojo |
| |
| |
| // Symbols declared in the -test-utils.h header are defined here instead of a |
| // separate .cc file to save compile time. |
| |
| {{namespace_begin(namespaces_as_array, variant)}} |
| |
| {%- import "interface_macros.tmpl" as interface_macros %} |
| |
| {% for interface in interfaces %} |
| |
| {#--- Testing interceptor #} |
| {%- for method in interface.methods %} |
| void {{interface.name}}InterceptorForTesting::{{method.name}}({{interface_macros.declare_request_params("", method)}}) { |
| GetForwardingInterface()->{{method.name}}( |
| {%- for param in method.parameters -%} |
| {%- if param.kind|is_non_const_ref_kind %} |
| {{param.name}} |
| {%- else %} |
| std::move({{param.name}}) |
| {% endif %} |
| {%- if not loop.last %}, {% endif %} |
| {%- endfor %} |
| {%- if method.response_parameters != None -%} |
| {%- if method.parameters %}, {% endif -%} |
| std::move(callback) |
| {%- endif -%} |
| ); |
| } |
| {%- endfor %} |
| |
| {#--- Async wait helper for testing #} |
| {{interface.name}}AsyncWaiter::{{interface.name}}AsyncWaiter( |
| {{interface.name}}* proxy) : proxy_(proxy) {} |
| |
| {{interface.name}}AsyncWaiter::~{{interface.name}}AsyncWaiter() = default; |
| |
| {% for method in interface.methods if method.response_parameters != None -%} |
| void {{interface.name}}AsyncWaiter::{{method.name}}( |
| {{interface_macros.declare_sync_method_params("", method)}}) { |
| base::RunLoop loop; |
| proxy_->{{method.name}}( |
| {%- for param in method.parameters -%} |
| {%- if param.kind|is_non_const_ref_kind %} |
| {{param.name}}, |
| {%- else %} |
| std::move({{param.name}}), |
| {%- endif %} |
| {%- endfor %} |
| base::BindOnce( |
| [](base::RunLoop* loop |
| {%- for param in method.response_parameters -%}, |
| {{param.kind|cpp_wrapper_call_type}}* out_{{param.name}} |
| {% endfor -%} |
| {%- for param in method.response_parameters -%}, |
| {{param.kind|cpp_wrapper_param_type}} {{param.name}} |
| {%- endfor %}) { |
| {%- for param in method.response_parameters -%} |
| *out_{{param.name}} = std::move({{param.name}}); |
| {%- endfor %} |
| loop->Quit(); |
| }, |
| &loop |
| {%- for param in method.response_parameters -%}, |
| out_{{param.name}} |
| {%- endfor %})); |
| loop.Run(); |
| } |
| |
| {% if method.response_parameters|length == 1 -%} |
| {%- set response_kind = method.response_parameters[0].kind -%} |
| {%- set response_type = response_kind|cpp_wrapper_call_type -%} |
| {{response_type}} {{interface.name}}AsyncWaiter::{{method.name}}( |
| {{interface_macros.declare_params("", method.parameters)}}) { |
| {{response_type}} async_wait_result{{ '' if response_kind|is_default_constructible else '{mojo::internal::DefaultConstructTag()}' }}; |
| {{method.name}}( |
| {%- for param in method.parameters -%} |
| std::move({{param.name}}), |
| {%- endfor -%} |
| &async_wait_result); |
| return async_wait_result; |
| } |
| {%- endif %} |
| |
| {% endfor %} |
| |
| {% endfor %} |
| |
| {{namespace_end(namespaces_as_array, variant)}} |
| |
| |
| #if defined(__clang__) |
| #pragma clang diagnostic pop |
| #endif |