summaryrefslogtreecommitdiff
path: root/deps/v8/src/inspector/v8-inspector-session-impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/inspector/v8-inspector-session-impl.cc')
-rw-r--r--deps/v8/src/inspector/v8-inspector-session-impl.cc99
1 files changed, 35 insertions, 64 deletions
diff --git a/deps/v8/src/inspector/v8-inspector-session-impl.cc b/deps/v8/src/inspector/v8-inspector-session-impl.cc
index 2674fc2f63..f0bbc3b3c7 100644
--- a/deps/v8/src/inspector/v8-inspector-session-impl.cc
+++ b/deps/v8/src/inspector/v8-inspector-session-impl.cc
@@ -43,17 +43,19 @@ int V8ContextInfo::executionContextId(v8::Local<v8::Context> context) {
}
std::unique_ptr<V8InspectorSessionImpl> V8InspectorSessionImpl::create(
- V8InspectorImpl* inspector, int contextGroupId,
+ V8InspectorImpl* inspector, int contextGroupId, int sessionId,
V8Inspector::Channel* channel, const StringView& state) {
- return std::unique_ptr<V8InspectorSessionImpl>(
- new V8InspectorSessionImpl(inspector, contextGroupId, channel, state));
+ return std::unique_ptr<V8InspectorSessionImpl>(new V8InspectorSessionImpl(
+ inspector, contextGroupId, sessionId, channel, state));
}
V8InspectorSessionImpl::V8InspectorSessionImpl(V8InspectorImpl* inspector,
int contextGroupId,
+ int sessionId,
V8Inspector::Channel* channel,
const StringView& savedState)
: m_contextGroupId(contextGroupId),
+ m_sessionId(sessionId),
m_inspector(inspector),
m_channel(channel),
m_customObjectFormatterEnabled(false),
@@ -181,46 +183,27 @@ void V8InspectorSessionImpl::reset() {
void V8InspectorSessionImpl::discardInjectedScripts() {
m_inspectedObjects.clear();
- const V8InspectorImpl::ContextByIdMap* contexts =
- m_inspector->contextGroup(m_contextGroupId);
- if (!contexts) return;
-
- std::vector<int> keys;
- keys.reserve(contexts->size());
- for (auto& idContext : *contexts) keys.push_back(idContext.first);
- for (auto& key : keys) {
- contexts = m_inspector->contextGroup(m_contextGroupId);
- if (!contexts) continue;
- auto contextIt = contexts->find(key);
- if (contextIt != contexts->end())
- contextIt->second
- ->discardInjectedScript(); // This may destroy some contexts.
- }
+ int sessionId = m_sessionId;
+ m_inspector->forEachContext(m_contextGroupId,
+ [&sessionId](InspectedContext* context) {
+ context->discardInjectedScript(sessionId);
+ });
}
Response V8InspectorSessionImpl::findInjectedScript(
int contextId, InjectedScript*& injectedScript) {
injectedScript = nullptr;
- if (!contextId)
- return Response::Error("Cannot find context with specified id");
-
- const V8InspectorImpl::ContextByIdMap* contexts =
- m_inspector->contextGroup(m_contextGroupId);
- if (!contexts)
- return Response::Error("Cannot find context with specified id");
-
- auto contextsIt = contexts->find(contextId);
- if (contextsIt == contexts->end())
- return Response::Error("Cannot find context with specified id");
-
- const std::unique_ptr<InspectedContext>& context = contextsIt->second;
- if (!context->getInjectedScript()) {
- if (!context->createInjectedScript())
+ InspectedContext* context =
+ m_inspector->getContext(m_contextGroupId, contextId);
+ if (!context) return Response::Error("Cannot find context with specified id");
+ injectedScript = context->getInjectedScript(m_sessionId);
+ if (!injectedScript) {
+ if (!context->createInjectedScript(m_sessionId))
return Response::Error("Cannot access specified execution context");
+ injectedScript = context->getInjectedScript(m_sessionId);
if (m_customObjectFormatterEnabled)
- context->getInjectedScript()->setCustomObjectFormatterEnabled(true);
+ injectedScript->setCustomObjectFormatterEnabled(true);
}
- injectedScript = context->getInjectedScript();
return Response::OK();
}
@@ -234,22 +217,12 @@ void V8InspectorSessionImpl::releaseObjectGroup(const StringView& objectGroup) {
}
void V8InspectorSessionImpl::releaseObjectGroup(const String16& objectGroup) {
- const V8InspectorImpl::ContextByIdMap* contexts =
- m_inspector->contextGroup(m_contextGroupId);
- if (!contexts) return;
-
- std::vector<int> keys;
- for (auto& idContext : *contexts) keys.push_back(idContext.first);
- for (auto& key : keys) {
- contexts = m_inspector->contextGroup(m_contextGroupId);
- if (!contexts) continue;
- auto contextsIt = contexts->find(key);
- if (contextsIt == contexts->end()) continue;
- InjectedScript* injectedScript = contextsIt->second->getInjectedScript();
- if (injectedScript)
- injectedScript->releaseObjectGroup(
- objectGroup); // This may destroy some contexts.
- }
+ int sessionId = m_sessionId;
+ m_inspector->forEachContext(
+ m_contextGroupId, [&objectGroup, &sessionId](InspectedContext* context) {
+ InjectedScript* injectedScript = context->getInjectedScript(sessionId);
+ if (injectedScript) injectedScript->releaseObjectGroup(objectGroup);
+ });
}
bool V8InspectorSessionImpl::unwrapObject(
@@ -319,22 +292,20 @@ V8InspectorSessionImpl::wrapTable(v8::Local<v8::Context> context,
void V8InspectorSessionImpl::setCustomObjectFormatterEnabled(bool enabled) {
m_customObjectFormatterEnabled = enabled;
- const V8InspectorImpl::ContextByIdMap* contexts =
- m_inspector->contextGroup(m_contextGroupId);
- if (!contexts) return;
- for (auto& idContext : *contexts) {
- InjectedScript* injectedScript = idContext.second->getInjectedScript();
- if (injectedScript)
- injectedScript->setCustomObjectFormatterEnabled(enabled);
- }
+ int sessionId = m_sessionId;
+ m_inspector->forEachContext(
+ m_contextGroupId, [&enabled, &sessionId](InspectedContext* context) {
+ InjectedScript* injectedScript = context->getInjectedScript(sessionId);
+ if (injectedScript)
+ injectedScript->setCustomObjectFormatterEnabled(enabled);
+ });
}
void V8InspectorSessionImpl::reportAllContexts(V8RuntimeAgentImpl* agent) {
- const V8InspectorImpl::ContextByIdMap* contexts =
- m_inspector->contextGroup(m_contextGroupId);
- if (!contexts) return;
- for (auto& idContext : *contexts)
- agent->reportExecutionContextCreated(idContext.second.get());
+ m_inspector->forEachContext(m_contextGroupId,
+ [&agent](InspectedContext* context) {
+ agent->reportExecutionContextCreated(context);
+ });
}
void V8InspectorSessionImpl::dispatchProtocolMessage(