mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Add log level to CefDisplayHandler::OnConsoleMessage (issue #2234)
This commit is contained in:
committed by
Marshall Greenblatt
parent
c04652d193
commit
552a3bf353
@ -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);
|
||||||
|
@ -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) {
|
||||||
|
@ -94,6 +94,11 @@ typedef enum {
|
|||||||
///
|
///
|
||||||
LOGSEVERITY_VERBOSE,
|
LOGSEVERITY_VERBOSE,
|
||||||
|
|
||||||
|
///
|
||||||
|
// DEBUG logging.
|
||||||
|
///
|
||||||
|
LOGSEVERITY_DEBUG = LOGSEVERITY_VERBOSE,
|
||||||
|
|
||||||
///
|
///
|
||||||
// INFO logging.
|
// INFO logging.
|
||||||
///
|
///
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
}
|
Reference in New Issue
Block a user