Closed GoogleCodeExporter closed 9 years ago
This patch relies on the attached patch file of issue #46.
If you want to try these code changes, add the patch of issue #46 first and
afterwards add the patch file attached to this issue. Otherwise you'll get some
patch-errors.
Original comment by k...@censhare.de
on 8 Mar 2014 at 7:56
Original comment by magreenb...@gmail.com
on 12 Mar 2014 at 9:50
Original comment by magreenb...@gmail.com
on 12 Mar 2014 at 9:51
Original comment by magreenb...@gmail.com
on 12 Mar 2014 at 9:52
Initial patches added in revision 34. For the purposes of efficiency the below
issues will be addressed in a follow-up change.
1. It looks like CefRenderHandler.onCursorChange is no longer called so we
should probably remove it.
2. It seems like there are two distinct use cases for [Get|Set]CefForJNIObject
--
a. Retrieving the CEF object for the |this| JNI object (like in CefBrowser_N),
and;
b. Retrieving the CEF object for one of the other handler types (like
CefDisplayHandler, CefLifeSpanHandler, etc. from ClientHandler).
The CefNative complexity isn't required for (a), which perhaps makes the usage
overly complex (see #3 below). I wonder if we should split this into two
separate native reference implementations. I.e., keep the old N_CefHandle
method for (a) and use the new CefNative method for (b). What do you think?
3. If we continue to use CefNative for (a) is it necessary to expose the
CefNative interface via the public CefBrowser and CefQueryCallback classes? It
seems like CefNative should be an implementation detail of the *_N classes.
4. The org.cef import order in MainFrame.java should be alphabetical.
5. In MainFrame.onQuery don't both return false and execute callback.failure.
Returning false will cause the failure to be sent automatically.
6. In ClientHandler::SetBrowser we're registering MessageRouterHandler (via
AddHandler) when OnAfterCreated is called and never removing it. This could be
a problem if we allow MessageRouterHandler to be changed or removed in the
future.
Original comment by magreenb...@gmail.com
on 28 Mar 2014 at 12:16
Hi Marshall,
@comment #5.1: CefRenderHandler.onCursorChange is called if you use OSR mode.
So I don't think we should remove it.
@comment #5.2: You're right. The complexity of CefNatife isn't required for 2a)
but I think using CefNative makes it more clear which classes have/need a
native counterpart. And my suggestion is, that it makes the implementation
somewhat easier because you don't need to keep in mind if you're using 2a) or
2b).
@comment #5.3: That's a design issue, you're right. I've fixed that in the
attached patch file "2014-05-28_issue47a.patch". Now the only not *_N classes
which inherits directly from CefNative, are CefClientHandler and the interfaces
CefMessageRouterHandler, CefResourceHandler (see @comment #5.6) and
CefURLRequestHandler. Beside that I've introduced CefNativeAdapter which
contains the default implementation of CefNative. It is used in all cases where
it is possible to directly extend it.
@comment #5.4: You've already did it. Thanks for that.
@comment #5.5: That's fixed in the patch file 2014-05-28_issue47b.patch
@comment #5.6: That's a significant issue. For that reason I've changed the
whole MessageRouterHandler implementation. Attached you'll find the patch file
2014-06-03_issue47c.patch with the following changes:
(*) Introduced the Java classes CefMessageRouter and CefMessageRouterConfig
(*) Removed CefMessageRouterHandler from CefClient and added CefMessageRouter
support instead
(*) Added a second handler example to: "Bookmarks->Binding Test 2"
What does that mean:
Now you can create _at any time_ a new instance of CefMessageRouter with an
instance of CefMessageRouterConfig. This allows you to create additional
JavaScript binding names like "myQuery" in the "Binding Test 2" example. You
have to add the router to all CefClient instances which should react on the new
query. Your CefMessageRouterHandler isn't added to CefClient anymore but to the
CefMessageRouter instance which should use it. Now you can add multiple handler
instances to CefMessageRouter and multiple CefMessageRouter instances to
CefClient as well.
If you create a new CefMessageRouter, this is created at the browser process in
the native code as well.
After adding the CefMessageRouter instance to CefClient, the native code passes
its configuration to all running render processes (of this client) by using
"browser->SendProcessMessage()". The render process creates a new
CefMessageRouterRendererSite instance on the fly and the binding is done.
Render processes which are created afterwards receive all configurations for
the CefMessageRouter renderer-site by "OnRenderThreadCreated".
On this way you can add and remove handlers at any time you want. See
"Bookmarks->Binding Test 2" for a working example.
Please Note: The attached patch files "a" to "c" rely on each other. So add "a"
first and "b" and "c" afterwards.
Original comment by k...@censhare.de
on 3 Jun 2014 at 9:36
Attachments:
@#6: Thanks, added in revision 72, revision 73 and revision 74 respectively.
Original comment by magreenb...@gmail.com
on 17 Jun 2014 at 4:19
Original issue reported on code.google.com by
k...@censhare.de
on 8 Mar 2014 at 7:54Attachments: