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