cloudtrends / chromiumembedded

Automatically exported from code.google.com/p/chromiumembedded
1 stars 1 forks source link

Add a listener for ExecuteJavaScript success or error. #151

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Add a listener argument to CefFrame::ExecuteJavaScript that will receive 
asynchronous notification of JS execution success or error. Also potentially 
allow cancellation of JS execution via the listener. See the below thread for 
more details.

http://magpcss.org/ceforum/viewtopic.php?f=7&t=180

Original issue reported on code.google.com by magreenb...@gmail.com on 7 Dec 2010 at 2:24

GoogleCodeExporter commented 9 years ago
This patch adds an interface CefV8Task which encapsulates a script to run, its 
name and line number along with success and failure handling methods. A method 
called ExecuteJavaScriptTask has been added to CefFrame.

Unfortunately retrieving exceptions would require a change to WebCore so the 
error method takes no arguments however it is still useful for signalling 
errors.

Original comment by tom.rathbone@gmail.com on 22 Dec 2010 at 3:03

Attachments:

GoogleCodeExporter commented 9 years ago
Thank you for developing a patch for this functionality, overall it looks good.

Can you comment on the advantages of returning script, name and start line via 
CefV8Task methods instead of passing those arguments separately to 
ExecuteJavaScriptTask?

Also, what is the return value from WebFrame::executeScriptAndReturnValue if 
the JavaScript method returns no value? (ie, "function foo() { } foo();")

A few style-related nits:

1. Your comment for the HandleError() method in cef.h doesn't look correct.
2. There are unnecessary changes in CefBrowserImpl::GetURL.
3. The line wrapping is incorrect in CefBrowserImpl::UIT_ExecuteJavaScriptTask.

Original comment by magreenb...@gmail.com on 22 Dec 2010 at 3:30

GoogleCodeExporter commented 9 years ago
Combining script info into task..

Advantages: Only one parameter to pass to execute method, information available 
to the handler methods, users had to create a task object already for the 
handler methods.
Disadvantages: As a minimum must add 3 fields and 3 getters to user's 
task/handler object.

I felt the advantages outweighed the disadvantages but I admit the case is very 
slight.

You posed a good question regarding the return value for void methods.  At 
present this returns an empty handle too.  *Sigh*, I really should have tested 
that.  Let me see if there's anything that can be done about that, if not then 
we might have to lose the error channel completely.

Original comment by tom.rathbone@gmail.com on 22 Dec 2010 at 4:32

GoogleCodeExporter commented 9 years ago
Related webkit-dev thread: 
https://lists.webkit.org/pipermail/webkit-dev/2010-December/015417.html

Original comment by tom.rathbone@gmail.com on 22 Dec 2010 at 8:41

GoogleCodeExporter commented 9 years ago
Attached a second patch.  Style points corrected and undefined return values 
returned correctly.

This includes a small patch to Webkit. Whilst patching from CEF like this is 
undesirable this is a v minor one-liner so hopefully I can get it in the 
mainline in a reasonable timeframe.

Thoughts?

Original comment by tom.rathbone@gmail.com on 23 Dec 2010 at 11:36

Attachments:

GoogleCodeExporter commented 9 years ago
Let's wait for the patch to be accepted in WebKit and Chromium and then we'll 
add support to CEF.

Original comment by magreenb...@gmail.com on 23 Dec 2010 at 2:07

GoogleCodeExporter commented 9 years ago
Can you post a link to the WebKit bug so that we can track the status?

Original comment by magreenb...@gmail.com on 3 Jan 2011 at 5:17

GoogleCodeExporter commented 9 years ago
https://bugs.webkit.org/show_bug.cgi?id=51528

Have you had much involvement with the WebKit guys?  How would you recommend we 
get some exposure for this issue? It would be great to have someone review the 
change.

Original comment by tom.rathbone@gmail.com on 6 Jan 2011 at 4:12

GoogleCodeExporter commented 9 years ago
Two things:

