| 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 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 14 matching lines...) Expand all Loading... |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 #include "config.h" | 30 #include "config.h" |
| 31 #include "bindings/dart/DartHandleProxy.h" | 31 #include "bindings/dart/DartHandleProxy.h" |
| 32 | 32 |
| 33 #include "DartNode.h" | 33 #include "DartNode.h" |
| 34 #include "bindings/dart/DartJsInterop.h" | 34 #include "bindings/dart/DartJsInterop.h" |
| 35 #include "bindings/dart/DartScriptValue.h" | 35 #include "bindings/dart/DartPersistentValue.h" |
| 36 #include "bindings/dart/V8Converter.h" | 36 #include "bindings/dart/V8Converter.h" |
| 37 #include "bindings/v8/PageScriptDebugServer.h" | 37 #include "bindings/v8/PageScriptDebugServer.h" |
| 38 #include "bindings/v8/ScriptController.h" | 38 #include "bindings/v8/ScriptController.h" |
| 39 #include "bindings/v8/ScriptState.h" | 39 #include "bindings/v8/ScriptState.h" |
| 40 #include "bindings/v8/V8Binding.h" | 40 #include "bindings/v8/V8Binding.h" |
| 41 #include "bindings/v8/V8ScriptRunner.h" | 41 #include "bindings/v8/V8ScriptRunner.h" |
| 42 #include "bindings/v8/V8ThrowException.h" | 42 #include "bindings/v8/V8ThrowException.h" |
| 43 | 43 |
| 44 #include "wtf/StdLibExtras.h" | 44 #include "wtf/StdLibExtras.h" |
| 45 | 45 |
| 46 namespace WebCore { | 46 namespace WebCore { |
| 47 | 47 |
| 48 struct DartHandleProxy::CallbackData { | 48 struct DartHandleProxy::CallbackData { |
| 49 ScopedPersistent<v8::Object> handle; | 49 ScopedPersistent<v8::Object> handle; |
| 50 DartScriptValue* value; | 50 DartPersistentValue* value; |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 typedef HashMap<String, v8::Persistent<v8::FunctionTemplate>* > FunctionTemplate
Map; | 53 typedef HashMap<String, v8::Persistent<v8::FunctionTemplate>* > FunctionTemplate
Map; |
| 54 | 54 |
| 55 static v8::Local<v8::FunctionTemplate> objectProxyTemplate(Dart_Handle instance)
; | 55 static v8::Local<v8::FunctionTemplate> objectProxyTemplate(Dart_Handle instance)
; |
| 56 static v8::Local<v8::FunctionTemplate> functionProxyTemplate(); | 56 static v8::Local<v8::FunctionTemplate> functionProxyTemplate(); |
| 57 static v8::Local<v8::FunctionTemplate> libraryProxyTemplate(v8::Handle<v8::Strin
g> libraryNameV8); | 57 static v8::Local<v8::FunctionTemplate> libraryProxyTemplate(v8::Handle<v8::Strin
g> libraryNameV8); |
| 58 static v8::Local<v8::FunctionTemplate> typeProxyTemplate(Dart_Handle type); | 58 static v8::Local<v8::FunctionTemplate> typeProxyTemplate(Dart_Handle type); |
| 59 static v8::Local<v8::FunctionTemplate> frameProxyTemplate(); | 59 static v8::Local<v8::FunctionTemplate> frameProxyTemplate(); |
| 60 | 60 |
| 61 DartScriptValue* DartHandleProxy::readPointerFromProxy(v8::Handle<v8::Value> pro
xy) | 61 DartPersistentValue* DartHandleProxy::readPointerFromProxy(v8::Handle<v8::Value>
proxy) |
| 62 { | 62 { |
| 63 void* pointer = proxy.As<v8::Object>()->GetAlignedPointerFromInternalField(0
); | 63 void* pointer = proxy.As<v8::Object>()->GetAlignedPointerFromInternalField(0
); |
| 64 return static_cast<DartScriptValue*>(pointer); | 64 return static_cast<DartPersistentValue*>(pointer); |
| 65 } | 65 } |
| 66 | 66 |
| 67 bool DartHandleProxy::isDartProxy(v8::Handle<v8::Value> value) | 67 bool DartHandleProxy::isDartProxy(v8::Handle<v8::Value> value) |
| 68 { | 68 { |
| 69 if (value->IsObject()) { | 69 if (value->IsObject()) { |
| 70 v8::Isolate* v8Isolate = v8::Isolate::GetCurrent(); | 70 v8::Isolate* v8Isolate = v8::Isolate::GetCurrent(); |
| 71 v8::Local<v8::Value> hiddenValue = value.As<v8::Object>()->GetHiddenValu
e(v8::String::NewFromUtf8(v8Isolate, "dartProxy")); | 71 v8::Local<v8::Value> hiddenValue = value.As<v8::Object>()->GetHiddenValu
e(v8::String::NewFromUtf8(v8Isolate, "dartProxy")); |
| 72 return *hiddenValue && hiddenValue->IsBoolean(); | 72 return *hiddenValue && hiddenValue->IsBoolean(); |
| 73 } | 73 } |
| 74 return false; | 74 return false; |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 v8::Isolate* v8Isolate = v8::Isolate::GetCurrent(); | 284 v8::Isolate* v8Isolate = v8::Isolate::GetCurrent(); |
| 285 V8ThrowException::throwError(v8::String::NewFromUtf8(v8Isolate, Dart_Get
Error(result)), v8::Isolate::GetCurrent()); | 285 V8ThrowException::throwError(v8::String::NewFromUtf8(v8Isolate, Dart_Get
Error(result)), v8::Isolate::GetCurrent()); |
| 286 } else { | 286 } else { |
| 287 v8SetReturnValue(info, DartHandleProxy::create(result)); | 287 v8SetReturnValue(info, DartHandleProxy::create(result)); |
| 288 } | 288 } |
| 289 } | 289 } |
| 290 | 290 |
| 291 void DartHandleProxy::writePointerToProxy(v8::Local<v8::Object> proxy, Dart_Hand
le value) | 291 void DartHandleProxy::writePointerToProxy(v8::Local<v8::Object> proxy, Dart_Hand
le value) |
| 292 { | 292 { |
| 293 ASSERT(!proxy.IsEmpty()); | 293 ASSERT(!proxy.IsEmpty()); |
| 294 DartScriptValue* dartScriptValue = new DartScriptValue(value); | 294 DartPersistentValue* dartScriptValue = new DartPersistentValue(value); |
| 295 proxy->SetAlignedPointerInInternalField(0, dartScriptValue); | 295 proxy->SetAlignedPointerInInternalField(0, dartScriptValue); |
| 296 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | 296 v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| 297 v8::Persistent<v8::Object> persistentHandle; | 297 v8::Persistent<v8::Object> persistentHandle; |
| 298 DartHandleProxy::CallbackData* callbackData = new DartHandleProxy::CallbackD
ata(); | 298 DartHandleProxy::CallbackData* callbackData = new DartHandleProxy::CallbackD
ata(); |
| 299 callbackData->value = dartScriptValue; | 299 callbackData->value = dartScriptValue; |
| 300 callbackData->handle.set(isolate, proxy); | 300 callbackData->handle.set(isolate, proxy); |
| 301 callbackData->handle.setWeak(callbackData, &weakCallback); | 301 callbackData->handle.setWeak(callbackData, &weakCallback); |
| 302 } | 302 } |
| 303 | 303 |
| 304 intptr_t getLibraryId(v8::Local<v8::Object> proxy) | 304 intptr_t getLibraryId(v8::Local<v8::Object> proxy) |
| (...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1070 } | 1070 } |
| 1071 | 1071 |
| 1072 /** | 1072 /** |
| 1073 * Returns the JavaScript type name following the Chrome debugger conventions | 1073 * Returns the JavaScript type name following the Chrome debugger conventions |
| 1074 * for Dart objects that have natural JavaScript analogs. | 1074 * for Dart objects that have natural JavaScript analogs. |
| 1075 * This enables visually consistent display of Dart Lists and JavaScript arrays, | 1075 * This enables visually consistent display of Dart Lists and JavaScript arrays, |
| 1076 * functions, and DOM nodes. | 1076 * functions, and DOM nodes. |
| 1077 */ | 1077 */ |
| 1078 const char* DartHandleProxy::getJavaScriptType(v8::Handle<v8::Value> value) | 1078 const char* DartHandleProxy::getJavaScriptType(v8::Handle<v8::Value> value) |
| 1079 { | 1079 { |
| 1080 DartScriptValue* scriptValue = readPointerFromProxy(value); | 1080 DartPersistentValue* scriptValue = readPointerFromProxy(value); |
| 1081 ASSERT(scriptValue->isIsolateAlive()); | 1081 ASSERT(scriptValue->isIsolateAlive()); |
| 1082 DartIsolateScope scope(scriptValue->isolate()); | 1082 DartIsolateScope scope(scriptValue->isolate()); |
| 1083 DartApiScope apiScope; | 1083 DartApiScope apiScope; |
| 1084 Dart_PersistentHandle handle = scriptValue->value(); | 1084 Dart_PersistentHandle handle = scriptValue->value(); |
| 1085 | 1085 |
| 1086 if (Dart_IsInstance(handle)) { | 1086 if (Dart_IsInstance(handle)) { |
| 1087 if (Dart_IsList(handle)) | 1087 if (Dart_IsList(handle)) |
| 1088 return "array"; | 1088 return "array"; |
| 1089 | 1089 |
| 1090 if (DartDOMWrapper::subtypeOf(handle, DartNode::dartClassId)) | 1090 if (DartDOMWrapper::subtypeOf(handle, DartNode::dartClassId)) |
| 1091 return "node"; | 1091 return "node"; |
| 1092 } | 1092 } |
| 1093 | 1093 |
| 1094 return 0; | 1094 return 0; |
| 1095 } | 1095 } |
| 1096 | 1096 |
| 1097 Node* DartHandleProxy::toNativeNode(v8::Handle<v8::Value> value) | 1097 Node* DartHandleProxy::toNativeNode(v8::Handle<v8::Value> value) |
| 1098 { | 1098 { |
| 1099 DartScriptValue* scriptValue = readPointerFromProxy(value); | 1099 DartPersistentValue* scriptValue = readPointerFromProxy(value); |
| 1100 ASSERT(scriptValue->isIsolateAlive()); | 1100 ASSERT(scriptValue->isIsolateAlive()); |
| 1101 DartIsolateScope scope(scriptValue->isolate()); | 1101 DartIsolateScope scope(scriptValue->isolate()); |
| 1102 DartApiScope apiScope; | 1102 DartApiScope apiScope; |
| 1103 Dart_PersistentHandle handle = scriptValue->value(); | 1103 Dart_PersistentHandle handle = scriptValue->value(); |
| 1104 Dart_Handle exception = 0; | 1104 Dart_Handle exception = 0; |
| 1105 Node* node = DartNode::toNative(handle, exception); | 1105 Node* node = DartNode::toNative(handle, exception); |
| 1106 ASSERT(!exception); | 1106 ASSERT(!exception); |
| 1107 return node; | 1107 return node; |
| 1108 } | 1108 } |
| 1109 | 1109 |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1237 for (intptr_t i = 0; i < length; i ++) | 1237 for (intptr_t i = 0; i < length; i ++) |
| 1238 dartFunctionArgs.append(Dart_ListGetAt(wrappedExpressionArgs, i)); | 1238 dartFunctionArgs.append(Dart_ListGetAt(wrappedExpressionArgs, i)); |
| 1239 | 1239 |
| 1240 Dart_Handle result = Dart_InvokeClosure(closure, dartFunctionArgs.size(), da
rtFunctionArgs.data()); | 1240 Dart_Handle result = Dart_InvokeClosure(closure, dartFunctionArgs.size(), da
rtFunctionArgs.data()); |
| 1241 if (Dart_IsError(result)) | 1241 if (Dart_IsError(result)) |
| 1242 return V8ThrowException::throwError(v8::String::NewFromUtf8(v8Isolate, D
art_GetError(result)), v8::Isolate::GetCurrent()); | 1242 return V8ThrowException::throwError(v8::String::NewFromUtf8(v8Isolate, D
art_GetError(result)), v8::Isolate::GetCurrent()); |
| 1243 return DartHandleProxy::create(result); | 1243 return DartHandleProxy::create(result); |
| 1244 } | 1244 } |
| 1245 | 1245 |
| 1246 } | 1246 } |
| OLD | NEW |