Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / inspector / ConsoleMessageStorage.cpp
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.
4
5 #include "config.h"
6 #include "core/inspector/ConsoleMessageStorage.h"
7
8 #include "core/frame/FrameHost.h"
9 #include "core/frame/LocalDOMWindow.h"
10 #include "core/inspector/ConsoleMessage.h"
11 #include "core/inspector/InspectorConsoleInstrumentation.h"
12
13 namespace blink {
14
15 static const unsigned maxConsoleMessageCount = 1000;
16
17 ConsoleMessageStorage::ConsoleMessageStorage(ExecutionContext* context)
18     : m_expiredCount(0)
19     , m_context(context)
20     , m_frameHost(nullptr)
21 {
22 }
23
24 ConsoleMessageStorage::ConsoleMessageStorage(FrameHost* frameHost)
25     : m_expiredCount(0)
26     , m_context(nullptr)
27     , m_frameHost(frameHost)
28 {
29 }
30
31 void ConsoleMessageStorage::reportMessage(PassRefPtrWillBeRawPtr<ConsoleMessage> prpMessage)
32 {
33     RefPtrWillBeRawPtr<ConsoleMessage> message = prpMessage;
34     message->collectCallStack();
35
36     if (message->type() == ClearMessageType)
37         clear();
38
39     if (m_frameHost)
40         InspectorInstrumentation::addMessageToConsole(m_frameHost, message.get());
41     else
42         InspectorInstrumentation::addMessageToConsole(m_context, message.get());
43
44     ASSERT(m_messages.size() <= maxConsoleMessageCount);
45     if (m_messages.size() == maxConsoleMessageCount) {
46         ++m_expiredCount;
47         m_messages.removeFirst();
48     }
49     m_messages.append(message);
50 }
51
52 void ConsoleMessageStorage::clear()
53 {
54     if (m_frameHost)
55         InspectorInstrumentation::consoleMessagesCleared(m_frameHost);
56     else
57         InspectorInstrumentation::consoleMessagesCleared(m_context);
58     m_messages.clear();
59     m_expiredCount = 0;
60 }
61
62 Vector<unsigned> ConsoleMessageStorage::argumentCounts() const
63 {
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();
67     return result;
68 }
69
70 void ConsoleMessageStorage::adoptWorkerMessagesAfterTermination(WorkerGlobalScopeProxy* workerGlobalScopeProxy)
71 {
72     for (size_t i = 0; i < m_messages.size(); ++i) {
73         if (m_messages[i]->workerGlobalScopeProxy() == workerGlobalScopeProxy)
74             m_messages[i]->setWorkerGlobalScopeProxy(nullptr);
75     }
76 }
77
78 void ConsoleMessageStorage::frameWindowDiscarded(LocalDOMWindow* window)
79 {
80     for (size_t i = 0; i < m_messages.size(); ++i)
81         m_messages[i]->frameWindowDiscarded(window);
82 }
83
84 size_t ConsoleMessageStorage::size() const
85 {
86     return m_messages.size();
87 }
88
89 ConsoleMessage* ConsoleMessageStorage::at(size_t index) const
90 {
91     return m_messages[index].get();
92 }
93
94 int ConsoleMessageStorage::expiredCount() const
95 {
96     return m_expiredCount;
97 }
98
99 void ConsoleMessageStorage::trace(Visitor* visitor)
100 {
101     visitor->trace(m_messages);
102     visitor->trace(m_context);
103     visitor->trace(m_frameHost);
104 }
105
106 } // namespace blink