| 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 073a59a34ad61c2ea4319089aa407160f09b6ede..c640a4a6ae139af996329f988f9855e07a5d1b48 100644
|
| --- a/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp
|
| +++ b/third_party/WebKit/Source/core/workers/WorkerInspectorProxy.cpp
|
| @@ -5,6 +5,7 @@
|
| #include "core/workers/WorkerInspectorProxy.h"
|
|
|
| #include "core/dom/CrossThreadTask.h"
|
| +#include "core/frame/FrameConsole.h"
|
| #include "core/inspector/IdentifiersFactory.h"
|
| #include "core/inspector/InspectorInstrumentation.h"
|
| #include "core/inspector/InspectorTraceEvents.h"
|
| @@ -19,6 +20,8 @@ namespace blink {
|
|
|
| namespace {
|
|
|
| +static const unsigned maxConsoleMessageCount = 1000;
|
| +
|
| static WorkerInspectorProxy::WorkerInspectorProxySet& inspectorProxies()
|
| {
|
| DEFINE_STATIC_LOCAL(WorkerInspectorProxy::WorkerInspectorProxySet, proxies, ());
|
| @@ -36,6 +39,7 @@ WorkerInspectorProxy::WorkerInspectorProxy()
|
| : m_workerThread(nullptr)
|
| , m_document(nullptr)
|
| , m_pageInspector(nullptr)
|
| + , m_ignoreConsoleMessages(false)
|
| {
|
| }
|
|
|
| @@ -80,6 +84,14 @@ void WorkerInspectorProxy::workerThreadTerminated()
|
| inspectorProxies().remove(this);
|
| InspectorInstrumentation::workerTerminated(m_document, this);
|
| }
|
| +
|
| + LocalFrame* frame = m_document ? m_document->frame() : nullptr;
|
| + if (frame) {
|
| + for (ConsoleMessage* message : m_consoleMessages)
|
| + frame->console().adoptWorkerMessage(message);
|
| + m_consoleMessages.clear();
|
| + }
|
| +
|
| m_workerThread = nullptr;
|
| m_pageInspector = nullptr;
|
| m_document = nullptr;
|
| @@ -93,8 +105,25 @@ void WorkerInspectorProxy::dispatchMessageFromWorker(const String& message)
|
|
|
| void WorkerInspectorProxy::workerConsoleAgentEnabled()
|
| {
|
| - if (m_pageInspector)
|
| - m_pageInspector->workerConsoleAgentEnabled(this);
|
| + m_ignoreConsoleMessages = true;
|
| + m_consoleMessages.clear();
|
| +}
|
| +
|
| +void WorkerInspectorProxy::addConsoleMessageFromWorker(ConsoleMessage* consoleMessage)
|
| +{
|
| + if (consoleMessage->type() == ClearMessageType) {
|
| + m_consoleMessages.clear();
|
| + return;
|
| + }
|
| +
|
| + if (!m_ignoreConsoleMessages) {
|
| + DCHECK(m_consoleMessages.size() <= maxConsoleMessageCount);
|
| + if (m_consoleMessages.size() == maxConsoleMessageCount)
|
| + m_consoleMessages.removeFirst();
|
| + m_consoleMessages.append(consoleMessage);
|
| + }
|
| + if (LocalFrame* frame = m_document->frame())
|
| + frame->console().reportWorkerMessage(consoleMessage);
|
| }
|
|
|
| static void connectToWorkerGlobalScopeInspectorTask(WorkerThread* workerThread)
|
| @@ -148,6 +177,7 @@ void WorkerInspectorProxy::writeTimelineStartedEvent(const String& sessionId)
|
| DEFINE_TRACE(WorkerInspectorProxy)
|
| {
|
| visitor->trace(m_document);
|
| + visitor->trace(m_consoleMessages);
|
| }
|
|
|
| } // namespace blink
|
|
|