| Index: third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp
|
| diff --git a/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp b/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp
|
| index c9e1c7a4822f89ce8e5270de4c875c20bd347264..0a3bed749ff018e6ca0c282d865aef3306a205af 100644
|
| --- a/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp
|
| +++ b/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp
|
| @@ -36,9 +36,7 @@ WorkerInspectorProxy::AllProxies() {
|
| }
|
|
|
| WorkerInspectorProxy::WorkerInspectorProxy()
|
| - : worker_thread_(nullptr),
|
| - execution_context_(nullptr),
|
| - page_inspector_(nullptr) {}
|
| + : worker_thread_(nullptr), execution_context_(nullptr) {}
|
|
|
| WorkerInspectorProxy* WorkerInspectorProxy::Create() {
|
| return new WorkerInspectorProxy();
|
| @@ -84,13 +82,15 @@ void WorkerInspectorProxy::WorkerThreadTerminated() {
|
| }
|
|
|
| worker_thread_ = nullptr;
|
| - page_inspector_ = nullptr;
|
| + page_inspectors_.clear();
|
| execution_context_ = nullptr;
|
| }
|
|
|
| -void WorkerInspectorProxy::DispatchMessageFromWorker(const String& message) {
|
| - if (page_inspector_)
|
| - page_inspector_->DispatchMessageFromWorker(this, message);
|
| +void WorkerInspectorProxy::DispatchMessageFromWorker(int session_id,
|
| + const String& message) {
|
| + auto it = page_inspectors_.find(session_id);
|
| + if (it != page_inspectors_.end())
|
| + it->value->DispatchMessageFromWorker(this, session_id, message);
|
| }
|
|
|
| void WorkerInspectorProxy::AddConsoleMessageFromWorker(
|
| @@ -101,63 +101,74 @@ void WorkerInspectorProxy::AddConsoleMessageFromWorker(
|
| level, message, std::move(location), inspector_id_));
|
| }
|
|
|
| -static void ConnectToWorkerGlobalScopeInspectorTask(
|
| - WorkerThread* worker_thread) {
|
| +static void ConnectToWorkerGlobalScopeInspectorTask(WorkerThread* worker_thread,
|
| + int session_id) {
|
| if (WorkerInspectorController* inspector =
|
| - worker_thread->GetWorkerInspectorController())
|
| - inspector->ConnectFrontend();
|
| + worker_thread->GetWorkerInspectorController()) {
|
| + inspector->ConnectFrontend(session_id);
|
| + }
|
| }
|
|
|
| void WorkerInspectorProxy::ConnectToInspector(
|
| + int session_id,
|
| WorkerInspectorProxy::PageInspector* page_inspector) {
|
| if (!worker_thread_)
|
| return;
|
| - DCHECK(!page_inspector_);
|
| - page_inspector_ = page_inspector;
|
| + DCHECK(page_inspectors_.find(session_id) == page_inspectors_.end());
|
| + page_inspectors_.insert(session_id, page_inspector);
|
| worker_thread_->AppendDebuggerTask(
|
| CrossThreadBind(ConnectToWorkerGlobalScopeInspectorTask,
|
| - CrossThreadUnretained(worker_thread_)));
|
| + CrossThreadUnretained(worker_thread_), session_id));
|
| }
|
|
|
| static void DisconnectFromWorkerGlobalScopeInspectorTask(
|
| - WorkerThread* worker_thread) {
|
| + WorkerThread* worker_thread,
|
| + int session_id) {
|
| if (WorkerInspectorController* inspector =
|
| - worker_thread->GetWorkerInspectorController())
|
| - inspector->DisconnectFrontend();
|
| + worker_thread->GetWorkerInspectorController()) {
|
| + inspector->DisconnectFrontend(session_id);
|
| + }
|
| }
|
|
|
| void WorkerInspectorProxy::DisconnectFromInspector(
|
| + int session_id,
|
| WorkerInspectorProxy::PageInspector* page_inspector) {
|
| - DCHECK(page_inspector_ == page_inspector);
|
| - page_inspector_ = nullptr;
|
| - if (worker_thread_)
|
| + DCHECK(page_inspectors_.at(session_id) == page_inspector);
|
| + page_inspectors_.erase(session_id);
|
| + if (worker_thread_) {
|
| worker_thread_->AppendDebuggerTask(
|
| CrossThreadBind(DisconnectFromWorkerGlobalScopeInspectorTask,
|
| - CrossThreadUnretained(worker_thread_)));
|
| + CrossThreadUnretained(worker_thread_), session_id));
|
| + }
|
| }
|
|
|
| -static void DispatchOnInspectorBackendTask(const String& message,
|
| +static void DispatchOnInspectorBackendTask(int session_id,
|
| + const String& message,
|
| WorkerThread* worker_thread) {
|
| if (WorkerInspectorController* inspector =
|
| - worker_thread->GetWorkerInspectorController())
|
| - inspector->DispatchMessageFromFrontend(message);
|
| + worker_thread->GetWorkerInspectorController()) {
|
| + inspector->DispatchMessageFromFrontend(session_id, message);
|
| + }
|
| }
|
|
|
| -void WorkerInspectorProxy::SendMessageToInspector(const String& message) {
|
| - if (worker_thread_)
|
| +void WorkerInspectorProxy::SendMessageToInspector(int session_id,
|
| + const String& message) {
|
| + if (worker_thread_) {
|
| worker_thread_->AppendDebuggerTask(
|
| - CrossThreadBind(DispatchOnInspectorBackendTask, message,
|
| + CrossThreadBind(DispatchOnInspectorBackendTask, session_id, message,
|
| CrossThreadUnretained(worker_thread_)));
|
| + }
|
| }
|
|
|
| -void WorkerInspectorProxy::WriteTimelineStartedEvent(const String& session_id) {
|
| +void WorkerInspectorProxy::WriteTimelineStartedEvent(
|
| + const String& tracing_session_id) {
|
| if (!worker_thread_)
|
| return;
|
| TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"),
|
| "TracingSessionIdForWorker", TRACE_EVENT_SCOPE_THREAD,
|
| "data",
|
| InspectorTracingSessionIdForWorkerEvent::Data(
|
| - session_id, InspectorId(), worker_thread_));
|
| + tracing_session_id, InspectorId(), worker_thread_));
|
| }
|
|
|
| DEFINE_TRACE(WorkerInspectorProxy) {
|
|
|