1 /* Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 2 * Use of this source code is governed by a BSD-style license that can be 3 * found in the LICENSE file. 4 */ 5 6 #ifndef _NP_EXTENSIONS_H_ 7 #define _NP_EXTENSIONS_H_ 8 9 // Use the shorter include path here so that this file can be used in non- 10 // Chromium projects, such as the Native Client SDK. 11 #include "npapi.h" 12 13 #include <stddef.h> // For size_t 14 15 /* 16 * A fake "enum" value for getting browser-implemented Pepper extensions. 17 * The variable returns a pointer to an NPNExtensions structure. */ 18 #define NPNVPepperExtensions ((NPNVariable) 4000) 19 20 /* 21 * A fake "enum" value for getting plugin-implemented Pepper extensions. 22 * The variable returns a pointer to an NPPExtensions structure. */ 23 #define NPPVPepperExtensions ((NPPVariable) 4001) 24 25 typedef void NPDeviceConfig; 26 typedef void NPDeviceContext; 27 typedef void NPUserData; 28 29 /* unique id for each device interface */ 30 typedef int32_t NPDeviceID; 31 32 /* Events -------------------------------------------------------------------*/ 33 34 typedef enum { 35 NPMouseButton_None = -1, 36 NPMouseButton_Left = 0, 37 NPMouseButton_Middle = 1, 38 NPMouseButton_Right = 2 39 } NPMouseButtons; 40 41 typedef enum { 42 NPEventType_Undefined = -1, 43 NPEventType_MouseDown = 0, 44 NPEventType_MouseUp = 1, 45 NPEventType_MouseMove = 2, 46 NPEventType_MouseEnter = 3, 47 NPEventType_MouseLeave = 4, 48 NPEventType_MouseWheel = 5, 49 NPEventType_RawKeyDown = 6, 50 NPEventType_KeyDown = 7, 51 NPEventType_KeyUp = 8, 52 NPEventType_Char = 9, 53 NPEventType_Minimize = 10, 54 NPEventType_Focus = 11, 55 NPEventType_Device = 12 56 } NPEventTypes; 57 58 typedef enum { 59 NPEventModifier_ShiftKey = 1 << 0, 60 NPEventModifier_ControlKey = 1 << 1, 61 NPEventModifier_AltKey = 1 << 2, 62 NPEventModifier_MetaKey = 1 << 3, 63 NPEventModifier_IsKeyPad = 1 << 4, 64 NPEventModifier_IsAutoRepeat = 1 << 5, 65 NPEventModifier_LeftButtonDown = 1 << 6, 66 NPEventModifier_MiddleButtonDown = 1 << 7, 67 NPEventModifier_RightButtonDown = 1 << 8 68 } NPEventModifiers; 69 70 typedef struct _NPKeyEvent 71 { 72 uint32_t modifier; 73 uint32_t normalizedKeyCode; 74 } NPKeyEvent; 75 76 typedef struct _NPCharacterEvent 77 { 78 uint32_t modifier; 79 uint16_t text[4]; 80 uint16_t unmodifiedText[4]; 81 } NPCharacterEvent; 82 83 typedef struct _NPMouseEvent 84 { 85 uint32_t modifier; 86 int32_t button; 87 int32_t x; 88 int32_t y; 89 int32_t clickCount; 90 } NPMouseEvent; 91 92 typedef struct _NPMouseWheelEvent 93 { 94 uint32_t modifier; 95 float deltaX; 96 float deltaY; 97 float wheelTicksX; 98 float wheelTicksY; 99 uint32_t scrollByPage; 100 } NPMouseWheelEvent; 101 102 typedef struct _NPDeviceEvent { 103 uint32_t device_uid; 104 uint32_t subtype; 105 /* uint8_t generic[0]; */ 106 } NPDeviceEvent; 107 108 typedef struct _NPMinimizeEvent { 109 int32_t value; 110 } NPMinimizeEvent; 111 112 typedef struct _NPFocusEvent { 113 int32_t value; 114 } NPFocusEvent; 115 116 typedef struct _NPPepperEvent 117 { 118 uint32_t size; 119 int32_t type; 120 double timeStampSeconds; 121 union { 122 NPKeyEvent key; 123 NPCharacterEvent character; 124 NPMouseEvent mouse; 125 NPMouseWheelEvent wheel; 126 NPMinimizeEvent minimize; 127 NPFocusEvent focus; 128 NPDeviceEvent device; 129 } u; 130 } NPPepperEvent; 131 132 /* 2D -----------------------------------------------------------------------*/ 133 134 #define NPPepper2DDevice 1 135 136 typedef struct _NPDeviceContext2DConfig { 137 } NPDeviceContext2DConfig; 138 139 typedef struct _NPDeviceContext2D 140 { 141 /* Internal value used by the browser to identify this device. */ 142 void* reserved; 143 144 /* A pointer to the pixel data. This data is 8-bit values in BGRA order in 145 * memory. Each row will start |stride| bytes after the previous one. 146 * 147 * THIS DATA USES PREMULTIPLIED ALPHA. This means that each color channel has 148 * been multiplied with the corresponding alpha, which makes compositing 149 * easier. If any color channels have a value greater than the alpha value, 150 * you'll likely get crazy colors and weird artifacts. */ 151 void* region; 152 153 /* Length of each row of pixels in bytes. This may be larger than width * 4 154 * if there is padding at the end of each row to help with alignment. */ 155 int32_t stride; 156 157 /* The dirty region that the plugin has painted into the buffer. This 158 * will be initialized to the size of the plugin image in 159 * initializeContextPtr. The plugin can change the values to only 160 * update portions of the image. */ 161 struct { 162 int32_t left; 163 int32_t top; 164 int32_t right; 165 int32_t bottom; 166 } dirty; 167 } NPDeviceContext2D; 168 169 typedef struct _NPDeviceBuffer { 170 void* ptr; 171 size_t size; 172 } NPDeviceBuffer; 173 174 /* completion callback for flush device */ 175 typedef void (*NPDeviceFlushContextCallbackPtr)( 176 NPP instance, 177 NPDeviceContext* context, 178 NPError err, 179 NPUserData* userData); 180 181 /* query single capabilities of device */ 182 typedef NPError ( 183 *NPDeviceQueryCapabilityPtr)(NPP instance, 184 int32_t capability, 185 int32_t *value); 186 /* query config (configuration == a set of capabilities) */ 187 typedef NPError ( 188 *NPDeviceQueryConfigPtr)(NPP instance, 189 const NPDeviceConfig* request, 190 NPDeviceConfig* obtain); 191 /* device initialization */ 192 typedef NPError (*NPDeviceInitializeContextPtr)( 193 NPP instance, 194 const NPDeviceConfig* config, 195 NPDeviceContext* context); 196 /* peek at device state */ 197 typedef NPError (*NPDeviceGetStateContextPtr) ( 198 NPP instance, 199 NPDeviceContext* context, 200 int32_t state, 201 intptr_t* value); 202 /* poke device state */ 203 typedef NPError (*NPDeviceSetStateContextPtr) ( 204 NPP instance, 205 NPDeviceContext* context, 206 int32_t state, 207 intptr_t value); 208 /* flush context, if callback, userData are NULL */ 209 /* this becomes a blocking call */ 210 typedef NPError (*NPDeviceFlushContextPtr)( 211 NPP instance, 212 NPDeviceContext* context, 213 NPDeviceFlushContextCallbackPtr callback, 214 void* userData); 215 /* destroy device context. Application responsible for */ 216 /* freeing context, if applicable */ 217 typedef NPError (*NPDeviceDestroyContextPtr)( 218 NPP instance, 219 NPDeviceContext* context); 220 /* Create a buffer associated with a particular context. The usage of the */ 221 /* buffer is device specific. The lifetime of the buffer is scoped with the */ 222 /* lifetime of the context. */ 223 typedef NPError (*NPDeviceCreateBufferPtr)( 224 NPP instance, 225 NPDeviceContext* context, 226 size_t size, 227 int32_t* id); 228 /* Destroy a buffer associated with a particular context. */ 229 typedef NPError (*NPDeviceDestroyBufferPtr)( 230 NPP instance, 231 NPDeviceContext* context, 232 int32_t id); 233 /* Map a buffer id to its address. */ 234 typedef NPError (*NPDeviceMapBufferPtr)( 235 NPP instance, 236 NPDeviceContext* context, 237 int32_t id, 238 NPDeviceBuffer* buffer); 239 240 241 /* forward decl typdef structs */ 242 typedef struct NPDevice NPDevice; 243 typedef struct NPNExtensions NPNExtensions; 244 245 // DEPRECATED: this typedef is just for the NaCl code until they switch to NPNExtensions. 246 // PLEASE REMOVE THIS WHEN THE NACL CODE IS UPDATED. 247 typedef struct NPNExtensions NPExtensions; 248 249 250 /* New experimental device API. */ 251 252 /* Mode for calls to NPDeviceSynchronizeContext. */ 253 typedef enum { 254 /* Get or set locally cached state without synchronizing or communicating */ 255 /* with the service process (or thread). */ 256 NPDeviceSynchronizationMode_Cached, 257 258 /* Exchanges state with service process (or thread). Does not wait for any */ 259 /* progress before returning. */ 260 NPDeviceSynchronizationMode_Immediate, 261 262 /* Exchanges state with service process (or thread). Blocks caller until */ 263 /* further progress can be made. */ 264 NPDeviceSynchronizationMode_Flush 265 } NPDeviceSynchronizationMode; 266 267 /* Get the number of configs supported by a given device. */ 268 typedef NPError (*NPDeviceGetNumConfigsPtr)(NPP instance, 269 int32_t* numConfigs); 270 271 /* Get attribute values from a config. NPDeviceGetConfigs might return */ 272 /* multiple configs. This function can be used to examine them to */ 273 /* find the most suitable. For example, NPDeviceGetConfigs might return one */ 274 /* config with antialiasing enabled and one without. This can be determined */ 275 /* using this function. */ 276 /* Inputs: */ 277 /* config: The config index to extract the attributes from. */ 278 /* attribList: Array of input config attribute / value pairs */ 279 /* terminated with NPAttrib_End. */ 280 /* Outputs: */ 281 /* attribList: The values paired up with each attribute are filled in */ 282 /* on return. */ 283 typedef NPError (*NPDeviceGetConfigAttribsPtr)(NPP instance, 284 int32_t config, 285 int32_t* attribList); 286 287 /* Create a device context based on a particular device configuration and a */ 288 /* list config input attributes. */ 289 /* Inputs: */ 290 /* config: The device configuration to use. */ 291 /* attribList: NULL or an array of context specific attribute / value */ 292 /* pairs terminated with NPAttrib_End. */ 293 /* Outputs: */ 294 /* context: The created context. */ 295 typedef NPError (*NPDeviceCreateContextPtr)(NPP instance, 296 int32_t config, 297 const int32_t* attribList, 298 NPDeviceContext** context); 299 300 /* Destroy a context. */ 301 /* Inputs: */ 302 /* context: The context to destroy. */ 303 /*typedef NPError (*NPDestroyContext)(NPP instance, */ 304 /* NPDeviceContext* context); */ 305 306 /* This type should be cast to the type associated with the particular */ 307 /* callback type */ 308 typedef void (*NPDeviceGenericCallbackPtr)(void); 309 310 /* Register a callback with a context. Callbacks are never invoked after the */ 311 /* associated context has been destroyed. The semantics of the particular */ 312 /* callback type determine which thread the callback is invoked on. It might */ 313 /* be the plugin thread, the thread RegisterCallback is invoked on or a */ 314 /* special thread created for servicing callbacks, such as an audio thread */ 315 /* Inputs: */ 316 /* callbackType: The device specific callback type */ 317 /* callback: The callback to invoke. The signature varies by type. Use */ 318 /* NULL to unregister the callback for a particular type. */ 319 /* callbackData: A value that is passed to the callback function. Other */ 320 /* callback arguments vary by type. */ 321 typedef NPError (*NPDeviceRegisterCallbackPtr)( 322 NPP instance, 323 NPDeviceContext* context, 324 int32_t callbackType, 325 NPDeviceGenericCallbackPtr callback, 326 void* callbackData); 327 328 /* Callback for NPDeviceSynchronizeContext. */ 329 /* Inputs: */ 330 /* instance: The associated plugin instance. */ 331 /* context: The context that was flushed. */ 332 /* error: Indicates success of flush operation. */ 333 /* data: The completion callback data that was passed to */ 334 /* NPDeviceSynchronizeContext. */ 335 typedef void (*NPDeviceSynchronizeContextCallbackPtr)( 336 NPP instance, 337 NPDeviceContext* context, 338 NPError error, 339 void* data); 340 341 /* Synchronize the state of a device context. Takes lists of input and output */ 342 /* attributes. Generally, the input attributes are copied into the context */ 343 /* and the output attributes are filled in the state of the context either */ 344 /* after (before) the synchronization depending on whether it is synchronous */ 345 /* (asynchronous). The get the state of the context after an asynchronous */ 346 /* synchronization, call this function a second time with Cached mode after */ 347 /* the callback has been invoked. */ 348 /* Inputs: */ 349 /* context: The context to synchronize. */ 350 /* mode: The type of synchronization to perform. */ 351 /* inputAttribList: NULL or an array of input synchronization attribute / */ 352 /* value pairs terminated with NPAttrib_End. */ 353 /* outputAttribList: NULL or an array of output synchronization */ 354 /* attributes / uninitialized value pairs terminated */ 355 /* with NPAttrib_End. */ 356 /* callback: NULL for synchronous operation or completion callback function */ 357 /* for asynchronous operation. */ 358 /* callbackData: Argument passed to callback function. */ 359 /* Outputs: */ 360 /* outputAttribList: The values paired up with each attribute are filled */ 361 /* in on return for synchronous operation. */ 362 typedef NPError (*NPDeviceSynchronizeContextPtr)( 363 NPP instance, 364 NPDeviceContext* context, 365 NPDeviceSynchronizationMode mode, 366 const int32_t* inputAttribList, 367 int32_t* outputAttribList, 368 NPDeviceSynchronizeContextCallbackPtr callback, 369 void* callbackData); 370 371 /* All attributes shared between devices, with the exception of */ 372 /* NPDeviceContextAttrib_End, have bit 31 set. Device specific attributes */ 373 /* have the bit clear. */ 374 enum { 375 /* Used to terminate arrays of attribute / value pairs. */ 376 NPAttrib_End = 0, 377 378 /* Error status of context. Non-zero means error. Shared by all devices, */ 379 /* though error values are device specific. */ 380 NPAttrib_Error = 0x80000000 381 }; 382 383 /* generic device interface */ 384 struct NPDevice { 385 NPDeviceQueryCapabilityPtr queryCapability; 386 NPDeviceQueryConfigPtr queryConfig; 387 NPDeviceInitializeContextPtr initializeContext; 388 NPDeviceSetStateContextPtr setStateContext; 389 NPDeviceGetStateContextPtr getStateContext; 390 NPDeviceFlushContextPtr flushContext; 391 NPDeviceDestroyContextPtr destroyContext; 392 NPDeviceCreateBufferPtr createBuffer; 393 NPDeviceDestroyBufferPtr destroyBuffer; 394 NPDeviceMapBufferPtr mapBuffer; 395 396 /* Experimental device API */ 397 NPDeviceGetNumConfigsPtr getNumConfigs; 398 NPDeviceGetConfigAttribsPtr getConfigAttribs; 399 NPDeviceCreateContextPtr createContext; 400 /* NPDeviceDestroyContextPtr destroyContext; */ 401 NPDeviceRegisterCallbackPtr registerCallback; 402 NPDeviceSynchronizeContextPtr synchronizeContext; 403 /* NPDeviceCreateBufferPtr createBuffer; */ 404 /* NPDeviceDestroyBufferPtr destroyBuffer; */ 405 /* NPDeviceMapBufferPtr mapBuffer; */ 406 }; 407 408 /* returns NULL if deviceID unavailable / unrecognized */ 409 typedef NPDevice* (*NPAcquireDevicePtr)( 410 NPP instance, 411 NPDeviceID device); 412 413 /* Updates the number of find results for the current search term. If 414 * there are no matches 0 should be passed in. Only when the plugin has 415 * finished searching should it pass in the final count with finalResult set to 416 * true. */ 417 typedef void (*NPNumberOfFindResultsChangedPtr)( 418 NPP instance, 419 int total, 420 bool finalResult); 421 422 /* Updates the index of the currently selected search item. */ 423 typedef void (*NPSelectedFindResultChangedPtr)( 424 NPP instance, 425 int index); 426 427 /* Theming -----------------------------------------------------------------*/ 428 typedef int32_t NPWidgetID; 429 430 typedef enum { 431 NPWidgetTypeScrollbar = 0 432 } NPWidgetType; 433 434 typedef struct _NPScrollbarCreateParams { 435 bool vertical; 436 } NPScrollbarCreateParams; 437 438 typedef struct _NPRect32 439 { 440 uint32_t top; 441 uint32_t left; 442 uint32_t bottom; 443 uint32_t right; 444 } NPRect32; 445 446 typedef struct _NPScrollbarTickMarks { 447 uint32_t count; 448 NPRect32* tickmarks; 449 } NPScrollbarTickMarks; 450 451 typedef enum { 452 NPWidgetPropertyLocation = 0, // variable is NPRect*. 453 NPWidgetPropertyDirtyRect = 1, // Get only. variable is NPRec*. 454 NPWidgetPropertyScrollbarThickness = 2, // Get only. variable is int32_t*. 455 NPWidgetPropertyScrollbarValue = 3, // variable is int32_t*. 456 NPWidgetPropertyScrollbarDocumentSize = 4, // Set only. variable is int32_t*. 457 // Set only. variable is NPScrollbarTickMarks*. 458 NPWidgetPropertyScrollbarTickMarks = 5, 459 // Set only. variable is bool* (true for forward, false for backward). 460 NPWidgetPropertyScrollbarScrollByLine = 6, 461 // Set only. variable is bool* (true for forward, false for backward). 462 NPWidgetPropertyScrollbarScrollByPage = 7, 463 // Set only. variable is bool* (true for forward, false for backward). 464 NPWidgetPropertyScrollbarScrollByDocument = 8, 465 // Set only. variable is int32_t* (positive forward, negative backward). 466 NPWidgetPropertyScrollbarScrollByPixels = 9 467 } NPWidgetProperty; 468 469 // Creates a widget. If it returns NPERR_NO_ERROR then id will contain a unique 470 // identifer for the widget that's used for the next functions. 471 typedef NPError (*NPCreateWidgetPtr) ( 472 NPP instance, 473 NPWidgetType type, 474 void* params, // Widget specific. 475 NPWidgetID* id); 476 477 // Destroys a widget. 478 typedef NPError (*NPDestroyWidgetPtr) ( 479 NPP instance, 480 NPWidgetID id); 481 482 // Paint the dirty rectangle of the given widget into context. 483 typedef NPError (*NPPaintWidgetPtr) ( 484 NPP instance, 485 NPWidgetID id, 486 NPDeviceContext2D* context, 487 NPRect* dirty); 488 489 // Pass in a pepper event to a plugin. It'll return true iff it uses it. 490 typedef bool (*NPHandleWidgetEventPtr) ( 491 NPP instance, 492 NPWidgetID id, 493 NPPepperEvent* event); 494 495 // Gets a property of the widget. "value" varies depending on the variable. 496 typedef NPError (*NPGetWidgetPropertyPtr) ( 497 NPP instance, 498 NPWidgetID id, 499 NPWidgetProperty property, 500 void* value); 501 502 // Sets a property of the widget. 503 typedef NPError (*NPSetWidgetPropertyPtr) ( 504 NPP instance, 505 NPWidgetID id, 506 NPWidgetProperty property, 507 void* value); 508 509 typedef struct _NPWidgetExtensions { 510 NPCreateWidgetPtr createWidget; 511 NPDestroyWidgetPtr destroyWidget; 512 NPPaintWidgetPtr paintWidget; 513 NPHandleWidgetEventPtr handleWidgetEvent; 514 NPGetWidgetPropertyPtr getWidgetProperty; 515 NPSetWidgetPropertyPtr setWidgetProperty; 516 } NPWidgetExtensions; 517 518 typedef NPWidgetExtensions* (*NPGetWidgetExtensionsPtr)( 519 NPP instance); 520 521 522 /* Supports opening files anywhere on the system after prompting the user to 523 * pick one. 524 * 525 * This API is asynchronous. It will return immediately and the user will be 526 * prompted in parallel to pick a file. The plugin may continue to receive 527 * events while the open file dialog is up, and may continue to paint. Plugins 528 * may want to ignore input events between the call and the callback to avoid 529 * reentrant behavior. If the return value is not NPERR_NO_ERROR, the callback 530 * will NOT be executed. 531 * 532 * It is an error to call BrowseForFile before a previous call has executed 533 * the callback. 534 * 535 * Setting the flags to "Open" requires that the file exist to allow picking. 536 * Setting the flags to "Save" allows selecting nonexistant files (which will 537 * then be created), and will prompt the user if they want to overwrite an 538 * existing file if it exists. 539 * 540 * The plugin may specify a comma-separated list of possible mime types in 541 * the "extensions" parameter. If no extensions are specified, the dialog box 542 * will default to allowing all extensions. The first extension in the list 543 * will be the default. 544 * 545 * TODO(brettw) On Windows the extensions traditionally include a text 546 * description with the extension in the popup, do we want to allow this? 547 * We should probably also allow the ability to put "All files" in the 548 * list on Windows. 549 * 550 * Once the user has picked a file or has canceled the dialog box, the given 551 * callback will be called with the results of the operation and the passed in 552 * "user data" pointer. If the user successfully picked a file, the filename 553 * will be non-NULL and will contain a pointer to an array of strings, one for 554 * each file picked (the first file will be file_paths[0]). This buffer will 555 * become invalid as soon as the call completes, so it is the plugin's 556 * responsibility to copy the filename(sp if it needs future access to them. 557 * A NULL file_paths in the callback means the user canceled the dialog box. 558 * 559 * The filename will be in UTF-8. It may not actually correspond to the actual 560 * file on disk on a Linux system, because we'll do our best to convert it from 561 * the filesystem's locale to UTF-8. Instead, the string will be appropriate for 562 * displaying to the user which file they picked. 563 * */ 564 typedef enum { 565 NPChooseFile_Open = 1, 566 NPChooseFile_OpenMultiple = 2, 567 NPChooseFile_Save = 3 568 } NPChooseFileMode; 569 typedef void (*NPChooseFileCallback)(const char** filePaths, 570 uint32_t pathCount, 571 void* userData); 572 typedef NPError (*NPChooseFilePtr)( 573 NPP instance, 574 const char* mimeTypes, 575 NPChooseFileMode mode, 576 NPChooseFileCallback callback, 577 void* userData); 578 579 typedef enum { 580 NPCursorTypePointer = 0, 581 NPCursorTypeCross = 1, 582 NPCursorTypeHand = 2, 583 NPCursorTypeIBeam = 3, 584 NPCursorTypeWait = 4, 585 NPCursorTypeHelp = 5, 586 NPCursorTypeEastResize = 6, 587 NPCursorTypeNorthResize = 7, 588 NPCursorTypeNorthEastResize = 8, 589 NPCursorTypeNorthWestResize = 9, 590 NPCursorTypeSouthResize = 10, 591 NPCursorTypeSouthEastResize = 11, 592 NPCursorTypeSouthWestResize = 12, 593 NPCursorTypeWestResize = 13, 594 NPCursorTypeNorthSouthResize = 14, 595 NPCursorTypeEastWestResize = 15, 596 NPCursorTypeNorthEastSouthWestResize = 16, 597 NPCursorTypeNorthWestSouthEastResize = 17, 598 NPCursorTypeColumnResize = 18, 599 NPCursorTypeRowResize = 19, 600 NPCursorTypeMiddlePanning = 20, 601 NPCursorTypeEastPanning = 21, 602 NPCursorTypeNorthPanning = 22, 603 NPCursorTypeNorthEastPanning = 23, 604 NPCursorTypeNorthWestPanning = 24, 605 NPCursorTypeSouthPanning = 25, 606 NPCursorTypeSouthEastPanning = 26, 607 NPCursorTypeSouthWestPanning = 27, 608 NPCursorTypeWestPanning = 28, 609 NPCursorTypeMove = 29, 610 NPCursorTypeVerticalText = 30, 611 NPCursorTypeCell = 31, 612 NPCursorTypeContextMenu = 32, 613 NPCursorTypeAlias = 33, 614 NPCursorTypeProgress = 34, 615 NPCursorTypeNoDrop = 35, 616 NPCursorTypeCopy = 36, 617 NPCursorTypeNone = 37, 618 NPCursorTypeNotAllowed = 38, 619 NPCursorTypeZoomIn = 39, 620 NPCursorTypeZoomOut = 40 621 } NPCursorType; 622 623 // Temporary SetCursor API. 624 typedef NPError (*NPSetCursorPtr)( 625 NPP instance, 626 NPCursorType type); 627 628 /* unique id for each font */ 629 typedef int NPFontID; 630 631 typedef enum { 632 NPCharsetAnsi = 0, 633 NPCharsetDefault = 1, 634 NPCharsetSymbol = 2, 635 NPCharsetMac = 77, 636 NPCharsetShiftJIS = 128, 637 NPCharsetHangul = 129, 638 NPCharsetJohab = 130, 639 NPCharsetGB2312 =134, 640 NPCharsetChineseBIG5 = 136, 641 NPCharsetGreek = 161, 642 NPCharsetTurkish = 162, 643 NPCharsetVietnamese = 163, 644 NPCharsetHebrew = 177, 645 NPCharsetArabic = 178, 646 NPCharsetBaltic = 186, 647 NPCharsetRussian = 204, 648 NPCharsetThai = 222, 649 NPCharsetEastEurope = 238, 650 NPCharsetOEM = 255 651 } NPCharset; 652 653 typedef enum { 654 NPPitchDefault, 655 NPPitchFixed 656 } NPPitch; 657 658 typedef enum { 659 NPFamilyDefault, 660 NPFamilyRoman, 661 NPFamilyScript 662 } NPFamily; 663 664 typedef struct _NPFontDescription { 665 const char* face; 666 int weight; 667 bool italic; 668 NPPitch pitch; 669 NPFamily family; 670 NPCharset charset; 671 } NPFontDescription; 672 673 // Return a font which best matches the given properties. 674 typedef NPError (*NPMatchFontWithFallbackPtr) ( 675 NPP instance, 676 const NPFontDescription* description, 677 NPFontID* id); 678 679 // Loads a specified font table for the given font. 680 // table: the table in *big-endian* format, or 0 for the whole font file. 681 // output: a buffer of size output_length that gets the data. can be 0, in 682 // which case output_length will be set to the required size in bytes. 683 // output_length: size of output, if it's not 0. 684 typedef NPError (*GetFontTablePtr) ( 685 NPP instance, 686 NPFontID id, 687 uint32_t table, 688 void* output, 689 size_t* output_length); 690 691 // Destroys a font. 692 typedef NPError (*NPDestroyFontPtr) ( 693 NPP instance, 694 NPFontID id); 695 696 typedef struct _NPFontExtensions { 697 NPMatchFontWithFallbackPtr matchFontWithFallback; 698 GetFontTablePtr getFontTable; 699 NPDestroyFontPtr destroyFont; 700 } NPFontExtensions; 701 702 typedef NPFontExtensions* (*NPGetFontExtensionsPtr)( 703 NPP instance); 704 705 /* Pepper extensions */ 706 struct NPNExtensions { 707 /* Device interface acquisition */ 708 NPAcquireDevicePtr acquireDevice; 709 /* Find */ 710 NPNumberOfFindResultsChangedPtr numberOfFindResultsChanged; 711 NPSelectedFindResultChangedPtr selectedFindResultChanged; 712 /* File I/O extensions */ 713 NPChooseFilePtr chooseFile; 714 /* Widget */ 715 NPGetWidgetExtensionsPtr getWidgetExtensions; 716 /* Cursor */ 717 NPSetCursorPtr setCursor; 718 /* Font */ 719 NPGetFontExtensionsPtr getFontExtensions; 720 }; 721 722 /* 3D -----------------------------------------------------------------------*/ 723 724 #define NPPepper3DDevice 2 725 726 typedef struct _NPDeviceContext3DConfig { 727 int32_t commandBufferSize; 728 } NPDeviceContext3DConfig; 729 730 typedef enum _NPDeviceContext3DError { 731 // No error has ocurred. 732 NPDeviceContext3DError_NoError, 733 734 // The size of a command was invalid. 735 NPDeviceContext3DError_InvalidSize, 736 737 // An offset was out of bounds. 738 NPDeviceContext3DError_OutOfBounds, 739 740 // A command was not recognized. 741 NPDeviceContext3DError_UnknownCommand, 742 743 // The arguments to a command were invalid. 744 NPDeviceContext3DError_InvalidArguments, 745 746 // The 3D context was lost, for example due to a power management event. The 747 // context must be destroyed and a new one created. 748 NPDeviceContext3DError_LostContext, 749 750 // Any other error. 751 NPDeviceContext3DError_GenericError 752 } NPDeviceContext3DError; 753 754 typedef struct _NPDeviceContext3D NPDeviceContext3D; 755 756 typedef void (*NPDeviceContext3DRepaintPtr)(NPP npp, 757 NPDeviceContext3D* context); 758 759 // TODO(apatrick): this need not be exposed when we switch over to the new 760 // device API. It's layout can also be implementation dependent. 761 typedef struct _NPDeviceContext3D 762 { 763 void* reserved; 764 765 // If true, then a flush will only complete once the get offset has advanced 766 // on the GPU thread. If false, then the get offset might have changed but 767 // the GPU thread will respond as quickly as possible without guaranteeing 768 // having made any progress in executing pending commands. Set to true 769 // to ensure that progress is made or when flushing in a loop waiting for the 770 // GPU to reach a certain state, for example in advancing beyond a particular 771 // token. Set to false when flushing to query the current state, for example 772 // whether an error has occurred. 773 bool waitForProgress; 774 775 // Buffer in which commands are stored. 776 void* commandBuffer; 777 int32_t commandBufferSize; 778 779 // Offset in command buffer reader has reached. Synchronized on flush. 780 int32_t getOffset; 781 782 // Offset in command buffer writer has reached. Synchronized on flush. 783 int32_t putOffset; 784 785 // Last processed token. Synchronized on flush. 786 int32_t token; 787 788 // Callback invoked on the main thread when the context must be repainted. 789 // TODO(apatrick): move this out of the context struct like the rest of the 790 // fields. 791 NPDeviceContext3DRepaintPtr repaintCallback; 792 793 // Error status. Synchronized on flush. 794 NPDeviceContext3DError error; 795 } NPDeviceContext3D; 796 797 798 /* Begin 3D specific portion of experimental device API */ 799 800 /* Device buffer ID reserved for command buffer */ 801 enum { 802 NP3DCommandBufferId = 0 803 }; 804 805 /* 3D attributes */ 806 enum { 807 /* Example GetConfigAttribs attributes. See EGL 1.4 spec. */ 808 /* These may be passed to GetConfigAttribs. */ 809 NP3DAttrib_BufferSize = 0x3020, 810 NP3DAttrib_AlphaSize = 0x3021, 811 NP3DAttrib_BlueSize = 0x3022, 812 NP3DAttrib_GreenSize = 0x3023, 813 NP3DAttrib_RedSize = 0x3024, 814 NP3DAttrib_DepthSize = 0x3025, 815 NP3DAttrib_StencilSize = 0x3026, 816 NP3DAttrib_SurfaceType = 0x3033, 817 818 /* Example CreateContext attributes. See EGL 1.4 spec. */ 819 /* These may be passed to CreateContext. */ 820 NP3DAttrib_SwapBehavior = 0x3093, 821 NP3DAttrib_MultisampleResolve = 0x3099, 822 823 /* Size of command buffer in 32-bit entries. */ 824 /* This may be passed to CreateContext as an input or SynchronizeContext as */ 825 /* an output. */ 826 NP3DAttrib_CommandBufferSize = 0x10000000, 827 828 /* These may be passed to SynchronizeContext. */ 829 830 /* Offset in command buffer writer has reached. In / out.*/ 831 NP3DAttrib_PutOffset, 832 833 /* Offset in command buffer reader has reached. Out only. */ 834 NP3DAttrib_GetOffset, 835 836 /* Last processed token. Out only. */ 837 NP3DAttrib_Token 838 }; 839 840 /* 3D callbacks */ 841 enum { 842 /* This callback is invoked whenever the plugin must repaint everything. */ 843 /* This might be because the window manager must repaint a window or */ 844 /* the context has been lost, for example a power management event. */ 845 NP3DCallback_Repaint = 1 846 }; 847 848 /* Flags for NPConfig3DOutAttrib_SurfaceType */ 849 enum { 850 NP3DSurfaceType_MultisampleResolveBox = 0x0200, 851 NP3DSurfaceType_SwapBehaviorPreserved = 0x0400 852 }; 853 854 /* Values for NPConfig3DInAttrib_SwapBehavior */ 855 enum { 856 NP3DSwapBehavior_Preserved = 0x3094, 857 NP3DSwapBehavior_Destroyed = 0x3095 858 }; 859 860 /* Values for NPConfig3DInAttrib_MultisampleResolve */ 861 enum { 862 NP3DMultisampleResolve_Default = 0x309A, 863 NP3DMultisampleResolve_Box = 0x309B 864 }; 865 866 /* End 3D specific API */ 867 868 /* Audio --------------------------------------------------------------------*/ 869 870 #define NPPepperAudioDevice 3 871 872 /* min & max sample frame count */ 873 typedef enum { 874 NPAudioMinSampleFrameCount = 64, 875 NPAudioMaxSampleFrameCount = 32768 876 } NPAudioSampleFrameCounts; 877 878 /* supported sample rates */ 879 typedef enum { 880 NPAudioSampleRate44100Hz = 44100, 881 NPAudioSampleRate48000Hz = 48000, 882 NPAudioSampleRate96000Hz = 96000 883 } NPAudioSampleRates; 884 885 /* supported sample formats */ 886 typedef enum { 887 NPAudioSampleTypeInt16 = 0, 888 NPAudioSampleTypeFloat32 = 1 889 } NPAudioSampleTypes; 890 891 /* supported channel layouts */ 892 /* there is code that depends on these being the actual number of channels */ 893 typedef enum { 894 NPAudioChannelNone = 0, 895 NPAudioChannelMono = 1, 896 NPAudioChannelStereo = 2, 897 NPAudioChannelThree = 3, 898 NPAudioChannelFour = 4, 899 NPAudioChannelFive = 5, 900 NPAudioChannelFiveOne = 6, 901 NPAudioChannelSeven = 7, 902 NPAudioChannelSevenOne = 8 903 } NPAudioChannels; 904 905 /* audio context states */ 906 typedef enum { 907 NPAudioContextStateCallback = 0, 908 NPAudioContextStateUnderrunCounter = 1 909 } NPAudioContextStates; 910 911 /* audio context state values */ 912 typedef enum { 913 NPAudioCallbackStop = 0, 914 NPAudioCallbackStart = 1 915 } NPAudioContextStateValues; 916 917 /* audio query capabilities */ 918 typedef enum { 919 NPAudioCapabilitySampleRate = 0, 920 NPAudioCapabilitySampleType = 1, 921 NPAudioCapabilitySampleFrameCount = 2, 922 NPAudioCapabilitySampleFrameCount44100Hz = 3, 923 NPAudioCapabilitySampleFrameCount48000Hz = 4, 924 NPAudioCapabilitySampleFrameCount96000Hz = 5, 925 NPAudioCapabilityOutputChannelMap = 6, 926 NPAudioCapabilityInputChannelMap = 7 927 } NPAudioCapabilities; 928 929 typedef struct _NPDeviceContextAudio NPDeviceContextAudio; 930 931 /* user supplied callback function */ 932 typedef void (*NPAudioCallback)(NPDeviceContextAudio *context); 933 934 typedef struct _NPDeviceContextAudioConfig { 935 int32_t sampleRate; 936 int32_t sampleType; 937 int32_t outputChannelMap; 938 int32_t inputChannelMap; 939 int32_t sampleFrameCount; 940 uint32_t startThread; 941 uint32_t flags; 942 NPAudioCallback callback; 943 void *userData; 944 } NPDeviceContextAudioConfig; 945 946 struct _NPDeviceContextAudio { 947 NPDeviceContextAudioConfig config; 948 void *outBuffer; 949 void *inBuffer; 950 void *reserved; 951 }; 952 953 /* Printing related APIs ---------------------------------------------------*/ 954 955 /* Defines a contiguous range of pages to be printed. Page numbers use a 956 * zero-based index. */ 957 typedef struct _NPPrintPageNumberRange { 958 int32_t firstPageNumber; 959 int32_t lastPageNumber; 960 } NPPrintPageNumberRange; 961 962 /* Being a print operation. Returns the total number of pages to print at the 963 * given printableArea size and DPI. printableArea is in points (a point is 1/72 964 * of an inch). The plugin is expected to remember the values of printableArea 965 * and printerDPI for use in subsequent print interface calls. These values 966 * should be cleared in printEnd. */ 967 typedef NPError (*NPPPrintBeginPtr) ( 968 NPP instance, 969 NPRect* printableArea, 970 int32_t printerDPI, 971 int32_t* numPages); 972 /* Returns the required raster dimensions for the given page. */ 973 typedef NPError (*NPPGetRasterDimensionsPtr) ( 974 NPP instance, 975 int32_t pageNumber, 976 int32_t* widthInPixels, 977 int32_t* heightInPixels); 978 /* Prints the specified page This allows the plugin to print a raster output. */ 979 typedef NPError (*NPPPrintPageRasterPtr) ( 980 NPP instance, 981 int32_t pageNumber, 982 NPDeviceContext2D* printSurface); 983 /* Ends the print operation */ 984 typedef NPError (*NPPPrintEndPtr) (NPP instance); 985 /* Prints the specified pages as PDF. The plugin allocates the output buffer 986 * pointed to by pdf_output using the browser-supplied NPN_MemAlloc function. 987 * The caller is expected to free the output buffer upon success.*/ 988 typedef NPError (*NPPrintPagesAsPDFPtr)(NPP instance, 989 NPPrintPageNumberRange* page_ranges, 990 int32_t page_range_count, 991 unsigned char** pdf_output, 992 int32_t* output_size); 993 994 995 /* TODO(sanjeevr) : Provide a vector interface for printing. We need to decide 996 * on a vector format that can support embedded fonts. A vector format will 997 * greatly reduce the size of the required output buffer. */ 998 999 typedef struct _NPPPrintExtensions { 1000 NPPPrintBeginPtr printBegin; 1001 NPPGetRasterDimensionsPtr getRasterDimensions; 1002 NPPPrintPageRasterPtr printPageRaster; 1003 NPPPrintEndPtr printEnd; 1004 NPPrintPagesAsPDFPtr printPagesAsPDF; 1005 } NPPPrintExtensions; 1006 1007 /* Returns NULL if the plugin does not support print extensions */ 1008 typedef NPPPrintExtensions* (*NPPGetPrintExtensionsPtr)(NPP instance); 1009 1010 /* Find ---------------------------------------------------------------------*/ 1011 1012 /* Finds the given UTF-8 text starting at the current selection. The number of 1013 * results will be updated asynchronously via numberOfFindResultsChanged. Note 1014 * that multiple StartFind calls can happen before StopFind is called in the 1015 * case of the search term changing. */ 1016 typedef NPError (*NPPStartFindPtr) ( 1017 NPP instance, 1018 const char* text, 1019 bool caseSensitive); 1020 1021 /* Go to the next/previous result. */ 1022 typedef NPError (*NPPSelectFindResultPtr) ( 1023 NPP instance, 1024 bool forward); 1025 1026 /* Tells the plugin that the find operation has stopped, so it should clear 1027 * any highlighting. */ 1028 typedef NPError (*NPPStopFindPtr) ( 1029 NPP instance); 1030 1031 typedef struct _NPPFindExtensions { 1032 NPPStartFindPtr startFind; 1033 NPPSelectFindResultPtr selectFindResult; 1034 NPPStopFindPtr stopFind; 1035 } NPPFindExtensions; 1036 1037 /* Returns NULL if the plugin does not support find extensions. */ 1038 typedef NPPFindExtensions* (*NPPGetFindExtensionsPtr)(NPP instance); 1039 1040 /* Zooms a plugin to the given factor. If text_only is true, then only the text 1041 * should be zoomed. */ 1042 typedef NPError (*NPPZoomPtr) ( 1043 NPP instance, 1044 float factor, 1045 bool text_only); 1046 1047 typedef NPError (*NPPWidgetPropertyChangedPtr) ( 1048 NPP instance, 1049 NPWidgetID id, 1050 NPWidgetProperty property); 1051 1052 /* type of selection */ 1053 typedef enum { 1054 NPSelectionTypeAny = 0, 1055 NPSelectionTypePlainText = 1, 1056 NPSelectionTypeHTML = 2 1057 } NPSelectionType; 1058 1059 /* Gets the selection. NPERR_GENERIC_ERROR is returned if nothing is selected. 1060 * 'type' is both an input and output parameter. The caller can request a 1061 * specific type, and if the plugin can't provide it, it will return 1062 * NPERR_GENERIC_ERROR. Or the caller can specify NPSelectionTypeAny to let the 1063 * plugin pick the best format for the data. The result is returned in a buffer 1064 * that's owned by the caller and which is allocated using NPN_MemAlloc. If no 1065 * data is available, NPERR_GENERIC_ERROR is returned. */ 1066 typedef NPError (*NPPGetSelectionPtr) ( 1067 NPP instance, 1068 NPSelectionType* type, 1069 void** data); 1070 1071 typedef struct _NPPExtensions { 1072 NPPGetPrintExtensionsPtr getPrintExtensions; 1073 NPPGetFindExtensionsPtr getFindExtensions; 1074 NPPZoomPtr zoom; 1075 NPPWidgetPropertyChangedPtr widgetPropertyChanged; 1076 NPPGetSelectionPtr getSelection; 1077 } NPPExtensions; 1078 1079 #endif /* _NP_EXTENSIONS_H_ */ 1080