diff --git a/mozilla/lib/plugin/nsILCPlg.h b/mozilla/lib/plugin/nsILCPlg.h new file mode 100644 index 00000000000..fccd3307f64 --- /dev/null +++ b/mozilla/lib/plugin/nsILCPlg.h @@ -0,0 +1,164 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + +//////////////////////////////////////////////////////////////////////////////// +// INTERFACE TO NETSCAPE COMMUNICATOR PLUGINS (NEW C++ API). +// LIVECONNECT SUBCLASSES +// +// This superscedes the old plugin API (npapi.h, npupp.h), and +// eliminates the need for glue files: npunix.c, npwin.cpp and npmac.cpp. +// Correspondences to the old API are shown throughout the file. +//////////////////////////////////////////////////////////////////////////////// + +#ifndef nsILCPlg_h___ +#define nsILCPlg_h___ + +#include "nsIPlug.h" // base Plugin interfaces + +//############################################################################## +// JNI-Based LiveConnect Classes +//############################################################################## + +#include "jni.h" // standard JVM API + +//////////////////////////////////////////////////////////////////////////////// +// LiveConnect Plugin Interface +// This interface defines additional entry points that a plugin developer needs +// to implement in order for the plugin to support JNI-based LiveConnect, +// i.e. be scriptable by Java or JavaScript. + +class NPILiveConnectPlugin : public NPIPlugin { +public: + + // (New JNI-based entry point, roughly corresponds to NPP_GetJavaClass.) + NS_IMETHOD_(jclass) + GetJavaClass(void) = 0; + +}; + +#define NP_ILIVECONNECTPLUGIN_IID \ +{ /* cf134df0-a1bc-11d1-85b1-00805f0e4dfe */ \ + 0xcf134df0, \ + 0xa1bc, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// LiveConnect Plugin Instance Peer Interface +// Browsers that support JNI-based LiveConnect implement this subclass of +// plugin instance peer. + +class NPILiveConnectPluginInstancePeer : public NPIPluginInstancePeer { +public: + + // (New JNI-based entry point, roughly corresponds to NPN_GetJavaPeer.) + NS_IMETHOD_(jobject) + GetJavaPeer(void) = 0; + +}; + +#define NP_ILIVECONNECTPLUGININSTANCEPEER_IID \ +{ /* 1e3502a0-a1bd-11d1-85b1-00805f0e4dfe */ \ + 0x1e3502a0, \ + 0xa1bd, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +// QueryInterface for this IID on NPIPluginManager to get a JNIEnv +// XXX change this +#define NP_IJNIENV_IID \ +{ /* 04610650-a1bd-11d1-85b1-00805f0e4dfe */ \ + 0x04610650, \ + 0xa1bd, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//############################################################################## +// JRI-Based LiveConnect Classes +//############################################################################## +// +// This stuff is here so that the browser can support older JRI-based +// LiveConnected plugins (when using old plugin to new C++-style plugin +// adapter code). +// +// Warning: Don't use this anymore, unless you're sure that you have to! +//////////////////////////////////////////////////////////////////////////////// + +#include "jri.h" // ancient + +//////////////////////////////////////////////////////////////////////////////// +// JRILiveConnect Plugin Interface +// This interface defines additional entry points that a plugin developer needs +// to implement in order for the plugin to support JRI-based LiveConnect, +// i.e. be scriptable by Java or JavaScript. + +class NPIJRILiveConnectPlugin : public NPIPlugin { +public: + + // (Corresponds to NPP_GetJavaClass.) + NS_IMETHOD_(jref) + GetJavaClass(void) = 0; + +}; + +#define NP_IJRILIVECONNECTPLUGIN_IID \ +{ /* c94058e0-f772-11d1-815b-006008119d7a */ \ + 0xc94058e0, \ + 0xf772, \ + 0x11d1, \ + {0x81, 0x5b, 0x00, 0x60, 0x08, 0x11, 0x9d, 0x7a} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// JRILiveConnect Plugin Instance Peer Interface +// Browsers that support JRI-based LiveConnect implement this subclass of +// plugin instance peer. + +class NPIJRILiveConnectPluginInstancePeer : public NPIPluginInstancePeer { +public: + + // (Corresponds to NPN_GetJavaPeer.) + NS_IMETHOD_(jref) + GetJavaPeer(void) = 0; + +}; + +#define NP_IJRILIVECONNECTPLUGININSTANCEPEER_IID \ +{ /* 25b63f40-f773-11d1-815b-006008119d7a */ \ + 0x25b63f40, \ + 0xf773, \ + 0x11d1, \ + {0x81, 0x5b, 0x00, 0x60, 0x08, 0x11, 0x9d, 0x7a} \ +} + +// QueryInterface for this IID on NPIPluginManager to get a JRIEnv +// XXX change this +#define NP_IJRIENV_IID \ +{ /* f9d4ea00-a1bc-11d1-85b1-00805f0e4dfe */ \ + 0xf9d4ea00, \ + 0xa1bc, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// + +#endif /* nsILCPlg_h___ */ diff --git a/mozilla/lib/plugin/nsIPlug.h b/mozilla/lib/plugin/nsIPlug.h new file mode 100644 index 00000000000..ad06148622d --- /dev/null +++ b/mozilla/lib/plugin/nsIPlug.h @@ -0,0 +1,896 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + +//////////////////////////////////////////////////////////////////////////////// +// INTERFACE TO NETSCAPE COMMUNICATOR PLUGINS (NEW C++ API). +// +// This superscedes the old plugin API (npapi.h, npupp.h), and +// eliminates the need for glue files: npunix.c, npwin.cpp and npmac.cpp. +// Correspondences to the old API are shown throughout the file. +//////////////////////////////////////////////////////////////////////////////// + +// XXX THIS HEADER IS A BETA VERSION OF THE NEW PLUGIN INTERFACE. +// USE ONLY FOR EXPERIMENTAL PURPOSES! + +#ifndef nsIPlug_h___ +#define nsIPlug_h___ + +#ifdef __OS2__ +#pragma pack(1) +#endif + +// XXX Move this XP_ defining stuff to xpcom or nspr... + +#if defined (__OS2__ ) || defined (OS2) +# ifndef XP_OS2 +# define XP_OS2 1 +# endif /* XP_OS2 */ +#endif /* __OS2__ */ + +#ifdef _WINDOWS +# ifndef XP_WIN +# define XP_WIN 1 +# endif /* XP_WIN */ +#endif /* _WINDOWS */ + +#ifdef __MWERKS__ +# define _declspec __declspec +# ifdef macintosh +# ifndef XP_MAC +# define XP_MAC 1 +# endif /* XP_MAC */ +# endif /* macintosh */ +# ifdef __INTEL__ +# undef NULL +# ifndef XP_WIN +# define XP_WIN 1 +# endif /* __INTEL__ */ +# endif /* XP_PC */ +#endif /* __MWERKS__ */ + +#ifdef XP_MAC + #include + #include +#endif + +#ifdef XP_UNIX + #include + #include +#endif + +#ifdef XP_PC + #include +#endif + +#include "nsISupports.h" + +//////////////////////////////////////////////////////////////////////////////// + +/* The OS/2 version of Netscape uses RC_DATA to define the + mime types, file extentions, etc that are required. + Use a vertical bar to seperate types, end types with \0. + FileVersion and ProductVersion are 32bit ints, all other + entries are strings the MUST be terminated wwith a \0. + +AN EXAMPLE: + +RCDATA NP_INFO_ProductVersion { 1,0,0,1,} + +RCDATA NP_INFO_MIMEType { "video/x-video|", + "video/x-flick\0" } +RCDATA NP_INFO_FileExtents { "avi|", + "flc\0" } +RCDATA NP_INFO_FileOpenName{ "MMOS2 video player(*.avi)|", + "MMOS2 Flc/Fli player(*.flc)\0" } + +RCDATA NP_INFO_FileVersion { 1,0,0,1 } +RCDATA NP_INFO_CompanyName { "Netscape Communications\0" } +RCDATA NP_INFO_FileDescription { "NPAVI32 Extension DLL\0" +RCDATA NP_INFO_InternalName { "NPAVI32\0" ) +RCDATA NP_INFO_LegalCopyright { "Copyright Netscape Communications \251 1996\0" +RCDATA NP_INFO_OriginalFilename { "NVAPI32.DLL" } +RCDATA NP_INFO_ProductName { "NPAVI32 Dynamic Link Library\0" } + +*/ + + +/* RC_DATA types for version info - required */ +#define NP_INFO_ProductVersion 1 +#define NP_INFO_MIMEType 2 +#define NP_INFO_FileOpenName 3 +#define NP_INFO_FileExtents 4 + +/* RC_DATA types for version info - used if found */ +#define NP_INFO_FileDescription 5 +#define NP_INFO_ProductName 6 + +/* RC_DATA types for version info - optional */ +#define NP_INFO_CompanyName 7 +#define NP_INFO_FileVersion 8 +#define NP_INFO_InternalName 9 +#define NP_INFO_LegalCopyright 10 +#define NP_INFO_OriginalFilename 11 + +#ifndef RC_INVOKED + +//////////////////////////////////////////////////////////////////////////////// +// Structures and definitions + +#ifdef XP_MAC +#pragma options align=mac68k +#endif + +typedef const char* nsMIMEType; + +struct nsByteRange { + PRInt32 offset; /* negative offset means from the end */ + PRUint32 length; + struct nsByteRange* next; +}; + +struct nsRect { + PRUint16 top; + PRUint16 left; + PRUint16 bottom; + PRUint16 right; +}; + +//////////////////////////////////////////////////////////////////////////////// +// Unix specific structures and definitions + +#ifdef XP_UNIX + +/* + * Callback Structures. + * + * These are used to pass additional platform specific information. + */ +enum NPPluginCallbackType { + NPPluginCallbackType_SetWindow = 1, + NPPluginCallbackType_Print +}; + +struct NPPluginAnyCallbackStruct { + PRInt32 type; +}; + +struct NPPluginSetWindowCallbackStruct { + PRInt32 type; + Display* display; + Visual* visual; + Colormap colormap; + PRUint32 depth; +}; + +struct NPPluginPrintCallbackStruct { + PRInt32 type; + FILE* fp; +}; + +#endif /* XP_UNIX */ + +//////////////////////////////////////////////////////////////////////////////// + +// List of variable names for which NPP_GetValue shall be implemented +enum NPPluginVariable { + NPPluginVariable_NameString = 1, + NPPluginVariable_DescriptionString, + NPPluginVariable_WindowBool, // XXX go away + NPPluginVariable_TransparentBool, // XXX go away? + NPPluginVariable_JavaClass, // XXX go away + NPPluginVariable_WindowSize, + NPPluginVariable_TimerInterval + // XXX add MIMEDescription (for unix) (but GetValue is on the instance, not the class) +}; + +// List of variable names for which NPN_GetValue is implemented by Mozilla +enum NPPluginManagerVariable { + NPPluginManagerVariable_XDisplay = 1, + NPPluginManagerVariable_XtAppContext, + NPPluginManagerVariable_NetscapeWindow, + NPPluginManagerVariable_JavascriptEnabledBool, // XXX prefs accessor api + NPPluginManagerVariable_ASDEnabledBool, // XXX prefs accessor api + NPPluginManagerVariable_IsOfflineBool // XXX prefs accessor api +}; + +//////////////////////////////////////////////////////////////////////////////// + +enum NPPluginType { + NPPluginType_Embedded = 1, + NPPluginType_Full +}; + +// XXX this can go away now +enum NPStreamType { + NPStreamType_Normal = 1, + NPStreamType_Seek, + NPStreamType_AsFile, + NPStreamType_AsFileOnly +}; + +#define NP_STREAM_MAXREADY (((unsigned)(~0)<<1)>>1) + +/* + * The type of a NPWindow - it specifies the type of the data structure + * returned in the window field. + */ +enum NPPluginWindowType { + NPPluginWindowType_Window = 1, + NPPluginWindowType_Drawable +}; + +struct NPPluginWindow { + void* window; /* Platform specific window handle */ + /* OS/2: x - Position of bottom left corner */ + /* OS/2: y - relative to visible netscape window */ + PRUint32 x; /* Position of top left corner relative */ + PRUint32 y; /* to a netscape page. */ + PRUint32 width; /* Maximum window size */ + PRUint32 height; + nsRect clipRect; /* Clipping rectangle in port coordinates */ + /* Used by MAC only. */ +#ifdef XP_UNIX + void* ws_info; /* Platform-dependent additonal data */ +#endif /* XP_UNIX */ + NPPluginWindowType type; /* Is this a window or a drawable? */ +}; + +struct NPPluginFullPrint { + PRBool pluginPrinted; /* Set TRUE if plugin handled fullscreen */ + /* printing */ + PRBool printOne; /* TRUE if plugin should print one copy */ + /* to default printer */ + void* platformPrint; /* Platform-specific printing info */ +}; + +struct NPPluginEmbedPrint { + NPPluginWindow window; + void* platformPrint; /* Platform-specific printing info */ +}; + +struct NPPluginPrint { + NPPluginType mode; /* NP_FULL or NPPluginType_Embedded */ + union + { + NPPluginFullPrint fullPrint; /* if mode is NP_FULL */ + NPPluginEmbedPrint embedPrint; /* if mode is NPPluginType_Embedded */ + } print; +}; + +struct NPPluginEvent { + +#if defined(XP_MAC) + EventRecord* event; + void* window; + +#elif defined(XP_PC) + uint16 event; + uint32 wParam; + uint32 lParam; + +#elif defined(XP_OS2) + uint32 event; + uint32 wParam; + uint32 lParam; + +#elif defined(XP_UNIX) + XEvent event; + +#endif +}; + +#ifdef XP_MAC +typedef RgnHandle nsRegion; +#elif defined(XP_PC) +typedef HRGN nsRegion; +#elif defined(XP_UNIX) +typedef Region nsRegion; +#else +typedef void *nsRegion; +#endif + +//////////////////////////////////////////////////////////////////////////////// +// Mac-specific structures and definitions. + +#ifdef XP_MAC + +struct NPPort { + CGrafPtr port; /* Grafport */ + PRInt32 portx; /* position inside the topmost window */ + PRInt32 porty; +}; + +/* + * Non-standard event types that can be passed to HandleEvent + */ +#define getFocusEvent (osEvt + 16) +#define loseFocusEvent (osEvt + 17) +#define adjustCursorEvent (osEvt + 18) +#define menuCommandEvent (osEvt + 19) + +#endif /* XP_MAC */ + +//////////////////////////////////////////////////////////////////////////////// +// Error and Reason Code definitions + +enum NPPluginError { + NPPluginError_Base = 0, + NPPluginError_NoError = 0, + NPPluginError_GenericError, + NPPluginError_InvalidInstanceError, + NPPluginError_InvalidFunctableError, + NPPluginError_ModuleLoadFailedError, + NPPluginError_OutOfMemoryError, + NPPluginError_InvalidPluginError, + NPPluginError_InvalidPluginDirError, + NPPluginError_IncompatibleVersionError, + NPPluginError_InvalidParam, + NPPluginError_InvalidUrl, + NPPluginError_FileNotFound, + NPPluginError_NoData, + NPPluginError_StreamNotSeekable +}; + +#define NPCallFailed( code ) ((code) != NPPluginError_NoError) + +enum NPPluginReason { + NPPluginReason_Base = 0, + NPPluginReason_Done = 0, + NPPluginReason_NetworkErr, + NPPluginReason_UserBreak, + NPPluginReason_NoReason +}; + +//////////////////////////////////////////////////////////////////////////////// +// Classes +//////////////////////////////////////////////////////////////////////////////// + +class NPIStream; // base class for all streams + +// Classes that must be implemented by the plugin DLL: +class NPIPlugin; // plugin class (MIME-type handler) +class NPILiveConnectPlugin; // subclass of NPIPlugin (see nsILCPlg.h) +class NPIPluginInstance; // plugin instance +class NPIPluginStream; // stream to receive data from the browser + +// Classes that are implemented by the browser: +class NPIPluginManager; // minimum browser requirements +class NPIPluginManagerStream; // stream to send data to the browser +class NPIPluginInstancePeer; // parts of NPIPluginInstance implemented by the browser +class NPILiveConnectPluginInstancePeer; // subclass of NPIPluginInstancePeer (see nsILCPlg.h) +class NPIPluginStreamPeer; // parts of NPIPluginStream implemented by the browser +class NPISeekablePluginStreamPeer; // seekable subclass of NPIPluginStreamPeer + +// Plugin DLL Side Browser Side +// +// +// +-----------+ +-----------------------+ +// | Plugin / | | Plugin Manager | +// | LC Plugin | | | +// +-----------+ +-----------------------+ +// ^ ^ +// | | +// | +-----------------------+ +// | | Plugin Manager Stream | +// | +-----------------------+ +// | +// | +// +-----------------+ peer +-----------------------+ +// | Plugin Instance |---------->| Plugin Instance Peer | +// | | | / LC Plugin Inst Peer | +// +-----------------+ +-----------------------+ +// +// +-----------------+ peer +-----------------------+ +// | Plugin Stream |---------->| Plugin Stream Peer / | +// | | | Seekable P Stream Peer| +// +-----------------+ +-----------------------+ + +//////////////////////////////////////////////////////////////////////////////// +// This is the main entry point to the plugin's DLL. The plugin manager finds +// this symbol and calls it to create the plugin class. Once the plugin object +// is returned to the plugin manager, instances on the page are created by +// calling NPIPlugin::NewInstance. + +// (Corresponds to NPP_Initialize.) +extern "C" NS_EXPORT NPPluginError +NP_CreatePlugin(NPIPluginManager* mgr, NPIPlugin* *result); + +//////////////////////////////////////////////////////////////////////////////// +// Plugin Stream Interface +// This base class is shared by both the plugin and the plugin manager. + +class NPIStream : public nsISupports { +public: + + // The Release method on NPIPlugin corresponds to NPP_DestroyStream. + + // (Corresponds to NPP_WriteReady.) + NS_IMETHOD_(PRInt32) + WriteReady(void) = 0; + + // (Corresponds to NPP_Write and NPN_Write.) + NS_IMETHOD_(PRInt32) + Write(PRInt32 len, const char* buffer) = 0; + +}; + +#define NP_ISTREAM_IID \ +{ /* 5d852ef0-a1bc-11d1-85b1-00805f0e4dfe */ \ + 0x5d852ef0, \ + 0xa1bc, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// THINGS THAT MUST BE IMPLEMENTED BY THE PLUGIN... +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// Plugin Interface +// This is the minimum interface plugin developers need to support in order to +// implement a plugin. The plugin manager may QueryInterface for more specific +// plugin types, e.g. NPILiveConnectPlugin. + +class NPIPlugin : public nsISupports { +public: + + // The Release method on NPIPlugin corresponds to NPP_Shutdown. + + // The old NPP_New call has been factored into two plugin instance methods: + // + // NewInstance -- called once, after the plugin instance is created. This + // method is used to initialize the new plugin instance (although the actual + // plugin instance object will be created by the plugin manager). + // + // NPIPluginInstance::Start -- called when the plugin instance is to be + // started. This happens in two circumstances: (1) after the plugin instance + // is first initialized, and (2) after a plugin instance is returned to + // (e.g. by going back in the window history) after previously being stopped + // by the Stop method. + + NS_IMETHOD_(NPPluginError) + NewInstance(NPIPluginInstancePeer* peer, NPIPluginInstance* *result) = 0; + + // (Corresponds to NPP_GetMIMEDescription.) + NS_IMETHOD_(const char*) + GetMIMEDescription(void) = 0; + +}; + +#define NP_IPLUGIN_IID \ +{ /* 8a623430-a1bc-11d1-85b1-00805f0e4dfe */ \ + 0x8a623430, \ + 0xa1bc, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// Plugin Instance Interface + +// (Corresponds to NPP object.) +class NPIPluginInstance : public nsISupports { +public: + + // The Release method on NPIPluginInstance corresponds to NPP_Destroy. + + // See comment for NPIPlugin::NewInstance, above. + NS_IMETHOD_(NPPluginError) + Start(void) = 0; + + // The old NPP_Destroy call has been factored into two plugin instance + // methods: + // + // Stop -- called when the plugin instance is to be stopped (e.g. by + // displaying another plugin manager window, causing the page containing + // the plugin to become removed from the display). + // + // Release -- called once, before the plugin instance peer is to be + // destroyed. This method is used to destroy the plugin instance. + + NS_IMETHOD_(NPPluginError) + Stop(void) = 0; + + // (Corresponds to NPP_SetWindow.) + NS_IMETHOD_(NPPluginError) + SetWindow(NPPluginWindow* window) = 0; + + // (Corresponds to NPP_NewStream.) + NS_IMETHOD_(NPPluginError) + NewStream(NPIPluginStreamPeer* peer, NPIPluginStream* *result) = 0; + + // (Corresponds to NPP_Print.) + NS_IMETHOD_(void) + Print(NPPluginPrint* platformPrint) = 0; + + // (Corresponds to NPP_HandleEvent.) + // Note that for Unix and Mac the NPPluginEvent structure is different + // from the old NPEvent structure -- it's no longer the native event + // record, but is instead a struct. This was done for future extensibility, + // and so that the Mac could receive the window argument too. For Windows + // and OS2, it's always been a struct, so there's no change for them. + NS_IMETHOD_(PRInt16) + HandleEvent(NPPluginEvent* event) = 0; + + // (Corresponds to NPP_URLNotify.) + NS_IMETHOD_(void) + URLNotify(const char* url, const char* target, + NPPluginReason reason, void* notifyData) = 0; + + // (Corresponds to NPP_GetValue.) + NS_IMETHOD_(NPPluginError) + GetValue(NPPluginVariable variable, void *value) = 0; + + // (Corresponds to NPP_SetValue.) + NS_IMETHOD_(NPPluginError) + SetValue(NPPluginManagerVariable variable, void *value) = 0; + +}; + +#define NP_IPLUGININSTANCE_IID \ +{ /* b62f3a10-a1bc-11d1-85b1-00805f0e4dfe */ \ + 0xb62f3a10, \ + 0xa1bc, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// Plugin Stream Interface + +class NPIPluginStream : public NPIStream { +public: + + // (Corresponds to NPP_NewStream's stype return parameter.) + NS_IMETHOD_(NPStreamType) + GetStreamType(void) = 0; + + // (Corresponds to NPP_StreamAsFile.) + NS_IMETHOD_(void) + AsFile(const char* fname) = 0; + +}; + +#define NP_IPLUGINSTREAM_IID \ +{ /* e7a97340-a1bc-11d1-85b1-00805f0e4dfe */ \ + 0xe7a97340, \ + 0xa1bc, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// THINGS IMPLEMENTED BY THE BROWSER... +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// Plugin Manager Interface +// This interface defines the minimum set of functionality that a plugin +// manager will support if it implements plugins. Plugin implementations can +// QueryInterface to determine if a plugin manager implements more specific +// APIs for the plugin to use. + +class NPIPluginManager : public nsISupports { +public: + + // (Corresponds to NPN_ReloadPlugins.) + NS_IMETHOD_(void) + ReloadPlugins(PRBool reloadPages) = 0; + + // (Corresponds to NPN_MemAlloc.) + NS_IMETHOD_(void*) + MemAlloc(PRUint32 size) = 0; + + // (Corresponds to NPN_MemFree.) + NS_IMETHOD_(void) + MemFree(void* ptr) = 0; + + // (Corresponds to NPN_MemFlush.) + NS_IMETHOD_(PRUint32) + MemFlush(PRUint32 size) = 0; + +}; + +#define NP_IPLUGINMANAGER_IID \ +{ /* f10b9600-a1bc-11d1-85b1-00805f0e4dfe */ \ + 0xf10b9600, \ + 0xa1bc, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// Plugin Instance Peer Interface + +enum NPTagType { + NPTagType_Unknown, + NPTagType_Embed, + NPTagType_Object, + NPTagType_Applet +}; + +class NPIPluginInstancePeer : public nsISupports { +public: + + NS_IMETHOD_(NPIPlugin*) + GetClass(void) = 0; + + // (Corresponds to NPP_New's MIMEType argument.) + NS_IMETHOD_(nsMIMEType) + GetMIMEType(void) = 0; + + // (Corresponds to NPP_New's mode argument.) + NS_IMETHOD_(NPPluginType) + GetMode(void) = 0; + + // Get a ptr to the paired list of attribute names and values, + // returns the length of the array. + // + // Each name or value is a null-terminated string. + NS_IMETHOD_(NPPluginError) + GetAttributes(PRUint16& n, const char*const*& names, const char*const*& values) = 0; + + // Get the value for the named attribute. Returns null + // if the attribute was not set. + NS_IMETHOD_(const char*) + GetAttribute(const char* name) = 0; + + // Get a ptr to the paired list of parameter names and values, + // returns the length of the array. + // + // Each name or value is a null-terminated string. + NS_IMETHOD_(NPPluginError) + GetParameters(PRUint16& n, const char*const*& names, const char*const*& values) = 0; + + // Get the value for the named parameter. Returns null + // if the parameter was not set. + NS_IMETHOD_(const char*) + GetParameter(const char* name) = 0; + + // Get the complete text of the HTML tag that was + // used to instantiate this plugin + NS_IMETHOD_(const char *) + GetTagText(void) = 0; + + // Get the type of the HTML tag that was used ot instantiate this + // plugin. Currently supported tags are EMBED, OBJECT and APPLET. + NS_IMETHOD_(NPTagType) + GetTagType(void) = 0; + + NS_IMETHOD_(NPIPluginManager*) + GetPluginManager(void) = 0; + + // (Corresponds to NPN_GetURL and NPN_GetURLNotify.) + // notifyData: When present, URLNotify is called passing the notifyData back + // to the client. When NULL, this call behaves like NPN_GetURL. + // New arguments: + // altHost: An IP-address string that will be used instead of the host + // specified in the URL. This is used to prevent DNS-spoofing attacks. + // Can be defaulted to NULL meaning use the host in the URL. + // referrer: + // forceJSEnabled: Forces JavaScript to be enabled for 'javascript:' URLs, + // even if the user currently has JavaScript disabled. + NS_IMETHOD_(NPPluginError) + GetURL(const char* url, const char* target, void* notifyData = NULL, + const char* altHost = NULL, const char* referrer = NULL, + PRBool forceJSEnabled = PR_FALSE) = 0; + + // (Corresponds to NPN_PostURL and NPN_PostURLNotify.) + // notifyData: When present, URLNotify is called passing the notifyData back + // to the client. When NULL, this call behaves like NPN_GetURL. + // New arguments: + // altHost: An IP-address string that will be used instead of the host + // specified in the URL. This is used to prevent DNS-spoofing attacks. + // Can be defaulted to NULL meaning use the host in the URL. + // referrer: + // forceJSEnabled: Forces JavaScript to be enabled for 'javascript:' URLs, + // even if the user currently has JavaScript disabled. + // postHeaders: A string containing post headers. + // postHeadersLength: The length of the post headers string. + NS_IMETHOD_(NPPluginError) + PostURL(const char* url, const char* target, PRUint32 bufLen, + const char* buf, PRBool file, void* notifyData = NULL, + const char* altHost = NULL, const char* referrer = NULL, + PRBool forceJSEnabled = PR_FALSE, + PRUint32 postHeadersLength = 0, const char* postHeaders = NULL) = 0; + + // (Corresponds to NPN_NewStream.) + NS_IMETHOD_(NPPluginError) + NewStream(nsMIMEType type, const char* target, + NPIPluginManagerStream* *result) = 0; + + // (Corresponds to NPN_Status.) + NS_IMETHOD_(void) + ShowStatus(const char* message) = 0; + + // (Corresponds to NPN_UserAgent.) + NS_IMETHOD_(const char*) + UserAgent(void) = 0; + + // (Corresponds to NPN_GetValue.) + NS_IMETHOD_(NPPluginError) + GetValue(NPPluginManagerVariable variable, void *value) = 0; + + // (Corresponds to NPN_SetValue.) + NS_IMETHOD_(NPPluginError) + SetValue(NPPluginVariable variable, void *value) = 0; + + //////////////////////////////////////////////////////////////////////////// + // XXX Only used by windowless plugin instances?... + + // (Corresponds to NPN_InvalidateRect.) + NS_IMETHOD_(void) + InvalidateRect(nsRect *invalidRect) = 0; + + // (Corresponds to NPN_InvalidateRegion.) + NS_IMETHOD_(void) + InvalidateRegion(nsRegion invalidRegion) = 0; + + // (Corresponds to NPN_ForceRedraw.) + NS_IMETHOD_(void) + ForceRedraw(void) = 0; + + // New top-level window handling calls for Mac: + + NS_IMETHOD_(void) + RegisterWindow(void* window) = 0; + + NS_IMETHOD_(void) + UnregisterWindow(void* window) = 0; + + // Menu ID allocation calls for Mac: + + NS_IMETHOD_(PRInt16) + AllocateMenuID(PRBool isSubmenu) = 0; + +}; + +#define NP_IPLUGININSTANCEPEER_IID \ +{ /* 15c75de0-a1bd-11d1-85b1-00805f0e4dfe */ \ + 0x15c75de0, \ + 0xa1bd, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// Plugin Manager Stream Interface + +class NPIPluginManagerStream : public NPIStream { +public: + + // (Corresponds to NPStream's url field.) + NS_IMETHOD_(const char*) + GetURL(void) = 0; + + // (Corresponds to NPStream's end field.) + NS_IMETHOD_(PRUint32) + GetEnd(void) = 0; + + // (Corresponds to NPStream's lastmodified field.) + NS_IMETHOD_(PRUint32) + GetLastModified(void) = 0; + + // (Corresponds to NPStream's notifyData field.) + NS_IMETHOD_(void*) + GetNotifyData(void) = 0; + +}; + +#define NP_IPLUGINMANAGERSTREAM_IID \ +{ /* 30c24560-a1bd-11d1-85b1-00805f0e4dfe */ \ + 0x30c24560, \ + 0xa1bd, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// Plugin Stream Peer Interface +// A plugin stream peer is passed to a plugin instance's NewStream call in +// order to indicate that a new stream is to be created and be read by the +// plugin instance. + +class NPIPluginStreamPeer : public nsISupports { +public: + + // (Corresponds to NPStream's url field.) + NS_IMETHOD_(const char*) + GetURL(void) = 0; + + // (Corresponds to NPStream's end field.) + NS_IMETHOD_(PRUint32) + GetEnd(void) = 0; + + // (Corresponds to NPStream's lastmodified field.) + NS_IMETHOD_(PRUint32) + GetLastModified(void) = 0; + + // (Corresponds to NPStream's notifyData field.) + NS_IMETHOD_(void*) + GetNotifyData(void) = 0; + + // (Corresponds to NPP_DestroyStream's reason argument.) + NS_IMETHOD_(NPPluginReason) + GetReason(void) = 0; + + // (Corresponds to NPP_NewStream's MIMEType argument.) + NS_IMETHOD_(nsMIMEType) + GetMIMEType(void) = 0; + + NS_IMETHOD_(PRUint32) + GetContentLength(void) = 0; + + NS_IMETHOD_(PRUint32) + GetHeaderFieldCount(void) = 0; + + NS_IMETHOD_(const char*) + GetHeaderFieldKey(PRUint32 index) = 0; + + NS_IMETHOD_(const char*) + GetHeaderField(PRUint32 index) = 0; + +}; + +#define NP_IPLUGINSTREAMPEER_IID \ +{ /* 38278eb0-a1bd-11d1-85b1-00805f0e4dfe */ \ + 0x38278eb0, \ + 0xa1bd, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} + +//////////////////////////////////////////////////////////////////////////////// +// Seekable Plugin Stream Peer Interface +// The browser implements this subclass of plugin stream peer if a stream +// is seekable. Plugins can query interface for this type, and call the +// RequestRead method to seek to a particular position in the stream. + +class NPISeekablePluginStreamPeer : public NPIPluginStreamPeer { +public: + + // QueryInterface for this class corresponds to NPP_NewStream's + // seekable argument. + + // (Corresponds to NPN_RequestRead.) + NS_IMETHOD_(NPPluginError) + RequestRead(nsByteRange* rangeList) = 0; + +}; + +#define NP_ISEEKABLEPLUGINSTREAMPEER_IID \ +{ /* f55c8250-a73e-11d1-85b1-00805f0e4dfe */ \ + 0xf55c8250, \ + 0xa73e, \ + 0x11d1, \ + {0x85, 0xb1, 0x00, 0x80, 0x5f, 0x0e, 0x4d, 0xfe} \ +} \ + +//////////////////////////////////////////////////////////////////////////////// + +#ifdef XP_MAC +#pragma options align=reset +#endif + +#endif /* RC_INVOKED */ +#ifdef __OS2__ +#pragma pack() +#endif + +#endif /* nsIPlug_h___ */