Home | History | Annotate | Download | only in templates
      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 #include "{{v8_class}}.h"
      9 
     10 {% for filename in cpp_includes if filename != '%s.h' % v8_class %}
     11 #include "{{filename}}"
     12 {% endfor %}
     13 
     14 namespace blink {
     15 
     16 {{cpp_class}}* {{v8_class}}::toImpl(v8::Isolate* isolate, v8::Handle<v8::Value> v8Value, ExceptionState& exceptionState)
     17 {
     18     ASSERT(isUndefinedOrNull(v8Value) || v8Value->IsObject());
     19 
     20     {{cpp_class}}* impl = {{cpp_class}}::create();
     21     // FIXME: Do not use Dictionary and DictionaryHelper
     22     // https://crbug.com/321462
     23     Dictionary dictionary(v8Value, isolate);
     24     // FIXME: Remove this v8::TryCatch once the code is switched from
     25     // Dictionary/DictionaryHelper to something that uses ExceptionState.
     26     v8::TryCatch block;
     27     {% for member in members %}
     28     {{member.cpp_type}} {{member.name}};
     29     if (DictionaryHelper::getWithUndefinedOrNullCheck(dictionary, "{{member.name}}", {{member.name}})) {
     30     {% if member.enum_validation_expression %}
     31         String string = {{member.name}};
     32         if (!({{member.enum_validation_expression}})) {
     33             exceptionState.throwTypeError("member {{member.name}} ('" + string + "') is not a valid enum value.");
     34             return 0;
     35         }
     36     {% elif member.is_object %}
     37         if (!{{member.name}}.isObject()) {
     38             exceptionState.throwTypeError("member {{member.name}} is not an object.");
     39             return 0;
     40         }
     41     {% endif %}
     42         impl->{{member.setter_name}}({{member.name}});
     43     } else if (block.HasCaught()) {
     44         exceptionState.rethrowV8Exception(block.Exception());
     45         return 0;
     46     }
     47     {% endfor %}
     48     return impl;
     49 }
     50 
     51 v8::Handle<v8::Value> toV8({{cpp_class}}* impl, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
     52 {
     53     v8::Handle<v8::Object> v8Object = v8::Object::New(isolate);
     54     {% for member in members %}
     55     if (impl->{{member.has_method_name}}()) {
     56         {% if member.is_object %}
     57         ASSERT(impl->{{member.name}}().isObject());
     58         {% endif %}
     59         v8Object->Set(v8String(isolate, "{{member.name}}"), {{member.cpp_value_to_v8_value}});
     60     {% if member.v8_default_value %}
     61     } else {
     62         v8Object->Set(v8String(isolate, "{{member.name}}"), {{member.v8_default_value}});
     63     {% endif %}
     64     }
     65     {% endfor %}
     66     return v8Object;
     67 }
     68 
     69 } // namespace blink
     70