Trouble using NPN_PluginThreadAsyncCall and NPN_InvokeDefault to call back the browser from a native thread

by juliancwl » Mon, 18 Jan 2010 04:27:00 GMT


Sponsored Links
 I am developing an NPAPI plugin to process browser script.  Platform
is a build of the 1.6 Android source on Ubuntu, target is the browser
on the emulator supplied with the SDK.

Some of the JavaScript functions are asynchronous, passing in success/
failure callback functions as parameters. These are to be called back
by us when an async process has completed.

To achieve this we use the following code:

browser->invokeDefault(NP context, NPObject* onSuccessCbObject,
NPVARIANT args[] , int numargs, NPVARIANT * retVal);

This works well when called in the main plugin thread - the script
runs in the browser as expected.

However we need to implement this as an asynchronous callback. Firstly
we tried spawning a new pThread to run the above code - which
invariably crashed the browser.

So I tried using the NPN_PluginThreadAsyncCall function which seems to
allow a worker thread to run a function in the main browser UI thread.
This is called as follows:

browser->pluginthreadasynccall(  void (*func)(void *) , void *
userData)

The function we pass to this API contains the call to invokeDefault as
described above. When this is called the browser crashes immediately
(signal 11).

I am sure that all data passed to the function is valid, and the
lifetime of objects passed between threads are protected by reference
counting to ensure nothing is deleted prematurely. remove the call to
invokeDefault from the thread function, and everything completes and
cleans up as expected. But as soon as invokeDefault is called the
program crashes straight away.

Any ideas what might be going on?  Is there something else I should be
doing, or a preferred way to implement callbacks to a browser.

Many thanks - Julian.



Other Threads

1. How use speex or jspeex in android

Hi,
please can anybody help me how use speex or jspeex in android?
I need stream voice from MIC on server and use this codec.

THX
Petr

-- 

2. Does Android support IPv6 now?

Hi, all!

I don't know if real Android system can support IPv6 protocol stack. I
compiled my own kernel with IPv6 configured as "build-in" and then
tested it under the emulator in SDK, and it could not get an IPv6
address. I got "No IPv6 router present" in dmesg. I think it may be
the emulator's fault. Has anyone ever tested IPv6 in a real Android
device?

mundou

-- 

3. About Monkey Scripting option

4. Java Question about reflection

5. Layout - Is there some way to do wraparound with horizontal linear layout

6. how can i save my overlays?

7. Motodev Studio for Android Dev?