// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/browser/log_console_message.h" #include "base/feature_list.h" #include "base/logging.h" #include "build/build_config.h" #include "content/public/common/content_features.h" namespace content { logging::LogSeverity ConsoleMessageLevelToLogSeverity( blink::mojom::ConsoleMessageLevel level) { logging::LogSeverity log_severity = logging::LOG_VERBOSE; switch (level) { case blink::mojom::ConsoleMessageLevel::kVerbose: log_severity = logging::LOG_VERBOSE; break; case blink::mojom::ConsoleMessageLevel::kInfo: log_severity = logging::LOG_INFO; break; case blink::mojom::ConsoleMessageLevel::kWarning: log_severity = logging::LOG_WARNING; break; case blink::mojom::ConsoleMessageLevel::kError: log_severity = logging::LOG_ERROR; break; } return log_severity; } void LogConsoleMessage(blink::mojom::ConsoleMessageLevel log_level, const base::string16& message, int32_t line_number, bool is_builtin_component, bool is_off_the_record, const base::string16& source_id) { const int32_t resolved_level = is_builtin_component ? ConsoleMessageLevelToLogSeverity(log_level) : ::logging::LOG_INFO; if (::logging::GetMinLogLevel() > resolved_level) return; // LogMessages can be persisted so this shouldn't be logged in incognito mode. // This rule is not applied to WebUI pages or other builtin components, // because WebUI and builtin components source code is a part of Chrome source // code, and we want to treat messages from WebUI and other builtin components // the same way as we treat log messages from native code. if (is_off_the_record && !is_builtin_component) return; if (!base::FeatureList::IsEnabled(features::kLogJsConsoleMessages)) return; logging::LogMessage("CONSOLE", line_number, resolved_level).stream() << "\"" << message << "\", source: " << source_id << " (" << line_number << ")"; } } // namespace content