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.

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.
  • 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:

Plugins

The following is a list of NPAPI-based plugins:

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

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.
  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

Add-on (Mozilla)

Add-on is the Mozilla term for software modules that can be added to the Firefox web browser and related applications. There are three types: extensions, themes, and plug-ins. Mozilla hosts them on its official add-on website.In 2017, Mozilla enacted major changes to the application programming interface (API) for add-ons in Firefox. The long-standing XUL and XPCOM capabilities were replaced by an API modeled after Google Chrome's; Firefox extensions are now largely compatible with their Chrome counterparts. Plug-ins were deprecated, with the exception of the Adobe Flash Player.

Adobe Flash

Adobe Flash is a deprecated multimedia software platform used for production of animations, rich Internet applications, desktop applications, mobile applications, mobile games and embedded web browser video players. Flash displays text, vector graphics and raster graphics to provide animations, video games and applications. It allows streaming of audio and video, and can capture mouse, keyboard, microphone and camera input. Related development platform Adobe AIR continues to be supported.

Artists may produce Flash graphics and animations using Adobe Animate. Software developers may produce applications and video games using Adobe Flash Builder, FlashDevelop, Flash Catalyst, or any text editor when used with the Apache Flex SDK.

End-users can view Flash content via Flash Player (for web browsers), AIR (for desktop or mobile apps) or third-party players such as Scaleform (for video games). Adobe Flash Player (supported on Microsoft Windows, macOS and Linux) enables end-users to view Flash content using web browsers. Adobe Flash Lite enabled viewing Flash content on older smartphones, but has been discontinued and superseded by Adobe AIR.

The ActionScript programming language allows the development of interactive animations, video games, web applications, desktop applications and mobile applications. Programmers can implement Flash software using an IDE such as Adobe Animate, Adobe Flash Builder, Adobe Director, FlashDevelop and Powerflasher FDT. Adobe AIR enables full-featured desktop and mobile applications to be developed with Flash and published for Windows, macOS, Android, iOS, Xbox One, PlayStation 4, Nintendo Wii U, and Switch.

Although Flash was previously a dominant platform for online multimedia content, it is slowly being abandoned as Adobe favors a transition to HTML5. Flash Player has been deprecated and has an official end-of-life at the end of 2020. However, Adobe will continue to develop Adobe AIR, a related technology for building stand-alone applications and games.

Basilisk (web browser)

Basilisk is an open-source web browser created by the developers of the Pale Moon browser. There are releases for Microsoft Windows and Linux, and an unofficial build for macOS.First released in 2017, Basilisk is a perpetual beta intended to refine the UXP codebase it is built from. Pale Moon and other applications are also built from this codebase.Like Pale Moon, Basilisk is a fork of Firefox with substantial divergence. Basilisk has the user interface of the Firefox version 29–56 era (unlike Pale Moon, which has the Firefox 4–28 interface).

For add-ons, Basilisk has roughly similar support as Pale Moon for XUL/XPCOM extensions and NPAPI plugins, all of which are no longer supported in Firefox. Basilisk also had experimental support for current Firefox WebExtensions, but this was removed in February 2019.Unlike Pale Moon, Basilisk has limited support for Widevine DRM and WebRTC.

Comparison of web browsers

The following tables compare general and technical information for a number of web browsers.

Evercookie

Evercookie is a JavaScript-based application created by Samy Kamkar which produces zombie cookies in a web browser that are intentionally difficult to delete. In 2013, a top-secret NSA document was leaked by Edward Snowden, citing Evercookie as a method of tracking Tor users.

Google Chrome

Google Chrome (commonly known simply as Chrome) is a cross-platform web browser developed by Google. It was first released in 2008 for Microsoft Windows, and was later ported to Linux, macOS, iOS, and Android. The browser is also the main component of Chrome OS, where it serves as the platform for web apps.

Most of Chrome's source code comes from Google's open-source Chromium project, but Chrome is licensed as proprietary freeware. WebKit was the original rendering engine, but Google eventually forked it to create the Blink engine; all Chrome variants except iOS now use Blink.As of April 2019, StatCounter estimates that Chrome has a 70.05% worldwide browser market share on traditional PCs and 63.16% share across all platforms. Because of this success, Google has expanded the "Chrome" brand name to other products: Chrome OS, Chromecast, Chromebook, Chromebit, Chromebox, and Chromebase.

Google Native Client

