Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: Source/bindings/dart/DartUtilities.cpp

Issue 55433007: Dartium: do not call back into Dart code to parse or generate a stack trace. (Closed) Base URL: svn://svn.chromium.org/multivm/trunk/webkit
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011, Google Inc. 1 // Copyright 2011, Google Inc.
2 // All rights reserved. 2 // 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 935 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 } 946 }
947 947
948 PassRefPtr<ScriptArguments> DartUtilities::createScriptArguments(Dart_Handle arg ument, Dart_Handle& exception) 948 PassRefPtr<ScriptArguments> DartUtilities::createScriptArguments(Dart_Handle arg ument, Dart_Handle& exception)
949 { 949 {
950 v8::Handle<v8::Value> v8Argument = DartHandleProxy::create(argument); 950 v8::Handle<v8::Value> v8Argument = DartHandleProxy::create(argument);
951 Vector<ScriptValue> arguments; 951 Vector<ScriptValue> arguments;
952 arguments.append(ScriptValue(v8Argument, v8::Isolate::GetCurrent())); 952 arguments.append(ScriptValue(v8Argument, v8::Isolate::GetCurrent()));
953 return ScriptArguments::create(DartUtilities::currentScriptState(), argument s); 953 return ScriptArguments::create(DartUtilities::currentScriptState(), argument s);
954 } 954 }
955 955
956 static PassRefPtr<ScriptCallStack> createScriptCallStackFromParsedStackTrace(Dar t_Handle parsedStackTrace, Dart_Handle exception) 956 static PassRefPtr<ScriptCallStack> createScriptCallStackFromStackTrace(Dart_Exce ptionStackTrace stackTrace)
957 { 957 {
958 Vector<Dart_Handle> callFrames; 958 intptr_t frameCount = 0;
959 DartUtilities::extractListElements(parsedStackTrace, exception, callFrames); 959 Dart_Handle result = Dart_StacktraceLength(stackTrace, &frameCount);
960 if (exception) 960 if (Dart_IsError(result))
961 return 0; 961 return 0;
962 962
963 size_t frameCount = callFrames.size();
964 if (frameCount > ScriptCallStack::maxCallStackSizeToCapture) 963 if (frameCount > ScriptCallStack::maxCallStackSizeToCapture)
965 frameCount = ScriptCallStack::maxCallStackSizeToCapture; 964 frameCount = ScriptCallStack::maxCallStackSizeToCapture;
966 965
967 Vector<ScriptCallFrame> scriptCallStackFrames; 966 Vector<ScriptCallFrame> scriptCallStackFrames;
968 for (size_t i = 0; i < frameCount; i++) { 967 for (intptr_t frameIndex = 0; frameIndex < frameCount; frameIndex++) {
969 Dart_Handle callFrame = callFrames[i]; 968 Dart_Handle dartFunctionName;
970 Vector<Dart_Handle> fields; 969 Dart_Handle dartScriptUrl;
971 DartUtilities::extractListElements(callFrame, exception, fields); 970 intptr_t lineNumber = 0;
972 if (exception) 971 intptr_t columnNumber = 0;
972 result = Dart_StacktraceFrameInfo(stackTrace, frameIndex, &dartFunctionN ame, &dartScriptUrl, &lineNumber, &columnNumber);
973 if (Dart_IsError(result))
973 return 0; 974 return 0;
974 ASSERT(fields.size() == 4); 975
975 String functionName = DartUtilities::toString(fields[0]); 976 const char* cstr = 0;
976 String sourceName = DartUtilities::toString(fields[1]); 977 result = Dart_StringToCString(dartFunctionName, &cstr);
977 int lineNumber = DartUtilities::toInteger(fields[2], exception); 978 if (Dart_IsError(result))
978 if (exception)
979 return 0; 979 return 0;
980 int columnNumber = DartUtilities::toInteger(fields[3], exception); 980 String functionName(cstr);
981 if (exception) 981 result = Dart_StringToCString(dartScriptUrl, &cstr);
982 if (Dart_IsError(result))
982 return 0; 983 return 0;
983 scriptCallStackFrames.append(ScriptCallFrame(functionName, "undefined", sourceName, lineNumber, columnNumber)); 984 String scriptUrl(cstr);
985
986 // FIXME
rmacnak 2013/11/07 21:30:41 The console Sources tab sometimes tries to highlig
987 const char* scriptName = "undefined";
988 // FIXME
989 if (columnNumber != -1)
rmacnak 2013/11/07 21:30:41 When stack traces were parsed by a Dart regex, the
990 scriptCallStackFrames.append(ScriptCallFrame(functionName, scriptNam e, scriptUrl, lineNumber, columnNumber));
984 } 991 }
985 if (!frameCount) 992 if (!frameCount)
986 scriptCallStackFrames.append(ScriptCallFrame("undefined", "undefined", " undefined", 0, 0)); 993 scriptCallStackFrames.append(ScriptCallFrame("undefined", "undefined", " undefined", 0, 0));
987 994
988 return ScriptCallStack::create(scriptCallStackFrames); 995 return ScriptCallStack::create(scriptCallStackFrames);
989 } 996 }
990 997
991 static PassRefPtr<ScriptCallStack> createScriptCallStackFromStackTrace(Dart_Hand le stackTrace, Dart_Handle& exception)
992 {
993 Dart_Handle parsedStackTrace = DartUtilities::invokeUtilsMethod("parseStackT race", 1, &stackTrace);
994 if (!DartUtilities::checkResult(parsedStackTrace, exception))
995 return 0;
996
997 return createScriptCallStackFromParsedStackTrace(parsedStackTrace, exception );
998 }
999
1000 PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack() 998 PassRefPtr<ScriptCallStack> DartUtilities::createScriptCallStack()
1001 { 999 {
1002 Dart_ExceptionPauseInfo previousPauseInfo = Dart_GetExceptionPauseInfo(); 1000 Dart_ExceptionStackTrace trace = 0;
1003 if (previousPauseInfo != kNoPauseOnExceptions) 1001 Dart_Handle result = Dart_CurrentStacktrace(&trace);
1004 Dart_SetExceptionPauseInfo(kNoPauseOnExceptions); 1002 ASSERT(!Dart_IsError(result));
1005 Dart_Handle exception = 0; 1003 ASSERT(!Dart_IsNull(result));
1006 Dart_Handle parsedStackTrace = DartUtilities::invokeUtilsMethod("capturePars edStackTrace", 0, 0); 1004 ASSERT(trace);
1007 1005 return createScriptCallStackFromStackTrace(trace);
1008 if (previousPauseInfo != kNoPauseOnExceptions)
1009 Dart_SetExceptionPauseInfo(previousPauseInfo);
1010
1011 if (!DartUtilities::checkResult(parsedStackTrace, exception))
1012 return 0;
1013
1014 return createScriptCallStackFromParsedStackTrace(parsedStackTrace, exception );
1015 } 1006 }
1016 1007
1017 Dart_WeakPersistentHandle DartUtilities::createPrologueWeakPersistentHandle(Dart _Handle object, void* peer, Dart_WeakPersistentHandleFinalizer weakCallback) 1008 Dart_WeakPersistentHandle DartUtilities::createPrologueWeakPersistentHandle(Dart _Handle object, void* peer, Dart_WeakPersistentHandleFinalizer weakCallback)
1018 { 1009 {
1019 DartWeakCallback* callback = new DartWeakCallback(peer, weakCallback); 1010 DartWeakCallback* callback = new DartWeakCallback(peer, weakCallback);
1020 callback->m_object = Dart_NewPrologueWeakPersistentHandle(object, callback, &weakCallbackWrapper); 1011 callback->m_object = Dart_NewPrologueWeakPersistentHandle(object, callback, &weakCallbackWrapper);
1021 DartDOMData::current()->weakCallbacks()->add(callback); 1012 DartDOMData::current()->weakCallbacks()->add(callback);
1022 return callback->m_object; 1013 return callback->m_object;
1023 } 1014 }
1024 1015
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 Dart_Handle exception = Dart_ErrorGetException(result); 1120 Dart_Handle exception = Dart_ErrorGetException(result);
1130 ASSERT(!Dart_IsError(exception)); 1121 ASSERT(!Dart_IsError(exception));
1131 1122
1132 exception = Dart_ToString(exception); 1123 exception = Dart_ToString(exception);
1133 if (Dart_IsError(exception)) 1124 if (Dart_IsError(exception))
1134 errorMessage = String("Error converting exception to a string: ") + Dart_GetError(exception); 1125 errorMessage = String("Error converting exception to a string: ") + Dart_GetError(exception);
1135 else 1126 else
1136 errorMessage = String("Exception: ") + DartUtilities::toString(excep tion); 1127 errorMessage = String("Exception: ") + DartUtilities::toString(excep tion);
1137 1128
1138 // Print the stack trace. 1129 // Print the stack trace.
1139 Dart_Handle stacktrace = Dart_ErrorGetStacktrace(result); 1130 Dart_ExceptionStackTrace stacktrace;
1140 ASSERT(!Dart_IsError(stacktrace)); 1131 Dart_Handle traceResult = Dart_ErrorGetStacktrace(result, &stacktrace);
1141 Dart_Handle stackTraceConversionException = 0; 1132 ASSERT(!Dart_IsError(traceResult));
1142 callStack = createScriptCallStackFromStackTrace(stacktrace, stackTraceCo nversionException); 1133 callStack = createScriptCallStackFromStackTrace(stacktrace);
1143 if (stackTraceConversionException)
1144 errorMessage.append(String("\nError converting stack trace to a stri ng: ") + DartUtilities::toString(stackTraceConversionException));
1145 } 1134 }
1146 1135
1147 if (context && context->isDocument()) { 1136 if (context && context->isDocument()) {
1148 static_cast<Document*>(context)->reportException(ErrorEvent::create(erro rMessage, sourceURL, lineNumber, 0, 0), callStack, NotSharableCrossOrigin); 1137 static_cast<Document*>(context)->reportException(ErrorEvent::create(erro rMessage, sourceURL, lineNumber, 0, 0), callStack, NotSharableCrossOrigin);
1149 } 1138 }
1150 } 1139 }
1151 1140
1152 Dart_Handle DartUtilities::notImplementedException(const char* fileName, int lin eNumber) 1141 Dart_Handle DartUtilities::notImplementedException(const char* fileName, int lin eNumber)
1153 { 1142 {
1154 Dart_Handle args[2] = { Dart_NewStringFromCString(fileName), Dart_NewInteger (lineNumber) }; 1143 Dart_Handle args[2] = { Dart_NewStringFromCString(fileName), Dart_NewInteger (lineNumber) };
(...skipping 25 matching lines...) Expand all
1180 if (!v) { 1169 if (!v) {
1181 return 0; 1170 return 0;
1182 } 1171 }
1183 ASSERT(valueLen > 0 && static_cast<size_t>(valueLen) > strlen(v)); 1172 ASSERT(valueLen > 0 && static_cast<size_t>(valueLen) > strlen(v));
1184 strncpy(value, v, valueLen); 1173 strncpy(value, v, valueLen);
1185 value[valueLen - 1] = '\0'; 1174 value[valueLen - 1] = '\0';
1186 return strlen(value); 1175 return strlen(value);
1187 #endif 1176 #endif
1188 } 1177 }
1189 } 1178 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698