blob: c9eaea73845594067e25e3bf1308ecdbd2b6226f [file] [log] [blame]
{#
# Copyright 2016 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#}
{% extends "callback-interface-base.h.template" %}
{% block includes %}
{{ super() }}
#include "cobalt/script/mozjs-45/weak_heap_object.h"
#include "third_party/mozjs-45/js/src/jsapi.h"
{% endblock includes %}
{% block implementation %}
{% for component in components %}
namespace {{component}} {
{% endfor %}
class {{binding_class}} : public {{impl_class}} {
public:
typedef {{impl_class}} BaseType;
{{binding_class}}(
JSContext* context, JS::HandleValue implementing_object_value);
{% for operation in operations %}
{% for overload in operation.overloads %}
{{overload.type}} {{overload.name}}(
const scoped_refptr<script::Wrappable>& callback_this,
{% for arg in overload.arguments %}
{{arg.arg_type}} {{arg.name}},
{% endfor %}
bool* had_exception) const override;
{% endfor %}
{% endfor %}
JSObject* handle() const { return implementing_object_.GetObject(); }
const JS::Value& value() const { return implementing_object_.GetValue(); }
bool WasCollected() const { return implementing_object_.WasCollected(); }
void Trace(JSTracer* js_tracer) { implementing_object_.Trace(js_tracer); }
private:
JSContext* context_;
script::mozjs::WeakHeapObject implementing_object_;
};
{% for component in components|reverse %}
} // namespace {{component}}
{% endfor %}
namespace cobalt {
namespace script {
// Explicit instantiation of CallbackInterfaceTraits struct so we can infer
// the type of the generated class from the type of the callback interface.
template<>
struct CallbackInterfaceTraits<{{fully_qualified_impl_class}}> {
typedef {{fully_qualified_binding_class}} MozjsCallbackInterfaceClass;
};
} // namespace script
} // namespace cobalt
{% endblock implementation %}