OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 } | 63 } |
64 v8::Local<v8::FunctionTemplate> setter; | 64 v8::Local<v8::FunctionTemplate> setter; |
65 if (setterCallback) { | 65 if (setterCallback) { |
66 setter = v8::FunctionTemplate::New(isolate, setterCallback, v8::Exte
rnal::New(isolate, const_cast<WrapperTypeInfo*>(accessors[i].data)), signature,
1); | 66 setter = v8::FunctionTemplate::New(isolate, setterCallback, v8::Exte
rnal::New(isolate, const_cast<WrapperTypeInfo*>(accessors[i].data)), signature,
1); |
67 setter->RemovePrototype(); | 67 setter->RemovePrototype(); |
68 } | 68 } |
69 prototype->SetAccessorProperty(v8AtomicString(isolate, accessors[i].name
), getter, setter, accessors[i].attribute, accessors[i].settings); | 69 prototype->SetAccessorProperty(v8AtomicString(isolate, accessors[i].name
), getter, setter, accessors[i].attribute, accessors[i].settings); |
70 } | 70 } |
71 } | 71 } |
72 | 72 |
| 73 // Constant installation |
| 74 // |
| 75 // installConstants() is be used for simple constants. It installs constants |
| 76 // using v8::Template::Set(), which results in a property that is much faster to |
| 77 // access from scripts. |
| 78 // installConstant() is used when some C++ code needs to be executed when the |
| 79 // constant is accessed, e.g. to handle deprecation or measuring usage. The |
| 80 // property appears the same to scripts, but is slower to access. |
| 81 |
73 void V8DOMConfiguration::installConstants(v8::Handle<v8::FunctionTemplate> funct
ionDescriptor, v8::Handle<v8::ObjectTemplate> prototype, const ConstantConfigura
tion* constants, size_t constantCount, v8::Isolate* isolate) | 82 void V8DOMConfiguration::installConstants(v8::Handle<v8::FunctionTemplate> funct
ionDescriptor, v8::Handle<v8::ObjectTemplate> prototype, const ConstantConfigura
tion* constants, size_t constantCount, v8::Isolate* isolate) |
74 { | 83 { |
75 for (size_t i = 0; i < constantCount; ++i) { | 84 for (size_t i = 0; i < constantCount; ++i) { |
76 const ConstantConfiguration* constant = &constants[i]; | 85 const ConstantConfiguration* constant = &constants[i]; |
77 v8::Handle<v8::String> constantName = v8AtomicString(isolate, constant->
name); | 86 v8::Handle<v8::String> constantName = v8AtomicString(isolate, constant->
name); |
78 switch (constant->type) { | 87 switch (constant->type) { |
79 case ConstantTypeShort: | 88 case ConstantTypeShort: |
80 case ConstantTypeLong: | 89 case ConstantTypeLong: |
81 case ConstantTypeUnsignedShort: | 90 case ConstantTypeUnsignedShort: |
82 functionDescriptor->Set(constantName, v8::Integer::New(isolate, cons
tant->ivalue), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete)
); | 91 functionDescriptor->Set(constantName, v8::Integer::New(isolate, cons
tant->ivalue), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete)
); |
(...skipping 11 matching lines...) Expand all Loading... |
94 case ConstantTypeString: | 103 case ConstantTypeString: |
95 functionDescriptor->Set(constantName, v8::String::NewFromUtf8(isolat
e, constant->svalue), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::Dont
Delete)); | 104 functionDescriptor->Set(constantName, v8::String::NewFromUtf8(isolat
e, constant->svalue), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::Dont
Delete)); |
96 prototype->Set(constantName, v8::String::NewFromUtf8(isolate, consta
nt->svalue), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete)); | 105 prototype->Set(constantName, v8::String::NewFromUtf8(isolate, consta
nt->svalue), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete)); |
97 break; | 106 break; |
98 default: | 107 default: |
99 ASSERT_NOT_REACHED(); | 108 ASSERT_NOT_REACHED(); |
100 } | 109 } |
101 } | 110 } |
102 } | 111 } |
103 | 112 |
| 113 void V8DOMConfiguration::installConstant(v8::Handle<v8::FunctionTemplate> functi
onDescriptor, v8::Handle<v8::ObjectTemplate> prototype, const char* name, v8::Ac
cessorGetterCallback getter, v8::Isolate* isolate) |
| 114 { |
| 115 v8::Handle<v8::String> constantName = v8AtomicString(isolate, name); |
| 116 functionDescriptor->SetNativeDataProperty(constantName, getter, 0, v8::Handl
e<v8::Value>(), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete
)); |
| 117 prototype->SetNativeDataProperty(constantName, getter, 0, v8::Handle<v8::Val
ue>(), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete)); |
| 118 } |
| 119 |
104 void V8DOMConfiguration::installMethods(v8::Handle<v8::ObjectTemplate> prototype
, v8::Handle<v8::Signature> signature, v8::PropertyAttribute attributes, const M
ethodConfiguration* callbacks, size_t callbackCount, v8::Isolate* isolate) | 120 void V8DOMConfiguration::installMethods(v8::Handle<v8::ObjectTemplate> prototype
, v8::Handle<v8::Signature> signature, v8::PropertyAttribute attributes, const M
ethodConfiguration* callbacks, size_t callbackCount, v8::Isolate* isolate) |
105 { | 121 { |
106 for (size_t i = 0; i < callbackCount; ++i) | 122 for (size_t i = 0; i < callbackCount; ++i) |
107 installMethod(prototype, signature, attributes, callbacks[i], isolate); | 123 installMethod(prototype, signature, attributes, callbacks[i], isolate); |
108 } | 124 } |
109 | 125 |
110 v8::Handle<v8::FunctionTemplate> V8DOMConfiguration::functionTemplateForCallback
(v8::Handle<v8::Signature> signature, v8::FunctionCallback callback, int length,
v8::Isolate* isolate) | 126 v8::Handle<v8::FunctionTemplate> V8DOMConfiguration::functionTemplateForCallback
(v8::Handle<v8::Signature> signature, v8::FunctionCallback callback, int length,
v8::Isolate* isolate) |
111 { | 127 { |
112 v8::Local<v8::FunctionTemplate> functionTemplate = v8::FunctionTemplate::New
(isolate, callback, v8Undefined(), signature, length); | 128 v8::Local<v8::FunctionTemplate> functionTemplate = v8::FunctionTemplate::New
(isolate, callback, v8Undefined(), signature, length); |
113 functionTemplate->RemovePrototype(); | 129 functionTemplate->RemovePrototype(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 return result; | 166 return result; |
151 | 167 |
152 TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "BuildDOMTemplate"); | 168 TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "BuildDOMTemplate"); |
153 result = v8::FunctionTemplate::New(isolate, V8ObjectConstructor::isValidCons
tructorMode); | 169 result = v8::FunctionTemplate::New(isolate, V8ObjectConstructor::isValidCons
tructorMode); |
154 configureDOMClassTemplate(result, isolate); | 170 configureDOMClassTemplate(result, isolate); |
155 data->setDOMTemplate(wrapperTypeInfo, result); | 171 data->setDOMTemplate(wrapperTypeInfo, result); |
156 return result; | 172 return result; |
157 } | 173 } |
158 | 174 |
159 } // namespace blink | 175 } // namespace blink |
OLD | NEW |