Home | History | Annotate | Download | only in inspector
      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 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       m_enabled(false) {}
     26 
     27 V8ConsoleAgentImpl::~V8ConsoleAgentImpl() {}
     28 
     29 Response V8ConsoleAgentImpl::enable() {
     30   if (m_enabled) return Response::OK();
     31   m_state->setBoolean(ConsoleAgentState::consoleEnabled, true);
     32   m_enabled = true;
     33   m_session->inspector()->enableStackCapturingIfNeeded();
     34   reportAllMessages();
     35   return Response::OK();
     36 }
     37 
     38 Response V8ConsoleAgentImpl::disable() {
     39   if (!m_enabled) return Response::OK();
     40   m_session->inspector()->disableStackCapturingIfNeeded();
     41   m_state->setBoolean(ConsoleAgentState::consoleEnabled, false);
     42   m_enabled = false;
     43   return Response::OK();
     44 }
     45 
     46 Response V8ConsoleAgentImpl::clearMessages() { return Response::OK(); }
     47 
     48 void V8ConsoleAgentImpl::restore() {
     49   if (!m_state->booleanProperty(ConsoleAgentState::consoleEnabled, false))
     50     return;
     51   enable();
     52 }
     53 
     54 void V8ConsoleAgentImpl::messageAdded(V8ConsoleMessage* message) {
     55   if (m_enabled) reportMessage(message, true);
     56 }
     57 
     58 bool V8ConsoleAgentImpl::enabled() { return m_enabled; }
     59 
     60 void V8ConsoleAgentImpl::reportAllMessages() {
     61   V8ConsoleMessageStorage* storage =
     62       m_session->inspector()->ensureConsoleMessageStorage(
     63           m_session->contextGroupId());
     64   for (const auto& message : storage->messages()) {
     65     if (message->origin() == V8MessageOrigin::kConsole) {
     66       if (!reportMessage(message.get(), false)) return;
     67     }
     68   }
     69 }
     70 
     71 bool V8ConsoleAgentImpl::reportMessage(V8ConsoleMessage* message,
     72                                        bool generatePreview) {
     73   DCHECK(message->origin() == V8MessageOrigin::kConsole);
     74   message->reportToFrontend(&m_frontend);
     75   m_frontend.flush();
     76   return m_session->inspector()->hasConsoleMessageStorage(
     77       m_session->contextGroupId());
     78 }
     79 
     80 }  // namespace v8_inspector
     81