| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 | 110 |
| 111 static void readonlyValueAttributeGetterCallback(v8::Local<v8::String>, const v8
::PropertyCallbackInfo<v8::Value>& info) | 111 static void readonlyValueAttributeGetterCallback(v8::Local<v8::String>, const v8
::PropertyCallbackInfo<v8::Value>& info) |
| 112 { | 112 { |
| 113 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter"); | 113 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter"); |
| 114 TestSerializedScriptValueInterfaceV8Internal::readonlyValueAttributeGetter(i
nfo); | 114 TestSerializedScriptValueInterfaceV8Internal::readonlyValueAttributeGetter(i
nfo); |
| 115 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 115 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |
| 116 } | 116 } |
| 117 | 117 |
| 118 static void dirtySerializedValueAttributeGetter(const v8::PropertyCallbackInfo<v
8::Value>& info) | 118 static void dirtySerializedValueAttributeGetter(const v8::PropertyCallbackInfo<v
8::Value>& info) |
| 119 { | 119 { |
| 120 v8::Handle<v8::String> propertyName = v8::String::NewSymbol("dirtySerialized
Value"); | 120 v8::Handle<v8::String> propertyName = v8::String::NewFromUtf8(info.GetIsolat
e(), "dirtySerializedValue", v8::String::kInternalizedString); |
| 121 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); | 121 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); |
| 122 if (!imp->isValueDirty()) { | 122 if (!imp->isValueDirty()) { |
| 123 v8::Handle<v8::Value> jsValue = info.Holder()->GetHiddenValue(propertyNa
me); | 123 v8::Handle<v8::Value> jsValue = info.Holder()->GetHiddenValue(propertyNa
me); |
| 124 if (!jsValue.IsEmpty()) { | 124 if (!jsValue.IsEmpty()) { |
| 125 v8SetReturnValue(info, jsValue); | 125 v8SetReturnValue(info, jsValue); |
| 126 return; | 126 return; |
| 127 } | 127 } |
| 128 } | 128 } |
| 129 RefPtr<SerializedScriptValue> serialized = imp->dirtySerializedValue(); | 129 RefPtr<SerializedScriptValue> serialized = imp->dirtySerializedValue(); |
| 130 ScriptValue jsValue = serialized ? serialized->deserialize() : v8::Handle<v8
::Value>(v8::Null(info.GetIsolate())); | 130 ScriptValue jsValue = serialized ? serialized->deserialize() : v8::Handle<v8
::Value>(v8::Null(info.GetIsolate())); |
| 131 info.Holder()->SetHiddenValue(propertyName, jsValue); | 131 info.Holder()->SetHiddenValue(propertyName, jsValue); |
| 132 v8SetReturnValue(info, jsValue); | 132 v8SetReturnValue(info, jsValue); |
| 133 } | 133 } |
| 134 | 134 |
| 135 static void dirtySerializedValueAttributeGetterCallback(v8::Local<v8::String>, c
onst v8::PropertyCallbackInfo<v8::Value>& info) | 135 static void dirtySerializedValueAttributeGetterCallback(v8::Local<v8::String>, c
onst v8::PropertyCallbackInfo<v8::Value>& info) |
| 136 { | 136 { |
| 137 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter"); | 137 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter"); |
| 138 TestSerializedScriptValueInterfaceV8Internal::dirtySerializedValueAttributeG
etter(info); | 138 TestSerializedScriptValueInterfaceV8Internal::dirtySerializedValueAttributeG
etter(info); |
| 139 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 139 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |
| 140 } | 140 } |
| 141 | 141 |
| 142 static void dirtySerializedValueAttributeSetter(v8::Local<v8::Value> jsValue, co
nst v8::PropertyCallbackInfo<void>& info) | 142 static void dirtySerializedValueAttributeSetter(v8::Local<v8::Value> jsValue, co
nst v8::PropertyCallbackInfo<void>& info) |
| 143 { | 143 { |
| 144 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); | 144 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); |
| 145 V8TRYCATCH_VOID(RefPtr<SerializedScriptValue>, cppValue, SerializedScriptVal
ue::create(jsValue, info.GetIsolate())); | 145 V8TRYCATCH_VOID(RefPtr<SerializedScriptValue>, cppValue, SerializedScriptVal
ue::create(jsValue, info.GetIsolate())); |
| 146 imp->setDirtySerializedValue(WTF::getPtr(cppValue)); | 146 imp->setDirtySerializedValue(WTF::getPtr(cppValue)); |
| 147 info.Holder()->DeleteHiddenValue(v8::String::NewSymbol("dirtySerializedValue
")); // Invalidate the cached value. | 147 info.Holder()->DeleteHiddenValue(v8::String::NewFromUtf8(info.GetIsolate(),
"dirtySerializedValue", v8::String::kInternalizedString)); // Invalidate the cac
hed value. |
| 148 } | 148 } |
| 149 | 149 |
| 150 static void dirtySerializedValueAttributeSetterCallback(v8::Local<v8::String>, v
8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) | 150 static void dirtySerializedValueAttributeSetterCallback(v8::Local<v8::String>, v
8::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) |
| 151 { | 151 { |
| 152 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); | 152 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); |
| 153 TestSerializedScriptValueInterfaceV8Internal::dirtySerializedValueAttributeS
etter(jsValue, info); | 153 TestSerializedScriptValueInterfaceV8Internal::dirtySerializedValueAttributeS
etter(jsValue, info); |
| 154 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 154 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |
| 155 } | 155 } |
| 156 | 156 |
| 157 static void dirtyScriptValueAttributeGetter(const v8::PropertyCallbackInfo<v8::V
alue>& info) | 157 static void dirtyScriptValueAttributeGetter(const v8::PropertyCallbackInfo<v8::V
alue>& info) |
| 158 { | 158 { |
| 159 v8::Handle<v8::String> propertyName = v8::String::NewSymbol("dirtyScriptValu
e"); | 159 v8::Handle<v8::String> propertyName = v8::String::NewFromUtf8(info.GetIsolat
e(), "dirtyScriptValue", v8::String::kInternalizedString); |
| 160 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); | 160 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); |
| 161 if (!imp->isValueDirty()) { | 161 if (!imp->isValueDirty()) { |
| 162 v8::Handle<v8::Value> jsValue = info.Holder()->GetHiddenValue(propertyNa
me); | 162 v8::Handle<v8::Value> jsValue = info.Holder()->GetHiddenValue(propertyNa
me); |
| 163 if (!jsValue.IsEmpty()) { | 163 if (!jsValue.IsEmpty()) { |
| 164 v8SetReturnValue(info, jsValue); | 164 v8SetReturnValue(info, jsValue); |
| 165 return; | 165 return; |
| 166 } | 166 } |
| 167 } | 167 } |
| 168 ScriptValue jsValue = imp->dirtyScriptValue(); | 168 ScriptValue jsValue = imp->dirtyScriptValue(); |
| 169 info.Holder()->SetHiddenValue(propertyName, jsValue.v8Value()); | 169 info.Holder()->SetHiddenValue(propertyName, jsValue.v8Value()); |
| 170 v8SetReturnValue(info, jsValue.v8Value()); | 170 v8SetReturnValue(info, jsValue.v8Value()); |
| 171 } | 171 } |
| 172 | 172 |
| 173 static void dirtyScriptValueAttributeGetterCallback(v8::Local<v8::String>, const
v8::PropertyCallbackInfo<v8::Value>& info) | 173 static void dirtyScriptValueAttributeGetterCallback(v8::Local<v8::String>, const
v8::PropertyCallbackInfo<v8::Value>& info) |
| 174 { | 174 { |
| 175 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter"); | 175 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter"); |
| 176 TestSerializedScriptValueInterfaceV8Internal::dirtyScriptValueAttributeGette
r(info); | 176 TestSerializedScriptValueInterfaceV8Internal::dirtyScriptValueAttributeGette
r(info); |
| 177 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 177 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |
| 178 } | 178 } |
| 179 | 179 |
| 180 static void dirtyScriptValueAttributeSetter(v8::Local<v8::Value> jsValue, const
v8::PropertyCallbackInfo<void>& info) | 180 static void dirtyScriptValueAttributeSetter(v8::Local<v8::Value> jsValue, const
v8::PropertyCallbackInfo<void>& info) |
| 181 { | 181 { |
| 182 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); | 182 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); |
| 183 V8TRYCATCH_VOID(ScriptValue, cppValue, ScriptValue(jsValue, info.GetIsolate(
))); | 183 V8TRYCATCH_VOID(ScriptValue, cppValue, ScriptValue(jsValue, info.GetIsolate(
))); |
| 184 imp->setDirtyScriptValue(cppValue); | 184 imp->setDirtyScriptValue(cppValue); |
| 185 info.Holder()->DeleteHiddenValue(v8::String::NewSymbol("dirtyScriptValue"));
// Invalidate the cached value. | 185 info.Holder()->DeleteHiddenValue(v8::String::NewFromUtf8(info.GetIsolate(),
"dirtyScriptValue", v8::String::kInternalizedString)); // Invalidate the cached
value. |
| 186 } | 186 } |
| 187 | 187 |
| 188 static void dirtyScriptValueAttributeSetterCallback(v8::Local<v8::String>, v8::L
ocal<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) | 188 static void dirtyScriptValueAttributeSetterCallback(v8::Local<v8::String>, v8::L
ocal<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) |
| 189 { | 189 { |
| 190 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); | 190 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); |
| 191 TestSerializedScriptValueInterfaceV8Internal::dirtyScriptValueAttributeSette
r(jsValue, info); | 191 TestSerializedScriptValueInterfaceV8Internal::dirtyScriptValueAttributeSette
r(jsValue, info); |
| 192 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 192 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |
| 193 } | 193 } |
| 194 | 194 |
| 195 static void cachedValueCallWithAttributeGetter(const v8::PropertyCallbackInfo<v8
::Value>& info) | 195 static void cachedValueCallWithAttributeGetter(const v8::PropertyCallbackInfo<v8
::Value>& info) |
| 196 { | 196 { |
| 197 v8::Handle<v8::String> propertyName = v8::String::NewSymbol("cachedValueCall
With"); | 197 v8::Handle<v8::String> propertyName = v8::String::NewFromUtf8(info.GetIsolat
e(), "cachedValueCallWith", v8::String::kInternalizedString); |
| 198 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); | 198 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); |
| 199 if (!imp->isValueDirty()) { | 199 if (!imp->isValueDirty()) { |
| 200 v8::Handle<v8::Value> jsValue = info.Holder()->GetHiddenValue(propertyNa
me); | 200 v8::Handle<v8::Value> jsValue = info.Holder()->GetHiddenValue(propertyNa
me); |
| 201 if (!jsValue.IsEmpty()) { | 201 if (!jsValue.IsEmpty()) { |
| 202 v8SetReturnValue(info, jsValue); | 202 v8SetReturnValue(info, jsValue); |
| 203 return; | 203 return; |
| 204 } | 204 } |
| 205 } | 205 } |
| 206 ScriptState* currentState = ScriptState::current(); | 206 ScriptState* currentState = ScriptState::current(); |
| 207 if (!currentState) | 207 if (!currentState) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 224 { | 224 { |
| 225 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); | 225 TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterfa
ce::toNative(info.Holder()); |
| 226 V8TRYCATCH_VOID(RefPtr<SerializedScriptValue>, cppValue, SerializedScriptVal
ue::create(jsValue, info.GetIsolate())); | 226 V8TRYCATCH_VOID(RefPtr<SerializedScriptValue>, cppValue, SerializedScriptVal
ue::create(jsValue, info.GetIsolate())); |
| 227 ScriptState* currentState = ScriptState::current(); | 227 ScriptState* currentState = ScriptState::current(); |
| 228 if (!currentState) | 228 if (!currentState) |
| 229 return; | 229 return; |
| 230 ScriptState& state = *currentState; | 230 ScriptState& state = *currentState; |
| 231 imp->setCachedValueCallWith(&state, WTF::getPtr(cppValue)); | 231 imp->setCachedValueCallWith(&state, WTF::getPtr(cppValue)); |
| 232 if (state.hadException()) | 232 if (state.hadException()) |
| 233 throwError(state.exception(), info.GetIsolate()); | 233 throwError(state.exception(), info.GetIsolate()); |
| 234 info.Holder()->DeleteHiddenValue(v8::String::NewSymbol("cachedValueCallWith"
)); // Invalidate the cached value. | 234 info.Holder()->DeleteHiddenValue(v8::String::NewFromUtf8(info.GetIsolate(),
"cachedValueCallWith", v8::String::kInternalizedString)); // Invalidate the cach
ed value. |
| 235 } | 235 } |
| 236 | 236 |
| 237 static void cachedValueCallWithAttributeSetterCallback(v8::Local<v8::String>, v8
::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) | 237 static void cachedValueCallWithAttributeSetterCallback(v8::Local<v8::String>, v8
::Local<v8::Value> jsValue, const v8::PropertyCallbackInfo<void>& info) |
| 238 { | 238 { |
| 239 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); | 239 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMSetter"); |
| 240 TestSerializedScriptValueInterfaceV8Internal::cachedValueCallWithAttributeSe
tter(jsValue, info); | 240 TestSerializedScriptValueInterfaceV8Internal::cachedValueCallWithAttributeSe
tter(jsValue, info); |
| 241 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); | 241 TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution"); |
| 242 } | 242 } |
| 243 | 243 |
| 244 } // namespace TestSerializedScriptValueInterfaceV8Internal | 244 } // namespace TestSerializedScriptValueInterfaceV8Internal |
| (...skipping 16 matching lines...) Expand all Loading... |
| 261 0, 0, | 261 0, 0, |
| 262 0, 0, | 262 0, 0, |
| 263 isolate, currentWorldType); | 263 isolate, currentWorldType); |
| 264 UNUSED_PARAM(defaultSignature); | 264 UNUSED_PARAM(defaultSignature); |
| 265 v8::Local<v8::ObjectTemplate> instanceTemplate = functionTemplate->InstanceT
emplate(); | 265 v8::Local<v8::ObjectTemplate> instanceTemplate = functionTemplate->InstanceT
emplate(); |
| 266 v8::Local<v8::ObjectTemplate> prototypeTemplate = functionTemplate->Prototyp
eTemplate(); | 266 v8::Local<v8::ObjectTemplate> prototypeTemplate = functionTemplate->Prototyp
eTemplate(); |
| 267 UNUSED_PARAM(instanceTemplate); | 267 UNUSED_PARAM(instanceTemplate); |
| 268 UNUSED_PARAM(prototypeTemplate); | 268 UNUSED_PARAM(prototypeTemplate); |
| 269 | 269 |
| 270 // Custom toString template | 270 // Custom toString template |
| 271 functionTemplate->Set(v8::String::NewSymbol("toString"), V8PerIsolateData::c
urrent()->toStringTemplate()); | 271 functionTemplate->Set(v8::String::NewFromUtf8(isolate, "toString", v8::Strin
g::kInternalizedString), V8PerIsolateData::current()->toStringTemplate()); |
| 272 return functionTemplate; | 272 return functionTemplate; |
| 273 } | 273 } |
| 274 | 274 |
| 275 v8::Handle<v8::FunctionTemplate> V8TestSerializedScriptValueInterface::GetTempla
te(v8::Isolate* isolate, WrapperWorldType currentWorldType) | 275 v8::Handle<v8::FunctionTemplate> V8TestSerializedScriptValueInterface::GetTempla
te(v8::Isolate* isolate, WrapperWorldType currentWorldType) |
| 276 { | 276 { |
| 277 V8PerIsolateData* data = V8PerIsolateData::from(isolate); | 277 V8PerIsolateData* data = V8PerIsolateData::from(isolate); |
| 278 V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWo
rldType).find(&wrapperTypeInfo); | 278 V8PerIsolateData::TemplateMap::iterator result = data->templateMap(currentWo
rldType).find(&wrapperTypeInfo); |
| 279 if (result != data->templateMap(currentWorldType).end()) | 279 if (result != data->templateMap(currentWorldType).end()) |
| 280 return result->value.newLocal(isolate); | 280 return result->value.newLocal(isolate); |
| 281 | 281 |
| 282 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); | 282 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "BuildDOMTemplate"); |
| 283 v8::HandleScope handleScope(isolate); | 283 v8::EscapableHandleScope handleScope(isolate); |
| 284 v8::Handle<v8::FunctionTemplate> templ = | 284 v8::Local<v8::FunctionTemplate> templ = |
| 285 ConfigureV8TestSerializedScriptValueInterfaceTemplate(data->rawTemplate(
&wrapperTypeInfo, currentWorldType), isolate, currentWorldType); | 285 ConfigureV8TestSerializedScriptValueInterfaceTemplate(data->rawTemplate(
&wrapperTypeInfo, currentWorldType), isolate, currentWorldType); |
| 286 data->templateMap(currentWorldType).add(&wrapperTypeInfo, UnsafePersistent<v
8::FunctionTemplate>(isolate, templ)); | 286 data->templateMap(currentWorldType).add(&wrapperTypeInfo, UnsafePersistent<v
8::FunctionTemplate>(isolate, templ)); |
| 287 return handleScope.Close(templ); | 287 return handleScope.Escape(templ); |
| 288 } | 288 } |
| 289 | 289 |
| 290 bool V8TestSerializedScriptValueInterface::hasInstance(v8::Handle<v8::Value> jsV
alue, v8::Isolate* isolate, WrapperWorldType currentWorldType) | 290 bool V8TestSerializedScriptValueInterface::hasInstance(v8::Handle<v8::Value> jsV
alue, v8::Isolate* isolate, WrapperWorldType currentWorldType) |
| 291 { | 291 { |
| 292 return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValu
e, currentWorldType); | 292 return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValu
e, currentWorldType); |
| 293 } | 293 } |
| 294 | 294 |
| 295 bool V8TestSerializedScriptValueInterface::hasInstanceInAnyWorld(v8::Handle<v8::
Value> jsValue, v8::Isolate* isolate) | 295 bool V8TestSerializedScriptValueInterface::hasInstanceInAnyWorld(v8::Handle<v8::
Value> jsValue, v8::Isolate* isolate) |
| 296 { | 296 { |
| 297 return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValu
e, MainWorld) | 297 return V8PerIsolateData::from(isolate)->hasInstance(&wrapperTypeInfo, jsValu
e, MainWorld) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 325 } | 325 } |
| 326 | 326 |
| 327 template<> | 327 template<> |
| 328 v8::Handle<v8::Value> toV8NoInline(TestSerializedScriptValueInterface* impl, v8:
:Handle<v8::Object> creationContext, v8::Isolate* isolate) | 328 v8::Handle<v8::Value> toV8NoInline(TestSerializedScriptValueInterface* impl, v8:
:Handle<v8::Object> creationContext, v8::Isolate* isolate) |
| 329 { | 329 { |
| 330 return toV8(impl, creationContext, isolate); | 330 return toV8(impl, creationContext, isolate); |
| 331 } | 331 } |
| 332 | 332 |
| 333 } // namespace WebCore | 333 } // namespace WebCore |
| 334 #endif // ENABLE(Condition1) || ENABLE(Condition2) | 334 #endif // ENABLE(Condition1) || ENABLE(Condition2) |
| OLD | NEW |