// Copyright 2013 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. {%- if variant -%} {%- set variant_path = "%s-%s"|format(module.path, variant) -%} {%- else -%} {%- set variant_path = module.path -%} {%- endif -%} {%- set header_guard = "%s_H_"|format( variant_path|upper|replace("/","_")|replace(".","_")| replace("-", "_")) %} {%- macro namespace_begin() %} {%- for namespace in namespaces_as_array %} namespace {{namespace}} { {%- endfor %} {%- if variant %} namespace {{variant}} { {%- endif %} {%- endmacro %} {%- macro namespace_end() %} {%- if variant %} } // namespace {{variant}} {%- endif %} {%- for namespace in namespaces_as_array|reverse %} } // namespace {{namespace}} {%- endfor %} {%- endmacro %} #ifndef {{header_guard}} #define {{header_guard}} #include #include #include #include #include "base/callback.h" #include "base/macros.h" #include "base/optional.h" #include "mojo/public/cpp/bindings/mojo_buildflags.h" #if BUILDFLAG(MOJO_TRACE_ENABLED) #include "base/trace_event/trace_event.h" #endif #include "mojo/public/cpp/bindings/clone_traits.h" #include "mojo/public/cpp/bindings/equals_traits.h" #include "mojo/public/cpp/bindings/lib/serialization.h" #include "mojo/public/cpp/bindings/struct_ptr.h" #include "mojo/public/cpp/bindings/struct_traits.h" #include "mojo/public/cpp/bindings/union_traits.h" #include "{{module.path}}-shared.h" {%- for import in imports %} {%- if variant %} #include "{{"%s-%s.h"|format(import.path, variant)}}" {%- else %} #include "{{import.path}}.h" {%- endif %} {%- endfor %} {%- if not for_blink %} #include #include {%- else %} {# hash_util.h includes template specializations that should be present for every use of {Inlined}StructPtr. #} #include "mojo/public/cpp/bindings/lib/wtf_clone_equals_util.h" #include "mojo/public/cpp/bindings/lib/wtf_hash_util.h" #include "third_party/blink/renderer/platform/mojo/revocable_interface_ptr.h" #include "third_party/blink/renderer/platform/wtf/hash_functions.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" {%- endif %} {% if not disallow_interfaces -%} #include "mojo/public/cpp/bindings/associated_interface_ptr.h" #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" #include "mojo/public/cpp/bindings/associated_interface_request.h" #include "mojo/public/cpp/bindings/interface_ptr.h" #include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/lib/control_message_handler.h" #include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h" #include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h" {%- if for_blink %} #include "third_party/blink/renderer/platform/mojo/revocable_interface_ptr.h" {%- endif %} {%- endif %} {% if not disallow_native_types %} #include "mojo/public/cpp/bindings/lib/native_enum_serialization.h" #include "mojo/public/cpp/bindings/lib/native_struct_serialization.h" {%- endif %} {%- for header in extra_public_headers %} #include "{{header}}" {%- endfor %} {%- if export_header %} #include "{{export_header}}" {%- endif %} {#--- WTF enum hashing #} {%- from "enum_macros.tmpl" import enum_hash_blink%} {%- if for_blink %} {%- for enum in all_enums %} {%- if not enum|is_native_only_kind %} {{enum_hash_blink(enum)}} {%- endif %} {%- endfor %} {%- endif %} {{namespace_begin()}} {#--- Enums #} {%- if variant %} {%- for enum in enums %} using {{enum.name}} = {{enum.name}}; // Alias for definition in the parent namespace. {%- endfor %} {%- endif %} {#--- Constants #} {%- for constant in module.constants %} {{constant|format_constant_declaration}}; {%- endfor %} {#--- Interface Forward Declarations -#} {% for interface in interfaces %} class {{interface.name}}; using {{interface.name}}Ptr = mojo::InterfacePtr<{{interface.name}}>; {%- if for_blink %} using Revocable{{interface.name}}Ptr = ::blink::RevocableInterfacePtr<{{interface.name}}>; {%- endif %} using {{interface.name}}PtrInfo = mojo::InterfacePtrInfo<{{interface.name}}>; using ThreadSafe{{interface.name}}Ptr = mojo::ThreadSafeInterfacePtr<{{interface.name}}>; using {{interface.name}}Request = mojo::InterfaceRequest<{{interface.name}}>; using {{interface.name}}AssociatedPtr = mojo::AssociatedInterfacePtr<{{interface.name}}>; using ThreadSafe{{interface.name}}AssociatedPtr = mojo::ThreadSafeAssociatedInterfacePtr<{{interface.name}}>; using {{interface.name}}AssociatedPtrInfo = mojo::AssociatedInterfacePtrInfo<{{interface.name}}>; using {{interface.name}}AssociatedRequest = mojo::AssociatedInterfaceRequest<{{interface.name}}>; {% endfor %} {#--- Struct Forward Declarations -#} {% for struct in structs %} {%- if struct|is_native_only_kind %} using {{struct.name}} = mojo::native::NativeStruct; using {{struct.name}}Ptr = mojo::native::NativeStructPtr; {%- else %} class {{struct.name}}; {%- if struct|should_inline %} using {{struct.name}}Ptr = mojo::InlinedStructPtr<{{struct.name}}>; {%- else %} using {{struct.name}}Ptr = mojo::StructPtr<{{struct.name}}>; {%- endif %} {%- endif %} {% endfor %} {#--- Union Forward Declarations -#} {% for union in unions %} class {{union.name}}; {% if union|should_inline_union %} typedef mojo::InlinedStructPtr<{{union.name}}> {{union.name}}Ptr; {% else %} typedef mojo::StructPtr<{{union.name}}> {{union.name}}Ptr; {% endif %} {%- endfor %} {#--- Interfaces -#} {% for interface in interfaces %} {% include "interface_declaration.tmpl" %} {%- endfor %} {#--- Interface Proxies -#} {% for interface in interfaces %} {% include "interface_proxy_declaration.tmpl" %} {%- endfor %} {#--- Interface Stubs -#} {% for interface in interfaces %} {% include "interface_stub_declaration.tmpl" %} {%- endfor %} {#--- Interface Request Validators -#} {% for interface in interfaces %} {% include "interface_request_validator_declaration.tmpl" %} {%- endfor %} {#--- Interface Response Validators -#} {% for interface in interfaces if interface|has_callbacks %} {% include "interface_response_validator_declaration.tmpl" %} {%- endfor %} {#--- NOTE: Unions and non-inlined structs may have pointers to inlined structs, so we need to fully define inlined structs ahead of the others. #} {#--- Inlined structs #} {% for struct in structs %} {% if struct|should_inline and not struct|is_native_only_kind %} {% include "wrapper_class_declaration.tmpl" %} {% endif %} {%- endfor %} {#--- Unions must be declared before non-inlined structs because they can be members of structs. #} {#--- Unions #} {% for union in unions %} {% include "wrapper_union_class_declaration.tmpl" %} {%- endfor %} {#--- Non-inlined structs #} {% for struct in structs %} {% if not struct|should_inline and not struct|is_native_only_kind %} {% include "wrapper_class_declaration.tmpl" %} {% endif %} {%- endfor %} {%- for union in unions %} {% include "wrapper_union_class_template_definition.tmpl" %} {%- endfor %} {%- for struct in structs %} {%- if not struct|is_native_only_kind %} {% include "wrapper_class_template_definition.tmpl" %} {%- endif %} {%- endfor %} {{namespace_end()}} namespace mojo { {#--- Struct Serialization Helpers -#} {% for struct in structs %} {%- if not struct|is_native_only_kind %} {% include "struct_traits_declaration.tmpl" %} {%- endif %} {%- endfor %} {#--- Union Serialization Helpers -#} {% if unions %} {%- for union in unions %} {% include "union_traits_declaration.tmpl" %} {%- endfor %} {%- endif %} } // namespace mojo #endif // {{header_guard}}