1e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// found in the LICENSE file. 4e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 5e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "config.h" 6e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "core/inspector/ConsoleMessage.h" 7e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "bindings/core/v8/ScriptCallStackFactory.h" 99e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "bindings/core/v8/ScriptValue.h" 109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "core/inspector/ScriptArguments.h" 117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/CurrentTime.h" 127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/PassOwnPtr.h" 13e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 14e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)namespace blink { 15e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 16e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)ConsoleMessage::ConsoleMessage(MessageSource source, 17e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) MessageLevel level, 18e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) const String& message, 19e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) const String& url, 20e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) unsigned lineNumber, 21e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) unsigned columnNumber) 22e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) : m_source(source) 23e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) , m_level(level) 249e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) , m_type(LogMessageType) 25e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) , m_message(message) 267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci , m_scriptId(0) 27e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) , m_url(url) 28e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) , m_lineNumber(lineNumber) 29e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) , m_columnNumber(columnNumber) 30e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) , m_requestIdentifier(0) 317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci , m_timestamp(WTF::currentTime()) 32e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) , m_workerProxy(nullptr) 33e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 34e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 35e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 36e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)ConsoleMessage::~ConsoleMessage() 37e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 38e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 39e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 409e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)MessageType ConsoleMessage::type() const 41e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 429e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return m_type; 43e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 44e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 459e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)void ConsoleMessage::setType(MessageType type) 46e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 479e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_type = type; 48e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 49e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciint ConsoleMessage::scriptId() const 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_scriptId; 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid ConsoleMessage::setScriptId(int scriptId) 567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_scriptId = scriptId; 587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 609e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)const String& ConsoleMessage::url() const 61e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 629e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return m_url; 63e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 64e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 659e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)void ConsoleMessage::setURL(const String& url) 66e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 679e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_url = url; 68e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 69e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 709e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)unsigned ConsoleMessage::lineNumber() const 71e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 729e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return m_lineNumber; 73e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 74e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 759e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)void ConsoleMessage::setLineNumber(unsigned lineNumber) 76e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 779e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_lineNumber = lineNumber; 78e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 79e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 809e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)PassRefPtrWillBeRawPtr<ScriptCallStack> ConsoleMessage::callStack() const 81e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 829e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return m_callStack; 83e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 84e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 859e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)void ConsoleMessage::setCallStack(PassRefPtrWillBeRawPtr<ScriptCallStack> callStack) 86e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 879e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_callStack = callStack; 88e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 89e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 909e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)ScriptState* ConsoleMessage::scriptState() const 91e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 929e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (m_scriptState) 939e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return m_scriptState->get(); 949e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return nullptr; 95e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 96e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 979e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)void ConsoleMessage::setScriptState(ScriptState* scriptState) 98e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (m_scriptState) 1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_scriptState->clear(); 1017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1029e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (scriptState) 1039e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_scriptState = adoptPtr(new ScriptStateProtectingContext(scriptState)); 1049e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) else 1059e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_scriptState.clear(); 1069e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 1079e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 1089e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)PassRefPtrWillBeRawPtr<ScriptArguments> ConsoleMessage::scriptArguments() const 1099e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 1109e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return m_scriptArguments; 1119e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 1129e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 1139e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)void ConsoleMessage::setScriptArguments(PassRefPtrWillBeRawPtr<ScriptArguments> scriptArguments) 1149e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 1159e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_scriptArguments = scriptArguments; 1169e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 1179e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 1189e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)unsigned long ConsoleMessage::requestIdentifier() const 1199e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 1209e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return m_requestIdentifier; 1219e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)} 1229e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) 1239e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)void ConsoleMessage::setRequestIdentifier(unsigned long requestIdentifier) 1249e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles){ 1259e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_requestIdentifier = requestIdentifier; 126e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 127e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccidouble ConsoleMessage::timestamp() const 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_timestamp; 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid ConsoleMessage::setTimestamp(double timestamp) 1347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_timestamp = timestamp; 1367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 138e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)MessageSource ConsoleMessage::source() const 139e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 140e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return m_source; 141e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 142e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 143e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)MessageLevel ConsoleMessage::level() const 144e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 145e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return m_level; 146e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 147e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 148e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)const String& ConsoleMessage::message() const 149e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 150e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return m_message; 151e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 152e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 153e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)unsigned ConsoleMessage::columnNumber() const 154e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 155e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return m_columnNumber; 156e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 157e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid ConsoleMessage::frameWindowDiscarded(LocalDOMWindow* window) 1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (scriptState() && scriptState()->domWindow() == window) 1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setScriptState(nullptr); 1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!m_scriptArguments) 1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (m_scriptArguments->scriptState()->domWindow() != window) 1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!m_message) 1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_message = "<message collected>"; 1697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_scriptArguments.clear(); 1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciunsigned ConsoleMessage::argumentCount() 1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (m_scriptArguments) 1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return m_scriptArguments->argumentCount(); 1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return 0; 1777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid ConsoleMessage::collectCallStack() 1807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (m_type == EndGroupMessageType) 1827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 1837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!m_callStack || m_source == ConsoleAPIMessageSource) 1857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_callStack = createScriptCallStackForConsole(ScriptCallStack::maxCallStackSizeToCapture, true); 1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (m_callStack && m_callStack->size() && !m_scriptId) { 1887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const ScriptCallFrame& frame = m_callStack->at(0); 1897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_url = frame.sourceURL(); 1907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_lineNumber = frame.lineNumber(); 1917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_columnNumber = frame.columnNumber(); 1927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 1937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_callStack.clear(); 1967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 198e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void ConsoleMessage::trace(Visitor* visitor) 199e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 200e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) visitor->trace(m_callStack); 2019e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) visitor->trace(m_scriptArguments); 202e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 203e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 204e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} // namespace blink 205