1. Assign the WebKit bug to Yury Semikhatsky <yurys@chromium.org> because he's 
the one who commented on your email thread.
2. Set the commit-queue status on the patch to "commit-queue=?". See 
https://trac.webkit.org/wiki/CommitQueue for more details.

Original comment by magreenb...@gmail.com on 6 Jan 2011 at 4:22

GoogleCodeExporter commented 9 years ago
Seems I don't have permission to assign issues but I've set the commit queue 
flag as you suggested.

Original comment by tom.rathbone@gmail.com on 6 Jan 2011 at 4:30

GoogleCodeExporter commented 9 years ago
Please follow up on the changes requested to the WebKit bug in order to get the 
fix committed.

Original comment by magreenb...@gmail.com on 24 Jan 2011 at 9:14

GoogleCodeExporter commented 9 years ago
I posted an updated patch (created using the webkit-patch tool) to the webkit 
ticket.

Original comment by anthony....@gmail.com on 22 Feb 2011 at 8:08

GoogleCodeExporter commented 9 years ago
looks like yury reviewed the patch

Original comment by anthony....@gmail.com on 25 Feb 2011 at 7:49

GoogleCodeExporter commented 9 years ago
webkit patch was merged, webkit ticket was resolved.

Original comment by anthony....@gmail.com on 1 Mar 2011 at 5:51

GoogleCodeExporter commented 9 years ago
The CEF patch will probably need revising as errors cannot be properly 
distinguished from functions calling void.

Original comment by tom.rathbone@gmail.com on 1 Mar 2011 at 6:05

GoogleCodeExporter commented 9 years ago
This patch doesn't apply cleanly anymore, I get the following errors and I'm 
not immediately sure how to fix it.

