NPAPI


Netscape Plugin Application Programming Interface (NPAPI) is a deprecated (see below) application programming interface (API) that allows browser extensions to be developed. It was first developed for Netscape browsers, starting in 1995 with Netscape Navigator 2.0, but was subsequently adopted by other browsers. With the advent of HTML5 many software vendors have removed support for this API for security reasons.


In NPAPI architecture, a plugin declares content types (e.g. "audio/mp3") that it can handle. When the browser encounters a content type it cannot handle natively, it loads the appropriate plugin, sets aside space within the browser context for the plugin to render and then streams data to it. The plugin is responsible for rendering the data. The plugin runs in-place within the page, as opposed to older browsers that had to launch an external application to handle unknown content types.


NPAPI requires each plugin to implement and expose approximately 15 functions for initializing, creating, deleting and positioning plugin content. NPAPI also supports scripting, printing, full-screen plugins, windowless plugins and content streaming.




Contents





  • 1 Scripting support

    • 1.1 LiveConnect


    • 1.2 XPConnect

      • 1.2.1 Object connection


      • 1.2.2 Security



    • 1.3 NPRuntime



  • 2 Support/deprecation


  • 3 Plugins


  • 4 Similar technologies

    • 4.1 ActiveX


    • 4.2 PPAPI



  • 5 See also


  • 6 References


  • 7 External links




Scripting support


Scripting is a feature allowing JavaScript code in a web page to interact with the plugin. Various versions of Netscape and then Mozilla supported this feature using different technologies, including LiveConnect, XPConnect, and NPRuntime.



LiveConnect


LiveConnect is a feature of Web browsers that allows Java and JavaScript software to intercommunicate within a Web page. From the Java side it allows an applet to invoke the embedded scripts of a page or to access the built-in JavaScript environment, much as scripts can. Conversely, from the JavaScript side, it allows a script to invoke applet methods, or to access the Java runtime libraries, much as applets can.[1][2]


LiveConnect was used in Netscape 4 to implement scriptability of NPAPI plugins.


The Open Java Interface-dependent implementation of LiveConnect was removed from the Mozilla source code tree in late June 2009 as part of the Mozilla 2 cleanup effort.[3] It is no longer needed with the release of a redesigned Java Runtime Environment from Sun Microsystems. However the old implementation was restored for Gecko 1.9.2, as Apple had yet to port the newer JRE over to Mac OS X.[4]


The Java–JavaScript functionality supported by the redesigned Java Runtime Environment is still called "LiveConnect", despite the Open Java Interface-specific approach having been abandoned.[5] With Netscape 4, NPAPI was extended to allow plugins to be scripted. This extension is called LiveConnect. A plugin could implement a Java class and expose an instance of it. The class could be called from JavaScript and from Java applets running within the page.


The disadvantage of LiveConnect is that it is heavily tied to the version of Java embedded within the Netscape browser. This prevented the browser from using other Java runtimes, and added bloat to the browser download size since it required Java to script plugins. Additionally, LiveConnect is tricky to program: The developer has to define a Java class for the plugin, run it through a specialized Java header compiler and implement the native methods. Handling strings, exceptions and other Java objects from C++ is non-obvious. In addition, LiveConnect uses an earlier and now obsolete application programming interface (API) for invoking native C++ calls from Java, called JRI. The JRI technology has long since been supplanted by JNI.



XPConnect


XPConnect (Cross Platform Connect) is a technology which enables simple interoperation between XPCOM and JavaScript.



Object connection


XPConnect allows JavaScript objects to transparently access and manipulate XPCOM objects. It also enables JavaScript objects to present XPCOM compliant interfaces to be called by XPCOM objects. A main goal is that objects communicating from either side of an XPCOM style interface should not generally need to know or care about the implementation language of the object on the other side of the interface.


XPConnect's primary reason for existence is to replace handwritten code used in places where native code needs to interact with JavaScript code. An example is the DOM module.



