Revealing BrowserWebViewDelegate 'should' methods

Do not post support requests, bug reports or feature requests. Discuss CEF here. Non-CEF related discussion goes in General Discussion!

Revealing BrowserWebViewDelegate 'should' methods

Postby mutahhir » Thu Apr 07, 2011 11:08 am

Hi,

I'm new in this forum, so please pardon me if this has all been discussed before. After dealing with this issue for a couple of days, I thought best to ask the relevant people.

What I wanted to do was add support for:

shouldBeginEditing
shouldEndEditing
shouldInsertNode
shouldInsertText
shouldChangeSelectedRange
shouldDeleteRange
shouldApplyStyle

present in the BrowserWebViewDelegate and push them onto the handler.

Now this was relatively simple to do. The problem was that each function uses a Webkit::WebRange object to define the range. So naturally, I needed to add support for WebRange. Here is the abstract class:

Code: Select all
/*--cef(source=library)--*/
class CefDOMRange : public CefBase
{
public:
   /*--cef()--*/
   virtual int StartOffset() =0;
   /*--cef()--*/
   virtual int EndOffset() =0;
   /*--cef()--*/
   virtual CefRefPtr<CefDOMNode> StartContainer(int& exceptionCode) =0;
   /*--cef()--*/
   virtual CefRefPtr<CefDOMNode> EndContainer(int& exceptionCode) =0;
   /*--cef()--*/
   virtual CefString ToHTMLText() =0;
   /*--cef()--*/
   virtual CefString ToPlainText() =0;
   /*--cef()--*/
   virtual bool IsNull() =0;
};


Now, you say that you have to run Translator.py... and I did run Translator.bat which basically adds the requisite methods to CefHandler.

I've also edited the methods in handler_cpptoc.cc so the implementation is partially complete. However, translor.py just does not want to create CefDOMRange and any of the files relevant to it.

Do you have an idea what's going on?

Thanks!
mutahhir
Newbie
 
Posts: 2
Joined: Thu Apr 07, 2011 10:53 am

Re: Revealing BrowserWebViewDelegate 'should' methods

Postby magreenblatt » Thu Apr 07, 2011 1:21 pm

Did you put the CefDOMRange class definition in cef.h? I just tried it and it works for me.
Code: Select all
Parsing ..\include\cef.h...
Generating C API header...
  NOTE: Creating a backup of file ..\include\cef_capi.h
  NOTE: Writing file ..\include\cef_capi.h
In CppToC directory ..\libcef_dll\cpptoc...
Generating CefBrowserCppToC header...
Generating CefBrowserCppToC implementation...
Generating CefDOMDocumentCppToC header...
Generating CefDOMDocumentCppToC implementation...
Generating CefDOMEventCppToC header...
Generating CefDOMEventCppToC implementation...
Generating CefDOMEventListenerCppToC header...
Generating CefDOMEventListenerCppToC implementation...
Generating CefDOMNodeCppToC header...
Generating CefDOMNodeCppToC implementation...
Generating CefDOMRangeCppToC header...
  NOTE: Writing file ..\libcef_dll\cpptoc\domrange_cpptoc.h
Generating CefDOMRangeCppToC implementation...
  NOTE: Added implementation for domrange_start_offset
  NOTE: Added implementation for domrange_end_offset
  NOTE: Added implementation for domrange_start_container
  NOTE: Added implementation for domrange_end_container
  NOTE: Added implementation for domrange_to_htmltext
  NOTE: Added implementation for domrange_to_plain_text
  NOTE: Added implementation for domrange_is_null
  NOTE: Writing file ..\libcef_dll\cpptoc\domrange_cpptoc.cc
Generating CefDOMVisitorCppToC header...
Generating CefDOMVisitorCppToC implementation...
Generating CefDownloadHandlerCppToC header...
Generating CefDownloadHandlerCppToC implementation...
Generating CefFrameCppToC header...
Generating CefFrameCppToC implementation...
Generating CefHandlerCppToC header...
Generating CefHandlerCppToC implementation...
Generating CefPostDataCppToC header...
Generating CefPostDataCppToC implementation...
Generating CefPostDataElementCppToC header...
Generating CefPostDataElementCppToC implementation...
Generating CefReadHandlerCppToC header...
Generating CefReadHandlerCppToC implementation...
Generating CefRequestCppToC header...
Generating CefRequestCppToC implementation...
Generating CefResponseCppToC header...
Generating CefResponseCppToC implementation...
Generating CefSchemeHandlerCppToC header...
Generating CefSchemeHandlerCppToC implementation...
Generating CefSchemeHandlerFactoryCppToC header...
Generating CefSchemeHandlerFactoryCppToC implementation...
Generating CefStreamReaderCppToC header...
Generating CefStreamReaderCppToC implementation...
Generating CefStreamWriterCppToC header...
Generating CefStreamWriterCppToC implementation...
Generating CefTaskCppToC header...
Generating CefTaskCppToC implementation...
Generating CefV8AccessorCppToC header...
Generating CefV8AccessorCppToC implementation...
Generating CefV8ContextCppToC header...
Generating CefV8ContextCppToC implementation...
Generating CefV8HandlerCppToC header...
Generating CefV8HandlerCppToC implementation...
Generating CefV8ValueCppToC header...
Generating CefV8ValueCppToC implementation...
Generating CefWebURLRequestCppToC header...
Generating CefWebURLRequestCppToC implementation...
Generating CefWebURLRequestClientCppToC header...
Generating CefWebURLRequestClientCppToC implementation...
Generating CefWriteHandlerCppToC header...
Generating CefWriteHandlerCppToC implementation...
Generating CefXmlReaderCppToC header...
Generating CefXmlReaderCppToC implementation...
Generating CefZipReaderCppToC header...
Generating CefZipReaderCppToC implementation...
In CToCpp directory ..\libcef_dll\ctocpp...
Generating CefBrowserCToCpp header...
Generating CefBrowserCToCpp implementation...
Generating CefDOMDocumentCToCpp header...
Generating CefDOMDocumentCToCpp implementation...
Generating CefDOMEventCToCpp header...
Generating CefDOMEventCToCpp implementation...
Generating CefDOMEventListenerCToCpp header...
Generating CefDOMEventListenerCToCpp implementation...
Generating CefDOMNodeCToCpp header...
Generating CefDOMNodeCToCpp implementation...
Generating CefDOMRangeCToCpp header...
  NOTE: Writing file ..\libcef_dll\ctocpp\domrange_ctocpp.h
