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 11 matching lines...) Expand all Loading... |
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 */ | 27 */ |
28 | 28 |
29 #include "bindings/core/v8/V8DOMConfiguration.h" | 29 #include "bindings/core/v8/V8DOMConfiguration.h" |
30 | 30 |
31 #include "bindings/core/v8/V8ObjectConstructor.h" | 31 #include "bindings/core/v8/V8ObjectConstructor.h" |
| 32 #include "bindings/core/v8/V8PerContextData.h" |
32 #include "platform/TraceEvent.h" | 33 #include "platform/TraceEvent.h" |
33 | 34 |
34 namespace blink { | 35 namespace blink { |
35 | 36 |
36 namespace { | 37 namespace { |
37 | 38 |
38 void installAttributeInternal(v8::Isolate* isolate, v8::Local<v8::ObjectTemplate
> instanceTemplate, v8::Local<v8::ObjectTemplate> prototypeTemplate, const V8DOM
Configuration::AttributeConfiguration& attribute, const DOMWrapperWorld& world) | 39 void installAttributeInternal(v8::Isolate* isolate, v8::Local<v8::ObjectTemplate
> instanceTemplate, v8::Local<v8::ObjectTemplate> prototypeTemplate, const V8DOM
Configuration::AttributeConfiguration& attribute, const DOMWrapperWorld& world) |
39 { | 40 { |
40 if (attribute.exposeConfiguration == V8DOMConfiguration::OnlyExposedToPrivat
eScript | 41 if (attribute.exposeConfiguration == V8DOMConfiguration::OnlyExposedToPrivat
eScript |
41 && !world.isPrivateScriptIsolatedWorld()) | 42 && !world.isPrivateScriptIsolatedWorld()) |
(...skipping 19 matching lines...) Expand all Loading... |
61 NOTREACHED(); | 62 NOTREACHED(); |
62 } | 63 } |
63 | 64 |
64 void installAttributeInternal(v8::Isolate* isolate, v8::Local<v8::Object> instan
ce, v8::Local<v8::Object> prototype, const V8DOMConfiguration::AttributeConfigur
ation& attribute, const DOMWrapperWorld& world) | 65 void installAttributeInternal(v8::Isolate* isolate, v8::Local<v8::Object> instan
ce, v8::Local<v8::Object> prototype, const V8DOMConfiguration::AttributeConfigur
ation& attribute, const DOMWrapperWorld& world) |
65 { | 66 { |
66 if (attribute.exposeConfiguration == V8DOMConfiguration::OnlyExposedToPrivat
eScript | 67 if (attribute.exposeConfiguration == V8DOMConfiguration::OnlyExposedToPrivat
eScript |
67 && !world.isPrivateScriptIsolatedWorld()) | 68 && !world.isPrivateScriptIsolatedWorld()) |
68 return; | 69 return; |
69 | 70 |
70 v8::Local<v8::Name> name = v8AtomicString(isolate, attribute.name); | 71 v8::Local<v8::Name> name = v8AtomicString(isolate, attribute.name); |
71 v8::Local<v8::Value> data = v8::External::New(isolate, const_cast<WrapperTyp
eInfo*>(attribute.data)); | 72 |
| 73 // This method is only being used for installing interfaces which are |
| 74 // enabled through origin trials. Assert here that it is being called with |
| 75 // an attribute configuration for a constructor. |
| 76 // TODO(iclelland): Relax this constraint and allow arbitrary data-type |
| 77 // properties to be added here. |
| 78 DCHECK_EQ(&v8ConstructorAttributeGetter, attribute.getter); |
| 79 |
| 80 V8PerContextData* perContextData = V8PerContextData::from(isolate->GetCurren
tContext()); |
| 81 v8::Local<v8::Function> data = perContextData->constructorForType(attribute.
data); |
72 | 82 |
73 DCHECK(attribute.propertyLocationConfiguration); | 83 DCHECK(attribute.propertyLocationConfiguration); |
74 if (attribute.propertyLocationConfiguration & V8DOMConfiguration::OnInstance
) | 84 if (attribute.propertyLocationConfiguration & V8DOMConfiguration::OnInstance
) |
75 v8CallOrCrash(instance->DefineOwnProperty(isolate->GetCurrentContext(),
name, data, static_cast<v8::PropertyAttribute>(attribute.attribute))); | 85 v8CallOrCrash(instance->DefineOwnProperty(isolate->GetCurrentContext(),
name, data, static_cast<v8::PropertyAttribute>(attribute.attribute))); |
76 if (attribute.propertyLocationConfiguration & V8DOMConfiguration::OnPrototyp
e) | 86 if (attribute.propertyLocationConfiguration & V8DOMConfiguration::OnPrototyp
e) |
77 v8CallOrCrash(prototype->DefineOwnProperty(isolate->GetCurrentContext(),
name, data, static_cast<v8::PropertyAttribute>(attribute.attribute))); | 87 v8CallOrCrash(prototype->DefineOwnProperty(isolate->GetCurrentContext(),
name, data, static_cast<v8::PropertyAttribute>(attribute.attribute))); |
78 if (attribute.propertyLocationConfiguration & V8DOMConfiguration::OnInterfac
e) | 88 if (attribute.propertyLocationConfiguration & V8DOMConfiguration::OnInterfac
e) |
79 NOTREACHED(); | 89 NOTREACHED(); |
80 } | 90 } |
81 | 91 |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 data->setInterfaceTemplate(world, wrapperTypeInfo, result); | 363 data->setInterfaceTemplate(world, wrapperTypeInfo, result); |
354 return result; | 364 return result; |
355 } | 365 } |
356 | 366 |
357 void V8DOMConfiguration::setClassString(v8::Isolate* isolate, v8::Local<v8::Obje
ctTemplate> objectTemplate, const char* classString) | 367 void V8DOMConfiguration::setClassString(v8::Isolate* isolate, v8::Local<v8::Obje
ctTemplate> objectTemplate, const char* classString) |
358 { | 368 { |
359 objectTemplate->Set(v8::Symbol::GetToStringTag(isolate), v8AtomicString(isol
ate, classString), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnu
m)); | 369 objectTemplate->Set(v8::Symbol::GetToStringTag(isolate), v8AtomicString(isol
ate, classString), static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnu
m)); |
360 } | 370 } |
361 | 371 |
362 } // namespace blink | 372 } // namespace blink |
OLD | NEW |