15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009, 2010 Google Inc. All rights reserved. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * its contributors may be used to endorse or promote products derived 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * from this software without specific prior written permission. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ConsoleMessage.h" 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptCallStackFactory.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptValue.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/IdentifiersFactory.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InjectedScript.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InjectedScriptManager.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptArguments.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptCallFrame.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptCallStack.h" 445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "wtf/CurrentTime.h" 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message) 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_source(source) 50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_type(type) 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_level(level) 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_message(message) 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_url() 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_line(0) 55591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch , m_column(0) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_repeatCount(1) 5753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_requestId(IdentifiersFactory::requestId(0)) 585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_timestamp(WTF::currentTime()) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) autogenerateMetadata(canGenerateCallStack); 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& url, unsigned line, unsigned column, ScriptState* state, unsigned long requestIdentifier) 64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_source(source) 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_type(type) 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_level(level) 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_message(message) 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_url(url) 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_line(line) 70591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch , m_column(column) 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_repeatCount(1) 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_timestamp(WTF::currentTime()) 74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) autogenerateMetadata(canGenerateCallStack, state); 76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, unsigned long requestIdentifier) 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_source(source) 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_type(type) 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_level(level) 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_message(message) 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_arguments(0) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_line(0) 85591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch , m_column(0) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_repeatCount(1) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_timestamp(WTF::currentTime()) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (callStack && callStack->size()) { 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const ScriptCallFrame& frame = callStack->at(0); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_url = frame.sourceURL(); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_line = frame.lineNumber(); 94591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_column = frame.columnNumber(); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_callStack = callStack; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptArguments> arguments, ScriptState* state, unsigned long requestIdentifier) 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_source(source) 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_type(type) 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_level(level) 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_message(message) 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_arguments(arguments) 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_url() 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_line(0) 107591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch , m_column(0) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_repeatCount(1) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 1105267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_timestamp(WTF::currentTime()) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) autogenerateMetadata(canGenerateCallStack, state); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ConsoleMessage::~ConsoleMessage() 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void ConsoleMessage::autogenerateMetadata(bool canGenerateCallStack, ScriptState* state) 120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_type == EndGroupMessageType) 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (state) 1251e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_callStack = createScriptCallStackForConsole(); 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (canGenerateCallStack) 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_callStack = createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture, true); 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_callStack && m_callStack->size()) { 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const ScriptCallFrame& frame = m_callStack->at(0); 133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_url = frame.sourceURL(); 134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_line = frame.lineNumber(); 135591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_column = frame.columnNumber(); 136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_callStack.clear(); 140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static TypeBuilder::Console::ConsoleMessage::Source::Enum messageSourceValue(MessageSource source) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (source) { 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case XMLMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Xml; 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case JSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Javascript; 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case NetworkMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Network; 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ConsoleAPIMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Console_api; 149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case StorageMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Storage; 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case AppCacheMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Appcache; 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case RenderingMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Rendering; 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Css; 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case SecurityMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Security; 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case OtherMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Other; 15553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case DeprecationMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Deprecation; 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return TypeBuilder::Console::ConsoleMessage::Source::Other; 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static TypeBuilder::Console::ConsoleMessage::Type::Enum messageTypeValue(MessageType type) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (type) { 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case LogMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Log; 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ClearMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Clear; 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case DirMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dir; 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case DirXMLMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dirxml; 167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case TableMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Table; 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case TraceMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Trace; 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case StartGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type::StartGroup; 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case StartGroupCollapsedMessageType: return TypeBuilder::Console::ConsoleMessage::Type::StartGroupCollapsed; 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case EndGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type::EndGroup; 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case AssertMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Assert; 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return TypeBuilder::Console::ConsoleMessage::Type::Log; 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static TypeBuilder::Console::ConsoleMessage::Level::Enum messageLevelValue(MessageLevel level) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (level) { 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case DebugMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Debug; 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case LogMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Log; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WarningMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Warning; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ErrorMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Error; 184f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) case InfoMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Info; 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return TypeBuilder::Console::ConsoleMessage::Level::Log; 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ConsoleMessage::addToFrontend(InspectorFrontend::Console* frontend, InjectedScriptManager* injectedScriptManager, bool generatePreview) 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console::ConsoleMessage::create() 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setSource(messageSourceValue(m_source)) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setLevel(messageLevelValue(m_level)) 1945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) .setText(m_message) 1955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) .setTimestamp(m_timestamp); 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: only send out type for ConsoleAPI source messages. 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setType(messageTypeValue(m_type)); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setLine(static_cast<int>(m_line)); 199591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch jsonObj->setColumn(static_cast<int>(m_column)); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setUrl(m_url); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setRepeatCount(static_cast<int>(m_repeatCount)); 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_source == NetworkMessageSource && !m_requestId.isEmpty()) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setNetworkRequestId(m_requestId); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_arguments && m_arguments->argumentCount()) { 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InjectedScript injectedScript = injectedScriptManager->injectedScriptFor(m_arguments->globalState()); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!injectedScript.hasNoValue()) { 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > jsonArgs = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); 208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_type == TableMessageType && generatePreview && m_arguments->argumentCount()) { 209926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptValue table = m_arguments->argumentAt(0); 210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptValue columns = m_arguments->argumentCount() > 1 ? m_arguments->argumentAt(1) : ScriptValue(); 211926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapTable(table, columns); 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!inspectorValue) { 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonArgs->addItem(inspectorValue); 217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else { 218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (unsigned i = 0; i < m_arguments->argumentCount(); ++i) { 219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapObject(m_arguments->argumentAt(i), "console", generatePreview); 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!inspectorValue) { 221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_NOT_REACHED(); 222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) jsonArgs->addItem(inspectorValue); 225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setParameters(jsonArgs); 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_callStack) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setStackTrace(m_callStack->buildInspectorArray()); 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frontend->messageAdded(jsonObj); 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)void ConsoleMessage::incrementCount() 2365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 2375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_timestamp = WTF::currentTime(); 2385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ++m_repeatCount; 2395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 2405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ConsoleMessage::updateRepeatCountInConsole(InspectorFrontend::Console* frontend) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) frontend->messageRepeatCountUpdated(m_repeatCount, m_timestamp); 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ConsoleMessage::isEqual(ConsoleMessage* msg) const 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_arguments) { 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_arguments->isEqual(msg->m_arguments.get())) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Never treat objects as equal - their properties might change over time. 252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (size_t i = 0; i < m_arguments->argumentCount(); ++i) { 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_arguments->argumentAt(i).isObject()) 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return false; 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (msg->m_arguments) 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_callStack) { 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_callStack->isEqual(msg->m_callStack.get())) 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (msg->m_callStack) 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return msg->m_source == m_source 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && msg->m_type == m_type 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && msg->m_level == m_level 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && msg->m_message == m_message 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && msg->m_line == m_line 270591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch && msg->m_column == m_column 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && msg->m_url == m_url 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && msg->m_requestId == m_requestId; 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ConsoleMessage::windowCleared(DOMWindow* window) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_arguments) 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (m_arguments->globalState()->domWindow() != window) 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_message) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_message = "<message collected>"; 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_arguments.clear(); 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned ConsoleMessage::argumentCount() 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_arguments) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_arguments->argumentCount(); 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295