| Index: content/browser/devtools/worker_devtools_agent_host.cc
|
| diff --git a/content/browser/devtools/worker_devtools_agent_host.cc b/content/browser/devtools/worker_devtools_agent_host.cc
|
| index c545a57113eccb58241b454df2a49e822d498120..2839937066504a8ba21af4b7e08690b502f77dcb 100644
|
| --- a/content/browser/devtools/worker_devtools_agent_host.cc
|
| +++ b/content/browser/devtools/worker_devtools_agent_host.cc
|
| @@ -30,6 +30,10 @@ void WorkerDevToolsAgentHost::AttachSession(DevToolsSession* session) {
|
| host->Send(new DevToolsAgentMsg_Attach(
|
| worker_id_.second, GetId(), session->session_id()));
|
| }
|
| + chunk_processors_[session->session_id()].reset(
|
| + new DevToolsMessageChunkProcessor(
|
| + base::Bind(&WorkerDevToolsAgentHost::SendChunkedMessage,
|
| + base::Unretained(this))));
|
| session->SetFallThroughForNotFound(true);
|
| session->AddHandler(base::WrapUnique(new protocol::InspectorHandler()));
|
| session->AddHandler(base::WrapUnique(new protocol::NetworkHandler()));
|
| @@ -40,6 +44,7 @@ void WorkerDevToolsAgentHost::AttachSession(DevToolsSession* session) {
|
| void WorkerDevToolsAgentHost::DetachSession(int session_id) {
|
| if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first))
|
| host->Send(new DevToolsAgentMsg_Detach(worker_id_.second, session_id));
|
| + chunk_processors_.erase(session_id);
|
| OnAttachedStateChanged(false);
|
| if (state_ == WORKER_INSPECTED) {
|
| state_ = WORKER_UNINSPECTED;
|
| @@ -102,9 +107,12 @@ void WorkerDevToolsAgentHost::WorkerReadyForInspection() {
|
| state_ = WORKER_INSPECTED;
|
| AttachToWorker();
|
| if (RenderProcessHost* host = RenderProcessHost::FromID(worker_id_.first)) {
|
| + std::string state_cookie;
|
| + auto it = chunk_processors_.find(session()->session_id());
|
| + if (it != chunk_processors_.end())
|
| + state_cookie = it->second->state_cookie();
|
| host->Send(new DevToolsAgentMsg_Reattach(
|
| - worker_id_.second, GetId(), session()->session_id(),
|
| - chunk_processor_.state_cookie()));
|
| + worker_id_.second, GetId(), session()->session_id(), state_cookie));
|
| }
|
| OnAttachedStateChanged(true);
|
| } else if (state_ == WORKER_PAUSED_FOR_DEBUG_ON_START) {
|
| @@ -137,8 +145,6 @@ bool WorkerDevToolsAgentHost::IsTerminated() {
|
|
|
| WorkerDevToolsAgentHost::WorkerDevToolsAgentHost(WorkerId worker_id)
|
| : DevToolsAgentHostImpl(base::GenerateGUID()),
|
| - chunk_processor_(base::Bind(&WorkerDevToolsAgentHost::SendMessageToClient,
|
| - base::Unretained(this))),
|
| state_(WORKER_UNINSPECTED),
|
| worker_id_(worker_id) {
|
| WorkerCreated();
|
| @@ -167,10 +173,15 @@ void WorkerDevToolsAgentHost::WorkerCreated() {
|
|
|
| void WorkerDevToolsAgentHost::OnDispatchOnInspectorFrontend(
|
| const DevToolsMessageChunk& message) {
|
| - if (!IsAttached())
|
| - return;
|
| + auto it = chunk_processors_.find(message.session_id);
|
| + if (it != chunk_processors_.end())
|
| + it->second->ProcessChunkedMessageFromAgent(message);
|
| +}
|
|
|
| - chunk_processor_.ProcessChunkedMessageFromAgent(message);
|
| +void WorkerDevToolsAgentHost::SendChunkedMessage(int session_id,
|
| + const std::string& message) {
|
| + if (session() && session()->session_id() == session_id)
|
| + session()->SendMessageToClient(message);
|
| }
|
|
|
| } // namespace content
|
|
|