[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-devel
Subject:    Re: nsplugins patch (KDE4)
From:       Sergey Saukh <thelich () yandex ! ru>
Date:       2008-04-29 4:52:54
Message-ID: 200804291153.04195.thelich () yandex ! ru
[Download RAW message or body]

[Attachment #2 (multipart/signed)]


In a message on Tuesday 29 April 2008 Sergey Saukh you wrote:
> Hello,
>
> > > well... crash on exit problem is still not solved (nspluginviewer just
> > > was silently exitting because of recursive calls in NSPluginInstance
> > > destructor). Now when there is no recursive calls - it crashes again,
> > > because of call to XtRemoveTimeOut from flashplayer library, when we
> > > call _pluginFuncs.destroy in NSPluginInstance::destroy().
> > >
> > > A wierd solution to this - is to set UserAgent to "firefox" for
> > > nspluginviewer. This can be done in konq settings.
> >
> > Really strange. I remeber some developer has written about such a
> > behavior. This is of course not the solution; the user does not have to
> > change that. Can we hardcode that in the code, so it will work all the
> > time (of course only for the flashplugin)?
>
> I've come to more wierd solution, while trying to hardcode UserAgent for
> flashplugin. I don't know how to explain such behaviour, but I think this
> is the way how flashplugin initializes itself.
> When flashplugin executes "setWindow" (or "Initialize", I don't know for
> sure) it calls NPN_UserAgent with NPP set to NULL. At this point I return
> an empty string. Subsecuent calls to useragent are ok (NPP is set and
> function returns string configured in browser, (default "... KHTML,
> blablabla", for exapmple). This time crash-on-exit problem is totally
> gone...
>
> Please, review the new patch and say what do you think about it.

Ummm, it's perfectly clear now, that returning empty UserAgent string to 
flashplugin, when it executes "Initialize" is generally not a good idea, 
because it breaks any actions, which depend on browser actions (like open new 
url).
But returning just "Gecko" instead do the trick.

I think, that in "Initialize" phase, flashplugin checks in what environment it 
was run, i.e. if it was run from a browser and checks what type of browser is 
it.
If there was no (or empty) UserAgent string, then it assumes that it was not 
launched from a browser window and disables any actions, which lead to 
opening urls, or whatever.
If it receives string which contains "Gecko" (not "(like Gecko)" though - 
seems it doesn't like gecko in parenthesis) it assumes, that it runs in a 
native environment and doesn't make any calls to libXt upon destruction.
If it receives any other UserAgent string, then it uses libXt (don't know why) 
and we end up with nspluginviewer crash, when "destroy" method of flashplugin 
tries to call "XtRemoveTimeout"...

So I see two ways out from this mess:
1. Hardcode to return "Gecko" from g_NPN_UserAgent, when NPP structure is not 
set (indicates that it was called by flashplugin from "Initialize").
2. Make Adobe programmers to fix this issue in flashplugin itself.

-- 
Best regards,
Sergey A Saukh

["signature.asc" (application/pgp-signature)]

>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic