/* Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef _NP_EXTENSIONS_H_ #define _NP_EXTENSIONS_H_ // Use the shorter include path here so that this file can be used in non- // Chromium projects, such as the Native Client SDK. #include "npapi.h" #include <stddef.h> // For size_t /* * A fake "enum" value for getting browser-implemented Pepper extensions. * The variable returns a pointer to an NPNExtensions structure. */ #define NPNVPepperExtensions ((NPNVariable) 4000) /* * A fake "enum" value for getting plugin-implemented Pepper extensions. * The variable returns a pointer to an NPPExtensions structure. */ #define NPPVPepperExtensions ((NPPVariable) 4001) typedef void NPDeviceConfig; typedef void NPDeviceContext; typedef void NPUserData; /* unique id for each device interface */ typedef int32_t NPDeviceID; /* Events -------------------------------------------------------------------*/ typedef enum { NPMouseButton_None = -1, NPMouseButton_Left = 0, NPMouseButton_Middle = 1, NPMouseButton_Right = 2 } NPMouseButtons; typedef enum { NPEventType_Undefined = -1, NPEventType_MouseDown = 0, NPEventType_MouseUp = 1, NPEventType_MouseMove = 2, NPEventType_MouseEnter = 3, NPEventType_MouseLeave = 4, NPEventType_MouseWheel = 5, NPEventType_RawKeyDown = 6, NPEventType_KeyDown = 7, NPEventType_KeyUp = 8, NPEventType_Char = 9, NPEventType_Minimize = 10, NPEventType_Focus = 11, NPEventType_Device = 12 } NPEventTypes; typedef enum { NPEventModifier_ShiftKey = 1 << 0, NPEventModifier_ControlKey = 1 << 1, NPEventModifier_AltKey = 1 << 2, NPEventModifier_MetaKey = 1 << 3, NPEventModifier_IsKeyPad = 1 << 4, NPEventModifier_IsAutoRepeat = 1 << 5, NPEventModifier_LeftButtonDown = 1 << 6, NPEventModifier_MiddleButtonDown = 1 << 7, NPEventModifier_RightButtonDown = 1 << 8 } NPEventModifiers; typedef struct _NPKeyEvent { uint32_t modifier; uint32_t normalizedKeyCode; } NPKeyEvent; typedef struct _NPCharacterEvent { uint32_t modifier; uint16_t text[4]; uint16_t unmodifiedText[4]; } NPCharacterEvent; typedef struct _NPMouseEvent { uint32_t modifier; int32_t button; int32_t x; int32_t y; int32_t clickCount; } NPMouseEvent; typedef struct _NPMouseWheelEvent { uint32_t modifier; float deltaX; float deltaY; float wheelTicksX; float wheelTicksY; uint32_t scrollByPage; } NPMouseWheelEvent; typedef struct _NPDeviceEvent { uint32_t device_uid; uint32_t subtype; /* uint8_t generic[0]; */ } NPDeviceEvent; typedef struct _NPMinimizeEvent { int32_t value; } NPMinimizeEvent; typedef struct _NPFocusEvent { int32_t value; } NPFocusEvent; typedef struct _NPPepperEvent { uint32_t size; int32_t type; double timeStampSeconds; union { NPKeyEvent key; NPCharacterEvent character; NPMouseEvent mouse; NPMouseWheelEvent wheel; NPMinimizeEvent minimize; NPFocusEvent focus; NPDeviceEvent device; } u; } NPPepperEvent; /* 2D -----------------------------------------------------------------------*/ #define NPPepper2DDevice 1 typedef struct _NPDeviceContext2DConfig { } NPDeviceContext2DConfig; typedef struct _NPDeviceContext2D { /* Internal value used by the browser to identify this device. */ void* reserved; /* A pointer to the pixel data. This data is 8-bit values in BGRA order in * memory. Each row will start |stride| bytes after the previous one. * * THIS DATA USES PREMULTIPLIED ALPHA. This means that each color channel has * been multiplied with the corresponding alpha, which makes compositing * easier. If any color channels have a value greater than the alpha value, * you'll likely get crazy colors and weird artifacts. */ void* region; /* Length of each row of pixels in bytes. This may be larger than width * 4 * if there is padding at the end of each row to help with alignment. */ int32_t stride; /* The dirty region that the plugin has painted into the buffer. This * will be initialized to the size of the plugin image in * initializeContextPtr. The plugin can change the values to only * update portions of the image. */ struct { int32_t left; int32_t top; int32_t right; int32_t bottom; } dirty; } NPDeviceContext2D; typedef struct _NPDeviceBuffer { void* ptr; size_t size; } NPDeviceBuffer; /* completion callback for flush device */ typedef void (*NPDeviceFlushContextCallbackPtr)( NPP instance, NPDeviceContext* context, NPError err, NPUserData* userData); /* query single capabilities of device */ typedef NPError ( *NPDeviceQueryCapabilityPtr)(NPP instance, int32_t capability, int32_t *value); /* query config (configuration == a set of capabilities) */ typedef NPError ( *NPDeviceQueryConfigPtr)(NPP instance, const NPDeviceConfig* request, NPDeviceConfig* obtain); /* device initialization */ typedef NPError (*NPDeviceInitializeContextPtr)( NPP instance, const NPDeviceConfig* config, NPDeviceContext* context); /* peek at device state */ typedef NPError (*NPDeviceGetStateContextPtr) ( NPP instance, NPDeviceContext* context, int32_t state, intptr_t* value); /* poke device state */ typedef NPError (*NPDeviceSetStateContextPtr) ( NPP instance, NPDeviceContext* context, int32_t state, intptr_t value); /* flush context, if callback, userData are NULL */ /* this becomes a blocking call */ typedef NPError (*NPDeviceFlushContextPtr)( NPP instance, NPDeviceContext* context, NPDeviceFlushContextCallbackPtr callback, void* userData); /* destroy device context. Application responsible for */ /* freeing context, if applicable */ typedef NPError (*NPDeviceDestroyContextPtr)( NPP instance, NPDeviceContext* context); /* Create a buffer associated with a particular context. The usage of the */ /* buffer is device specific. The lifetime of the buffer is scoped with the */ /* lifetime of the context. */ typedef NPError (*NPDeviceCreateBufferPtr)( NPP instance, NPDeviceContext* context, size_t size, int32_t* id); /* Destroy a buffer associated with a particular context. */ typedef NPError (*NPDeviceDestroyBufferPtr)( NPP instance, NPDeviceContext* context, int32_t id); /* Map a buffer id to its address. */ typedef NPError (*NPDeviceMapBufferPtr)( NPP instance, NPDeviceContext* context, int32_t id, NPDeviceBuffer* buffer); /* forward decl typdef structs */ typedef struct NPDevice NPDevice; typedef struct NPNExtensions NPNExtensions; // DEPRECATED: this typedef is just for the NaCl code until they switch to NPNExtensions. // PLEASE REMOVE THIS WHEN THE NACL CODE IS UPDATED. typedef struct NPNExtensions NPExtensions; /* New experimental device API. */ /* Mode for calls to NPDeviceSynchronizeContext. */ typedef enum { /* Get or set locally cached state without synchronizing or communicating */ /* with the service process (or thread). */ NPDeviceSynchronizationMode_Cached, /* Exchanges state with service process (or thread). Does not wait for any */ /* progress before returning. */ NPDeviceSynchronizationMode_Immediate, /* Exchanges state with service process (or thread). Blocks caller until */ /* further progress can be made. */ NPDeviceSynchronizationMode_Flush } NPDeviceSynchronizationMode; /* Get the number of configs supported by a given device. */ typedef NPError (*NPDeviceGetNumConfigsPtr)(NPP instance, int32_t* numConfigs); /* Get attribute values from a config. NPDeviceGetConfigs might return */ /* multiple configs. This function can be used to examine them to */ /* find the most suitable. For example, NPDeviceGetConfigs might return one */ /* config with antialiasing enabled and one without. This can be determined */ /* using this function. */ /* Inputs: */ /* config: The config index to extract the attributes from. */ /* attribList: Array of input config attribute / value pairs */ /* terminated with NPAttrib_End. */ /* Outputs: */ /* attribList: The values paired up with each attribute are filled in */ /* on return. */ typedef NPError (*NPDeviceGetConfigAttribsPtr)(NPP instance, int32_t config, int32_t* attribList); /* Create a device context based on a particular device configuration and a */ /* list config input attributes. */ /* Inputs: */ /* config: The device configuration to use. */ /* attribList: NULL or an array of context specific attribute / value */ /* pairs terminated with NPAttrib_End. */ /* Outputs: */ /* context: The created context. */ typedef NPError (*NPDeviceCreateContextPtr)(NPP instance, int32_t config, const int32_t* attribList, NPDeviceContext** context); /* Destroy a context. */ /* Inputs: */ /* context: The context to destroy. */ /*typedef NPError (*NPDestroyContext)(NPP instance, */ /* NPDeviceContext* context); */ /* This type should be cast to the type associated with the particular */ /* callback type */ typedef void (*NPDeviceGenericCallbackPtr)(void); /* Register a callback with a context. Callbacks are never invoked after the */ /* associated context has been destroyed. The semantics of the particular */ /* callback type determine which thread the callback is invoked on. It might */ /* be the plugin thread, the thread RegisterCallback is invoked on or a */ /* special thread created for servicing callbacks, such as an audio thread */ /* Inputs: */ /* callbackType: The device specific callback type */ /* callback: The callback to invoke. The signature varies by type. Use */ /* NULL to unregister the callback for a particular type. */ /* callbackData: A value that is passed to the callback function. Other */ /* callback arguments vary by type. */ typedef NPError (*NPDeviceRegisterCallbackPtr)( NPP instance, NPDeviceContext* context, int32_t callbackType, NPDeviceGenericCallbackPtr callback, void* callbackData); /* Callback for NPDeviceSynchronizeContext. */ /* Inputs: */ /* instance: The associated plugin instance. */ /* context: The context that was flushed. */ /* error: Indicates success of flush operation. */ /* data: The completion callback data that was passed to */ /* NPDeviceSynchronizeContext. */ typedef void (*NPDeviceSynchronizeContextCallbackPtr)( NPP instance, NPDeviceContext* context, NPError error, void* data); /* Synchronize the state of a device context. Takes lists of input and output */ /* attributes. Generally, the input attributes are copied into the context */ /* and the output attributes are filled in the state of the context either */ /* after (before) the synchronization depending on whether it is synchronous */ /* (asynchronous). The get the state of the context after an asynchronous */ /* synchronization, call this function a second time with Cached mode after */ /* the callback has been invoked. */ /* Inputs: */ /* context: The context to synchronize. */ /* mode: The type of synchronization to perform. */ /* inputAttribList: NULL or an array of input synchronization attribute / */ /* value pairs terminated with NPAttrib_End. */ /* outputAttribList: NULL or an array of output synchronization */ /* attributes / uninitialized value pairs terminated */ /* with NPAttrib_End. */ /* callback: NULL for synchronous operation or completion callback function */ /* for asynchronous operation. */ /* callbackData: Argument passed to callback function. */ /* Outputs: */ /* outputAttribList: The values paired up with each attribute are filled */ /* in on return for synchronous operation. */ typedef NPError (*NPDeviceSynchronizeContextPtr)( NPP instance, NPDeviceContext* context, NPDeviceSynchronizationMode mode, const int32_t* inputAttribList, int32_t* outputAttribList, NPDeviceSynchronizeContextCallbackPtr callback, void* callbackData); /* All attributes shared between devices, with the exception of */ /* NPDeviceContextAttrib_End, have bit 31 set. Device specific attributes */ /* have the bit clear. */ enum { /* Used to terminate arrays of attribute / value pairs. */ NPAttrib_End = 0, /* Error status of context. Non-zero means error. Shared by all devices, */ /* though error values are device specific. */ NPAttrib_Error = 0x80000000 }; /* generic device interface */ struct NPDevice { NPDeviceQueryCapabilityPtr queryCapability; NPDeviceQueryConfigPtr queryConfig; NPDeviceInitializeContextPtr initializeContext; NPDeviceSetStateContextPtr setStateContext; NPDeviceGetStateContextPtr getStateContext; NPDeviceFlushContextPtr flushContext; NPDeviceDestroyContextPtr destroyContext; NPDeviceCreateBufferPtr createBuffer; NPDeviceDestroyBufferPtr destroyBuffer; NPDeviceMapBufferPtr mapBuffer; /* Experimental device API */ NPDeviceGetNumConfigsPtr getNumConfigs; NPDeviceGetConfigAttribsPtr getConfigAttribs; NPDeviceCreateContextPtr createContext; /* NPDeviceDestroyContextPtr destroyContext; */ NPDeviceRegisterCallbackPtr registerCallback; NPDeviceSynchronizeContextPtr synchronizeContext; /* NPDeviceCreateBufferPtr createBuffer; */ /* NPDeviceDestroyBufferPtr destroyBuffer; */ /* NPDeviceMapBufferPtr mapBuffer; */ }; /* returns NULL if deviceID unavailable / unrecognized */ typedef NPDevice* (*NPAcquireDevicePtr)( NPP instance, NPDeviceID device); /* Updates the number of find results for the current search term. If * there are no matches 0 should be passed in. Only when the plugin has * finished searching should it pass in the final count with finalResult set to * true. */ typedef void (*NPNumberOfFindResultsChangedPtr)( NPP instance, int total, bool finalResult); /* Updates the index of the currently selected search item. */ typedef void (*NPSelectedFindResultChangedPtr)( NPP instance, int index); /* Theming -----------------------------------------------------------------*/ typedef int32_t NPWidgetID; typedef enum { NPWidgetTypeScrollbar = 0 } NPWidgetType; typedef struct _NPScrollbarCreateParams { bool vertical; } NPScrollbarCreateParams; typedef struct _NPRect32 { uint32_t top; uint32_t left; uint32_t bottom; uint32_t right; } NPRect32; typedef struct _NPScrollbarTickMarks { uint32_t count; NPRect32* tickmarks; } NPScrollbarTickMarks; typedef enum { NPWidgetPropertyLocation = 0, // variable is NPRect*. NPWidgetPropertyDirtyRect = 1, // Get only. variable is NPRec*. NPWidgetPropertyScrollbarThickness = 2, // Get only. variable is int32_t*. NPWidgetPropertyScrollbarValue = 3, // variable is int32_t*. NPWidgetPropertyScrollbarDocumentSize = 4, // Set only. variable is int32_t*. // Set only. variable is NPScrollbarTickMarks*. NPWidgetPropertyScrollbarTickMarks = 5, // Set only. variable is bool* (true for forward, false for backward). NPWidgetPropertyScrollbarScrollByLine = 6, // Set only. variable is bool* (true for forward, false for backward). NPWidgetPropertyScrollbarScrollByPage = 7, // Set only. variable is bool* (true for forward, false for backward). NPWidgetPropertyScrollbarScrollByDocument = 8, // Set only. variable is int32_t* (positive forward, negative backward). NPWidgetPropertyScrollbarScrollByPixels = 9 } NPWidgetProperty; // Creates a widget. If it returns NPERR_NO_ERROR then id will contain a unique // identifer for the widget that's used for the next functions. typedef NPError (*NPCreateWidgetPtr) ( NPP instance, NPWidgetType type, void* params, // Widget specific. NPWidgetID* id); // Destroys a widget. typedef NPError (*NPDestroyWidgetPtr) ( NPP instance, NPWidgetID id); // Paint the dirty rectangle of the given widget into context. typedef NPError (*NPPaintWidgetPtr) ( NPP instance, NPWidgetID id, NPDeviceContext2D* context, NPRect* dirty); // Pass in a pepper event to a plugin. It'll return true iff it uses it. typedef bool (*NPHandleWidgetEventPtr) ( NPP instance, NPWidgetID id, NPPepperEvent* event); // Gets a property of the widget. "value" varies depending on the variable. typedef NPError (*NPGetWidgetPropertyPtr) ( NPP instance, NPWidgetID id, NPWidgetProperty property, void* value); // Sets a property of the widget. typedef NPError (*NPSetWidgetPropertyPtr) ( NPP instance, NPWidgetID id, NPWidgetProperty property, void* value); typedef struct _NPWidgetExtensions { NPCreateWidgetPtr createWidget; NPDestroyWidgetPtr destroyWidget; NPPaintWidgetPtr paintWidget; NPHandleWidgetEventPtr handleWidgetEvent; NPGetWidgetPropertyPtr getWidgetProperty; NPSetWidgetPropertyPtr setWidgetProperty; } NPWidgetExtensions; typedef NPWidgetExtensions* (*NPGetWidgetExtensionsPtr)( NPP instance); /* Supports opening files anywhere on the system after prompting the user to * pick one. * * This API is asynchronous. It will return immediately and the user will be * prompted in parallel to pick a file. The plugin may continue to receive * events while the open file dialog is up, and may continue to paint. Plugins * may want to ignore input events between the call and the callback to avoid * reentrant behavior. If the return value is not NPERR_NO_ERROR, the callback * will NOT be executed. * * It is an error to call BrowseForFile before a previous call has executed * the callback. * * Setting the flags to "Open" requires that the file exist to allow picking. * Setting the flags to "Save" allows selecting nonexistant files (which will * then be created), and will prompt the user if they want to overwrite an * existing file if it exists. * * The plugin may specify a comma-separated list of possible mime types in * the "extensions" parameter. If no extensions are specified, the dialog box * will default to allowing all extensions. The first extension in the list * will be the default. * * TODO(brettw) On Windows the extensions traditionally include a text * description with the extension in the popup, do we want to allow this? * We should probably also allow the ability to put "All files" in the * list on Windows. * * Once the user has picked a file or has canceled the dialog box, the given * callback will be called with the results of the operation and the passed in * "user data" pointer. If the user successfully picked a file, the filename * will be non-NULL and will contain a pointer to an array of strings, one for * each file picked (the first file will be file_paths[0]). This buffer will * become invalid as soon as the call completes, so it is the plugin's * responsibility to copy the filename(sp if it needs future access to them. * A NULL file_paths in the callback means the user canceled the dialog box. * * The filename will be in UTF-8. It may not actually correspond to the actual * file on disk on a Linux system, because we'll do our best to convert it from * the filesystem's locale to UTF-8. Instead, the string will be appropriate for * displaying to the user which file they picked. * */ typedef enum { NPChooseFile_Open = 1, NPChooseFile_OpenMultiple = 2, NPChooseFile_Save = 3 } NPChooseFileMode; typedef void (*NPChooseFileCallback)(const char** filePaths, uint32_t pathCount, void* userData); typedef NPError (*NPChooseFilePtr)( NPP instance, const char* mimeTypes, NPChooseFileMode mode, NPChooseFileCallback callback, void* userData); typedef enum { NPCursorTypePointer = 0, NPCursorTypeCross = 1, NPCursorTypeHand = 2, NPCursorTypeIBeam = 3, NPCursorTypeWait = 4, NPCursorTypeHelp = 5, NPCursorTypeEastResize = 6, NPCursorTypeNorthResize = 7, NPCursorTypeNorthEastResize = 8, NPCursorTypeNorthWestResize = 9, NPCursorTypeSouthResize = 10, NPCursorTypeSouthEastResize = 11, NPCursorTypeSouthWestResize = 12, NPCursorTypeWestResize = 13, NPCursorTypeNorthSouthResize = 14, NPCursorTypeEastWestResize = 15, NPCursorTypeNorthEastSouthWestResize = 16, NPCursorTypeNorthWestSouthEastResize = 17, NPCursorTypeColumnResize = 18, NPCursorTypeRowResize = 19, NPCursorTypeMiddlePanning = 20, NPCursorTypeEastPanning = 21, NPCursorTypeNorthPanning = 22, NPCursorTypeNorthEastPanning = 23, NPCursorTypeNorthWestPanning = 24, NPCursorTypeSouthPanning = 25, NPCursorTypeSouthEastPanning = 26, NPCursorTypeSouthWestPanning = 27, NPCursorTypeWestPanning = 28, NPCursorTypeMove = 29, NPCursorTypeVerticalText = 30, NPCursorTypeCell = 31, NPCursorTypeContextMenu = 32, NPCursorTypeAlias = 33, NPCursorTypeProgress = 34, NPCursorTypeNoDrop = 35, NPCursorTypeCopy = 36, NPCursorTypeNone = 37, NPCursorTypeNotAllowed = 38, NPCursorTypeZoomIn = 39, NPCursorTypeZoomOut = 40 } NPCursorType; // Temporary SetCursor API. typedef NPError (*NPSetCursorPtr)( NPP instance, NPCursorType type); /* unique id for each font */ typedef int NPFontID; typedef enum { NPCharsetAnsi = 0, NPCharsetDefault = 1, NPCharsetSymbol = 2, NPCharsetMac = 77, NPCharsetShiftJIS = 128, NPCharsetHangul = 129, NPCharsetJohab = 130, NPCharsetGB2312 =134, NPCharsetChineseBIG5 = 136, NPCharsetGreek = 161, NPCharsetTurkish = 162, NPCharsetVietnamese = 163, NPCharsetHebrew = 177, NPCharsetArabic = 178, NPCharsetBaltic = 186, NPCharsetRussian = 204, NPCharsetThai = 222, NPCharsetEastEurope = 238, NPCharsetOEM = 255 } NPCharset; typedef enum { NPPitchDefault, NPPitchFixed } NPPitch; typedef enum { NPFamilyDefault, NPFamilyRoman, NPFamilyScript } NPFamily; typedef struct _NPFontDescription { const char* face; int weight; bool italic; NPPitch pitch; NPFamily family; NPCharset charset; } NPFontDescription; // Return a font which best matches the given properties. typedef NPError (*NPMatchFontWithFallbackPtr) ( NPP instance, const NPFontDescription* description, NPFontID* id); // Loads a specified font table for the given font. // table: the table in *big-endian* format, or 0 for the whole font file. // output: a buffer of size output_length that gets the data. can be 0, in // which case output_length will be set to the required size in bytes. // output_length: size of output, if it's not 0. typedef NPError (*GetFontTablePtr) ( NPP instance, NPFontID id, uint32_t table, void* output, size_t* output_length); // Destroys a font. typedef NPError (*NPDestroyFontPtr) ( NPP instance, NPFontID id); typedef struct _NPFontExtensions { NPMatchFontWithFallbackPtr matchFontWithFallback; GetFontTablePtr getFontTable; NPDestroyFontPtr destroyFont; } NPFontExtensions; typedef NPFontExtensions* (*NPGetFontExtensionsPtr)( NPP instance); /* Pepper extensions */ struct NPNExtensions { /* Device interface acquisition */ NPAcquireDevicePtr acquireDevice; /* Find */ NPNumberOfFindResultsChangedPtr numberOfFindResultsChanged; NPSelectedFindResultChangedPtr selectedFindResultChanged; /* File I/O extensions */ NPChooseFilePtr chooseFile; /* Widget */ NPGetWidgetExtensionsPtr getWidgetExtensions; /* Cursor */ NPSetCursorPtr setCursor; /* Font */ NPGetFontExtensionsPtr getFontExtensions; }; /* 3D -----------------------------------------------------------------------*/ #define NPPepper3DDevice 2 typedef struct _NPDeviceContext3DConfig { int32_t commandBufferSize; } NPDeviceContext3DConfig; typedef enum _NPDeviceContext3DError { // No error has ocurred. NPDeviceContext3DError_NoError, // The size of a command was invalid. NPDeviceContext3DError_InvalidSize, // An offset was out of bounds. NPDeviceContext3DError_OutOfBounds, // A command was not recognized. NPDeviceContext3DError_UnknownCommand, // The arguments to a command were invalid. NPDeviceContext3DError_InvalidArguments, // The 3D context was lost, for example due to a power management event. The // context must be destroyed and a new one created. NPDeviceContext3DError_LostContext, // Any other error. NPDeviceContext3DError_GenericError } NPDeviceContext3DError; typedef struct _NPDeviceContext3D NPDeviceContext3D; typedef void (*NPDeviceContext3DRepaintPtr)(NPP npp, NPDeviceContext3D* context); // TODO(apatrick): this need not be exposed when we switch over to the new // device API. It's layout can also be implementation dependent. typedef struct _NPDeviceContext3D { void* reserved; // If true, then a flush will only complete once the get offset has advanced // on the GPU thread. If false, then the get offset might have changed but // the GPU thread will respond as quickly as possible without guaranteeing // having made any progress in executing pending commands. Set to true // to ensure that progress is made or when flushing in a loop waiting for the // GPU to reach a certain state, for example in advancing beyond a particular // token. Set to false when flushing to query the current state, for example // whether an error has occurred. bool waitForProgress; // Buffer in which commands are stored. void* commandBuffer; int32_t commandBufferSize; // Offset in command buffer reader has reached. Synchronized on flush. int32_t getOffset; // Offset in command buffer writer has reached. Synchronized on flush. int32_t putOffset; // Last processed token. Synchronized on flush. int32_t token; // Callback invoked on the main thread when the context must be repainted. // TODO(apatrick): move this out of the context struct like the rest of the // fields. NPDeviceContext3DRepaintPtr repaintCallback; // Error status. Synchronized on flush. NPDeviceContext3DError error; } NPDeviceContext3D; /* Begin 3D specific portion of experimental device API */ /* Device buffer ID reserved for command buffer */ enum { NP3DCommandBufferId = 0 }; /* 3D attributes */ enum { /* Example GetConfigAttribs attributes. See EGL 1.4 spec. */ /* These may be passed to GetConfigAttribs. */ NP3DAttrib_BufferSize = 0x3020, NP3DAttrib_AlphaSize = 0x3021, NP3DAttrib_BlueSize = 0x3022, NP3DAttrib_GreenSize = 0x3023, NP3DAttrib_RedSize = 0x3024, NP3DAttrib_DepthSize = 0x3025, NP3DAttrib_StencilSize = 0x3026, NP3DAttrib_SurfaceType = 0x3033, /* Example CreateContext attributes. See EGL 1.4 spec. */ /* These may be passed to CreateContext. */ NP3DAttrib_SwapBehavior = 0x3093, NP3DAttrib_MultisampleResolve = 0x3099, /* Size of command buffer in 32-bit entries. */ /* This may be passed to CreateContext as an input or SynchronizeContext as */ /* an output. */ NP3DAttrib_CommandBufferSize = 0x10000000, /* These may be passed to SynchronizeContext. */ /* Offset in command buffer writer has reached. In / out.*/ NP3DAttrib_PutOffset, /* Offset in command buffer reader has reached. Out only. */ NP3DAttrib_GetOffset, /* Last processed token. Out only. */ NP3DAttrib_Token }; /* 3D callbacks */ enum { /* This callback is invoked whenever the plugin must repaint everything. */ /* This might be because the window manager must repaint a window or */ /* the context has been lost, for example a power management event. */ NP3DCallback_Repaint = 1 }; /* Flags for NPConfig3DOutAttrib_SurfaceType */ enum { NP3DSurfaceType_MultisampleResolveBox = 0x0200, NP3DSurfaceType_SwapBehaviorPreserved = 0x0400 }; /* Values for NPConfig3DInAttrib_SwapBehavior */ enum { NP3DSwapBehavior_Preserved = 0x3094, NP3DSwapBehavior_Destroyed = 0x3095 }; /* Values for NPConfig3DInAttrib_MultisampleResolve */ enum { NP3DMultisampleResolve_Default = 0x309A, NP3DMultisampleResolve_Box = 0x309B }; /* End 3D specific API */ /* Audio --------------------------------------------------------------------*/ #define NPPepperAudioDevice 3 /* min & max sample frame count */ typedef enum { NPAudioMinSampleFrameCount = 64, NPAudioMaxSampleFrameCount = 32768 } NPAudioSampleFrameCounts; /* supported sample rates */ typedef enum { NPAudioSampleRate44100Hz = 44100, NPAudioSampleRate48000Hz = 48000, NPAudioSampleRate96000Hz = 96000 } NPAudioSampleRates; /* supported sample formats */ typedef enum { NPAudioSampleTypeInt16 = 0, NPAudioSampleTypeFloat32 = 1 } NPAudioSampleTypes; /* supported channel layouts */ /* there is code that depends on these being the actual number of channels */ typedef enum { NPAudioChannelNone = 0, NPAudioChannelMono = 1, NPAudioChannelStereo = 2, NPAudioChannelThree = 3, NPAudioChannelFour = 4, NPAudioChannelFive = 5, NPAudioChannelFiveOne = 6, NPAudioChannelSeven = 7, NPAudioChannelSevenOne = 8 } NPAudioChannels; /* audio context states */ typedef enum { NPAudioContextStateCallback = 0, NPAudioContextStateUnderrunCounter = 1 } NPAudioContextStates; /* audio context state values */ typedef enum { NPAudioCallbackStop = 0, NPAudioCallbackStart = 1 } NPAudioContextStateValues; /* audio query capabilities */ typedef enum { NPAudioCapabilitySampleRate = 0, NPAudioCapabilitySampleType = 1, NPAudioCapabilitySampleFrameCount = 2, NPAudioCapabilitySampleFrameCount44100Hz = 3, NPAudioCapabilitySampleFrameCount48000Hz = 4, NPAudioCapabilitySampleFrameCount96000Hz = 5, NPAudioCapabilityOutputChannelMap = 6, NPAudioCapabilityInputChannelMap = 7 } NPAudioCapabilities; typedef struct _NPDeviceContextAudio NPDeviceContextAudio; /* user supplied callback function */ typedef void (*NPAudioCallback)(NPDeviceContextAudio *context); typedef struct _NPDeviceContextAudioConfig { int32_t sampleRate; int32_t sampleType; int32_t outputChannelMap; int32_t inputChannelMap; int32_t sampleFrameCount; uint32_t startThread; uint32_t flags; NPAudioCallback callback; void *userData; } NPDeviceContextAudioConfig; struct _NPDeviceContextAudio { NPDeviceContextAudioConfig config; void *outBuffer; void *inBuffer; void *reserved; }; /* Printing related APIs ---------------------------------------------------*/ /* Defines a contiguous range of pages to be printed. Page numbers use a * zero-based index. */ typedef struct _NPPrintPageNumberRange { int32_t firstPageNumber; int32_t lastPageNumber; } NPPrintPageNumberRange; /* Being a print operation. Returns the total number of pages to print at the * given printableArea size and DPI. printableArea is in points (a point is 1/72 * of an inch). The plugin is expected to remember the values of printableArea * and printerDPI for use in subsequent print interface calls. These values * should be cleared in printEnd. */ typedef NPError (*NPPPrintBeginPtr) ( NPP instance, NPRect* printableArea, int32_t printerDPI, int32_t* numPages); /* Returns the required raster dimensions for the given page. */ typedef NPError (*NPPGetRasterDimensionsPtr) ( NPP instance, int32_t pageNumber, int32_t* widthInPixels, int32_t* heightInPixels); /* Prints the specified page This allows the plugin to print a raster output. */ typedef NPError (*NPPPrintPageRasterPtr) ( NPP instance, int32_t pageNumber, NPDeviceContext2D* printSurface); /* Ends the print operation */ typedef NPError (*NPPPrintEndPtr) (NPP instance); /* Prints the specified pages as PDF. The plugin allocates the output buffer * pointed to by pdf_output using the browser-supplied NPN_MemAlloc function. * The caller is expected to free the output buffer upon success.*/ typedef NPError (*NPPrintPagesAsPDFPtr)(NPP instance, NPPrintPageNumberRange* page_ranges, int32_t page_range_count, unsigned char** pdf_output, int32_t* output_size); /* TODO(sanjeevr) : Provide a vector interface for printing. We need to decide * on a vector format that can support embedded fonts. A vector format will * greatly reduce the size of the required output buffer. */ typedef struct _NPPPrintExtensions { NPPPrintBeginPtr printBegin; NPPGetRasterDimensionsPtr getRasterDimensions; NPPPrintPageRasterPtr printPageRaster; NPPPrintEndPtr printEnd; NPPrintPagesAsPDFPtr printPagesAsPDF; } NPPPrintExtensions; /* Returns NULL if the plugin does not support print extensions */ typedef NPPPrintExtensions* (*NPPGetPrintExtensionsPtr)(NPP instance); /* Find ---------------------------------------------------------------------*/ /* Finds the given UTF-8 text starting at the current selection. The number of * results will be updated asynchronously via numberOfFindResultsChanged. Note * that multiple StartFind calls can happen before StopFind is called in the * case of the search term changing. */ typedef NPError (*NPPStartFindPtr) ( NPP instance, const char* text, bool caseSensitive); /* Go to the next/previous result. */ typedef NPError (*NPPSelectFindResultPtr) ( NPP instance, bool forward); /* Tells the plugin that the find operation has stopped, so it should clear * any highlighting. */ typedef NPError (*NPPStopFindPtr) ( NPP instance); typedef struct _NPPFindExtensions { NPPStartFindPtr startFind; NPPSelectFindResultPtr selectFindResult; NPPStopFindPtr stopFind; } NPPFindExtensions; /* Returns NULL if the plugin does not support find extensions. */ typedef NPPFindExtensions* (*NPPGetFindExtensionsPtr)(NPP instance); /* Zooms a plugin to the given factor. If text_only is true, then only the text * should be zoomed. */ typedef NPError (*NPPZoomPtr) ( NPP instance, float factor, bool text_only); typedef NPError (*NPPWidgetPropertyChangedPtr) ( NPP instance, NPWidgetID id, NPWidgetProperty property); /* type of selection */ typedef enum { NPSelectionTypeAny = 0, NPSelectionTypePlainText = 1, NPSelectionTypeHTML = 2 } NPSelectionType; /* Gets the selection. NPERR_GENERIC_ERROR is returned if nothing is selected. * 'type' is both an input and output parameter. The caller can request a * specific type, and if the plugin can't provide it, it will return * NPERR_GENERIC_ERROR. Or the caller can specify NPSelectionTypeAny to let the * plugin pick the best format for the data. The result is returned in a buffer * that's owned by the caller and which is allocated using NPN_MemAlloc. If no * data is available, NPERR_GENERIC_ERROR is returned. */ typedef NPError (*NPPGetSelectionPtr) ( NPP instance, NPSelectionType* type, void** data); typedef struct _NPPExtensions { NPPGetPrintExtensionsPtr getPrintExtensions; NPPGetFindExtensionsPtr getFindExtensions; NPPZoomPtr zoom; NPPWidgetPropertyChangedPtr widgetPropertyChanged; NPPGetSelectionPtr getSelection; } NPPExtensions; #endif /* _NP_EXTENSIONS_H_ */