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" 38aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch#include "core/dom/ExecutionContext.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/IdentifiersFactory.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InjectedScript.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InjectedScriptManager.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptArguments.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptCallFrame.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptCallStack.h" 455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "wtf/CurrentTime.h" 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message) 50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_source(source) 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_type(type) 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_level(level) 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_message(message) 54f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_scriptState(0) 55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_url() 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_line(0) 57591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch , m_column(0) 5853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) , m_requestId(IdentifiersFactory::requestId(0)) 595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_timestamp(WTF::currentTime()) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) autogenerateMetadata(canGenerateCallStack); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 64f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& url, unsigned line, unsigned column, ScriptState* scriptState, unsigned long requestIdentifier) 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_source(source) 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_type(type) 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_level(level) 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_message(message) 69f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_scriptState(scriptState) 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_url(url) 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_line(line) 72591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch , m_column(column) 73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_timestamp(WTF::currentTime()) 75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 76f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu autogenerateMetadata(canGenerateCallStack, scriptState); 77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtrWillBeRawPtr<ScriptCallStack> callStack, unsigned long requestIdentifier) 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_source(source) 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_type(type) 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_level(level) 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_message(message) 84f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_scriptState(0) 85d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) , m_arguments(nullptr) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_line(0) 87591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch , m_column(0) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_timestamp(WTF::currentTime()) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (callStack && callStack->size()) { 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const ScriptCallFrame& frame = callStack->at(0); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_url = frame.sourceURL(); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_line = frame.lineNumber(); 95591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_column = frame.columnNumber(); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_callStack = callStack; 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtrWillBeRawPtr<ScriptArguments> arguments, ScriptState* scriptState, unsigned long requestIdentifier) 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_source(source) 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_type(type) 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_level(level) 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_message(message) 105f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_scriptState(scriptState) 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_arguments(arguments) 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_url() 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_line(0) 109591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch , m_column(0) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 1115267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) , m_timestamp(WTF::currentTime()) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 113f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu autogenerateMetadata(canGenerateCallStack, scriptState); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ConsoleMessage::~ConsoleMessage() 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 120f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuvoid ConsoleMessage::autogenerateMetadata(bool canGenerateCallStack, ScriptState* scriptState) 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_type == EndGroupMessageType) 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 125f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (scriptState) 126d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_callStack = createScriptCallStackForConsole(scriptState); 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else if (canGenerateCallStack) 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_callStack = createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture, true); 129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else 130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_callStack && m_callStack->size()) { 133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const ScriptCallFrame& frame = m_callStack->at(0); 134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_url = frame.sourceURL(); 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_line = frame.lineNumber(); 136591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_column = frame.columnNumber(); 137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_callStack.clear(); 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static TypeBuilder::Console::ConsoleMessage::Source::Enum messageSourceValue(MessageSource source) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (source) { 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case XMLMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Xml; 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case JSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Javascript; 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case NetworkMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Network; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ConsoleAPIMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Console_api; 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case StorageMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Storage; 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case AppCacheMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Appcache; 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case RenderingMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Rendering; 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case CSSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Css; 154926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case SecurityMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Security; 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case OtherMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Other; 15653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case DeprecationMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Deprecation; 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return TypeBuilder::Console::ConsoleMessage::Source::Other; 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static TypeBuilder::Console::ConsoleMessage::Type::Enum messageTypeValue(MessageType type) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (type) { 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case LogMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Log; 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ClearMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Clear; 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case DirMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dir; 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case DirXMLMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dirxml; 168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case TableMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Table; 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case TraceMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Trace; 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case StartGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type::StartGroup; 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case StartGroupCollapsedMessageType: return TypeBuilder::Console::ConsoleMessage::Type::StartGroupCollapsed; 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case EndGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type::EndGroup; 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case AssertMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Assert; 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return TypeBuilder::Console::ConsoleMessage::Type::Log; 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static TypeBuilder::Console::ConsoleMessage::Level::Enum messageLevelValue(MessageLevel level) 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (level) { 181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case DebugMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Debug; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case LogMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Log; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WarningMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Warning; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case ErrorMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Error; 185f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) case InfoMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Info; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return TypeBuilder::Console::ConsoleMessage::Level::Log; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ConsoleMessage::addToFrontend(InspectorFrontend::Console* frontend, InjectedScriptManager* injectedScriptManager, bool generatePreview) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console::ConsoleMessage::create() 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setSource(messageSourceValue(m_source)) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) .setLevel(messageLevelValue(m_level)) 1955267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) .setText(m_message) 1965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) .setTimestamp(m_timestamp); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: only send out type for ConsoleAPI source messages. 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setType(messageTypeValue(m_type)); 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setLine(static_cast<int>(m_line)); 200591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch jsonObj->setColumn(static_cast<int>(m_column)); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setUrl(m_url); 202a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch ScriptState* scriptState = m_scriptState.get(); 203a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (scriptState && scriptState->executionContext()->isDocument()) 204a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch jsonObj->setExecutionContextId(injectedScriptManager->injectedScriptIdFor(scriptState)); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_source == NetworkMessageSource && !m_requestId.isEmpty()) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setNetworkRequestId(m_requestId); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_arguments && m_arguments->argumentCount()) { 208f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu InjectedScript injectedScript = injectedScriptManager->injectedScriptFor(m_arguments->scriptState()); 20910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch if (!injectedScript.isEmpty()) { 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > jsonArgs = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); 211926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_type == TableMessageType && generatePreview && m_arguments->argumentCount()) { 212926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptValue table = m_arguments->argumentAt(0); 213926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptValue columns = m_arguments->argumentCount() > 1 ? m_arguments->argumentAt(1) : ScriptValue(); 214926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapTable(table, columns); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!inspectorValue) { 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonArgs->addItem(inspectorValue); 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else { 221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (unsigned i = 0; i < m_arguments->argumentCount(); ++i) { 222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapObject(m_arguments->argumentAt(i), "console", generatePreview); 223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!inspectorValue) { 224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_NOT_REACHED(); 225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) jsonArgs->addItem(inspectorValue); 228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setParameters(jsonArgs); 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_callStack) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) jsonObj->setStackTrace(m_callStack->buildInspectorArray()); 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frontend->messageAdded(jsonObj); 236f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu frontend->flush(); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)void ConsoleMessage::windowCleared(LocalDOMWindow* window) 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 241a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (m_scriptState.get() && m_scriptState.get()->domWindow() == window) 242a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_scriptState.clear(); 243aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_arguments) 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 246f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (m_arguments->scriptState()->domWindow() != window) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_message) 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_message = "<message collected>"; 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_arguments.clear(); 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned ConsoleMessage::argumentCount() 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_arguments) 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_arguments->argumentCount(); 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 262