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/FrameHost.h"
9 #include "core/frame/LocalDOMWindow.h"
10 #include "core/inspector/ConsoleMessage.h"
11 #include "core/inspector/InspectorConsoleInstrumentation.h"
15 static const unsigned maxConsoleMessageCount = 1000;
17 ConsoleMessageStorage::ConsoleMessageStorage(ExecutionContext* context)
20 , m_frameHost(nullptr)
24 ConsoleMessageStorage::ConsoleMessageStorage(FrameHost* frameHost)
27 , m_frameHost(frameHost)
31 void ConsoleMessageStorage::reportMessage(PassRefPtrWillBeRawPtr<ConsoleMessage> prpMessage)
33 RefPtrWillBeRawPtr<ConsoleMessage> message = prpMessage;
34 message->collectCallStack();
36 if (message->type() == ClearMessageType)
40 InspectorInstrumentation::addMessageToConsole(m_frameHost, message.get());
42 InspectorInstrumentation::addMessageToConsole(m_context, message.get());
44 ASSERT(m_messages.size() <= maxConsoleMessageCount);
45 if (m_messages.size() == maxConsoleMessageCount) {
47 m_messages.removeFirst();
49 m_messages.append(message);
52 void ConsoleMessageStorage::clear()
55 InspectorInstrumentation::consoleMessagesCleared(m_frameHost);
57 InspectorInstrumentation::consoleMessagesCleared(m_context);
62 Vector<unsigned> ConsoleMessageStorage::argumentCounts() const
64 Vector<unsigned> result(m_messages.size());
65 for (size_t i = 0; i < m_messages.size(); ++i)
66 result[i] = m_messages[i]->argumentCount();
70 void ConsoleMessageStorage::adoptWorkerMessagesAfterTermination(WorkerGlobalScopeProxy* workerGlobalScopeProxy)
72 for (size_t i = 0; i < m_messages.size(); ++i) {
73 if (m_messages[i]->workerGlobalScopeProxy() == workerGlobalScopeProxy)
74 m_messages[i]->setWorkerGlobalScopeProxy(nullptr);
78 void ConsoleMessageStorage::frameWindowDiscarded(LocalDOMWindow* window)
80 for (size_t i = 0; i < m_messages.size(); ++i)
81 m_messages[i]->frameWindowDiscarded(window);
84 size_t ConsoleMessageStorage::size() const
86 return m_messages.size();
89 ConsoleMessage* ConsoleMessageStorage::at(size_t index) const
91 return m_messages[index].get();
94 int ConsoleMessageStorage::expiredCount() const
96 return m_expiredCount;
99 void ConsoleMessageStorage::trace(Visitor* visitor)
101 visitor->trace(m_messages);
102 visitor->trace(m_context);
103 visitor->trace(m_frameHost);