CEF2 Development Status

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

Re: CEF2 Development Status

Postby qifuren1985 » Thu Aug 26, 2010 12:00 am

We should write new cpp file to implement it:
#include "common/cef_messages.h"

#define MESSAGES_INTERNAL_IMPL_FILE "common/cef_messages_internal.h"
#include "ipc/ipc_message_impl_macros.h"


qifuren1985 wrote:When I build cef2, at last link time, it has some link errors:
3>cef2_browser.lib(cef_connector.obj) : error LNK2019: unresolved external symbol "public: __thiscall CefHostMsg_BrowserCreated::CefHostMsg_BrowserCreated(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &)" (??0CefHostMsg_BrowserCreated@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABH@Z) referenced in function "private: void __thiscall CefConnector::OnSendBrowserInitialized(struct HWND__ *)" (?OnSendBrowserInitialized@CefConnector@@AAEXPAUHWND__@@@Z)
3>cef2_browser.lib(cef_connector.obj) : error LNK2019: unresolved external symbol "public: __thiscall CefHostMsg_TabAdded::CefHostMsg_TabAdded(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,bool const &)" (??0CefHostMsg_TabAdded@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABHAB_N@Z) referenced in function "private: void __thiscall CefConnector::OnSendTabAdded(int,bool)" (?OnSendTabAdded@CefConnector@@AAEXH_N@Z)
3>cef2_browser.lib(cef_connector.obj) : error LNK2019: unresolved external symbol "public: __thiscall CefHostMsg_TabRemoved::CefHostMsg_TabRemoved(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &)" (??0CefHostMsg_TabRemoved@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABH@Z) referenced in function "private: void __thiscall CefConnector::OnSendTabRemoved(int)" (?OnSendTabRemoved@CefConnector@@AAEXH@Z)
3>cef2_browser.lib(cef_connector.obj) : error LNK2019: unresolved external symbol "public: __thiscall CefHostMsg_TabSelected::CefHostMsg_TabSelected(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,bool const &)" (??0CefHostMsg_TabSelected@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABHAB_N@Z) referenced in function "private: void __thiscall CefConnector::OnSendTabSelected(int,bool)" (?OnSendTabSelected@CefConnector@@AAEXH_N@Z)
3>cef2_browser.lib(cef_connector.obj) : error LNK2019: unresolved external symbol "public: __thiscall CefHostMsg_TabChanged::CefHostMsg_TabChanged(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)" (??0CefHostMsg_TabChanged@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABH0ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z) referenced in function "private: void __thiscall CefConnector::OnSendTabChanged(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)" (?OnSendTabChanged@CefConnector@@AAEXHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@3@@Z)
3>cef2_browser.lib(cef_connector.obj) : error LNK2019: unresolved external symbol "public: __thiscall CefHostMsg_TabNavStatus::CefHostMsg_TabNavStatus(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &,bool const &,bool const &)" (??0CefHostMsg_TabNavStatus@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABHAB_N2@Z) referenced in function "private: void __thiscall CefConnector::OnSendTabNavStatus(int,bool,bool)" (?OnSendTabNavStatus@CefConnector@@AAEXH_N0@Z)
3>cef2_browser.lib(cef_connector.obj) : error LNK2019: unresolved external symbol "public: __thiscall CefHostMsg_TabLoadStart::CefHostMsg_TabLoadStart(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &)" (??0CefHostMsg_TabLoadStart@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABH@Z) referenced in function "private: void __thiscall CefConnector::OnSendTabLoadStart(int)" (?OnSendTabLoadStart@CefConnector@@AAEXH@Z)
3>cef2_browser.lib(cef_connector.obj) : error LNK2019: unresolved external symbol "public: __thiscall CefHostMsg_TabLoadStop::CefHostMsg_TabLoadStop(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int const &)" (??0CefHostMsg_TabLoadStop@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABH@Z) referenced in function "private: void __thiscall CefConnector::OnSendTabLoadStop(int)" (?OnSendTabLoadStop@CefConnector@@AAEXH@Z)
3>cef2_browser.lib(cef_channel.obj) : error LNK2019: unresolved external symbol "public: static bool __cdecl IPC::MessageWithTuple<struct Tuple5<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool> >::Read(class IPC::Message const *,struct Tuple5<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool> *)" (?Read@?$MessageWithTuple@U?$Tuple5@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV12@V12@_N@@@IPC@@SA_NPBVMessage@2@PAU?$Tuple5@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV12@V12@_N@@@Z) referenced in function "public: static bool __cdecl IPC::MessageWithTuple<struct Tuple5<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,bool> >::Dispatch<class CefChannel,void (__thiscall CefChannel::*)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)>(class IPC::Message const *,class CefChannel *,void (__thiscall CefChannel::*)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool))" (??$Dispatch@VCefChannel@@P81@AEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H00_N@Z@?$MessageWithTuple@U?$Tuple5@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV12@V12@_N@@@IPC@@SA_NPBVMessage@1@PAVCefChannel@@P83@AEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H22_N@Z@Z)
3>cef2_browser.lib(cef_channel.obj) : error LNK2019: unresolved external symbol "public: static bool __cdecl IPC::MessageWithTuple<struct Tuple3<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,int> >::Read(class IPC::Message const *,struct Tuple3<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,int> *)" (?Read@?$MessageWithTuple@U?$Tuple3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HH@@@IPC@@SA_NPBVMessage@2@PAU?$Tuple3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HH@@@Z) referenced in function "public: static bool __cdecl IPC::MessageWithTuple<struct Tuple3<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,int> >::Dispatch<class CefChannel,void (__thiscall CefChannel::*)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,int)>(class IPC::Message const *,class CefChannel *,void (__thiscall CefChannel::*)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,int))" (??$Dispatch@VCefChannel@@P81@AEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HH@Z@?$MessageWithTuple@U?$Tuple3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HH@@@IPC@@SA_NPBVMessage@1@PAVCefChannel@@P83@AEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HH@Z@Z)
3>cef2_browser.lib(cef_channel.obj) : error LNK2019: unresolved external symbol "public: static bool __cdecl IPC::MessageWithTuple<struct Tuple4<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::Read(class IPC::Message const *,struct Tuple4<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > *)" (?Read@?$MessageWithTuple@U?$Tuple4@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV12@V12@@@@IPC@@SA_NPBVMessage@2@PAU?$Tuple4@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV12@V12@@@@Z) referenced in function "public: static bool __cdecl IPC::MessageWithTuple<struct Tuple4<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::Dispatch<class CefChannel,void (__thiscall CefChannel::*)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)>(class IPC::Message const *,class CefChannel *,void (__thiscall CefChannel::*)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &))" (??$Dispatch@VCefChannel@@P81@AEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H00@Z@?$MessageWithTuple@U?$Tuple4@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV12@V12@@@@IPC@@SA_NPBVMessage@1@PAVCefChannel@@P83@AEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H22@Z@Z)
3>cef2_browser.lib(cef_channel.obj) : error LNK2019: unresolved external symbol "public: static bool __cdecl IPC::MessageWithTuple<struct Tuple4<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > > >::Read(class IPC::Message const *,struct Tuple4<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > > *)" (?Read@?$MessageWithTuple@U?$Tuple4@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V32@@@@IPC@@SA_NPBVMessage@2@PAU?$Tuple4@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V32@@@@Z) referenced in function "public: static bool __cdecl IPC::MessageWithTuple<struct Tuple4<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > > >::Dispatch<class CefChannel,void (__thiscall CefChannel::*)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)>(class IPC::Message const *,class CefChannel *,void (__thiscall CefChannel::*)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &))" (??$Dispatch@VCefChannel@@P81@AEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@3@1@Z@?$MessageWithTuple@U?$Tuple4@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@V32@@@@IPC@@SA_NPBVMessage@1@PAVCefChannel@@P83@AEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@5@3@Z@Z)
3>D:\project\chrome\src\src\chrome\Debug\chrome.dll : fatal error LNK1120: 12 unresolved externals
qifuren1985
Newbie
 
