OLD | NEW |
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 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 handler->m_callback->sendSuccess(std::move(wrappedValue), | 154 handler->m_callback->sendSuccess(std::move(wrappedValue), |
155 std::move(exceptionDetails)); | 155 std::move(exceptionDetails)); |
156 } | 156 } |
157 | 157 |
158 ProtocolPromiseHandler(V8InspectorSessionImpl* session, | 158 ProtocolPromiseHandler(V8InspectorSessionImpl* session, |
159 int executionContextId, const String16& objectGroup, | 159 int executionContextId, const String16& objectGroup, |
160 bool returnByValue, bool generatePreview, | 160 bool returnByValue, bool generatePreview, |
161 std::unique_ptr<Callback> callback) | 161 std::unique_ptr<Callback> callback) |
162 : m_inspector(session->inspector()), | 162 : m_inspector(session->inspector()), |
163 m_sessionId(session->sessionId()), | 163 m_sessionId(session->sessionId()), |
| 164 m_contextGroupId(session->contextGroupId()), |
164 m_executionContextId(executionContextId), | 165 m_executionContextId(executionContextId), |
165 m_objectGroup(objectGroup), | 166 m_objectGroup(objectGroup), |
166 m_returnByValue(returnByValue), | 167 m_returnByValue(returnByValue), |
167 m_generatePreview(generatePreview), | 168 m_generatePreview(generatePreview), |
168 m_callback(std::move(callback)), | 169 m_callback(std::move(callback)), |
169 m_wrapper(m_inspector->isolate(), | 170 m_wrapper(m_inspector->isolate(), |
170 v8::External::New(m_inspector->isolate(), this)) { | 171 v8::External::New(m_inspector->isolate(), this)) { |
171 m_wrapper.SetWeak(this, cleanup, v8::WeakCallbackType::kParameter); | 172 m_wrapper.SetWeak(this, cleanup, v8::WeakCallbackType::kParameter); |
172 } | 173 } |
173 | 174 |
174 static void cleanup( | 175 static void cleanup( |
175 const v8::WeakCallbackInfo<ProtocolPromiseHandler<Callback>>& data) { | 176 const v8::WeakCallbackInfo<ProtocolPromiseHandler<Callback>>& data) { |
176 if (!data.GetParameter()->m_wrapper.IsEmpty()) { | 177 if (!data.GetParameter()->m_wrapper.IsEmpty()) { |
177 data.GetParameter()->m_wrapper.Reset(); | 178 data.GetParameter()->m_wrapper.Reset(); |
178 data.SetSecondPassCallback(cleanup); | 179 data.SetSecondPassCallback(cleanup); |
179 } else { | 180 } else { |
180 data.GetParameter()->m_callback->sendFailure( | 181 data.GetParameter()->m_callback->sendFailure( |
181 Response::Error("Promise was collected")); | 182 Response::Error("Promise was collected")); |
182 delete data.GetParameter(); | 183 delete data.GetParameter(); |
183 } | 184 } |
184 } | 185 } |
185 | 186 |
186 std::unique_ptr<protocol::Runtime::RemoteObject> wrapObject( | 187 std::unique_ptr<protocol::Runtime::RemoteObject> wrapObject( |
187 v8::Local<v8::Value> value) { | 188 v8::Local<v8::Value> value) { |
188 V8InspectorSessionImpl* session = m_inspector->sessionById(m_sessionId); | 189 V8InspectorSessionImpl* session = |
| 190 m_inspector->sessionById(m_contextGroupId, m_sessionId); |
189 if (!session) { | 191 if (!session) { |
190 m_callback->sendFailure(Response::Error("No session")); | 192 m_callback->sendFailure(Response::Error("No session")); |
191 return nullptr; | 193 return nullptr; |
192 } | 194 } |
193 InjectedScript::ContextScope scope(session, m_executionContextId); | 195 InjectedScript::ContextScope scope(session, m_executionContextId); |
194 Response response = scope.initialize(); | 196 Response response = scope.initialize(); |
195 if (!response.isSuccess()) { | 197 if (!response.isSuccess()) { |
196 m_callback->sendFailure(response); | 198 m_callback->sendFailure(response); |
197 return nullptr; | 199 return nullptr; |
198 } | 200 } |
199 std::unique_ptr<protocol::Runtime::RemoteObject> wrappedValue; | 201 std::unique_ptr<protocol::Runtime::RemoteObject> wrappedValue; |
200 response = scope.injectedScript()->wrapObject( | 202 response = scope.injectedScript()->wrapObject( |
201 value, m_objectGroup, m_returnByValue, m_generatePreview, | 203 value, m_objectGroup, m_returnByValue, m_generatePreview, |
202 &wrappedValue); | 204 &wrappedValue); |
203 if (!response.isSuccess()) { | 205 if (!response.isSuccess()) { |
204 m_callback->sendFailure(response); | 206 m_callback->sendFailure(response); |
205 return nullptr; | 207 return nullptr; |
206 } | 208 } |
207 return wrappedValue; | 209 return wrappedValue; |
208 } | 210 } |
209 | 211 |
210 V8InspectorImpl* m_inspector; | 212 V8InspectorImpl* m_inspector; |
211 int m_sessionId; | 213 int m_sessionId; |
| 214 int m_contextGroupId; |
212 int m_executionContextId; | 215 int m_executionContextId; |
213 String16 m_objectGroup; | 216 String16 m_objectGroup; |
214 bool m_returnByValue; | 217 bool m_returnByValue; |
215 bool m_generatePreview; | 218 bool m_generatePreview; |
216 std::unique_ptr<Callback> m_callback; | 219 std::unique_ptr<Callback> m_callback; |
217 v8::Global<v8::External> m_wrapper; | 220 v8::Global<v8::External> m_wrapper; |
218 }; | 221 }; |
219 | 222 |
220 template <typename Callback> | 223 template <typename Callback> |
221 bool wrapEvaluateResultAsync(InjectedScript* injectedScript, | 224 bool wrapEvaluateResultAsync(InjectedScript* injectedScript, |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 m_session->setCustomObjectFormatterEnabled(false); | 692 m_session->setCustomObjectFormatterEnabled(false); |
690 reset(); | 693 reset(); |
691 m_inspector->client()->endEnsureAllContextsInGroup( | 694 m_inspector->client()->endEnsureAllContextsInGroup( |
692 m_session->contextGroupId()); | 695 m_session->contextGroupId()); |
693 return Response::OK(); | 696 return Response::OK(); |
694 } | 697 } |
695 | 698 |
696 void V8RuntimeAgentImpl::reset() { | 699 void V8RuntimeAgentImpl::reset() { |
697 m_compiledScripts.clear(); | 700 m_compiledScripts.clear(); |
698 if (m_enabled) { | 701 if (m_enabled) { |
699 m_inspector->forEachContext( | 702 int sessionId = m_session->sessionId(); |
700 m_session->contextGroupId(), | 703 m_inspector->forEachContext(m_session->contextGroupId(), |
701 [](InspectedContext* context) { context->setReported(false); }); | 704 [&sessionId](InspectedContext* context) { |
| 705 context->setReported(sessionId, false); |
| 706 }); |
702 m_frontend.executionContextsCleared(); | 707 m_frontend.executionContextsCleared(); |
703 } | 708 } |
704 } | 709 } |
705 | 710 |
706 void V8RuntimeAgentImpl::reportExecutionContextCreated( | 711 void V8RuntimeAgentImpl::reportExecutionContextCreated( |
707 InspectedContext* context) { | 712 InspectedContext* context) { |
708 if (!m_enabled) return; | 713 if (!m_enabled) return; |
709 context->setReported(true); | 714 context->setReported(m_session->sessionId(), true); |
710 std::unique_ptr<protocol::Runtime::ExecutionContextDescription> description = | 715 std::unique_ptr<protocol::Runtime::ExecutionContextDescription> description = |
711 protocol::Runtime::ExecutionContextDescription::create() | 716 protocol::Runtime::ExecutionContextDescription::create() |
712 .setId(context->contextId()) | 717 .setId(context->contextId()) |
713 .setName(context->humanReadableName()) | 718 .setName(context->humanReadableName()) |
714 .setOrigin(context->origin()) | 719 .setOrigin(context->origin()) |
715 .build(); | 720 .build(); |
716 if (!context->auxData().isEmpty()) | 721 if (!context->auxData().isEmpty()) |
717 description->setAuxData(protocol::DictionaryValue::cast( | 722 description->setAuxData(protocol::DictionaryValue::cast( |
718 protocol::StringUtil::parseJSON(context->auxData()))); | 723 protocol::StringUtil::parseJSON(context->auxData()))); |
719 m_frontend.executionContextCreated(std::move(description)); | 724 m_frontend.executionContextCreated(std::move(description)); |
720 } | 725 } |
721 | 726 |
722 void V8RuntimeAgentImpl::reportExecutionContextDestroyed( | 727 void V8RuntimeAgentImpl::reportExecutionContextDestroyed( |
723 InspectedContext* context) { | 728 InspectedContext* context) { |
724 if (m_enabled && context->isReported()) { | 729 if (m_enabled && context->isReported(m_session->sessionId())) { |
725 context->setReported(false); | 730 context->setReported(m_session->sessionId(), false); |
726 m_frontend.executionContextDestroyed(context->contextId()); | 731 m_frontend.executionContextDestroyed(context->contextId()); |
727 } | 732 } |
728 } | 733 } |
729 | 734 |
730 void V8RuntimeAgentImpl::inspect( | 735 void V8RuntimeAgentImpl::inspect( |
731 std::unique_ptr<protocol::Runtime::RemoteObject> objectToInspect, | 736 std::unique_ptr<protocol::Runtime::RemoteObject> objectToInspect, |
732 std::unique_ptr<protocol::DictionaryValue> hints) { | 737 std::unique_ptr<protocol::DictionaryValue> hints) { |
733 if (m_enabled) | 738 if (m_enabled) |
734 m_frontend.inspectRequested(std::move(objectToInspect), std::move(hints)); | 739 m_frontend.inspectRequested(std::move(objectToInspect), std::move(hints)); |
735 } | 740 } |
736 | 741 |
737 void V8RuntimeAgentImpl::messageAdded(V8ConsoleMessage* message) { | 742 void V8RuntimeAgentImpl::messageAdded(V8ConsoleMessage* message) { |
738 if (m_enabled) reportMessage(message, true); | 743 if (m_enabled) reportMessage(message, true); |
739 } | 744 } |
740 | 745 |
741 bool V8RuntimeAgentImpl::reportMessage(V8ConsoleMessage* message, | 746 bool V8RuntimeAgentImpl::reportMessage(V8ConsoleMessage* message, |
742 bool generatePreview) { | 747 bool generatePreview) { |
743 message->reportToFrontend(&m_frontend, m_session, generatePreview); | 748 message->reportToFrontend(&m_frontend, m_session, generatePreview); |
744 m_frontend.flush(); | 749 m_frontend.flush(); |
745 return m_inspector->hasConsoleMessageStorage(m_session->contextGroupId()); | 750 return m_inspector->hasConsoleMessageStorage(m_session->contextGroupId()); |
746 } | 751 } |
747 | 752 |
748 } // namespace v8_inspector | 753 } // namespace v8_inspector |
OLD | NEW |