Generating CefDOMRangeCToCpp implementation...
  NOTE: Added implementation for CefDOMRangeCToCpp::StartOffset
  NOTE: Added implementation for CefDOMRangeCToCpp::EndOffset
  NOTE: Added implementation for CefDOMRangeCToCpp::StartContainer
  NOTE: Added implementation for CefDOMRangeCToCpp::EndContainer
  NOTE: Added implementation for CefDOMRangeCToCpp::ToHTMLText
  NOTE: Added implementation for CefDOMRangeCToCpp::ToPlainText
  NOTE: Added implementation for CefDOMRangeCToCpp::IsNull
  NOTE: Writing file ..\libcef_dll\ctocpp\domrange_ctocpp.cc
Generating CefDOMVisitorCToCpp header...
Generating CefDOMVisitorCToCpp implementation...
Generating CefDownloadHandlerCToCpp header...
Generating CefDownloadHandlerCToCpp implementation...
Generating CefFrameCToCpp header...
Generating CefFrameCToCpp implementation...
Generating CefHandlerCToCpp header...
Generating CefHandlerCToCpp implementation...
Generating CefPostDataCToCpp header...
Generating CefPostDataCToCpp implementation...
Generating CefPostDataElementCToCpp header...
Generating CefPostDataElementCToCpp implementation...
Generating CefReadHandlerCToCpp header...
Generating CefReadHandlerCToCpp implementation...
Generating CefRequestCToCpp header...
Generating CefRequestCToCpp implementation...
Generating CefResponseCToCpp header...
Generating CefResponseCToCpp implementation...
Generating CefSchemeHandlerCToCpp header...
Generating CefSchemeHandlerCToCpp implementation...
Generating CefSchemeHandlerFactoryCToCpp header...
Generating CefSchemeHandlerFactoryCToCpp implementation...
Generating CefStreamReaderCToCpp header...
Generating CefStreamReaderCToCpp implementation...
Generating CefStreamWriterCToCpp header...
Generating CefStreamWriterCToCpp implementation...
Generating CefTaskCToCpp header...
Generating CefTaskCToCpp implementation...
Generating CefV8AccessorCToCpp header...
Generating CefV8AccessorCToCpp implementation...
Generating CefV8ContextCToCpp header...
Generating CefV8ContextCToCpp implementation...
Generating CefV8HandlerCToCpp header...
Generating CefV8HandlerCToCpp implementation...
Generating CefV8ValueCToCpp header...
Generating CefV8ValueCToCpp implementation...
Generating CefWebURLRequestCToCpp header...
Generating CefWebURLRequestCToCpp implementation...
Generating CefWebURLRequestClientCToCpp header...
Generating CefWebURLRequestClientCToCpp implementation...
Generating CefWriteHandlerCToCpp header...
Generating CefWriteHandlerCToCpp implementation...
Generating CefXmlReaderCToCpp header...
Generating CefXmlReaderCToCpp implementation...
Generating CefZipReaderCToCpp header...
Generating CefZipReaderCToCpp implementation...
Done - Wrote 5 files.
Press any key to continue . . .

The current DOM implementation builds the WebRange concept into the CefDOMDocument class. You should be careful with your implementation of CefDOMRange that all WebKit objects are properly detached after the handler returns.
magreenblatt
Site Admin
 
Posts: 12382
Joined: Fri May 29, 2009 6:57 pm

Re: Revealing BrowserWebViewDelegate 'should' methods

Postby mutahhir » Fri Apr 08, 2011 8:41 am

The current DOM implementation builds the WebRange concept into the CefDOMDocument class


What do you mean? Is there an easier way to implement the above functions without going through these translator hoops. Somehow, the translator now works miraculously... all I did was remove all the newlines between the function declarations before posting here...

I think most of this is happening because of the C->Cpp and back which I am not completely understanding here... is there someway I can remove that support because all I need is the Cpp functionality

Thanks!
mutahhir
Newbie
 
Posts: 2
Joined: Thu Apr 07, 2011 10:53 am

Re: Revealing BrowserWebViewDelegate 'should' methods

Postby magreenblatt » Fri Apr 08, 2011 8:53 am

What do you mean?

CefDOMDocument has GetSelection*() methods that internally retrieve data from a WebRange.

Is there an easier way to implement the above functions without going through these translator hoops

If you can describe the problems that you're having I can probably help you work through them.

Creating the C API layer is necessary in order to use CEF as a DLL. You can link CEF statically with your application to avoid using the C API layer, but that has its own complications [1]. If you want your changes included in the base CEF distribution you will need to implement the C API layer.

[1] viewtopic.php?f=6&t=203
magreenblatt
Site Admin
 
Posts: 12382
Joined: Fri May 29, 2009 6:57 pm


Return to CEF Discussion

Who is online

Users browsing this forum: No registered users and 19 guests