Hi, Ningxin:
  Thanks for your questions. I considered them and discussed with team members 
and it help me to make it more clear of this feature. I added some materials on 
the design doc( 
https://docs.google.com/a/intel.com/document/d/1lQZR-MNCgM_9VYxmM46a3zPQoUeVXtQMVqKn2aCUwws/edit?usp=sharing
 ).

And try to answer your questions here:
* What's the benefit of code generation at runtime?
- I think the main benefit is to simplify the extension developer, and maybe 
can cut crosswalk size a little bit.

* Where to find the design JS-Native messaging protocol?
- I try to write some info on this is the doc, and copy them here:
* Java to JavaScript
   * expose object/function/constructor to JavaScript, these 
object/function/consturctor can has its own methods/properties
   * invoke JavaScript callbacks, including fulfilling JavaScript Promise
* JavaScript to Java
   * invoke exposed native methods
   * access exposed native properties
   * create new instance on exposed constructors
Extension developer don't need to know message format, they even don't there is 
a message. Just invoke provided interfaces to interact between Java and 
JavaScript.

Would it make debugging the JS code more difficult?
Yes, it may make difficult to debug the JS code. I considered that we may 
expose interface to extension developer when the js-stub is generated, for 
debug or add customized JavaScript code, such as:
XWalkExtensionClient.didGeneratedJsStub(String jsStub)

* A function binding as example.
//Echo.java
public class Echo extends XWalkExtensionClient {
    @JsAPI
    public String prefix = "From Java: ";


    public Echo(String extensionName, XWalkExtensionContentClient context) {
        super(extensionName, context);
    }
    @JsAPI
    public String echo(String msg) {
        return prefix + msg;
    }
}
// set extension namspce as "xwalk.Echo" in manifest.json


//app.js - use the extension in App
xwalk.Echo.echo("Welcome to Crosswalk!")
// return "From Java: Welcome to Crosswalk!"


xwalk.Echo.prefix = "My echo prefix";
xwalk.Echo.echo("Hello World!");
// return "My echo prefix: Hello World!"


Thanks!
--Donna
-----Original Message-----
From: Hu, Ningxin 
Sent: Saturday, April 25, 2015 4:51 AM
To: Wu, Donna; [email protected]
Subject: RE: [Crosswalk-dev] Intent to Implement: JS stub auto generation for 
Java extension

Hi Donna,

> 
> Description:
> Currently, Crosswalk adopts a message passing
> <https://github.com/crosswalk-project/crosswalk-website/wiki/Message-
> passing-extensions> mechanism which is quite flexible. It provides 
> passing-extensions> passage
> passing APIs without define any message format, the message format and 
> meaning are depend on the developer. In this background, Crosswalk 
> Android extension consists three parts:
>   Java source code: Standard Android/Java classes, packaged into a jar file.
>   JavaScript wrapper: A JavaScript file which exposes the Java code to 
> an app running on Crosswalk.
>   Configuration: A JSON file to wire up the JavaScript wrapper with 
> the Java classes.
> 
> Developers need to provide these parts above for an extension. But, 
> during the build-in extensions developing process, we found that many 
> duplicated work needed to implement most common interactions between 
> JavaScript wrappers and the native code(Java on Android), such as 
> method calling, property accessing, new instance creating from a 
> constructor. So, in the later design of Crosswalk-iOS, object-oriented 
> extension APIs 
> <https://github.com/crosswalk-project/crosswalk-ios/wiki/Extensions>
> were introduced, the JavaScript wrapper can be auto generated by 
> wrapping the common interacting process between JavaScript wrapper and 
> the native client.
> Now, we want to evolve this new easier mechanism in Crosswalk Android 
> extensions.

It would always be good to optimize the developer experience on Crosswalk. 
Binding code auto generation sounds right to me. Thanks for sending this intent.

> 
> Affected component:
> Crosswalk Android extension, document
> 
> Related feature:
> JIRA feature: https://crosswalk-project.org/jira/browse/XWALK-3969
> <https://crosswalk-project.org/jira/browse/XWALK-3969>
> 
> Target release:
> Crosswalk-15
> 
> Implementation details:
> 1. change least at current interfaces in the code, Add generation 
> logic on XWalkExtensionClient.getJsApi at Java level JS stub is 
> generated during Java extensions' registration process.

What's the benefit of code generation at runtime?

> 2. only Java extension will benefit on this feature 3. Will use Java 
> annotation to expose native objects to JS 4. special JS helper will be 
> injected to some namespace in each JS context to wrapper the message 
> poster 5. limited message format between JS and native

It sounds like you are going to define the JS-Native messaging protocol. Where 
to find the design?

> 6. developer cannot modify generated JS stub

Would it make debugging the JS code more difficult? 

Can you elaborate more about your design? Say, use a function binding as 
example.

Thanks,
-ningxin

> 7. coexists with current mechanism, it means JS stub generation 
> feature is not forcible but a choice, and there is no need to change 
> existing extensions.
> 
> Regards!
> Donna Wu
> 
_______________________________________________
Crosswalk-dev mailing list
[email protected]
https://lists.crosswalk-project.org/mailman/listinfo/crosswalk-dev

Reply via email to