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

Unified Diff: third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp

Issue 2951833002: [DevTools] Support multiple sessions in dedicated workers (Closed)
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp
diff --git a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp
index bb020d7f8abfe5f67149d78f76cc2b885655c7e3..08f91c4c75a2de53150a52a22727fd85669d38fd 100644
--- a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp
+++ b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp
@@ -61,46 +61,53 @@ WorkerInspectorController::~WorkerInspectorController() {
DCHECK(!thread_);
}
-void WorkerInspectorController::ConnectFrontend() {
- if (session_)
+void WorkerInspectorController::ConnectFrontend(int session_id) {
+ if (sessions_.find(session_id) != sessions_.end())
return;
- // sessionId will be overwritten by WebDevToolsAgent::sendProtocolNotification
- // call.
- session_ = new InspectorSession(this, probe_sink_.Get(), 0,
- debugger_->GetV8Inspector(),
- debugger_->ContextGroupId(thread_), nullptr);
- session_->Append(
+ InspectorSession* session = new InspectorSession(
+ this, probe_sink_.Get(), session_id, debugger_->GetV8Inspector(),
+ debugger_->ContextGroupId(thread_), nullptr);
+ session->Append(
new InspectorLogAgent(thread_->GetConsoleMessageStorage(), nullptr));
- thread_->GetWorkerBackingThread().BackingThread().AddTaskObserver(this);
+ if (sessions_.IsEmpty())
+ thread_->GetWorkerBackingThread().BackingThread().AddTaskObserver(this);
+ sessions_.insert(session_id, session);
}
-void WorkerInspectorController::DisconnectFrontend() {
- if (!session_)
+void WorkerInspectorController::DisconnectFrontend(int session_id) {
+ auto it = sessions_.find(session_id);
+ if (it == sessions_.end())
return;
- session_->Dispose();
- session_.Clear();
- thread_->GetWorkerBackingThread().BackingThread().RemoveTaskObserver(this);
+ it->value->Dispose();
+ sessions_.erase(it);
+ if (sessions_.IsEmpty())
+ thread_->GetWorkerBackingThread().BackingThread().RemoveTaskObserver(this);
}
void WorkerInspectorController::DispatchMessageFromFrontend(
+ int session_id,
const String& message) {
- if (!session_)
+ auto it = sessions_.find(session_id);
+ if (it == sessions_.end())
return;
String method;
if (!protocol::DispatcherBase::getCommandName(message, &method))
return;
- session_->DispatchProtocolMessage(method, message);
+ it->value->DispatchProtocolMessage(method, message);
}
void WorkerInspectorController::Dispose() {
- DisconnectFrontend();
+ Vector<int> ids;
+ CopyKeysToVector(sessions_, ids);
+ for (int session_id : ids)
+ DisconnectFrontend(session_id);
thread_ = nullptr;
}
void WorkerInspectorController::FlushProtocolNotifications() {
- if (session_)
- session_->flushProtocolNotifications();
+ for (auto& it : sessions_)
+ it.value->flushProtocolNotifications();
}
void WorkerInspectorController::SendProtocolMessage(int session_id,
@@ -108,19 +115,20 @@ void WorkerInspectorController::SendProtocolMessage(int session_id,
const String& response,
const String& state) {
// Worker messages are wrapped, no need to handle callId or state.
- thread_->GetWorkerReportingProxy().PostMessageToPageInspector(response);
+ thread_->GetWorkerReportingProxy().PostMessageToPageInspector(session_id,
+ response);
}
void WorkerInspectorController::WillProcessTask() {}
void WorkerInspectorController::DidProcessTask() {
- if (session_)
- session_->flushProtocolNotifications();
+ for (auto& it : sessions_)
+ it.value->flushProtocolNotifications();
}
DEFINE_TRACE(WorkerInspectorController) {
visitor->Trace(probe_sink_);
- visitor->Trace(session_);
+ visitor->Trace(sessions_);
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698