1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
6 #include "core/inspector/ConsoleMessageStorage.h"
8 #include "core/frame/LocalDOMWindow.h"
9 #include "core/inspector/ConsoleMessage.h"
10 #include "core/inspector/InspectorConsoleInstrumentation.h"
14 static const unsigned maxConsoleMessageCount = 1000;
16 ConsoleMessageStorage::ConsoleMessageStorage(ExecutionContext* context)
23 ConsoleMessageStorage::ConsoleMessageStorage(LocalFrame* frame)
30 void ConsoleMessageStorage::reportMessage(PassRefPtrWillBeRawPtr<ConsoleMessage> prpMessage)
32 RefPtrWillBeRawPtr<ConsoleMessage> message = prpMessage;
33 message->collectCallStack();
35 if (message->type() == ClearMessageType)
38 InspectorInstrumentation::addMessageToConsole(executionContext(), message.get());
40 ASSERT(m_messages.size() <= maxConsoleMessageCount);
41 if (m_messages.size() == maxConsoleMessageCount) {
43 m_messages.removeFirst();
45 m_messages.append(message);
48 void ConsoleMessageStorage::clear()
50 InspectorInstrumentation::consoleMessagesCleared(executionContext());
55 Vector<unsigned> ConsoleMessageStorage::argumentCounts() const
57 Vector<unsigned> result(m_messages.size());
58 for (size_t i = 0; i < m_messages.size(); ++i)
59 result[i] = m_messages[i]->argumentCount();
63 void ConsoleMessageStorage::adoptWorkerMessagesAfterTermination(WorkerGlobalScopeProxy* workerGlobalScopeProxy)
65 for (size_t i = 0; i < m_messages.size(); ++i) {
66 if (m_messages[i]->workerGlobalScopeProxy() == workerGlobalScopeProxy)
67 m_messages[i]->setWorkerGlobalScopeProxy(nullptr);
71 void ConsoleMessageStorage::frameWindowDiscarded(LocalDOMWindow* window)
73 for (size_t i = 0; i < m_messages.size(); ++i)
74 m_messages[i]->frameWindowDiscarded(window);
77 size_t ConsoleMessageStorage::size() const
79 return m_messages.size();
82 ConsoleMessage* ConsoleMessageStorage::at(size_t index) const
84 return m_messages[index].get();
87 int ConsoleMessageStorage::expiredCount() const
89 return m_expiredCount;
92 ExecutionContext* ConsoleMessageStorage::executionContext() const
94 return m_frame ? m_frame->document() : m_context;
97 void ConsoleMessageStorage::trace(Visitor* visitor)
99 visitor->trace(m_messages);
100 visitor->trace(m_context);
101 visitor->trace(m_frame);