Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: Source/core/inspector/ConsoleMessage.cpp

Issue 376213002: DevTools: Make FrameConsole methods accept ConsoleMessage objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@scriptFailedToParse
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be
3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> 3 // found in the LICENSE file.
4 * Copyright (C) 2009, 2010 Google Inc. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
16 * its contributors may be used to endorse or promote products derived
17 * from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 4
31 #include "config.h" 5 #include "config.h"
32 6
33 7
34 #include "core/inspector/ConsoleMessage.h" 8 #include "core/inspector/ConsoleMessage.h"
35 9
36 #include "bindings/core/v8/ScriptCallStackFactory.h" 10 #include "bindings/core/v8/ScriptCallStackFactory.h"
37 #include "bindings/core/v8/ScriptValue.h" 11 #include "bindings/core/v8/ScriptValue.h"
38 #include "core/dom/ExecutionContext.h" 12 #include "core/dom/ExecutionContext.h"
39 #include "core/inspector/IdentifiersFactory.h" 13 #include "core/inspector/IdentifiersFactory.h"
40 #include "core/inspector/InjectedScript.h" 14 #include "core/inspector/InjectedScript.h"
41 #include "core/inspector/InjectedScriptManager.h" 15 #include "core/inspector/InjectedScriptManager.h"
42 #include "core/inspector/ScriptArguments.h" 16 #include "core/inspector/ScriptArguments.h"
43 #include "core/inspector/ScriptAsyncCallStack.h"
44 #include "core/inspector/ScriptCallFrame.h" 17 #include "core/inspector/ScriptCallFrame.h"
45 #include "core/inspector/ScriptCallStack.h" 18 #include "core/inspector/ScriptCallStack.h"
46 #include "wtf/CurrentTime.h" 19 #include "wtf/CurrentTime.h"
47 20
48 namespace WebCore { 21 namespace WebCore {
49 22
50 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message) 23 ConsoleMessage::ConsoleMessage()
24 : m_lineNumber(0)
25 , m_columnNumber(0)
26 , m_requestIdentifier(0)
27 , m_corsStatus(NotSharableCrossOrigin)
28 {
29 }
30
31 ConsoleMessage::ConsoleMessage(MessageSource source,
32 MessageLevel level,
33 const String& message,
34 const String& url,
35 unsigned lineNumber,
36 unsigned columnNumber,
37 PassRefPtr<ScriptCallStack> callStack,
38 unsigned long requestIdentifier,
39 AccessControlStatus corsStatus)
51 : m_source(source) 40 : m_source(source)
52 , m_type(type)
53 , m_level(level) 41 , m_level(level)
54 , m_message(message) 42 , m_message(message)
55 , m_scriptState(0) 43 , m_url(url)
56 , m_url() 44 , m_lineNumber(lineNumber)
57 , m_line(0) 45 , m_columnNumber(columnNumber)
58 , m_column(0) 46 , m_callStack(callStack)
59 , m_requestId(IdentifiersFactory::requestId(0)) 47 , m_requestIdentifier(requestIdentifier)
60 , m_timestamp(WTF::currentTime()) 48 , m_corsStatus(corsStatus)
61 { 49 {
62 autogenerateMetadata(canGenerateCallStack);
63 } 50 }
64 51
65 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& url, unsigned line, unsigned column, ScriptState* scriptState, unsigned long requestI dentifier) 52 MessageSource ConsoleMessage::source() const
66 : m_source(source)
67 , m_type(type)
68 , m_level(level)
69 , m_message(message)
70 , m_scriptState(scriptState)
71 , m_url(url)
72 , m_line(line)
73 , m_column(column)
74 , m_requestId(IdentifiersFactory::requestId(requestIdentifier))
75 , m_timestamp(WTF::currentTime())
76 { 53 {
77 autogenerateMetadata(canGenerateCallStack, scriptState); 54 return m_source;
78 } 55 }
79 56
80 ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, Mes sageLevel level, const String& message, PassRefPtrWillBeRawPtr<ScriptCallStack> callStack, unsigned long requestIdentifier) 57 void ConsoleMessage::setSource(MessageSource source)
81 : m_source(source)
82 , m_type(type)
83 , m_level(level)
84 , m_message(message)
85 , m_scriptState(0)
86 , m_arguments(nullptr)
87 , m_line(0)
88 , m_column(0)
89 , m_requestId(IdentifiersFactory::requestId(requestIdentifier))
90 , m_timestamp(WTF::currentTime())
91 { 58 {
92 if (callStack && callStack->size()) { 59 m_source = source;
93 const ScriptCallFrame& frame = callStack->at(0); 60 }
94 m_url = frame.sourceURL(); 61
95 m_line = frame.lineNumber(); 62 MessageLevel ConsoleMessage::level() const
96 m_column = frame.columnNumber(); 63 {
97 } 64 return m_level;
65 }
66
67 void ConsoleMessage::setLevel(MessageLevel level)
68 {
69 m_level = level;
70 }
71
72 const String& ConsoleMessage::message() const
73 {
74 return m_message;
75 }
76
77 void ConsoleMessage::setMessage(const String& message)
78 {
79 m_message = message;
80 }
81
82 const String& ConsoleMessage::url() const
83 {
84 return m_url;
85 }
86
87 void ConsoleMessage::setURL(const String& url)
88 {
89 m_url = url;
90 }
91
92 unsigned ConsoleMessage::lineNumber() const
93 {
94 return m_lineNumber;
95 }
96
97 void ConsoleMessage::setLineNumber(unsigned lineNumber)
98 {
99 m_lineNumber = lineNumber;
100 }
101
102 unsigned ConsoleMessage::columnNumber() const
103 {
104 return m_columnNumber;
105 }
106
107 void ConsoleMessage::setColumnNumber(unsigned columnNumber)
108 {
109 m_columnNumber = columnNumber;
110 }
111
112 PassRefPtr<ScriptCallStack> ConsoleMessage::callStack()
113 {
114 return m_callStack;
115 }
116
117 void ConsoleMessage::setCallStack(PassRefPtr<ScriptCallStack> callStack)
118 {
98 m_callStack = callStack; 119 m_callStack = callStack;
99 } 120 }
100 121
101 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtrWillBeRaw Ptr<ScriptArguments> arguments, ScriptState* scriptState, unsigned long requestI dentifier) 122 unsigned long ConsoleMessage::requestIdentifier() const
102 : m_source(source)
103 , m_type(type)
104 , m_level(level)
105 , m_message(message)
106 , m_scriptState(scriptState)
107 , m_arguments(arguments)
108 , m_url()
109 , m_line(0)
110 , m_column(0)
111 , m_requestId(IdentifiersFactory::requestId(requestIdentifier))
112 , m_timestamp(WTF::currentTime())
113 { 123 {
114 autogenerateMetadata(canGenerateCallStack, scriptState); 124 return m_requestIdentifier;
115 } 125 }
116 126
117 ConsoleMessage::~ConsoleMessage() 127 void ConsoleMessage::setRequestIdentifier(unsigned long requestIdentifier)
118 { 128 {
129 m_requestIdentifier = requestIdentifier;
119 } 130 }
120 131
121 void ConsoleMessage::autogenerateMetadata(bool canGenerateCallStack, ScriptState * scriptState) 132 AccessControlStatus ConsoleMessage::corsStatus() const
122 { 133 {
123 if (m_type == EndGroupMessageType) 134 return m_corsStatus;
124 return;
125
126 if (scriptState)
127 m_callStack = createScriptCallStackForConsole(scriptState);
128 else if (canGenerateCallStack)
129 m_callStack = createScriptCallStack(ScriptCallStack::maxCallStackSizeToC apture, true);
130 else
131 return;
132
133 if (m_callStack && m_callStack->size()) {
134 const ScriptCallFrame& frame = m_callStack->at(0);
135 m_url = frame.sourceURL();
136 m_line = frame.lineNumber();
137 m_column = frame.columnNumber();
138 return;
139 }
140
141 m_callStack.clear();
142 } 135 }
143 136
144 static TypeBuilder::Console::ConsoleMessage::Source::Enum messageSourceValue(Mes sageSource source) 137 void ConsoleMessage::setCorsStatus(AccessControlStatus corsStatus)
145 { 138 {
146 switch (source) { 139 m_corsStatus = corsStatus;
147 case XMLMessageSource: return TypeBuilder::Console::ConsoleMessage::Source:: Xml;
148 case JSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::J avascript;
149 case NetworkMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Network;
150 case ConsoleAPIMessageSource: return TypeBuilder::Console::ConsoleMessage::S ource::Console_api;
151 case StorageMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Storage;
152 case AppCacheMessageSource: return TypeBuilder::Console::ConsoleMessage::Sou rce::Appcache;
153 case RenderingMessageSource: return TypeBuilder::Console::ConsoleMessage::So urce::Rendering;
154 case CSSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source:: Css;
155 case SecurityMessageSource: return TypeBuilder::Console::ConsoleMessage::Sou rce::Security;
156 case OtherMessageSource: return TypeBuilder::Console::ConsoleMessage::Source ::Other;
157 case DeprecationMessageSource: return TypeBuilder::Console::ConsoleMessage:: Source::Deprecation;
158 }
159 return TypeBuilder::Console::ConsoleMessage::Source::Other;
160 }
161
162 static TypeBuilder::Console::ConsoleMessage::Type::Enum messageTypeValue(Message Type type)
163 {
164 switch (type) {
165 case LogMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Log;
166 case ClearMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Cl ear;
167 case DirMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dir;
168 case DirXMLMessageType: return TypeBuilder::Console::ConsoleMessage::Type::D irxml;
169 case TableMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Ta ble;
170 case TraceMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Tr ace;
171 case StartGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Typ e::StartGroup;
172 case StartGroupCollapsedMessageType: return TypeBuilder::Console::ConsoleMes sage::Type::StartGroupCollapsed;
173 case EndGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type: :EndGroup;
174 case AssertMessageType: return TypeBuilder::Console::ConsoleMessage::Type::A ssert;
175 }
176 return TypeBuilder::Console::ConsoleMessage::Type::Log;
177 }
178
179 static TypeBuilder::Console::ConsoleMessage::Level::Enum messageLevelValue(Messa geLevel level)
180 {
181 switch (level) {
182 case DebugMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Debug;
183 case LogMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Lo g;
184 case WarningMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level ::Warning;
185 case ErrorMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Error;
186 case InfoMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::I nfo;
187 }
188 return TypeBuilder::Console::ConsoleMessage::Level::Log;
189 }
190
191 void ConsoleMessage::addToFrontend(InspectorFrontend::Console* frontend, Injecte dScriptManager* injectedScriptManager, bool generatePreview)
192 {
193 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console: :ConsoleMessage::create()
194 .setSource(messageSourceValue(m_source))
195 .setLevel(messageLevelValue(m_level))
196 .setText(m_message)
197 .setTimestamp(m_timestamp);
198 // FIXME: only send out type for ConsoleAPI source messages.
199 jsonObj->setType(messageTypeValue(m_type));
200 jsonObj->setLine(static_cast<int>(m_line));
201 jsonObj->setColumn(static_cast<int>(m_column));
202 jsonObj->setUrl(m_url);
203 ScriptState* scriptState = m_scriptState.get();
204 if (scriptState)
205 jsonObj->setExecutionContextId(injectedScriptManager->injectedScriptIdFo r(scriptState));
206 if (m_source == NetworkMessageSource && !m_requestId.isEmpty())
207 jsonObj->setNetworkRequestId(m_requestId);
208 if (m_arguments && m_arguments->argumentCount()) {
209 InjectedScript injectedScript = injectedScriptManager->injectedScriptFor (m_arguments->scriptState());
210 if (!injectedScript.isEmpty()) {
211 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create();
212 if (m_type == TableMessageType && generatePreview && m_arguments->ar gumentCount()) {
213 ScriptValue table = m_arguments->argumentAt(0);
214 ScriptValue columns = m_arguments->argumentCount() > 1 ? m_argum ents->argumentAt(1) : ScriptValue();
215 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje ctedScript.wrapTable(table, columns);
216 if (!inspectorValue) {
217 ASSERT_NOT_REACHED();
218 return;
219 }
220 jsonArgs->addItem(inspectorValue);
221 } else {
222 for (unsigned i = 0; i < m_arguments->argumentCount(); ++i) {
223 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapObject(m_arguments->argumentAt(i), "console", generatePreview );
224 if (!inspectorValue) {
225 ASSERT_NOT_REACHED();
226 return;
227 }
228 jsonArgs->addItem(inspectorValue);
229 }
230 }
231 jsonObj->setParameters(jsonArgs);
232 }
233 }
234 if (m_callStack)
235 jsonObj->setStackTrace(m_callStack->buildInspectorArray());
236 if (m_asyncCallStack)
237 jsonObj->setAsyncStackTrace(m_asyncCallStack->buildInspectorObject());
238 frontend->messageAdded(jsonObj);
239 frontend->flush();
240 }
241
242 void ConsoleMessage::setAsyncStackTrace(PassRefPtrWillBeRawPtr<ScriptAsyncCallSt ack> asyncCallStack)
243 {
244 m_asyncCallStack = asyncCallStack;
245 }
246
247 void ConsoleMessage::windowCleared(LocalDOMWindow* window)
248 {
249 if (m_scriptState.get() && m_scriptState.get()->domWindow() == window)
250 m_scriptState.clear();
251
252 if (!m_arguments)
253 return;
254 if (m_arguments->scriptState()->domWindow() != window)
255 return;
256 if (!m_message)
257 m_message = "<message collected>";
258 m_arguments.clear();
259 }
260
261 unsigned ConsoleMessage::argumentCount()
262 {
263 if (m_arguments)
264 return m_arguments->argumentCount();
265 return 0;
266 } 140 }
267 141
268 } // namespace WebCore 142 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698