Add log level to CefDisplayHandler::OnConsoleMessage (issue #2234)

This commit is contained in:
Mario Pistrich
2017-12-18 15:05:38 -05:00
committed by Marshall Greenblatt
parent c04652d193
commit 552a3bf353
10 changed files with 267 additions and 9 deletions

View File

@ -33,7 +33,7 @@
// by hand. See the translator.README.txt file in the tools directory for // by hand. See the translator.README.txt file in the tools directory for
// more information. // more information.
// //
// $hash=979968e494e9d7c4d5117a1753acade5d0e79215$ // $hash=57ae11d3194ee046ea357503b9349f819ac9c3da$
// //
#ifndef CEF_INCLUDE_CAPI_CEF_DISPLAY_HANDLER_CAPI_H_ #ifndef CEF_INCLUDE_CAPI_CEF_DISPLAY_HANDLER_CAPI_H_
@ -118,6 +118,7 @@ typedef struct _cef_display_handler_t {
/// ///
int(CEF_CALLBACK* on_console_message)(struct _cef_display_handler_t* self, int(CEF_CALLBACK* on_console_message)(struct _cef_display_handler_t* self,
struct _cef_browser_t* browser, struct _cef_browser_t* browser,
cef_log_severity_t level,
const cef_string_t* message, const cef_string_t* message,
const cef_string_t* source, const cef_string_t* source,
int line); int line);

View File

@ -109,6 +109,7 @@ class CefDisplayHandler : public virtual CefBaseRefCounted {
/// ///
/*--cef(optional_param=message,optional_param=source)--*/ /*--cef(optional_param=message,optional_param=source)--*/
virtual bool OnConsoleMessage(CefRefPtr<CefBrowser> browser, virtual bool OnConsoleMessage(CefRefPtr<CefBrowser> browser,
cef_log_severity_t level,
const CefString& message, const CefString& message,
const CefString& source, const CefString& source,
int line) { int line) {

View File

@ -94,6 +94,11 @@ typedef enum {
/// ///
LOGSEVERITY_VERBOSE, LOGSEVERITY_VERBOSE,
///
// DEBUG logging.
///
LOGSEVERITY_DEBUG = LOGSEVERITY_VERBOSE,
/// ///
// INFO logging. // INFO logging.
/// ///

View File

@ -2290,8 +2290,24 @@ bool CefBrowserHostImpl::DidAddMessageToConsole(
const base::string16& source_id) { const base::string16& source_id) {
if (client_.get()) { if (client_.get()) {
CefRefPtr<CefDisplayHandler> handler = client_->GetDisplayHandler(); CefRefPtr<CefDisplayHandler> handler = client_->GetDisplayHandler();
if (handler.get()) if (handler.get()) {
return handler->OnConsoleMessage(this, message, source_id, line_no); // Use LOGSEVERITY_DEBUG for unrecognized |level| values.
cef_log_severity_t log_level = LOGSEVERITY_DEBUG;
switch (level) {
case 0:
log_level = LOGSEVERITY_INFO;
break;
case 1:
log_level = LOGSEVERITY_WARNING;
break;
case 2:
log_level = LOGSEVERITY_ERROR;
break;
}
return handler->OnConsoleMessage(this, log_level, message, source_id,
line_no);
}
} }
return false; return false;

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=b52f437f558356645aaf45ee20cf4f3983e03891$ // $hash=5fc57065576d03784d294cefc9bdddb06d007798$
// //
#include "libcef_dll/cpptoc/display_handler_cpptoc.h" #include "libcef_dll/cpptoc/display_handler_cpptoc.h"
@ -161,6 +161,7 @@ display_handler_on_status_message(struct _cef_display_handler_t* self,
int CEF_CALLBACK int CEF_CALLBACK
display_handler_on_console_message(struct _cef_display_handler_t* self, display_handler_on_console_message(struct _cef_display_handler_t* self,
cef_browser_t* browser, cef_browser_t* browser,
cef_log_severity_t level,
const cef_string_t* message, const cef_string_t* message,
const cef_string_t* source, const cef_string_t* source,
int line) { int line) {
@ -177,8 +178,8 @@ display_handler_on_console_message(struct _cef_display_handler_t* self,
// Execute // Execute
bool _retval = CefDisplayHandlerCppToC::Get(self)->OnConsoleMessage( bool _retval = CefDisplayHandlerCppToC::Get(self)->OnConsoleMessage(
CefBrowserCToCpp::Wrap(browser), CefString(message), CefString(source), CefBrowserCToCpp::Wrap(browser), level, CefString(message),
line); CefString(source), line);
// Return type: bool // Return type: bool
return _retval; return _retval;

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=1948d2651fc5f7fd6aab7878da869b5d231b9cde$ // $hash=cbda5350da86e9859384cfa2c06f09b02a5431aa$
// //
#include "libcef_dll/ctocpp/display_handler_ctocpp.h" #include "libcef_dll/ctocpp/display_handler_ctocpp.h"
@ -156,6 +156,7 @@ void CefDisplayHandlerCToCpp::OnStatusMessage(CefRefPtr<CefBrowser> browser,
} }
bool CefDisplayHandlerCToCpp::OnConsoleMessage(CefRefPtr<CefBrowser> browser, bool CefDisplayHandlerCToCpp::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
cef_log_severity_t level,
const CefString& message, const CefString& message,
const CefString& source, const CefString& source,
int line) { int line) {
@ -173,7 +174,7 @@ bool CefDisplayHandlerCToCpp::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
// Execute // Execute
int _retval = _struct->on_console_message( int _retval = _struct->on_console_message(
_struct, CefBrowserCppToC::Wrap(browser), message.GetStruct(), _struct, CefBrowserCppToC::Wrap(browser), level, message.GetStruct(),
source.GetStruct(), line); source.GetStruct(), line);
// Return type: bool // Return type: bool

View File

@ -9,7 +9,7 @@
// implementations. See the translator.README.txt file in the tools directory // implementations. See the translator.README.txt file in the tools directory
// for more information. // for more information.
// //
// $hash=6d8ab7f2086373de52eb178cc640d2d553d43c58$ // $hash=834d40adeea090f273d3b4a1c47b5e5ab546f542$
// //
#ifndef CEF_LIBCEF_DLL_CTOCPP_DISPLAY_HANDLER_CTOCPP_H_ #ifndef CEF_LIBCEF_DLL_CTOCPP_DISPLAY_HANDLER_CTOCPP_H_
@ -48,6 +48,7 @@ class CefDisplayHandlerCToCpp
void OnStatusMessage(CefRefPtr<CefBrowser> browser, void OnStatusMessage(CefRefPtr<CefBrowser> browser,
const CefString& value) override; const CefString& value) override;
bool OnConsoleMessage(CefRefPtr<CefBrowser> browser, bool OnConsoleMessage(CefRefPtr<CefBrowser> browser,
cef_log_severity_t level,
const CefString& message, const CefString& message,
const CefString& source, const CefString& source,
int line) override; int line) override;

View File

@ -394,6 +394,7 @@ void ClientHandler::OnFullscreenModeChange(CefRefPtr<CefBrowser> browser,
} }
bool ClientHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser, bool ClientHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
cef_log_severity_t level,
const CefString& message, const CefString& message,
const CefString& source, const CefString& source,
int line) { int line) {
@ -402,6 +403,24 @@ bool ClientHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser,
FILE* file = fopen(console_log_file_.c_str(), "a"); FILE* file = fopen(console_log_file_.c_str(), "a");
if (file) { if (file) {
std::stringstream ss; std::stringstream ss;
ss << "Level: ";
switch (level) {
case LOGSEVERITY_DEBUG:
ss << "Debug" << NEWLINE;
break;
case LOGSEVERITY_INFO:
ss << "Info" << NEWLINE;
break;
case LOGSEVERITY_WARNING:
ss << "Warn" << NEWLINE;
break;
case LOGSEVERITY_ERROR:
ss << "Error" << NEWLINE;
break;
default:
NOTREACHED();
break;
}
ss << "Message: " << message.ToString() << NEWLINE ss << "Message: " << message.ToString() << NEWLINE
<< "Source: " << source.ToString() << NEWLINE << "Line: " << line << "Source: " << source.ToString() << NEWLINE << "Line: " << line
<< NEWLINE << "-----------------------" << NEWLINE; << NEWLINE << "-----------------------" << NEWLINE;

View File

@ -147,6 +147,7 @@ class ClientHandler : public CefClient,
void OnFullscreenModeChange(CefRefPtr<CefBrowser> browser, void OnFullscreenModeChange(CefRefPtr<CefBrowser> browser,
bool fullscreen) OVERRIDE; bool fullscreen) OVERRIDE;
bool OnConsoleMessage(CefRefPtr<CefBrowser> browser, bool OnConsoleMessage(CefRefPtr<CefBrowser> browser,
cef_log_severity_t level,
const CefString& message, const CefString& message,
const CefString& source, const CefString& source,
int line) OVERRIDE; int line) OVERRIDE;

View File

@ -242,3 +242,215 @@ TEST(DisplayTest, AutoResize) {
handler->ExecuteTest(); handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler); ReleaseAndWaitForDestructor(handler);
} }
namespace {
// Browser side.
class ConsoleTestHandler : public TestHandler {
public:
struct TestConfig {
// Use something other than 1 as |line| for testing.
explicit TestConfig(cef_log_severity_t message_level)
: level(message_level),
message("'Test Message'"),
expected_message("Test Message"),
source("http://tests-console-message/level.html"),
line(42) {}
cef_log_severity_t level;
std::string message;
std::string expected_message;
std::string source;
int line;
std::string function;
};
ConsoleTestHandler(const TestConfig& config) : config_(config) {}
void RunTest() override {
// Add the resources that will be used to print to console.
AddResource(
config_.source,
CreateResourceContent(config_.message, config_.function, config_.line),
"text/html");
// Create the browser.
CreateBrowser(config_.source);
// Time out the test after a reasonable period of time.
SetTestTimeout();
}
void OnLoadingStateChange(CefRefPtr<CefBrowser> browser,
bool isLoading,
bool canGoBack,
bool canGoForward) override {
if (isLoading)
return;
// Print console message after loading.
browser->GetMainFrame()->ExecuteJavaScript("printMessage()", config_.source,
0);
}
bool OnConsoleMessage(CefRefPtr<CefBrowser> browser,
cef_log_severity_t level,
const CefString& message,
const CefString& source,
int line) override {
EXPECT_EQ(config_.level, level);
EXPECT_EQ(config_.expected_message, message.ToString());
EXPECT_EQ(config_.source, source.ToString());
EXPECT_EQ(config_.line, line);
TestHandler::DestroyTest();
return false;
}
private:
std::string CreateResourceContent(const CefString& message,
const CefString& function,
int line) {
std::string content = "<html><script>function printMessage() { ";
for (int i = 1; i < line; ++i) {
// Add additional lines to test the |line| argument in |OnConsoleMessage|.
content += ";\n";
}
content += "console." + function.ToString() + "(" + message.ToString() +
"); }</script></html>";
return content;
}
TestConfig config_;
IMPLEMENT_REFCOUNTING(ConsoleTestHandler);
};
} // namespace
TEST(DisplayTest, OnConsoleMessageDebug) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_DEBUG);
config.function = "debug";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageCount) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_DEBUG);
config.function = "count";
config.expected_message = "Test Message: 1";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageTimeEnd) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_DEBUG);
config.function = "timeEnd";
config.expected_message = "Test Message: 0ms";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageInfo) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_INFO);
config.function = "info";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageLog) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_INFO);
config.function = "log";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageGroup) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_INFO);
config.function = "group";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageGroupCollapsed) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_INFO);
config.function = "groupCollapsed";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageGroupEnd) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_INFO);
config.function = "groupEnd";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageTable) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_INFO);
config.function = "table";
config.message = "[1, 2, 3]";
config.expected_message = "1,2,3";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageTrace) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_INFO);
config.function = "trace";
config.message = "";
config.expected_message = "console.trace";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageWarn) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_WARNING);
config.function = "warn";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageError) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_ERROR);
config.function = "error";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}
TEST(DisplayTest, OnConsoleMessageAssert) {
ConsoleTestHandler::TestConfig config(LOGSEVERITY_ERROR);
config.function = "assert";
config.message = "false";
config.expected_message = "console.assert";
CefRefPtr<ConsoleTestHandler> handler = new ConsoleTestHandler(config);
handler->ExecuteTest();
ReleaseAndWaitForDestructor(handler);
}