> If the extension would be registered to the native extension service 
> automatically, when is the right time point to do that? It is required that 
> the extension must be registered into XWalk ONLY when there is a valid web 
> content, in another word, the XWalkExtensionAndroid won't be plugged into 
> xwalk successfully before a XWalkView is created.
> So my question here is, as a public API, how to provide a much decent way to 
> enforce the pre-condition of extension registration? E.g. provide 
> XWalkView.registerExtension as Shiliu said.

[halton] Here "register" means register extension to XWalkExtensionServer. 
Short answer for your questions is the XWalkExtensionInstance won't be created 
if there is no render.

Let me explain how extension works in C++ side, that would help you understand. 
There are two classes standing for an extension, XWalkExtension and 
XWalkExtensionInstance.

l  XWalkExtension: represent the name, jsapi string, entry point

l  XWalkExtensionInstance: method of PostMessage, PostSyncMessage, where the 
really logic to filed in.

XWalkExtensionServer will host list of XWalkExtension and initiated during 
browser process startup. These extensions will only send the XWalkExtension 
information(name, jsstring, etc) to render when a render starts. And 
XWalkExtensionInstance will be created on demand. Does it help you?

> In addition, since the XWalkView already exposes addJavaScriptInterface and 
> evaluateJavaScript for Java<->JavaScript interoperability, as we know, 
> PhoneGap plugin is based on these 2 APIs, why do we introduce a new extension 
> system?

Woo, this is a big question, it might not be right time to challenge this 
requirement now since this mechanism exists since M3.
I'll try to answer it with several bullets:

l  Crosswalk extensions support different platform and language. Offer Java 
extension on Android will give developer unified interface as much as possible.

l  evaluateJavaScript is available since API level 19(Android 4.4), without it 
there is one-way interoperation, which means only JS -> Java is supported. 
Since Crosswalk target level 14(4.0+), this should be a problem.

Thanks,
Halton.
From: Min, Hongbo
Sent: Friday, July 11, 2014 10:09 AM
To: Wang, Shiliu; Huo, Halton
Cc: crosswalk-dev@lists.crosswalk-project.org
Subject: RE: [Crosswalk-dev] Intent to Implement - Pluggable extensions for 
embedding API

Hi, Halton

If the extension would be registered to the native extension service 
automatically, when is the right time point to do that? It is required that the 
extension must be registered into XWalk ONLY when there is a valid web content, 
in another word, the XWalkExtensionAndroid won't be plugged into xwalk 
successfully before a XWalkView is created.

So my question here is, as a public API, how to provide a much decent way to 
enforce the pre-condition of extension registration? E.g. provide 
XWalkView.registerExtension as Shiliu said.

In addition, since the XWalkView already exposes addJavaScriptInterface and 
evaluateJavaScript for Java<->JavaScript interoperability, as we know, PhoneGap 
plugin is based on these 2 APIs, why do we introduce a new extension system?

Thanks...Hongbo

From: Crosswalk-dev [mailto:crosswalk-dev-boun...@lists.crosswalk-project.org] 
On Behalf Of Wang, Shiliu
Sent: Thursday, July 10, 2014 4:53 PM
To: Huo, Halton; 
crosswalk-dev@lists.crosswalk-project.org<mailto:crosswalk-dev@lists.crosswalk-project.org>
Subject: Re: [Crosswalk-dev] Intent to Implement - Pluggable extensions for 
embedding API

Thanks for the explanation.
LGTM.

Thanks,
Shiliu.

From: Huo, Halton
Sent: Wednesday, July 9, 2014 4:27 PM
To: Wang, Shiliu; 
crosswalk-dev@lists.crosswalk-project.org<mailto:crosswalk-dev@lists.crosswalk-project.org>
Subject: RE: [Crosswalk-dev] Intent to Implement - Pluggable extensions for 
embedding API

No, if an extension is created like new EchoExtension, the extension will be 
registered to the native(C++)  extension service automatically, this is already 
done in XWalkExtensionAndroid and JNI code as well.

Thanks,
Halton.
From: Wang, Shiliu
Sent: Wednesday, July 09, 2014 3:37 PM
To: Huo, Halton; 
crosswalk-dev@lists.crosswalk-project.org<mailto:crosswalk-dev@lists.crosswalk-project.org>
Subject: RE: [Crosswalk-dev] Intent to Implement - Pluggable extensions for 
embedding API

Is there any API to register Extension?

Thanks,
Shiliu.

From: Crosswalk-dev [mailto:crosswalk-dev-boun...@lists.crosswalk-project.org] 
On Behalf Of Huo, Halton
Sent: Wednesday, July 9, 2014 9:21 AM
To: 
crosswalk-dev@lists.crosswalk-project.org<mailto:crosswalk-dev@lists.crosswalk-project.org>
Subject: [Crosswalk-dev] Intent to Implement - Pluggable extensions for 
embedding API

Description:
This feature is Android only.
So far, pluggable android extension[1] is supported for runtime mode(shared or 
embedded). After embedding API[2] supporting is added in, there is clear need 
to add this support pluggable extension support for embedding API as well.

Affected component:
XWalk embedding API
XWalk embedding API document and test case

Related feature:
https://crosswalk-project.org/jira/browse/XWALK-1052

Target release:
Crosswalk8

Implementation details:
Android extension is rely on 
org.xwalk.core.internal.extensions.XWalkExtensionAndroid to bridge all Java 
instances via C++ extension instances to JS side and vice versa.


XWalkExtension will be exposed in Embedding API

public XWalkExtensionAndroid(String name, String jsApi)

public XWalkExtensionAndroid(String name, String jsApi, String[] entryPoints)



protected void destroyExtension()



public void postMessage(int instanceID, String message)

public void broadcastMessage(String message)



public abstract void onMessage(int instanceID, String message)

public abstract String onSyncMessage(int instanceID, String message)



Internally, it will call 
org.xwalk.core.internal.extensions.XWalkExtensionAndroid.



Difference with runtime extensions:

*  The life cycle related APIs(onPause, onResume, etc) are not provided. This 
is mainly because the responsibility of life cycle handling for embedding API 
and runtime are different For embedding API. Embedder(embedding API) own the 
extension instance reference and decide what to do, while runtime layer. While 
for runtime, extension reference is handled inside runtime, which means hidden 
for runtime user, so we need offer the life cycle APIs.

*  There will be no helper like make_apk.py for embedding API, embeedder is 
responsible to add extension jar to workspace. The document for that.

*  Despite the life cycle API, the extension code for embedding and runtime 
should very similar but not compatible because the based interface are 
different. If extension developer want to support both embedding API and 
runtime layer, we might offer a tooling or HOWTO.


References:
[1] https://crosswalk-project.org/#documentation/android_extensions
[2] https://crosswalk-project.org/#documentation/embedding_crosswalk

Thanks,
Halton.
_______________________________________________
Crosswalk-dev mailing list
Crosswalk-dev@lists.crosswalk-project.org
https://lists.crosswalk-project.org/mailman/listinfo/crosswalk-dev

Reply via email to