CEF+DevTools=ExecuteDevToolsMethod vs SendDevToolsMessage

Having problems with building or using CEF's C/C++ APIs? This forum is here to help. Please do not post bug reports or feature requests here.

CEF+DevTools=ExecuteDevToolsMethod vs SendDevToolsMessage

Postby Staxcelrom » Wed Apr 06, 2022 1:01 pm

Hello,

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?
Staxcelrom
Expert
 
Posts: 206
Joined: Wed Jan 26, 2022 8:20 am

Return to Support Forum

Who is online

Users browsing this forum: No registered users and 33 guests