What steps will reproduce the problem?
1. Install Flash 10.3 NPAPI plugin for Solaris
2. Install Chromium for Solaris, which I've ported
3. Load site with Flash video
What is the expected output? What do you see instead?
Flash video plays. Instead, the Flash plugin doesn't work and the following
error message is seen on the console:
Not GTK2 toolkit (got 0).
What operating system are you compiling on?
Solaris Express 2010.11 i86pc
Please provide any additional information below.
It appears that starting with Flash 10.2 for Solaris (as Flash 10.1 works fine
with Chromium), Adobe checks NPNVToolkit to make sure it's Gtk2. Chromium
tries to set this flag in plugin_host.cc (lines 758-762:
http://src.chromium.org/viewvc/chrome/trunk/src/webkit/plugins/npapi/plugin_host
.cc?view=annotate) but apparently it still comes out zero. I logged the code
and found that Flash looks for NPNVToolkit with the identifier 13, while
Chromium uses the number 268435469 as the identifier for NPNVToolkit, so it
never reports back with the right toolkit. Looking further into npapi.h, I
found that this is because the NP_ABI_GCC3_MASK is applied to NPNVToolkit, when
it's defined. My attached patch modifies npapi.h to only apply the ABI mask
for gcc 3, not for gcc 4 also, and Flash 10.3 starts working with Chromium
again.
Looking into why this ABI mask was applied in the first place, apparently it
was to account for an ABI change from gcc 2 to gcc 3
(https://bugzilla.mozilla.org/show_bug.cgi?id=182117#c18). However, I guess it
was simply assumed back then that gcc 4 would have the same ABI as gcc 3 (that
patch was applied a couple years before gcc 4 came out), which may not be the
case. I find it crazy that all these compiler-specific modifications snuck
into NPAPI, as noted in comment 15 on that mozilla bug. This bug is not
reproducible with Firefox 3.6 for Solaris as Oracle compiles Firefox with the
Oracle Studio Compiler, not with gcc.
It's also possible that the NPAPI Flash plugin for Solaris is compiled with
Oracle Studio and not with gcc, so the real issue is that only one compiler
should be used with NPAPI on Solaris. I don't know if this is the case or if
the gcc ABI changed again.