/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef nsplugindefs_h___ #define nsplugindefs_h___ #if defined(XP_OS2) || defined(__OS2__) #define INCL_BASE #define INCL_PM #include #pragma pack(1) #endif #ifndef prtypes_h___ #include "prtypes.h" #endif #if defined(XP_MAC) || defined(XP_MACOSX) # include # include # include #endif #if defined(XP_UNIX) && defined(MOZ_X11) # include # include #endif #if defined(XP_WIN) # include #endif //////////////////////////////////////////////////////////////////////////////// /* The OS/2 version of Netscape uses RC_DATA to define the mime types, file extensions, etc that are required. Use a vertical bar to separate 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 NS_INFO_ProductVersion { 1,0,0,1,} RCDATA NS_INFO_MIMEType { "video/x-video|", "video/x-flick\0" } RCDATA NS_INFO_FileExtents { "avi|", "flc\0" } RCDATA NS_INFO_FileOpenName{ "MMOS2 video player(*.avi)|", "MMOS2 Flc/Fli player(*.flc)\0" } RCDATA NS_INFO_FileVersion { 1,0,0,1 } RCDATA NS_INFO_CompanyName { "Netscape Communications\0" } RCDATA NS_INFO_FileDescription { "NPAVI32 Extension DLL\0" RCDATA NS_INFO_InternalName { "NPAVI32\0" ) RCDATA NS_INFO_LegalCopyright { "Copyright Netscape Communications \251 1996\0" RCDATA NS_INFO_OriginalFilename { "NVAPI32.DLL" } RCDATA NS_INFO_ProductName { "NPAVI32 Dynamic Link Library\0" } */ /* RC_DATA types for version info - required */ #define NS_INFO_ProductVersion 1 #define NS_INFO_MIMEType 2 #define NS_INFO_FileOpenName 3 #define NS_INFO_FileExtents 4 /* RC_DATA types for version info - used if found */ #define NS_INFO_FileDescription 5 #define NS_INFO_ProductName 6 /* RC_DATA types for version info - optional */ #define NS_INFO_CompanyName 7 #define NS_INFO_FileVersion 8 #define NS_INFO_InternalName 9 #define NS_INFO_LegalCopyright 10 #define NS_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 nsPluginRect { PRUint16 top; PRUint16 left; PRUint16 bottom; PRUint16 right; }; //////////////////////////////////////////////////////////////////////////////// // Unix specific structures and definitions #ifdef XP_UNIX #include /* * Callback Structures. * * These are used to pass additional platform specific information. */ enum nsPluginCallbackType { nsPluginCallbackType_SetWindow = 1, nsPluginCallbackType_Print }; struct nsPluginAnyCallbackStruct { PRInt32 type; }; #ifdef MOZ_X11 struct nsPluginSetWindowCallbackStruct { PRInt32 type; Display* display; Visual* visual; Colormap colormap; PRUint32 depth; }; #else struct nsPluginSetWindowCallbackStruct { PRInt32 type; }; #endif struct nsPluginPrintCallbackStruct { PRInt32 type; FILE* fp; }; #endif /* XP_UNIX */ //////////////////////////////////////////////////////////////////////////////// // List of variables which should be implmented by the plugin enum nsPluginVariable { nsPluginVariable_NameString = 1, nsPluginVariable_DescriptionString = 2 }; enum nsPluginManagerVariable { nsPluginManagerVariable_XDisplay = 1, nsPluginManagerVariable_XtAppContext = 2, nsPluginManagerVariable_SupportsXEmbed = 14 }; enum nsPluginInstancePeerVariable { nsPluginInstancePeerVariable_NetscapeWindow = 3 // nsPluginInstancePeerVariable_JavaClass = 5, // nsPluginInstancePeerVariable_TimerInterval = 7 }; enum nsPluginInstanceVariable { nsPluginInstanceVariable_WindowlessBool = 3, nsPluginInstanceVariable_TransparentBool = 4, nsPluginInstanceVariable_DoCacheBool = 5, nsPluginInstanceVariable_CallSetWindowAfterDestroyBool = 6, nsPluginInstanceVariable_ScriptableInstance = 10, nsPluginInstanceVariable_ScriptableIID = 11, nsPluginInstanceVariable_NeedsXEmbed = 14 }; //////////////////////////////////////////////////////////////////////////////// enum nsPluginMode { nsPluginMode_Embedded = 1, nsPluginMode_Full }; // XXX this can go away now enum nsPluginStreamType { nsPluginStreamType_Normal = 1, nsPluginStreamType_Seek, nsPluginStreamType_AsFile, nsPluginStreamType_AsFileOnly }; /* * The type of a nsPluginWindow - it specifies the type of the data structure * returned in the window field. */ enum nsPluginWindowType { nsPluginWindowType_Window = 1, nsPluginWindowType_Drawable }; #if defined(XP_MAC) || defined(XP_MACOSX) struct nsPluginPort { CGrafPtr port; /* Grafport */ PRInt32 portx; /* position inside the topmost window */ PRInt32 porty; }; typedef RgnHandle nsPluginRegion; typedef WindowRef nsPluginPlatformWindowRef; #elif defined(XP_WIN) || defined(XP_OS2) struct nsPluginPort; typedef HRGN nsPluginRegion; typedef HWND nsPluginPlatformWindowRef; #elif defined(XP_UNIX) && defined(MOZ_X11) struct nsPluginPort; typedef Region nsPluginRegion; typedef Drawable nsPluginPlatformWindowRef; #else struct nsPluginPort; typedef void* nsPluginRegion; typedef void* nsPluginPlatformWindowRef; #endif struct nsPluginWindow { nsPluginPort* window; /* Platform specific window handle */ /* OS/2: x - Position of bottom left corner */ /* OS/2: y - relative to visible netscape window */ PRInt32 x; /* Position of top left corner relative */ PRInt32 y; /* to a netscape page. */ PRUint32 width; /* Maximum window size */ PRUint32 height; nsPluginRect clipRect; /* Clipping rectangle in port coordinates */ /* Used by MAC only. */ #if defined(XP_UNIX) && !defined(XP_MACOSX) void* ws_info; /* Platform-dependent additonal data */ #endif /* XP_UNIX */ nsPluginWindowType type; /* Is this a window or a drawable? */ }; struct nsPluginFullPrint { 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 nsPluginEmbedPrint { nsPluginWindow window; void* platformPrint; /* Platform-specific printing info */ }; struct nsPluginPrint { PRUint16 mode; /* nsPluginMode_Full or nsPluginMode_Embedded */ union { nsPluginFullPrint fullPrint; /* if mode is nsPluginMode_Full */ nsPluginEmbedPrint embedPrint; /* if mode is nsPluginMode_Embedded */ } print; }; struct nsPluginEvent { #if defined(XP_MAC) || defined(XP_MACOSX) EventRecord* event; nsPluginPlatformWindowRef window; #elif defined(XP_OS2) uint32 event; uint32 wParam; uint32 lParam; #elif defined(XP_WIN) uint16 event; uint32 wParam; uint32 lParam; #elif defined(XP_UNIX) && defined(MOZ_X11) XEvent event; #else void *event; #endif }; /* * Non-standard event types that can be passed to HandleEvent * (These need to be kept in sync with the events defined in npapi.h.) */ enum nsPluginEventType { #if defined(XP_MAC) || defined(XP_MACOSX) nsPluginEventType_GetFocusEvent = (osEvt + 16), nsPluginEventType_LoseFocusEvent, nsPluginEventType_AdjustCursorEvent, nsPluginEventType_MenuCommandEvent, nsPluginEventType_ClippingChangedEvent, nsPluginEventType_ScrollingBeginsEvent, nsPluginEventType_ScrollingEndsEvent, #endif /* XP_MAC || XP_MACOSX */ nsPluginEventType_Idle = 0 }; //////////////////////////////////////////////////////////////////////////////// enum nsPluginReason { nsPluginReason_Base = 0, nsPluginReason_Done = 0, nsPluginReason_NetworkErr, nsPluginReason_UserBreak, nsPluginReason_NoReason }; //////////////////////////////////////////////////////////////////////////////// // Version Numbers for Structs // These version number are for structures whose fields may evolve over time. // When fields are added to the end of the struct, the minor version will be // incremented. When the struct changes in an incompatible way the major version // will be incremented. #define nsMajorVersion(v) (((PRInt32)(v) >> 16) & 0xffff) #define nsMinorVersion(v) ((PRInt32)(v) & 0xffff) #define nsVersionOK(suppliedV, requiredV) \ (nsMajorVersion(suppliedV) == nsMajorVersion(requiredV) \ && nsMinorVersion(suppliedV) >= nsMinorVersion(requiredV)) #define NP_POPUP_API_VERSION 16 //////////////////////////////////////////////////////////////////////////////// // Classes //////////////////////////////////////////////////////////////////////////////// // Classes that must be implemented by the plugin DLL: class nsIPlugin; // plugin class (MIME-type handler) class nsIEventHandler; // event handler interface class nsIPluginInstance; // plugin instance // Classes that are implemented by the browser: class nsIPluginManager; // minimum browser requirements class nsIFileUtilities; // file utilities (accessible from nsIPluginManager) class nsIPluginInstancePeer; // parts of nsIPluginInstance implemented by the browser class nsIWindowlessPluginInstancePeer; // subclass of nsIPluginInstancePeer for windowless plugins class nsIPluginTagInfo; // describes html tag (accessible from nsIPluginInstancePeer) //////////////////////////////////////////////////////////////////////////////// #ifdef XP_MAC #pragma options align=reset #endif #endif /* RC_INVOKED */ #ifdef __OS2__ #pragma pack() #endif #endif // nsplugindefs_h___