Google Native Client (NaCl) is a sandboxing technology for running either a subset of Intel x86, ARM, or MIPS native code, or a portable executable, in a sandbox. It allows safely running native code from a web browser, independent of the user operating system, allowing web apps to run at near-native speeds, which aligns with Google's plans for Chrome OS. It may also be used for securing browser plugins, and parts of other applications or full applications such as ZeroVM.To demonstrate the readiness of the technology, on 9 December 2011, Google announced the availability of several new Chrome-only versions of games known for their rich and processor-intensive graphics, including Bastion (no longer supported on the Chrome Web Store). NaCl runs hardware-accelerated 3D graphics (via OpenGL ES 2.0), sandboxed local file storage, dynamic loading, full screen mode, and mouse capture. There are also plans to make NaCl available on handheld devices.Portable Native Client (PNaCl) is an architecture-independent version. PNaCl apps are compiled ahead-of-time. PNaCl is recommended over NaCl for most use cases. The general concept of NaCl (running native code in web browser) has been implemented before in ActiveX, which, while still in use, has full access to the system (disk, memory, user-interface, registry, etc.). Native Client avoids this issue by using sandboxing.

An alternative of sorts to NaCl is asm.js, which also allows applications written in C or C++ to be compiled to run in the browser (at more than half the native speed), and also supports ahead-of-time compilation, but is a subset of JavaScript and hence backwards-compatible with browsers that do not support it directly. Another alternative (while it may initially be powered by PNaCl) is WebAssembly.

On October 12, 2016, a comment on the Chromium issue tracker indicated that Google's Pepper and Native Client teams had been destaffed. On May 30, 2017, Google announced deprecation of PNaCl in favor of WebAssembly. Although initially Google planned to remove PNaCl in first quarter of 2018, the removal is currently planned in the second quarter of 2019 (except for Chrome Apps).

Komodo IDE

Komodo IDE is an integrated development environment (IDE) for dynamic programming languages. It was introduced in May 2000. Many of Komodo's features are derived from an embedded Python interpreter.Komodo IDE uses the Mozilla and Scintilla code base as they share many features and support the same languages (including Python, Perl, PHP, Ruby, Tcl, SQL, Smarty, CSS, HTML and XML) and operating systems (Linux, OS X, and Windows). The editor component is implemented using the Netscape Plugin Application Programming Interface (NPAPI), with the Scintilla view embedded in the XML User Interface Language (XUL) interface in the same manner as a web browser plugin.

Komodo IDE has an open-source counterpart called Komodo Edit. Both share much of the same code base, Komodo IDE containing the more advanced IDE features such as debugging, unit testing, etc.

Both Komodo Edit and IDE support user customizing via plug-ins and macros. Komodo plug-ins are based on Mozilla Add-ons and extensions can be searched for, downloaded, configured, installed and updated from within the application. Available extensions include a Document Object Model (DOM) inspector, pipe features, additional language support and user interface enhancements.

Komodo IDE has features such as integrated debugger support, DOM viewer, interactive shells, source code control integration, and the ability to select the engine used to run regular expressions, to ensure compatibility with the final deployment target. The commercial version also adds code browsing, a database explorer, collaboration, support for many popular source code control systems, and more. Independent implementations of some of these features, such as the database editor, git support, and remote FTP file access, are available in the free version via Komodo Edit's plugin system.

Local shared object

A local shared object (LSO), commonly called a Flash cookie (due to its similarity with an HTTP cookie), is a piece of data that websites which use Adobe Flash may store on a user's computer. Local shared objects have been used by all versions of Flash Player (developed by Macromedia, which was later acquired by Adobe Systems) since version 6.Flash cookies, which can be stored or retrieved whenever a user accesses a page containing a Flash application, are a form of local storage. Similar to that of cookies, they can be used to store user preferences, save data from Flash games, or to track users' Internet activity. LSOs have been criticised as a breach of browser security, but there are now browser settings and addons to limit the duration of their storage.

Microsoft Silverlight

Microsoft Silverlight (or simply Silverlight) is a deprecated application framework for writing and running rich Internet applications, similar to Adobe Flash. A plugin for Silverlight is still available for some browsers. While early versions of Silverlight focused on streaming media, later versions supported multimedia, graphics, and animation and gave developers support for CLI languages and development tools. Silverlight was also one of the two application development platforms for Windows Phone, but web pages that use Silverlight did not run on the Windows Phone or Windows Mobile versions of Internet Explorer, as there was no Silverlight plugin for Internet Explorer on those platforms.

Mozdev.org