Posts: 8
Joined: Sat Jul 24, 2010 10:29 am

Re: CEF2 Development Status

Postby custa1200 » Sun Oct 31, 2010 8:25 pm

Hi Marshall,
Is the current builds of CEF based on your CEF2 design or still on the original. Is there any design documents that can be shown to software architects of stakeholders that control the implementation of new software within the business on how this all hangs together?

Some people maybe be scared of the idea of running "Chrome" but could be more interested in something that is not called "Chrome".
custa1200
Techie
 
Posts: 32
Joined: Wed Oct 27, 2010 2:34 am

Re: CEF2 Development Status

Postby magreenblatt » Mon Nov 01, 2010 8:57 am

Is the current builds of CEF based on your CEF2 design or still on the original.

Some aspects of the CEF2 design have been incorporated into CEF, but the overall architecture is still single-process.

Is there any design documents that can be shown to software architects of stakeholders that control the implementation of new software within the business on how this all hangs together?

Currently available documentation can be seen on the CEF project and wiki pages. Contributions of additional documentation are welcome.

Regards,
Marshall
magreenblatt
Site Admin
 
Posts: 12409
Joined: Fri May 29, 2009 6:57 pm

Re: CEF2 Development Status

Postby fddima » Thu Nov 03, 2011 11:24 am