3>------ Build started: Project: libcef_static, Configuration: Debug Win32 
------
3>Compiling...
3>web_drop_target_win.cc
3>http_header_utils.cc
3>webview_host_win.cc
3>stream_impl.cc
3>cef_process_ui_thread_win.cc
3>dom_event_impl.cc
3>browser_webkit_glue.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>browser_webview_delegate.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>browser_impl_win.cc
3>browser_webview_delegate_win.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>browser_webstoragearea_impl.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>browser_impl.cc
3>request_impl.cc
3>dom_node_impl.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>.\libcef\browser_impl.cc(603) : error C2259: 'CefFrameImpl' : cannot 
instantiate abstract class
3>        due to following members:
3>        'void CefFrame::ExecuteJavaScriptTask(CefRefPtr<T>)' : is abstract
3>        with
3>        [
3>            T=CefV8Task
3>        ]
3>        c:\src\chromium\src\cef\include/cef.h(699) : see declaration of 
'CefFrame::ExecuteJavaScriptTask'
3>.\libcef\browser_impl.cc(630) : error C2259: 'CefFrameImpl' : cannot 
instantiate abstract class
3>        due to following members:
3>        'void CefFrame::ExecuteJavaScriptTask(CefRefPtr<T>)' : is abstract
3>        with
3>        [
3>            T=CefV8Task
3>        ]
3>        c:\src\chromium\src\cef\include/cef.h(699) : see declaration of 
'CefFrame::ExecuteJavaScriptTask'
3>browser_resource_loader_bridge.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>xml_reader_impl.cc
3>dom_storage_context.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>cef_context.cc
3>cef_process_io_thread.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>scheme_impl.cc
3>cef_process_ui_thread.cc
3>browser_webstoragenamespace_impl.cc
3>dom_document_impl.cc
3>zip_reader_impl.cc
3>browser_settings.cc
3>browser_devtools_client.cc
3>browser_navigation_controller.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>v8_impl.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>browser_drag_delegate_win.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>response_impl.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>drag_download_file.cc
3>web_urlrequest_impl.cc
3>c:\src\chromium\src\cef\libcef\browser_impl.h(413) : error C2664: 
'CefBrowserImpl::ExecuteJavaScriptTask' : cannot convert parameter 2 from 
'CefRefPtr<T>' to 'CefRefPtr<T>'
3>        with
3>        [
3>            T=CefThreadSafeBase<CefFrame>::CefV8Task
3>        ]
3>        and
3>        [
3>            T=CefThreadSafeBase<CefBrowser>::CefV8Task
3>        ]
3>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
3>Build log was saved at 
"file://C:\src\chromium\src\cef\Debug\obj\libcef_static\BuildLog.htm"
3>libcef_static - 15 error(s), 0 warning(s)
4>------ Build started: Project: libcef, Configuration: Debug Win32 ------
4>Compiling...
4>post_data_element_cpptoc.cc
4>v8value_cpptoc.cc
4>response_cpptoc.cc
4>request_cpptoc.cc
4>xml_reader_cpptoc.cc
4>stream_writer_cpptoc.cc
4>stream_reader_cpptoc.cc
4>zip_reader_cpptoc.cc
4>frame_cpptoc.cc
4>web_urlrequest_cpptoc.cc
4>c:\src\chromium\src\cef\include/cef.h(324) : error C2504: 'CefV8Task' : base 
class undefined
4>        c:\src\chromium\src\cef\libcef_dll/ctocpp/ctocpp.h(18) : see 
reference to class template instantiation 'CefThreadSafeBase<ClassName>' being 
compiled
4>        with
4>        [
4>            ClassName=CefV8Task
4>        ]
4>        c:\src\chromium\src\cef\libcef_dll/ctocpp/v8task_ctocpp.h(27) : see 
reference to class template instantiation 
'CefCToCpp<ClassName,BaseName,StructName>' being compiled
4>        with
4>        [
4>            ClassName=CefV8TaskCToCpp,
4>            BaseName=CefV8Task,
4>            StructName=cef_v8task_t
4>        ]
4>c:\src\chromium\src\cef\libcef_dll/ctocpp/v8task_ctocpp.h(29) : error C2512: 
'CefCToCpp<ClassName,BaseName,StructName>' : no appropriate default constructor 
available
4>        with
4>        [
4>            ClassName=CefV8TaskCToCpp,
4>            BaseName=CefV8Task,
4>            StructName=cef_v8task_t
4>        ]
4>c:\src\chromium\src\cef\libcef_dll/ctocpp/v8task_ctocpp.h(29) : error C2614: 
'CefV8TaskCToCpp' : illegal member initialization: 
'CefCToCpp<CefV8TaskCToCpp,CefThreadSafeBase<CefV8Task>::CefV8Task,_cef_v8task_t
>' is not a base or member
4>domevent_cpptoc.cc
4>post_data_cpptoc.cc
4>browser_cpptoc.cc
4>domnode_cpptoc.cc
4>v8context_cpptoc.cc
4>domdocument_cpptoc.cc
4>v8handler_ctocpp.cc
4>cookie_visitor_ctocpp.cc
4>write_handler_ctocpp.cc
4>scheme_handler_ctocpp.cc
4>domevent_listener_ctocpp.cc
4>scheme_handler_factory_ctocpp.cc
4>domvisitor_ctocpp.cc
4>handler_ctocpp.cc
4>v8accessor_ctocpp.cc
4>read_handler_ctocpp.cc
4>download_handler_ctocpp.cc
4>web_urlrequest_client_ctocpp.cc
4>task_ctocpp.cc
4>v8task_ctocpp.cc
4>libcef_dll.cc
4>c:\src\chromium\src\cef\include/cef.h(324) : error C2504: 'CefV8Task' : base 
class undefined
4>        c:\src\chromium\src\cef\libcef_dll/ctocpp/ctocpp.h(18) : see 
reference to class template instantiation 'CefThreadSafeBase<ClassName>' being 
compiled
4>        with
4>        [
4>            ClassName=CefV8Task
4>        ]
4>        c:\src\chromium\src\cef\libcef_dll/ctocpp/v8task_ctocpp.h(27) : see 
reference to class template instantiation 
'CefCToCpp<ClassName,BaseName,StructName>' being compiled
4>        with
4>        [
4>            ClassName=CefV8TaskCToCpp,
4>            BaseName=CefV8Task,
4>            StructName=cef_v8task_t
4>        ]
4>c:\src\chromium\src\cef\libcef_dll/ctocpp/v8task_ctocpp.h(29) : error C2512: 
'CefCToCpp<ClassName,BaseName,StructName>' : no appropriate default constructor 
available
4>        with
4>        [
4>            ClassName=CefV8TaskCToCpp,
4>            BaseName=CefV8Task,
4>            StructName=cef_v8task_t
4>        ]
4>c:\src\chromium\src\cef\libcef_dll/ctocpp/v8task_ctocpp.h(29) : error C2614: 
'CefV8TaskCToCpp' : illegal member initialization: 
'CefCToCpp<CefV8TaskCToCpp,CefThreadSafeBase<CefV8Task>::CefV8Task,_cef_v8task_t
>' is not a base or member
4>Build log was saved at 
"file://C:\src\chromium\src\cef\Debug\obj\libcef\BuildLog.htm"
4>libcef - 6 error(s), 0 warning(s)
5>------ Build started: Project: libcef_dll_wrapper, Configuration: Debug Win32 
------
5>Compiling...
5>v8handler_cpptoc.cc
5>read_handler_cpptoc.cc
5>cookie_visitor_cpptoc.cc
5>handler_cpptoc.cc
5>c:\src\chromium\src\cef\libcef_dll/ctocpp/ctocpp.h(25) : error C2259: 
'CefFrameCToCpp' : cannot instantiate abstract class
5>        due to following members:
5>        'void CefFrame::ExecuteJavaScriptTask(CefRefPtr<T>)' : is abstract
5>        with
5>        [
5>            T=CefV8Task
5>        ]
5>        c:\src\chromium\src\cef\include/cef.h(699) : see declaration of 
'CefFrame::ExecuteJavaScriptTask'
5>        c:\src\chromium\src\cef\libcef_dll/ctocpp/ctocpp.h(23) : while 
compiling class template member function 'CefRefPtr<T> 
CefCToCpp<ClassName,BaseName,StructName>::Wrap(StructName *)'
5>        with
5>        [
5>            T=CefFrame,
5>            ClassName=CefFrameCToCpp,
5>            BaseName=CefFrame,
5>            StructName=cef_frame_t
5>        ]
5>        c:\src\chromium\src\cef\libcef_dll/ctocpp/frame_ctocpp.h(27) : see 
reference to class template instantiation 
'CefCToCpp<ClassName,BaseName,StructName>' being compiled
5>        with
5>        [
5>            ClassName=CefFrameCToCpp,
5>            BaseName=CefFrame,
5>            StructName=cef_frame_t
5>        ]
5>web_urlrequest_client_cpptoc.cc
5>task_cpptoc.cc
5>domvisitor_cpptoc.cc
5>domevent_listener_cpptoc.cc
5>download_handler_cpptoc.cc
5>v8task_cpptoc.cc
5>scheme_handler_factory_cpptoc.cc
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(25) : error C2027: use of undefined type 
'CefV8Task'
5>        c:\src\chromium\src\cef\include/cef.h(69) : see declaration of 
'CefV8Task'
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(25) : error C2039: 'GetScript' : is not 
a member of 'CefRefPtr<T>'
5>        with
5>        [
5>            T=CefV8Task
5>        ]
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(36) : error C2027: use of undefined type 
'CefV8Task'
5>        c:\src\chromium\src\cef\include/cef.h(69) : see declaration of 
'CefV8Task'
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(36) : error C2039: 'GetScriptName' : is 
not a member of 'CefRefPtr<T>'
5>        with
5>        [
5>            T=CefV8Task
5>        ]
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(46) : error C2027: use of undefined type 
'CefV8Task'
5>        c:\src\chromium\src\cef\include/cef.h(69) : see declaration of 
'CefV8Task'
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(46) : error C2039: 'GetStartLine' : is 
not a member of 'CefRefPtr<T>'
5>        with
5>        [
5>            T=CefV8Task
5>        ]
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(56) : error C2027: use of undefined type 
'CefV8Task'
5>        c:\src\chromium\src\cef\include/cef.h(69) : see declaration of 
'CefV8Task'
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(56) : error C2039: 'HandleSuccess' : is 
not a member of 'CefRefPtr<T>'
5>        with
5>        [
5>            T=CefV8Task
5>        ]
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(65) : error C2027: use of undefined type 
'CefV8Task'
5>        c:\src\chromium\src\cef\include/cef.h(69) : see declaration of 
'CefV8Task'
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(65) : error C2039: 'HandleError' : is 
not a member of 'CefRefPtr<T>'
5>        with
5>        [
5>            T=CefV8Task
5>        ]
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(73) : error C2512: 
'CefCppToC<ClassName,BaseName,StructName>' : no appropriate default constructor 
available
5>        with
5>        [
5>            ClassName=CefV8TaskCppToC,
5>            BaseName=CefV8Task,
5>            StructName=cef_v8task_t
5>        ]
5>.\libcef_dll\cpptoc\v8task_cpptoc.cc(73) : error C2614: 'CefV8TaskCppToC' : 
illegal member initialization: 
'CefCppToC<CefV8TaskCppToC,CefThreadSafeBase<CefBase>::CefV8Task,_cef_v8task_t>'
 is not a base or member
