OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
94 v8::Handle<v8::Object> result = ScriptWrappable::getUnsafeWrappe rFromObject(object).newLocal(isolate); | 94 v8::Handle<v8::Object> result = ScriptWrappable::getUnsafeWrappe rFromObject(object).newLocal(isolate); |
95 // Security: always guard against malicious tampering. | 95 // Security: always guard against malicious tampering. |
96 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(result.IsEmpty() || res ult->GetAlignedPointerFromInternalField(v8DOMWrapperObjectIndex) == V8T::toInter nalPointer(object)); | 96 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(result.IsEmpty() || res ult->GetAlignedPointerFromInternalField(v8DOMWrapperObjectIndex) == V8T::toInter nalPointer(object)); |
97 return result; | 97 return result; |
98 } | 98 } |
99 } | 99 } |
100 return current(isolate)->template get<V8T>(object, isolate); | 100 return current(isolate)->template get<V8T>(object, isolate); |
101 } | 101 } |
102 | 102 |
103 template<typename V8T, typename T> | 103 template<typename V8T, typename T> |
104 static void setWrapperReference(const v8::Persistent<v8::Object>& parent, T* child, v8::Isolate* isolate) | |
haraken
2013/10/29 01:14:53
Since you're using "setWrapperReference" here...
| |
105 { | |
106 if (ScriptWrappable::wrapperCanBeStoredInObject(child) && !canExistInWor ker(child)) { | |
107 if (LIKELY(!DOMWrapperWorld::isolatedWorldsExist())) { | |
108 UnsafePersistent<v8::Object> unsafePersistent = ScriptWrappable: :getUnsafeWrapperFromObject(child); | |
109 // Security: always guard against malicious tampering. | |
110 RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(unsafePersistent.isEmpt y() || unsafePersistent.value()->GetAlignedPointerFromInternalField(v8DOMWrapper ObjectIndex) == V8T::toInternalPointer(child)); | |
111 unsafePersistent.setReferenceFrom(parent, isolate); | |
112 } | |
113 } | |
114 current(isolate)->template setReference<V8T>(parent, child, isolate); | |
haraken
2013/10/29 01:14:53
...shall we rename:
setReference => setWrapperRef
kouhei (in TOK)
2013/10/29 04:19:58
I guess this issue is resolved from offline discus
| |
115 } | |
116 | |
117 template<typename V8T, typename T> | |
104 static void setWrapper(T* object, v8::Handle<v8::Object> wrapper, v8::Isolat e* isolate, const WrapperConfiguration& configuration) | 118 static void setWrapper(T* object, v8::Handle<v8::Object> wrapper, v8::Isolat e* isolate, const WrapperConfiguration& configuration) |
105 { | 119 { |
106 if (ScriptWrappable::wrapperCanBeStoredInObject(object) && !canExistInWo rker(object)) { | 120 if (ScriptWrappable::wrapperCanBeStoredInObject(object) && !canExistInWo rker(object)) { |
107 if (LIKELY(!DOMWrapperWorld::isolatedWorldsExist())) { | 121 if (LIKELY(!DOMWrapperWorld::isolatedWorldsExist())) { |
108 ScriptWrappable::setWrapperInObject(object, wrapper, isolate, co nfiguration); | 122 ScriptWrappable::setWrapperInObject(object, wrapper, isolate, co nfiguration); |
109 return; | 123 return; |
110 } | 124 } |
111 } | 125 } |
112 return current(isolate)->template set<V8T>(object, wrapper, isolate, con figuration); | 126 return current(isolate)->template set<V8T>(object, wrapper, isolate, con figuration); |
113 } | 127 } |
114 | 128 |
115 template<typename V8T, typename T> | 129 template<typename V8T, typename T> |
116 static bool containsWrapper(T* object, v8::Isolate* isolate) | 130 static bool containsWrapper(T* object, v8::Isolate* isolate) |
117 { | 131 { |
118 return current(isolate)->template containsWrapper<V8T>(object); | 132 return current(isolate)->template containsWrapper<V8T>(object); |
119 } | 133 } |
120 | 134 |
121 template<typename V8T, typename T> | 135 template<typename V8T, typename T> |
122 inline v8::Handle<v8::Object> get(T* object, v8::Isolate* isolate) | 136 inline v8::Handle<v8::Object> get(T* object, v8::Isolate* isolate) |
123 { | 137 { |
124 if (ScriptWrappable::wrapperCanBeStoredInObject(object) && m_type == Mai nWorld) | 138 if (ScriptWrappable::wrapperCanBeStoredInObject(object) && m_type == Mai nWorld) |
125 return ScriptWrappable::getUnsafeWrapperFromObject(object).newLocal( isolate); | 139 return ScriptWrappable::getUnsafeWrapperFromObject(object).newLocal( isolate); |
126 return m_wrapperMap.newLocal(V8T::toInternalPointer(object), isolate); | 140 return m_wrapperMap.newLocal(V8T::toInternalPointer(object), isolate); |
127 } | 141 } |
128 | 142 |
129 template<typename V8T, typename T> | 143 template<typename V8T, typename T> |
144 inline void setReference(const v8::Persistent<v8::Object>& parent, T* child, v8::Isolate* isolate) | |
145 { | |
146 if (ScriptWrappable::wrapperCanBeStoredInObject(child) && m_type == Main World) { | |
147 ScriptWrappable::getUnsafeWrapperFromObject(child).setReferenceFrom( parent, isolate); | |
148 return; | |
149 } | |
150 m_wrapperMap.setReference(parent, V8T::toInternalPointer(child), isolate ); | |
151 } | |
152 | |
153 template<typename V8T, typename T> | |
130 inline bool setReturnValueFrom(v8::ReturnValue<v8::Value> returnValue, T* ob ject) | 154 inline bool setReturnValueFrom(v8::ReturnValue<v8::Value> returnValue, T* ob ject) |
131 { | 155 { |
132 if (ScriptWrappable::wrapperCanBeStoredInObject(object) && m_type == Mai nWorld) | 156 if (ScriptWrappable::wrapperCanBeStoredInObject(object) && m_type == Mai nWorld) |
133 return ScriptWrappable::setReturnValue(returnValue, object); | 157 return ScriptWrappable::setReturnValue(returnValue, object); |
134 return m_wrapperMap.setReturnValueFrom(returnValue, V8T::toInternalPoint er(object)); | 158 return m_wrapperMap.setReturnValueFrom(returnValue, V8T::toInternalPoint er(object)); |
135 } | 159 } |
136 | 160 |
137 template<typename V8T, typename T> | 161 template<typename V8T, typename T> |
138 inline bool containsWrapper(T* object) | 162 inline bool containsWrapper(T* object) |
139 { | 163 { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
173 return holder == *unsafePersistent.persistent(); | 197 return holder == *unsafePersistent.persistent(); |
174 } | 198 } |
175 | 199 |
176 WrapperWorldType m_type; | 200 WrapperWorldType m_type; |
177 DOMWrapperMap<void> m_wrapperMap; | 201 DOMWrapperMap<void> m_wrapperMap; |
178 }; | 202 }; |
179 | 203 |
180 } // namespace WebCore | 204 } // namespace WebCore |
181 | 205 |
182 #endif // DOMDataStore_h | 206 #endif // DOMDataStore_h |
OLD | NEW |