It is right that multi-process architecture disallow close integration with V8, as it done now with single-process?
fddima
Master
 
Posts: 788
Joined: Tue Dec 07, 2010 6:10 am

Re: CEF2 Development Status

Postby magreenblatt » Thu Nov 03, 2011 11:31 am

fddima wrote:It is right that multi-process architecture disallow close integration with V8, as it done now with single-process?

It will become more complicated internally because we'll need to marshal the objects and function calls across the process boundary. Likely the CEF API will be similar but we'll force people to use it asynchronously (for example, by specifying a callback to receive the result of calling ExecuteFunction).
magreenblatt
Site Admin
 
Posts: 12409
Joined: Fri May 29, 2009 6:57 pm

Re: CEF2 Development Status

Postby fddima » Thu Nov 03, 2011 12:01 pm

magreenblatt wrote:
fddima wrote:It is right that multi-process architecture disallow close integration with V8, as it done now with single-process?

It will become more complicated internally because we'll need to marshal the objects and function calls across the process boundary. Likely the CEF API will be similar but we'll force people to use it asynchronously (for example, by specifying a callback to receive the result of calling ExecuteFunction).

Thanks. So it is only marshalling question, i think it is not a big problem in general.
Do you know it is possible to make ipc sync request to renderer process while we already processing sync message from renderer? (I'm don't know how chromiums IPC channel implemented right now...).

Uff. Unfortunately single-process architecture have big limitations, but multi-process architecture have other big limitations. *WALL*

Also, may be you know: it is possible with multi-process architecture to run one renderer on same (host) process?
fddima
Master
 
Posts: 788
Joined: Tue Dec 07, 2010 6:10 am

Re: CEF2 Development Status

Postby magreenblatt » Thu Nov 03, 2011 12:40 pm

fddima wrote:Do you know it is possible to make ipc sync request to renderer process while we already processing sync message from renderer? (I'm don't know how chromiums IPC channel implemented right now...).

It is technically possible but a really bad idea in general to use sync IPC between processes unless absolutely necessary (like for example WebKit is waiting for an immediate response that requires UI interaction).

fddima wrote:Also, may be you know: it is possible with multi-process architecture to run one renderer on same (host) process?

This depends on how we implement multi-process support in CEF. Likely we will continue to support both single-process and multi-process architectures but you will need to choose one or the other at CefInitialize() time.
magreenblatt
Site Admin
 
Posts: 12409
Joined: Fri May 29, 2009 6:57 pm