5>v8accessor_cpptoc.cc
5>write_handler_cpptoc.cc
5>scheme_handler_cpptoc.cc
5>cef_byte_read_handler.cc
5>cef_zip_archive.cc
5>cef_xml_object.cc
5>libcef_dll_wrapper.cc
5>post_data_element_ctocpp.cc
5>xml_reader_ctocpp.cc
5>v8context_ctocpp.cc
5>request_ctocpp.cc
5>c:\src\chromium\src\cef\libcef_dll/ctocpp/ctocpp.h(25) : error C2259: 
'CefFrameCToCpp' : cannot instantiate abstract class
5>        due to following members:
5>        'void CefFrame::ExecuteJavaScriptTask(CefRefPtr<T>)' : is abstract
5>        with
5>        [
5>            T=CefV8Task
5>        ]
5>        c:\src\chromium\src\cef\include/cef.h(699) : see declaration of 
'CefFrame::ExecuteJavaScriptTask'
5>        c:\src\chromium\src\cef\libcef_dll/ctocpp/ctocpp.h(23) : while 
compiling class template member function 'CefRefPtr<T> 
CefCToCpp<ClassName,BaseName,StructName>::Wrap(StructName *)'
5>        with
5>        [
5>            T=CefFrame,
5>            ClassName=CefFrameCToCpp,
5>            BaseName=CefFrame,
5>            StructName=cef_frame_t
5>        ]
5>        c:\src\chromium\src\cef\libcef_dll/ctocpp/frame_ctocpp.h(27) : see 
reference to class template instantiation 
'CefCToCpp<ClassName,BaseName,StructName>' being compiled
5>        with
5>        [
5>            ClassName=CefFrameCToCpp,
5>            BaseName=CefFrame,
5>            StructName=cef_frame_t
5>        ]
5>domdocument_ctocpp.cc
5>zip_reader_ctocpp.cc
5>frame_ctocpp.cc
5>domnode_ctocpp.cc
5>.\libcef_dll\ctocpp\frame_ctocpp.cc(166) : error C2664: 
'CefCppToC<ClassName,BaseName,StructName>::Wrap' : cannot convert parameter 1 
from 'CefRefPtr<T>' to 'CefRefPtr<T>'
5>        with
5>        [
5>            ClassName=CefV8TaskCppToC,
5>            BaseName=CefV8Task,
5>            StructName=cef_v8task_t
5>        ]
5>        and
5>        [
5>            T=CefThreadSafeBase<CefFrame>::CefV8Task
5>        ]
5>        and
5>        [
5>            T=CefV8Task
5>        ]
5>        No user-defined-conversion operator available that can perform this 
conversion, or the operator cannot be called
5>v8value_ctocpp.cc
5>stream_writer_ctocpp.cc
5>browser_ctocpp.cc
5>response_ctocpp.cc
5>c:\src\chromium\src\cef\libcef_dll/ctocpp/ctocpp.h(25) : error C2259: 
'CefFrameCToCpp' : cannot instantiate abstract class
5>        due to following members:
5>        'void CefFrame::ExecuteJavaScriptTask(CefRefPtr<T>)' : is abstract
5>        with
5>        [
5>            T=CefV8Task
5>        ]
5>        c:\src\chromium\src\cef\include/cef.h(699) : see declaration of 
'CefFrame::ExecuteJavaScriptTask'
5>        c:\src\chromium\src\cef\libcef_dll/ctocpp/ctocpp.h(23) : while 
compiling class template member function 'CefRefPtr<T> 
CefCToCpp<ClassName,BaseName,StructName>::Wrap(StructName *)'
5>        with
5>        [
5>            T=CefFrame,
5>            ClassName=CefFrameCToCpp,
5>            BaseName=CefFrame,
5>            StructName=cef_frame_t
5>        ]
5>        c:\src\chromium\src\cef\libcef_dll/ctocpp/frame_ctocpp.h(27) : see 
reference to class template instantiation 
'CefCToCpp<ClassName,BaseName,StructName>' being compiled
5>        with
5>        [
5>            ClassName=CefFrameCToCpp,
5>            BaseName=CefFrame,
5>            StructName=cef_frame_t
5>        ]
5>domevent_ctocpp.cc
5>post_data_ctocpp.cc
5>stream_reader_ctocpp.cc
5>web_urlrequest_ctocpp.cc
5>Build log was saved at 
"file://C:\src\chromium\src\cef\Debug\obj\libcef_dll_wrapper\BuildLog.htm"
5>libcef_dll_wrapper - 16 error(s), 0 warning(s)