Security


Full privileges are only granted by default to chrome scripts, i.e. scripts that are part of the application or of an extension. For remote HTML/XHTML/XUL documents, most XPCOM objects are not accessible by the scripts as they have limited privileges due to security reasons. Even if they are accessible (e.g. the XMLHttpRequest object), the usual security restrictions can also be found (e.g. cannot open URLs of other domains).


Mozilla was already using XPCOM to define the interfaces to many objects implemented in C++. Each interface was defined by an IDL file, and run through an IDL compiler that produced header files and a language-neutral type library that was a binary representation of the interface. This binary described the interface, the methods, the parameters, the data structures and enumerations.


XPConnect uses the type library information to marshal calls between different thread contexts and between JavaScript and natively compiled C++. XPConnect is used extensively throughout Mozilla. Starting with Netscape 6.1 and Mozilla 0.9.2, NPAPI was extended, so that a plugin could return a scriptable interface to itself and XPConnect would marshal calls to it from JavaScript and the C++ implementation.


XPConnect has no Java dependency. However, the technology is based on XPCOM. Thus the plugin developer must be familiar with reference counting, interfaces and IDL to implement scripting. The dependency on XPCOM led to certain dynamic linking issues (e.g. the fragile base class problem) which had to be solved before the plugin would work correctly with different browsers. XPCOM has since been changed to supply a statically linked version to address such issues. This approach also requires an .xpt file to be installed next to the dynamic-link library (DLL); otherwise the plugin appears to work, but the scripting does not, causing confusion.



NPRuntime


At the end of 2004, all major browser companies using NPAPI agreed on NPRuntime[6] as an extension to the original NPAPI to supply scripting, via an API that is similar in style to the old C-style NPAPI and is independent of other browser technologies like Java or XPCOM. It is only supported by Firefox ESR (Extended Support Release) and Safari.



Support/deprecation


Because of the age of the API, security issues, and adoption of alternative technologies such as HTML5, software vendors began to phase out NPAPI support in 2013.[7][8]



  • Internet Explorer versions 3 through 5.5 SP2 supported NPAPI, allowing plugins that functioned in Netscape Navigator to function in Internet Explorer. Support came via a small ActiveX control (named "plugin.ocx") that acted as a shim between ActiveX and the NPAPI plugin. Microsoft dropped support in version 5.5 SP2 onwards for security reasons.[9][10][11][12]


  • Google Chrome 45, in September 2015, permanently dropped all NPAPI support from all platforms.[13] In September 2013, Google announced that it would phase out NPAPI support in its Google Chrome browser during 2014, stating that "[its] 90s-era architecture has become a leading cause of hangs, crashes, security incidents, and code complexity".[14][15] In May 2014, NPAPI support was removed from the Linux version of Chrome 35 and later.[16] In April 2015, Chrome for Windows and OS X (versions 42 and later) disabled NPAPI support by default. However, until September 2015, users could re-enable NPAPI.


  • Opera dropped support with version 37 in May 2016.[citation needed]


  • Firefox release 52.0 in March 2017 removed all support for NPAPI except for Flash.[17][18][19] Meanwhile, the ESR channel retained general support for this feature with version 52esr being the last NPAPI resort. Firefox 69.0 will disable the Flash NPAPI by default. [20][21]


  • Safari has dropped support for all NPAPI plugins except for Flash with version 12 released in September 2018.[22]

The following list of web browsers support all NPAPI plugins:[citation needed]


  • 360 Secure Browser

  • Basilisk


  • Camino (discontinued)

  • CometBird

  • GNOME Web

  • GNU IceCat

  • Konqueror

  • K-Meleon

  • Maxthon

  • Midori


  • Mozilla Application Suite (discontinued)


  • Netscape Communicator (discontinued)


  • Netscape Navigator (discontinued)


  • Odyssey Web Browser (discontinued)

  • Pale Moon

  • SeaMonkey

  • Tor Browser

  • UC Browser

  • Uzbl


  • Waterfox (Allowing running of all 64-bit NPAPI plugins)


