anchor.diff:      CEF_SETFOCUS: Handle_CEF_SETFOCUS(Message);
       CEF_KEYEVENT: Handle_CEF_KEYEVENT(Message);
       CEF_BEFOREBROWSE: Handle_CEF_BEFOREBROWSE(Message);
  +    CEF_CONSOLEMESSAGE: Handle_CEF_CONSOLEMESSAGE(Message);
     end;
   
     if Self <> nil then
  
positive.code:   const browser: ICefBrowser; level: Cardinal; const message, source: ustring;
    line: Integer; out Result: Boolean);
  var
    id: string;
    I: Integer;
  begin
    AssertVclThread;
    id := LowerCase(ExtractFileName(ParamStr(0)))+'_'+GetVersionString+'_script_';
    if Assigned(Owner)
      then id := id + Owner.ClassName
      else id := id + 'unknown';
  
    I := string(source).LastDelimiter('/');
    id := id + '_' + string(source).SubString(I + 1) + '_' + IntToStr(line);
  
    LogExceptionToExternalHandler(id, 'Error occurred at line '+IntToStr(line)+' of '+source, message, '');
  
    Result := True;
  end;
  
  procedure TframeCEFHost.Handle_CEF_DESTROY(var Message: TMessage);
  
negative.code:   params.Free;
  end;
  
  procedure TframeCEFHost.Handle_CEF_CONSOLEMESSAGE(var message: TMessage);
  var
    I: Integer;
    id: string;
    p: PCEFConsoleMessageEventData;
  begin
    AssertVclThread;
    p := PCEFConsoleMessageEventData(message.LParam);
  
    id := LowerCase(ExtractFileName(ParamStr(0)))+'_'+GetVersionString+'_script_';
    if Assigned(Owner)
      then id := id + Owner.ClassName
      else id := id + 'unknown';
  
    I := string(p.source).LastDelimiter('/');
    id := id + '_' + string(p.source).SubString(I + 1) + '_' + IntToStr(p.line);
  
    LogExceptionToExternalHandler(id, 'Error occurred at line '+IntToStr(p.line)+' of '+p.source, p.message, '');
  
    FreeMem(p);
  end;
  
  procedure TframeCEFHost.cefBeforeBrowse(Sender: TObject;
    const browser: ICefBrowser; const frame: ICefFrame;
    const request: ICefRequest; user_gesture, isRedirect: Boolean;
  