mozdev.org is a website that offers free project hosting, and software development tools to the Mozilla community. Many Firefox extensions are hosted on the site, but Thunderbird and SeaMonkey extensions and stand-alone Mozilla-based applications can also be found. It is free to set up a project there, but all development must be done using a license approved by the OSI. Over 250 projects are currently under active development on Mozdev.

Mozilla Calendar Project

The Mozilla Calendar Project is the name for the Mozilla project that led to the development of Sunbird calendar application and the Lightning integrated calendar. Sunbird and Lightning are both free software, released under the Mozilla tri-license: the Mozilla Public License, the GNU General Public License and the GNU Lesser General Public License.

Pale Moon (web browser)

Pale Moon is an open-source web browser with an emphasis on customizability; its motto is "Your browser, Your way". There are official releases for Microsoft Windows and Linux, an unofficial build for macOS, and contributed builds for various platforms.Pale Moon is a fork of Firefox with substantial divergence. The main differences are the user interface, add-on support, and running in single-process mode. Pale Moon retains the highly customizable user interface of the Firefox version 4–28 era. It also continues to support some types of add-ons that are no longer supported by Firefox.

Pipelight

Pipelight is a compatibility layer that allows NPAPI plugins designed for Windows to run on Linux. It is based on a modified version of Wine. It currently supports Silverlight, Flash Player, Unity 3D, and Widevine. There is experimental support for additional plugins such as Shockwave. Pipelight requires that the browser support NPAPI plugins, which some browsers (notably newer versions of Chrome and Opera) don't support. Firefox dropped NPAPI support in version 52.

Shumway (software)

Shumway is a discontinued media player for playing SWF files. It was intended as an open-source replacement for Adobe Flash Player. It is licensed under Apache and SIL Open Font License (OFL). Mozilla started development on it in 2012. It is an improvement on an earlier project called Gordon; these names are an allusion to Flash Gordon and Gordon Shumway.Shumway renders Flash contents by translating Flash file contents to HTML5 elements, and running an ActionScript interpreter in JavaScript. It supports both AVM1 and AVM2, and ActionScript versions 1, 2, and 3.

Development of Shumway has effectively ceased. Although the project remains available on GitHub (see External links), in February 2016, the project was moved to the "Firefox Graveyard" and is thus considered defunct from Mozilla's point of view. Mozilla's strategy for the time being is to continue to support Adobe Flash, as an exception to its general policy of ceasing support for NPAPI plugins by the end of 2016.

Timberwolf (web browser)

Timberwolf was a port of the Firefox web browser to the AmigaOS 4 platform.

Waterfox

Waterfox is an open-source web browser for x64 and ARM64 systems. It is intended to be speedy and ethical, and maintain support for legacy extensions dropped by Firefox, from which it is forked. There are official releases for Windows (including a portable version), macOS, Linux and Android.

Waterfox is based on Firefox and is compiled using various compilers and using Intel's Math Kernel Library, Streaming SIMD Extensions 3 and Advanced Vector Extensions. Linux builds are built with Clang. Waterfox is continuing to support the long-standing XUL and XPCOM add-on capability that Firefox removed in version 57.

Web-based VoIP

Web-based VoIP is the integration of voice over IP technologies into the facilities and methodologies of the World-Wide Web. It enables digital communication sessions between Web users, or to users of traditional telecommunication services.

Instead of using dedicated, hard-ware based VoIP devices, such as IP phones, analog telephone adapters, or integrated VoIP/Internet access routers, services are provided via a web page and the facilities of the user's computer or hand-held device for accessing and operating a locally attached head set, and microphone. This is assisted by various software components such as Flash, Active X, Silverlight, Java applet or browser plugins like NPAPI.

Using click-to-call, for example, a web user may click on a telephone number, or some other suitable icon, embedded in a corporate web site to initiate a web-based telephone call with a customer service representative without leaving the web site or using any other addition telephony equipment.

XBL

XBL (XML Binding Language) is an XML-based markup language for altering the behavior of XUL widgets. It has only ever been implemented in the Mozilla codebase.

Mozilla deprecated XBL in 2017 and is now in the process of removing it from the codebase, which is primarily used to build the Firefox web browser. However, the UXP fork of the codebase intends to continue supporting XBL indefinitely.

Server-side
Client-side
Topics
Browser versions
E-mail clients
Other components
Server software
Web services
People
See also

This page is based on a Wikipedia article written by authors (here).
Text is available under the CC BY-SA 3.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.