1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This file has been auto-generated by {{code_generator}}. DO NOT MODIFY! 6 7 #include "config.h" 8 {% filter conditional(conditional_string) %} 9 #include "{{v8_class}}.h" 10 11 {% for filename in cpp_includes %} 12 #include "{{filename}}" 13 {% endfor %} 14 15 namespace blink { 16 17 {{v8_class}}::{{v8_class}}(v8::Handle<v8::Function> callback, ScriptState* scriptState) 18 : ActiveDOMCallback(scriptState->executionContext()) 19 , m_scriptState(scriptState) 20 { 21 m_callback.set(scriptState->isolate(), callback); 22 } 23 24 {{v8_class}}::~{{v8_class}}() 25 { 26 } 27 28 {% for method in methods if not method.is_custom %} 29 {{method.cpp_type}} {{v8_class}}::{{method.name}}({{method.argument_declarations | join(', ')}}) 30 { 31 {% set return_default = 'return true' 32 if method.idl_type == 'boolean' else 'return' %}{# void #} 33 if (!canInvokeCallback()) 34 {{return_default}}; 35 36 if (m_scriptState->contextIsValid()) 37 {{return_default}}; 38 39 ScriptState::Scope scope(m_scriptState.get()); 40 {% if method.call_with_this_handle %} 41 v8::Handle<v8::Value> thisHandle = thisValue.v8Value(); 42 if (thisHandle.IsEmpty()) { 43 if (!isScriptControllerTerminating()) 44 CRASH(); 45 {{return_default}}; 46 } 47 {% endif %} 48 {% for argument in method.arguments %} 49 v8::Handle<v8::Value> {{argument.handle}} = {{argument.cpp_value_to_v8_value}}; 50 if ({{argument.handle}}.IsEmpty()) { 51 if (!isScriptControllerTerminating()) 52 CRASH(); 53 {{return_default}}; 54 } 55 {% endfor %} 56 {% if method.arguments %} 57 v8::Handle<v8::Value> argv[] = { {{method.arguments | join(', ', 'handle')}} }; 58 {% else %} 59 {# Empty array initializers are illegal, and don't compile in MSVC. #} 60 v8::Handle<v8::Value> *argv = 0; 61 {% endif %} 62 63 {% set this_handle_parameter = 'thisHandle, ' if method.call_with_this_handle else 'm_scriptState->context()->Global(), ' %} 64 {% if method.idl_type == 'boolean' %} 65 v8::TryCatch exceptionCatcher; 66 exceptionCatcher.SetVerbose(true); 67 ScriptController::callFunction(m_scriptState->executionContext(), m_callback.newLocal(m_scriptState->isolate()), {{this_handle_parameter}}{{method.arguments | length}}, argv, m_scriptState->isolate()); 68 return !exceptionCatcher.HasCaught(); 69 {% else %}{# void #} 70 ScriptController::callFunction(m_scriptState->executionContext(), m_callback.newLocal(m_scriptState->isolate()), {{this_handle_parameter}}{{method.arguments | length}}, argv, m_scriptState->isolate()); 71 {% endif %} 72 } 73 74 {% endfor %} 75 } // namespace blink 76 {% endfilter %} 77