Plugins


The following is a list of NPAPI-based plugins:



  • Adobe Acrobat Viewer

  • Adobe Flash Player

  • Adobe Shockwave Player

  • Apple QuickTime

  • DivX Web Player

  • Java Runtime Environment

  • Microsoft Silverlight


  • Unity Web Player


  • Windows Genuine Advantage plugin for Firefox


Similar technologies



ActiveX



Internet Explorer and browsers based on Internet Explorer use ActiveX controls, ActiveX documents and ActiveX scripting to offer in-page extensibility on par with NPAPI. Although commonly associated with Internet Explorer, ActiveX is integration technology that allows any computer program to integrate parts of other computer programs that support such integration.[23] Internet Explorer, however, is discontinued and its replacement, Microsoft Edge, does not support ActiveX.



PPAPI



On 12 August 2009, a page on Google Code[24] introduced a new project, Pepper, with the associated Pepper Plugin API (PPAPI);[25] PPAPI is a derivative of NPAPI aimed to make plugins more portable and more secure.[26] This extension is designed specifically to ease the implementation of out-of-process plugin execution.


PPAPI was initially only supported by Google Chrome and Chromium. Later, other Chromium-based browsers such as Opera and Vivaldi, also added PPAPI plugin support.


In February 2012, Adobe Systems announced that future Linux versions of Adobe Flash Player would be provided only via PPAPI. The previous release, Flash Player 11.2, with NPAPI support, would receive security updates for five years.[27] In August 2016, Adobe announced that, contrary to their previous statement, it would again support the NPAPI Flash Player on Linux and keep releasing new versions of it.[28]



See also



  • Netscape Server Application Programming Interface (NSAPI)


