// 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 defined(OS_ANDROID)
  if (!base::FeatureList::IsEnabled(features::kLogJsConsoleMessages))
    return;
#endif  // OS_ANDROID

  logging::LogMessage("CONSOLE", line_number, resolved_level).stream()
      << "\"" << message << "\", source: " << source_id << " (" << line_number
      << ")";
}

}  // namespace content
