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

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

Issue 2906153002: [inspector] Support multiple sessions per context group (Closed)
Patch Set: using set per kozy@ Created 3 years, 6 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 | « src/inspector/v8-inspector-impl.cc ('k') | test/inspector/debugger/set-skip-all-pauses.js » ('j') | 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 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
OLDNEW
« no previous file with comments | « src/inspector/v8-inspector-impl.cc ('k') | test/inspector/debugger/set-skip-all-pauses.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698