I'm trying to understand how DevTools can be used in CEF, so far I understood very little, but I wanted to ask this question:
My simplified code at the moment is this:
- Code: Select all
void OnAfterCreated(CefRefPtr<CefBrowser> browser) override
{
my_registration_ = browser->GetHost()->AddDevToolsMessageObserver(new my_CefDevToolsMessageObserver_class());
//I use a ExecuteDevToolsMethodor or SendDevToolsMessage:
//-----------------------------------------------------------------------------
CefRefPtr<CefDictionaryValue>my_CefDictionaryValue;
int status = browser->GetHost()->ExecuteDevToolsMethod(0, "Network.webSocketFrameReceived", my_CefDictionaryValue);
std::cout << "ExecuteDevToolsMethod_STATUS:"<< status <<std::endl;
//-----------------------------------------------------------------------------
//Or...
//-----------------------------------------------------------------------------
std::string my_string = "Network.webSocketFrameReceived";
void* message = &my_string[0];
bool my_bool = browser->GetHost()->SendDevToolsMessage(message, sizeof("Network.webSocketFrameReceived"));
std::cout << "SendDevToolsMessage_STATUS:"<< my_bool <<std::endl;
//-----------------------------------------------------------------------------
}
- Code: Select all
class my_CefDevToolsMessageObserver_class : public CefDevToolsMessageObserver
{
public:
bool OnDevToolsMessage(CefRefPtr<CefBrowser> browser, const void* message, size_t message_size) override
{
std::cout << "OnDevToolsMessage+++" << std::endl;
}
void OnDevToolsMethodResult(CefRefPtr<CefBrowser> browser, int message_id, bool success, const void* result, size_t result_size) override
{
std::cout << "OnDevToolsMethodResult+++" << std::endl;
}
void OnDevToolsEvent(CefRefPtr<CefBrowser> browser, const CefString& method, const void* params, size_t params_size) override
{
std::cout << "OnDevToolsEvent+++" << std::endl;
}
void OnDevToolsAgentAttached(CefRefPtr<CefBrowser> browser) override
{
std::cout << "OnDevToolsAgentAttached+++" << std::endl;
}
void OnDevToolsAgentDetached(CefRefPtr<CefBrowser> browser) override
{
std::cout << "OnDevToolsAgentDetached+++" << std::endl;
}
private:
IMPLEMENT_REFCOUNTING(my_CefDevToolsMessageObserver_class);
DISALLOW_COPY_AND_ASSIGN(my_CefDevToolsMessageObserver_class);
};
The description of the ExecuteDevToolsMethod method says:
This is a more structured version of SendDevToolsMessage....
That is, theoretically, ExecuteDevToolsMethod performs the same functions as SendDevToolsMessage.
But, When I use ExecuteDevToolsMethod in my so far simple code - then in my class my_CefDevToolsMessageObserver_class - only the OnDevToolsAgentAttached () method is called.
But, when I use the SendDevToolsMessage, then in my class my_CefDevToolsMessageObserver_class both the OnDevToolsAgentAttached() method and the OnDevToolsMessage() method are called.
But why is this happening?