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

Side by Side Diff: src/inspector/v8-runtime-agent-impl.cc

Issue 2376143002: [inspector] fix crash in wrapping result for async Runtime.evaluate (Closed)
Patch Set: Created 4 years, 2 months 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
« 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 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 private: 109 private:
110 static void thenCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { 110 static void thenCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
111 ProtocolPromiseHandler<Callback>* handler = 111 ProtocolPromiseHandler<Callback>* handler =
112 static_cast<ProtocolPromiseHandler<Callback>*>( 112 static_cast<ProtocolPromiseHandler<Callback>*>(
113 info.Data().As<v8::External>()->Value()); 113 info.Data().As<v8::External>()->Value());
114 DCHECK(handler); 114 DCHECK(handler);
115 v8::Local<v8::Value> value = 115 v8::Local<v8::Value> value =
116 info.Length() > 0 116 info.Length() > 0
117 ? info[0] 117 ? info[0]
118 : v8::Local<v8::Value>::Cast(v8::Undefined(info.GetIsolate())); 118 : v8::Local<v8::Value>::Cast(v8::Undefined(info.GetIsolate()));
119 std::unique_ptr<protocol::Runtime::RemoteObject> wrappedValue(
120 handler->wrapObject(value));
121 if (!wrappedValue) return;
119 handler->m_callback->sendSuccess( 122 handler->m_callback->sendSuccess(
120 handler->wrapObject(value), 123 std::move(wrappedValue), Maybe<protocol::Runtime::ExceptionDetails>());
121 Maybe<protocol::Runtime::ExceptionDetails>());
122 } 124 }
123 125
124 static void catchCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { 126 static void catchCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
125 ProtocolPromiseHandler<Callback>* handler = 127 ProtocolPromiseHandler<Callback>* handler =
126 static_cast<ProtocolPromiseHandler<Callback>*>( 128 static_cast<ProtocolPromiseHandler<Callback>*>(
127 info.Data().As<v8::External>()->Value()); 129 info.Data().As<v8::External>()->Value());
128 DCHECK(handler); 130 DCHECK(handler);
129 v8::Local<v8::Value> value = 131 v8::Local<v8::Value> value =
130 info.Length() > 0 132 info.Length() > 0
131 ? info[0] 133 ? info[0]
132 : v8::Local<v8::Value>::Cast(v8::Undefined(info.GetIsolate())); 134 : v8::Local<v8::Value>::Cast(v8::Undefined(info.GetIsolate()));
133 135
136 std::unique_ptr<protocol::Runtime::RemoteObject> wrappedValue(
137 handler->wrapObject(value));
138 if (!wrappedValue) return;
139
134 std::unique_ptr<V8StackTraceImpl> stack = 140 std::unique_ptr<V8StackTraceImpl> stack =
135 handler->m_inspector->debugger()->captureStackTrace(true); 141 handler->m_inspector->debugger()->captureStackTrace(true);
136 std::unique_ptr<protocol::Runtime::ExceptionDetails> exceptionDetails = 142 std::unique_ptr<protocol::Runtime::ExceptionDetails> exceptionDetails =
137 protocol::Runtime::ExceptionDetails::create() 143 protocol::Runtime::ExceptionDetails::create()
138 .setExceptionId(handler->m_inspector->nextExceptionId()) 144 .setExceptionId(handler->m_inspector->nextExceptionId())
139 .setText("Uncaught (in promise)") 145 .setText("Uncaught (in promise)")
140 .setLineNumber(stack && !stack->isEmpty() ? stack->topLineNumber() 146 .setLineNumber(stack && !stack->isEmpty() ? stack->topLineNumber()
141 : 0) 147 : 0)
142 .setColumnNumber( 148 .setColumnNumber(
143 stack && !stack->isEmpty() ? stack->topColumnNumber() : 0) 149 stack && !stack->isEmpty() ? stack->topColumnNumber() : 0)
144 .setException(handler->wrapObject(value)) 150 .setException(wrappedValue->clone())
145 .build(); 151 .build();
146 if (stack) 152 if (stack)
147 exceptionDetails->setStackTrace(stack->buildInspectorObjectImpl()); 153 exceptionDetails->setStackTrace(stack->buildInspectorObjectImpl());
148 if (stack && !stack->isEmpty()) 154 if (stack && !stack->isEmpty())
149 exceptionDetails->setScriptId(toString16(stack->topScriptId())); 155 exceptionDetails->setScriptId(toString16(stack->topScriptId()));
150 handler->m_callback->sendSuccess(handler->wrapObject(value), 156 handler->m_callback->sendSuccess(std::move(wrappedValue),
151 std::move(exceptionDetails)); 157 std::move(exceptionDetails));
152 } 158 }
153 159
154 ProtocolPromiseHandler(V8InspectorImpl* inspector, int contextGroupId, 160 ProtocolPromiseHandler(V8InspectorImpl* inspector, int contextGroupId,
155 int executionContextId, const String16& objectGroup, 161 int executionContextId, const String16& objectGroup,
156 bool returnByValue, bool generatePreview, 162 bool returnByValue, bool generatePreview,
157 std::unique_ptr<Callback> callback) 163 std::unique_ptr<Callback> callback)
158 : m_inspector(inspector), 164 : m_inspector(inspector),
159 m_contextGroupId(contextGroupId), 165 m_contextGroupId(contextGroupId),
160 m_executionContextId(executionContextId), 166 m_executionContextId(executionContextId),
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 } 729 }
724 730
725 bool V8RuntimeAgentImpl::reportMessage(V8ConsoleMessage* message, 731 bool V8RuntimeAgentImpl::reportMessage(V8ConsoleMessage* message,
726 bool generatePreview) { 732 bool generatePreview) {
727 message->reportToFrontend(&m_frontend, m_session, generatePreview); 733 message->reportToFrontend(&m_frontend, m_session, generatePreview);
728 m_frontend.flush(); 734 m_frontend.flush();
729 return m_inspector->hasConsoleMessageStorage(m_session->contextGroupId()); 735 return m_inspector->hasConsoleMessageStorage(m_session->contextGroupId());
730 } 736 }
731 737
732 } // namespace v8_inspector 738 } // namespace v8_inspector
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