1 // Copyright 2019 The Chromium 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 "content/browser/log_console_message.h"
6
7 #include "base/feature_list.h"
8 #include "base/logging.h"
9 #include "build/build_config.h"
10 #include "content/public/common/content_features.h"
11
12 namespace content {
13
ConsoleMessageLevelToLogSeverity(blink::mojom::ConsoleMessageLevel level)14 logging::LogSeverity ConsoleMessageLevelToLogSeverity(
15 blink::mojom::ConsoleMessageLevel level) {
16 logging::LogSeverity log_severity = logging::LOG_VERBOSE;
17 switch (level) {
18 case blink::mojom::ConsoleMessageLevel::kVerbose:
19 log_severity = logging::LOG_VERBOSE;
20 break;
21 case blink::mojom::ConsoleMessageLevel::kInfo:
22 log_severity = logging::LOG_INFO;
23 break;
24 case blink::mojom::ConsoleMessageLevel::kWarning:
25 log_severity = logging::LOG_WARNING;
26 break;
27 case blink::mojom::ConsoleMessageLevel::kError:
28 log_severity = logging::LOG_ERROR;
29 break;
30 }
31
32 return log_severity;
33 }
34
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)35 void LogConsoleMessage(blink::mojom::ConsoleMessageLevel log_level,
36 const base::string16& message,
37 int32_t line_number,
38 bool is_builtin_component,
39 bool is_off_the_record,
40 const base::string16& source_id) {
41 const int32_t resolved_level =
42 is_builtin_component ? ConsoleMessageLevelToLogSeverity(log_level)
43 : ::logging::LOG_INFO;
44 if (::logging::GetMinLogLevel() > resolved_level)
45 return;
46
47 // LogMessages can be persisted so this shouldn't be logged in incognito mode.
48 // This rule is not applied to WebUI pages or other builtin components,
49 // because WebUI and builtin components source code is a part of Chrome source
50 // code, and we want to treat messages from WebUI and other builtin components
51 // the same way as we treat log messages from native code.
52 if (is_off_the_record && !is_builtin_component)
53 return;
54
55 if (!base::FeatureList::IsEnabled(features::kLogJsConsoleMessages))
56 return;
57
58 logging::LogMessage("CONSOLE", line_number, resolved_level).stream()
59 << "\"" << message << "\", source: " << source_id << " (" << line_number
60 << ")";
61 }
62
63 } // namespace content
64