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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 template <typename T> void V8_USE(T) { } | 74 template <typename T> void V8_USE(T) { } |
75 | 75 |
76 static void itemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) | 76 static void itemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) |
77 { | 77 { |
78 ExceptionState exceptionState(ExceptionState::ExecutionContext, "item", "Tes
tEventTarget", info.Holder(), info.GetIsolate()); | 78 ExceptionState exceptionState(ExceptionState::ExecutionContext, "item", "Tes
tEventTarget", info.Holder(), info.GetIsolate()); |
79 if (UNLIKELY(info.Length() < 1)) { | 79 if (UNLIKELY(info.Length() < 1)) { |
80 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(1, i
nfo.Length())); | 80 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(1, i
nfo.Length())); |
81 exceptionState.throwIfNeeded(); | 81 exceptionState.throwIfNeeded(); |
82 return; | 82 return; |
83 } | 83 } |
84 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 84 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
85 V8TRYCATCH_EXCEPTION_VOID(unsigned, index, toUInt32(info[0], exceptionState)
, exceptionState); | 85 V8TRYCATCH_EXCEPTION_VOID(unsigned, index, toUInt32(info[0], exceptionState)
, exceptionState); |
86 v8SetReturnValue(info, imp->item(index)); | 86 v8SetReturnValue(info, impl->item(index)); |
87 } | 87 } |
88 | 88 |
89 static void itemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) | 89 static void itemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) |
90 { | 90 { |
91 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMMethod"); | 91 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMMethod"); |
92 TestEventTargetV8Internal::itemMethod(info); | 92 TestEventTargetV8Internal::itemMethod(info); |
93 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 93 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
94 } | 94 } |
95 | 95 |
96 static void namedItemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) | 96 static void namedItemMethod(const v8::FunctionCallbackInfo<v8::Value>& info) |
97 { | 97 { |
98 if (UNLIKELY(info.Length() < 1)) { | 98 if (UNLIKELY(info.Length() < 1)) { |
99 throwTypeError(ExceptionMessages::failedToExecute("namedItem", "TestEven
tTarget", ExceptionMessages::notEnoughArguments(1, info.Length())), info.GetIsol
ate()); | 99 throwTypeError(ExceptionMessages::failedToExecute("namedItem", "TestEven
tTarget", ExceptionMessages::notEnoughArguments(1, info.Length())), info.GetIsol
ate()); |
100 return; | 100 return; |
101 } | 101 } |
102 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 102 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
103 V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, name, info[0]); | 103 V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, name, info[0]); |
104 v8SetReturnValue(info, imp->namedItem(name)); | 104 v8SetReturnValue(info, impl->namedItem(name)); |
105 } | 105 } |
106 | 106 |
107 static void namedItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& i
nfo) | 107 static void namedItemMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& i
nfo) |
108 { | 108 { |
109 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMMethod"); | 109 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMMethod"); |
110 TestEventTargetV8Internal::namedItemMethod(info); | 110 TestEventTargetV8Internal::namedItemMethod(info); |
111 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 111 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
112 } | 112 } |
113 | 113 |
114 static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo
<v8::Value>& info) | 114 static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo
<v8::Value>& info) |
115 { | 115 { |
116 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 116 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
117 RefPtr<Node> result = imp->item(index); | 117 RefPtr<Node> result = impl->item(index); |
118 if (!result) | 118 if (!result) |
119 return; | 119 return; |
120 v8SetReturnValueFast(info, WTF::getPtr(result.release()), imp); | 120 v8SetReturnValueFast(info, WTF::getPtr(result.release()), impl); |
121 } | 121 } |
122 | 122 |
123 static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCall
backInfo<v8::Value>& info) | 123 static void indexedPropertyGetterCallback(uint32_t index, const v8::PropertyCall
backInfo<v8::Value>& info) |
124 { | 124 { |
125 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMIndexedProperty"); | 125 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMIndexedProperty"); |
126 TestEventTargetV8Internal::indexedPropertyGetter(index, info); | 126 TestEventTargetV8Internal::indexedPropertyGetter(index, info); |
127 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 127 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
128 } | 128 } |
129 | 129 |
130 static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> jsValue,
const v8::PropertyCallbackInfo<v8::Value>& info) | 130 static void indexedPropertySetter(uint32_t index, v8::Local<v8::Value> jsValue,
const v8::PropertyCallbackInfo<v8::Value>& info) |
131 { | 131 { |
132 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 132 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
133 V8TRYCATCH_VOID(Node*, propertyValue, V8Node::toNativeWithTypeCheck(info.Get
Isolate(), jsValue)); | 133 V8TRYCATCH_VOID(Node*, propertyValue, V8Node::toNativeWithTypeCheck(info.Get
Isolate(), jsValue)); |
134 if (!isUndefinedOrNull(jsValue) && !V8Node::hasInstance(jsValue, info.GetIso
late())) { | 134 if (!isUndefinedOrNull(jsValue) && !V8Node::hasInstance(jsValue, info.GetIso
late())) { |
135 exceptionState.throwTypeError("The provided value is not of type 'Node'.
"); | 135 exceptionState.throwTypeError("The provided value is not of type 'Node'.
"); |
136 exceptionState.throwIfNeeded(); | 136 exceptionState.throwIfNeeded(); |
137 return; | 137 return; |
138 } | 138 } |
139 bool result = imp->anonymousIndexedSetter(index, propertyValue); | 139 bool result = impl->anonymousIndexedSetter(index, propertyValue); |
140 if (!result) | 140 if (!result) |
141 return; | 141 return; |
142 v8SetReturnValue(info, jsValue); | 142 v8SetReturnValue(info, jsValue); |
143 } | 143 } |
144 | 144 |
145 static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> j
sValue, const v8::PropertyCallbackInfo<v8::Value>& info) | 145 static void indexedPropertySetterCallback(uint32_t index, v8::Local<v8::Value> j
sValue, const v8::PropertyCallbackInfo<v8::Value>& info) |
146 { | 146 { |
147 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMIndexedProperty"); | 147 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMIndexedProperty"); |
148 TestEventTargetV8Internal::indexedPropertySetter(index, jsValue, info); | 148 TestEventTargetV8Internal::indexedPropertySetter(index, jsValue, info); |
149 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 149 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
150 } | 150 } |
151 | 151 |
152 static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInf
o<v8::Boolean>& info) | 152 static void indexedPropertyDeleter(uint32_t index, const v8::PropertyCallbackInf
o<v8::Boolean>& info) |
153 { | 153 { |
154 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 154 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
155 ExceptionState exceptionState(ExceptionState::IndexedDeletionContext, "TestE
ventTarget", info.Holder(), info.GetIsolate()); | 155 ExceptionState exceptionState(ExceptionState::IndexedDeletionContext, "TestE
ventTarget", info.Holder(), info.GetIsolate()); |
156 DeleteResult result = imp->anonymousIndexedDeleter(index, exceptionState); | 156 DeleteResult result = impl->anonymousIndexedDeleter(index, exceptionState); |
157 if (exceptionState.throwIfNeeded()) | 157 if (exceptionState.throwIfNeeded()) |
158 return; | 158 return; |
159 if (result != DeleteUnknownProperty) | 159 if (result != DeleteUnknownProperty) |
160 return v8SetReturnValueBool(info, result == DeleteSuccess); | 160 return v8SetReturnValueBool(info, result == DeleteSuccess); |
161 } | 161 } |
162 | 162 |
163 static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCal
lbackInfo<v8::Boolean>& info) | 163 static void indexedPropertyDeleterCallback(uint32_t index, const v8::PropertyCal
lbackInfo<v8::Boolean>& info) |
164 { | 164 { |
165 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMIndexedProperty"); | 165 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMIndexedProperty"); |
166 TestEventTargetV8Internal::indexedPropertyDeleter(index, info); | 166 TestEventTargetV8Internal::indexedPropertyDeleter(index, info); |
167 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 167 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
168 } | 168 } |
169 | 169 |
170 static void namedPropertyGetter(v8::Local<v8::String> name, const v8::PropertyCa
llbackInfo<v8::Value>& info) | 170 static void namedPropertyGetter(v8::Local<v8::String> name, const v8::PropertyCa
llbackInfo<v8::Value>& info) |
171 { | 171 { |
172 if (info.Holder()->HasRealNamedProperty(name)) | 172 if (info.Holder()->HasRealNamedProperty(name)) |
173 return; | 173 return; |
174 if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) | 174 if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) |
175 return; | 175 return; |
176 | 176 |
177 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 177 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
178 AtomicString propertyName = toCoreAtomicString(name); | 178 AtomicString propertyName = toCoreAtomicString(name); |
179 RefPtr<Node> result = imp->namedItem(propertyName); | 179 RefPtr<Node> result = impl->namedItem(propertyName); |
180 if (!result) | 180 if (!result) |
181 return; | 181 return; |
182 v8SetReturnValueFast(info, WTF::getPtr(result.release()), imp); | 182 v8SetReturnValueFast(info, WTF::getPtr(result.release()), impl); |
183 } | 183 } |
184 | 184 |
185 static void namedPropertyGetterCallback(v8::Local<v8::String> name, const v8::Pr
opertyCallbackInfo<v8::Value>& info) | 185 static void namedPropertyGetterCallback(v8::Local<v8::String> name, const v8::Pr
opertyCallbackInfo<v8::Value>& info) |
186 { | 186 { |
187 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMNamedProperty"); | 187 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMNamedProperty"); |
188 TestEventTargetV8Internal::namedPropertyGetter(name, info); | 188 TestEventTargetV8Internal::namedPropertyGetter(name, info); |
189 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 189 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
190 } | 190 } |
191 | 191 |
192 static void namedPropertySetter(v8::Local<v8::String> name, v8::Local<v8::Value>
jsValue, const v8::PropertyCallbackInfo<v8::Value>& info) | 192 static void namedPropertySetter(v8::Local<v8::String> name, v8::Local<v8::Value>
jsValue, const v8::PropertyCallbackInfo<v8::Value>& info) |
193 { | 193 { |
194 if (info.Holder()->HasRealNamedProperty(name)) | 194 if (info.Holder()->HasRealNamedProperty(name)) |
195 return; | 195 return; |
196 if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) | 196 if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) |
197 return; | 197 return; |
198 | 198 |
199 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 199 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
200 V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, propertyName, name)
; | 200 V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, propertyName, name)
; |
201 V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, propertyValue, jsVa
lue); | 201 V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, propertyValue, jsVa
lue); |
202 bool result = imp->anonymousNamedSetter(propertyName, propertyValue); | 202 bool result = impl->anonymousNamedSetter(propertyName, propertyValue); |
203 if (!result) | 203 if (!result) |
204 return; | 204 return; |
205 v8SetReturnValue(info, jsValue); | 205 v8SetReturnValue(info, jsValue); |
206 } | 206 } |
207 | 207 |
208 static void namedPropertySetterCallback(v8::Local<v8::String> name, v8::Local<v8
::Value> jsValue, const v8::PropertyCallbackInfo<v8::Value>& info) | 208 static void namedPropertySetterCallback(v8::Local<v8::String> name, v8::Local<v8
::Value> jsValue, const v8::PropertyCallbackInfo<v8::Value>& info) |
209 { | 209 { |
210 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMNamedProperty"); | 210 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMNamedProperty"); |
211 TestEventTargetV8Internal::namedPropertySetter(name, jsValue, info); | 211 TestEventTargetV8Internal::namedPropertySetter(name, jsValue, info); |
212 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 212 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
213 } | 213 } |
214 | 214 |
215 static void namedPropertyQuery(v8::Local<v8::String> name, const v8::PropertyCal
lbackInfo<v8::Integer>& info) | 215 static void namedPropertyQuery(v8::Local<v8::String> name, const v8::PropertyCal
lbackInfo<v8::Integer>& info) |
216 { | 216 { |
217 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 217 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
218 AtomicString propertyName = toCoreAtomicString(name); | 218 AtomicString propertyName = toCoreAtomicString(name); |
219 v8::String::Utf8Value namedProperty(name); | 219 v8::String::Utf8Value namedProperty(name); |
220 ExceptionState exceptionState(ExceptionState::GetterContext, *namedProperty,
"TestEventTarget", info.Holder(), info.GetIsolate()); | 220 ExceptionState exceptionState(ExceptionState::GetterContext, *namedProperty,
"TestEventTarget", info.Holder(), info.GetIsolate()); |
221 bool result = imp->namedPropertyQuery(propertyName, exceptionState); | 221 bool result = impl->namedPropertyQuery(propertyName, exceptionState); |
222 if (exceptionState.throwIfNeeded()) | 222 if (exceptionState.throwIfNeeded()) |
223 return; | 223 return; |
224 if (!result) | 224 if (!result) |
225 return; | 225 return; |
226 v8SetReturnValueInt(info, v8::None); | 226 v8SetReturnValueInt(info, v8::None); |
227 } | 227 } |
228 | 228 |
229 static void namedPropertyQueryCallback(v8::Local<v8::String> name, const v8::Pro
pertyCallbackInfo<v8::Integer>& info) | 229 static void namedPropertyQueryCallback(v8::Local<v8::String> name, const v8::Pro
pertyCallbackInfo<v8::Integer>& info) |
230 { | 230 { |
231 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMNamedProperty"); | 231 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMNamedProperty"); |
232 TestEventTargetV8Internal::namedPropertyQuery(name, info); | 232 TestEventTargetV8Internal::namedPropertyQuery(name, info); |
233 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 233 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
234 } | 234 } |
235 | 235 |
236 static void namedPropertyDeleter(v8::Local<v8::String> name, const v8::PropertyC
allbackInfo<v8::Boolean>& info) | 236 static void namedPropertyDeleter(v8::Local<v8::String> name, const v8::PropertyC
allbackInfo<v8::Boolean>& info) |
237 { | 237 { |
238 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 238 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
239 AtomicString propertyName = toCoreAtomicString(name); | 239 AtomicString propertyName = toCoreAtomicString(name); |
240 DeleteResult result = imp->anonymousNamedDeleter(propertyName); | 240 DeleteResult result = impl->anonymousNamedDeleter(propertyName); |
241 if (result != DeleteUnknownProperty) | 241 if (result != DeleteUnknownProperty) |
242 return v8SetReturnValueBool(info, result == DeleteSuccess); | 242 return v8SetReturnValueBool(info, result == DeleteSuccess); |
243 } | 243 } |
244 | 244 |
245 static void namedPropertyDeleterCallback(v8::Local<v8::String> name, const v8::P
ropertyCallbackInfo<v8::Boolean>& info) | 245 static void namedPropertyDeleterCallback(v8::Local<v8::String> name, const v8::P
ropertyCallbackInfo<v8::Boolean>& info) |
246 { | 246 { |
247 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMNamedProperty"); | 247 TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMNamedProperty"); |
248 TestEventTargetV8Internal::namedPropertyDeleter(name, info); | 248 TestEventTargetV8Internal::namedPropertyDeleter(name, info); |
249 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); | 249 TRACE_EVENT_SET_SAMPLING_STATE("V8", "V8Execution"); |
250 } | 250 } |
251 | 251 |
252 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i
nfo) | 252 static void namedPropertyEnumerator(const v8::PropertyCallbackInfo<v8::Array>& i
nfo) |
253 { | 253 { |
254 TestEventTarget* imp = V8TestEventTarget::toNative(info.Holder()); | 254 TestEventTarget* impl = V8TestEventTarget::toNative(info.Holder()); |
255 Vector<String> names; | 255 Vector<String> names; |
256 ExceptionState exceptionState(ExceptionState::EnumerationContext, "TestEvent
Target", info.Holder(), info.GetIsolate()); | 256 ExceptionState exceptionState(ExceptionState::EnumerationContext, "TestEvent
Target", info.Holder(), info.GetIsolate()); |
257 imp->namedPropertyEnumerator(names, exceptionState); | 257 impl->namedPropertyEnumerator(names, exceptionState); |
258 if (exceptionState.throwIfNeeded()) | 258 if (exceptionState.throwIfNeeded()) |
259 return; | 259 return; |
260 v8::Handle<v8::Array> v8names = v8::Array::New(info.GetIsolate(), names.size
()); | 260 v8::Handle<v8::Array> v8names = v8::Array::New(info.GetIsolate(), names.size
()); |
261 for (size_t i = 0; i < names.size(); ++i) | 261 for (size_t i = 0; i < names.size(); ++i) |
262 v8names->Set(v8::Integer::New(info.GetIsolate(), i), v8String(info.GetIs
olate(), names[i])); | 262 v8names->Set(v8::Integer::New(info.GetIsolate(), i), v8String(info.GetIs
olate(), names[i])); |
263 v8SetReturnValue(info, v8names); | 263 v8SetReturnValue(info, v8names); |
264 } | 264 } |
265 | 265 |
266 static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::A
rray>& info) | 266 static void namedPropertyEnumeratorCallback(const v8::PropertyCallbackInfo<v8::A
rray>& info) |
267 { | 267 { |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 fromInternalPointer(object)->deref(); | 355 fromInternalPointer(object)->deref(); |
356 } | 356 } |
357 | 357 |
358 template<> | 358 template<> |
359 v8::Handle<v8::Value> toV8NoInline(TestEventTarget* impl, v8::Handle<v8::Object>
creationContext, v8::Isolate* isolate) | 359 v8::Handle<v8::Value> toV8NoInline(TestEventTarget* impl, v8::Handle<v8::Object>
creationContext, v8::Isolate* isolate) |
360 { | 360 { |
361 return toV8(impl, creationContext, isolate); | 361 return toV8(impl, creationContext, isolate); |
362 } | 362 } |
363 | 363 |
364 } // namespace WebCore | 364 } // namespace WebCore |
OLD | NEW |