Jack -

On Mar 20, 2009, at 9:24 AM, Jack Wootton wrote:

Yes, but the problem is that program control is in the plugin instance
object and not the Plugin itself.  Plugin instance objects are created
after the plugin is created.

1. Plugin created (have reference to Browser via NPNetscapeFuncs.
2. Plugin object returned to Browser.

/* Some time later */

3. Browser parses an instance of the <object> tag with a MIME type
matching the plugin.
4. Browser creates a plugin instance object, but does not provide a
reference to to NPNetscapeFuncs.


There is only one browser, so stash the table of function pointers in a static variable:

enum
{
        kUserAgent_WebKit       = 'webk',
        kUserAgent_Opera        = 'opra',
        kUserAgent_Gecko        = 'geko',
        kUserAgent_Camino       = 'simn',
        kUserAgent_Firefox      = 'ffox',
        kUserAgent_MSIE = 'msie',
};

static NPNetscapeFuncs *gBrowser  = NULL;
static uint32 gUserAgent = 0;

NPError OSCALL NP_Initialize(NPNetscapeFuncs* browserFuncs)
{
    gBrowser = browserFuncs;
    return NPERR_NO_ERROR;
}

NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved)
{
        const char *userAgent = gBrowser->uagent(instance);

        if ( userAgent )
        {
                if ( strstr(userAgent, "AppleWebKit") )
                        gUserAgent = kUserAgent_WebKit;
                else if ( strstr(userAgent, "Opera") )
                        gUserAgent = kUserAgent_Opera;
                else if ( strstr(userAgent, "Gecko") )
                {
                        gUserAgent = kUserAgent_Gecko;
                        if ( strstr(userAgent, "Camino") )
                                gUserAgent = kUserAgent_Camino;
                        else if ( strstr(userAgent, "Firefox") )
                                gUserAgent = kUserAgent_Firefox;
                }
                else if ( strstr(userAgent, "MSIE") )
                        gUserAgent = kUserAgent_MSIE;
        }

    return NPERR_NO_ERROR;
}

  Or have I misunderstood what you are trying to do?

eric




On Fri, Mar 20, 2009 at 4:11 PM, Mugdha Jain <mugdhaj...@smarttech.com> wrote:

No that won't work. What you need to do is store the function pointer passed by the browser and use that to call the required function. That would mean
you have to do the following:

g_NPNFuncs.geturl

Where g_NPNFuncs is: g_NPNFuncs = browser below.

// Mach-o entry points
NPError NP_Initialize(NPNetscapeFuncs *browserFuncs)
{
    browser = browserFuncs;
    return NPERR_NO_ERROR;
}

Browser would call this function on the plugin when it loads the plugin for
the first time.

Hope that helps.
Mugdha

-----Original Message-----
From: webkit-dev-boun...@lists.webkit.org on behalf of Jack Wootton
Sent: Fri 3/20/2009 9:35 AM
To: Alexey Proskuryakov
Cc: webkit-dev@lists.webkit.org
Subject: Re: [webkit-dev] Pushing data to plugin

So I would have thought this would work inside the plugin instance
object method New (aInstance is of type NPP)


NPNetscapeFuncs* browser = static_cast<NPNetscapeFuncs*>(aInstance.ndata);

But it doesn't :P


2009/3/20 Alexey Proskuryakov <a...@webkit.org>:

20.03.2009, ? 18:15, Jack Wootton ???????(?):

I'm unsure about how I can access the Browser functions.


You can see how this works in one of our example plug-ins. E.g., form
TestNetscapePlugin:

NPNetscapeFuncs *browser;

// Mach-o entry points
extern "C" {
   NPError NP_Initialize(NPNetscapeFuncs *browserFuncs);
   NPError NP_GetEntryPoints(NPPluginFuncs *pluginFuncs);
   void NP_Shutdown(void);
}

// Mach-o entry points
NPError NP_Initialize(NPNetscapeFuncs *browserFuncs)
{
   browser = browserFuncs;
   return NPERR_NO_ERROR;
}

- WBR, Alexey Proskuryakov






--
Regards
Jack
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev





--
Regards
Jack
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to