Re: CEF2 Development Status

Postby magreenblatt » Thu Nov 03, 2011 12:56 pm

magreenblatt wrote:
fddima wrote:Do you know it is possible to make ipc sync request to renderer process while we already processing sync message from renderer? (I'm don't know how chromiums IPC channel implemented right now...).

It is technically possible but a really bad idea in general to use sync IPC between processes unless absolutely necessary (like for example WebKit is waiting for an immediate response that requires UI interaction).


Or, better example, WebKit is waiting on a synchronous XHR request.
magreenblatt
Site Admin
 
Posts: 12409
Joined: Fri May 29, 2009 6:57 pm

Re: CEF2 Development Status

Postby fddima » Thu Nov 03, 2011 1:45 pm

magreenblatt wrote:It is technically possible but a really bad idea in general to use sync IPC between processes unless absolutely necessary (like for example WebKit is waiting for an immediate response that requires UI interaction).

It is true. But depends from how close top-level code wants have integrating. Some peoples uses CEF as simple browser. Some uses absolutely different.

magreenblatt wrote:This depends on how we implement multi-process support in CEF. Likely we will continue to support both single-process and multi-process architectures but you will need to choose one or the other at CefInitialize() time.

I mean before more hybrid case - have one renderer at host process (like single), and if end-user wants, it can create browsers out of process. But i'm don't know that it is possible.

My private thinks for future releases:
- it will be very good, if future releases is to have more clean and more ready to interop API. I mean it must be plain C API.
Current C API is only wrapper around cpp and implementation is too excess, 'cause C objects doesn't use some kind of vtable, and with current API is to possible when we have wrapper around wrapper around wrapper around impl-object. Also objects no have reference identity. Once CefBrowser created, for example, it must have stable handle (pointer) in C world. Around this technique is much simpler create binding to any languages.
- current CEF is very unstable if it compared to chromium. while chromium executes fine any flash, have fast layouting, CEF - has much more performance penalties, or eventually crashes (with flash). so, as i understand multi-process architecture allow use chromium's code almost unchanged - and as result it will be got good stable result.

I'm currently only investigate any possibilities/disadvantages... For my current requirements both CEF1 and CEF2 are bad (but much better that everything else).
fddima
Master
 
Posts: 788
Joined: Tue Dec 07, 2010 6:10 am

Re: CEF2 Development Status

Postby magreenblatt » Thu Nov 03, 2011 5:48 pm

fddima wrote:I mean before more hybrid case - have one renderer at host process (like single), and if end-user wants, it can create browsers out of process. But i'm don't know that it is possible.

This may be possible. We'll have to wait and see what makes sense from an architectural standpoint.

fddima wrote:- it will be very good, if future releases is to have more clean and more ready to interop API. I mean it must be plain C API.
Current C API is only wrapper around cpp and implementation is too excess, 'cause C objects doesn't use some kind of vtable, and with current API is to possible when we have wrapper around wrapper around wrapper around impl-object. Also objects no have reference identity. Once CefBrowser created, for example, it must have stable handle (pointer) in C world. Around this technique is much simpler create binding to any languages.

The "reference identity" problem can be solved by adding IsSame() methods to all CEF object types. I'm open to other ways of implementing the C API provided it can still be mostly auto-generated from the C++ API and doesn't make CEF C++ development more difficult. Suggestions? :-)

fddima wrote:- current CEF is very unstable if it compared to chromium. while chromium executes fine any flash, have fast layouting, CEF - has much more performance penalties, or eventually crashes (with flash). so, as i understand multi-process architecture allow use chromium's code almost unchanged - and as result it will be got good stable result.

Yes, hopefully the multi-process CEF implementation will share most of Chromium's multi-process code with associated stability and performance gains.
magreenblatt
Site Admin
 
Posts: 12409
Joined: Fri May 29, 2009 6:57 pm

PreviousNext

Return to CEF Discussion

Who is online

Users browsing this forum: No registered users and 145 guests