User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:188.8.131.52) Gecko/20110218 Firefox/3.6.14
Build Identifier: Firefox 4.0b12
On Firefox 4, NPN_GetURLNotify does not call NPP_URLNotify
It does this on Firefox 3.6
Steps to Reproduce:
1. Use a plugin that calls NPN_GetURLNotify with a NULL target
Created attachment 516519 [details]
Simple NPAPI plugin that calls NPN_GetURLNotify and prints to standard output whether NPP_URLNotify is called or not
This is a simple NPAPI plugin based on mozilla code (http://mxr.mozilla.org/mozilla-central/source/modules/plugin/sdk/samples/).
It issues a call to NPN_GetURLNotify( "http://google.com" ) and does printf() inside NPP_NewStream, NPP_DestroyStream and NPP_URLNotify
Under Firefox 3 you see all 3 calls. On Firefox 4, NPP_URLNotify is not called.
You need to run Firefox in console to see the printf's.
This issue is also reproducible on Windows.
What are you passing for the notifyData void*? I believe we changed our behavior so that we don't notify if you pass a null pointer as notifyData...
Exactly! I'm calling NPN_GetURLNotify(mInstance, "http://google.com", NULL, NULL)
I have just tried specifying the notifyData (e.g. NPN_GetURLNotify(mInstance, "http://google.com", NULL, (void*)mInstance) ) and this works!
Created attachment 516639 [details]
Simple plugin that demonstrates the issue
First attachment had a buggy Makefile (it does not define XP_UNIX, and such plugin does not work)
I believe that Josh made this change intentionally, but I'll let him close this WONTFIX if so when he gets back from vacation.
I don't have time at the moment to look into this (I think it was intentional, as Benjamin said), but my advice would be to not pass NULL for notifyData if you want notifications. The browser doesn't deref that pointer value, it's just a unique identifier which you can use to reference your own stream data if you want. Technically you can pass whatever you want so long as it is unique to a stream - it doesn't have to be an actual memory address. You could just pass 0x1 if you only ever had one stream active at a time, for example.
Thanks Josh. That's exactly what I was going to use - just a dummy address like 0x1.
I have just put a warning into these wiki pages about current behavior: