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/ConsoleMessage.h"
8 #include "bindings/core/v8/ScriptCallStackFactory.h"
9 #include "bindings/core/v8/ScriptValue.h"
10 #include "core/inspector/ScriptArguments.h"
11 #include "wtf/CurrentTime.h"
12 #include "wtf/PassOwnPtr.h"
16 ConsoleMessage::ConsoleMessage(MessageSource source,
18 const String& message,
21 unsigned columnNumber)
24 , m_type(LogMessageType)
28 , m_lineNumber(lineNumber)
29 , m_columnNumber(columnNumber)
30 , m_requestIdentifier(0)
31 , m_timestamp(WTF::currentTime())
32 , m_workerProxy(nullptr)
36 ConsoleMessage::~ConsoleMessage()
40 MessageType ConsoleMessage::type() const
45 void ConsoleMessage::setType(MessageType type)
50 int ConsoleMessage::scriptId() const
55 void ConsoleMessage::setScriptId(int scriptId)
57 m_scriptId = scriptId;
60 const String& ConsoleMessage::url() const
65 void ConsoleMessage::setURL(const String& url)
70 unsigned ConsoleMessage::lineNumber() const
75 void ConsoleMessage::setLineNumber(unsigned lineNumber)
77 m_lineNumber = lineNumber;
80 PassRefPtrWillBeRawPtr<ScriptCallStack> ConsoleMessage::callStack() const
85 void ConsoleMessage::setCallStack(PassRefPtrWillBeRawPtr<ScriptCallStack> callStack)
87 m_callStack = callStack;
90 ScriptState* ConsoleMessage::scriptState() const
93 return m_scriptState->get();
97 void ConsoleMessage::setScriptState(ScriptState* scriptState)
100 m_scriptState->clear();
103 m_scriptState = adoptPtr(new ScriptStateProtectingContext(scriptState));
105 m_scriptState.clear();
108 PassRefPtrWillBeRawPtr<ScriptArguments> ConsoleMessage::scriptArguments() const
110 return m_scriptArguments;
113 void ConsoleMessage::setScriptArguments(PassRefPtrWillBeRawPtr<ScriptArguments> scriptArguments)
115 m_scriptArguments = scriptArguments;
118 unsigned long ConsoleMessage::requestIdentifier() const
120 return m_requestIdentifier;
123 void ConsoleMessage::setRequestIdentifier(unsigned long requestIdentifier)
125 m_requestIdentifier = requestIdentifier;
128 double ConsoleMessage::timestamp() const
133 void ConsoleMessage::setTimestamp(double timestamp)
135 m_timestamp = timestamp;
138 MessageSource ConsoleMessage::source() const
143 MessageLevel ConsoleMessage::level() const
148 const String& ConsoleMessage::message() const
153 unsigned ConsoleMessage::columnNumber() const
155 return m_columnNumber;
158 void ConsoleMessage::frameWindowDiscarded(LocalDOMWindow* window)
160 if (scriptState() && scriptState()->domWindow() == window)
161 setScriptState(nullptr);
163 if (!m_scriptArguments)
165 if (m_scriptArguments->scriptState()->domWindow() != window)
168 m_message = "<message collected>";
169 m_scriptArguments.clear();
172 unsigned ConsoleMessage::argumentCount()
174 if (m_scriptArguments)
175 return m_scriptArguments->argumentCount();
179 void ConsoleMessage::collectCallStack()
181 if (m_type == EndGroupMessageType)
184 if (!m_callStack || m_source == ConsoleAPIMessageSource)
185 m_callStack = createScriptCallStackForConsole(ScriptCallStack::maxCallStackSizeToCapture, true);
187 if (m_callStack && m_callStack->size() && !m_scriptId) {
188 const ScriptCallFrame& frame = m_callStack->at(0);
189 m_url = frame.sourceURL();
190 m_lineNumber = frame.lineNumber();
191 m_columnNumber = frame.columnNumber();
198 void ConsoleMessage::trace(Visitor* visitor)
200 visitor->trace(m_callStack);
201 visitor->trace(m_scriptArguments);