WebCore:
[WebKit-https.git] / WebCore / bridge / npapi.h
1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Mozilla Public License Version
5  * 1.1 (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS" basis,
10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11  * for the specific language governing rights and limitations under the
12  * License.
13  *
14  * The Original Code is mozilla.org code.
15  *
16  * The Initial Developer of the Original Code is
17  * Netscape Communications Corporation.
18  * Portions created by the Initial Developer are Copyright (C) 1998
19  * the Initial Developer. All Rights Reserved.
20  *
21  * Contributor(s):
22  *
23  * Alternatively, the contents of this file may be used under the terms of
24  * either the GNU General Public License Version 2 or later (the "GPL"), or
25  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26  * in which case the provisions of the GPL or the LGPL are applicable instead
27  * of those above. If you wish to allow use of your version of this file only
28  * under the terms of either the GPL or the LGPL, and not to allow others to
29  * use your version of this file under the terms of the MPL, indicate your
30  * decision by deleting the provisions above and replace them with the notice
31  * and other provisions required by the GPL or the LGPL. If you do not delete
32  * the provisions above, a recipient may use your version of this file under
33  * the terms of any one of the MPL, the GPL or the LGPL.
34  *
35  * ***** END LICENSE BLOCK ***** */
36  
37  
38  /*
39   *  Netscape client plug-in API spec
40   */
41  
42
43 #ifndef _NPAPI_H_
44 #define _NPAPI_H_
45
46 #ifdef INCLUDE_JAVA
47 #include "jri.h"                /* Java Runtime Interface */
48 #else
49 #define jref    void *
50 #define JRIEnv  void
51 #endif
52
53 #ifdef _WIN32
54 #    ifndef XP_WIN
55 #        define XP_WIN 1
56 #    endif /* XP_WIN */
57 #endif /* _WIN32 */
58
59 #ifdef __MWERKS__
60 #    define _declspec __declspec
61 #    ifdef macintosh
62 #        ifndef XP_MAC
63 #            define XP_MAC 1
64 #        endif /* XP_MAC */
65 #    endif /* macintosh */
66 #    ifdef __INTEL__
67 #        undef NULL
68 #        ifndef XP_WIN
69 #            define XP_WIN 1
70 #        endif /* __INTEL__ */
71 #    endif /* XP_PC */
72 #endif /* __MWERKS__ */
73
74 #if defined(__APPLE_CC__) && !defined(__MACOS_CLASSIC__) && !defined(XP_UNIX)
75 #   define XP_MACOSX
76 #endif
77
78 #ifdef XP_MAC
79     #include <Quickdraw.h>
80     #include <Events.h>
81 #endif
82
83 #if defined(XP_MACOSX) && defined(__LP64__)
84 #define NP_NO_QUICKDRAW
85 #define NP_NO_CARBON
86 #endif
87
88 #ifdef XP_MACOSX
89     #include <ApplicationServices/ApplicationServices.h>
90     #include <OpenGL/OpenGL.h>
91 #ifndef NP_NO_CARBON
92     #include <Carbon/Carbon.h>
93 #endif
94 #endif
95
96 #ifdef XP_UNIX
97     #include <X11/Xlib.h>
98     #include <X11/Xutil.h>
99     #include <stdio.h>
100 #endif
101
102 #ifdef XP_WIN
103     #include <windows.h>
104 #endif
105
106 /*----------------------------------------------------------------------*/
107 /*             Plugin Version Constants                                 */
108 /*----------------------------------------------------------------------*/
109
110 #define NP_VERSION_MAJOR 0
111 #define NP_VERSION_MINOR 20
112
113
114
115 /*----------------------------------------------------------------------*/
116 /*             Definition of Basic Types                                */
117 /*----------------------------------------------------------------------*/
118
119 #ifndef _UINT16
120 #define _UINT16
121 typedef unsigned short uint16;
122 #endif
123
124 #ifndef _UINT32
125 #define _UINT32
126 #ifdef __LP64__
127 typedef unsigned int uint32;
128 #else /* __LP64__ */
129 typedef unsigned long uint32;
130 #endif /* __LP64__ */
131 #endif
132
133 #ifndef _INT16
134 #define _INT16
135 typedef short int16;
136 #endif
137
138 #ifndef _INT32
139 #define _INT32
140 #ifdef __LP64__
141 typedef int int32;
142 #else /* __LP64__ */
143 typedef long int32;
144 #endif /* __LP64__ */
145 #endif
146
147 #ifndef FALSE
148 #define FALSE (0)
149 #endif
150 #ifndef TRUE
151 #define TRUE (1)
152 #endif
153 #ifndef NULL
154 #define NULL (0L)
155 #endif
156
157 typedef unsigned char    NPBool;
158 typedef int16            NPError;
159 typedef int16            NPReason;
160 typedef char*            NPMIMEType;
161
162
163
164 /*----------------------------------------------------------------------*/
165 /*             Structures and definitions             */
166 /*----------------------------------------------------------------------*/
167
168 #if !defined(__LP64__)
169 #if defined(XP_MAC) || defined(XP_MACOSX)
170 #pragma options align=mac68k
171 #endif
172 #endif /* __LP64__ */
173
174 /*
175  *  NPP is a plug-in's opaque instance handle
176  */
177 typedef struct _NPP
178 {
179     void*    pdata;            /* plug-in private data */
180     void*    ndata;            /* netscape private data */
181 } NPP_t;
182
183 typedef NPP_t*    NPP;
184
185
186 typedef struct _NPStream
187 {
188     void*        pdata;        /* plug-in private data */
189     void*        ndata;        /* netscape private data */
190     const char*  url;
191     uint32       end;
192     uint32       lastmodified;
193     void*        notifyData;
194     const char*  headers;      /* Response headers from host.
195                                 * Exists only for >= NPVERS_HAS_RESPONSE_HEADERS.
196                                 * Used for HTTP only; NULL for non-HTTP.
197                                 * Available from NPP_NewStream onwards.
198                                 * Plugin should copy this data before storing it.
199                                 * Includes HTTP status line and all headers,
200                                 * preferably verbatim as received from server,
201                                 * headers formatted as in HTTP ("Header: Value"),
202                                 * and newlines (\n, NOT \r\n) separating lines.
203                                 * Terminated by \n\0 (NOT \n\n\0). */
204 } NPStream;
205
206
207 typedef struct _NPByteRange
208 {
209     int32      offset;         /* negative offset means from the end */
210     uint32     length;
211     struct _NPByteRange* next;
212 } NPByteRange;
213
214
215 typedef struct _NPSavedData
216 {
217     int32    len;
218     void*    buf;
219 } NPSavedData;
220
221
222 typedef struct _NPRect
223 {
224     uint16    top;
225     uint16    left;
226     uint16    bottom;
227     uint16    right;
228 } NPRect;
229
230
231 #ifdef XP_UNIX
232 /*
233  * Unix specific structures and definitions
234  */
235
236 /*
237  * Callback Structures.
238  *
239  * These are used to pass additional platform specific information.
240  */
241 enum {
242     NP_SETWINDOW = 1,
243     NP_PRINT
244 };
245
246 typedef struct
247 {
248     int32        type;
249 } NPAnyCallbackStruct;
250
251 typedef struct
252 {
253     int32           type;
254     Display*        display;
255     Visual*         visual;
256     Colormap        colormap;
257     unsigned int    depth;
258 } NPSetWindowCallbackStruct;
259
260 typedef struct
261 {
262     int32            type;
263     FILE*            fp;
264 } NPPrintCallbackStruct;
265
266 #endif /* XP_UNIX */
267
268 /*
269  *   The following masks are applied on certain platforms to NPNV and 
270  *   NPPV selectors that pass around pointers to COM interfaces. Newer 
271  *   compilers on some platforms may generate vtables that are not 
272  *   compatible with older compilers. To prevent older plugins from 
273  *   not understanding a new browser's ABI, these masks change the 
274  *   values of those selectors on those platforms. To remain backwards
275  *   compatible with differenet versions of the browser, plugins can 
276  *   use these masks to dynamically determine and use the correct C++
277  *   ABI that the browser is expecting. This does not apply to Windows 
278  *   as Microsoft's COM ABI will likely not change.
279  */
280
281 #define NP_ABI_GCC3_MASK  0x10000000
282 /*
283  *   gcc 3.x generated vtables on UNIX and OSX are incompatible with 
284  *   previous compilers.
285  */
286 #if (defined (XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3))
287 #define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK
288 #else
289 #define _NP_ABI_MIXIN_FOR_GCC3 0
290 #endif
291
292 #define NP_ABI_MACHO_MASK 0x01000000
293 /*
294  *   On OSX, the Mach-O executable format is significantly
295  *   different than CFM. In addition to having a different
296  *   C++ ABI, it also has has different C calling convention.
297  *   You must use glue code when calling between CFM and
298  *   Mach-O C functions. 
299  */
300 #if (defined(TARGET_RT_MAC_MACHO))
301 #define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK
302 #else
303 #define _NP_ABI_MIXIN_FOR_MACHO 0
304 #endif
305
306
307 #define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO)
308
309 /*
310  * List of variable names for which NPP_GetValue shall be implemented
311  */
312 typedef enum {
313     NPPVpluginNameString = 1,
314     NPPVpluginDescriptionString,
315     NPPVpluginWindowBool,
316     NPPVpluginTransparentBool,
317
318     NPPVjavaClass,                /* Not implemented in WebKit */
319     NPPVpluginWindowSize,         /* Not implemented in WebKit */
320     NPPVpluginTimerInterval,      /* Not implemented in WebKit */
321
322     NPPVpluginScriptableInstance = (10 | NP_ABI_MASK), /* Not implemented in WebKit */
323     NPPVpluginScriptableIID = 11, /* Not implemented in WebKit */
324
325     /* 12 and over are available on Mozilla builds starting with 0.9.9 */
326     NPPVjavascriptPushCallerBool = 12,  /* Not implemented in WebKit */
327     NPPVpluginKeepLibraryInMemory = 13, /* Not implemented in WebKit */
328     NPPVpluginNeedsXEmbed         = 14, /* Not implemented in WebKit */
329
330     /* Get the NPObject for scripting the plugin. */
331     NPPVpluginScriptableNPObject  = 15,
332
333     /* Get the plugin value (as \0-terminated UTF-8 string data) for
334      * form submission if the plugin is part of a form. Use
335      * NPN_MemAlloc() to allocate memory for the string data.
336      */
337     NPPVformValue = 16,    /* Not implemented in WebKit */
338
339     NPPVpluginUrlRequestsDisplayedBool = 17, /* Not implemented in WebKit */
340
341     /* Checks if the plugin is interested in receiving the http body of
342      * failed http requests (http status != 200).
343      */
344     NPPVpluginWantsAllNetworkStreams = 18,
345
346 #ifdef XP_MACOSX
347     /* Used for negotiating drawing models */
348     NPPVpluginDrawingModel = 1000,
349     /* Used for negotiating event models */
350     NPPVpluginEventModel = 1001,
351     /* The plug-in text input vtable */
352     NPPVpluginTextInputFuncs = 1002,
353 #endif
354 } NPPVariable;
355
356 /*
357  * List of variable names for which NPN_GetValue is implemented by Mozilla
358  */
359 typedef enum {
360     NPNVxDisplay = 1,
361     NPNVxtAppContext,
362     NPNVnetscapeWindow,
363     NPNVjavascriptEnabledBool,
364     NPNVasdEnabledBool,
365     NPNVisOfflineBool,
366
367     /* 10 and over are available on Mozilla builds starting with 0.9.4 */
368     NPNVserviceManager = (10 | NP_ABI_MASK),  /* Not implemented in WebKit */
369     NPNVDOMElement     = (11 | NP_ABI_MASK),  /* Not implemented in WebKit */
370     NPNVDOMWindow      = (12 | NP_ABI_MASK),  /* Not implemented in WebKit */
371     NPNVToolkit        = (13 | NP_ABI_MASK),  /* Not implemented in WebKit */
372     NPNVSupportsXEmbedBool = 14,              /* Not implemented in WebKit */
373
374     /* Get the NPObject wrapper for the browser window. */
375     NPNVWindowNPObject = 15,
376
377     /* Get the NPObject wrapper for the plugins DOM element. */
378     NPNVPluginElementNPObject = 16,
379
380     NPNVSupportsWindowless = 17
381
382 #ifdef XP_MACOSX
383     , NPNVpluginDrawingModel = 1000 /* The NPDrawingModel specified by the plugin */
384
385 #ifndef NP_NO_QUICKDRAW
386     , NPNVsupportsQuickDrawBool = 2000 /* TRUE if the browser supports the QuickDraw drawing model */
387 #endif
388     , NPNVsupportsCoreGraphicsBool = 2001 /* TRUE if the browser supports the CoreGraphics drawing model */
389     , NPNVsupportsOpenGLBool = 2002 /* TRUE if the browser supports the OpenGL drawing model (CGL on Mac) */
390
391 #ifndef NP_NO_CARBON
392     , NPNVsupportsCarbonBool = 2003 /* TRUE if the browser supports the Carbon event model */
393 #endif
394     , NPNVsupportsCocoaBool = 2004 /* TRUE if the browser supports the Cocoa event model */
395     
396     , NPNVbrowserTextInputFuncs = 1002 /* The browser text input vtable */
397 #endif /* XP_MACOSX */
398 } NPNVariable;
399
400 /*
401  * The type of a NPWindow - it specifies the type of the data structure
402  * returned in the window field.
403  */
404 typedef enum {
405     NPWindowTypeWindow = 1,
406     NPWindowTypeDrawable
407 } NPWindowType;
408
409 #ifdef XP_MACOSX
410
411 /*
412  * The drawing model for a Mac OS X plugin.  These are the possible values for the NPNVpluginDrawingModel variable.
413  */
414  
415 typedef enum {
416 #ifndef NP_NO_QUICKDRAW
417     NPDrawingModelQuickDraw = 0,
418 #endif
419     NPDrawingModelCoreGraphics = 1,
420     NPDrawingModelOpenGL = 2
421 } NPDrawingModel;
422
423 /*
424  * The event model for a Mac OS X plugin. These are the possible values for the NPNVpluginEventModel variable.
425  */
426
427 typedef enum {
428 #ifndef NP_NO_CARBON
429     NPEventModelCarbon = 0,
430 #endif
431     NPEventModelCocoa = 1,
432 } NPEventModel;
433
434 typedef enum {
435     NPCocoaEventDrawRect = 1,
436     NPCocoaEventMouseDown,
437     NPCocoaEventMouseUp,
438     NPCocoaEventMouseMoved,
439     NPCocoaEventMouseEntered,
440     NPCocoaEventMouseExited,
441     NPCocoaEventMouseDragged,
442     NPCocoaEventKeyDown,
443     NPCocoaEventKeyUp,
444     NPCocoaEventFlagsChanged,
445     NPCocoaEventFocusChanged,
446     NPCocoaEventWindowFocusChanged,
447     NPCocoaEventScrollWheel,
448 } NPCocoaEventType;
449
450 typedef struct _NPNSString NPNSString;
451 typedef struct _NPNSWindow NPNSWindow;
452 typedef struct _NPNSMenu NPNSMenu;
453
454 typedef struct _NPCocoaEvent {
455     NPCocoaEventType type;
456     uint32 version;
457     
458     union {
459         struct {
460             uint32 modifierFlags;
461             double pluginX;
462             double pluginY;            
463             int32 buttonNumber;
464             int32 clickCount;
465             double deltaX;
466             double deltaY;
467             double deltaZ;
468         } mouse;
469         struct {
470             uint32 modifierFlags;
471             NPNSString *characters;
472             NPNSString *charactersIgnoringModifiers;
473             NPBool isARepeat;
474             uint16 keyCode;
475         } key;
476         struct {
477             double x;
478             double y;
479             double width;
480             double height;
481         } draw;
482         struct {
483             NPBool hasFocus;
484         } focus;        
485     } data;
486 } NPCocoaEvent;
487
488 #endif
489
490 typedef struct _NPWindow
491 {
492     void*    window;     /* Platform specific window handle */
493     int32    x;            /* Position of top left corner relative */
494     int32    y;            /*    to a netscape page.                    */
495     uint32    width;        /* Maximum window size */
496     uint32    height;
497     NPRect    clipRect;    /* Clipping rectangle in port coordinates */
498                         /* Used by MAC only.              */
499 #ifdef XP_UNIX
500     void *    ws_info;    /* Platform-dependent additonal data */
501 #endif /* XP_UNIX */
502     NPWindowType type;    /* Is this a window or a drawable? */
503 } NPWindow;
504
505
506 typedef struct _NPFullPrint
507 {
508     NPBool    pluginPrinted;    /* Set TRUE if plugin handled fullscreen */
509                             /*    printing                             */
510     NPBool    printOne;        /* TRUE if plugin should print one copy  */
511                             /*    to default printer                     */
512     void*    platformPrint;    /* Platform-specific printing info */
513 } NPFullPrint;
514
515 typedef struct _NPEmbedPrint
516 {
517     NPWindow    window;
518     void*    platformPrint;    /* Platform-specific printing info */
519 } NPEmbedPrint;
520
521 typedef struct _NPPrint
522 {
523     uint16    mode;                        /* NP_FULL or NP_EMBED */
524     union
525     {
526         NPFullPrint     fullPrint;        /* if mode is NP_FULL */
527         NPEmbedPrint    embedPrint;        /* if mode is NP_EMBED */
528     } print;
529 } NPPrint;
530
531 #ifdef XP_MACOSX
532 typedef NPNSMenu NPMenu;
533 #else
534 typedef void * NPMenu;
535 #endif
536
537 #if defined(XP_MAC) || defined(XP_MACOSX)
538
539 #ifndef NP_NO_CARBON
540 typedef EventRecord    NPEvent;
541 #endif
542
543 #elif defined(XP_WIN)
544 typedef struct _NPEvent
545 {
546     uint16   event;
547     uint32   wParam;
548     uint32   lParam;
549 } NPEvent;
550 #elif defined (XP_UNIX)
551 typedef XEvent NPEvent;
552 #else
553 typedef void*            NPEvent;
554 #endif /* XP_MAC */
555
556 #if defined(XP_MAC)
557 typedef RgnHandle NPRegion;
558 #elif defined(XP_MACOSX)
559 /* 
560  * NPRegion's type depends on the drawing model specified by the plugin (see NPNVpluginDrawingModel).
561  * NPQDRegion represents a QuickDraw RgnHandle and is used with the QuickDraw drawing model.
562  * NPCGRegion repesents a graphical region when using any other drawing model.
563  */
564 typedef void *NPRegion;
565 #ifndef NP_NO_QUICKDRAW
566 typedef RgnHandle NPQDRegion;
567 #endif
568 typedef CGPathRef NPCGRegion;
569 #elif defined(XP_WIN)
570 typedef HRGN NPRegion;
571 #elif defined(XP_UNIX)
572 typedef Region NPRegion;
573 #else
574 typedef void *NPRegion;
575 #endif /* XP_MAC */
576
577 #ifdef XP_MACOSX
578
579 /* 
580  * NP_CGContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelCoreGraphics
581  * as its drawing model.
582  */
583
584 typedef struct NP_CGContext
585 {
586     CGContextRef context;
587 #ifdef NP_NO_CARBON
588     NPNSWindow *window;
589 #else
590     void *window; // Can be either an NSWindow or a WindowRef depending on the event model
591 #endif
592 } NP_CGContext;
593
594 /* 
595  * NP_GLContext is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelOpenGL as its
596  * drawing model.
597  */
598
599 typedef struct NP_GLContext
600 {
601     CGLContextObj context;
602 #ifdef NP_NO_CARBON
603     NPNSWindow *window;
604 #else
605     void *window; // Can be either an NSWindow or a WindowRef depending on the event model
606 #endif
607 } NP_GLContext;
608
609 #endif /* XP_MACOSX */
610
611 #if defined(XP_MAC) || defined(XP_MACOSX)
612
613 /*
614  *  Mac-specific structures and definitions.
615  */
616
617 #ifndef NP_NO_QUICKDRAW
618
619 /* 
620  * NP_Port is the type of the NPWindow's 'window' when the plugin specifies NPDrawingModelQuickDraw as its
621  * drawing model, or the plugin does not specify a drawing model.
622  *
623  * It is not recommended that new plugins use NPDrawingModelQuickDraw or NP_Port, as QuickDraw has been
624  * deprecated in Mac OS X 10.5.  CoreGraphics is the preferred drawing API.
625  *
626  * NP_Port is not available in 64-bit.
627  */
628  
629 typedef struct NP_Port
630 {
631     CGrafPtr     port;        /* Grafport */
632     int32        portx;        /* position inside the topmost window */
633     int32        porty;
634 } NP_Port;
635
636 #endif /* NP_NO_QUICKDRAW */
637
638 /*
639  *  Non-standard event types that can be passed to HandleEvent
640  */
641 #define getFocusEvent        (osEvt + 16)
642 #define loseFocusEvent        (osEvt + 17)
643 #define adjustCursorEvent   (osEvt + 18)
644
645 #endif /* XP_MAC */
646
647
648 /*
649  * Values for mode passed to NPP_New:
650  */
651 #define NP_EMBED        1
652 #define NP_FULL         2
653
654 /*
655  * Values for stream type passed to NPP_NewStream:
656  */
657 #define NP_NORMAL        1
658 #define NP_SEEK         2
659 #define NP_ASFILE        3
660 #define NP_ASFILEONLY        4
661
662 #define NP_MAXREADY    (((unsigned)(~0)<<1)>>1)
663
664 #if !defined(__LP64__)
665 #if defined(XP_MAC) || defined(XP_MACOSX)
666 #pragma options align=reset
667 #endif
668 #endif /* __LP64__ */
669
670
671 /*----------------------------------------------------------------------*/
672 /*             Error and Reason Code definitions            */
673 /*----------------------------------------------------------------------*/
674
675 /*
676  *    Values of type NPError:
677  */
678 #define NPERR_BASE                            0
679 #define NPERR_NO_ERROR                        (NPERR_BASE + 0)
680 #define NPERR_GENERIC_ERROR                    (NPERR_BASE + 1)
681 #define NPERR_INVALID_INSTANCE_ERROR        (NPERR_BASE + 2)
682 #define NPERR_INVALID_FUNCTABLE_ERROR        (NPERR_BASE + 3)
683 #define NPERR_MODULE_LOAD_FAILED_ERROR        (NPERR_BASE + 4)
684 #define NPERR_OUT_OF_MEMORY_ERROR            (NPERR_BASE + 5)
685 #define NPERR_INVALID_PLUGIN_ERROR            (NPERR_BASE + 6)
686 #define NPERR_INVALID_PLUGIN_DIR_ERROR        (NPERR_BASE + 7)
687 #define NPERR_INCOMPATIBLE_VERSION_ERROR    (NPERR_BASE + 8)
688 #define NPERR_INVALID_PARAM                (NPERR_BASE + 9)
689 #define NPERR_INVALID_URL                    (NPERR_BASE + 10)
690 #define NPERR_FILE_NOT_FOUND                (NPERR_BASE + 11)
691 #define NPERR_NO_DATA                        (NPERR_BASE + 12)
692 #define NPERR_STREAM_NOT_SEEKABLE            (NPERR_BASE + 13)
693
694 /*
695  *    Values of type NPReason:
696  */
697 #define NPRES_BASE                0
698 #define NPRES_DONE                    (NPRES_BASE + 0)
699 #define NPRES_NETWORK_ERR            (NPRES_BASE + 1)
700 #define NPRES_USER_BREAK            (NPRES_BASE + 2)
701
702 /*
703  *      Don't use these obsolete error codes any more.
704  */
705 #define NP_NOERR  NP_NOERR_is_obsolete_use_NPERR_NO_ERROR
706 #define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR
707 #define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK
708
709 /*
710  * Version feature information
711  */
712 #define NPVERS_HAS_STREAMOUTPUT     8
713 #define NPVERS_HAS_NOTIFICATION     9
714 #define NPVERS_HAS_LIVECONNECT        9
715 #define NPVERS_WIN16_HAS_LIVECONNECT    9
716 #define NPVERS_68K_HAS_LIVECONNECT    11
717 #define NPVERS_HAS_WINDOWLESS       11
718 #define NPVERS_HAS_XPCONNECT_SCRIPTING    13  /* Not implemented in WebKit */
719 #define NPVERS_HAS_NPRUNTIME_SCRIPTING    14
720 #define NPVERS_HAS_FORM_VALUES            15  /* Not implemented in WebKit; see bug 13061 */
721 #define NPVERS_HAS_POPUPS_ENABLED_STATE   16  /* Not implemented in WebKit */
722 #define NPVERS_HAS_RESPONSE_HEADERS       17
723 #define NPVERS_HAS_NPOBJECT_ENUM          18
724 #define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19
725 #define NPVERS_MACOSX_HAS_EVENT_MODELS    20
726
727 /*----------------------------------------------------------------------*/
728 /*             Function Prototypes                */
729 /*----------------------------------------------------------------------*/
730
731 #if defined(_WINDOWS) && !defined(WIN32)
732 #define NP_LOADDS  _loadds
733 #else
734 #define NP_LOADDS
735 #endif
736
737 #ifdef __cplusplus
738 extern "C" {
739 #endif
740
741 /*
742  * NPP_* functions are provided by the plugin and called by the navigator.
743  */
744
745 #ifdef XP_UNIX
746 char*                    NPP_GetMIMEDescription(void);
747 #endif /* XP_UNIX */
748
749 NPError     NPP_Initialize(void);
750 void        NPP_Shutdown(void);
751 NPError     NP_LOADDS    NPP_New(NPMIMEType pluginType, NPP instance,
752                                 uint16 mode, int16 argc, char* argn[],
753                                 char* argv[], NPSavedData* saved);
754 NPError     NP_LOADDS    NPP_Destroy(NPP instance, NPSavedData** save);
755 NPError     NP_LOADDS    NPP_SetWindow(NPP instance, NPWindow* window);
756 NPError     NP_LOADDS    NPP_NewStream(NPP instance, NPMIMEType type,
757                                       NPStream* stream, NPBool seekable,
758                                       uint16* stype);
759 NPError     NP_LOADDS    NPP_DestroyStream(NPP instance, NPStream* stream,
760                                           NPReason reason);
761 int32        NP_LOADDS    NPP_WriteReady(NPP instance, NPStream* stream);
762 int32        NP_LOADDS    NPP_Write(NPP instance, NPStream* stream, int32 offset,
763                                   int32 len, void* buffer);
764 void        NP_LOADDS    NPP_StreamAsFile(NPP instance, NPStream* stream,
765                                          const char* fname);
766 void        NP_LOADDS    NPP_Print(NPP instance, NPPrint* platformPrint);
767 int16            NPP_HandleEvent(NPP instance, void* event);
768 void        NP_LOADDS    NPP_URLNotify(NPP instance, const char* url,
769                                       NPReason reason, void* notifyData);
770 jref        NP_LOADDS            NPP_GetJavaClass(void);
771 NPError     NPP_GetValue(NPP instance, NPPVariable variable,
772                                      void *value);
773 NPError     NPP_SetValue(NPP instance, NPNVariable variable,
774                                      void *value);
775
776 /*
777  * NPN_* functions are provided by the navigator and called by the plugin.
778  */
779
780 void        NPN_Version(int* plugin_major, int* plugin_minor,
781                             int* netscape_major, int* netscape_minor);
782 NPError     NPN_GetURLNotify(NPP instance, const char* url,
783                                  const char* target, void* notifyData);
784 NPError     NPN_GetURL(NPP instance, const char* url,
785                            const char* target);
786 NPError     NPN_PostURLNotify(NPP instance, const char* url,
787                                   const char* target, uint32 len,
788                                   const char* buf, NPBool file,
789                                   void* notifyData);
790 NPError     NPN_PostURL(NPP instance, const char* url,
791                             const char* target, uint32 len,
792                             const char* buf, NPBool file);
793 NPError     NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
794 NPError     NPN_NewStream(NPP instance, NPMIMEType type,
795                               const char* target, NPStream** stream);
796 int32        NPN_Write(NPP instance, NPStream* stream, int32 len,
797                           void* buffer);
798 NPError     NPN_DestroyStream(NPP instance, NPStream* stream,
799                                   NPReason reason);
800 void        NPN_Status(NPP instance, const char* message);
801 const char*    NPN_UserAgent(NPP instance);
802 void*        NPN_MemAlloc(uint32 size);
803 void        NPN_MemFree(void* ptr);
804 uint32        NPN_MemFlush(uint32 size);
805 void        NPN_ReloadPlugins(NPBool reloadPages);
806 JRIEnv*     NPN_GetJavaEnv(void);
807 jref        NPN_GetJavaPeer(NPP instance);
808 NPError     NPN_GetValue(NPP instance, NPNVariable variable,
809                              void *value);
810 NPError     NPN_SetValue(NPP instance, NPPVariable variable,
811                              void *value);
812 void        NPN_InvalidateRect(NPP instance, NPRect *invalidRect);
813 void        NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion);
814 void        NPN_ForceRedraw(NPP instance);
815 void        NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
816 void        NPN_PopPopupsEnabledState(NPP instance);
817 void        NPN_PluginThreadAsyncCall(NPP instance, void (*func) (void *), void *userData);
818 uint32      NPN_ScheduleTimer(NPP instance, uint32 interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32 timerID));
819 void        NPN_UnscheduleTimer(NPP instance, uint32 timerID);
820 NPError     NPN_PopUpContextMenu(NPP instance, NPMenu* menu);
821
822 #ifdef __cplusplus
823 }  /* end extern "C" */
824 #endif
825
826 #endif /* _NPAPI_H_ */