Line data Source code
1 : // Copyright 2016 the V8 project 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.
4 :
5 : #include "src/inspector/v8-console-agent-impl.h"
6 :
7 : #include "src/inspector/protocol/Protocol.h"
8 : #include "src/inspector/v8-console-message.h"
9 : #include "src/inspector/v8-inspector-impl.h"
10 : #include "src/inspector/v8-inspector-session-impl.h"
11 : #include "src/inspector/v8-stack-trace-impl.h"
12 :
13 : namespace v8_inspector {
14 :
15 : namespace ConsoleAgentState {
16 : static const char consoleEnabled[] = "consoleEnabled";
17 : }
18 :
19 3832 : V8ConsoleAgentImpl::V8ConsoleAgentImpl(
20 : V8InspectorSessionImpl* session, protocol::FrontendChannel* frontendChannel,
21 : protocol::DictionaryValue* state)
22 : : m_session(session),
23 : m_state(state),
24 : m_frontend(frontendChannel),
25 7664 : m_enabled(false) {}
26 :
27 : V8ConsoleAgentImpl::~V8ConsoleAgentImpl() = default;
28 :
29 5 : Response V8ConsoleAgentImpl::enable() {
30 5 : if (m_enabled) return Response::OK();
31 10 : m_state->setBoolean(ConsoleAgentState::consoleEnabled, true);
32 5 : m_enabled = true;
33 5 : m_session->inspector()->enableStackCapturingIfNeeded();
34 5 : reportAllMessages();
35 5 : return Response::OK();
36 : }
37 :
38 3832 : Response V8ConsoleAgentImpl::disable() {
39 3832 : if (!m_enabled) return Response::OK();
40 5 : m_session->inspector()->disableStackCapturingIfNeeded();
41 10 : m_state->setBoolean(ConsoleAgentState::consoleEnabled, false);
42 5 : m_enabled = false;
43 5 : return Response::OK();
44 : }
45 :
46 0 : Response V8ConsoleAgentImpl::clearMessages() { return Response::OK(); }
47 :
48 55 : void V8ConsoleAgentImpl::restore() {
49 110 : if (!m_state->booleanProperty(ConsoleAgentState::consoleEnabled, false))
50 55 : return;
51 0 : enable();
52 : }
53 :
54 6685 : void V8ConsoleAgentImpl::messageAdded(V8ConsoleMessage* message) {
55 6685 : if (m_enabled) reportMessage(message, true);
56 6685 : }
57 :
58 0 : bool V8ConsoleAgentImpl::enabled() { return m_enabled; }
59 :
60 5 : void V8ConsoleAgentImpl::reportAllMessages() {
61 : V8ConsoleMessageStorage* storage =
62 : m_session->inspector()->ensureConsoleMessageStorage(
63 5 : m_session->contextGroupId());
64 5 : for (const auto& message : storage->messages()) {
65 0 : if (message->origin() == V8MessageOrigin::kConsole) {
66 5 : if (!reportMessage(message.get(), false)) return;
67 : }
68 : }
69 : }
70 :
71 10 : bool V8ConsoleAgentImpl::reportMessage(V8ConsoleMessage* message,
72 : bool generatePreview) {
73 : DCHECK_EQ(V8MessageOrigin::kConsole, message->origin());
74 10 : message->reportToFrontend(&m_frontend);
75 10 : m_frontend.flush();
76 : return m_session->inspector()->hasConsoleMessageStorage(
77 10 : m_session->contextGroupId());
78 : }
79 :
80 : } // namespace v8_inspector
|