Original comment by anthony....@gmail.com on 22 Apr 2011 at 11:57

GoogleCodeExporter commented 9 years ago
looks like the line numbers drifted far enough to put methods in the wrong 
classes, i recreated the patch by hand. The patcher project fails so i just 
modified ScriptController.cpp by hand for now, not sure why. Here's the failure 
output:

1>Reading patch file c:/src/chromium/src/cef/patch/patches/151_jstask_fix.patch
1>WARNING:root:source/target file does not exist
1>--- WebKit/WebCore/bindings/v8/ScriptController.cpp (revision 74182)
1>+++ WebKit/WebCore/bindings/v8/ScriptController.cpp (working copy)

Original comment by anthony....@gmail.com on 23 Apr 2011 at 12:57

Attachments:

GoogleCodeExporter commented 9 years ago
@comment#17: The change to patch/patch_source.cfg should no longer be necessary 
since the fix has been committed upstream in WebKit revision 79981. CEF is 
currently using WebKit revision 82827.

We will also need test cases for the new functionality added to v8_unittest.cc.

Original comment by magreenb...@gmail.com on 11 May 2011 at 7:21

GoogleCodeExporter commented 9 years ago
Your links don't appear to work for me.

Interesting, the patch applied after my modifications so I'm not sure if it 
applied only partially. I didn't look closely enough. It's working on CefSharp.

I will try to write some unit tests when I have a moment, thanks for the heads 
up.

Original comment by anthony....@gmail.com on 12 May 2011 at 6:40

GoogleCodeExporter commented 9 years ago
Hi, what the status of this issue?

As, i know it is successfully worked in CefSharp. Latest, ataranto's patch here:
https://github.com/ataranto/CefSharp/blob/master/patches/cef_151_v8task.v6.patch

Original comment by fdd...@gmail.com on 1 Sep 2011 at 12:45

GoogleCodeExporter commented 9 years ago
This should be done using V8 contexts which provides better functionality for 
error handling, etc. See issue #344 and the "JavaScript Invoke" example in 
cefclient.

Original comment by magreenb...@gmail.com on 31 Oct 2011 at 6:18