| Index: third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
|
| diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
|
| index 62258a2b8710f2eaec185c10294079bebbc3a564..5565ad04fbf58ede298e00a948a3868eb29a7dd8 100644
|
| --- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
|
| +++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
|
| @@ -254,8 +254,9 @@ public:
|
|
|
| class DebuggerTask : public InspectorTaskRunner::Task {
|
| public:
|
| - DebuggerTask(PassOwnPtr<WebDevToolsAgent::MessageDescriptor> descriptor)
|
| - : m_descriptor(descriptor)
|
| + DebuggerTask(int sessionId, PassOwnPtr<WebDevToolsAgent::MessageDescriptor> descriptor)
|
| + : m_sessionId(sessionId)
|
| + , m_descriptor(descriptor)
|
| {
|
| }
|
|
|
| @@ -268,10 +269,11 @@ public:
|
|
|
| WebDevToolsAgentImpl* agentImpl = static_cast<WebDevToolsAgentImpl*>(webagent);
|
| if (agentImpl->m_attached)
|
| - agentImpl->dispatchMessageFromFrontend(m_descriptor->message());
|
| + agentImpl->dispatchMessageFromFrontend(m_sessionId, m_descriptor->message());
|
| }
|
|
|
| private:
|
| + int m_sessionId;
|
| OwnPtr<WebDevToolsAgent::MessageDescriptor> m_descriptor;
|
| };
|
|
|
| @@ -331,6 +333,7 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl(
|
| , m_pageConsoleAgent(nullptr)
|
| , m_agents(m_instrumentingAgents.get(), m_state.get())
|
| , m_deferredAgentsInitialized(false)
|
| + , m_sessionId(0)
|
| {
|
| ASSERT(isMainThread());
|
| ASSERT(m_webLocalFrameImpl->frame());
|
| @@ -497,13 +500,14 @@ void WebDevToolsAgentImpl::registerAgent(PassOwnPtrWillBeRawPtr<InspectorAgent>
|
| m_agents.append(agent);
|
| }
|
|
|
| -void WebDevToolsAgentImpl::attach(const WebString& hostId)
|
| +void WebDevToolsAgentImpl::attach(const WebString& hostId, int sessionId)
|
| {
|
| if (m_attached)
|
| return;
|
|
|
| // Set the attached bit first so that sync notifications were delivered.
|
| m_attached = true;
|
| + m_sessionId = sessionId;
|
|
|
| initializeDeferredAgents();
|
| m_resourceAgent->setHostId(hostId);
|
| @@ -522,12 +526,12 @@ void WebDevToolsAgentImpl::attach(const WebString& hostId)
|
| Platform::current()->currentThread()->addTaskObserver(this);
|
| }
|
|
|
| -void WebDevToolsAgentImpl::reattach(const WebString& hostId, const WebString& savedState)
|
| +void WebDevToolsAgentImpl::reattach(const WebString& hostId, int sessionId, const WebString& savedState)
|
| {
|
| if (m_attached)
|
| return;
|
|
|
| - attach(hostId);
|
| + attach(hostId, sessionId);
|
| m_state->loadFromCookie(savedState);
|
| m_agents.restore();
|
| }
|
| @@ -554,6 +558,7 @@ void WebDevToolsAgentImpl::detach()
|
| InspectorInstrumentation::frontendDeleted();
|
| InspectorInstrumentation::unregisterInstrumentingAgents(m_instrumentingAgents.get());
|
|
|
| + m_sessionId = 0;
|
| m_attached = false;
|
| }
|
|
|
| @@ -598,21 +603,21 @@ void WebDevToolsAgentImpl::disableTracing()
|
| m_client->disableTracing();
|
| }
|
|
|
| -void WebDevToolsAgentImpl::dispatchOnInspectorBackend(const WebString& message)
|
| +void WebDevToolsAgentImpl::dispatchOnInspectorBackend(int sessionId, const WebString& message)
|
| {
|
| if (!m_attached)
|
| return;
|
| if (WebDevToolsAgent::shouldInterruptForMessage(message))
|
| MainThreadDebugger::instance()->taskRunner()->runPendingTasks();
|
| else
|
| - dispatchMessageFromFrontend(message);
|
| + dispatchMessageFromFrontend(sessionId, message);
|
| }
|
|
|
| -void WebDevToolsAgentImpl::dispatchMessageFromFrontend(const String& message)
|
| +void WebDevToolsAgentImpl::dispatchMessageFromFrontend(int sessionId, const String& message)
|
| {
|
| InspectorTaskRunner::IgnoreInterruptsScope scope(MainThreadDebugger::instance()->taskRunner());
|
| if (m_inspectorBackendDispatcher)
|
| - m_inspectorBackendDispatcher->dispatch(message);
|
| + m_inspectorBackendDispatcher->dispatch(sessionId, message);
|
| }
|
|
|
| void WebDevToolsAgentImpl::inspectElementAt(const WebPoint& pointInRootFrame)
|
| @@ -632,12 +637,12 @@ void WebDevToolsAgentImpl::inspectElementAt(const WebPoint& pointInRootFrame)
|
| m_domAgent->inspect(node);
|
| }
|
|
|
| -void WebDevToolsAgentImpl::sendProtocolResponse(int callId, PassRefPtr<JSONObject> message)
|
| +void WebDevToolsAgentImpl::sendProtocolResponse(int sessionId, int callId, PassRefPtr<JSONObject> message)
|
| {
|
| if (!m_attached)
|
| return;
|
| flushPendingProtocolNotifications();
|
| - m_client->sendProtocolMessage(callId, message->toJSONString(), m_stateCookie);
|
| + m_client->sendProtocolMessage(sessionId, callId, message->toJSONString(), m_stateCookie);
|
| m_stateCookie = String();
|
| }
|
|
|
| @@ -645,7 +650,7 @@ void WebDevToolsAgentImpl::sendProtocolNotification(PassRefPtr<JSONObject> messa
|
| {
|
| if (!m_attached)
|
| return;
|
| - m_notificationQueue.append(message);
|
| + m_notificationQueue.append(std::make_pair(m_sessionId, message));
|
| }
|
|
|
| void WebDevToolsAgentImpl::flush()
|
| @@ -678,12 +683,11 @@ WebString WebDevToolsAgentImpl::evaluateInWebInspectorOverlay(const WebString& s
|
|
|
| void WebDevToolsAgentImpl::flushPendingProtocolNotifications()
|
| {
|
| - if (!m_attached)
|
| - return;
|
| -
|
| - m_agents.flushPendingProtocolNotifications();
|
| - for (size_t i = 0; i < m_notificationQueue.size(); ++i)
|
| - m_client->sendProtocolMessage(0, m_notificationQueue[i]->toJSONString(), WebString());
|
| + if (m_attached) {
|
| + m_agents.flushPendingProtocolNotifications();
|
| + for (size_t i = 0; i < m_notificationQueue.size(); ++i)
|
| + m_client->sendProtocolMessage(m_notificationQueue[i].first, 0, m_notificationQueue[i].second->toJSONString(), WebString());
|
| + }
|
| m_notificationQueue.clear();
|
| }
|
|
|
| @@ -704,11 +708,11 @@ void WebDevToolsAgentImpl::didProcessTask()
|
| flushPendingProtocolNotifications();
|
| }
|
|
|
| -void WebDevToolsAgent::interruptAndDispatch(MessageDescriptor* rawDescriptor)
|
| +void WebDevToolsAgent::interruptAndDispatch(int sessionId, MessageDescriptor* rawDescriptor)
|
| {
|
| // rawDescriptor can't be a PassOwnPtr because interruptAndDispatch is a WebKit API function.
|
| OwnPtr<MessageDescriptor> descriptor = adoptPtr(rawDescriptor);
|
| - OwnPtr<DebuggerTask> task = adoptPtr(new DebuggerTask(descriptor.release()));
|
| + OwnPtr<DebuggerTask> task = adoptPtr(new DebuggerTask(sessionId, descriptor.release()));
|
| MainThreadDebugger::interruptMainThreadAndRun(task.release());
|
| }
|
|
|
|
|