Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: Source/bindings/core/v8/V8DOMConfiguration.h

Issue 922233002: bindings: Makes runtime-enabled attributes on prototype chains compilable. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/bindings/templates/interface_base.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 DOMWrapperWorld& world = DOMWrapperWorld::current(isolate); 170 DOMWrapperWorld& world = DOMWrapperWorld::current(isolate);
171 if (callback.exposeConfiguration == OnlyExposedToPrivateScript && !world .isPrivateScriptIsolatedWorld()) 171 if (callback.exposeConfiguration == OnlyExposedToPrivateScript && !world .isPrivateScriptIsolatedWorld())
172 return; 172 return;
173 173
174 v8::Local<v8::FunctionTemplate> functionTemplate = functionTemplateForCa llback(isolate, signature, callback.callbackForWorld(world), callback.length); 174 v8::Local<v8::FunctionTemplate> functionTemplate = functionTemplateForCa llback(isolate, signature, callback.callbackForWorld(world), callback.length);
175 setMethod(objectOrTemplate, callback.methodName(isolate), functionTempla te, attribute); 175 setMethod(objectOrTemplate, callback.methodName(isolate), functionTempla te, attribute);
176 } 176 }
177 177
178 static void installAccessors(v8::Isolate*, v8::Handle<v8::ObjectTemplate>, v 8::Handle<v8::Signature>, const AccessorConfiguration*, size_t accessorCount); 178 static void installAccessors(v8::Isolate*, v8::Handle<v8::ObjectTemplate>, v 8::Handle<v8::Signature>, const AccessorConfiguration*, size_t accessorCount);
179 179
180 template<class ObjectOrTemplate>
181 static inline void installAccessor(v8::Handle<ObjectOrTemplate> instanceTemp late, v8::Handle<ObjectOrTemplate> prototype, v8::Handle<v8::Signature> signatur e, const AccessorConfiguration& accessor, v8::Isolate* isolate)
haraken 2015/02/13 15:08:24 We might not want to duplicate the code between in
Yuki 2015/02/16 10:51:51 Refactored the code a bit. Since it seemed that ge
182 {
183 DOMWrapperWorld& world = DOMWrapperWorld::current(isolate);
184 if (accessor.exposeConfiguration == OnlyExposedToPrivateScript && !world .isPrivateScriptIsolatedWorld())
185 return;
186
187 v8::FunctionCallback getterCallback = accessor.getter;
188 v8::FunctionCallback setterCallback = accessor.setter;
189 if (world.isMainWorld()) {
190 if (accessor.getterForMainWorld)
191 getterCallback = accessor.getterForMainWorld;
192 if (accessor.setterForMainWorld)
193 setterCallback = accessor.setterForMainWorld;
194 }
195 v8::Local<v8::FunctionTemplate> getter;
196 if (getterCallback) {
197 getter = v8::FunctionTemplate::New(isolate, getterCallback, v8::Exte rnal::New(isolate, const_cast<WrapperTypeInfo*>(accessor.data)), signature, 0);
198 getter->RemovePrototype();
199 }
200 v8::Local<v8::FunctionTemplate> setter;
201 if (setterCallback) {
202 setter = v8::FunctionTemplate::New(isolate, setterCallback, v8::Exte rnal::New(isolate, const_cast<WrapperTypeInfo*>(accessor.data)), signature, 1);
203 setter->RemovePrototype();
204 }
205 prototype->SetAccessorProperty(v8AtomicString(isolate, accessor.name), g etter, setter, accessor.attribute, accessor.settings);
206 }
207
180 static v8::Local<v8::Signature> installDOMClassTemplate(v8::Isolate*, v8::Lo cal<v8::FunctionTemplate>, const char* interfaceName, v8::Handle<v8::FunctionTem plate> parentClass, size_t fieldCount, 208 static v8::Local<v8::Signature> installDOMClassTemplate(v8::Isolate*, v8::Lo cal<v8::FunctionTemplate>, const char* interfaceName, v8::Handle<v8::FunctionTem plate> parentClass, size_t fieldCount,
181 const AttributeConfiguration*, size_t attributeCount, 209 const AttributeConfiguration*, size_t attributeCount,
182 const AccessorConfiguration*, size_t accessorCount, 210 const AccessorConfiguration*, size_t accessorCount,
183 const MethodConfiguration*, size_t callbackCount); 211 const MethodConfiguration*, size_t callbackCount);
184 212
185 static v8::Handle<v8::FunctionTemplate> domClassTemplate(v8::Isolate*, Wrapp erTypeInfo*, void (*)(v8::Local<v8::FunctionTemplate>, v8::Isolate*)); 213 static v8::Handle<v8::FunctionTemplate> domClassTemplate(v8::Isolate*, Wrapp erTypeInfo*, void (*)(v8::Local<v8::FunctionTemplate>, v8::Isolate*));
186 214
187 private: 215 private:
188 static void setMethod(v8::Handle<v8::Object> target, v8::Handle<v8::Name> na me, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAttribute att ribute) 216 static void setMethod(v8::Handle<v8::Object> target, v8::Handle<v8::Name> na me, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAttribute att ribute)
189 { 217 {
190 target->Set(name, functionTemplate->GetFunction()); 218 target->Set(name, functionTemplate->GetFunction());
191 } 219 }
192 static void setMethod(v8::Handle<v8::FunctionTemplate> target, v8::Handle<v8 ::Name> name, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAtt ribute attribute) 220 static void setMethod(v8::Handle<v8::FunctionTemplate> target, v8::Handle<v8 ::Name> name, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAtt ribute attribute)
193 { 221 {
194 target->Set(name, functionTemplate, attribute); 222 target->Set(name, functionTemplate, attribute);
195 } 223 }
196 static void setMethod(v8::Handle<v8::ObjectTemplate> target, v8::Handle<v8:: Name> name, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAttri bute attribute) 224 static void setMethod(v8::Handle<v8::ObjectTemplate> target, v8::Handle<v8:: Name> name, v8::Handle<v8::FunctionTemplate> functionTemplate, v8::PropertyAttri bute attribute)
197 { 225 {
198 target->Set(name, functionTemplate, attribute); 226 target->Set(name, functionTemplate, attribute);
199 } 227 }
200 228
201 static v8::Handle<v8::FunctionTemplate> functionTemplateForCallback(v8::Isol ate*, v8::Handle<v8::Signature>, v8::FunctionCallback, int length); 229 static v8::Handle<v8::FunctionTemplate> functionTemplateForCallback(v8::Isol ate*, v8::Handle<v8::Signature>, v8::FunctionCallback, int length);
202 }; 230 };
203 231
204 } // namespace blink 232 } // namespace blink
205 233
206 #endif // V8DOMConfiguration_h 234 #endif // V8DOMConfiguration_h
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/templates/interface_base.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698