References




  1. ^ Flanagan, David. (2006). JavaScript: the Definitive Guide. O'Reilly, Sebastopol, California.


  2. ^ For technical details, see the Mozilla Developer Documentation on LiveConnect.


  3. ^ "442399 – remove LiveConnect from the tree". mozilla.org..mw-parser-output cite.citationfont-style:inherit.mw-parser-output .citation qquotes:"""""""'""'".mw-parser-output .citation .cs1-lock-free abackground:url("//upload.wikimedia.org/wikipedia/commons/thumb/6/65/Lock-green.svg/9px-Lock-green.svg.png")no-repeat;background-position:right .1em center.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration abackground:url("//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/Lock-gray-alt-2.svg/9px-Lock-gray-alt-2.svg.png")no-repeat;background-position:right .1em center.mw-parser-output .citation .cs1-lock-subscription abackground:url("//upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Lock-red-alt-2.svg/9px-Lock-red-alt-2.svg.png")no-repeat;background-position:right .1em center.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registrationcolor:#555.mw-parser-output .cs1-subscription span,.mw-parser-output .cs1-registration spanborder-bottom:1px dotted;cursor:help.mw-parser-output .cs1-ws-icon abackground:url("//upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Wikisource-logo.svg/12px-Wikisource-logo.svg.png")no-repeat;background-position:right .1em center.mw-parser-output code.cs1-codecolor:inherit;background:inherit;border:inherit;padding:inherit.mw-parser-output .cs1-hidden-errordisplay:none;font-size:100%.mw-parser-output .cs1-visible-errorfont-size:100%.mw-parser-output .cs1-maintdisplay:none;color:#33aa33;margin-left:0.3em.mw-parser-output .cs1-subscription,.mw-parser-output .cs1-registration,.mw-parser-output .cs1-formatfont-size:95%.mw-parser-output .cs1-kern-left,.mw-parser-output .cs1-kern-wl-leftpadding-left:0.2em.mw-parser-output .cs1-kern-right,.mw-parser-output .cs1-kern-wl-rightpadding-right:0.2em


  4. ^ "517355 – Restore OJI, Liveconnect and the JEP on the 1.9.2 branch on OS X". mozilla.org.


  5. ^ "Release Notes for the Next-Generation Java™ Plug-In Technology (introduced in Java SE 6 update 10)". sun.com.


  6. ^ "Scripting plugins". Mozilla Developer Network.


  7. ^ ""Change in support for Acrobat and Reader plug-ins in modern web browsers"". Adobe. 8 February 2016.


  8. ^ "Oracle deprecates the Java browser plugin, prepares for its demise". Ars Technica. 28 January 2016. Retrieved 15 April 2016.


  9. ^ "Netscape-Style Plug-ins Do Not Work After Upgrading Internet Explorer". Support (3.3 ed.). Microsoft. 27 July 2007.


  10. ^ Giannandrea, J. (4 September 2001). "Microsoft breaks Web Plugins in Windows XP". meer.net. Archived from the original on 16 October 2007.


  11. ^ "Description of Internet Explorer Support for Netscape-Style Plug-ins". Support (3.4 ed.). Microsoft. 31 January 2007.


  12. ^ "Microsoft Security Bulletin MS03-015 – Critical". Security TechCenter. Microsoft. 23 April 2003.


  13. ^ "The final countdown for NPAPI". Chromium Blog.


  14. ^ Google will start blocking most Netscape Plug-In API plug-ins in January 2014, will whitelist Silverlight, Unity & others". TechCrunch. 23 September 2013.


  15. ^ "Google looks to drop Netscape Plugin API support in Chrome, starting with blocking most plugins in January 2014". The Next Web. 23 September 2013.


  16. ^ "Update on NPAPI deprecation". Chromium Blog. 27 May 2014.


  17. ^ "Release Notes for Firefox 52.0".


  18. ^ "Firefox dropping NPAPI plugins by the end of 2016—except for Flash". Firefox Site Compatibility. 4 October 2016. Retrieved 25 January 2017.


  19. ^ "Why do Java, Silverlight, Adobe Acrobat and other plugins no longer work?". Mozilla support. Archived from the original on 2017-03-07. Retrieved 2017-03-06.


  20. ^ "1519434 - Disable Flash support by default in Firefox 69". bugzilla.mozilla.org. Retrieved 2019-01-14.


  21. ^ "Firefox 69: Flash disabled by default - gHacks Tech News". www.ghacks.net. Retrieved 2019-01-14.


  22. ^ Clover, Juli (September 17, 2018). "Apple Releases Safari 12 for macOS Sierra and macOS High Sierra". MacRumors.


  23. ^ "Description of ActiveX Technologies". Support. Microsoft. 19 January 2007.


  24. ^ "ppapi". Google Code. Google. Archived from the original on 2010-07-02.


  25. ^ "Getting Started: Background and Basics – The Chromium Projects". chromium.org.


  26. ^ "Concepts - ppapi - Important concepts for working with PPAPI. - Pepper Plugin API – Google Project Hosting". google.com.


  27. ^ "Adobe and Google Partnering for Flash Player on Linux". adobe.com.


  28. ^ Campbell, Chris (31 August 2016). "Beta News – Flash Player NPAPI for Linux". Adobe AIR and Adobe Flash Player Team Blog. Adobe Systems. Retrieved 8 September 2016.




External links



  • Plugin development documentation on Mozilla Developer Center, including the NPAPI API


  • An ActiveX control that hosts plugins – a replacement for plugin.ocx that was removed from Internet Explorer.

  • Book on Programming Netscape Plug-Ins by Zan Oliphant

  • Nixysa: A glue code generation framework for NPAPI plugins. Apache 2.0 license.


  • NPAPI Tutorial Building a Firefox Plugin (Part two, Part three, Part four)

  • Opera 15+ extensions documentation










Popular posts from this blog

How to check contact read email or not when send email to Individual?

Displaying single band from multi-band raster using QGIS

How many registers does an x86_64 CPU actually have?